12 #include "FairGeoNode.h"
13 #include "FairGeoVolume.h"
14 #include "FairGeoTransform.h"
15 #include "FairGeoVector.h"
16 #include "FairGeoRotation.h"
17 #include "FairGeoTube.h"
21 #include "TObjArray.h"
23 #include "TGeoVolume.h"
25 #include "TClonesArray.h"
26 #include "FairRootManager.h"
34 : fGeoType(0), fFtsParameters(new
PndGeoFtsPar()), fTubeInRad(0), fTubeOutRad(0)
47 : fGeoType(geoType), fFtsParameters(new
PndGeoFtsPar()), fTubeInRad(0), fTubeOutRad(0)
50 if(
fGeoType != 1) Info(
"PndFtsMapCreator",
"Geometry %i not supported by map",
fGeoType);
55 : fGeoType(0), fFtsParameters(ftsPar), fTubeInRad(0), fTubeOutRad(0)
63 if(
fGeoType != 1) Info(
"PndFtsMapCreator",
"Geometry %i not supported by map",
fGeoType);
99 if(pathstring.Contains(
"fts01")){
103 if(pathstring.Contains(
"fts02")){
107 if(pathstring.Contains(
"fts31")||pathstring.Contains(
"fts32")||pathstring.Contains(
"fts33")||pathstring.Contains(
"fts34")){
111 if(pathstring.Contains(
"fts35")||pathstring.Contains(
"fts36")||pathstring.Contains(
"fts37")||pathstring.Contains(
"fts38")){
115 if(pathstring.Contains(
"fts05tube")){
119 if(pathstring.Contains(
"fts06tube")){
128 if(pathstring.Contains(
"fts01tube")){
132 if(pathstring.Contains(
"fts02tube")){
136 if(pathstring.Contains(
"fts31tube")||pathstring.Contains(
"fts32tube")||pathstring.Contains(
"fts33tube")||pathstring.Contains(
"fts34tube")){
140 if(pathstring.Contains(
"fts35tube")||pathstring.Contains(
"fts36tube")||pathstring.Contains(
"fts37tube")||pathstring.Contains(
"fts38tube")){
144 if(pathstring.Contains(
"fts05tube")){
148 if(pathstring.Contains(
"fts06tube")){
160 if(tmpstring.Contains(
"#")) {
161 int start = tmpstring.Index(
"#") + 1;
162 tmpstring = tmpstring(start, tmpstring.Sizeof());
165 int start = tmpstring.Index(
"e") + 1;
166 tmpstring = tmpstring(start, tmpstring.Sizeof());
169 return tmpstring.Atoi();
180 cavename =
"/cave_1/ftsXXassembly_X/";
181 tmpstring = tmpstring(cavename.Sizeof() - 1, tmpstring.Sizeof());
184 int index = tmpstring.Index(
"/");
185 tmpstring = tmpstring(0, index);
193 if(tmpstring.Contains(
"down")){
194 tmpstring.Replace(13, 1,
"#");
197 if(tmpstring.Contains(
"up")){
198 tmpstring.Replace(11, 1,
"#");
201 if(!tmpstring.Contains(
"up") && !tmpstring.Contains(
"down")){
202 tmpstring.Replace(9, 1,
"#");
217 if(chamberid==1 || chamberid==2){
218 if(chamberid==2){i=i+8;}
226 if(tmpstring.Contains(
"fts32")){tube=tube+352;}
227 if(tmpstring.Contains(
"fts33")){tube=tube+704;}
228 if(tmpstring.Contains(
"fts34")){tube=tube+1056;}
236 if(tmpstring.Contains(
"fts36")){tube=tube+416;}
237 if(tmpstring.Contains(
"fts37")){tube=tube+832;}
238 if(tmpstring.Contains(
"fts38")){tube=tube+1248;}
265 if(layerid==3 || layerid==4 || layerid==11 || layerid==12 || layerid==19 || layerid==20 || layerid==27 || layerid==28 || layerid==35 || layerid==36 || layerid==43 || layerid==44){skew=1;}
267 if(layerid==5 || layerid==6 || layerid==13 || layerid==14 || layerid==21 || layerid==22 || layerid==29 || layerid==30 || layerid==37 || layerid==38 || layerid==45 || layerid==46){skew=-1;}
274 Int_t chamber=chamberid;
280 Int_t strawCh12=132, strawCh3=176, strawCh4=208, strawCh56=388;
282 if(chamberid==1){tube=tubeID;}
283 if(chamberid==2){tube=tubeID+(8*strawCh12);}
285 if(layer==17||layer==18){tube=tubeID+(strawCh12*(16));}
286 if(layer==19||layer==20){tube=tubeID+(strawCh12*16)+(strawCh3*2)+(16*2);}
287 if(layer==21||layer==22){tube=tubeID+(strawCh12*16)+(strawCh3*4)+(16*4);}
288 if(layer==23||layer==24){tube=tubeID+(strawCh12*16)+(strawCh3*6)+(16*6);}
291 if(layer==25||layer==26){tube=tubeID+(strawCh12*(16)+(strawCh3*8));}
292 if(layer==27||layer==28){tube=tubeID+(strawCh12*(16)+(strawCh3*8)+(strawCh4*2))+16*2;}
293 if(layer==29||layer==30){tube=tubeID+(strawCh12*(16)+(strawCh3*8)+(strawCh4*4))+16*4;}
294 if(layer==31||layer==32){tube=tubeID+(strawCh12*(16)+(strawCh3*8)+(strawCh4*6))+16*6;}
296 if(chamberid==5){tube=tubeID+(strawCh12*16)+(strawCh3*8)+(strawCh4*8);}
297 if(chamberid==6){tube=tubeID+(strawCh12*16)+(strawCh3*8)+(strawCh4*8)+(strawCh56*8);}
309 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
310 if(tubeid<=61){totTubeID=tube+shift;}
312 if(abs(tubeid-(strawCh12*(layer)))<=61){
313 totTubeID=tube+12*(layer)+shift;
316 totTubeID=tube+12*(layer-1)+shift;
320 if(tmpstring.Contains(
"up")){
321 totTubeID=tube+12*(layer-1)+shift;
323 if(tmpstring.Contains(
"down")){
324 totTubeID=tube+12*(layer)+shift;
330 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
331 if(tubeid<=61){totTubeID=tube+shift;}
333 if(abs(tubeid-(strawCh12*(layer-8)))<=61){
334 totTubeID=tube+12*(layer-8)+shift;
337 totTubeID=tube+12*(layer-9)+shift;
341 if(tmpstring.Contains(
"up")){
342 totTubeID=tube+12*(layer-9)+shift;
344 if(tmpstring.Contains(
"down")){
345 totTubeID=tube+12*(layer-8)+shift;
351 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
352 if(tubeid<=81){totTubeID=tube+shift;}
355 if(abs(tubeid-(strawCh3))<=81){
356 totTubeID=tube+shift+16;
358 else{totTubeID=tube+shift;}
361 if(abs(tubeid-(strawCh3*2))<=81){
362 totTubeID=tube+shift+16*2;
364 else{totTubeID=tube+shift+16;}
368 if(tmpstring.Contains(
"down")){
369 if(layer%2!=0){totTubeID=tube+16+shift;}
370 else{totTubeID=tube+16*2+shift;}
372 if(tmpstring.Contains(
"up")){
373 if(layer%2!=0){totTubeID=tube+shift;}
374 else{totTubeID=tube+16+shift;}
380 int shift=12*(2*8)+16*8;
381 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
382 if(tubeid<=97){totTubeID=tube+shift;}
385 if(abs(tubeid-(strawCh4))<=103){
386 totTubeID=tube+shift+16;
388 else{totTubeID=tube+shift;}
391 if(abs(tubeid-(strawCh4*2))<=103){
392 totTubeID=tube+shift+16*2;
394 else{totTubeID=tube+shift+16;}
398 if(tmpstring.Contains(
"down")){
399 if(layer%2!=0){totTubeID=tube+16+shift;}
400 else{totTubeID=tube+16*2+shift;}
402 if(tmpstring.Contains(
"up")){
403 if(layer%2!=0){totTubeID=tube+shift;}
404 else{totTubeID=tube+16+shift;}
411 int shift=12*16+16*16;
412 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
413 if(tubeid<=177){totTubeID=tube+shift;}
415 if(abs(tubeid-(strawCh56*(layer-32)))<=194){
416 totTubeID=tube+24*(layer-32)+shift;
419 totTubeID=tube+24*(layer-33)+shift;
423 if(tmpstring.Contains(
"up")){
424 totTubeID=tube+24*(layer-33)+shift;
426 if(tmpstring.Contains(
"down")){
427 totTubeID=tube+24*(layer-32)+shift;
433 int shift=12*16+16*16+24*8;
434 if(!tmpstring.Contains(
"down") && !tmpstring.Contains(
"up")){
435 if(tubeid<=177){totTubeID=tube+shift;}
437 if(abs(tubeid-(strawCh56*(layer-40)))<=194){
438 totTubeID=tube+24*(layer-40)+shift;
441 totTubeID=tube+24*(layer-41)+shift;
445 if(tmpstring.Contains(
"up")){
446 totTubeID=tube+24*(layer-41)+shift;
448 if(tmpstring.Contains(
"down")){
449 totTubeID=tube+24*(layer-40)+shift;
467 std::cout<<
"##### PndFtsMapCreator::FillTubeArray() ######"<<std::endl;
468 std::cout<<
"fGeoType="<<
fGeoType<<std::endl;
484 tmpstring += tubeid ;
487 if(isCopy == kTRUE) {
488 tmpstring.Prepend(
"ftsXXtube#");
492 tmpstring.Prepend(
"ftsXXtube");
506 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
510 pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
518 FairGeoTransform *lab = pnode->getLabTransform();
519 FairGeoVector tra = lab->getTransVector();
520 FairGeoRotation
rot = lab->getRotMatrix();
523 double x = tra.getX()/10.;
524 double y = tra.getY()/10.;
525 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],
550 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->FindObject(tubename);
558 cout <<
"PndFtsMapCreator::GetTubeFromNameToFillGeoType1: tube " << tubename <<
" not found (nor as a copy)" << endl;
562 FairGeoTransform *lab = pnode->getLabTransform();
563 FairGeoVector tra = lab->getTransVector();
564 FairGeoRotation
rot = lab->getRotMatrix();
567 double x = tra.getX()/10.;
568 double y = tra.getY()/10.;
569 double z = tra.getZ()/10.;
578 for(
int i = 0;
i < 3;
i++)
for(
int j = 0; j < 3; j++) r[
i][j] = rot.getElement(
i,j);
580 TGeoVolume* rootvol = pnode->getRootVolume();
581 TGeoTube *tube = (TGeoTube*) rootvol->GetShape();
582 Double_t halflength = tube->GetDz();
587 return new PndFtsTube((
float)x,(
float)y,(
float)z,
588 r[0][0],r[0][1],r[0][2],
589 r[1][0],r[1][1],r[1][2],
590 r[2][0],r[2][1],r[2][2],
600 TClonesArray *tubeArray =
new TClonesArray(
"PndFtsTube");
604 for(
int i = 0;
i < geoPassNodes->GetEntriesFast();
i++) {
605 FairGeoNode *pnode = (FairGeoNode*) geoPassNodes->At(
i);
608 std::cout<<
"PndFtsMapCreator::FillTubeArrayGeoType1 : tubename="<< pnode->GetName() <<
" not existing!!!" << std::endl;
611 TString tubename = pnode->GetName();
615 if( (!tubename.Contains(
"tube")) || (!tubename.Contains(
"fts")) )
623 Int_t tempLayer =
GetLayerID(tempChamber, tubeID, tubename);
624 Int_t totTubeID =
GetTubeIDTot(tempChamber, tempLayer, tubeID, tubename );
626 new((*tubeArray)[totTubeID])
PndFtsTube(*ftstube);
PndGeoFtsPar * fFtsParameters
Int_t GetChamberIDFromName(TString name)
PndFtsTube * GetTubeFromTubeIDToFillGeoType1(Int_t tubeid)
Int_t GetTubeIDFromPath(TString path)
PndFtsTube * GetTubeFromTubeID(Int_t tubeid)
Int_t GetChamberIDFromPath(TString path)
PndFtsTube * GetTubeFromNameToFillGeoType1(TString tubename, Int_t tubeid, Int_t layerid)
Int_t GetLayerID(Int_t chamberid, Int_t tubeid, TString path)
Int_t IsSkew(Int_t layerid)
Int_t GetTubeIDFromPathGeoType1(TString path)
Int_t GetTubeIDTot(Int_t chamberid, Int_t layerid, Int_t tubeid, TString path)
TClonesArray * FillTubeArrayGeoType1()
TObjArray * GetGeoPassiveNodes()
TClonesArray * FillTubeArray()
this function will be used in PndFtsHitProducesRealFast
TString GetNameFromTubeIDGeoType1(Int_t tubeid, Bool_t isCopy)
void SetGeneralParameters()
TString GetNameFromPathGeoType1(TString path)
Int_t GetTubeIDFromNameGeoType1(TString name)