]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFtrackerV1.cxx
disabled the DefaultEndOfDetectorCycle setting QA to Fatal
[u/mrichter/AliRoot.git] / TOF / AliTOFtrackerV1.cxx
index daa16a8abec764fe879cc57165959e1fb429f563..691275dfa5d26b03adf5a2615a7125db44623e08 100644 (file)
 #include <TFile.h>
 #include <TH1F.h>
 #include <TH2F.h>
+#include <TSeqCollection.h>
 
-#include "AliAlignObj.h"
 #include "AliESDtrack.h"
 #include "AliESDEvent.h"
 #include "AliLog.h"
 #include "AliTrackPointArray.h"
+#include "AliGeomManager.h"
+#include "AliCDBManager.h"
 
 #include "AliTOFcalib.h"
 #include "AliTOFRecoParam.h"
 #include "AliTOFcluster.h"
-#include "AliTOFGeometryV5.h"
+#include "AliTOFGeometry.h"
 #include "AliTOFtrackerV1.h"
 #include "AliTOFtrack.h"
+#include "AliTOFpidESD.h"
 
 extern TROOT *gROOT;
 
@@ -55,7 +58,6 @@ ClassImp(AliTOFtrackerV1)
 //_____________________________________________________________________________
 AliTOFtrackerV1::AliTOFtrackerV1():
   fRecoParam(0x0),
-  fGeom(0x0),
   fPid(0x0),
   fN(0),
   fNseeds(0),
@@ -64,8 +66,8 @@ AliTOFtrackerV1::AliTOFtrackerV1():
   fnbadmatch(0),
   fnunmatch(0),
   fnmatch(0),
-  fTracks(0x0),
-  fSeeds(0x0),
+  fTracks(new TClonesArray("AliTOFtrack")),
+  fSeeds(new TClonesArray("AliESDtrack")),
   fHDigClusMap(0x0),
   fHDigNClus(0x0),
   fHDigClusTime(0x0),
@@ -80,25 +82,22 @@ AliTOFtrackerV1::AliTOFtrackerV1():
  { 
   //AliTOFtrackerV1 main Ctor
    
-   // Getting the geometry 
-   fGeom=new AliTOFGeometryV5();
    // Read the reconstruction parameters from the OCDB
-   AliTOFcalib *calib = new AliTOFcalib(fGeom);
+   AliTOFcalib *calib = new AliTOFcalib();
    fRecoParam = (AliTOFRecoParam*)calib->ReadRecParFromCDB("TOF/Calib",-1);
    if(fRecoParam->GetApplyPbPbCuts())fRecoParam=fRecoParam->GetPbPbparam();
-   delete calib;
    Double_t parPID[2];   
    parPID[0]=fRecoParam->GetTimeResolution();
    parPID[1]=fRecoParam->GetTimeNSigma();
    fPid=new AliTOFpidESD(parPID);
    InitCheckHists();
+   delete calib;
 
 }
 //_____________________________________________________________________________
 AliTOFtrackerV1::AliTOFtrackerV1(const AliTOFtrackerV1 &t):
   AliTracker(),
   fRecoParam(0x0),
-  fGeom(0x0),
   fPid(0x0),
   fN(0),
   fNseeds(0),
@@ -107,8 +106,8 @@ AliTOFtrackerV1::AliTOFtrackerV1(const AliTOFtrackerV1 &t):
   fnbadmatch(0),
   fnunmatch(0),
   fnmatch(0),
-  fTracks(0x0),
-  fSeeds(0x0),
+  fTracks(new TClonesArray("AliTOFtrack")),
+  fSeeds(new TClonesArray("AliESDtrack")),
   fHDigClusMap(0x0),
   fHDigNClus(0x0),
   fHDigClusTime(0x0),
@@ -131,7 +130,6 @@ AliTOFtrackerV1::AliTOFtrackerV1(const AliTOFtrackerV1 &t):
   fnunmatch=t.fnunmatch;
   fnmatch=t.fnmatch;
   fRecoParam=t.fRecoParam;
-  fGeom=t.fGeom;
   fPid=t.fPid;
   fSeeds=t.fSeeds;
   fTracks=t.fTracks;
@@ -150,7 +148,6 @@ AliTOFtrackerV1& AliTOFtrackerV1::operator=(const AliTOFtrackerV1 &t)
   this->fnunmatch=t.fnunmatch;
   this->fnmatch=t.fnmatch;
   this->fRecoParam = t.fRecoParam;
-  this->fGeom = t.fGeom;
   this->fPid = t.fPid;
   this->fSeeds=t.fSeeds;
   this->fTracks=t.fTracks;
@@ -166,8 +163,9 @@ AliTOFtrackerV1::~AliTOFtrackerV1() {
 
   SaveCheckHists();
 
-  delete fRecoParam; 
-  delete fGeom; 
+  if(!(AliCDBManager::Instance()->GetCacheFlag())){
+    delete fRecoParam;
+  }
   delete fPid; 
   delete fHDigClusMap;
   delete fHDigNClus;
@@ -180,6 +178,16 @@ AliTOFtrackerV1::~AliTOFtrackerV1() {
   delete fHRecSigZVsP;
   delete fHRecSigYVsPWin;
   delete fHRecSigZVsPWin;
+  if (fTracks){
+    fTracks->Delete();
+    delete fTracks;
+    fTracks=0x0;
+  }
+  if (fSeeds){
+    fSeeds->Delete();
+    delete fSeeds;
+    fSeeds=0x0;
+  }
 }
 //_____________________________________________________________________________
 Int_t AliTOFtrackerV1::PropagateBack(AliESDEvent* event) {
@@ -199,7 +207,6 @@ Int_t AliTOFtrackerV1::PropagateBack(AliESDEvent* event) {
 
   Int_t ntrk=event->GetNumberOfTracks();
   fNseeds = ntrk;
-  fSeeds= new TClonesArray("AliESDtrack",ntrk);
   TClonesArray &aESDTrack = *fSeeds;
 
 
@@ -264,16 +271,8 @@ Int_t AliTOFtrackerV1::PropagateBack(AliESDEvent* event) {
   //Make TOF PID
   fPid->MakePID(event,timeZero);
 
-  if (fSeeds) {
-    fSeeds->Delete();
-    delete fSeeds;
-    fSeeds = 0x0;
-  }
-  if (fTracks) {
-    fTracks->Delete();
-    delete fTracks;
-    fTracks = 0x0;
-  }
+  fSeeds->Clear();
+  fTracks->Clear();
   return 0;
   
 }
@@ -284,20 +283,19 @@ void AliTOFtrackerV1::CollectESD() {
   Int_t seedsTOF1=0;
   Int_t seedsTOF2=0;
  
-  fTracks= new TClonesArray("AliTOFtrack");
   TClonesArray &aTOFTrack = *fTracks;
   for (Int_t i=0; i<fNseeds; i++) {
 
     AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(i);
     if ((t->GetStatus()&AliESDtrack::kTPCout)==0)continue;
 
-    // TRD 'good' tracks, already propagated at 371 cm
+    // TRD 'good' tracks, already propagated at 372 cm
 
     AliTOFtrack *track = new AliTOFtrack(*t); // New
     Double_t x = track->GetX(); //New
 
     if (((t->GetStatus()&AliESDtrack::kTRDout)!=0 ) && 
-        ( x >= fGeom->RinTOF()) ){
+        ( x >= AliTOFGeometry::RinTOF()) ){
       track->SetSeedIndex(i);
       t->UpdateTrackParams(track,AliESDtrack::kTOFout);    
       new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track);
@@ -336,10 +334,10 @@ void AliTOFtrackerV1::MatchTracks( ){
 
 
   // Parameters regulating the reconstruction
-  Float_t dY=fGeom->XPad(); 
-  Float_t dZ=fGeom->ZPad(); 
+  Float_t dY=AliTOFGeometry::XPad(); 
+  Float_t dZ=AliTOFGeometry::ZPad(); 
 
-  const Int_t ncmax = 100;
+  const Int_t kncmax = 100;
   Float_t sensRadius = fRecoParam->GetSensRadius();
   Float_t scaleFact   = fRecoParam->GetWindowScaleFact();
   Float_t dyMax=fRecoParam->GetWindowSizeMaxY(); 
@@ -357,8 +355,6 @@ void AliTOFtrackerV1::MatchTracks( ){
 
   //The matching loop
 
-  AliTOFcalib *calib = new AliTOFcalib(fGeom);
-  
   for (Int_t iseed=0; iseed<fNseedsTOF; iseed++) {
 
     AliTOFtrack *track =(AliTOFtrack*)fTracks->UncheckedAt(iseed);
@@ -385,14 +381,17 @@ void AliTOFtrackerV1::MatchTracks( ){
 
     // find the clusters inside the selected window 
     Int_t nc=0;
-    AliTOFcluster *clusters[ncmax]; // pointers to the clusters in the window
-    Int_t index[ncmax];//to keep track of the cluster index
+    AliTOFcluster *clusters[kncmax]; // pointers to the clusters in the window
+    Int_t index[kncmax];//to keep track of the cluster index
     for (Int_t k=FindClusterIndex(z-dz); k<fN; k++) {  
       AliTOFcluster *c=fClusters[k];
-      if(nc>ncmax)break;
+      if(nc>kncmax)break;
       if(c->GetZ() > z+dz) break;
       if(c->IsUsed()) continue;      
-      if(!c->GetStatus()) continue; // skip bad channels as declared in OCDB  
+      if(!c->GetStatus()) {
+             AliDebug(1,"Cluster in channel declared bad!");
+             continue; // skip bad channels as declared in OCDB  
+      }
       Float_t xyz[3]; c->GetGlobalXYZ(xyz);
       Double_t clPhi=TMath::ATan2(xyz[1],xyz[0]);
       Double_t dph=TMath::Abs(clPhi-phi);
@@ -403,19 +402,19 @@ void AliTOFtrackerV1::MatchTracks( ){
       nc++;  
     }
 
-    //start propagation: go to the average TOF pad middle plane at ~378.5 cm
+    //start propagation: go to the average TOF pad middle plane at ~379.5 cm
 
     Float_t  xTOF = sensRadius;
-    Double_t ymax = xTOF*TMath::Tan(0.5*fGeom->GetAlpha());
+    Double_t ymax = xTOF*TMath::Tan(0.5*AliTOFGeometry::GetAlpha());
     Bool_t skip = kFALSE;
     Double_t ysect = trackTOFin->GetYat(xTOF,skip);
     if (skip) break;
     if (ysect > ymax) {
-      if (!trackTOFin->Rotate(fGeom->GetAlpha())) {
+      if (!trackTOFin->Rotate(AliTOFGeometry::GetAlpha())) {
        break;
       }
     } else if (ysect <-ymax) {
-      if (!trackTOFin->Rotate(fGeom->GetAlpha())) {
+      if (!trackTOFin->Rotate(AliTOFGeometry::GetAlpha())) {
        break;
       }
     }
@@ -465,7 +464,7 @@ void AliTOFtrackerV1::MatchTracks( ){
 
 
     //now take the local distance in Z from the pad center for time walk correction
-    Float_t tiltangle = fGeom->GetAngles(bestCluster->GetDetInd(1),bestCluster->GetDetInd(2))*TMath::DegToRad();
+    Float_t tiltangle = AliTOFGeometry::GetAngles(bestCluster->GetDetInd(1),bestCluster->GetDetInd(2))*TMath::DegToRad();
     Double_t dzTW=trackTOFin->GetZ()-bestCluster->GetZ(); // in cm
     dzTW/=TMath::Cos(tiltangle);
 
@@ -474,9 +473,9 @@ void AliTOFtrackerV1::MatchTracks( ){
     delete trackTOFin;
 
     //  Store quantities to be used in the TOF Calibration
-    Float_t tToT=fGeom->ToTBinWidth()*bestCluster->GetToT()*1E-3; // in ns
+    Float_t tToT=AliTOFGeometry::ToTBinWidth()*bestCluster->GetToT()*1E-3; // in ns
     t->SetTOFsignalToT(tToT);
-    Float_t rawTime=fGeom->TdcBinWidth()*bestCluster->GetTDCRAW()+32; // RAW time,in ps
+    Float_t rawTime=AliTOFGeometry::TdcBinWidth()*bestCluster->GetTDCRAW()+32; // RAW time,in ps
     t->SetTOFsignalRaw(rawTime);
     t->SetTOFsignalDz(dzTW);
     AliDebug(2,Form(" Setting TOF raw time: %f  z distance: %f time: %f = ",rawTime,dzTW));    
@@ -486,7 +485,7 @@ void AliTOFtrackerV1::MatchTracks( ){
     ind[2]=bestCluster->GetDetInd(2);
     ind[3]=bestCluster->GetDetInd(3);
     ind[4]=bestCluster->GetDetInd(4);
-    Int_t calindex = calib->GetIndex(ind);
+    Int_t calindex = AliTOFGeometry::GetIndex(ind);
     t->SetTOFCalChannel(calindex);
 
     // keep track of the track labels in the matched cluster
@@ -495,7 +494,7 @@ void AliTOFtrackerV1::MatchTracks( ){
     tlab[1]=bestCluster->GetLabel(1);
     tlab[2]=bestCluster->GetLabel(2);
     AliDebug(2,Form(" tdc time of the matched track %i = ",bestCluster->GetTDC()));    
-    Double_t tof=fGeom->TdcBinWidth()*bestCluster->GetTDC()+32; // in ps
+    Double_t tof=AliTOFGeometry::TdcBinWidth()*bestCluster->GetTDC()+32; // in ps
     AliDebug(2,Form(" tof time of the matched track: %f = ",tof));    
     Double_t tofcorr=tof;
     if(timeWalkCorr)tofcorr=CorrectTimeWalk(dzTW,tof);
@@ -519,7 +518,6 @@ void AliTOFtrackerV1::MatchTracks( ){
     // no longer there - all info is in the ESDs now
 
   }
-  delete calib;
 
 }
 //_________________________________________________________________________
@@ -528,11 +526,11 @@ Int_t AliTOFtrackerV1::LoadClusters(TTree *cTree) {
   //This function loads the TOF clusters
   //--------------------------------------------------------------------
 
-  Int_t npadX = fGeom->NpadX();
-  Int_t npadZ = fGeom->NpadZ();
-  Int_t nStripA = fGeom->NStripA();
-  Int_t nStripB = fGeom->NStripB();
-  Int_t nStripC = fGeom->NStripC();
+  Int_t npadX = AliTOFGeometry::NpadX();
+  Int_t npadZ = AliTOFGeometry::NpadZ();
+  Int_t nStripA = AliTOFGeometry::NStripA();
+  Int_t nStripB = AliTOFGeometry::NStripB();
+  Int_t nStripC = AliTOFGeometry::NStripC();
 
   TBranch *branch=cTree->GetBranch("TOF");
   if (!branch) { 
@@ -540,13 +538,17 @@ Int_t AliTOFtrackerV1::LoadClusters(TTree *cTree) {
     return 1;
   }
 
-  TClonesArray dummy("AliTOFcluster",10000), *clusters=&dummy;
+  static TClonesArray dummy("AliTOFcluster",10000);
+  dummy.Clear();
+  TClonesArray *clusters=&dummy;
   branch->SetAddress(&clusters);
 
   cTree->GetEvent(0);
   Int_t nc=clusters->GetEntriesFast();
   fHDigNClus->Fill(nc);
 
+  AliInfo(Form("Number of clusters: %d",nc));
+
   for (Int_t i=0; i<nc; i++) {
     AliTOFcluster *c=(AliTOFcluster*)clusters->UncheckedAt(i);
     fClusters[i]=new AliTOFcluster(*c); fN++;
@@ -559,8 +561,8 @@ Int_t AliTOFtrackerV1::LoadClusters(TTree *cTree) {
     Int_t ipadX = c->GetDetInd(4);
     Int_t ipadZ = c->GetDetInd(3);
 
-    Float_t time =(fGeom->TdcBinWidth()*c->GetTDC())*1E-3; // in ns
-    Float_t tot = (fGeom->TdcBinWidth()*c->GetToT())*1E-3;//in ns
+    Float_t time =(AliTOFGeometry::TdcBinWidth()*c->GetTDC())*1E-3; // in ns
+    Float_t tot = (AliTOFGeometry::TdcBinWidth()*c->GetToT())*1E-3;//in ns
  
     Int_t stripOffset = 0;
     switch (iplate) {
@@ -635,10 +637,10 @@ Bool_t AliTOFtrackerV1::GetTrackPoint(Int_t index, AliTrackPoint& p) const
   Float_t phi=TMath::ATan2(xyz[1],xyz[0]);
   Float_t phiangle = (Int_t(phi*TMath::RadToDeg()/20.)+0.5)*20.*TMath::DegToRad();
   Float_t sinphi = TMath::Sin(phiangle), cosphi = TMath::Cos(phiangle);
-  Float_t tiltangle = fGeom->GetAngles(cl->GetDetInd(1),cl->GetDetInd(2))*TMath::DegToRad();
+  Float_t tiltangle = AliTOFGeometry::GetAngles(cl->GetDetInd(1),cl->GetDetInd(2))*TMath::DegToRad();
   Float_t sinth = TMath::Sin(tiltangle), costh = TMath::Cos(tiltangle);
-  Float_t sigmay2 = fGeom->XPad()*fGeom->XPad()/12.;
-  Float_t sigmaz2 = fGeom->ZPad()*fGeom->ZPad()/12.;
+  Float_t sigmay2 = AliTOFGeometry::XPad()*AliTOFGeometry::XPad()/12.;
+  Float_t sigmaz2 = AliTOFGeometry::ZPad()*AliTOFGeometry::ZPad()/12.;
   Float_t cov[6];
   cov[0] = sinphi*sinphi*sigmay2 + cosphi*cosphi*sinth*sinth*sigmaz2;
   cov[1] = -sinphi*cosphi*sigmay2 + sinphi*cosphi*sinth*sinth*sigmaz2;
@@ -649,11 +651,11 @@ Bool_t AliTOFtrackerV1::GetTrackPoint(Int_t index, AliTrackPoint& p) const
   p.SetXYZ(xyz[0],xyz[1],xyz[2],cov);
 
   // Detector numbering scheme
-  Int_t nSector = fGeom->NSectors();
-  Int_t nPlate  = fGeom->NPlates();
-  Int_t nStripA = fGeom->NStripA();
-  Int_t nStripB = fGeom->NStripB();
-  Int_t nStripC = fGeom->NStripC();
+  Int_t nSector = AliTOFGeometry::NSectors();
+  Int_t nPlate  = AliTOFGeometry::NPlates();
+  Int_t nStripA = AliTOFGeometry::NStripA();
+  Int_t nStripB = AliTOFGeometry::NStripB();
+  Int_t nStripC = AliTOFGeometry::NStripC();
 
   Int_t isector = cl->GetDetInd(0);
   if (isector >= nSector)
@@ -774,7 +776,7 @@ Float_t AliTOFtrackerV1::CorrectTimeWalk( Float_t dist, Float_t tof) {
 
   //dummy, for the moment
   Float_t tofcorr=0.;
-  if(dist<fGeom->ZPad()*0.5){
+  if(dist<AliTOFGeometry::ZPad()*0.5){
     tofcorr=tof;
     //place here the actual correction
   }else{
@@ -798,3 +800,17 @@ Float_t AliTOFtrackerV1::GetTimeZerofromTOF(AliESDEvent * /*event*/) const {
   }
   return 0.;
 }
+//_________________________________________________________________________
+
+void AliTOFtrackerV1::FillClusterArray(TObjArray* arr) const
+{
+  //
+  // Returns the TOF cluster array
+  //
+
+  if (fN==0)
+    arr = 0x0;
+  else
+    for (Int_t i=0; i<fN; ++i) arr->Add(fClusters[i]);
+
+}