ROOT logo
//*-- AUTHOR  : Georgy Kornakov
//*-- created : 29/04/2013

//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
//  HRpcLookupGeom
//
//  Container class wich provides access to the information
//  stored in the RpcLookup container and mapping from cell
//  to channel.
//
//  Needed for recalculation of the charge offsets if the RAW
//  category is not accesible but CAL it is.
//
//  A write function is only privided for an Ascii I/O.
//
/////////////////////////////////////////////////////////////


#include "hrpclookupgeom.h"
#include "hrpctrb2lookup.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hrpcdetector.h"

#include "hpario.h"
#include "hdetpario.h"
#include "hmessagemgr.h"
#include "TClass.h"

ClassImp(HRpcLookupGCell)
ClassImp(HRpcLookupGCol)
ClassImp(HRpcLookupGSec)
ClassImp(HRpcLookupGeom)


HRpcLookupGCol::HRpcLookupGCol(Int_t n) {
  // constructor creates an array of pointers of type
  // HRpcLookupGCell (array of all cells in a layer)
  array = new TObjArray(n);
  for (Int_t i = 0; i < n; i++) {
    array->AddAt(new HRpcLookupGCell(),i);
  }
}

HRpcLookupGCol::~HRpcLookupGCol() {
  // destructor
  array->Delete();
  delete array;
}

HRpcLookupGSec::HRpcLookupGSec(Int_t n) {
  // constructor creates an array of pointers of type
  // HRpcLookupGCol
  array = new TObjArray(n);
  for(Int_t i = 0; i < n; i++) array->AddAt(new HRpcLookupGCol(32),i);
}

HRpcLookupGSec::~HRpcLookupGSec() {
  // destructor
  array->Delete();
  delete array;
}

HRpcLookupGeom::HRpcLookupGeom(const Char_t* name,const Char_t* title,
                             const Char_t* context,Int_t n)
              : HParSet(name,title,context) {
  // constructor creates an array of pointers of type HRpcLookupGSec
  // creates the container RpcTrb2Lookup
  array = new TObjArray(n);
  for(Int_t i=0;i<n;i++) array->AddAt(new HRpcLookupGSec(6),i);
  gHades->getRuntimeDb()->getContainer("RpcTrb2Lookup");
}

HRpcLookupGeom::~HRpcLookupGeom() {
  // destructor
  array->Delete();
  delete array;
}

Bool_t HRpcLookupGeom::init(HParIo*) {
  // intitializes the container from RpcTrb2Lookup container
  HRpcTrb2Lookup* p =
     (HRpcTrb2Lookup*)gHades->getRuntimeDb()->findContainer("RpcTrb2Lookup");
  if (!p) return kFALSE;
  Int_t v1=p->getInputVersion(1);
  Int_t v2=p->getInputVersion(2);
  if (v1==versions[1] && v2==versions[2]) return kTRUE;
  // needs reinitialization
  clear();

  Int_t sector, column, cell;
  Char_t side;

  for(Int_t b = 0; b<p->getSize();b++ ){
      HRpcTrb2LookupBoard* rBoard = (*p)[b];
      if(!rBoard)continue;
      for(Int_t c = 0; c< rBoard->getSize(); c++) {
	  HRpcTrb2LookupChan& rChan = (*rBoard)[c];
          if(&rChan==0) continue;

	  sector = rChan.getSector();
	  column = rChan.getColumn();
	  cell   = rChan.getCell();
          side   = rChan.getSide();

	  if(sector<0 || column<0 || cell<0 || cell>=32) continue;

	  HRpcLookupGCell& fRcell = (*this)[sector][column][cell];
          if( side == 'l')
	      fRcell.setLeftFEEAddress(  rChan.getFeAddress() );
          if( side == 'r')
	      fRcell.setRightFEEAddress( rChan.getFeAddress() );

      }
  }
  versions[1]=v1;
  versions[2]=v2;
  changed=kTRUE;                          
  return kTRUE;
}

Int_t HRpcLookupGeom::write(HParIo* output) {
  // only to an output if the output is an ascii file
  if (strcmp(output->IsA()->GetName(),"HParAsciiFileIo")==0) {
    HDetParIo* out=output->getDetParIo("HRpcParIo");
    if (out) return out->write(this);
  }
  changed=kFALSE;
  return 0;
}

void HRpcLookupGeom::putAsciiHeader(TString& header) {
  // puts the ascii header to the string used in HRpcParAsciiFileIo
  header=
    "# Rpc lookup table (geometry->hardware)\n"
    "# Format:\n"
    "# sector column cell leftFEEadd rightFEEadd\n";
}

Bool_t HRpcLookupGeom::writeline(Char_t *buf, Int_t sec, Int_t col, Int_t cell) {
    //writes one line to the buffer used by ascii file I/O
    HRpcLookupGCell& cellAdd=(*this)[sec][col][cell];
    if(cellAdd.getRightFEEAddress()<0 || cellAdd.getLeftFEEAddress()<0) return kFALSE;
    sprintf(buf,"%1i %1i %1i %i %i\n",
            sec, col, cell, cellAdd.getLeftFEEAddress(), cellAdd.getRightFEEAddress() );
    return kTRUE;
}

void HRpcLookupGeom::clear() {
  // clears the container
   for( Int_t s = 0; s < 6; s++) {
     HRpcLookupGSec& sec = (*this)[s];
    for( Int_t c = 0; c< 6; c++) {
      HRpcLookupGCol& col = sec[c];
      for( Int_t ce = 0; ce < 32; ce++) {
	  HRpcLookupGCell& cell = col[ce];
          cell.clear();
      }
    }
   }
  setStatic(kFALSE);
  resetInputVersions();
}

Int_t HRpcLookupGCell::getLeftMBOnum() {
    if(fLeftFeeAddress<0) return -1;
    Int_t trbnum    = fLeftFeeAddress/1000000;
    Int_t mbonum    = (fLeftFeeAddress-trbnum*1000000)/10000;
    return mbonum;
}
Int_t HRpcLookupGCell::getLeftDBOnum() {
    if(fLeftFeeAddress<0) return -1;
    Int_t  trbnum    = fLeftFeeAddress/1000000;
    Int_t  mbonum    = (fLeftFeeAddress-trbnum*1000000)/10000;
    Int_t  dbonum    = (fLeftFeeAddress-trbnum*1000000-mbonum*10000)/100;
    return dbonum;
}
Int_t HRpcLookupGCell::getLeftTRBnum() {
    if(fLeftFeeAddress<0) return -1;
    Int_t trbnum    = fLeftFeeAddress/1000000;
    return trbnum;
}
Int_t HRpcLookupGCell::getRightMBOnum() {
    if(fRightFeeAddress<0) return -1;
    Int_t trbnum    = fRightFeeAddress/1000000;
    Int_t mbonum    = (fRightFeeAddress-trbnum*1000000)/10000;
    return mbonum;
}
Int_t HRpcLookupGCell::getRightDBOnum() {
    if(fRightFeeAddress<0) return -1;
    Int_t  trbnum    = fRightFeeAddress/1000000;
    Int_t  mbonum    = (fRightFeeAddress-trbnum*1000000)/10000;
    Int_t  dbonum    = (fRightFeeAddress-trbnum*1000000-mbonum*10000)/100;
    return dbonum;
}
Int_t HRpcLookupGCell::getRightTRBnum() {
    if(fRightFeeAddress<0) return -1;
    Int_t trbnum    = fRightFeeAddress/1000000;
    return trbnum;
}
void HRpcLookupGCell::getTrbMboDboLeftNum(Int_t& trbnum,Int_t& mbonum,Int_t& dbonum) {
    if(fLeftFeeAddress < 0) {
	trbnum=-1;
	mbonum=-1;
	dbonum=-1;
    }
    else {
	trbnum    = fLeftFeeAddress/1000000;
	mbonum    = (fLeftFeeAddress-trbnum*1000000)/10000;
	dbonum    = (fLeftFeeAddress-trbnum*1000000-mbonum*10000)/100;
    }
    //dboInput  = FeAddress-trbNum*1000000-mboNum*10000-dboNum*100;
}
void HRpcLookupGCell::getTrbMboDboRightNum(Int_t& trbnum,Int_t& mbonum,Int_t& dbonum) {
    if(fRightFeeAddress < 0) {
	trbnum=-1;
	mbonum=-1;
	dbonum=-1;
    }
    else {
	trbnum    = fRightFeeAddress/1000000;
	mbonum    = (fRightFeeAddress-trbnum*1000000)/10000;
	dbonum    = (fRightFeeAddress-trbnum*1000000-mbonum*10000)/100;
    }
    //dboInput  = FeAddress-trbNum*1000000-mboNum*10000-dboNum*100;
}
void HRpcLookupGCell::getLeftRightRegAdd(Int_t sec, Int_t& leftRegNum, Int_t& rightRegNum) {
    Int_t ltrbnum, lmbonum, ldbonum;
    Int_t rtrbnum, rmbonum, rdbonum;
    this->getTrbMboDboRightNum(rtrbnum, rmbonum, rdbonum);
    this->getTrbMboDboLeftNum(ltrbnum, lmbonum, ldbonum);
    if(rtrbnum<0 || rmbonum<0 || rdbonum<0 || ltrbnum<0 || lmbonum<0 || ldbonum<0 ) {
	leftRegNum  = -1;
	rightRegNum = -1;
    } else {
	leftRegNum  = sec*64 + lmbonum*16  + ltrbnum*4 + ldbonum/2;
	rightRegNum = sec*64 + rmbonum*16  + rtrbnum*4 + rdbonum/2;
    }
}
 hrpclookupgeom.cc:1
 hrpclookupgeom.cc:2
 hrpclookupgeom.cc:3
 hrpclookupgeom.cc:4
 hrpclookupgeom.cc:5
 hrpclookupgeom.cc:6
 hrpclookupgeom.cc:7
 hrpclookupgeom.cc:8
 hrpclookupgeom.cc:9
 hrpclookupgeom.cc:10
 hrpclookupgeom.cc:11
 hrpclookupgeom.cc:12
 hrpclookupgeom.cc:13
 hrpclookupgeom.cc:14
 hrpclookupgeom.cc:15
 hrpclookupgeom.cc:16
 hrpclookupgeom.cc:17
 hrpclookupgeom.cc:18
 hrpclookupgeom.cc:19
 hrpclookupgeom.cc:20
 hrpclookupgeom.cc:21
 hrpclookupgeom.cc:22
 hrpclookupgeom.cc:23
 hrpclookupgeom.cc:24
 hrpclookupgeom.cc:25
 hrpclookupgeom.cc:26
 hrpclookupgeom.cc:27
 hrpclookupgeom.cc:28
 hrpclookupgeom.cc:29
 hrpclookupgeom.cc:30
 hrpclookupgeom.cc:31
 hrpclookupgeom.cc:32
 hrpclookupgeom.cc:33
 hrpclookupgeom.cc:34
 hrpclookupgeom.cc:35
 hrpclookupgeom.cc:36
 hrpclookupgeom.cc:37
 hrpclookupgeom.cc:38
 hrpclookupgeom.cc:39
 hrpclookupgeom.cc:40
 hrpclookupgeom.cc:41
 hrpclookupgeom.cc:42
 hrpclookupgeom.cc:43
 hrpclookupgeom.cc:44
 hrpclookupgeom.cc:45
 hrpclookupgeom.cc:46
 hrpclookupgeom.cc:47
 hrpclookupgeom.cc:48
 hrpclookupgeom.cc:49
 hrpclookupgeom.cc:50
 hrpclookupgeom.cc:51
 hrpclookupgeom.cc:52
 hrpclookupgeom.cc:53
 hrpclookupgeom.cc:54
 hrpclookupgeom.cc:55
 hrpclookupgeom.cc:56
 hrpclookupgeom.cc:57
 hrpclookupgeom.cc:58
 hrpclookupgeom.cc:59
 hrpclookupgeom.cc:60
 hrpclookupgeom.cc:61
 hrpclookupgeom.cc:62
 hrpclookupgeom.cc:63
 hrpclookupgeom.cc:64
 hrpclookupgeom.cc:65
 hrpclookupgeom.cc:66
 hrpclookupgeom.cc:67
 hrpclookupgeom.cc:68
 hrpclookupgeom.cc:69
 hrpclookupgeom.cc:70
 hrpclookupgeom.cc:71
 hrpclookupgeom.cc:72
 hrpclookupgeom.cc:73
 hrpclookupgeom.cc:74
 hrpclookupgeom.cc:75
 hrpclookupgeom.cc:76
 hrpclookupgeom.cc:77
 hrpclookupgeom.cc:78
 hrpclookupgeom.cc:79
 hrpclookupgeom.cc:80
 hrpclookupgeom.cc:81
 hrpclookupgeom.cc:82
 hrpclookupgeom.cc:83
 hrpclookupgeom.cc:84
 hrpclookupgeom.cc:85
 hrpclookupgeom.cc:86
 hrpclookupgeom.cc:87
 hrpclookupgeom.cc:88
 hrpclookupgeom.cc:89
 hrpclookupgeom.cc:90
 hrpclookupgeom.cc:91
 hrpclookupgeom.cc:92
 hrpclookupgeom.cc:93
 hrpclookupgeom.cc:94
 hrpclookupgeom.cc:95
 hrpclookupgeom.cc:96
 hrpclookupgeom.cc:97
 hrpclookupgeom.cc:98
 hrpclookupgeom.cc:99
 hrpclookupgeom.cc:100
 hrpclookupgeom.cc:101
 hrpclookupgeom.cc:102
 hrpclookupgeom.cc:103
 hrpclookupgeom.cc:104
 hrpclookupgeom.cc:105
 hrpclookupgeom.cc:106
 hrpclookupgeom.cc:107
 hrpclookupgeom.cc:108
 hrpclookupgeom.cc:109
 hrpclookupgeom.cc:110
 hrpclookupgeom.cc:111
 hrpclookupgeom.cc:112
 hrpclookupgeom.cc:113
 hrpclookupgeom.cc:114
 hrpclookupgeom.cc:115
 hrpclookupgeom.cc:116
 hrpclookupgeom.cc:117
 hrpclookupgeom.cc:118
 hrpclookupgeom.cc:119
 hrpclookupgeom.cc:120
 hrpclookupgeom.cc:121
 hrpclookupgeom.cc:122
 hrpclookupgeom.cc:123
 hrpclookupgeom.cc:124
 hrpclookupgeom.cc:125
 hrpclookupgeom.cc:126
 hrpclookupgeom.cc:127
 hrpclookupgeom.cc:128
 hrpclookupgeom.cc:129
 hrpclookupgeom.cc:130
 hrpclookupgeom.cc:131
 hrpclookupgeom.cc:132
 hrpclookupgeom.cc:133
 hrpclookupgeom.cc:134
 hrpclookupgeom.cc:135
 hrpclookupgeom.cc:136
 hrpclookupgeom.cc:137
 hrpclookupgeom.cc:138
 hrpclookupgeom.cc:139
 hrpclookupgeom.cc:140
 hrpclookupgeom.cc:141
 hrpclookupgeom.cc:142
 hrpclookupgeom.cc:143
 hrpclookupgeom.cc:144
 hrpclookupgeom.cc:145
 hrpclookupgeom.cc:146
 hrpclookupgeom.cc:147
 hrpclookupgeom.cc:148
 hrpclookupgeom.cc:149
 hrpclookupgeom.cc:150
 hrpclookupgeom.cc:151
 hrpclookupgeom.cc:152
 hrpclookupgeom.cc:153
 hrpclookupgeom.cc:154
 hrpclookupgeom.cc:155
 hrpclookupgeom.cc:156
 hrpclookupgeom.cc:157
 hrpclookupgeom.cc:158
 hrpclookupgeom.cc:159
 hrpclookupgeom.cc:160
 hrpclookupgeom.cc:161
 hrpclookupgeom.cc:162
 hrpclookupgeom.cc:163
 hrpclookupgeom.cc:164
 hrpclookupgeom.cc:165
 hrpclookupgeom.cc:166
 hrpclookupgeom.cc:167
 hrpclookupgeom.cc:168
 hrpclookupgeom.cc:169
 hrpclookupgeom.cc:170
 hrpclookupgeom.cc:171
 hrpclookupgeom.cc:172
 hrpclookupgeom.cc:173
 hrpclookupgeom.cc:174
 hrpclookupgeom.cc:175
 hrpclookupgeom.cc:176
 hrpclookupgeom.cc:177
 hrpclookupgeom.cc:178
 hrpclookupgeom.cc:179
 hrpclookupgeom.cc:180
 hrpclookupgeom.cc:181
 hrpclookupgeom.cc:182
 hrpclookupgeom.cc:183
 hrpclookupgeom.cc:184
 hrpclookupgeom.cc:185
 hrpclookupgeom.cc:186
 hrpclookupgeom.cc:187
 hrpclookupgeom.cc:188
 hrpclookupgeom.cc:189
 hrpclookupgeom.cc:190
 hrpclookupgeom.cc:191
 hrpclookupgeom.cc:192
 hrpclookupgeom.cc:193
 hrpclookupgeom.cc:194
 hrpclookupgeom.cc:195
 hrpclookupgeom.cc:196
 hrpclookupgeom.cc:197
 hrpclookupgeom.cc:198
 hrpclookupgeom.cc:199
 hrpclookupgeom.cc:200
 hrpclookupgeom.cc:201
 hrpclookupgeom.cc:202
 hrpclookupgeom.cc:203
 hrpclookupgeom.cc:204
 hrpclookupgeom.cc:205
 hrpclookupgeom.cc:206
 hrpclookupgeom.cc:207
 hrpclookupgeom.cc:208
 hrpclookupgeom.cc:209
 hrpclookupgeom.cc:210
 hrpclookupgeom.cc:211
 hrpclookupgeom.cc:212
 hrpclookupgeom.cc:213
 hrpclookupgeom.cc:214
 hrpclookupgeom.cc:215
 hrpclookupgeom.cc:216
 hrpclookupgeom.cc:217
 hrpclookupgeom.cc:218
 hrpclookupgeom.cc:219
 hrpclookupgeom.cc:220
 hrpclookupgeom.cc:221
 hrpclookupgeom.cc:222
 hrpclookupgeom.cc:223
 hrpclookupgeom.cc:224
 hrpclookupgeom.cc:225
 hrpclookupgeom.cc:226
 hrpclookupgeom.cc:227
 hrpclookupgeom.cc:228
 hrpclookupgeom.cc:229
 hrpclookupgeom.cc:230
 hrpclookupgeom.cc:231
 hrpclookupgeom.cc:232
 hrpclookupgeom.cc:233
 hrpclookupgeom.cc:234
 hrpclookupgeom.cc:235
 hrpclookupgeom.cc:236
 hrpclookupgeom.cc:237
 hrpclookupgeom.cc:238
 hrpclookupgeom.cc:239
 hrpclookupgeom.cc:240
 hrpclookupgeom.cc:241