]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/AliCFParticleGenCuts.h
technical changes:
[u/mrichter/AliRoot.git] / CORRFW / AliCFParticleGenCuts.h
index c21c6972b36420a7526700bb79e25fdd7f401f69..8873afd7ceeddf8dfaa24d4deea8d9261be51eb0 100644 (file)
@@ -18,6 +18,9 @@
 // This class is designed to handle 
 // particle selection at generated level.
 //
+// added support for MC in AOD tree (2008-11-04)
+// added a bool flag for the alternative (standard MC) vs (AOD MC).
+//
 // author : R. Vernet (renaud.vernet@cern.ch)
 //////////////////////////////////////////////////////////////////////
 
@@ -37,6 +40,10 @@ class TH2F;
 class TBits;
 class TArrayF;
 class TDecayChannel;
+class AliVParticle;
+class AliVEvent;
+class AliAODMCParticle;
+
 
 class AliCFParticleGenCuts : public AliCFCutBase
 {
@@ -49,17 +56,25 @@ class AliCFParticleGenCuts : public AliCFCutBase
   virtual Bool_t IsSelected(TObject* obj) ;
   Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
   virtual void   SetEvtInfo(TObject* mcEvent) ;
+  void    SetAODMC(Bool_t flag) {fIsAODMC=flag;}
+
+  Bool_t IsPrimaryCharged(AliVParticle *mcPart);
+  Bool_t IsPrimary(AliMCParticle    *mcPart) ;
+  Bool_t IsPrimary(AliAODMCParticle *mcPart) ;
   //static checkers
-  static Bool_t IsPrimaryCharged(AliMCParticle *mcPart,AliStack*stack);
-  static Bool_t IsPrimary(AliMCParticle *mcPart,AliStack*stack);
-  static Bool_t IsCharged(AliMCParticle *mcPart);
-  static Bool_t IsA(AliMCParticle *mcPart, Int_t pdg, Bool_t abs=kFALSE);
+  static Bool_t IsCharged(AliVParticle *mcPart);
+  static Bool_t IsA(AliMCParticle    *mcPart, Int_t pdg, Bool_t abs=kFALSE);
+  static Bool_t IsA(AliAODMCParticle *mcPart, Int_t pdg, Bool_t abs=kFALSE);
 
   void SetRequireIsCharged   () {fRequireIsCharged  =kTRUE; fRequireIsNeutral  =kFALSE;}
   void SetRequireIsNeutral   () {fRequireIsNeutral  =kTRUE; fRequireIsCharged  =kFALSE;}
   void SetRequireIsPrimary   () {fRequireIsPrimary  =kTRUE; fRequireIsSecondary=kFALSE;}
   void SetRequireIsSecondary () {fRequireIsSecondary=kTRUE; fRequireIsPrimary  =kFALSE;}
-  void SetRequirePdgCode     (Int_t pdg)            {fRequirePdgCode=kTRUE; fPdgCode=pdg;}
+  void SetRequirePdgCode     (Int_t pdg, Bool_t useAbsolute=kFALSE) {
+                              fRequirePdgCode=kTRUE; 
+                             fPdgCode=pdg; 
+                             fRequireAbsolutePdg=useAbsolute;
+  }
   void SetProdVtxRangeX    (Double32_t xmin, Double32_t xmax) {fProdVtxXMin   =xmin; fProdVtxXMax   =xmax;}
   void SetProdVtxRangeY    (Double32_t ymin, Double32_t ymax) {fProdVtxYMin   =ymin; fProdVtxYMax   =ymax;}
   void SetProdVtxRangeZ    (Double32_t zmin, Double32_t zmax) {fProdVtxZMin   =zmin; fProdVtxZMax   =zmax;}
@@ -96,12 +111,14 @@ class AliCFParticleGenCuts : public AliCFCutBase
   };
 
  private:
-  AliMCEvent* fMCInfo ;    // pointer to the MC event information
+  Bool_t fIsAODMC ;       // flag for standard MC or MC from AOD tree
+  AliVEvent* fMCInfo ;    // pointer to the MC event information
   Bool_t     fRequireIsCharged;   // require charged particle
   Bool_t     fRequireIsNeutral;   // require neutral particle
   Bool_t     fRequireIsPrimary;   // require primary particle
   Bool_t     fRequireIsSecondary; // require secondary particle
   Bool_t     fRequirePdgCode;     // require check of the PDG code
+  Bool_t     fRequireAbsolutePdg; // use the PDG code absolute value, used also for the decay channel
   Int_t      fPdgCode ;           // particle PDG code
   Double32_t fProdVtxXMin;        // min X of particle production vertex
   Double32_t fProdVtxYMin;        // min Y of particle production vertex
@@ -119,7 +136,7 @@ class AliCFParticleGenCuts : public AliCFCutBase
   Double32_t fDecayLengthMax;     // max decay length (absolute)
   Double32_t fDecayRxyMin;        // min decay length in transverse plane wrt (0,0,0)
   Double32_t fDecayRxyMax;        // max decay length in transverse plane wrt (0,0,0)
-  TDecayChannel* fDecayChannel;   // decay channel 
+  TDecayChannel* fDecayChannel;   // decay channel : if fRequireAbsolutePdg, the antiparticle channel will be checked as well
 
   //QA histos
   TH1F*    fhCutStatistics;        // Histogram: statistics of what cuts the tracks did not survive
@@ -128,12 +145,13 @@ class AliCFParticleGenCuts : public AliCFCutBase
   TArrayF* fCutValues;             // array of cut values
   TBits* fBitmap ;                 // stores single selection decisions
 
-  void SelectionBitMap(TObject* obj);
+  void SelectionBitMap(AliMCParticle*    obj); // for MC got from Kinematics
+  void SelectionBitMap(AliAODMCParticle* obj); // for MC got from AOD
   void FillHistograms(TObject* obj, Bool_t afterCuts);
   void AddQAHistograms(TList *qaList) ;
   void DefineHistograms();
 
-  ClassDef(AliCFParticleGenCuts,1);
+  ClassDef(AliCFParticleGenCuts,2);
 };
 
 #endif