]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/AliConversionMesonCuts.h
5805a6b24d59352030e06d40e964be14f0f0006c
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionMesonCuts.h
1 #ifndef ALICONVERSIONMESONCUTS_H
2 #define ALICONVERSIONMESONCUTS_H
3
4 // Class handling all kinds of selection cuts for Gamma Conversion analysis
5 // Authors: Svein Lindal, Daniel Lohner                                                                                         *
6
7 #include "AliAODpidUtil.h"
8 #include "AliConversionPhotonBase.h"
9 #include "AliAODConversionMother.h"
10 #include "AliAODTrack.h"
11 #include "AliESDtrack.h"
12 #include "AliVTrack.h"
13 #include "AliAODTrack.h"
14 #include "AliStack.h"
15 #include "AliAnalysisCuts.h"
16 #include "TH1F.h"
17 #include "AliAODMCParticle.h"
18
19 class AliESDEvent;
20 class AliAODEvent;
21 class AliConversionPhotonBase;
22 class AliKFVertex;
23 class TH1F;
24 class TH2F;
25 class AliPIDResponse;
26 class AliAnalysisCuts;
27 class iostream;
28 class TList;
29 class AliAnalysisManager;
30
31
32 using namespace std;
33
34 class AliConversionMesonCuts : public AliAnalysisCuts {
35         
36  public: 
37
38
39   enum cutIds {
40         kMesonKind,
41         kBackgroundScheme,            
42         kNumberOfBGEvents,           
43         kDegreesForRotationMethod,    
44         kRapidityMesonCut,    
45         kRCut,
46         kalphaMesonCut,               
47         kchi2MesonCut,
48         kElecShare,
49         kToCloseV0s,
50         kuseMCPSmearing,
51    kDcaGammaGamma,
52    kDcaRPrimVtx,
53    kDcaZPrimVtx,
54         kNCuts
55   };
56
57   Bool_t SetCutIds(TString cutString); 
58   Int_t fCuts[kNCuts];
59   Bool_t SetCut(cutIds cutID, Int_t cut);
60   Bool_t UpdateCutString();
61
62   static const char * fgkCutNames[kNCuts];
63
64   Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
65   void FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0);
66    
67   AliConversionMesonCuts(const char *name="MesonCuts", const char * title="Meson Cuts");
68   AliConversionMesonCuts(const AliConversionMesonCuts&);
69   AliConversionMesonCuts& operator=(const AliConversionMesonCuts&);
70
71   virtual ~AliConversionMesonCuts();                            //virtual destructor
72
73   virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
74   virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
75
76   TString GetCutNumber();
77
78   // Cut Selection
79   Bool_t MesonIsSelected(AliAODConversionMother *pi0,Bool_t IsSignal=kTRUE, Double_t fRapidityShift=0.);
80   Bool_t MesonIsSelectedMC(TParticle *fMCMother,AliStack *fMCStack, Double_t fRapidityShift=0.);
81   Bool_t MesonIsSelectedAODMC(AliAODMCParticle *MCMother,TClonesArray *AODMCArray, Double_t fRapidityShift=0.);
82   Bool_t MesonIsSelectedMCDalitz(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelelectron, Int_t &labelpositron, Int_t &labelgamma,Double_t fRapidityShift=0.);
83   Bool_t MesonIsSelectedMCEtaPiPlPiMiGamma(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelNegPion, Int_t &labelPosPion, Int_t &labelGamma, Double_t fRapidityShift=0);
84   Bool_t MesonIsSelectedMCChiC(TParticle *fMCMother,AliStack *fMCStack, Int_t &, Int_t &, Int_t &, Double_t fRapidityShift=0. );
85   void PrintCuts();
86
87   void InitCutHistograms(TString name="",Bool_t additionalHists=kFALSE);
88   void SetFillCutHistograms(TString name=""){if(!fHistograms){InitCutHistograms(name);};}
89   TList *GetCutHistograms(){return fHistograms;}
90   void SmearParticle(AliAODConversionPhoton * photon);
91   ///Cut functions
92   Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
93   Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
94   // Set Individual Cuts
95   Bool_t SetRCut(Int_t RCut);
96   Bool_t SetMesonKind(Int_t mesonKind);
97   Bool_t SetChi2MesonCut(Int_t chi2MesonCut);
98   Bool_t SetAlphaMesonCut(Int_t alphaMesonCut);
99   Bool_t SetRapidityMesonCut(Int_t RapidityMesonCut);
100   Bool_t SetBackgroundScheme(Int_t BackgroundScheme);
101   Bool_t SetNDegreesForRotationMethod(Int_t DegreesForRotationMethod);
102   Bool_t SetNumberOfBGEvents(Int_t NumberOfBGEvents);
103   Bool_t SetMCPSmearing(Int_t useMCPSmearing);
104   Bool_t SetSharedElectronCut(Int_t sharedElec);
105   Bool_t SetToCloseV0sCut(Int_t toClose);
106   Bool_t SetDCAGammaGammaCut(Int_t DCAGammaGamma);
107   Bool_t SetDCAZMesonPrimVtxCut(Int_t DCAZMesonPrimVtx);
108   Bool_t SetDCARMesonPrimVtxCut(Int_t DCARMesonPrimVtx);
109
110   // Request Flags
111   Bool_t UseRotationMethod(){return fUseRotationMethodInBG;}
112   Bool_t UseTrackMultiplicity(){return fUseTrackMultiplicityForBG;}
113   Int_t GetNumberOfBGEvents(){return fNumberOfBGEvents;}
114   Int_t NDegreesRotation(){return fnDegreeRotationPMForBG;}
115   Bool_t DoBGCalculation(){return fDoBG;}
116   Bool_t DoBGProbability(){return fdoBGProbability;}
117   Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
118   Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
119   Bool_t UseMCPSmearing(){return fUseMCPSmearing;}
120   Int_t BackgroundHandlerType(){return fBackgroundHandler;}
121   
122   protected:
123   TList *fHistograms;
124   //cuts
125   Int_t fMesonKind;
126   Double_t fMaxR; //r cut  
127   Double_t fChi2CutMeson; //chicut meson
128   Double_t fAlphaMinCutMeson; // min value for meson alpha cut
129   Double_t fAlphaCutMeson; // max value for meson alpha cut
130   Double_t fRapidityCutMeson; // max value for meson rapidity
131   Bool_t fUseRotationMethodInBG; // flag to apply rotation method for meson bg estimation
132   Bool_t fDoBG; // flag to intialize BG
133   Bool_t fdoBGProbability; // flag to use probability method for meson bg estimation
134   Bool_t fUseTrackMultiplicityForBG; // flag to use track multiplicity for meson bg estimation (else V0 mult)
135   Int_t fnDegreeRotationPMForBG; //
136   Int_t fNumberOfBGEvents; //
137   Float_t fOpeningAngle; // min opening angle for meson
138   Bool_t fDoToCloseV0sCut; //
139   Double_t fminV0Dist; //
140   Bool_t fDoSharedElecCut; //
141   Bool_t fUseMCPSmearing; // flag
142   Double_t fPBremSmearing;//
143   Double_t fPSigSmearing; //
144   Double_t fPSigSmearingCte; //
145   TF1 *fBrem; //
146   TRandom3 fRandom; //
147   TF1 *fFAlphaCut;
148   Bool_t fAlphaPtDepCut;
149   Int_t fElectronLabelArraySize;
150   Int_t *fElectronLabelArray; //[fElectronLabelArraySize] Array with elec/pos v0 label
151   Double_t fDCAGammaGammaCut; // cut value for the maximum distance between the two photons [cm]
152   Double_t fDCAZMesonPrimVtxCut; // cut value for the maximum distance in Z between the production point of the Meson & the primary vertex [cm]
153   Double_t fDCARMesonPrimVtxCut; // cut value for the maximum distance in R between the production point of the Meson & the primary vertex [cm]
154   Int_t fBackgroundHandler; //
155   
156   // Histograms
157   TObjString *fCutString; // cut number used for analysis
158   TH1F *hMesonCuts; // bookkeeping for meson cuts
159   TH1F *hMesonBGCuts; // bookkeeping for meson bg cuts
160   TH1F *hDCAGammaGammaMesonBefore;
161   TH1F *hDCAZMesonPrimVtxBefore;
162   TH1F *hDCARMesonPrimVtxBefore;
163   TH1F *hDCAGammaGammaMesonAfter;
164   TH2F *hDCAZMesonPrimVtxAfter;
165   TH1F *hDCARMesonPrimVtxAfter;
166
167 private:
168
169
170   ClassDef(AliConversionMesonCuts,4)
171 };
172
173
174 #endif