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)