]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/EMCAL/AliEmcalEsdTrackFilterTask.cxx
Fix bug introduced with commit c04400125176f83a8af92dff26905b7832a3065d on June 11th...
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalEsdTrackFilterTask.cxx
index 0f4e9128216c94f48881493907c14f54100c943c..0f19e8fa2d265845c61ffac121ffb35a57db6572 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "AliEmcalEsdTrackFilterTask.h"
 #include <TClonesArray.h>
+#include <TRandom3.h>
 #include <TGeoGlobalMagField.h>
 #include <AliAnalysisManager.h>
 #include <AliEMCALRecoUtils.h>
@@ -14,6 +15,7 @@
 #include <AliMagF.h>
 #include <AliTrackerBase.h>
 
+
 ClassImp(AliEmcalEsdTrackFilterTask)
 
 //________________________________________________________________________
@@ -26,6 +28,8 @@ AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask() :
   fIncludeNoITS(kTRUE),
   fDoPropagation(kFALSE),
   fDist(440),
+  fTrackEfficiency(1),
+  fIsMC(kFALSE),
   fEsdEv(0),
   fTracks(0)
 {
@@ -42,6 +46,8 @@ AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask(const char *name) :
   fIncludeNoITS(kTRUE),
   fDoPropagation(kFALSE),
   fDist(440),
+  fTrackEfficiency(1),
+  fIsMC(kFALSE),
   fEsdEv(0),
   fTracks(0)
 {
@@ -71,10 +77,14 @@ void AliEmcalEsdTrackFilterTask::UserCreateOutputObjects()
   fTracks = new TClonesArray("AliESDtrack");
   fTracks->SetName(fTracksName);
 
-  if (!fEsdTrackCuts) {
-    AliInfo("No track cuts given, creating default (standard only TPC) cuts");
-    fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
-    fEsdTrackCuts->SetPtRange(0.15,1e3);
+  if (fDoSpdVtxCon) {
+    if (!fEsdTrackCuts) {
+      AliInfo("No track cuts given, creating default (standard only TPC) cuts");
+      fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+      fEsdTrackCuts->SetPtRange(0.15,1e3);
+    } 
+  } else {
+    AliWarning("No track cuts given, but maybe this is indeed intended?");
   }
 }
 
@@ -100,7 +110,7 @@ void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
   if (!(InputEvent()->FindListObject(fTracksName)))
     InputEvent()->AddObject(fTracks);
 
-  if (!fHybridTrackCuts) { // contrain TPC tracks to SPD vertex if fDoSpdVtxCon==kTRUE
+  if (!fHybridTrackCuts) { // constrain TPC tracks to SPD vertex if fDoSpdVtxCon==kTRUE
     am->LoadBranch("AliESDRun.");
     am->LoadBranch("AliESDHeader.");
     am->LoadBranch("Tracks");
@@ -120,8 +130,10 @@ void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
         AliESDtrack *etrack = fEsdEv->GetTrack(i);
         if (!etrack)
           continue;
+
         if (!fEsdTrackCuts->AcceptTrack(etrack))
           continue;
+
         AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID());
         if (!ntrack)
           continue;
@@ -143,6 +155,15 @@ void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
           delete ntrack;
           continue;
         }
+
+       if (fTrackEfficiency < 1) {
+         Double_t r = gRandom->Rndm();
+         if (fTrackEfficiency < r)
+           continue;
+       }
+
+       if (fDoPropagation)     
+         AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
         new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
         delete ntrack;
       }
@@ -152,9 +173,19 @@ void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
         AliESDtrack *etrack = fEsdEv->GetTrack(i);
         if (!etrack)
           continue;
-        if (!fEsdTrackCuts->AcceptTrack(etrack))
+
+       if ((fEsdTrackCuts!=0) && !fEsdTrackCuts->AcceptTrack(etrack))
           continue;
-        new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
+       
+       if (fTrackEfficiency < 1) {
+         Double_t r = gRandom->Rndm();
+         if (fTrackEfficiency < r)
+           continue;
+       }
+
+        AliESDtrack *ntrack = new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
+       if (fDoPropagation)     
+         AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
       }
     }
 
@@ -168,34 +199,47 @@ void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
        continue;
 
       if (fEsdTrackCuts->AcceptTrack(etrack)) {
-
+       if (fTrackEfficiency < 1) {
+         Double_t r = gRandom->Rndm();
+         if (fTrackEfficiency < r)
+           continue;
+       }
         AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
        if (fDoPropagation) 
          AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
         newTrack->SetBit(BIT(22),0); 
         newTrack->SetBit(BIT(23),0);
+       if (!fIsMC) newTrack->SetLabel(0);
         ++ntrnew;
       } else if (fHybridTrackCuts->AcceptTrack(etrack)) {
-
+       if (!etrack->GetConstrainedParam())
+         continue;
        UInt_t status = etrack->GetStatus();
-        if (etrack->GetConstrainedParam() && (((status&AliESDtrack::kITSrefit)!=0) || fIncludeNoITS)) {
-          AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
-          const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
-          newTrack->Set(constrainParam->GetX(),
-                        constrainParam->GetAlpha(),
-                        constrainParam->GetParameter(),
-                        constrainParam->GetCovariance());
-         if ((status&AliESDtrack::kITSrefit)==0) {
-            newTrack->SetBit(BIT(22),0); //type 2
-            newTrack->SetBit(BIT(23),1);
-          } else {
-            newTrack->SetBit(BIT(22),1); //type 1
-            newTrack->SetBit(BIT(23),0);
-          }
-         if (fDoPropagation)   
-           AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
-          ++ntrnew;
+       if (!fIncludeNoITS && ((status&AliESDtrack::kITSrefit)==0))
+         continue;
+
+       if (fTrackEfficiency < 1) {
+         Double_t r = gRandom->Rndm();
+         if (fTrackEfficiency < r)
+           continue;
+       }
+       AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
+       if (fDoPropagation)     
+         AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
+       const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
+       newTrack->Set(constrainParam->GetX(),
+                     constrainParam->GetAlpha(),
+                     constrainParam->GetParameter(),
+                     constrainParam->GetCovariance());
+       if ((status&AliESDtrack::kITSrefit)==0) {
+         newTrack->SetBit(BIT(22),0); //type 2
+         newTrack->SetBit(BIT(23),1);
+       } else {
+         newTrack->SetBit(BIT(22),1); //type 1
+         newTrack->SetBit(BIT(23),0);
        }
+       if (!fIsMC) newTrack->SetLabel(0);
+       ++ntrnew;
       }
     }
   }