13 #include "FairGeoNode.h"
14 #include "FairGeoVolume.h"
15 #include "FairGeoTransform.h"
16 #include "FairGeoVector.h"
17 #include "FairGeoRotation.h"
18 #include "FairGeoTube.h"
22 #include "TObjArray.h"
24 #include "TGeoVolume.h"
26 #include "TClonesArray.h"
27 #include "FairRootManager.h"
35 : fGeoType(0), fFtsParameters(new
PndGeoFtsPar()), fTubeInRad(0), fTubeOutRad(0), copy_map()
39 FairRootManager* ioman = FairRootManager::Instance();
40 TFile *
infile = ioman->GetInFile();
48 : fGeoType(geoType), fFtsParameters(new
PndGeoFtsPar()), fTubeInRad(0), fTubeOutRad(0) , copy_map()
51 if(
fGeoType != 1) Info(
"PndFtsMapCreator2",
"Geometry %i not supported by map",
fGeoType);
56 : fGeoType(0), fFtsParameters(ftsPar), fTubeInRad(0), fTubeOutRad(0), copy_map()
64 if(
fGeoType != 1) Info(
"PndFtsMapCreator2",
"Geometry %i not supported by map",
fGeoType);
100 if(pathstring.Contains(
"fts01")){
104 if(pathstring.Contains(
"fts02")){
108 if(pathstring.Contains(
"fts31")||pathstring.Contains(
"fts32")||pathstring.Contains(
"fts33")||pathstring.Contains(
"fts34")){
112 if(pathstring.Contains(
"fts35")||pathstring.Contains(
"fts36")||pathstring.Contains(
"fts37")||pathstring.Contains(
"fts38")){
116 if(pathstring.Contains(
"fts05tube")){
120 if(pathstring.Contains(
"fts06tube")){
129 if(pathstring.Contains(
"fts01tube")){
133 if(pathstring.Contains(
"fts02tube")){
137 if(pathstring.Contains(
"fts31tube")||pathstring.Contains(
"fts32tube")||pathstring.Contains(
"fts33tube")||pathstring.Contains(
"fts34tube")){
141 if(pathstring.Contains(
"fts35tube")||pathstring.Contains(
"fts36tube")||pathstring.Contains(
"fts37tube")||pathstring.Contains(
"fts38tube")){
145 if(pathstring.Contains(
"fts05tube")){
149 if(pathstring.Contains(
"fts06tube")){
161 if(tmpstring.Contains(
"#")) {
162 int start = tmpstring.Index(
"#") + 1;
163 tmpstring = tmpstring(start, tmpstring.Sizeof());
166 int start = tmpstring.Index(
"e") + 1;
167 tmpstring = tmpstring(start, tmpstring.Sizeof());
170 return tmpstring.Atoi();
181 cavename =
"/cave_1/ftsXXassembly_X/";
182 tmpstring = tmpstring(cavename.Sizeof() - 1, tmpstring.Sizeof());
185 int index = tmpstring.Index(
"/");
186 tmpstring = tmpstring(0, index);
194 if(tmpstring.Contains(
"down")){
195 tmpstring.Replace(13, 1,
"#");
198 if(tmpstring.Contains(
"up")){
199 tmpstring.Replace(11, 1,
"#");
202 if(!tmpstring.Contains(
"up") && !tmpstring.Contains(
"down")){
203 tmpstring.Replace(9, 1,
"#");
214 Int_t chamber=chamberid;
218 if(chamberid==1 || chamberid==2){
219 if(chamberid==2){i=i+8;}
225 if(chamberid==3 || chamberid==4){
226 if(chamberid==3){i=i+16;}
228 if(tmpstring.Contains(
"fts32")){tube=tube+384;}
229 if(tmpstring.Contains(
"fts33")){tube=tube+768;}
230 if(tmpstring.Contains(
"fts34")){tube=tube+1152;}
232 if(tmpstring.Contains(
"fts36")){tube=tube+384;}
233 if(tmpstring.Contains(
"fts37")){tube=tube+768;}
234 if(tmpstring.Contains(
"fts38")){tube=tube+1152;}
260 Int_t chamber=chamberid;
267 if(chamberid==1){tube=tubeID;}
268 if(chamberid==2){tube=tubeID+1024;}
270 if(layer==17||layer==18){tube=tubeID+(128*(16));}
271 if(layer==19||layer==20){tube=tubeID+(128*16)+(192*2)+(12*2);}
272 if(layer==21||layer==22){tube=tubeID+(128*16)+(192*4)+(12*4);}
273 if(layer==23||layer==24){tube=tubeID+(128*16)+(192*6)+(12*6);}
276 if(layer==25||layer==26){tube=tubeID+(128*(16)+192*8);}
277 if(layer==27||layer==28){tube=tubeID+(128*(16)+192*10)+12*2;}
278 if(layer==29||layer==30){tube=tubeID+(128*(16)+192*12)+12*4;}
279 if(layer==31||layer==32){tube=tubeID+(128*(16)+192*14)+12*6;}
281 if(chamberid==5){tube=tubeID+(128*16)+(192*16);}
282 if(chamberid==6){tube=tubeID+(128*16)+(192*16)+(400*8);}
294 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
295 if(tubeid<=58){totTubeID=tube+shift;}
297 if(abs(tubeid-(128*(layer)))<=58){
298 totTubeID=tube+12*(layer)+shift;
301 totTubeID=tube+12*(layer-1)+shift;
305 if(tmpstring.Contains(
"up")){
306 totTubeID=tube+12*(layer-1)+shift;
308 if(tmpstring.Contains(
"down")){
309 totTubeID=tube+12*(layer)+shift;
315 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
316 if(tubeid<=58){totTubeID=tube+shift;}
318 if(abs(tubeid-(128*(layer-8)))<=58){
319 totTubeID=tube+12*(layer-8)+shift;
322 totTubeID=tube+12*(layer-9)+shift;
326 if(tmpstring.Contains(
"up")){
327 totTubeID=tube+12*(layer-9)+shift;
329 if(tmpstring.Contains(
"down")){
330 totTubeID=tube+12*(layer-8)+shift;
334 if(chamber==3 || chamber==4){
337 shift=12*(2*8);
int numTL=192;
339 else{shift=12*(3*8);}
340 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
341 if(tubeid<=90){totTubeID=tube+shift;}
344 if(abs(tubeid-(192))<=90){
345 totTubeID=tube+shift+12;
347 else{totTubeID=tube+shift;}
350 if(abs(tubeid-(192*2))<=90){
351 totTubeID=tube+shift+12*2;
353 else{totTubeID=tube+shift+12;}
357 if(tmpstring.Contains(
"down")){
358 if(layer%2!=0){totTubeID=tube+12+shift;}
359 else{totTubeID=tube+12*2+shift;}
361 if(tmpstring.Contains(
"up")){
362 if(layer%2!=0){totTubeID=tube+shift;}
363 else{totTubeID=tube+12+shift;}
370 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
371 if(tubeid<=191){totTubeID=tube+shift;}
373 if(abs(tubeid-(400*(layer-32)))<=191){
374 totTubeID=tube+18*(layer-32)+shift;
377 totTubeID=tube+18*(layer-33)+shift;
381 if(tmpstring.Contains(
"up")){
382 totTubeID=tube+18*(layer-33)+shift;
384 if(tmpstring.Contains(
"down")){
385 totTubeID=tube+18*(layer-32)+shift;
391 int shift=12*32+18*8;
392 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
393 if(tubeid<=287){totTubeID=tube+shift;}
395 if(abs(tubeid-(592*(layer-40)))<=287){
396 totTubeID=tube+18*(layer-40)+shift;
399 totTubeID=tube+18*(layer-41)+shift;
403 if(tmpstring.Contains(
"up")){
404 totTubeID=tube+18*(layer-41)+shift;
406 if(tmpstring.Contains(
"down")){
407 totTubeID=tube+18*(layer-40)+shift;
424 std::cout<<
"#####Mapper:filltubearray######"<<std::endl;
425 std::cout<<
"fGeoType="<<
fGeoType<<std::endl;
441 tmpstring += tubeid ;
444 if(isCopy == kTRUE) {
445 tmpstring.Prepend(
"ftsXXtube#");
449 tmpstring.Prepend(
"ftsXXtube");
462 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
466 pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
474 FairGeoTransform *lab = pnode->getLabTransform();
475 FairGeoVector tra = lab->getTransVector();
476 FairGeoRotation
rot = lab->getRotMatrix();
479 double x = tra.getX()/10.;
480 double y = tra.getY()/10.;
481 double z = tra.getZ()/10.;
483 for(
int i = 0;
i < 3;
i++)
for(
int j = 0; j < 3; j++) r[
i][j] = rot.getElement(
i,j);
485 TGeoVolume* rootvol = pnode->getRootVolume();
486 TGeoTube *tube = (TGeoTube*) rootvol->GetShape();
487 Double_t halflength = tube->GetDz();
492 return new PndFtsTube((
float)x,(
float)y,(
float)z,
493 r[0][0],r[0][1],r[0][2],
494 r[1][0],r[1][1],r[1][2],
495 r[2][0],r[2][1],r[2][2],
507 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
515 cout <<
"PndFtsMapCreator2::GetTubeFromNameToFillGeoType1: tube " << tubename <<
" not found (nor as a copy)" << endl;
519 FairGeoTransform *lab = pnode->getLabTransform();
520 FairGeoVector tra = lab->getTransVector();
521 FairGeoRotation
rot = lab->getRotMatrix();
524 double x = tra.getX()/10.;
525 double y = tra.getY()/10.;
526 double z = tra.getZ()/10.;
528 for(
int i = 0;
i < 3;
i++)
for(
int j = 0; j < 3; j++) r[
i][j] = rot.getElement(
i,j);
530 TGeoVolume* rootvol = pnode->getRootVolume();
531 TGeoTube *tube = (TGeoTube*) rootvol->GetShape();
532 Double_t halflength = tube->GetDz();
537 return new PndFtsTube((
float)x,(
float)y,(
float)z,
538 r[0][0],r[0][1],r[0][2],
539 r[1][0],r[1][1],r[1][2],
540 r[2][0],r[2][1],r[2][2],
549 TClonesArray *tubeArray =
new TClonesArray(
"PndFtsTube");
553 for(
int i = 0;
i < geoPassNodes->GetEntriesFast();
i++) {
554 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->At(
i);
557 std::cout<<
"PndFtsMapCreator2::FillTubeArrayGeoType1 : tubename="<< pnode->GetName() <<
" not existing!!!" << std::endl;
560 TString tubename = pnode->GetName();
564 if( (!tubename.Contains(
"tube")) || (!tubename.Contains(
"fts")) )
572 Int_t tempLayer =
GetLayerID(tempChamber, tubeID, tubename);
573 Int_t totTubeID =
GetTubeIDTot(tempChamber, tempLayer, tubeID, tubename );
576 new((*tubeArray)[totTubeID])
PndFtsTube(*ftstube);
TString GetNameFromPathGeoType1(TString path)
Int_t GetLayerID(Int_t chamberid, Int_t tubeid, TString path)
std::map< int, int > copy_map
TString GetNameFromTubeIDGeoType1(Int_t tubeid, Bool_t isCopy)
PndGeoFtsPar * fFtsParameters
Int_t GetChamberIDFromPath(TString path)
PndFtsTube * GetTubeFromNameToFillGeoType1(TString tubename)
void SetGeneralParameters()
Int_t GetChamberIDFromName(TString name)
PndFtsTube * GetTubeFromTubeIDToFillGeoType1(Int_t tubeid)
Int_t GetTubeIDFromPathGeoType1(TString path)
Int_t GetTubeIDFromPath(TString path)
Int_t GetTubeIDTot(Int_t chamberid, Int_t layerid, Int_t tubeid, TString path)
PndFtsTube * GetTubeFromTubeID(Int_t tubeid)
TObjArray * GetGeoPassiveNodes()
TClonesArray * FillTubeArray()
this function will be used in PndFtsHitProducesRealFast
TClonesArray * FillTubeArrayGeoType1()
Int_t GetTubeIDFromNameGeoType1(TString name)
TFile infile("dedx_out.root","READ")