]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtrackerV1.cxx
Fix histo title axis name; fix checking of NLM in Pi0EbE
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackerV1.cxx
index e6003fa6098a5e9ce4c5a5f7681f6c337184cd87..b6141a6e20908aa364fe72acd5573150b981d31d 100644 (file)
@@ -77,7 +77,7 @@ TLinearFitter* AliTRDtrackerV1::fgTiltedRieman = NULL;
 TLinearFitter* AliTRDtrackerV1::fgTiltedRiemanConstrained = NULL;
 
 //____________________________________________________________________
-AliTRDtrackerV1::AliTRDtrackerV1(AliTRDReconstructor *rec) 
+AliTRDtrackerV1::AliTRDtrackerV1(const AliTRDReconstructor *rec) 
   :AliTracker()
   ,fkReconstructor(NULL)
   ,fkRecoParam(NULL)
@@ -124,7 +124,7 @@ AliTRDtrackerV1::AliTRDtrackerV1(AliTRDReconstructor *rec)
   memset(fSeedLayer, 0, kMaxTracksStack*sizeof(Int_t));
   memset(fSeedTB, 0, kNSeedPlanes*sizeof(AliTRDchamberTimeBin*));
   fTracksESD = new TClonesArray("AliESDtrack", 2*kMaxTracksStack);
-  fTracksESD->SetOwner(); //RS commented, not needed with TClones
+  fTracksESD->SetOwner();
 }
 
 //____________________________________________________________________
@@ -314,8 +314,21 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
   
     // Check the seed status
     ULong_t status = seed->GetStatus();
-    if ((status & AliESDtrack::kTPCout) == 0) continue;
     if ((status & AliESDtrack::kTRDout) != 0) continue;
+    if ((status & AliESDtrack::kTPCout)){
+      AliDebug(3, Form("Prolongate seed[%2d] which is TPC.", iSeed));
+      // set steering parameters for TPC
+      //fkRecoParam->SetTrackParam(kTPC);
+/*    } else {
+      if ((status & AliESDtrack::kITSout)){
+        AliDebug(3, Form("Prolongate seed[%2d] which is ITS.", iSeed));
+        // set steering parameters for ITS
+        //fkRecoParam->SetTrackParam(kITS);
+        // rotate
+        Float_t  globalToTracking = AliTRDgeometry::GetAlpha()*(Int_t(seed->GetAlpha()/AliTRDgeometry::GetAlpha()) + (seed->GetAlpha()>0. ? 0.5 : -0.5));
+        if(!seed->Rotate(globalToTracking)) continue;
+      } else continue;*/
+    } else continue;
 
     // Propagate to the entrance in the TRD mother volume
     track.~AliTRDtrackV1();
@@ -351,12 +364,12 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
     if (expectedClr<0){      
       seed->UpdateTrackParams(&track, AliESDtrack::kTRDStop);
       continue;
-    }
-
-    if(expectedClr){
+    } else {
       nFound++;  
-      // computes PID for track
+      // compute PID
       track.CookPID();
+      //compute MC label
+      track.CookLabel(1. - AliTRDReconstructor::GetLabelFraction());
       // update calibration references using this track
       if(calibra->GetHisto2d()) calibra->UpdateHistogramsV1(&track);
       // save calibration object
@@ -370,12 +383,10 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
       track.UpdateESDtrack(seed);
     }
 
-    if ((TMath::Abs(track.GetC(track.GetBz()) - p4) / TMath::Abs(p4) < 0.2) ||(track.Pt() > 0.8)) {
-
-      // Make backup for back propagation
+    // Make backup for back propagation
+    if ((TMath::Abs(track.GetC(track.GetBz()) - p4) / TMath::Abs(p4) < 0.2) || (track.Pt() > 0.8)) {
       Int_t foundClr = track.GetNumberOfClusters();
       if (foundClr >= foundMin) {
-        track.CookLabel(1. - AliTRDReconstructor::GetLabelFraction());
         //if(track.GetBackupTrack()) UseClusters(track.GetBackupTrack());
 
         // Sign only gold tracks
@@ -735,7 +746,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     // rough estimate of the entry point
     if (!t.GetProlongation(fR[ily], y, z)){
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kProlongation);
+      t.SetErrStat(AliTRDtrackV1::kProlongation);
       AliDebug(4, Form("Failed Rough Prolongation to ly[%d] x[%7.2f] y[%7.2f] z[%7.2f]", ily, fR[ily], y, z));
       break;
     }
@@ -756,23 +767,23 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       // propagate to the default radial position
       if(fR[ily] > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, fR[ily], AliTRDReconstructor::GetMaxStep())){
         n=-1; 
-        t.SetStatus(AliTRDtrackV1::kPropagation);
+        t.SetErrStat(AliTRDtrackV1::kPropagation);
         AliDebug(4, "Failed Propagation [Missing Geometry]");
         break;
       }
       if(!AdjustSector(&t)){
         n=-1; 
-        t.SetStatus(AliTRDtrackV1::kAdjustSector);
+        t.SetErrStat(AliTRDtrackV1::kAdjustSector);
         AliDebug(4, "Failed Adjust Sector [Missing Geometry]");
         break;
       }
       if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()){
         n=-1; 
-        t.SetStatus(AliTRDtrackV1::kSnp);
+        t.SetErrStat(AliTRDtrackV1::kSnp);
         AliDebug(4, "Failed Max Snp [Missing Geometry]");
         break;
       }
-      t.SetStatus(AliTRDtrackV1::kGeometry, ily);
+      t.SetErrStat(AliTRDtrackV1::kGeometry, ily);
       continue;
     }
 
@@ -786,19 +797,19 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     x = glb[0] - AliTRDReconstructor::GetMaxStep();
     if(x > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, x, AliTRDReconstructor::GetMaxStep())){
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kPropagation);
+      t.SetErrStat(AliTRDtrackV1::kPropagation);
       AliDebug(4, Form("Failed Initial Propagation to x[%7.2f]", x));
       break;
     }
     if(!AdjustSector(&t)){
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kAdjustSector);
+      t.SetErrStat(AliTRDtrackV1::kAdjustSector);
       AliDebug(4, "Failed Adjust Sector Start");
       break;
     }
     if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()) {
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kSnp);
+      t.SetErrStat(AliTRDtrackV1::kSnp);
       AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), AliTRDReconstructor::GetMaxSnp()));
       break;
     }
@@ -814,7 +825,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     if(doRecalculate){
       det = AliTRDgeometry::GetDetector(ily, stk, sm);
       if(!(matrix = fGeom->GetClusterMatrix(det))){ 
-        t.SetStatus(AliTRDtrackV1::kGeometry, ily);
+        t.SetErrStat(AliTRDtrackV1::kGeometry, ily);
         AliDebug(4, Form("Failed Geometry Matrix ly[%d]", ily));
         continue;
       }
@@ -825,12 +836,12 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     // check if track is well inside fiducial volume 
     if (!t.GetProlongation(x+AliTRDReconstructor::GetMaxStep(), y, z)) {
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kProlongation);
+      t.SetErrStat(AliTRDtrackV1::kProlongation);
       AliDebug(4, Form("Failed Prolongation to x[%7.2f] y[%7.2f] z[%7.2f]", x+AliTRDReconstructor::GetMaxStep(), y, z));
       break;
     }
     if(fGeom->IsOnBoundary(det, y, z, .5)){ 
-      t.SetStatus(AliTRDtrackV1::kBoundary, ily);
+      t.SetErrStat(AliTRDtrackV1::kBoundary, ily);
       AliDebug(4, "Failed Track on Boundary");
       continue;
     }
@@ -840,24 +851,24 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       AliDebug(3, Form("Building tracklet det[%d]", det));
       // check data in supermodule
       if(!fTrSec[sm].GetNChambers()){ 
-        t.SetStatus(AliTRDtrackV1::kNoClusters, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoClusters, ily);
         AliDebug(4, "Failed NoClusters");
         continue;
       }
       if(fTrSec[sm].GetX(ily) < 1.){ 
-        t.SetStatus(AliTRDtrackV1::kNoClusters, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoClusters, ily);
         AliDebug(4, "Failed NoX");
         continue;
       }
       
       // check data in chamber
       if(!(chamber = fTrSec[sm].GetChamber(stk, ily))){ 
-        t.SetStatus(AliTRDtrackV1::kNoClusters, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoClusters, ily);
         AliDebug(4, "Failed No Detector");
         continue;
       }
       if(chamber->GetNClusters() < fgNTimeBins*fkRecoParam ->GetFindableClusters()){ 
-        t.SetStatus(AliTRDtrackV1::kNoClusters, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoClusters, ily);
         AliDebug(4, "Failed Not Enough Clusters in Detector");
         continue;
       }      
@@ -871,7 +882,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       ptrTracklet->SetX0(glb[0]+driftLength);
       if(!ptrTracklet->Init(&t)){
         n=-1; 
-        t.SetStatus(AliTRDtrackV1::kTrackletInit);
+        t.SetErrStat(AliTRDtrackV1::kTrackletInit);
         AliDebug(4, "Failed Tracklet Init");
         break;
       }
@@ -880,7 +891,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       // A.Bercuci 3.11.2011
       Float_t prod(t.GetBz()*t.Charge());
       if(!ptrTracklet->AttachClusters(chamber, kTRUE, prod<0.?kTRUE:kFALSE, fEventInFile)){
-        t.SetStatus(AliTRDtrackV1::kNoAttach, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoAttach, ily);
         if(debugLevel>3){
           AliTRDseedV1 trackletCp(*ptrTracklet);
           UChar_t status(t.GetStatusTRD(ily));
@@ -894,7 +905,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       }
       AliDebug(3, Form("Number of Clusters in Tracklet: %d", ptrTracklet->GetN()));
       if(ptrTracklet->GetN() < fgNTimeBins*fkRecoParam->GetFindableClusters()){
-        t.SetStatus(AliTRDtrackV1::kNoClustersTracklet, ily);
+        t.SetErrStat(AliTRDtrackV1::kNoClustersTracklet, ily);
         if(debugLevel>3){
           AliTRDseedV1 trackletCp(*ptrTracklet);
           UChar_t status(t.GetStatusTRD(ily));
@@ -915,26 +926,26 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     // 0 : no correction
     // 2 : pseudo tilt correction
     if(!ptrTracklet->FitRobust(t.Charge()>0?kTRUE:kFALSE)){
-      t.SetStatus(AliTRDtrackV1::kNoFit, ily);
+      t.SetErrStat(AliTRDtrackV1::kNoFit, ily);
       AliDebug(4, "Failed Tracklet Fit");
       continue;
     } 
     x = ptrTracklet->GetX(); //GetX0();
     if(x > (AliTRDReconstructor::GetMaxStep() + t.GetX()) && !PropagateToX(t, x, AliTRDReconstructor::GetMaxStep())) {
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kPropagation);
+      t.SetErrStat(AliTRDtrackV1::kPropagation);
       AliDebug(4, Form("Failed Propagation to Tracklet x[%7.2f]", x));
       break;
     }
     if(!AdjustSector(&t)) {
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kAdjustSector);
+      t.SetErrStat(AliTRDtrackV1::kAdjustSector);
       AliDebug(4, "Failed Adjust Sector");
       break;
     }
     if(TMath::Abs(t.GetSnp()) > AliTRDReconstructor::GetMaxSnp()) {
       n=-1; 
-      t.SetStatus(AliTRDtrackV1::kSnp);
+      t.SetErrStat(AliTRDtrackV1::kSnp);
       AliDebug(4, Form("Failed Max Snp[%f] MaxSnp[%f]", t.GetSnp(), AliTRDReconstructor::GetMaxSnp()));
       break;
     }
@@ -943,7 +954,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     Double_t chi2 = ((AliExternalTrackParam)t).GetPredictedChi2(p, cov);
     // update Kalman with the TRD measurement
     if(chi2>1e+10){ // TODO
-      t.SetStatus(AliTRDtrackV1::kChi2, ily);
+      t.SetErrStat(AliTRDtrackV1::kChi2, ily);
       if(debugLevel > 2){
         UChar_t status(t.GetStatusTRD());
         AliTRDseedV1  trackletCp(*ptrTracklet);
@@ -966,7 +977,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     if(kUseTRD){
       if(!((AliExternalTrackParam&)t).Update(p, cov)) {
         n=-1; 
-        t.SetStatus(AliTRDtrackV1::kUpdate);
+        t.SetErrStat(AliTRDtrackV1::kUpdate);
         if(debugLevel > 2){
           UChar_t status(t.GetStatusTRD());
           AliTRDseedV1  trackletCp(*ptrTracklet);
@@ -2112,7 +2123,7 @@ Bool_t AliTRDtrackerV1::AdjustSector(AliTRDtrackV1 *const track)
 
 
 //____________________________________________________________________
-AliTRDseedV1* AliTRDtrackerV1::GetTracklet(AliTRDtrackV1 *const track, Int_t p, Int_t &idx)
+AliTRDseedV1* AliTRDtrackerV1::GetTracklet(const AliTRDtrackV1 *const track, Int_t p, Int_t &idx)
 {
   // Find tracklet for TRD track <track>
   // Parameters
@@ -2242,7 +2253,6 @@ Int_t AliTRDtrackerV1::Clusters2TracksSM(Int_t sector, AliESDEvent *esd)
 
   // delete ESD tracks in the array
   fTracksESD->Delete();
-  //fTracksESD->Clear(); // RS: don't delete TClones
   return nTracks;
 }
 
@@ -4091,7 +4101,7 @@ Double_t AliTRDtrackerV1::AliTRDtrackFitterRieman::Eval(){
 }
 
 //_____________________________________________________________________________
-void AliTRDtrackerV1::AliTRDtrackFitterRieman::UpdateFitters(AliTRDseedV1 * const tracklet){
+void AliTRDtrackerV1::AliTRDtrackFitterRieman::UpdateFitters(const AliTRDseedV1 * const tracklet){
   //
   // Does the transformations and updates the fitters
   // The following transformation is applied