]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/AliConversionMesonCuts.h
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[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 MesonIsSelectedMCPiPlPiMiPiZero(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelNegPion, Int_t &labelPosPion, Int_t &labelNeutPion, Double_t fRapidityShift=0);
85   Bool_t MesonIsSelectedMCChiC(TParticle *fMCMother,AliStack *fMCStack, Int_t &, Int_t &, Int_t &, Double_t fRapidityShift=0. );
86   void PrintCuts();
87   void PrintCutsWithValues();
88   
89   void InitCutHistograms(TString name="",Bool_t additionalHists=kFALSE);
90   void SetFillCutHistograms(TString name=""){if(!fHistograms){InitCutHistograms(name);};}
91   TList *GetCutHistograms(){return fHistograms;}
92   void SmearParticle(AliAODConversionPhoton * photon);
93   void SmearVirtualPhoton(AliAODConversionPhoton* photon);
94   TLorentzVector SmearElectron(TLorentzVector particle);
95   ///Cut functions
96   Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
97   Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
98   // Set Individual Cuts
99   Bool_t SetRCut(Int_t RCut);
100   Bool_t SetMesonKind(Int_t mesonKind);
101   Bool_t SetChi2MesonCut(Int_t chi2MesonCut);
102   Bool_t SetAlphaMesonCut(Int_t alphaMesonCut);
103   Bool_t SetRapidityMesonCut(Int_t RapidityMesonCut);
104   Bool_t SetBackgroundScheme(Int_t BackgroundScheme);
105   Bool_t SetNDegreesForRotationMethod(Int_t DegreesForRotationMethod);
106   Bool_t SetNumberOfBGEvents(Int_t NumberOfBGEvents);
107   Bool_t SetMCPSmearing(Int_t useMCPSmearing);
108   Bool_t SetSharedElectronCut(Int_t sharedElec);
109   Bool_t SetToCloseV0sCut(Int_t toClose);
110   Bool_t SetDCAGammaGammaCut(Int_t DCAGammaGamma);
111   Bool_t SetDCAZMesonPrimVtxCut(Int_t DCAZMesonPrimVtx);
112   Bool_t SetDCARMesonPrimVtxCut(Int_t DCARMesonPrimVtx);
113
114   // Request Flags
115   Bool_t UseRotationMethod(){return fUseRotationMethodInBG;}
116   Bool_t UseTrackMultiplicity(){return fUseTrackMultiplicityForBG;}
117   Int_t GetNumberOfBGEvents(){return fNumberOfBGEvents;}
118   Int_t NDegreesRotation(){return fnDegreeRotationPMForBG;}
119   Bool_t DoBGCalculation(){return fDoBG;}
120   Bool_t DoBGProbability(){return fdoBGProbability;}
121   Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
122   Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
123   Bool_t UseMCPSmearing(){return fUseMCPSmearing;}
124   Int_t BackgroundHandlerType(){return fBackgroundHandler;}
125   
126   protected:
127   TList *fHistograms;
128   //cuts
129   Int_t fMesonKind;
130   Double_t fMaxR; //r cut  
131   Double_t fChi2CutMeson; //chicut meson
132   Double_t fAlphaMinCutMeson; // min value for meson alpha cut
133   Double_t fAlphaCutMeson; // max value for meson alpha cut
134   Double_t fRapidityCutMeson; // max value for meson rapidity
135   Bool_t fUseRotationMethodInBG; // flag to apply rotation method for meson bg estimation
136   Bool_t fDoBG; // flag to intialize BG
137   Bool_t fdoBGProbability; // flag to use probability method for meson bg estimation
138   Bool_t fUseTrackMultiplicityForBG; // flag to use track multiplicity for meson bg estimation (else V0 mult)
139   Int_t fnDegreeRotationPMForBG; //
140   Int_t fNumberOfBGEvents; //
141   Float_t fOpeningAngle; // min opening angle for meson
142   Bool_t fDoToCloseV0sCut; //
143   Double_t fminV0Dist; //
144   Bool_t fDoSharedElecCut; //
145   Bool_t fUseMCPSmearing; // flag
146   Double_t fPBremSmearing;//
147   Double_t fPSigSmearing; //
148   Double_t fPSigSmearingCte; //
149   TF1 *fBrem; //
150   TRandom3 fRandom; //
151   TF1 *fFAlphaCut;
152   Bool_t fAlphaPtDepCut;
153   Int_t fElectronLabelArraySize;
154   Int_t *fElectronLabelArray; //[fElectronLabelArraySize] Array with elec/pos v0 label
155   Double_t fDCAGammaGammaCut; // cut value for the maximum distance between the two photons [cm]
156   Double_t fDCAZMesonPrimVtxCut; // cut value for the maximum distance in Z between the production point of the Meson & the primary vertex [cm]
157   Double_t fDCARMesonPrimVtxCut; // cut value for the maximum distance in R between the production point of the Meson & the primary vertex [cm]
158   Int_t fBackgroundHandler; //
159   
160   // Histograms
161   TObjString *fCutString; // cut number used for analysis
162   TH1F *hMesonCuts; // bookkeeping for meson cuts
163   TH1F *hMesonBGCuts; // bookkeeping for meson bg cuts
164   TH1F *hDCAGammaGammaMesonBefore;
165   TH1F *hDCAZMesonPrimVtxBefore;
166   TH1F *hDCARMesonPrimVtxBefore;
167   TH1F *hDCAGammaGammaMesonAfter;
168   TH2F *hDCAZMesonPrimVtxAfter;
169   TH1F *hDCARMesonPrimVtxAfter;
170
171 private:
172
173
174   ClassDef(AliConversionMesonCuts,5)
175 };
176
177
178 #endif