Allow filtering physical primary particles and (for productions with embedded signal...
authorsaiola <salvatore.aiola@cern.ch>
Sat, 5 Jul 2014 23:32:09 +0000 (19:32 -0400)
committersaiola <salvatore.aiola@cern.ch>
Sat, 5 Jul 2014 23:32:09 +0000 (19:32 -0400)
PWG/EMCAL/AliParticleContainer.cxx
PWG/EMCAL/AliParticleContainer.h
PWGJE/EMCALJetTasks/AliEmcalJetTask.cxx
PWGJE/EMCALJetTasks/AliEmcalJetTask.h
PWGJE/EMCALJetTasks/macros/AddTaskJetResponseMaker.C

index af3c980..fbc82f0 100644 (file)
@@ -23,7 +23,9 @@ AliParticleContainer::AliParticleContainer():
   fParticleMaxPhi(10),
   fTrackBitMap(0),
   fMCTrackBitMap(0),
-  fMinMCLabel(0)
+  fMinMCLabel(0),
+  fMCFlag(0),
+  fGeneratorIndex(-1)
 {
   // Default constructor.
 
@@ -40,7 +42,9 @@ AliParticleContainer::AliParticleContainer(const char *name):
   fParticleMaxPhi(10),
   fTrackBitMap(0),
   fMCTrackBitMap(0),
-  fMinMCLabel(0)
+  fMinMCLabel(0),
+  fMCFlag(0),
+  fGeneratorIndex(-1)
 {
   // Standard constructor.
 
@@ -120,6 +124,7 @@ AliVParticle* AliParticleContainer::GetAcceptParticleWithLabel(Int_t lab) const
   return GetAcceptParticle(i);
 }
 
+
 //________________________________________________________________________
 AliVParticle* AliParticleContainer::GetNextAcceptParticle(Int_t i) 
 {
@@ -190,6 +195,12 @@ Bool_t AliParticleContainer::AcceptParticle(AliVParticle *vp) const
   if (vp->Eta() < fParticleMinEta || vp->Eta() > fParticleMaxEta || 
       vp->Phi() < fParticleMinPhi || vp->Phi() > fParticleMaxPhi)
     return kFALSE;
+
+  if ((vp->GetFlag() & fMCFlag) != fMCFlag) 
+    return kFALSE;
+
+  if (fGeneratorIndex >= 0 && fGeneratorIndex != vp->GetGeneratorIndex())
+    return kFALSE;
   
   return kTRUE;
 }
index 228deab..7cde621 100644 (file)
@@ -6,6 +6,8 @@
 class AliVEvent;
 class AliVParticle;
 
+#include "AliAODMCParticle.h"
+
 #include "AliEmcalContainer.h"
 
 class AliParticleContainer : public AliEmcalContainer {
@@ -37,6 +39,11 @@ class AliParticleContainer : public AliEmcalContainer {
   void                        SetParticleEtaLimits(Double_t min, Double_t max)  { fParticleMaxEta = max ; fParticleMinEta = min ; }
   void                        SetParticlePhiLimits(Double_t min, Double_t max)  { fParticleMaxPhi = max ; fParticleMinPhi = min ; }
   void                        SetTrackBitMap(UInt_t m)                          { fTrackBitMap     = m ; }
+  void                        SetMCFlag(UInt_t m)                               { fMCFlag          = m ; }
+  void                        SelectHIJING(Bool_t s)                            { if (s) fGeneratorIndex = 0; else fGeneratorIndex = -1; }
+  void                        SetGeneratorIndex(Short_t i)                      { fGeneratorIndex = i  ; }
+  void                        SelectPhysicalPrimaries(Bool_t s)                 { if (s) fMCFlag |=  AliAODMCParticle::kPhysicalPrim ; 
+                                                                                  else   fMCFlag &= ~AliAODMCParticle::kPhysicalPrim ; }
 
  protected:
   Double_t                    fParticlePtCut;                 // cut on particle pt
@@ -47,12 +54,14 @@ class AliParticleContainer : public AliEmcalContainer {
   UInt_t                      fTrackBitMap;                   // bit map of accepted tracks (non MC)
   UInt_t                      fMCTrackBitMap;                 // bit map of accepted MC tracks
   Int_t                       fMinMCLabel;                    // minimum MC label value for the tracks/clusters being considered MC particles
+  UInt_t                      fMCFlag;                        // select MC particles with flags
+  Short_t                     fGeneratorIndex;                // select MC particles with generator index (default = -1 = switch off selection)
 
  private:
   AliParticleContainer(const AliParticleContainer& obj); // copy constructor
   AliParticleContainer& operator=(const AliParticleContainer& other); // assignment
 
-  ClassDef(AliParticleContainer,1);
+  ClassDef(AliParticleContainer,2);
 
 };
 
index debe313..17f55ea 100644 (file)
@@ -59,6 +59,8 @@ AliEmcalJetTask::AliEmcalJetTask() :
   fMinMCLabel(0),
   fRecombScheme(fastjet::pt_scheme),
   fTrackEfficiency(1.),
+  fMCFlag(0),
+  fGeneratorIndex(-1),
   fIsInit(0),
   fLocked(0),
   fIsPSelSet(0),
@@ -112,6 +114,8 @@ AliEmcalJetTask::AliEmcalJetTask(const char *name) :
   fMinMCLabel(0),
   fRecombScheme(fastjet::pt_scheme),
   fTrackEfficiency(1.),
+  fMCFlag(0),
+  fGeneratorIndex(-1),
   fIsInit(0),
   fLocked(0),
   fIsPSelSet(0),
@@ -263,7 +267,15 @@ void AliEmcalJetTask::FindJets()
        else {
          AliDebug(2,Form("Track %d matches the bit mask (%d, %d)", iTracks, fConstSel, t->TestBits(TObject::kBitMask)));           
        }
-      }            
+      }
+      if ((t->GetFlag() & fMCFlag) != fMCFlag) { 
+       AliDebug(2,Form("Skipping track %d because it does not match the MC flags", iTracks));
+       continue;
+      }
+      if (fGeneratorIndex >= 0 && t->GetGeneratorIndex() != fGeneratorIndex) { 
+       AliDebug(2,Form("Skipping track %d because it does not match the MC generator index", iTracks));
+       continue;
+      }
       if (t->Pt() < fMinJetTrackPt) 
         continue;
       Double_t eta = t->Eta();
index f43f7d6..4410def 100644 (file)
@@ -12,6 +12,7 @@ namespace fastjet {
 #include "AliLog.h"
 #include "AliAnalysisTaskSE.h"
 #include "AliFJWrapper.h"
+#include "AliAODMCParticle.h"
 
 class AliEmcalJetTask : public AliAnalysisTaskSE {
  public:
@@ -80,7 +81,14 @@ class AliEmcalJetTask : public AliAnalysisTaskSE {
       fOfflineTriggerMask = fOfflineTriggerMask | offlineTriggerMask;
     }
   }
-  void                   SetLegacyMode(Bool_t mode)       { if(IsLocked()) return; fLegacyMode = mode; }
+  void                   SetLegacyMode(Bool_t mode)           { if(IsLocked()) return; fLegacyMode = mode; }
+  void                   SetMCFlag(UInt_t m)                  { if(IsLocked()) return; fMCFlag     = m   ; }
+  void                   SelectHIJING(Bool_t s)               { if(IsLocked()) return; if (s) fGeneratorIndex = 0; else fGeneratorIndex = -1; }
+  void                   SetGeneratorIndex(Short_t i)         { if(IsLocked()) return; fGeneratorIndex = i; }
+  void                   SelectPhysicalPrimaries(Bool_t s)    { if(IsLocked()) return; 
+                                                                if (s) fMCFlag |=  AliAODMCParticle::kPhysicalPrim ; 
+                                                                else   fMCFlag &= ~AliAODMCParticle::kPhysicalPrim ; }
+
   void                   SetCodeDebug(Bool_t val)         { fCodeDebug = val; }
 
   void                   SetRhoName(const char *n)              { fRhoName      = n            ; }
@@ -150,6 +158,8 @@ class AliEmcalJetTask : public AliAnalysisTaskSE {
   Int_t                  fMinMCLabel;             // minimum MC label value for the tracks/clusters being considered MC particles
   Int_t                  fRecombScheme;           // recombination scheme used by fastjet
   Double_t               fTrackEfficiency;        // artificial tracking inefficiency (0...1)
+  UInt_t                 fMCFlag;                 // select MC particles with flags
+  Short_t                fGeneratorIndex;         // select MC particles with generator index (default = -1 = switch off selection)
   Bool_t                 fIsInit;                 //!=true if already initialized
   Bool_t                 fLocked;                 // true if lock is set
   Bool_t                 fIsPSelSet;              //!=true if physics selection was set
@@ -178,6 +188,6 @@ class AliEmcalJetTask : public AliAnalysisTaskSE {
   AliEmcalJetTask(const AliEmcalJetTask&);            // not implemented
   AliEmcalJetTask &operator=(const AliEmcalJetTask&); // not implemented
 
-  ClassDef(AliEmcalJetTask, 13) // Jet producing task
+  ClassDef(AliEmcalJetTask, 14) // Jet producing task
 };
 #endif
index 52a3f63..add3344 100644 (file)
@@ -86,6 +86,7 @@ AliJetResponseMaker* AddTaskJetResponseMaker(
 
     
   AliParticleContainer *trackCont2 = jetTask->AddParticleContainer(ntracks2);
+  trackCont2->SelectPhysicalPrimaries(kTRUE);
   AliClusterContainer *clusCont2 = jetTask->AddClusterContainer(nclusters2);
   AliJetContainer *jetCont2 = jetTask->AddJetContainer(njets2, cutType, jetradius2);
   jetCont2->SetRhoName(nrho2);