#include "htofparasciifileio.h"
#include "htofdetector.h"
#include "htoflookup.h"
#include "htoftrb2lookup.h"
#include "htoftrb3lookup.h"
#include "htofcalpar.h"
#include "htofdigipar.h"
#include "htofgeompar.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
ClassImp(HTofParAsciiFileIo)
HTofParAsciiFileIo::HTofParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f) {
fName="HTofParIo";
HDetector* det=gHades->getSetup()->getDetector("Tof");
setSize=(det->getMaxSectors())*(det->getMaxModules());
}
Bool_t HTofParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
const Text_t* name=pPar->GetName();
if (pFile) {
pFile->clear();
pFile->seekg(0,ios::beg);
if (!strcmp(name,"TofLookup")) return read((HTofLookup*)pPar,set,kTRUE);
if (!strcmp(name,"TofCalPar")) return read((HTofCalPar*)pPar,set);
if (!strcmp(name,"TofDigiPar")) return read((HTofDigiPar*)pPar,set);
if (!strcmp(name,"TofTrb2Lookup")) return read((HTofTrb2Lookup*)pPar);
if (!strcmp(name,"TofTrb3Lookup")) return read((HTofTrb3Lookup*)pPar);
if (!strcmp(name,"TofGeomPar"))
return HDetParAsciiFileIo::read((HDetGeomPar*)pPar,set);
Error("init(HParSet*,Int_t*)",
"initialization of %s not possible from ASCII file",name);
return kFALSE;
}
Error("init(HParSet*,Int_t*)","No input file open");
return kFALSE;
}
Int_t HTofParAsciiFileIo::write(HParSet* pPar) {
if (pFile) {
const Text_t* name=pPar->GetName();
if (!strcmp(name,"TofLookup")) return writeFile3((HTofLookup*)pPar);
if (!strcmp(name,"TofCalPar")) return writeFile3((HTofCalPar*)pPar);
if (!strcmp(name,"TofDigiPar")) return writeFile3((HTofDigiPar*)pPar);
if (!strcmp(name,"TofTrb2Lookup")) return write((HTofTrb2Lookup*)pPar);
if (!strcmp(name,"TofGeomPar"))
return HDetParAsciiFileIo::writeFile((HDetGeomPar*)pPar);
Error("write(HParSet*)","%s could not be written to ASCII file",name);
return -1;
}
Error("write(HParSet*)","No output file open");
return -1;
}
template<class T> Bool_t HTofParAsciiFileIo::read(T* pPar) {
if (!findContainer(pPar->GetName())) return kFALSE;
pPar->clear();
const Int_t maxbuf=155;
Text_t buf[maxbuf];
Bool_t rc=kTRUE;
while (!pFile->eof()&&rc) {
pFile->getline(buf, maxbuf);
if (buf[0]=='#') break;
if (buf[0]!='/' && buf[0]!='\0') rc=pPar->readline(buf);
}
if (rc) {
pPar->setInputVersion(1,inputNumber);
pPar->setChanged();
printf("%s initialized from Ascii file\n",pPar->GetName());
}
return rc;
}
template<class T> Bool_t HTofParAsciiFileIo::read(T* pPar, Int_t* set,
Bool_t needsClear) {
const Text_t* name=pPar->GetName();
if (!findContainer(name)) return kFALSE;
if (needsClear) pPar->clear();
const Int_t maxbuf=155;
Text_t buf[maxbuf];
while (!pFile->eof()) {
pFile->getline(buf, maxbuf);
if (buf[0]=='#') break;
if (buf[0]!='/' && buf[0]!='\0') pPar->readline(buf, set);
}
pPar->setInputVersion(1,inputNumber);
pPar->setChanged();
Bool_t allFound=kTRUE;
if (!needsClear) {
printf("%s: module(s) initialized from Ascii file:\n",name);
allFound=checkAllFound(set,setSize);
} else {
for(Int_t i=0; i<setSize; i++) {
if (set[i]) {
if (set[i]==999) set[i]=1;
else allFound=kFALSE;
}
}
}
if (allFound) printf("%s initialized from Ascii file\n",name);
return allFound;
}
template<class T> Int_t HTofParAsciiFileIo::write(T* pPar) {
pPar->putAsciiHeader(fHeader);
writeHeader(pPar->GetName(),pPar->getParamContext());
pPar->write(*pFile);
pFile->write(sepLine,strlen(sepLine));
pPar->setChanged(kFALSE);
return 1;
}
template<class T> Int_t HTofParAsciiFileIo::writeFile3(T* pPar) {
pPar->putAsciiHeader(fHeader);
writeHeader(pPar->GetName());
Text_t buf[155];
Int_t n0 = (*pPar).getSize();
for(Int_t i0=0; i0<n0; i0++) {
Int_t n1 = (*pPar)[i0].getSize();
for(Int_t i1=0; i1<n1; i1++) {
Int_t n2 = (*pPar)[i0][i1].getSize();
for(Int_t i2=0; i2<n2; i2++) {
if (pPar->writeline(buf, i0, i1, i2))
pFile->write(buf,strlen(buf));
}
}
}
pPar->setChanged(kFALSE);
pFile->write(sepLine,strlen(sepLine));
return 1;
}
htofparasciifileio.cc:100 htofparasciifileio.cc:101 htofparasciifileio.cc:102 htofparasciifileio.cc:103 htofparasciifileio.cc:104 htofparasciifileio.cc:105 htofparasciifileio.cc:106 htofparasciifileio.cc:107 htofparasciifileio.cc:108 htofparasciifileio.cc:109 htofparasciifileio.cc:110 htofparasciifileio.cc:111 htofparasciifileio.cc:112 htofparasciifileio.cc:113 htofparasciifileio.cc:114 htofparasciifileio.cc:115 htofparasciifileio.cc:116 htofparasciifileio.cc:117 htofparasciifileio.cc:118 htofparasciifileio.cc:119 htofparasciifileio.cc:120 htofparasciifileio.cc:121 htofparasciifileio.cc:122 htofparasciifileio.cc:123 htofparasciifileio.cc:124 htofparasciifileio.cc:125 htofparasciifileio.cc:126 htofparasciifileio.cc:127 htofparasciifileio.cc:128 htofparasciifileio.cc:129 htofparasciifileio.cc:130 htofparasciifileio.cc:131 htofparasciifileio.cc:132 htofparasciifileio.cc:133 htofparasciifileio.cc:134 htofparasciifileio.cc:135 htofparasciifileio.cc:136 htofparasciifileio.cc:137 htofparasciifileio.cc:138 htofparasciifileio.cc:139 htofparasciifileio.cc:140 htofparasciifileio.cc:141 htofparasciifileio.cc:142 htofparasciifileio.cc:143 htofparasciifileio.cc:144 htofparasciifileio.cc:145 htofparasciifileio.cc:146 htofparasciifileio.cc:147 htofparasciifileio.cc:148 htofparasciifileio.cc:149 htofparasciifileio.cc:150 htofparasciifileio.cc:151 htofparasciifileio.cc:152 htofparasciifileio.cc:153 htofparasciifileio.cc:154 htofparasciifileio.cc:155 htofparasciifileio.cc:156 htofparasciifileio.cc:157 htofparasciifileio.cc:158 htofparasciifileio.cc:159 htofparasciifileio.cc:160 htofparasciifileio.cc:161