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")