ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Modified : 08/12/2000 by I. Koenig
//*-- Modified : 12/09/2001 by D.Zovinec
//*-- Modified : 20/12/2001 by D.Zovinec

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//  HTofParRootFileIo
//
//  Class for TOF parameter input/output from/into ROOT file
//
//  It is derived from the base class HDetParRootFileIo and
//  inherits from it basic functions e.g. write(...)
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "htofparrootfileio.h"
#include "hparrootfileio.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "htofdetector.h"
#include "htoflookup.h"
#include "htoftrb2lookup.h"
#include "htoftrb3lookup.h"
#include "htofcalpar.h"
#include "htofdigipar.h"
#include "htofgeompar.h"
#include <iostream> 
#include <iomanip>

ClassImp(HTofParRootFileIo)

HTofParRootFileIo::HTofParRootFileIo(HParRootFile* f) : HDetParRootFileIo(f) {
  // constructor sets the name of the detector I/O "HTofParIo"
  fName="HTofParIo";
  HDetector* det=gHades->getSetup()->getDetector("Tof");
  Int_t n=(det->getMaxSectors())*(det->getMaxModules());
  initModules=new TArrayI(n);
}


HTofParRootFileIo::~HTofParRootFileIo() {
  // destructor
  if (modulesFound) {
    delete modulesFound;
    modulesFound=0;
  }
  if (initModules) {
    delete initModules;
    initModules=0;
  }
}

Bool_t HTofParRootFileIo::init(HParSet* pPar,Int_t* set) {
  // initializes a container called by name, but only the modules
  // defined in the array 'set'
  // calls the special read function for this container
  // If it is called the first time it reads the setup found in the file
  if (!isActiv) readModules("Tof");
  const Text_t* name=pPar->GetName();
  if (pFile) {
    if (strcmp(name,"TofLookup")==0) return read((HTofLookup*)pPar,set);
    if (strcmp(name,"TofCalPar")==0 || strcmp(name,"TofCalPar_Sim_Embedding")==0 ) return read((HTofCalPar*)pPar,set);
    if (strcmp(name,"TofDigiPar")==0) return read((HTofDigiPar*)pPar,set);
    if (strcmp(name,"TofTrb2Lookup")==0)
        return HDetParRootFileIo::read((HTofTrb2Lookup*)pPar);
    if (strcmp(name,"TofTrb3Lookup")==0)
        return HDetParRootFileIo::read((HTofTrb3Lookup*)pPar);
    if (strcmp(name,"TofGeomPar")==0)
        return HDetParRootFileIo::read((HTofGeomPar*)pPar,set);
  }
  cerr<<"initialization of "<<name<<" not possible from ROOT file!"<<endl;
  return kFALSE;
}

Bool_t HTofParRootFileIo::read(HTofLookup* pPar,Int_t* set) {
  // reads and fills the container "TofLookup" needed by the unpacker.
  // Returns kFalse, when not initialized completely from this input
  Text_t* name=(Char_t*)pPar->GetName();
  Int_t version=findInputVersion(name);
  if (version<=0) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;    // not in ROOT file
  }
  if (pPar->getInputVersion(inputNumber)==version
        && pPar->getInputVersion(inputNumber)!=-1) return kTRUE;
  // needs reinitialization
  HTofLookup* rTof=(HTofLookup*)findContainer(name,version);
  initModules->Reset();
  pPar->clear();   // no initialization from 2 inputs possible!
  Int_t pos, sector, module, cell;
  Char_t modType, side;
  for(Int_t c=0;c<rTof->getSize();c++) {
    for(Int_t s=0;s<(*rTof)[c].getSize();s++) {
      HTofLookupSlot& slot=(*rTof)[c][s];
      modType=slot.getType();
      for(Int_t i=0;i<slot.getSize();i++) {
        slot[i].getAddress(sector,module,cell,side);
        if (sector>=0) {
          pos=sector*22+module;
          if (set[pos]) {
            pPar->fill(c,s,modType,i,sector,module,cell,side);
            initModules->AddAt(pos+1,pos);
          }
        }
      }
    }
  }
  pPar->setInputVersion(version,inputNumber);
  pPar->setChanged();
  printInfo("TofLookup: module(s) initialized from Root file ");
  delete rTof;
  Bool_t allFound=kTRUE;
  for(Int_t i=0;i<initModules->GetSize(); i++) {
    if (set[i] && !initModules->At(i)) allFound=kFALSE;
  }
  return allFound;
}


Bool_t HTofParRootFileIo::read(HTofCalPar* pPar,Int_t* set) {
  // reads and fills the container "TofCalPar" for calibration parameters
  Text_t* name=(Char_t*)pPar->GetName();
  Int_t version=findInputVersion(name);
  if (version==-1) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;    // not in ROOT file
  }
  if (pPar->getInputVersion(inputNumber)==version
        && pPar->getInputVersion(inputNumber)!=-1) return kTRUE;
  // needs reinitialization
  HTofCalPar* r=(HTofCalPar*)findContainer(name,version);
  Bool_t allFound=kTRUE;
  Int_t pos;
  initModules->Reset();
  HTofCalPar& rTof=*r;
  HTofCalPar& pTof=*pPar;
  for(Int_t s=0;s<pTof.getSize();s++) {
    HTofCalParSec& rSec=rTof[s];
    HTofCalParSec& pSec=pTof[s];
    for(Int_t m=0;m<pSec.getSize();m++) {
      HTofCalParMod& rMod=rSec[m];
      HTofCalParMod& pMod=pSec[m];
      pos=s*22+m;
      if (set[pos]) {
        Int_t pModSize=pMod.getSize();
        if (pModSize && rMod.getSize()==pModSize) {
          for(Int_t c=0;c<pModSize;c++) pMod[c].fill(rMod[c]);
          set[pos]=0;
          initModules->AddAt(pos+1,pos);
        } else allFound=kFALSE;
      }
    }
  }
  pPar->setInputVersion(version,inputNumber);
  pPar->setChanged();
  printInfo("TofCalPar: module(s) initialized from Root file:\n ");
  delete r;
  return allFound;
}

Bool_t HTofParRootFileIo::read(HTofDigiPar* pPar,Int_t* set) {
  // reads and fills the container "TofDigitPar" for digitization parameters
  Text_t* name=(Char_t*)pPar->GetName();
  Int_t version=findInputVersion(name);
  if (version==-1) {
    pPar->setInputVersion(-1,inputNumber);
    return kFALSE;    // not in ROOT file
  }
  if (pPar->getInputVersion(inputNumber)==version
        && pPar->getInputVersion(inputNumber)!=-1) return kTRUE;
  // needs reinitialization
  HTofDigiPar* r=(HTofDigiPar*)findContainer(name,version);
  Bool_t allFound=kTRUE;
  Int_t pos;
  initModules->Reset();
  HTofDigiPar& rTof=*r;
  HTofDigiPar& pTof=*pPar;
  for(Int_t s=0;s<pTof.getSize();s++) {
    HTofDigiParSec& rSec=rTof[s];
    HTofDigiParSec& pSec=pTof[s];
    for(Int_t m=0;m<pSec.getSize();m++) {
      HTofDigiParMod& rMod=rSec[m];
      HTofDigiParMod& pMod=pSec[m];
      pos=s*22+m;
      if (set[pos]) {
        Int_t pModSize=pMod.getSize();
        if (pModSize && rMod.getSize()==pModSize) {
          for(Int_t c=0;c<pModSize;c++) pMod[c].fill(rMod[c]);
          set[pos]=0;
          initModules->AddAt(pos+1,pos);
        } else allFound=kFALSE;
      }
    }
  }
  pPar->setInputVersion(version,inputNumber);
  pPar->setChanged();
  printInfo("TofDigiPar: module(s) initialized from Root file:\n ");
  delete r;
  return allFound;
}
 htofparrootfileio.cc:1
 htofparrootfileio.cc:2
 htofparrootfileio.cc:3
 htofparrootfileio.cc:4
 htofparrootfileio.cc:5
 htofparrootfileio.cc:6
 htofparrootfileio.cc:7
 htofparrootfileio.cc:8
 htofparrootfileio.cc:9
 htofparrootfileio.cc:10
 htofparrootfileio.cc:11
 htofparrootfileio.cc:12
 htofparrootfileio.cc:13
 htofparrootfileio.cc:14
 htofparrootfileio.cc:15
 htofparrootfileio.cc:16
 htofparrootfileio.cc:17
 htofparrootfileio.cc:18
 htofparrootfileio.cc:19
 htofparrootfileio.cc:20
 htofparrootfileio.cc:21
 htofparrootfileio.cc:22
 htofparrootfileio.cc:23
 htofparrootfileio.cc:24
 htofparrootfileio.cc:25
 htofparrootfileio.cc:26
 htofparrootfileio.cc:27
 htofparrootfileio.cc:28
 htofparrootfileio.cc:29
 htofparrootfileio.cc:30
 htofparrootfileio.cc:31
 htofparrootfileio.cc:32
 htofparrootfileio.cc:33
 htofparrootfileio.cc:34
 htofparrootfileio.cc:35
 htofparrootfileio.cc:36
 htofparrootfileio.cc:37
 htofparrootfileio.cc:38
 htofparrootfileio.cc:39
 htofparrootfileio.cc:40
 htofparrootfileio.cc:41
 htofparrootfileio.cc:42
 htofparrootfileio.cc:43
 htofparrootfileio.cc:44
 htofparrootfileio.cc:45
 htofparrootfileio.cc:46
 htofparrootfileio.cc:47
 htofparrootfileio.cc:48
 htofparrootfileio.cc:49
 htofparrootfileio.cc:50
 htofparrootfileio.cc:51
 htofparrootfileio.cc:52
 htofparrootfileio.cc:53
 htofparrootfileio.cc:54
 htofparrootfileio.cc:55
 htofparrootfileio.cc:56
 htofparrootfileio.cc:57
 htofparrootfileio.cc:58
 htofparrootfileio.cc:59
 htofparrootfileio.cc:60
 htofparrootfileio.cc:61
 htofparrootfileio.cc:62
 htofparrootfileio.cc:63
 htofparrootfileio.cc:64
 htofparrootfileio.cc:65
 htofparrootfileio.cc:66
 htofparrootfileio.cc:67
 htofparrootfileio.cc:68
 htofparrootfileio.cc:69
 htofparrootfileio.cc:70
 htofparrootfileio.cc:71
 htofparrootfileio.cc:72
 htofparrootfileio.cc:73
 htofparrootfileio.cc:74
 htofparrootfileio.cc:75
 htofparrootfileio.cc:76
 htofparrootfileio.cc:77
 htofparrootfileio.cc:78
 htofparrootfileio.cc:79
 htofparrootfileio.cc:80
 htofparrootfileio.cc:81
 htofparrootfileio.cc:82
 htofparrootfileio.cc:83
 htofparrootfileio.cc:84
 htofparrootfileio.cc:85
 htofparrootfileio.cc:86
 htofparrootfileio.cc:87
 htofparrootfileio.cc:88
 htofparrootfileio.cc:89
 htofparrootfileio.cc:90
 htofparrootfileio.cc:91
 htofparrootfileio.cc:92
 htofparrootfileio.cc:93
 htofparrootfileio.cc:94
 htofparrootfileio.cc:95
 htofparrootfileio.cc:96
 htofparrootfileio.cc:97
 htofparrootfileio.cc:98
 htofparrootfileio.cc:99
 htofparrootfileio.cc:100
 htofparrootfileio.cc:101
 htofparrootfileio.cc:102
 htofparrootfileio.cc:103
 htofparrootfileio.cc:104
 htofparrootfileio.cc:105
 htofparrootfileio.cc:106
 htofparrootfileio.cc:107
 htofparrootfileio.cc:108
 htofparrootfileio.cc:109
 htofparrootfileio.cc:110
 htofparrootfileio.cc:111
 htofparrootfileio.cc:112
 htofparrootfileio.cc:113
 htofparrootfileio.cc:114
 htofparrootfileio.cc:115
 htofparrootfileio.cc:116
 htofparrootfileio.cc:117
 htofparrootfileio.cc:118
 htofparrootfileio.cc:119
 htofparrootfileio.cc:120
 htofparrootfileio.cc:121
 htofparrootfileio.cc:122
 htofparrootfileio.cc:123
 htofparrootfileio.cc:124
 htofparrootfileio.cc:125
 htofparrootfileio.cc:126
 htofparrootfileio.cc:127
 htofparrootfileio.cc:128
 htofparrootfileio.cc:129
 htofparrootfileio.cc:130
 htofparrootfileio.cc:131
 htofparrootfileio.cc:132
 htofparrootfileio.cc:133
 htofparrootfileio.cc:134
 htofparrootfileio.cc:135
 htofparrootfileio.cc:136
 htofparrootfileio.cc:137
 htofparrootfileio.cc:138
 htofparrootfileio.cc:139
 htofparrootfileio.cc:140
 htofparrootfileio.cc:141
 htofparrootfileio.cc:142
 htofparrootfileio.cc:143
 htofparrootfileio.cc:144
 htofparrootfileio.cc:145
 htofparrootfileio.cc:146
 htofparrootfileio.cc:147
 htofparrootfileio.cc:148
 htofparrootfileio.cc:149
 htofparrootfileio.cc:150
 htofparrootfileio.cc:151
 htofparrootfileio.cc:152
 htofparrootfileio.cc:153
 htofparrootfileio.cc:154
 htofparrootfileio.cc:155
 htofparrootfileio.cc:156
 htofparrootfileio.cc:157
 htofparrootfileio.cc:158
 htofparrootfileio.cc:159
 htofparrootfileio.cc:160
 htofparrootfileio.cc:161
 htofparrootfileio.cc:162
 htofparrootfileio.cc:163
 htofparrootfileio.cc:164
 htofparrootfileio.cc:165
 htofparrootfileio.cc:166
 htofparrootfileio.cc:167
 htofparrootfileio.cc:168
 htofparrootfileio.cc:169
 htofparrootfileio.cc:170
 htofparrootfileio.cc:171
 htofparrootfileio.cc:172
 htofparrootfileio.cc:173
 htofparrootfileio.cc:174
 htofparrootfileio.cc:175
 htofparrootfileio.cc:176
 htofparrootfileio.cc:177
 htofparrootfileio.cc:178
 htofparrootfileio.cc:179
 htofparrootfileio.cc:180
 htofparrootfileio.cc:181
 htofparrootfileio.cc:182
 htofparrootfileio.cc:183
 htofparrootfileio.cc:184
 htofparrootfileio.cc:185
 htofparrootfileio.cc:186
 htofparrootfileio.cc:187
 htofparrootfileio.cc:188
 htofparrootfileio.cc:189
 htofparrootfileio.cc:190
 htofparrootfileio.cc:191
 htofparrootfileio.cc:192
 htofparrootfileio.cc:193
 htofparrootfileio.cc:194
 htofparrootfileio.cc:195
 htofparrootfileio.cc:196
 htofparrootfileio.cc:197
 htofparrootfileio.cc:198
 htofparrootfileio.cc:199
 htofparrootfileio.cc:200
 htofparrootfileio.cc:201
 htofparrootfileio.cc:202