- fix for TRD on-line track matching with tracks having TPCrefit but not TPCout ...
[u/mrichter/AliRoot.git] / TRD / AliTRDonlineTrackMatching.cxx
index 1b28a045fb8aef4bc042b9d0ce0e08c8d4e597da..24df6914c77a1d26c7917c09ffb3df208fbfcbb1 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)
@@ -102,7 +104,7 @@ Short_t AliTRDonlineTrackMatching::EstimateSector(const Double_t globalCoords[3]
   }
 }
 
-Short_t AliTRDonlineTrackMatching::EstimateLayer(const Double_t radius) {
+Short_t AliTRDonlineTrackMatching::EstimateLayer(Double_t radius) {
 
   // estimates layer by radial distance (for virtual stack at phi = 0)
 
@@ -170,7 +172,7 @@ Short_t AliTRDonlineTrackMatching::EstimateStack(const Double_t globalCoords[3])
     return 5*sec + st;
 }
 
-Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *track, Short_t &stack, UShort_t &layersWithTracklet, const Double_t magFieldinKiloGauss){
+Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss){
 
   // returns stack to track param
 
@@ -225,7 +227,7 @@ Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *trac
   return kFALSE;
 }
 
-Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliESDtrack* track, Short_t &stack, UShort_t &layersWithTracklet, const Double_t magFieldinKiloGauss){
+Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliESDtrack* track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss){
 
   // returns stack to ESD track
 
@@ -241,7 +243,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);
@@ -323,7 +328,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 +356,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 +422,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;
        }
 
@@ -625,7 +630,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 +656,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;
@@ -681,7 +694,7 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A
     return -4;
 }
 
-Double_t AliTRDonlineTrackMatching::PtDiffRel(const Double_t refPt, const Double_t gtuPt){
+Double_t AliTRDonlineTrackMatching::PtDiffRel(Double_t refPt, Double_t gtuPt){
 
   // return relative pt difference
 
@@ -692,7 +705,7 @@ Double_t AliTRDonlineTrackMatching::PtDiffRel(const Double_t refPt, const Double
 }
 
 
-Double_t AliTRDonlineTrackMatching::RateTrackMatch(const Double_t distY, const Double_t distZ, const Double_t rpt, const Double_t gpt){
+Double_t AliTRDonlineTrackMatching::RateTrackMatch(Double_t distY, Double_t distZ, Double_t rpt, Double_t gpt){
 
   // returns a match rating derived from Y and Z distance as well as pt difference
 
@@ -771,5 +784,6 @@ void AliTRDonlineTrackMatching::SetEsdTrackDefaultCuts(const char* cutIdent) {
     fEsdTrackCutMaxDCAtoVertexZ = 1000.;
     fEsdTrackCutsITSlayerMask = 0x0;
   } else
-    printf("ERROR: invalid cut set");
+    AliErrorClass("invalid cut set");
+
 }