]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDonlineTrackMatching.cxx
Compilation with Root6: TH1::GetXaxis returns now const TAxis*
[u/mrichter/AliRoot.git] / TRD / AliTRDonlineTrackMatching.cxx
index ca1d52628d3638a8c466f3c3b2deb4baee415f30..fb509e84866ee3e8e5d9434b2b99a17d348e4f14 100644 (file)
@@ -50,6 +50,7 @@ Bool_t AliTRDonlineTrackMatching::fEsdTrackCutRequireITSrefit = kFALSE;
 Bool_t AliTRDonlineTrackMatching::fEsdTrackCutPrim = kFALSE;
 
 AliTRDonlineTrackMatching::AliTRDonlineTrackMatching() :
+  TObject(),
   fTRDgeo(NULL),
   fMinMatchRating(0.25),
   fHistMatchRating(NULL)
@@ -59,6 +60,7 @@ AliTRDonlineTrackMatching::AliTRDonlineTrackMatching() :
 }
 
 AliTRDonlineTrackMatching::AliTRDonlineTrackMatching(const AliTRDonlineTrackMatching &c) :
+  TObject(c),
   fTRDgeo(c.fTRDgeo),
   fMinMatchRating(c.fMinMatchRating),
   fHistMatchRating(c.fHistMatchRating)
@@ -178,7 +180,7 @@ Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *trac
   layersWithTracklet = 0;
 
   UInt_t stackHits[fgkTrdStacks];
-  Double_t x[3];
+  Double_t x[3] = { 0. };
   memset(stackHits, 0, fgkTrdStacks*sizeof(UInt_t));
 
 #ifdef TRD_TM_DEBUG
@@ -187,16 +189,17 @@ Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *trac
 
   Double_t r = fgkSaveInnerRadius;
   while (r < fgkSaveOuterRadius){
-    track->GetXYZAt(r, magFieldinKiloGauss, x);
-    stack = EstimateStack(x);
-    if (stack >= 0){
-      stackHits[stack]++;
-      if (stackHits[stack] > 16) // experimental
-       break;
+    if (track->GetXYZAt(r, magFieldinKiloGauss, x)) {
+      stack = EstimateStack(x);
+      if (stack >= 0){
+       stackHits[stack]++;
+       if (stackHits[stack] > 16) // experimental
+         break;
 #ifdef TRD_TM_DEBUG
-      printf(" r=%.3fcm  %.2f/%.2f  -  %d hits for stack %d  S%02d-%d   (mag=%.1f)\n",
-            r, x[0], x[1], stackHits[stack], stack, stack/5, stack%5, magFieldinKiloGauss);
+       printf(" r=%.3fcm  %.2f/%.2f  -  %d hits for stack %d  S%02d-%d   (mag=%.1f)\n",
+              r, x[0], x[1], stackHits[stack], stack, stack/5, stack%5, magFieldinKiloGauss);
 #endif
+      }
     }
     r += 1.;
   }
@@ -241,7 +244,10 @@ Bool_t AliTRDonlineTrackMatching::AcceptTrack(const AliESDtrack* esdTrack, const
 
   // returns result ESD track cuts
 
-  UInt_t status = (esdTrack) ? esdTrack->GetStatus() : 0;
+  if (!esdTrack)
+    return kFALSE;
+
+  UInt_t status = esdTrack->GetStatus();
 
   if (fEsdTrackCutMinimal){
     return ((status & AliESDtrack::kTPCout) > 0);
@@ -314,7 +320,7 @@ Bool_t AliTRDonlineTrackMatching::AcceptTrack(const AliESDtrack* esdTrack, const
   return kTRUE;
 }
 
-Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
+Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent, Bool_t updateRef, Int_t label) {
 
   // performs track matching for all TRD online tracks of the ESD event
 
@@ -323,7 +329,7 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
     return kTRUE;
 
   if (!AliGeomManager::GetGeometry()){
-    printf("Geometry not available! Aborting TRD track matching.\n");
+    AliError("Geometry not available! Skipping TRD track matching.");
     return kFALSE;
   }
 
@@ -351,7 +357,7 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
     esdTrack = esdEvent->GetTrack(iEsdTrack);
 
     if (!esdTrack){
-      printf("#TRACKMATCHING - invalid ESD track!\n");
+      AliError("invalid ESD track!");
       continue;
     }
 
@@ -417,7 +423,7 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
          break;
 
        if (stacksForReg[iReg] >= 90){
-         printf("#TRACKMATCHING - invalid stack for registration: %i\n", stacksForReg[iReg]);
+         AliError(Form("invalid stack for registration: %i", stacksForReg[iReg]));
          continue;
        }
 
@@ -471,6 +477,14 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
   for (UInt_t iTrdTrack = 0; iTrdTrack < numTrdTracks; ++iTrdTrack){
 
     trdTrack = esdEvent->GetTrdTrack(iTrdTrack);
+    if ((label != -1) &&
+       (trdTrack->GetLabel() != label))
+      continue;
+
+    if ((trdTrack->GetSector() < 0) || (trdTrack->GetSector() > 17) ||
+       (trdTrack->GetStack() < 0) || (trdTrack->GetStack() > 4))
+      continue;
+
     stack = TrdSecSiLsi(trdTrack->GetSector(), trdTrack->GetStack());
     trdPt = (esdEvent->GetMagneticField() > 0.) ? (-1.*trdTrack->Pt()) : trdTrack->Pt();
     matchTrack = NULL;
@@ -520,14 +534,20 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
     }
 
     if ((matchTrack) && (matchRating >= fMinMatchRating)){
+      AliDebug(1, Form("S%02d-%d  trd %d - esd %d   match!    pt:  %.2f  %.2f",
+                      trdTrack->GetSector(), trdTrack->GetStack(), iTrdTrack, matchEsdTrackIndexInStack,
+                      trdPt, matchTrack->GetSignedPt()));
 #ifdef TRD_TM_DEBUG
       printf("#TRACKMATCHING  S%02d-%d  trd %d - esd %d   match!    pt:  %.2f  %.2f\n",
             trdTrack->GetSector(), trdTrack->GetStack(), iTrdTrack, matchEsdTrackIndexInStack,
             trdPt, matchTrack->GetSignedPt());
 #endif
-      trdTrack->SetTrackMatchReference(matchTrack);
-    } else
-      trdTrack->SetTrackMatchReference(NULL);
+      if (updateRef)
+       trdTrack->SetTrackMatchReference(matchTrack);
+    } else {
+      if (updateRef)
+       trdTrack->SetTrackMatchReference(NULL);
+    }
 
   } // loop over TRD online tracks
 
@@ -625,7 +645,8 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A
       // transform to global coordinates
       TGeoHMatrix *matrix = fTRDgeo->GetClusterMatrix(trklDet);
       if (!matrix){
-       printf("ERROR - invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet);
+       if ((stack_gtu != 13*5+2) && (stack_gtu != 14*5+2) && (stack_gtu != 15*5+2))
+         AliDebug(1, Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
        return -5;
       }
       matrix->LocalToMaster(xtrkl, ptrkl);
@@ -650,12 +671,19 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A
 
       Double_t n_len = TMath::Sqrt(n0[0]*n0[0] + n0[1]*n0[1] + n0[2]*n0[2]);
       if (n_len == 0.){ // This should never happen
-       printf("<ERROR> divison by zero in estimate_track_distance!");
+       AliError("divison by zero in estimate_track_distance!");
        n_len = 1.;
       }
       Double_t n[3] = {n0[0]/n_len, n0[1]/n_len, n0[2]/n_len}; // normal vector of plane
 
-      AliExternalTrackParam *outerTPC = new AliExternalTrackParam(*(esd_track->GetOuterParam()));
+      const AliExternalTrackParam *trackParam = esd_track->GetOuterParam();
+      if (!trackParam) {
+       trackParam = esd_track->GetInnerParam();
+       if (!trackParam)
+         trackParam = esd_track;
+      }
+
+      AliExternalTrackParam *outerTPC = new AliExternalTrackParam(*trackParam);
       Bool_t isects = TrackPlaneIntersect(outerTPC, layer_ref_global2, n, mag); // find intersection point between track and TRD layer
       delete outerTPC;
       outerTPC = NULL;
@@ -771,5 +799,6 @@ void AliTRDonlineTrackMatching::SetEsdTrackDefaultCuts(const char* cutIdent) {
     fEsdTrackCutMaxDCAtoVertexZ = 1000.;
     fEsdTrackCutsITSlayerMask = 0x0;
   } else
-    printf("ERROR: invalid cut set");
+    AliErrorClass("invalid cut set");
+
 }