#include "hemcparasciifileio.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hparset.h"
#include "hemcdetector.h"
#include "hemctrb3lookup.h"
#include "hemccalpar.h"
#include "hemcgeompar.h"
ClassImp(HEmcParAsciiFileIo)
HEmcParAsciiFileIo::HEmcParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f) {
fName="HEmcParIo";
}
Bool_t HEmcParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
const Text_t* name=pPar->GetName();
if (pFile) {
if (0 == strncmp(name, "EmcTrb3Lookup", strlen("EmcTrb3Lookup"))) {
return HDetParAsciiFileIo::readFile<HEmcTrb3Lookup>((HEmcTrb3Lookup*)pPar);
}
if (0 == strncmp(name, "EmcCalPar", strlen("EmcCalPar"))) {
return read((HEmcCalPar*)pPar,set);
}
if (0 == strncmp(name,"EmcGeomPar", strlen("EmcGeomPar"))) {
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 HEmcParAsciiFileIo::write(HParSet* pPar) {
if (pFile) {
const Text_t* name=pPar->GetName();
if (0 == strncmp(name, "EmcTrb3Lookup", strlen("EmcTrb3Lookup"))) {
return HDetParAsciiFileIo::writeFile<HEmcTrb3Lookup>((HEmcTrb3Lookup*)pPar);
}
if (0 == strncmp(name, "EmcCalPar", strlen("EmcCalPar"))) {
return HDetParAsciiFileIo::writeFile<HEmcCalPar>((HEmcCalPar*)pPar);
}
if (0 == strncmp(name,"EmcGeomPar", strlen("EmcGeomPar"))) {
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 HEmcParAsciiFileIo::read(T* pPar, Int_t* set) {
const Text_t* name = pPar->GetName();
HDetector* det = gHades->getSetup()->getDetector("Emc");
Int_t nSize = det->getMaxModules();
if (!findContainer(name)) return kFALSE;
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);
}
Bool_t allFound = kTRUE;
for (Int_t i = 0; i < nSize; i++) {
if (set[i]) {
if (set[i] == 999) set[i] = 1;
else allFound = kFALSE;
}
}
if (allFound) {
pPar->setInputVersion(1, inputNumber);
pPar->setChanged();
Info("readFile", "%s initialized from Ascii file", pPar->GetName());
}
return allFound;
}