#include "hspecparasciifileio.h"
#include "hgeomvolume.h"
#include "hgeomshapes.h"
#include "hspecgeompar.h"
#include "htrblookup.h"
#include "htrbnetaddressmapping.h"
#include "htrb2correction.h"
#include "hslowpar.h"
ClassImp(HSpecParAsciiFileIo)
HSpecParAsciiFileIo::HSpecParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f) {
fName="HSpecParIo";
}
Bool_t HSpecParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
const Text_t* name=pPar->GetName();
if (pFile) {
if (strcmp(name,"SpecGeomPar")==0)
return read((HSpecGeomPar*)pPar,set);
if (strcmp(name,"TrbLookup")==0)
return readFile((HTrbLookup*)pPar);
if (strcmp(name,"TrbnetAddressMapping")==0)
return read((HTrbnetAddressMapping*)pPar);
if (strcmp(name,"SlowPar")==0)
return readFile((HSlowPar*)pPar);
}
cerr<<"initialization of "<<name<<" not possible from file!"<<endl;
return kFALSE;
}
Int_t HSpecParAsciiFileIo::write(HParSet* pPar) {
const Text_t* name=pPar->GetName();
if (pFile) {
if (strcmp(name,"SpecGeomPar")==0)
return writeGeom((HSpecGeomPar*)pPar);
if (strcmp(name,"TrbLookup")==0)
return writeFile((HTrbLookup*)pPar);
if (strcmp(name,"TrbnetAddressMapping")==0)
return writeFile((HTrbnetAddressMapping*)pPar);
if (strcmp(name,"SlowPar")==0)
return writeFile((HSlowPar*)pPar);
}
cerr<<name<<" could not be written to Ascii file"<<endl;
return kFALSE;
}
Bool_t HSpecParAsciiFileIo::read(HSpecGeomPar* pPar,Int_t* set) {
if (!pFile) return kFALSE;
TString key[3]={"GeomParCave","GeomParSectors","GeomParTargets"};
Int_t n1=0;
if (!pPar->isFirstInitialization()) n1=2;
Bool_t allFound=kTRUE;
const Int_t maxbuf=1550;
Text_t buf[maxbuf];
HGeomVolume volu;
HGeomTransform transform;
HGeomShapes* shapes=pPar->getShapes();
for(Int_t i=n1;i<3;i++) {
pFile->clear();
pFile->seekg(0,ios::beg);
Int_t k=0;
Bool_t all=kFALSE;
while (!all && !pFile->eof()) {
pFile->getline(buf,maxbuf);
if( (buf[0]=='[')) {
if (strstr(buf,(const Char_t*)key[i])!=0) {
while (!all && !pFile->eof()) {
pFile->getline(buf,maxbuf);
if (buf[0]=='#') all=kTRUE;
else {
if (buf[0]=='/') continue;
if (strstr(buf,":")) readComment(buf,pPar);
else {
if (readVolume(&volu,shapes,buf)==kFALSE) return kFALSE;
if (set[i]) {
switch(i) {
case 0: { pPar->addCave(&volu); break; }
case 1: { pPar->addSector(&volu); break; }
case 2: { pPar->addTarget(&volu); break; }
}
k++;
}
}
}
}
}
}
}
if (k) set[i]=0;
else allFound=kFALSE;
}
if (allFound) {
pPar->setInputVersion(1,inputNumber);
pPar->setChanged();
pPar->setNotFirstInit();
printf("%s initialized from Ascii file\n",pPar->GetName());
}
return allFound;
}
Int_t HSpecParAsciiFileIo::writeGeom(HSpecGeomPar* pPar) {
if (pFile) {
Text_t buf[1000];
Text_t com1[]=
"#########################################################\n"
"# Parameters describing the geometry of the cave,\n"
"# the sector(s) and the target(s)\n"
"#\n"
"# [GeomParCave] parameters of the cave:\n"
"# name of volume shape\n";
Text_t com2[]=
"# [GeomParSectors] parameters of the sectors:\n"
"# name of volume shape name of mother\n";
Text_t com3[]=
"# [GeomParTargets] parameters of the targets:\n"
"# name of volume shape name of mother\n";
Text_t com4[]=
"# x, y and z components of points \n"
"# rotation matrix\n"
"# translation vector\n"
"#\n";
Text_t com5[]=
"#########################################################\n";
sprintf(buf,"%s%s%s",
com1,com4,com5);
pFile->write(buf,strlen(buf));
sprintf(buf,"[GeomParCave]\n");
pFile->write(buf,strlen(buf));
writeComment(pPar);
HGeomShapes* shapes=pPar->getShapes();
HGeomVolume* volu=pPar->getCave();
if (volu) writeVolume(volu,shapes);
sprintf(buf,"%s%s%s%s[GeomParSectors]\n",com5,com2,com4,com5);
pFile->write(buf,strlen(buf));
for(Int_t i=0;i<pPar->getNumSectors();i++) {
volu=pPar->getSector(i);
if (volu) writeVolume(volu,shapes);
}
sprintf(buf,"%s%s%s%s[GeomParTargets]\n",com5,com3,com4,com5);
pFile->write(buf,strlen(buf));
for(Int_t i=0;i<pPar->getNumTargets();i++) {
volu=pPar->getTarget(i);
if (volu) writeVolume(volu,shapes);
}
pFile->write(com5,strlen(com5));
pPar->setChanged(kFALSE);
return 1;
}
cerr<<"Output is not writable"<<endl;
return -1;
}
Bool_t HSpecParAsciiFileIo::read(HTrbnetAddressMapping* pPar) {
if (!findContainer(pPar->GetName())) return kFALSE;
pPar->clear();
const Int_t maxbuf=155;
Text_t buf[maxbuf], key[80], tempSensor[80];
Bool_t rc=kTRUE;
const Char_t delim[]=" ";
HTrb2Correction* pTrb=0;
Int_t nData=0, nChan=0, nChannels=0;
Float_t* corrData=0;
while (!pFile->eof()&&rc) {
pFile->getline(buf, maxbuf);
if (buf[0]=='#') break;
if (buf[0]!='/' && buf[0]!='\0') {
rc=pPar->readline(buf);
}
}
if (rc&&findContainer("Trb2Corrections")) {
while (!pFile->eof()&&rc) {
pFile->getline(buf, maxbuf);
if (buf[0]=='#') break;
if (buf[0]!='/' && buf[0]!='\0') {
if (strstr(buf,"temperatureSensor")) {
sscanf(buf,"%s%s",key,tempSensor);
pTrb=pPar->getBoard(tempSensor);
if (pTrb) {
corrData=pTrb->makeArray();
if (corrData) {
nData=pTrb->getSize();
nChannels=pTrb->getNChannels();
nChan=0;
Int_t l=0;
do {
pFile->getline(buf,maxbuf);
if (strstr(buf,"temperatureSensor")) break;
if (strstr(buf,"channel")) {
nChan++;
} else {
Char_t* ss=strtok(buf,delim);
while (ss!=0 && l<nData) {
sscanf(ss,"%f",&corrData[l]);
l++;
ss=strtok(NULL,delim);
}
}
} while (l<nData && buf[0]!='#' && buf[0]!='/' && !pFile->eof());
if (l<nData||nChan<nChannels) {
Warning("read(HTrbnetAddressMapping*)",
"Only %i data for temperatureSensor %s",l,tempSensor);
}
} else {
rc=kFALSE;
}
} else {
Warning("read(HTrbnetAddressMapping*)",
"Board for temperatureSensor %s not found",tempSensor);
}
}
}
}
}
if (rc) {
pPar->setInputVersion(1,inputNumber);
pPar->setChanged();
printf("%s initialized from Ascii file\n",pPar->GetName());
}
return rc;
}
template<class T> Bool_t HSpecParAsciiFileIo::readFile(T* pPar) {
if (!findContainer(pPar->GetName())) return kFALSE;
pPar->clear();
const Int_t maxbuf=400;
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> Int_t HSpecParAsciiFileIo::writeFile(T* pPar) {
if (pFile) {
pPar->putAsciiHeader(fHeader);
writeHeader(pPar->GetName(),pPar->getParamContext());
pPar->write(*pFile);
pFile->write(sepLine,strlen(sepLine));
pPar->setChanged(kFALSE);
return 1;
}
Error("writeFile(T*)","Output is not writable");
return -1;
}
hspecparasciifileio.cc:10 hspecparasciifileio.cc:11 hspecparasciifileio.cc:12 hspecparasciifileio.cc:13 hspecparasciifileio.cc:14 hspecparasciifileio.cc:15 hspecparasciifileio.cc:16 hspecparasciifileio.cc:17 hspecparasciifileio.cc:18 hspecparasciifileio.cc:19 hspecparasciifileio.cc:20 hspecparasciifileio.cc:21 hspecparasciifileio.cc:22 hspecparasciifileio.cc:23 hspecparasciifileio.cc:24 hspecparasciifileio.cc:25 hspecparasciifileio.cc:26 hspecparasciifileio.cc:27 hspecparasciifileio.cc:28 hspecparasciifileio.cc:29 hspecparasciifileio.cc:30 hspecparasciifileio.cc:31 hspecparasciifileio.cc:32 hspecparasciifileio.cc:33 hspecparasciifileio.cc:34 hspecparasciifileio.cc:35 hspecparasciifileio.cc:36 hspecparasciifileio.cc:37 hspecparasciifileio.cc:38 hspecparasciifileio.cc:39 hspecparasciifileio.cc:40 hspecparasciifileio.cc:41 hspecparasciifileio.cc:42 hspecparasciifileio.cc:43 hspecparasciifileio.cc:44 hspecparasciifileio.cc:45 hspecparasciifileio.cc:46 hspecparasciifileio.cc:47 hspecparasciifileio.cc:48 hspecparasciifileio.cc:49 hspecparasciifileio.cc:50 hspecparasciifileio.cc:51 hspecparasciifileio.cc:52 hspecparasciifileio.cc:53 hspecparasciifileio.cc:54 hspecparasciifileio.cc:55 hspecparasciifileio.cc:56 hspecparasciifileio.cc:57 hspecparasciifileio.cc:58 hspecparasciifileio.cc:59 hspecparasciifileio.cc:60 hspecparasciifileio.cc:61 hspecparasciifileio.cc:62 hspecparasciifileio.cc:63 hspecparasciifileio.cc:64 hspecparasciifileio.cc:65 hspecparasciifileio.cc:66 hspecparasciifileio.cc:67 hspecparasciifileio.cc:68 hspecparasciifileio.cc:69 hspecparasciifileio.cc:70 hspecparasciifileio.cc:71 hspecparasciifileio.cc:72 hspecparasciifileio.cc:73 hspecparasciifileio.cc:74 hspecparasciifileio.cc:75 hspecparasciifileio.cc:76 hspecparasciifileio.cc:77 hspecparasciifileio.cc:78 hspecparasciifileio.cc:79 hspecparasciifileio.cc:80 hspecparasciifileio.cc:81 hspecparasciifileio.cc:82 hspecparasciifileio.cc:83 hspecparasciifileio.cc:84 hspecparasciifileio.cc:85 hspecparasciifileio.cc:86 hspecparasciifileio.cc:87 hspecparasciifileio.cc:88 hspecparasciifileio.cc:89 hspecparasciifileio.cc:90 hspecparasciifileio.cc:91 hspecparasciifileio.cc:92 hspecparasciifileio.cc:93 hspecparasciifileio.cc:94 hspecparasciifileio.cc:95 hspecparasciifileio.cc:96 hspecparasciifileio.cc:97 hspecparasciifileio.cc:98 hspecparasciifileio.cc:99 hspecparasciifileio.cc:100 hspecparasciifileio.cc:101 hspecparasciifileio.cc:102 hspecparasciifileio.cc:103 hspecparasciifileio.cc:104 hspecparasciifileio.cc:105 hspecparasciifileio.cc:106 hspecparasciifileio.cc:107 hspecparasciifileio.cc:108 hspecparasciifileio.cc:109 hspecparasciifileio.cc:110 hspecparasciifileio.cc:111 hspecparasciifileio.cc:112 hspecparasciifileio.cc:113 hspecparasciifileio.cc:114 hspecparasciifileio.cc:115 hspecparasciifileio.cc:116 hspecparasciifileio.cc:117 hspecparasciifileio.cc:118 hspecparasciifileio.cc:119 hspecparasciifileio.cc:120 hspecparasciifileio.cc:121 hspecparasciifileio.cc:122 hspecparasciifileio.cc:123 hspecparasciifileio.cc:124 hspecparasciifileio.cc:125 hspecparasciifileio.cc:126 hspecparasciifileio.cc:127 hspecparasciifileio.cc:128 hspecparasciifileio.cc:129 hspecparasciifileio.cc:130 hspecparasciifileio.cc:131 hspecparasciifileio.cc:132 hspecparasciifileio.cc:133 hspecparasciifileio.cc:134 hspecparasciifileio.cc:135 hspecparasciifileio.cc:136 hspecparasciifileio.cc:137 hspecparasciifileio.cc:138 hspecparasciifileio.cc:139 hspecparasciifileio.cc:140 hspecparasciifileio.cc:141 hspecparasciifileio.cc:142 hspecparasciifileio.cc:143 hspecparasciifileio.cc:144 hspecparasciifileio.cc:145 hspecparasciifileio.cc:146 hspecparasciifileio.cc:147 hspecparasciifileio.cc:148 hspecparasciifileio.cc:149 hspecparasciifileio.cc:150 hspecparasciifileio.cc:151 hspecparasciifileio.cc:152 hspecparasciifileio.cc:153 hspecparasciifileio.cc:154 hspecparasciifileio.cc:155 hspecparasciifileio.cc:156 hspecparasciifileio.cc:157 hspecparasciifileio.cc:158 hspecparasciifileio.cc:159 hspecparasciifileio.cc:160 hspecparasciifileio.cc:161 hspecparasciifileio.cc:162 hspecparasciifileio.cc:163 hspecparasciifileio.cc:164 hspecparasciifileio.cc:165 hspecparasciifileio.cc:166 hspecparasciifileio.cc:167 hspecparasciifileio.cc:168 hspecparasciifileio.cc:169 hspecparasciifileio.cc:170 hspecparasciifileio.cc:171 hspecparasciifileio.cc:172 hspecparasciifileio.cc:173 hspecparasciifileio.cc:174 hspecparasciifileio.cc:175 hspecparasciifileio.cc:176 hspecparasciifileio.cc:177 hspecparasciifileio.cc:178 hspecparasciifileio.cc:179 hspecparasciifileio.cc:180 hspecparasciifileio.cc:181 hspecparasciifileio.cc:182 hspecparasciifileio.cc:183 hspecparasciifileio.cc:184 hspecparasciifileio.cc:185 hspecparasciifileio.cc:186 hspecparasciifileio.cc:187 hspecparasciifileio.cc:188 hspecparasciifileio.cc:189 hspecparasciifileio.cc:190 hspecparasciifileio.cc:191 hspecparasciifileio.cc:192 hspecparasciifileio.cc:193 hspecparasciifileio.cc:194 hspecparasciifileio.cc:195 hspecparasciifileio.cc:196 hspecparasciifileio.cc:197 hspecparasciifileio.cc:198 hspecparasciifileio.cc:199 hspecparasciifileio.cc:200 hspecparasciifileio.cc:201 hspecparasciifileio.cc:202 hspecparasciifileio.cc:203 hspecparasciifileio.cc:204 hspecparasciifileio.cc:205 hspecparasciifileio.cc:206 hspecparasciifileio.cc:207 hspecparasciifileio.cc:208 hspecparasciifileio.cc:209 hspecparasciifileio.cc:210 hspecparasciifileio.cc:211 hspecparasciifileio.cc:212 hspecparasciifileio.cc:213 hspecparasciifileio.cc:214 hspecparasciifileio.cc:215 hspecparasciifileio.cc:216 hspecparasciifileio.cc:217 hspecparasciifileio.cc:218 hspecparasciifileio.cc:219 hspecparasciifileio.cc:220 hspecparasciifileio.cc:221 hspecparasciifileio.cc:222 hspecparasciifileio.cc:223 hspecparasciifileio.cc:224 hspecparasciifileio.cc:225 hspecparasciifileio.cc:226 hspecparasciifileio.cc:227 hspecparasciifileio.cc:228 hspecparasciifileio.cc:229 hspecparasciifileio.cc:230 hspecparasciifileio.cc:231 hspecparasciifileio.cc:232 hspecparasciifileio.cc:233 hspecparasciifileio.cc:234 hspecparasciifileio.cc:235 hspecparasciifileio.cc:236 hspecparasciifileio.cc:237 hspecparasciifileio.cc:238 hspecparasciifileio.cc:239 hspecparasciifileio.cc:240 hspecparasciifileio.cc:241 hspecparasciifileio.cc:242 hspecparasciifileio.cc:243 hspecparasciifileio.cc:244 hspecparasciifileio.cc:245 hspecparasciifileio.cc:246 hspecparasciifileio.cc:247 hspecparasciifileio.cc:248 hspecparasciifileio.cc:249 hspecparasciifileio.cc:250 hspecparasciifileio.cc:251 hspecparasciifileio.cc:252 hspecparasciifileio.cc:253 hspecparasciifileio.cc:254 hspecparasciifileio.cc:255 hspecparasciifileio.cc:256 hspecparasciifileio.cc:257 hspecparasciifileio.cc:258 hspecparasciifileio.cc:259 hspecparasciifileio.cc:260 hspecparasciifileio.cc:261 hspecparasciifileio.cc:262 hspecparasciifileio.cc:263 hspecparasciifileio.cc:264 hspecparasciifileio.cc:265 hspecparasciifileio.cc:266 hspecparasciifileio.cc:267 hspecparasciifileio.cc:268 hspecparasciifileio.cc:269 hspecparasciifileio.cc:270 hspecparasciifileio.cc:271 hspecparasciifileio.cc:272 hspecparasciifileio.cc:273 hspecparasciifileio.cc:274 hspecparasciifileio.cc:275 hspecparasciifileio.cc:276 hspecparasciifileio.cc:277 hspecparasciifileio.cc:278 hspecparasciifileio.cc:279 hspecparasciifileio.cc:280 hspecparasciifileio.cc:281