]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFv6T0.cxx
Fixed install target
[u/mrichter/AliRoot.git] / TOF / AliTOFv6T0.cxx
index 49ba235e65e5a07d56b1461f9637d2079e2e50a3..82f49bca8498e637c829266252da93f1af4abd0d 100644 (file)
@@ -89,16 +89,14 @@ Revision 0.1 2007 March G. Cara Romeo and A. De Caro
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "TDirectory.h"
-#include "TBRIK.h"
-#include "TGeometry.h"
-#include "TLorentzVector.h"
-#include "TNode.h"
-#include "TVirtualMC.h"
-#include "TGeoManager.h"
+#include <TDirectory.h>
+#include <TGeoGlobalMagField.h>
+#include <TGeoManager.h>
 #include <TGeoMatrix.h>
 #include <TGeoPhysicalNode.h>
 #include <TGeoVolume.h>
+#include <TLorentzVector.h>
+#include <TVirtualMC.h>
 
 #include "AliConst.h"
 #include "AliGeomManager.h"
@@ -129,7 +127,9 @@ const Float_t AliTOFv6T0::fgkInterCentrModBorder1  =  49.5 ; // cm
 const Float_t AliTOFv6T0::fgkInterCentrModBorder2  =  57.5 ; // cm
 const Float_t AliTOFv6T0::fgkExterInterModBorder1  = 196.0 ; // cm
 const Float_t AliTOFv6T0::fgkExterInterModBorder2  = 203.5 ; // cm
-const Float_t AliTOFv6T0::fgkLengthInCeModBorder   =   7.2 ; // cm // it was 4.7 cm (AdC)
+//const Float_t AliTOFv6T0::fgkLengthInCeModBorder   =   7.2 ; // cm // it was 4.7 cm (AdC)
+const Float_t AliTOFv6T0::fgkLengthInCeModBorderU  =   5.0 ; // cm
+const Float_t AliTOFv6T0::fgkLengthInCeModBorderD  =   7.0 ; // cm
 const Float_t AliTOFv6T0::fgkLengthExInModBorder   =   5.0 ; // cm // it was 7.0 cm (AdC)
 const Float_t AliTOFv6T0::fgkModuleCoverThickness  =   2.0 ; // cm
 const Float_t AliTOFv6T0::fgkFEAwidth1    = 19.0; // cm
@@ -216,7 +216,7 @@ AliTOFv6T0::AliTOFv6T0(const char *name, const char *title):
 
   // Save the geometry
   TDirectory* saveDir = gDirectory;
-  gAlice->GetRunLoader()->CdGAFile();
+  AliRunLoader::Instance()->CdGAFile();
   fTOFGeometry->Write("TOFgeometry");
   saveDir->cd();
 
@@ -350,86 +350,6 @@ void AliTOFv6T0::AddAlignableVolumes() const
 
   }
   
-}
-//____________________________________________________________________________
-void AliTOFv6T0::BuildGeometry()
-{
-  //
-  // Build TOF ROOT geometry for the ALICE event display
-  //
-  TNode *node, *top;
-  const int kColorTOF  = 27;
-  
-  TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
-
-  // Find top TNODE
-  top = globalGeometry->GetNode("alice");
-  
-  // Position the different copies
-  const Float_t krTof  =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
-  const Float_t khTof  = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
-  const Int_t   kNTof  = fTOFGeometry->NSectors();
-  const Float_t kangle = k2PI/kNTof;
-
-  Float_t ang;
-  
-  // define offset for nodes
-  Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (fgkInterCentrModBorder1+fgkInterCentrModBorder2)*0.5)*0.5;
-  Float_t zOffsetA = 0.;
-
-  // Define TOF basic volume
-    char nodeName0[16], nodeName1[16], nodeName2[16];
-  char nodeName3[16], nodeName4[16], rotMatNum[16];
-
-  if (fTOFHoles) {
-    new TBRIK("S_TOF_B","TOF box","void",
-             fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
-    new TBRIK("S_TOF_C","TOF box","void",
-             fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
-  }
-  new TBRIK("S_TOF_A","TOF box","void",
-            fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
-  
-  for (Int_t nodeNum=1;nodeNum<kNTof+1;nodeNum++){
-    
-    if (nodeNum<10) {
-      sprintf(rotMatNum,"rot50%i",nodeNum);
-      sprintf(nodeName0,"FTO00%i",nodeNum);
-      sprintf(nodeName1,"FTO10%i",nodeNum);
-      sprintf(nodeName2,"FTO20%i",nodeNum);
-      sprintf(nodeName3,"FTO30%i",nodeNum);
-      sprintf(nodeName4,"FTO40%i",nodeNum);
-    }
-    if (nodeNum>9) {
-      sprintf(rotMatNum,"rot5%i",nodeNum);
-      sprintf(nodeName0,"FTO0%i",nodeNum);
-      sprintf(nodeName1,"FTO1%i",nodeNum);
-      sprintf(nodeName2,"FTO2%i",nodeNum);
-      sprintf(nodeName3,"FTO3%i",nodeNum);
-      sprintf(nodeName4,"FTO4%i",nodeNum);
-    }
-    
-    new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
-    ang = (4.5-nodeNum) * kangle;
-
-    if (fTOFHoles) {   
-      top->cd();
-      node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
-      node->SetLineColor(kColorTOF);
-      fNodes->Add(node);
-      
-      top->cd();
-      node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
-      node->SetLineColor(kColorTOF);
-      fNodes->Add(node);
-    }
-
-    top->cd();
-    node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
-    node->SetLineColor(kColorTOF);
-    fNodes->Add(node);
-  } // end loop on nodeNum
-
 }
 
 //_____________________________________________________________________________
@@ -458,10 +378,10 @@ void AliTOFv6T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA)
   //
 
   AliDebug(1, "************************* TOF geometry **************************");
-  AliDebug(1,Form(" xtof   %d",  xtof));
-  AliDebug(1,Form(" ytof   %d",  ytof));
-  AliDebug(1,Form(" zlenA   %d", zlenA));
-  AliDebug(2,Form(" zlenA*0.5 = %d", zlenA*0.5));
+  AliDebug(1,Form(" xtof   %f",  xtof));
+  AliDebug(1,Form(" ytof   %f",  ytof));
+  AliDebug(1,Form(" zlenA   %f", zlenA));
+  AliDebug(2,Form(" zlenA*0.5 = %f", zlenA*0.5));
 
   Float_t xFLT, yFLT, zFLTA;
   xFLT  = xtof     - 2.*fgkModuleWallThickness;
@@ -547,7 +467,8 @@ void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
   // Definition and positioning
   // of the fibre glass walls between central and intermediate modules (FWZ1 and FWZ2)
   Float_t alpha, tgal, beta, tgbe, trpa[11];
-  tgal  = (yFLT - 2.*fgkLengthInCeModBorder)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
+  //tgal  = (yFLT - 2.*fgkLengthInCeModBorder)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
+  tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
   alpha = TMath::ATan(tgal);
   beta  = (kPi*0.5 - alpha)*0.5;
   tgbe  = TMath::Tan(beta);
@@ -555,28 +476,34 @@ void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
   trpa[1]  = 0.;
   trpa[2]  = 0.;
   trpa[3]  = 2.*fgkModuleWallThickness;
-  trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
-  trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[4]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[5]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
   trpa[7]  = 2.*fgkModuleWallThickness;
-  trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
-  trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[8]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[9]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
-  gMC->Gsvolu("FWZ1", "TRAP", idtmed[503], trpa, 11); // Fibre glass
+  gMC->Gsvolu("FWZ1D", "TRAP", idtmed[503], trpa, 11); // Fibre glass
 
   AliMatrix (idrotm[0],90., 90.,180.,0.,90.,180.);
   AliMatrix (idrotm[1],90., 90.,  0.,0.,90.,  0.);
 
   //xcoor = 0.;
-  ycoor = -(yFLT - fgkLengthInCeModBorder)*0.5;
+  //ycoor = -(yFLT - fgkLengthInCeModBorder)*0.5;
+  ycoor = -(yFLT - fgkLengthInCeModBorderD)*0.5;
   zcoor = fgkInterCentrModBorder1;
-  gMC->Gspos("FWZ1", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
-  gMC->Gspos("FWZ1", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
+  gMC->Gspos("FWZ1D", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
+  gMC->Gspos("FWZ1D", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
 
   Float_t y0B, ycoorB, zcoorB;
 
   if (fTOFHoles) {
-    y0B = fgkLengthInCeModBorder - fgkModuleWallThickness*tgbe;
+    //y0B = fgkLengthInCeModBorder - fgkModuleWallThickness*tgbe;
+    y0B = fgkLengthInCeModBorderD - fgkModuleWallThickness*tgbe;
     trpa[0]  = xFLT*0.5;
     trpa[1]  = 0.;
     trpa[2]  = 0.;
@@ -591,22 +518,48 @@ void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
     //xcoor = 0.;
     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 - 2.*fgkModuleWallThickness;
-    gMC->Gsvolu("FWZA", "TRAP", idtmed[503], trpa, 11); // Fibre glass
-    gMC->Gspos("FWZA", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[1], "ONLY");
-    gMC->Gspos("FWZA", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[0], "ONLY");
+    gMC->Gsvolu("FWZAD", "TRAP", idtmed[503], trpa, 11); // Fibre glass
+    gMC->Gspos("FWZAD", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[1], "ONLY");
+    gMC->Gspos("FWZAD", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[0], "ONLY");
   }
 
+
+
+  tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
+  alpha = TMath::ATan(tgal);
+  beta  = (kPi*0.5 - alpha)*0.5;
+  tgbe  = TMath::Tan(beta);
+  trpa[0]  = xFLT*0.5;
+  trpa[1]  = 0.;
+  trpa[2]  = 0.;
+  trpa[3]  = 2.*fgkModuleWallThickness;
+  //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[4]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[5]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
+  trpa[7]  = 2.*fgkModuleWallThickness;
+  trpa[8]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[9]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
+  //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
+  trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
+  gMC->Gsvolu("FWZ1U", "TRAP", idtmed[503], trpa, 11); // Fibre glass
+
+
   AliMatrix (idrotm[2],90.,270.,  0.,0.,90.,180.);
   AliMatrix (idrotm[3],90.,270.,180.,0.,90.,  0.);
 
   //xcoor = 0.;
-  ycoor = (yFLT - fgkLengthInCeModBorder)*0.5;
+  //ycoor = (yFLT - fgkLengthInCeModBorder)*0.5;
+  ycoor = (yFLT - fgkLengthInCeModBorderU)*0.5;
   zcoor = fgkInterCentrModBorder2;
-  gMC->Gspos("FWZ1", 3, "FLTA", xcoor, ycoor, zcoor,idrotm[2], "ONLY");
-  gMC->Gspos("FWZ1", 4, "FLTA", xcoor, ycoor,-zcoor,idrotm[3], "ONLY");
+  gMC->Gspos("FWZ1U", 1, "FLTA", xcoor, ycoor, zcoor,idrotm[2], "ONLY");
+  gMC->Gspos("FWZ1U", 2, "FLTA", xcoor, ycoor,-zcoor,idrotm[3], "ONLY");
 
   if (fTOFHoles) {
-    y0B = fgkLengthInCeModBorder + fgkModuleWallThickness*tgbe;
+    //y0B = fgkLengthInCeModBorder + fgkModuleWallThickness*tgbe;
+    y0B = fgkLengthInCeModBorderU + fgkModuleWallThickness*tgbe;
     trpa[0]  = xFLT*0.5;
     trpa[1]  = 0.;
     trpa[2]  = 0.;
@@ -618,13 +571,13 @@ void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
     trpa[8]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
     trpa[9]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
-    gMC->Gsvolu("FWZB", "TRAP", idtmed[503], trpa, 11); // Fibre glass
+    gMC->Gsvolu("FWZBU", "TRAP", idtmed[503], trpa, 11); // Fibre glass
     //xcoor = 0.;
     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 -
       (fgkInterCentrModBorder2 - fgkInterCentrModBorder1) - 2.*fgkModuleWallThickness;
-    gMC->Gspos("FWZB", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[3], "ONLY");
-    gMC->Gspos("FWZB", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[2], "ONLY");
+    gMC->Gspos("FWZBU", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[3], "ONLY");
+    gMC->Gspos("FWZBU", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[2], "ONLY");
   }
 
   trpa[0] = 0.5*(fgkInterCentrModBorder2 - fgkInterCentrModBorder1)/TMath::Cos(alpha);
@@ -639,7 +592,8 @@ void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
   AliMatrix (idrotm[5],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,  0.);
 
   //xcoor = 0.;
-  ycoor = 0.;
+  //ycoor = 0.;
+  ycoor = (fgkLengthInCeModBorderD - fgkLengthInCeModBorderU)*0.5;
   zcoor = (fgkInterCentrModBorder2 + fgkInterCentrModBorder1)*0.5;
   gMC->Gspos("FWZ2", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[4], "ONLY");
   gMC->Gspos("FWZ2", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[5], "ONLY");
@@ -1959,7 +1913,7 @@ void AliTOFv6T0::MakeReadoutCrates(Float_t ytof) const
   }
 
   zcoor = (90. - 223.)*0.5;
-  gMC->Gspos("FTOS", 1, "BBCE", ra, 0., zcoor, 0, "ONLY");
+  gMC->Gspos("FTOS", 1, "BBCE", ra, -3., zcoor, 0, "ONLY");
 
 }
 
@@ -2226,7 +2180,7 @@ void AliTOFv6T0::CreateMaterials()
 
   //AliTOF::CreateMaterials();
 
-  AliMagF *magneticField = (AliMagF*)gAlice->Field();
+  AliMagF *magneticField = (AliMagF*)((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
 
   Int_t   isxfld = magneticField->Integ();
   Float_t sxmgmx = magneticField->Max();
@@ -2262,7 +2216,7 @@ void AliTOFv6T0::CreateMaterials()
   wmatg10[2]= we[2]*0.4;
   wmatg10[3]= we[3]*0.4;
   wmatg10[4]= we[4]*0.4;
-  AliDebug(1,Form("wg10  %d  %d  %d  %d  %d", wmatg10[0], wmatg10[1], wmatg10[2], wmatg10[3], wmatg10[4]));
+  AliDebug(1,Form("wg10  %f  %f  %f  %f  %f", wmatg10[0], wmatg10[1], wmatg10[2], wmatg10[3], wmatg10[4]));
   //Float_t densg10 = 1.7; //old value
   Float_t densg10 = 2.0; // (+17.8%)
 
@@ -2549,7 +2503,8 @@ void AliTOFv6T0::StepManager()
   }
 }
 //-------------------------------------------------------------------
-void AliTOFv6T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Int_t n) const
+void AliTOFv6T0::MaterialMixer(Float_t * p, const Float_t * const a,
+                              const Float_t * const m, Int_t n) const
 {
   // a[] atomic weights vector      (in)
   //     (atoms present in more compound appear separately)