ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Modified : 25/08/2009 by I. Koenig

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//HMdcLookupGeom
//
//  Container class for lookup parameters to map the hardware
//  tree of the Mdc (sectors, modules, motherboards, TDC,
//  TDC channel) to the geometrie tree (sectors, modules,
//  layer, cell).
//  This information is needed for data mapping from raw
//  level to cal1 level
//
/////////////////////////////////////////////////////////////

#include "hmdclookupgeom.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hmdcdetector.h"
#include "hmdcrawstruct.h"
#include "hpario.h"
#include "hdetpario.h"
#include "hmessagemgr.h"

ClassImp(HMdcLookupChan)
ClassImp(HMdcLookupMoth)
ClassImp(HMdcLookupGMod)
ClassImp(HMdcLookupGSec)
ClassImp(HMdcLookupGeom)

void HMdcLookupChan::Streamer(TBuffer &R__b) {
  // Stream an object of class HMdcLookupChan.
  UInt_t R__s, R__c;
  if (R__b.IsReading()) {
    Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
    TObject::Streamer(R__b);
    R__b >> nLayer;
    R__b >> nCell;
    if (R__v>1) {
      R__b >> readoutSide;
    } else {
      readoutSide='0';
    }
    R__b.CheckByteCount(R__s, R__c, HMdcLookupChan::IsA());
  } else {
    R__c = R__b.WriteVersion(HMdcLookupChan::IsA(), kTRUE);
    TObject::Streamer(R__b);
    R__b << nLayer;
    R__b << nCell;
    R__b << readoutSide;
    R__b.SetByteCount(R__c, kTRUE);
  }
}

HMdcLookupMoth::HMdcLookupMoth(Int_t n, const Text_t* name) {
  // constructor creates an array of pointers of type
  // HMdcLookupChan (array of all Tdc channels on a
  // motherboard)
  SetName(name);
  array = new TObjArray(n);
  for (Int_t i = 0; i < n; i++) {
    array->AddAt(new HMdcLookupChan(),i);
  }
}

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

HMdcLookupGMod::HMdcLookupGMod(Int_t n) {
  // constructor creates an array for the motherboards
  // the array objects of type HMdcLookupMoth are created in the init function
  array = new TObjArray(n);
}

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

void HMdcLookupGMod::createMoth(Int_t moth, Int_t nTdcs, const Char_t* mothName) {
  // creates the array object of type HMdcLookupMoth
  if (moth<array->GetSize()&&array->At(moth)==NULL) {
    array->AddAt(new HMdcLookupMoth(nTdcs,mothName),moth);
  }
}

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

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

HMdcLookupGeom::HMdcLookupGeom(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 HMdcLookupGSec
  strcpy(detName,"Mdc");
  array = new TObjArray(n);
  for(Int_t i=0;i<n;i++) array->AddAt(new HMdcLookupGSec(),i);
  gHades->getRuntimeDb()->getContainer("MdcRawStruct");
}

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

Bool_t HMdcLookupGeom::init(HParIo* inp,Int_t* set) {
  // creates the array objects of type HMdcLookupMoth using the data in the parameter container
  // MdcRawStruct and initializes the container from an input
  HMdcRawStruct* pRawStruct=
       (HMdcRawStruct*)gHades->getRuntimeDb()->findContainer("MdcRawStruct");
  if (pRawStruct==NULL) {
    Error("HMdcLookupGeom::init()","HMdcLookupGeom not initialized, container MdcRawStruct not found");
    return kFALSE;
  }
  for(Int_t s=0;s<getSize();s++) {
    HMdcLookupGSec& secLookup=(*this)[s];
    HMdcRawSecStru& secStru=(*pRawStruct)[s];
    for(Int_t m=0;m<secLookup.getSize();m++) {
      HMdcLookupGMod& modLookup=secLookup[m];
      HMdcRawModStru& modStru=secStru[m];
      for(Int_t i=0;i<modStru.getSize();i++) {
        modLookup.createMoth(i,modStru[i].getNTdcs(),modStru[i].GetName());
      }
    }
  }
  HDetParIo* input=inp->getDetParIo("HMdcParIo");
  if (input) return (input->init(this,set));
  return kFALSE;
}

Int_t HMdcLookupGeom::write(HParIo* output) {
  // writes the container to an output
  HDetParIo* out=output->getDetParIo("HMdcParIo");
  if (out) return out->write(this);
  return -1;
}

void HMdcLookupGeom::readline(const Char_t *buf, Int_t *set) {
  // decodes one line read from ascii file I/O
   Int_t sec, mod, mboInd, chan, lay, wire;
   Char_t side;
   sscanf(buf,"%i%i%i%i%i%i %c",
          &sec, &mod, &mboInd, &chan, &lay, &wire, &side);
   Int_t n=sec*4+mod;
   if (!set[n]) return;
   HMdcLookupChan& r=(*this)[sec][mod][mboInd][chan];
   r.fill(lay,wire,side);
   set[n]=999;
   return;
}

void HMdcLookupGeom::putAsciiHeader(TString& header) {
  // puts the ascii header to the string used in HMdcParAsciiFileIo
  header=
    "# Mdc lookup table (hardware->geometry)\n"
    "# Format:\n"
    "# sector  module  motherboard index  TDC channel  layer  cell  readout side\n";
}

Bool_t HMdcLookupGeom::writeline(Char_t *buf, Int_t sec, Int_t mod, Int_t lay,
                               Int_t cell) {
  // writes one line to the buffer used by ascii file I/O
  HMdcLookupChan &chan=(*this)[sec][mod][lay][cell];
  Int_t nCell=chan.getNCell();
  if (nCell==-1) return kFALSE;
  sprintf(buf,"%1i %1i %1i %3i %1i %3i %c\n",
          sec, mod, lay, cell, chan.getNLayer(), nCell, chan.getReadoutSide());
  return kTRUE;
}

void HMdcLookupGeom::clear() {
  // clears the container
  for(Int_t s=0;s<6;s++) {
    HMdcLookupGSec& sec=(*this)[s];
    for(Int_t m=0;m<4;m++) {
      HMdcLookupGMod& mod=sec[m];
      Int_t nl=mod.getSize();
      for(Int_t l=0;l<nl;l++) {
        HMdcLookupMoth& moth=mod[l];
        Int_t nm=moth.getSize();
        for(Int_t c=0;c<nm;c++) {
          HMdcLookupChan& chan=moth[c];
          chan.clear();
        }
      }
    }
  }
  status=kFALSE;
  resetInputVersions();
}
void HMdcLookupGeom::printParam() {
  // prints the container
  SEPERATOR_msg("-",60);
  INFO_msg(10,HMessageMgr::DET_MDC,"HMdcLookupGeom :");
  for(Int_t s=0;s<6;s++) {
    HMdcLookupGSec& sec=(*this)[s];
    for(Int_t m=0;m<4;m++) {
      HMdcLookupGMod& mod=sec[m];
      Int_t nl=mod.getSize();
      for(Int_t l=0;l<nl;l++) {
        HMdcLookupMoth& moth=mod[l];
        Int_t nm=moth.getSize();
        for(Int_t c=0;c<nm;c++) {
          HMdcLookupChan& chan=moth[c];
	  Int_t nCell=chan.getNCell();
	  Int_t nLay =chan.getNLayer();
          Char_t side=chan.getReadoutSide();
	  gHades->getMsg()->info(10,HMessageMgr::DET_MDC,GetName()
				 ,"%1i %1i %1i %3i %1i %3i %c\n",
				 s, m, l, c, nLay, nCell, side);
	}
      }
    }
  }
  SEPERATOR_msg("-",60);
}
 hmdclookupgeom.cc:1
 hmdclookupgeom.cc:2
 hmdclookupgeom.cc:3
 hmdclookupgeom.cc:4
 hmdclookupgeom.cc:5
 hmdclookupgeom.cc:6
 hmdclookupgeom.cc:7
 hmdclookupgeom.cc:8
 hmdclookupgeom.cc:9
 hmdclookupgeom.cc:10
 hmdclookupgeom.cc:11
 hmdclookupgeom.cc:12
 hmdclookupgeom.cc:13
 hmdclookupgeom.cc:14
 hmdclookupgeom.cc:15
 hmdclookupgeom.cc:16
 hmdclookupgeom.cc:17
 hmdclookupgeom.cc:18
 hmdclookupgeom.cc:19
 hmdclookupgeom.cc:20
 hmdclookupgeom.cc:21
 hmdclookupgeom.cc:22
 hmdclookupgeom.cc:23
 hmdclookupgeom.cc:24
 hmdclookupgeom.cc:25
 hmdclookupgeom.cc:26
 hmdclookupgeom.cc:27
 hmdclookupgeom.cc:28
 hmdclookupgeom.cc:29
 hmdclookupgeom.cc:30
 hmdclookupgeom.cc:31
 hmdclookupgeom.cc:32
 hmdclookupgeom.cc:33
 hmdclookupgeom.cc:34
 hmdclookupgeom.cc:35
 hmdclookupgeom.cc:36
 hmdclookupgeom.cc:37
 hmdclookupgeom.cc:38
 hmdclookupgeom.cc:39
 hmdclookupgeom.cc:40
 hmdclookupgeom.cc:41
 hmdclookupgeom.cc:42
 hmdclookupgeom.cc:43
 hmdclookupgeom.cc:44
 hmdclookupgeom.cc:45
 hmdclookupgeom.cc:46
 hmdclookupgeom.cc:47
 hmdclookupgeom.cc:48
 hmdclookupgeom.cc:49
 hmdclookupgeom.cc:50
 hmdclookupgeom.cc:51
 hmdclookupgeom.cc:52
 hmdclookupgeom.cc:53
 hmdclookupgeom.cc:54
 hmdclookupgeom.cc:55
 hmdclookupgeom.cc:56
 hmdclookupgeom.cc:57
 hmdclookupgeom.cc:58
 hmdclookupgeom.cc:59
 hmdclookupgeom.cc:60
 hmdclookupgeom.cc:61
 hmdclookupgeom.cc:62
 hmdclookupgeom.cc:63
 hmdclookupgeom.cc:64
 hmdclookupgeom.cc:65
 hmdclookupgeom.cc:66
 hmdclookupgeom.cc:67
 hmdclookupgeom.cc:68
 hmdclookupgeom.cc:69
 hmdclookupgeom.cc:70
 hmdclookupgeom.cc:71
 hmdclookupgeom.cc:72
 hmdclookupgeom.cc:73
 hmdclookupgeom.cc:74
 hmdclookupgeom.cc:75
 hmdclookupgeom.cc:76
 hmdclookupgeom.cc:77
 hmdclookupgeom.cc:78
 hmdclookupgeom.cc:79
 hmdclookupgeom.cc:80
 hmdclookupgeom.cc:81
 hmdclookupgeom.cc:82
 hmdclookupgeom.cc:83
 hmdclookupgeom.cc:84
 hmdclookupgeom.cc:85
 hmdclookupgeom.cc:86
 hmdclookupgeom.cc:87
 hmdclookupgeom.cc:88
 hmdclookupgeom.cc:89
 hmdclookupgeom.cc:90
 hmdclookupgeom.cc:91
 hmdclookupgeom.cc:92
 hmdclookupgeom.cc:93
 hmdclookupgeom.cc:94
 hmdclookupgeom.cc:95
 hmdclookupgeom.cc:96
 hmdclookupgeom.cc:97
 hmdclookupgeom.cc:98
 hmdclookupgeom.cc:99
 hmdclookupgeom.cc:100
 hmdclookupgeom.cc:101
 hmdclookupgeom.cc:102
 hmdclookupgeom.cc:103
 hmdclookupgeom.cc:104
 hmdclookupgeom.cc:105
 hmdclookupgeom.cc:106
 hmdclookupgeom.cc:107
 hmdclookupgeom.cc:108
 hmdclookupgeom.cc:109
 hmdclookupgeom.cc:110
 hmdclookupgeom.cc:111
 hmdclookupgeom.cc:112
 hmdclookupgeom.cc:113
 hmdclookupgeom.cc:114
 hmdclookupgeom.cc:115
 hmdclookupgeom.cc:116
 hmdclookupgeom.cc:117
 hmdclookupgeom.cc:118
 hmdclookupgeom.cc:119
 hmdclookupgeom.cc:120
 hmdclookupgeom.cc:121
 hmdclookupgeom.cc:122
 hmdclookupgeom.cc:123
 hmdclookupgeom.cc:124
 hmdclookupgeom.cc:125
 hmdclookupgeom.cc:126
 hmdclookupgeom.cc:127
 hmdclookupgeom.cc:128
 hmdclookupgeom.cc:129
 hmdclookupgeom.cc:130
 hmdclookupgeom.cc:131
 hmdclookupgeom.cc:132
 hmdclookupgeom.cc:133
 hmdclookupgeom.cc:134
 hmdclookupgeom.cc:135
 hmdclookupgeom.cc:136
 hmdclookupgeom.cc:137
 hmdclookupgeom.cc:138
 hmdclookupgeom.cc:139
 hmdclookupgeom.cc:140
 hmdclookupgeom.cc:141
 hmdclookupgeom.cc:142
 hmdclookupgeom.cc:143
 hmdclookupgeom.cc:144
 hmdclookupgeom.cc:145
 hmdclookupgeom.cc:146
 hmdclookupgeom.cc:147
 hmdclookupgeom.cc:148
 hmdclookupgeom.cc:149
 hmdclookupgeom.cc:150
 hmdclookupgeom.cc:151
 hmdclookupgeom.cc:152
 hmdclookupgeom.cc:153
 hmdclookupgeom.cc:154
 hmdclookupgeom.cc:155
 hmdclookupgeom.cc:156
 hmdclookupgeom.cc:157
 hmdclookupgeom.cc:158
 hmdclookupgeom.cc:159
 hmdclookupgeom.cc:160
 hmdclookupgeom.cc:161
 hmdclookupgeom.cc:162
 hmdclookupgeom.cc:163
 hmdclookupgeom.cc:164
 hmdclookupgeom.cc:165
 hmdclookupgeom.cc:166
 hmdclookupgeom.cc:167
 hmdclookupgeom.cc:168
 hmdclookupgeom.cc:169
 hmdclookupgeom.cc:170
 hmdclookupgeom.cc:171
 hmdclookupgeom.cc:172
 hmdclookupgeom.cc:173
 hmdclookupgeom.cc:174
 hmdclookupgeom.cc:175
 hmdclookupgeom.cc:176
 hmdclookupgeom.cc:177
 hmdclookupgeom.cc:178
 hmdclookupgeom.cc:179
 hmdclookupgeom.cc:180
 hmdclookupgeom.cc:181
 hmdclookupgeom.cc:182
 hmdclookupgeom.cc:183
 hmdclookupgeom.cc:184
 hmdclookupgeom.cc:185
 hmdclookupgeom.cc:186
 hmdclookupgeom.cc:187
 hmdclookupgeom.cc:188
 hmdclookupgeom.cc:189
 hmdclookupgeom.cc:190
 hmdclookupgeom.cc:191
 hmdclookupgeom.cc:192
 hmdclookupgeom.cc:193
 hmdclookupgeom.cc:194
 hmdclookupgeom.cc:195
 hmdclookupgeom.cc:196
 hmdclookupgeom.cc:197
 hmdclookupgeom.cc:198
 hmdclookupgeom.cc:199
 hmdclookupgeom.cc:200
 hmdclookupgeom.cc:201
 hmdclookupgeom.cc:202
 hmdclookupgeom.cc:203
 hmdclookupgeom.cc:204
 hmdclookupgeom.cc:205
 hmdclookupgeom.cc:206
 hmdclookupgeom.cc:207
 hmdclookupgeom.cc:208
 hmdclookupgeom.cc:209
 hmdclookupgeom.cc:210
 hmdclookupgeom.cc:211
 hmdclookupgeom.cc:212
 hmdclookupgeom.cc:213
 hmdclookupgeom.cc:214
 hmdclookupgeom.cc:215
 hmdclookupgeom.cc:216
 hmdclookupgeom.cc:217
 hmdclookupgeom.cc:218
 hmdclookupgeom.cc:219
 hmdclookupgeom.cc:220
 hmdclookupgeom.cc:221
 hmdclookupgeom.cc:222
 hmdclookupgeom.cc:223
 hmdclookupgeom.cc:224
 hmdclookupgeom.cc:225
 hmdclookupgeom.cc:226
 hmdclookupgeom.cc:227
 hmdclookupgeom.cc:228
 hmdclookupgeom.cc:229
 hmdclookupgeom.cc:230
 hmdclookupgeom.cc:231