Update of the HFE package
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEV0cuts.h
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15 //
16 // Class for the V0 cuts - tuned to obtain clean eletron, pion and proton samples.
17 // NOT suitable for V0 analysis
18 //
19 #ifndef ALIHFEV0CUTS_H
20 #define ALIHFEV0CUTS_H
21
22 #include "AliHFEcollection.h"
23
24 class TList;
25
26 class AliMCParticle;
27 class AliVEvent;
28 class AliMCEvent;
29 class AliESDtrack;
30 class AliESDv0;
31 class AliKFVertex;
32 class AliKFParticle;
33 class AliVTrack;
34
35 class AliHFEV0cuts : public TObject {
36  public:
37   enum{
38     kBitQA = 1,
39       kBitQAmc = 2
40       };
41   enum{ // Reconstructed V0
42     kUndef = 0,
43       kRecoGamma = 1,
44       kRecoK0 = 2,
45       kRecoPhi = 3,
46       kRecoLambda = 4,
47       kRecoALambda = -4
48       
49       };
50   enum{ // Identified Daughter particles
51     kRecoElectron = 0,
52       kRecoPionK0 = 1,
53       kRecoPionL = 2,
54       kRecoKaon = 3,
55       kRecoProton = 4
56       };
57   AliHFEV0cuts();
58   ~AliHFEV0cuts();
59   AliHFEV0cuts(const AliHFEV0cuts &ref);
60   AliHFEV0cuts &operator=(const AliHFEV0cuts &ref);
61
62   void Init(const char* name);
63   
64   void RunQA();
65   void SetMCEvent(AliMCEvent* const mce)      { fMCEvent = mce; };
66   void SetInputEvent(AliVEvent* const e)      { fInputEvent = e; };
67   void SetPrimaryVertex(AliKFVertex* const v) { fPrimaryVertex = v; };
68   
69   TList* GetList()    { 
70     CLRBIT(fDestBits, kBitQA);
71     return fQA->GetList(); 
72   };
73   TList* GetListMC()  { 
74     CLRBIT(fDestBits, kBitQAmc);
75     return fQAmc->GetList(); 
76   };
77   
78   Bool_t   TrackCutsCommon(AliESDtrack* track);
79   Bool_t   V0CutsCommon(AliESDv0 *v0);
80   Bool_t   GammaCuts(AliESDv0 *v0);
81   Bool_t   K0Cuts(AliESDv0 *v0);
82   Bool_t   LambdaCuts(AliESDv0 *v0, Bool_t &isLambda);
83  
84   void     Armenteros(const AliESDv0 *v0, Float_t val[2]);
85
86   Double_t OpenAngle(AliESDv0 const *v0);//opening angle between V0 daughters; close to zero for conversions
87   Double_t PsiPair(const AliESDv0 *v0);
88   
89   Bool_t   CheckSigns(AliESDv0 const *v0);
90   Bool_t   GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]);
91   Bool_t   GetHelixCenter(AliESDtrack * const track, Double_t b,Int_t charge, Double_t center[2]);
92
93
94   // MC stuff
95   void     SetCurrentV0id(Int_t id) { fCurrentV0id = id; };
96   void     SetDaughtersID(Int_t d[2]) {fPdaughterPDG = d[0]; fNdaughterPDG = d[1]; };
97   
98   AliKFParticle *CreateMotherParticle(AliVTrack const *pdaughter, AliVTrack const *ndaughter, Int_t pspec, Int_t nspec);
99
100  private:
101   void Copy(TObject &ref) const;
102       
103  private:
104   
105   AliHFEcollection     *fQA;            // store QA cut histograms
106   AliHFEcollection     *fQAmc;          // store 
107   AliMCEvent           *fMCEvent;       // MC event
108   AliVEvent            *fInputEvent;    // Input Event
109   AliKFVertex          *fPrimaryVertex; // primary vertex
110
111   Int_t                fCurrentV0id;   // MC flagged V0    
112   Int_t                fPdaughterPDG;   // MC id of the positive daugeter
113   Int_t                fNdaughterPDG;   // MC id of the negative daugeter
114
115   UInt_t               fDestBits;           // status bits for destructor
116  
117   ClassDef(AliHFEV0cuts, 1)
118 };
119     
120
121 #endif