////////////////////////////////////////////////////////// // Mapper for TFT // chamberID layerID tubeIDtot // // author: Isabella Garzia ////////////////////////////////////////////////////////// #include "PndFtsMapCreator.h" #include "PndFtsTube.h" #include "PndGeoFtsPar.h" #include "FairGeoNode.h" #include "FairGeoVolume.h" #include "FairGeoTransform.h" #include "FairGeoVector.h" #include "FairGeoRotation.h" #include "FairGeoTube.h" #include "TGeoTube.h" #include "TVector3.h" #include "TObjArray.h" #include "TString.h" #include "TGeoVolume.h" #include "TGeoTube.h" #include "TClonesArray.h" #include "FairRootManager.h" #include using namespace std; PndFtsMapCreator* PndFtsMapCreator::fgMapperInstance = 0; PndFtsMapCreator* PndFtsMapCreator::Instance() { if (0 == fgMapperInstance) fgMapperInstance = new PndFtsMapCreator(); return fgMapperInstance; } PndFtsMapCreator::PndFtsMapCreator() { // Geometry loading FairRootManager* ioman = FairRootManager::Instance(); TFile *infile = ioman->GetInFile(); //TGeoManager *geoMan = (TGeoManager*) infile->Get("FAIRGeom"); } //PndFtsMapCreator::PndFtsMapCreator(){} // to use in PndFts PndFtsMapCreator::PndFtsMapCreator(Int_t geoType){ fGeoType = geoType; if(fGeoType != 1) Info("PndFtsMapCreator","Geometry %i not supported by map", fGeoType); // CHECK } // crete geometry from parameters file PndFtsMapCreator::PndFtsMapCreator(PndGeoFtsPar *ftsPar) { fFtsParameters = ftsPar; // set general par SetGeneralParameters(); // choose geometry type fGeoType = ftsPar->GetGeometryType(); // classic, optimized, average, detailed, CAD if(fGeoType != 1) Info("PndFtsMapCreator","Geometry %i not supported by map", fGeoType); // CHECK } PndFtsMapCreator::~PndFtsMapCreator(){} void PndFtsMapCreator::SetGeneralParameters() { // CHECK whether it depends on geometry or not fTubeInRad = fFtsParameters->GetTubeInRad(); // tube inner radius fTubeOutRad = fFtsParameters->GetTubeOutRad(); // tube outer radius } // during simulation (for tubeID) Int_t PndFtsMapCreator::GetTubeIDFromPath(TString path) { if(fGeoType == 1) return GetTubeIDFromPathGeoType1(path); return -999; } // ===== GEO TYPE 1 ===== // sensitive volume is gas // when reading the parameters we use fts01tube to retrieve geometrical information // OK // during simulation Int_t PndFtsMapCreator::GetTubeIDFromPathGeoType1(TString path){ TString tmpstring = GetNameFromPathGeoType1(path); return GetTubeIDFromNameGeoType1(tmpstring); } Int_t PndFtsMapCreator::GetChamberIDFromPath(TString path){ TString pathstring=path; if(pathstring.Contains("fts01assembly_1")){ //std::cout<<"chamber 1"<192){ tube=tube-192; i++; } } if(chamberid==5){ i=i+32; while(tube>400){ tube=tube-400; i++; } } if(chamberid==6){ i=i+40; while(tube>592){ tube=tube-592; i++; } } return i; } Int_t PndFtsMapCreator::GetTubeIDTot(Int_t chamberid, Int_t layerid, Int_t tubeid,TString path ){ Int_t chamber=chamberid; Int_t layer=layerid; Int_t tubeID=tubeid; TString tmpstring=path; Int_t tube=0; Int_t totTubeID=0; if(chamberid==1){tube=tubeID;} if(chamberid==2){tube=tubeID+1024;} //if(chamberid==3){tube=tubeID+2240;} //2048 if(chamberid==3){ if(layer==17||layer==18){tube=tubeID+2240;} if(layer==19||layer==20){tube=tubeID+2648;} if(layer==21||layer==22){tube=tubeID+3056;} if(layer==23||layer==24){tube=tubeID+3464;} } if(chamberid==4){ if(layer==25||layer==26){tube=tubeID+3872;} if(layer==27||layer==28){tube=tubeID+4280;} if(layer==29||layer==30){tube=tubeID+4688;} if(layer==31||layer==32){tube=tubeID+5096;} } //if(chamberid==4){tube=tubeID+3584;} if(chamberid==5){tube=tubeID+5120;} if(chamberid==6){tube=tubeID+8320;} //up e down hanno lo stesso id-> devo slittare il tutto per dare a ciascun tubo //un suo numero identificativo if(chamber==1 || chamberid==2){ if(tmpstring.Contains("down") || tube>70){ if(tmpstring.Contains("down_1/fts")){tube=tube+58;} totTubeID=tube+12*layer; } if(tmpstring.Contains("up")){ if(tmpstring.Contains("up_1/fts")){tube=tube+58;} totTubeID=tube+12*(layer-1); } if(tube<=58){totTubeID=tube;} } if(chamberid==3 || chamberid==4){ if(tmpstring.Contains("down_1/fts")){totTubeID=tube+90+12;} if(tmpstring.Contains("up_1/fts")){totTubeID=tube+90;} if(!tmpstring.Contains("down") && !tmpstring.Contains("up")){ if(layer%2==1 && tubeid<=90){totTubeID=tube;} //odd layer if(layer%2==1 && tubeid>90){totTubeID=tube+12;} if(layer%2!=1 && tubeid<=90){totTubeID=tube+12;} if(layer%2!=1 && tubeid>90){totTubeID=tube+24;} } if(tmpstring.Contains("down")&& !tmpstring.Contains("down_1/fts")){ if(layer%2==1){totTubeID=tube+12;} //odd layer else{totTubeID=tube+24;} } if(tmpstring.Contains("up")&& !tmpstring.Contains("up_1/fts")){ if(layer%2==1){totTubeID=tube;} //odd layer else{totTubeID=tube+12;} } } if(chamber==5){ if(tmpstring.Contains("down") || tube>5329){ if(tmpstring.Contains("down_1/fts")){tube=tube+191;} totTubeID=tube+(12*32)+(18*(layer-32)); } if(tmpstring.Contains("up")){ if(tmpstring.Contains("up_1/fts")){tube=tube+191;} totTubeID=tube+(12*32)+(18*(layer-33)); } if(tube<=5311){totTubeID=tube+(12*32);} } if(chamber==6){ if(tmpstring.Contains("down") || tube>8625){ if(tmpstring.Contains("down_1/fts")){tube=tube+287;} totTubeID=tube+(12*32)+(18*(layer-32)); } if(tmpstring.Contains("up")){ if(tmpstring.Contains("up_1/fts")){tube=tube+287;} totTubeID=tube+(12*32)+(18*(layer-33)); } if(tube<=8607){totTubeID=tube+(12*32)+(18*8);} } return totTubeID; } ClassImp(PndFtsMapCreator)