]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/hfe/AliHFEV0pid.h
Add fast merging option (Diego)
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEV0pid.h
index 1413ead040f45bccf5d5c13d969479ec2b4e9971..84668cad8527631d226ea87931cd8558e700e3c4 100644 (file)
 #ifndef ALIHFEV0PID_H
 #define ALIHFEV0PID_H
 
-#ifndef ROOT_TObject
-#include <TObject.h>
-#endif
-
-#ifndef ALIHFECOLLECTION_H
-#include "AliHFEcollection.h"
+#ifndef ROOT_TNamed
+#include <TNamed.h>
 #endif
 
 class TObjArray;
 class TList;
+class TString;
 
 class AliESDv0;
 class AliESDtrack;
@@ -37,35 +34,23 @@ class AliKFParticle;
 class AliKFVertex;
 class AliVEvent;
 class AliVTrack;
+class AliMCEvent;
+
+class AliHFEV0cuts;
+class AliHFEcollection;
 
-class AliHFEV0pid : public TObject{
+class AliHFEV0pid : public TNamed{
   public:
-  enum{ // Reconstructed V0
-    kUndef = 0,
-      kRecoGamma = 1,
-      kRecoK0s = 2,
-      kRecoPhi = 3,
-      kRecoLambda = 4
-      
-    };
-    enum{ // Identified Daughter particles
-      kRecoElectron = 0,
-           kRecoPionK0 = 1,
-           kRecoPionL = 2,
-           kRecoKaon = 3,
-           kRecoProton = 4
-    };
     AliHFEV0pid();
+    AliHFEV0pid(const char *name);
     ~AliHFEV0pid();
 
-    Double_t  GetEffMass(AliESDv0 *v0, UInt_t p1, UInt_t p2) const;
-
-    void Process(AliVEvent * const inputEvent);
+    void  Process(AliVEvent * const inputEvent);
     Int_t ProcessV0(TObject *v0);
-    void Flush();
+    void  Flush();
 
-    void InitQA();
-    inline TList *GetListOfQAhistograms();
+    void  InitQA();
+    TList *GetListOfQAhistograms();
 
     TObjArray *GetListOfElectrons() const { return fElectrons; }
     TObjArray *GetListOfPionsK0() const { return fPionsK0; }
@@ -73,103 +58,89 @@ class AliHFEV0pid : public TObject{
     TObjArray *GetListOfKaons() const { return fKaons; }
     TObjArray *GetListOfProtons() const { return fProtons; }
 
-    Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); }
-    Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); }
-    void SetAODanalysis(Bool_t isAOD = kTRUE) { SetBit(kAODanalysis, isAOD); };
-    void SetESDanalysis(Bool_t isESD = kTRUE) { SetBit(kAODanalysis, !isESD); }; 
- private:
-    Float_t PsiPair(AliESDv0 *esdv0);//angle between daughters in plane perpendicular to magnetic field (characteristically around zero for conversions)
-    Float_t OpenAngle(AliESDv0 *esdv0) const;//opening angle between V0 daughters; close to zero for conversions
-   
+    Bool_t   IsAODanalysis() const { return TestBit(kAODanalysis); }
+    Bool_t   IsESDanalysis() const { return !TestBit(kAODanalysis); }
+    void     SetAODanalysis(Bool_t isAOD = kTRUE) { SetBit(kAODanalysis, isAOD); };
+    void     SetESDanalysis(Bool_t isESD = kTRUE) { SetBit(kAODanalysis, !isESD); }; 
 
-  protected:
+    void     SetMCEvent(AliMCEvent* const ev) { fMCEvent = ev; };
+    
+ protected:
     enum{
       kAODanalysis = BIT(14)
-    };
-    AliKFParticle *CreateMotherParticle(AliVTrack *pdaughter, AliVTrack *ndaughter, Int_t pspec, Int_t nspec);
-    void AddTrackToKFVertex(AliVTrack *track, Int_t species);
+       };
+
+    Int_t PreselectV0(AliESDv0 * const v0, Int_t idMC);
 
+    void   ArmenterosPlotMC(AliESDv0 * const v0, Int_t idMC);
     Bool_t IsGammaConv(TObject *v0);
     Bool_t IsK0s(TObject *v0);
-    Bool_t IsPhi(TObject *v0);
-    Bool_t IsLambda(TObject *v0);
+    Bool_t IsPhi(const TObject *v0) const;
+    Bool_t IsLambda(TObject *v0);        
+    TList *GetV0pidQA(); 
 
-    Bool_t CutESDtrack(AliESDtrack *track);
-    Bool_t CutV0(AliESDv0 *v0, Int_t species);
+    Int_t IdentifyV0(TObject *v0, Int_t d[2]);
 
-    Bool_t LooseRejectK0(AliESDv0 * const v0) const;
-    Bool_t LooseRejectLambda(AliESDv0 * const v0) const;
-    Bool_t LooseRejectGamma(AliESDv0 * const v0) const;
+    void  BenchmarkV0finder();
 
 private:
+ private:
     class AliHFEV0pidTrackIndex{
-      public:
-        AliHFEV0pidTrackIndex();
-        ~AliHFEV0pidTrackIndex();
-        void Init(Int_t capacity);
-        void Add(Int_t index, Int_t species);
-        Bool_t Find(Int_t index) const;
-        Bool_t Find(Int_t index, Int_t species) const;
-        Int_t GetNumberOfElectrons() const { return fNElectrons; };
-        Int_t GetNumberOfPionsK0() const { return fNPionsK0; };
-        Int_t GetNumberOfPionsL() const { return fNPionsL; };
-             Int_t GetNumberOfKaons() const { return fNKaons; };
-        Int_t GetNumberOfProtons() const { return fNProtons; };
-        void Flush();
-
-      private:
-        AliHFEV0pidTrackIndex(const AliHFEV0pidTrackIndex &ref);
-        AliHFEV0pidTrackIndex &operator=(const AliHFEV0pidTrackIndex &ref);
-        Int_t fNElectrons;        // Number of identified electrons
-        Int_t fNPionsK0;          // Number of identified pions from K0s
-        Int_t fNPionsL;           // Lumber of identified pions from Lambda
-             Int_t fNKaons;            // Number of identified kaons
-        Int_t fNProtons;          // Number of identified protons
-        Int_t *fIndexElectron;    // Indices of identified electrons
-        Int_t *fIndexPionK0;      // Indices of identified pions from K0s
-        Int_t *fIndexPionL;       // Indices of identified pions from Lambda
-             Int_t *fIndexKaon;        // Indices of identified kaons
-        Int_t *fIndexProton;      // Indices of identified protons
-    };
-
-    class AliHFELambdaInf{
-      public:
-        AliHFELambdaInf(AliKFParticle *track, AliKFVertex * const primaryVertex);
-        ~AliHFELambdaInf();
-
-        Double_t GetInvariantMass() const { return fInvariantMass; };
-        Double_t GetChi2NDF() const { return fChi2NDF; };
-        Double_t GetDistanceFromPrimaryVertex() const { return fDistVtx; };
-      private:
-        Double_t fInvariantMass;    // invariant mass before constraint
-        Double_t fChi2NDF;          // chi2/ndf after constraints
-        Double_t fDistVtx;          // Distance to primary Vertex
+    public:
+      AliHFEV0pidTrackIndex();
+      ~AliHFEV0pidTrackIndex();
+      void Init(Int_t capacity);
+      void Add(Int_t index, Int_t species);
+      Bool_t Find(Int_t index) const;
+      Bool_t Find(Int_t index, Int_t species) const;
+      Int_t GetNumberOfElectrons() const { return fNElectrons; };
+      Int_t GetNumberOfPionsK0() const { return fNPionsK0; };
+      Int_t GetNumberOfPionsL() const { return fNPionsL; };
+      Int_t GetNumberOfKaons() const { return fNKaons; };
+      Int_t GetNumberOfProtons() const { return fNProtons; };
+      void Flush();
+      
+    private:
+      AliHFEV0pidTrackIndex(const AliHFEV0pidTrackIndex &ref);
+      AliHFEV0pidTrackIndex &operator=(const AliHFEV0pidTrackIndex &ref);
+      Int_t fNElectrons;        // Number of identified electrons
+      Int_t fNPionsK0;          // Number of identified pions from K0s
+      Int_t fNPionsL;           // Lumber of identified pions from Lambda
+      Int_t fNKaons;            // Number of identified kaons
+      Int_t fNProtons;          // Number of identified protons
+      Int_t *fIndexElectron;    // Indices of identified electrons
+      Int_t *fIndexPionK0;      // Indices of identified pions from K0s
+      Int_t *fIndexPionL;       // Indices of identified pions from Lambda
+      Int_t *fIndexKaon;        // Indices of identified kaons
+      Int_t *fIndexProton;      // Indices of identified protons
     };
-
     AliHFEV0pid(const AliHFEV0pid &ref);
     AliHFEV0pid&operator=(const AliHFEV0pid &ref);
-
+    
     AliVEvent   *fInputEvent;        // Input Event
+    Int_t        fNtracks;           // number of tracks in current event
+    AliMCEvent  *fMCEvent;           // MC evnet
+    Bool_t       fMCon;              // availability of MC information
     AliKFVertex *fPrimaryVertex;     // Primary Vertex
     TObjArray   *fElectrons;         // List of Electron tracks coming from Conversions
     TObjArray   *fPionsK0;           // List of Pion tracks coming from K0
     TObjArray   *fPionsL;            // List of Pion tracks coming from L
     TObjArray   *fKaons;             // List of Kaon tracks from Phi decay
     TObjArray   *fProtons;           // List of Proton Tracks coming from Lambdas
+
+    TObjArray   *fGammas;            // for MC purposes - list of found gammas
+    TObjArray   *fK0s;               // for MC purposes - list of found K0s
+    TObjArray   *fLambdas;           // for MC purposes - list of found lambdas
+    TObjArray   *fAntiLambdas;       // for MC purposes - list of found anti lambdas
+
     AliHFEV0pidTrackIndex *fIndices; // Container for Track indices
     AliHFEcollection *fQA;           // Collection of QA histograms
+    AliHFEV0cuts     *fV0cuts;       // separate class for studying and applying the V0 cuts
+    TList       *fOutput;            // collection list
+
+    UInt_t       fDestBits;              // logical bits for destructor
 
     ClassDef(AliHFEV0pid, 1)          // V0 PID Class
 
 };
 
-//____________________________________________________________
-TList *AliHFEV0pid::GetListOfQAhistograms(){
-  //
-  // Get QA histograms
-  //
-  if(fQA)
-    return fQA->GetList();
-  return NULL;
-}
 #endif