]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/EMCAL/AliEmcalAodTrackFilterTask.cxx
AliAnalysisMuMu classes update
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalAodTrackFilterTask.cxx
index 2441a51a4cf0d8f951041f71e389c55f893cf245..f37084c36bb6cc8b42352928710caace17e1986a 100644 (file)
@@ -1,17 +1,16 @@
-// $Id: AliEmcalAodTrackFilterTask.cxx | Fri Dec 6 10:29:20 2013 +0100 | Constantin Loizides  $
 //
 // Class to filter Aod tracks
 //
 // Author: C.Loizides
 
+#include "AliEmcalAodTrackFilterTask.h"
 #include <TClonesArray.h>
 #include <TRandom3.h>
 #include <AliAODEvent.h>
 #include <AliAODTrack.h>
 #include <AliAnalysisManager.h>
-#include <AliLog.h>
 #include <AliEMCALRecoUtils.h>
-#include "AliEmcalAodTrackFilterTask.h"
+#include <AliLog.h>
 
 ClassImp(AliEmcalAodTrackFilterTask)
 
@@ -20,20 +19,15 @@ AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask() :
   AliAnalysisTaskSE("AliEmcalAodTrackFilterTask"),
   fTracksOutName("PicoTracks"),
   fTracksInName("tracks"),
-  fMinTrackPt(0),
-  fMaxTrackPt(1000),
-  fMinTrackEta(-10),
-  fMaxTrackEta(10),
-  fMinTrackPhi(-10),
-  fMaxTrackPhi(10),
-  fTrackEfficiency(1),
   fIncludeNoITS(kTRUE),
+  fCutMaxFrShTPCClus(0),
   fUseNegativeLabels(kTRUE),
   fIsMC(kFALSE),
-  fCutMaxFrShTPCClus(0.4),
-  fModifyTrack(kTRUE),
   fDoPropagation(kFALSE),
+  fAttemptProp(kFALSE),
+  fAttemptPropMatch(kFALSE),
   fDist(440),
+  fTrackEfficiency(0),
   fTracksIn(0),
   fTracksOut(0)
 {
@@ -48,20 +42,15 @@ AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) :
   AliAnalysisTaskSE(name),
   fTracksOutName("PicoTracks"),
   fTracksInName("tracks"),
-  fMinTrackPt(0),
-  fMaxTrackPt(1000),
-  fMinTrackEta(-10),
-  fMaxTrackEta(10),
-  fMinTrackPhi(-10),
-  fMaxTrackPhi(10),
-  fTrackEfficiency(1),
   fIncludeNoITS(kTRUE),
+  fCutMaxFrShTPCClus(0),
   fUseNegativeLabels(kTRUE),
   fIsMC(kFALSE),
-  fCutMaxFrShTPCClus(0.4),
-  fModifyTrack(kTRUE),
   fDoPropagation(kFALSE),
+  fAttemptProp(kFALSE),
+  fAttemptPropMatch(kFALSE),
   fDist(440),
+  fTrackEfficiency(0),
   fTracksIn(0),
   fTracksOut(0)
 {
@@ -125,17 +114,7 @@ void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
 
     if (!track)
       continue;
-
-    if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
-      continue;
-
-    if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta || 
-       track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
-      continue;
-
-    Bool_t isEmc = kFALSE;
     Int_t type = -1;
-
     if (fAODfilterBits[0] < 0) {
       if (track->IsHybridGlobalConstrainedGlobal())
        type = 3;
@@ -144,7 +123,7 @@ void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
     } else {
       if (track->TestFilterBit(fAODfilterBits[0])) {
        type = 0;
-      } else if (track->TestFilterBit(fAODfilterBits[1])) {
+      } else if (fAODfilterBits[1]>-1 && track->TestFilterBit(fAODfilterBits[1])) {
        if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
          if (fIncludeNoITS)
            type = 2;
@@ -161,38 +140,56 @@ void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
 
     if (fCutMaxFrShTPCClus > 0) {
       Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
-      if (frac > fCutMaxFrShTPCClus) 
+      if (frac > fCutMaxFrShTPCClus) {
        continue;
+      }
     }
 
-    if (fTrackEfficiency < 1) {
+    if (fTrackEfficiency) {
       Double_t r = gRandom->Rndm();
-      if (fTrackEfficiency < r) 
-       continue;
+      if (fTrackEfficiency->Eval(track->Pt()) < r)
+        continue;
     }
 
+    AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
+    newt->SetUniqueID(0);
+    newt->ResetBit(TObject::kHasUUID);
+    newt->ResetBit(TObject::kIsReferenced);
+
+    Bool_t propthistrack = kFALSE;
+    if (fDoPropagation)
+      propthistrack = kTRUE;
+    else if (!newt->IsExtrapolatedToEMCAL()) {
+      if (fAttemptProp)
+       propthistrack = kTRUE;
+      else if (fAttemptPropMatch && newt->IsEMCAL())
+       propthistrack = kTRUE;
+    }
+    if (propthistrack)
+      AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
+
     Int_t label = 0;
     if (fIsMC) {
       if (fUseNegativeLabels)
        label = track->GetLabel();
       else 
        label = TMath::Abs(track->GetLabel());
-    
       if (label == 0) 
        AliDebug(2,Form("Track %d with label==0", iTracks));
     }
-
-    AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
-    if (fDoPropagation)
-      AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
-
-    if (fModifyTrack) {
-      newt->SetLabel(label);
-      //newt->SetType((AliAODTrack::AODTrk_t)type);
-      //      if (isEmc)
-      //       newt->SetStatus(AliVTrack::kEMCALmatch);
-      //else 
-      //       newt->ResetStatus(AliVTrack::kEMCALmatch);
+    newt->SetLabel(label);
+    if (type==0) {
+      newt->SetBit(BIT(22),0);
+      newt->SetBit(BIT(23),0);
+    } else if (type==1) {
+      newt->SetBit(BIT(22),1);
+      newt->SetBit(BIT(23),0);
+    } else if (type==2) {
+      newt->SetBit(BIT(22),0);
+      newt->SetBit(BIT(23),1);
+    } else if (type==3) {
+      newt->SetBit(BIT(22),1);
+      newt->SetBit(BIT(23),1);
     }
     ++nacc;
   }