]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFv4T0.cxx
* hmpid_digits.C, hmpid_raw.C
[u/mrichter/AliRoot.git] / TOF / AliTOFv4T0.cxx
index 9a2af23d6af03d86435151777fdbf4e6f7a4b0dc..ec7304d9cf7278933fcef114278f74384b6477b6 100644 (file)
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include <Riostream.h>
-#include <stdlib.h>
-
+#include "TLorentzVector.h"
 #include "TVirtualMC.h"
-#include <TBRIK.h>
-#include <TGeometry.h>
-#include <TLorentzVector.h>
-#include <TNode.h>
-#include <TObject.h>
-#include <TVirtualMC.h>
 
-#include "AliLog.h"
 #include "AliConst.h"
-#include "AliRun.h"
-#include "AliMC.h"
+#include "AliLog.h"
 #include "AliMagF.h"
+#include "AliMC.h"
+#include "AliRun.h"
+#include "AliTrackReference.h"
 
 #include "AliTOFGeometry.h"
 #include "AliTOFGeometryV4.h"
 #include "AliTOFv4T0.h"
 
+extern TDirectory *gDirectory;
+extern TVirtualMC *gMC;
+
+extern AliRun *gAlice;
+
 ClassImp(AliTOFv4T0)
 
 //_____________________________________________________________________________
-AliTOFv4T0::AliTOFv4T0()
+  AliTOFv4T0::AliTOFv4T0():
+  fIdFTOA(-1),
+  fIdFTOB(-1),
+  fIdFTOC(-1),
+  fIdFLTA(-1),
+  fIdFLTB(-1),
+  fIdFLTC(-1),
+  fTOFHoles(kFALSE)
 {
   //
   // Default constructor
@@ -69,8 +74,15 @@ AliTOFv4T0::AliTOFv4T0()
 }
  
 //_____________________________________________________________________________
-AliTOFv4T0::AliTOFv4T0(const char *name, const char *title)
-        : AliTOF(name,title,"tzero")
+AliTOFv4T0::AliTOFv4T0(const char *name, const char *title):
+  AliTOF(name,title,"tzero"),
+  fIdFTOA(-1),
+  fIdFTOB(-1),
+  fIdFTOC(-1),
+  fIdFLTA(-1),
+  fIdFLTB(-1),
+  fIdFLTC(-1),
+  fTOFHoles(kFALSE)
 {
   //
   // Standard constructor
@@ -80,7 +92,7 @@ AliTOFv4T0::AliTOFv4T0(const char *name, const char *title)
   // put TOF
 
 
-  AliModule* frame=gAlice->GetModule("FRAME");
+  AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
   if(!frame) {
     AliFatal("TOF needs FRAME to be present");
   } else{
@@ -101,97 +113,11 @@ AliTOFv4T0::AliTOFv4T0(const char *name, const char *title)
 
   // Save the geometry
   TDirectory* saveDir = gDirectory;
-  gAlice->GetRunLoader()->CdGAFile();
+  AliRunLoader::Instance()->CdGAFile();
   fTOFGeometry->Write("TOFgeometry");
   saveDir->cd();
 
 } 
-
-//____________________________________________________________________________
-void AliTOFv4T0::BuildGeometry()
-{
-  //
-  // Build TOF ROOT geometry for the ALICE event display
-  //
-  TNode *node, *top;
-  const int kColorTOF  = 27;
-  
-  // Find top TNODE
-  top = gAlice->GetGeometry()->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 kPi    = TMath::Pi();
-  const Float_t kangle = 2*kPi/kNTof;
-  Float_t ang;
-  
-  // define offset for nodes
-  Float_t zOffsetC = fTOFGeometry->MaxhZtof() - fTOFGeometry->ZlenC()*0.5;
-  Float_t zOffsetB = fTOFGeometry->MaxhZtof() - fTOFGeometry->ZlenC() - fTOFGeometry->ZlenB()*0.5;
-  Float_t zOffsetA = 0.;
-  // Define TOF basic volume
-  
-  char nodeName0[7], nodeName1[7], nodeName2[7];
-  char nodeName3[7], nodeName4[7], rotMatNum[7];
-  
-  new TBRIK("S_TOF_C","TOF box","void",
-            fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenC()*0.5);
-  new TBRIK("S_TOF_B","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<19;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;
-
-    top->cd();
-    node = new TNode(nodeName0,nodeName0,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetC,rotMatNum);
-    node->SetLineColor(kColorTOF);
-    fNodes->Add(node);
-    
-    top->cd();
-    node = new TNode(nodeName1,nodeName1,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetC,rotMatNum);
-    node->SetLineColor(kColorTOF);
-    fNodes->Add(node);
-    
-    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_B", 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
-
-}
  
 //_____________________________________________________________________________
 void AliTOFv4T0::CreateGeometry()
@@ -707,7 +633,7 @@ void AliTOFv4T0::DrawModule() const
   gMC->Gdopt("hide","off");
 }
 //_____________________________________________________________________________
-void AliTOFv4T0::DrawDetectorModules()
+void AliTOFv4T0::DrawDetectorModules() const
 {
 //
 // Draw a shaded view of the TOF detector version 4
@@ -779,7 +705,7 @@ void AliTOFv4T0::DrawDetectorModules()
 }                                 
 
 //_____________________________________________________________________________
-void AliTOFv4T0::DrawDetectorStrips()
+void AliTOFv4T0::DrawDetectorStrips() const
 {
   //
   // Draw a shaded view of the TOF strips for version 4
@@ -906,9 +832,11 @@ void AliTOFv4T0::CreateMaterials()
   // Revision: F. Pierella 18-VI-2002
   //
 
-  Int_t   isxfld = gAlice->Field()->Integ();
-  Float_t sxmgmx = gAlice->Field()->Max();
-  //
+  AliMagF *magneticField = (AliMagF*)((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
+
+  Int_t   isxfld = magneticField->Integ();
+  Float_t sxmgmx = magneticField->Max();
+
   //--- Quartz (SiO2) to simulate float glass
   //    density tuned to have correct float glass 
   //    radiation length
@@ -1085,7 +1013,7 @@ void AliTOFv4T0::StepManager()
 
   TLorentzVector mom, pos;
   Float_t xm[3],pm[3],xpad[3],ppad[3];
-  Float_t hits[14],phi,phid,z;
+  Float_t hits[14];
   Int_t   vol[5];
   Int_t   sector, plate, padx, padz, strip;
   Int_t   copy, padzid, padxid, stripid, i;
@@ -1095,12 +1023,16 @@ void AliTOFv4T0::StepManager()
   if(
      gMC->IsTrackEntering()
      && gMC->TrackCharge()
-     && gMC->GetMedium()==idtmed[513]
+     //&& gMC->GetMedium()==idtmed[513]
+     && gMC->CurrentMedium()==idtmed[513]
      && gMC->CurrentVolID(copy)==fIdSens
      )
   {
 
-    AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
+    AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
+
+    AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
+    //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
 
     // getting information about hit volumes
     
@@ -1143,17 +1075,27 @@ void AliTOFv4T0::StepManager()
     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
 
 
-    z = pos[2];
+    const char * pathA="FTOA";
+    const char * pathB="FTOB";
+    const char * pathC="FTOC";
+    const char * path71="B071";
+    const char * path75="B075";
+    const char * path74="B074";
+    const char* volpath;    
+
+    Int_t index=0;
+    volpath=gMC->CurrentVolOffName(6);
+    index=gMC->CurrentVolOffID(6,copy);
+    index=copy;
 
-    plate = -1;  
+    
+    plate=-1;
+    if(strcmp(pathC,volpath)==0 && index==1)plate=0;
+    if(strcmp(pathB,volpath)==0 && index==1)plate=1;
+    if(strcmp(pathA,volpath)==0 && index==0)plate=2;
+    if(strcmp(pathB,volpath)==0 && index==2)plate=3;
+    if(strcmp(pathC,volpath)==0 && index==2)plate=4;
 
-    if (TMath::Abs(z) <=  fTOFGeometry->ZlenA()*0.5)  plate = 2;
-    if (z < (fTOFGeometry->ZlenA()*0.5+fTOFGeometry->ZlenB()) && 
-        z >  fTOFGeometry->ZlenA()*0.5)               plate = 1;
-    if (z >-(fTOFGeometry->ZlenA()*0.5+fTOFGeometry->ZlenB()) &&
-        z < -fTOFGeometry->ZlenA()*0.5)               plate = 3;
-    if (z > (fTOFGeometry->ZlenA()*0.5+fTOFGeometry->ZlenB()))     plate = 0;
-    if (z <-(fTOFGeometry->ZlenA()*0.5+fTOFGeometry->ZlenB()))     plate = 4;
 
 
     if (plate==0) strip=fTOFGeometry->NStripC()-strip;
@@ -1175,11 +1117,15 @@ void AliTOFv4T0::StepManager()
 
 
 
-    phi = pos.Phi();
-    if (phi>=0.) phid = phi*kRaddeg;
-    else phid = phi*kRaddeg + 360.;
+    volpath=gMC->CurrentVolOffName(8);
+    index=gMC->CurrentVolOffID(8,copy);
+    index=copy;
 
-    sector = Int_t (phid/20.);
+    sector=-1;
+    if(strcmp(path71,volpath)==0 && index <6) sector=12+index;
+    if(strcmp(path71,volpath)==0 && index >=6) sector=index-3;
+    if(strcmp(path75,volpath)==0) sector=index-1;
+    if(strcmp(path74,volpath)==0) sector=10+index;
 
     for(i=0;i<3;++i) {
       hits[i]   = pos[i];
@@ -1201,6 +1147,7 @@ void AliTOFv4T0::StepManager()
     vol[3]= padx;
     vol[4]= padz;    
 
-    AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
+    AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
+    //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
   }
 }