#include "geantdef.h" #include "hgeantinput.h" #include "hgeotof.h" #include "geafuncdec.h" typedef HFloatVec FVec; int HGeoTof::readDet(HGeoInfo & geoInfo, HGeoMedia & geoMedia) { #ifdef WITHORACLE // reads shower-detector keepinvolume // needed for calculation of tof-keepinvolume keepinName=tofKeepinName; int n=readKeepIn(geoInfo,geoMedia); if (n==0) return HFAILURE; keepinName=tfKeepinName; n=readKeepIn(geoInfo,geoMedia); for(int i=1;i<=numModules;i++) { changeName(detName,1,i); changeName(eleName,1,i); noOfKeepIn[i]=readModule(geoInfo,geoMedia); } if (length()>0) { // if TOFINO, then no inner TOFs if (n>0) { int ns=geoInfo.getNs(); for(int i=1;i<=14;i++) { if (noOfKeepIn[i]>0) { changeName(detName,1,i); for(int k=1;k<=ns;k++) { HString volName=detName + HString(k); HGeoParam* ele=getPointer(volName); if (ele) ele->inout=0; } } } } return HSUCCESS; } #endif return HFAILURE; } int HGeoTof::readDet(HGeoInfo & geoInfo) { keepinName=tofKeepinName; int n=readKeepIn(geoInfo); // reads TOF keepinvolume if (n==0) return HFAILURE; geoInfo.fin.seekg(0, ios::beg); geoInfo.fin.clear(); keepinName=tfKeepinName; n=readKeepIn(geoInfo); // reads TOFINO keepinvolume // if (n==0) return HFAILURE; // dirty fix if Tofino does not exist for(int i=1;i<=numModules;i++) { geoInfo.fin.seekg(0, ios::beg); geoInfo.fin.clear(); changeName(detName,1,i); changeName(eleName,1,i); noOfKeepIn[i]=readModule(geoInfo); } if (length()>0) return HSUCCESS; return HFAILURE; } int HGeoTof::createDet(HGeoInfo & geoInfo, HGeoMedia & geoMedia){ reset(); keepinName=tofKeepinName; if (createKeepIn(geoInfo,geoMedia)==HFAILURE) return HFAILURE; int nInnerTofs=0; for(int i=1;i<=22;i++) { reset(); changeName(detName,1,i); changeName(eleName,1,i); if (noOfKeepIn[i]>0) { if (createModule(geoInfo,geoMedia)==HFAILURE) return HFAILURE; if (i<15) nInnerTofs++; } } if (nInnerTofs==0) { reset(); keepinName=tfKeepinName; if (createKeepIn(geoInfo,geoMedia)==HFAILURE) return HFAILURE; for(int i=23;i<=numModules;i++) { reset(); changeName(detName,1,i); changeName(eleName,1,i); if (noOfKeepIn[i]>0) { if (createModule(geoInfo,geoMedia)==HFAILURE) return HFAILURE; } } } return HSUCCESS; } void HGeoTof::changeName(HString & name, int firstPos, int no) { int j=(int)no/10; HString s1no=j; HString s2no=no-j*10; name.replace(firstPos,s1no); name.replace(++firstPos,s2no); return; } int HGeoTof::createHits(HString & volName) { extern HGeantInput geantInput; int l1, l2, idtype, iset, idet; HString copyName=volName(0,4); l1=(int)copyName(1,1); l2=(int)copyName(2,1); idtype=100+10*l1+l2; if (hitsRead<1) { int i=0; int n=geantInput.getHitNoFiles(); while (i<=n) { hitsFileName=geantInput.getHitFileName(i); if (hitsFileName.find("tof")>=0 || hitsFileName.find("meta")>=0) break; i++; } if (i>n) { cerr << "No file for hit definition of tof found" << endl; return HFAILURE; } if (readHits(hitsFileName)==HFAILURE) return HFAILURE; } if (restoreTree(volName)==HFAILURE) return HFAILURE; #ifdef WITHGEANT char* cS=chset; char* cN=copyName; GSDET(cS,cN,nv,chnmsv,nbitsv,idtype,1000,1000,iset,idet); GSDETH(cS,cN,nh,chnamh,nbitsh,orig,fact); #endif #ifdef ILSESHOW showHits(volName,idtype); #endif return HSUCCESS; }