]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDonlineTrackMatching.cxx
Add switch for tail cancelation
[u/mrichter/AliRoot.git] / TRD / AliTRDonlineTrackMatching.cxx
index 66a620a911d426b5e6d1d899681b99a31e51f904..fb509e84866ee3e8e5d9434b2b99a17d348e4f14 100644 (file)
@@ -180,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
@@ -189,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.;
   }
@@ -319,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
 
@@ -476,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;
@@ -525,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
 
@@ -631,7 +646,7 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A
       TGeoHMatrix *matrix = fTRDgeo->GetClusterMatrix(trklDet);
       if (!matrix){
        if ((stack_gtu != 13*5+2) && (stack_gtu != 14*5+2) && (stack_gtu != 15*5+2))
-         AliError(Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
+         AliDebug(1, Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
        return -5;
       }
       matrix->LocalToMaster(xtrkl, ptrkl);
@@ -661,7 +676,14 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A
       }
       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;