]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFv5T0.cxx
add un-use functionality to clusters
[u/mrichter/AliRoot.git] / TOF / AliTOFv5T0.cxx
index a77223aadbf5cb072a5e0875a916ec087fb6e1bd..db6208e1de41147b47e877f54fe73e664229f04b 100644 (file)
 
 /*
 $Log$
+Revision 1.22  2007/10/07 19:40:46  decaro
+right handling of l2t matrices and alignable entries in case of TOF staging geometry
+
+Revision 1.21  2007/10/04 13:15:30  arcelli
+updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
+
+Revision 1.20  2007/10/03 18:07:22  arcelli
+right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
+
+Revision 1.19  2007/10/03 10:41:12  arcelli
+adding tracking-to-local matrices for new AliTOFcluster
+
+Revision 1.18  2007/07/27 08:14:48  morsch
+Write all track references into the same branch.
+
+Revision 1.17  2007/05/14 14:41:13  decaro
+Fix a bug in FTOA volume positionig inside BTOF13,14,15,16,17 in case of holes in 11th and 12th sectors
+
 Revision 1.16  2007/05/04 12:59:26  arcelli
 Change the TOF SM paths for misalignment (one layer up)
 
@@ -94,21 +112,24 @@ Revision 0.1 2004 November G. Cara Romeo and A. De Caro
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#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"
 #include "AliLog.h"
 #include "AliMagF.h"
 #include "AliMC.h"
 #include "AliRun.h"
+#include "AliTrackReference.h"
 
 #include "AliTOFGeometry.h"
-#include "AliTOFGeometryV5.h"
 #include "AliTOFv5T0.h"
 
 extern TDirectory *gDirectory;
@@ -126,8 +147,8 @@ ClassImp(AliTOFv5T0)
   fIdFTOC(-1),
   fIdFLTA(-1),
   fIdFLTB(-1),
-  fIdFLTC(-1),
-  fTOFHoles(kFALSE)
+  fIdFLTC(-1)//,
+  //fTOFHoles(kFALSE)
 {
   //
   // Default constructor
@@ -142,8 +163,8 @@ AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
   fIdFTOC(-1),
   fIdFLTA(-1),
   fIdFLTB(-1),
-  fIdFLTC(-1),
-  fTOFHoles(kFALSE)
+  fIdFLTC(-1)//,
+  //fTOFHoles(kFALSE)
 {
   //
   // Standard constructor
@@ -152,14 +173,14 @@ AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
   // Check that FRAME is there otherwise we have no place where to
   // put TOF
 
-
+  /*
   AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
   if(!frame) {
     AliFatal("TOF needs FRAME to be present");
   } else{
     
     if (fTOFGeometry) delete fTOFGeometry;
-    fTOFGeometry = new AliTOFGeometryV5();
+    fTOFGeometry = new AliTOFGeometry();
 
     if(frame->IsVersion()==1) {
       AliDebug(1,Form("Frame version %d", frame->IsVersion())); 
@@ -171,12 +192,17 @@ AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
       fTOFHoles=true;}      
   }
   fTOFGeometry->SetHoles(fTOFHoles);
+  */
+
+  if (fTOFGeometry) delete fTOFGeometry;
+  fTOFGeometry = new AliTOFGeometry();
+  fTOFGeometry->SetHoles(fTOFHoles);
 
   //AliTOF::fTOFGeometry = fTOFGeometry;
 
   // Save the geometry
   TDirectory* saveDir = gDirectory;
-  gAlice->GetRunLoader()->CdGAFile();
+  AliRunLoader::Instance()->CdGAFile();
   fTOFGeometry->Write("TOFgeometry");
   saveDir->cd();
 
@@ -191,6 +217,9 @@ void AliTOFv5T0::AddAlignableVolumes() const
   // eventual changes in the geometry.
   //
 
+  AliGeomManager::ELayerID idTOF = AliGeomManager::kTOF;
+  Int_t modUID, modnum=0;
+
   TString volPath;
   TString symName;
 
@@ -218,7 +247,26 @@ void AliTOFv5T0::AddAlignableVolumes() const
 
   for (Int_t isect = 0; isect < nSectors; isect++) {
     for (Int_t istr = 1; istr <= nStrips; istr++) {
-      
+
+      modUID = AliGeomManager::LayerToVolUID(idTOF,modnum++);
+      if (fTOFSectors[isect]==-1) continue;
+
+      if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
+       if (istr<39) {
+         vpL3 = "/FTOB_0";
+         vpL4 = "/FLTB_0/FSTR_";
+       }
+       else if (istr>53) {
+         vpL3 = "/FTOC_0";
+         vpL4 = "/FLTC_0/FSTR_";
+       }
+       else continue;
+      }
+      else {
+       vpL3 = "/FTOA_0";
+       vpL4 = "/FLTA_0/FSTR_";
+      }
+
       volPath  = vpL0;
       volPath += isect;
       volPath += vpL1;
@@ -240,7 +288,22 @@ void AliTOFv5T0::AddAlignableVolumes() const
       AliDebug(2,Form("symName=%s\n",symName.Data()));
       AliDebug(2,"--------------------------------------------"); 
              
-      gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
+      if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data(),modUID))
+       AliError(Form("Alignable entry %s not set",symName.Data()));
+
+      //T2L matrices for alignment
+      TGeoPNEntry *e = gGeoManager->GetAlignableEntryByUID(modUID);
+      if (e) {
+       TGeoHMatrix *globMatrix = e->GetGlobalOrig();
+       Double_t phi = 20.0 * (isect % 18) + 10.0;
+       TGeoHMatrix *t2l  = new TGeoHMatrix();
+       t2l->RotateZ(phi);
+       t2l->MultiplyLeft(&(globMatrix->Inverse()));
+       e->SetMatrix(t2l);
+      }
+      else {
+       AliError(Form("Alignable entry %s is not valid!",symName.Data()));
+      }
       imod++;
     }
   }
@@ -263,99 +326,16 @@ void AliTOFv5T0::AddAlignableVolumes() const
     symName  = snSM;
     symName += Form("%02d",isect);
 
-      AliDebug(2,"--------------------------------------------"); 
-      AliDebug(2,Form("Alignable object %d", isect+imod)); 
-      AliDebug(2,Form("volPath=%s\n",volPath.Data()));
-      AliDebug(2,Form("symName=%s\n",symName.Data()));
-      AliDebug(2,"--------------------------------------------"); 
-             
-    gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
-
-  }
-  
-}
-//____________________________________________________________________________
-void AliTOFv5T0::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;
-
-  const Float_t kInterCentrModBorder1 = 49.5;
-  const Float_t kInterCentrModBorder2 = 57.5;
+    AliDebug(2,"--------------------------------------------"); 
+    AliDebug(2,Form("Alignable object %d", isect+imod)); 
+    AliDebug(2,Form("volPath=%s\n",volPath.Data()));
+    AliDebug(2,Form("symName=%s\n",symName.Data()));
+    AliDebug(2,"--------------------------------------------"); 
 
-  Float_t ang;
-  
-  // define offset for nodes
-  Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*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];
+    gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
 
-  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<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;
-
-    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
-
 }
 
 //_____________________________________________________________________________
@@ -439,7 +419,7 @@ void AliTOFv5T0::TOFpc(Float_t xtof,  Float_t ytof, Float_t zlenA,
     if(fTOFSectors[isec]==-1)continue;
     char name[16];
     sprintf(name, "BTOF%d",isec);
-    if (fTOFHoles && (isec==11||isec==12)) {
+    if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
     //    if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
       xcoor = 0.;
       ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
@@ -1331,7 +1311,7 @@ void AliTOFv5T0::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();
@@ -1532,7 +1512,7 @@ void AliTOFv5T0::StepManager()
 
     AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
 
-    AddTrackReference(mcApplication->GetCurrentTrackNumber());
+    AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
     //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
 
     // getting information about hit volumes