ROOT logo
#ifndef ALICONVERSIONMESONCUTS_H
#define ALICONVERSIONMESONCUTS_H

// Class handling all kinds of selection cuts for Gamma Conversion analysis
// Authors: Svein Lindal, Daniel Lohner												*

#include "AliAODpidUtil.h"
#include "AliConversionPhotonBase.h"
#include "AliAODConversionMother.h"
#include "AliAODTrack.h"
#include "AliESDtrack.h"
#include "AliVTrack.h"
#include "AliAODTrack.h"
#include "AliStack.h"
#include "AliAnalysisCuts.h"
#include "TH1F.h"
#include "AliAODMCParticle.h"

class AliESDEvent;
class AliAODEvent;
class AliConversionPhotonBase;
class AliKFVertex;
class TH1F;
class TH2F;
class AliPIDResponse;
class AliAnalysisCuts;
class iostream;
class TList;
class AliAnalysisManager;


using namespace std;

class AliConversionMesonCuts : public AliAnalysisCuts {
	
	public: 


		enum cutIds {
			kMesonKind,
			kBackgroundScheme,            
			kNumberOfBGEvents,           
			kDegreesForRotationMethod,    
			kRapidityMesonCut,    
			kRCut,
			kalphaMesonCut,               
			kSelectionCut,
			kElecShare,
			kToCloseV0s,
			kuseMCPSmearing,
			kDcaGammaGamma,
			kDcaRPrimVtx,
			kDcaZPrimVtx,
			kNCuts
		};

		Bool_t SetCutIds(TString cutString); 
		Int_t fCuts[kNCuts];
		Bool_t SetCut(cutIds cutID, Int_t cut);
		Bool_t UpdateCutString();

		static const char * fgkCutNames[kNCuts];

		Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
		void FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0);
		
		AliConversionMesonCuts(const char *name="MesonCuts", const char * title="Meson Cuts");
		AliConversionMesonCuts(const AliConversionMesonCuts&);
		AliConversionMesonCuts& operator=(const AliConversionMesonCuts&);

		virtual ~AliConversionMesonCuts();                            //virtual destructor

		virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
		virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}

		TString GetCutNumber();

		// Cut Selection
		Bool_t MesonIsSelected(AliAODConversionMother *pi0,Bool_t IsSignal=kTRUE, Double_t fRapidityShift=0.);
		Bool_t MesonIsSelectedMC(TParticle *fMCMother,AliStack *fMCStack, Double_t fRapidityShift=0.);
		Bool_t MesonIsSelectedAODMC(AliAODMCParticle *MCMother,TClonesArray *AODMCArray, Double_t fRapidityShift=0.);
		Bool_t MesonIsSelectedMCDalitz(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelelectron, Int_t &labelpositron, Int_t &labelgamma,Double_t fRapidityShift=0.);
		Bool_t MesonIsSelectedMCEtaPiPlPiMiGamma(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelNegPion, Int_t &labelPosPion, Int_t &labelGamma, Double_t fRapidityShift=0);
		Bool_t MesonIsSelectedMCPiPlPiMiPiZero(TParticle *fMCMother,AliStack *fMCStack, Int_t &labelNegPion, Int_t &labelPosPion, Int_t &labelNeutPion, Double_t fRapidityShift=0);
		Bool_t MesonIsSelectedMCChiC(TParticle *fMCMother,AliStack *fMCStack, Int_t &, Int_t &, Int_t &, Double_t fRapidityShift=0. );
		void PrintCuts();
		void PrintCutsWithValues();
		
		void InitCutHistograms(TString name="",Bool_t additionalHists=kFALSE);
		void SetFillCutHistograms(TString name=""){if(!fHistograms){InitCutHistograms(name);};}
		TList *GetCutHistograms(){return fHistograms;}
		void SmearParticle(AliAODConversionPhoton * photon);
		void SmearVirtualPhoton(AliAODConversionPhoton* photon);
		TLorentzVector SmearElectron(TLorentzVector particle);
		///Cut functions
		Bool_t RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s);
		Bool_t RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0);
		// Set Individual Cuts
		Bool_t SetRCut(Int_t RCut);
		Bool_t SetMesonKind(Int_t mesonKind);
		Bool_t SetSelectionWindowCut(Int_t selectionCut);
		Bool_t SetAlphaMesonCut(Int_t alphaMesonCut);
		Bool_t SetRapidityMesonCut(Int_t RapidityMesonCut);
		Bool_t SetBackgroundScheme(Int_t BackgroundScheme);
		Bool_t SetNDegreesForRotationMethod(Int_t DegreesForRotationMethod);
		Bool_t SetNumberOfBGEvents(Int_t NumberOfBGEvents);
		Bool_t SetMCPSmearing(Int_t useMCPSmearing);
		Bool_t SetSharedElectronCut(Int_t sharedElec);
		Bool_t SetToCloseV0sCut(Int_t toClose);
		Bool_t SetDCAGammaGammaCut(Int_t DCAGammaGamma);
		Bool_t SetDCAZMesonPrimVtxCut(Int_t DCAZMesonPrimVtx);
		Bool_t SetDCARMesonPrimVtxCut(Int_t DCARMesonPrimVtx);

		// Request Flags
		Bool_t UseRotationMethod(){return fUseRotationMethodInBG;}
		Bool_t UseTrackMultiplicity(){return fUseTrackMultiplicityForBG;}
		Int_t GetNumberOfBGEvents(){return fNumberOfBGEvents;}
		Int_t NDegreesRotation(){return fnDegreeRotationPMForBG;}
		Bool_t DoBGCalculation(){return fDoBG;}
		Bool_t DoBGProbability(){return fdoBGProbability;}
		Bool_t UseElecSharingCut(){return fDoSharedElecCut;}
		Bool_t UseToCloseV0sCut(){return fDoToCloseV0sCut;}
		Bool_t UseMCPSmearing(){return fUseMCPSmearing;}
		Int_t BackgroundHandlerType(){return fBackgroundHandler;}
		Double_t GetSelectionLow() const {return fSelectionLow;}
		Double_t GetSelectionHigh() const {return fSelectionHigh;}
		
	protected:
		TList *fHistograms;
		//cuts
		Int_t 		fMesonKind;
		Double_t 	fMaxR; 						//r cut  
		Double_t 	fSelectionLow; 				//lower meson inv mass window for further selection
		Double_t 	fSelectionHigh; 			//higher meson inv mass window for further selection
		Double_t 	fAlphaMinCutMeson; 			// min value for meson alpha cut
		Double_t 	fAlphaCutMeson; 			// max value for meson alpha cut
		Double_t 	fRapidityCutMeson; 			// max value for meson rapidity
		Bool_t 		fUseRotationMethodInBG; 	// flag to apply rotation method for meson bg estimation
		Bool_t 		fDoBG; 						// flag to intialize BG
		Bool_t 		fdoBGProbability; 			// flag to use probability method for meson bg estimation
		Bool_t 		fUseTrackMultiplicityForBG; // flag to use track multiplicity for meson bg estimation (else V0 mult)
		Int_t 		fnDegreeRotationPMForBG; 	//
		Int_t 		fNumberOfBGEvents; 			//
		Float_t 	fOpeningAngle; 				// min opening angle for meson
		Bool_t 		fDoToCloseV0sCut; 			//
		Double_t 	fminV0Dist; 				//
		Bool_t 		fDoSharedElecCut; 			//
		Bool_t 		fUseMCPSmearing; 			// flag
		Double_t 	fPBremSmearing;				//
		Double_t 	fPSigSmearing; 				//
		Double_t 	fPSigSmearingCte; 			//
		TF1*		fBrem; 						//
		TRandom3 	fRandom; 					//
		TF1*		fFAlphaCut;					//
		Bool_t 		fAlphaPtDepCut;				//
		Int_t 		fElectronLabelArraySize;	//
		Int_t*		fElectronLabelArray; 		//[fElectronLabelArraySize] Array with elec/pos v0 label
		Double_t 	fDCAGammaGammaCut; 			// cut value for the maximum distance between the two photons [cm]
		Double_t 	fDCAZMesonPrimVtxCut; 		// cut value for the maximum distance in Z between the production point of the Meson & the primary vertex [cm]
		Double_t 	fDCARMesonPrimVtxCut; 		// cut value for the maximum distance in R between the production point of the Meson & the primary vertex [cm]
		Bool_t 		fDCAGammaGammaCutOn; 		// cut flag for the maximum distance between the two photons
		Bool_t 		fDCAZMesonPrimVtxCutOn; 	// cut flag for the maximum distance in Z between the production point of the Meson & the primary vertex 
		Bool_t 		fDCARMesonPrimVtxCutOn; 	// cut flag for the maximum distance in R between the production point of the Meson & the primary vertex 

		Int_t 		fBackgroundHandler; 		//
		
		// Histograms
		TObjString*	fCutString; 				// cut number used for analysis
		TH1F*		hMesonCuts;					// bookkeeping for meson cuts
		TH1F* 		hMesonBGCuts; 				// bookkeeping for meson bg cuts
		TH1F* 		hDCAGammaGammaMesonBefore;	//
		TH1F* 		hDCAZMesonPrimVtxBefore;	//
		TH1F* 		hDCARMesonPrimVtxBefore;	//
		TH1F* 		hDCAGammaGammaMesonAfter;	//
		TH2F* 		hDCAZMesonPrimVtxAfter;		//
		TH1F* 		hDCARMesonPrimVtxAfter;		//

	private:


		ClassDef(AliConversionMesonCuts,7)
};


#endif
 AliConversionMesonCuts.h:1
 AliConversionMesonCuts.h:2
 AliConversionMesonCuts.h:3
 AliConversionMesonCuts.h:4
 AliConversionMesonCuts.h:5
 AliConversionMesonCuts.h:6
 AliConversionMesonCuts.h:7
 AliConversionMesonCuts.h:8
 AliConversionMesonCuts.h:9
 AliConversionMesonCuts.h:10
 AliConversionMesonCuts.h:11
 AliConversionMesonCuts.h:12
 AliConversionMesonCuts.h:13
 AliConversionMesonCuts.h:14
 AliConversionMesonCuts.h:15
 AliConversionMesonCuts.h:16
 AliConversionMesonCuts.h:17
 AliConversionMesonCuts.h:18
 AliConversionMesonCuts.h:19
 AliConversionMesonCuts.h:20
 AliConversionMesonCuts.h:21
 AliConversionMesonCuts.h:22
 AliConversionMesonCuts.h:23
 AliConversionMesonCuts.h:24
 AliConversionMesonCuts.h:25
 AliConversionMesonCuts.h:26
 AliConversionMesonCuts.h:27
 AliConversionMesonCuts.h:28
 AliConversionMesonCuts.h:29
 AliConversionMesonCuts.h:30
 AliConversionMesonCuts.h:31
 AliConversionMesonCuts.h:32
 AliConversionMesonCuts.h:33
 AliConversionMesonCuts.h:34
 AliConversionMesonCuts.h:35
 AliConversionMesonCuts.h:36
 AliConversionMesonCuts.h:37
 AliConversionMesonCuts.h:38
 AliConversionMesonCuts.h:39
 AliConversionMesonCuts.h:40
 AliConversionMesonCuts.h:41
 AliConversionMesonCuts.h:42
 AliConversionMesonCuts.h:43
 AliConversionMesonCuts.h:44
 AliConversionMesonCuts.h:45
 AliConversionMesonCuts.h:46
 AliConversionMesonCuts.h:47
 AliConversionMesonCuts.h:48
 AliConversionMesonCuts.h:49
 AliConversionMesonCuts.h:50
 AliConversionMesonCuts.h:51
 AliConversionMesonCuts.h:52
 AliConversionMesonCuts.h:53
 AliConversionMesonCuts.h:54
 AliConversionMesonCuts.h:55
 AliConversionMesonCuts.h:56
 AliConversionMesonCuts.h:57
 AliConversionMesonCuts.h:58
 AliConversionMesonCuts.h:59
 AliConversionMesonCuts.h:60
 AliConversionMesonCuts.h:61
 AliConversionMesonCuts.h:62
 AliConversionMesonCuts.h:63
 AliConversionMesonCuts.h:64
 AliConversionMesonCuts.h:65
 AliConversionMesonCuts.h:66
 AliConversionMesonCuts.h:67
 AliConversionMesonCuts.h:68
 AliConversionMesonCuts.h:69
 AliConversionMesonCuts.h:70
 AliConversionMesonCuts.h:71
 AliConversionMesonCuts.h:72
 AliConversionMesonCuts.h:73
 AliConversionMesonCuts.h:74
 AliConversionMesonCuts.h:75
 AliConversionMesonCuts.h:76
 AliConversionMesonCuts.h:77
 AliConversionMesonCuts.h:78
 AliConversionMesonCuts.h:79
 AliConversionMesonCuts.h:80
 AliConversionMesonCuts.h:81
 AliConversionMesonCuts.h:82
 AliConversionMesonCuts.h:83
 AliConversionMesonCuts.h:84
 AliConversionMesonCuts.h:85
 AliConversionMesonCuts.h:86
 AliConversionMesonCuts.h:87
 AliConversionMesonCuts.h:88
 AliConversionMesonCuts.h:89
 AliConversionMesonCuts.h:90
 AliConversionMesonCuts.h:91
 AliConversionMesonCuts.h:92
 AliConversionMesonCuts.h:93
 AliConversionMesonCuts.h:94
 AliConversionMesonCuts.h:95
 AliConversionMesonCuts.h:96
 AliConversionMesonCuts.h:97
 AliConversionMesonCuts.h:98
 AliConversionMesonCuts.h:99
 AliConversionMesonCuts.h:100
 AliConversionMesonCuts.h:101
 AliConversionMesonCuts.h:102
 AliConversionMesonCuts.h:103
 AliConversionMesonCuts.h:104
 AliConversionMesonCuts.h:105
 AliConversionMesonCuts.h:106
 AliConversionMesonCuts.h:107
 AliConversionMesonCuts.h:108
 AliConversionMesonCuts.h:109
 AliConversionMesonCuts.h:110
 AliConversionMesonCuts.h:111
 AliConversionMesonCuts.h:112
 AliConversionMesonCuts.h:113
 AliConversionMesonCuts.h:114
 AliConversionMesonCuts.h:115
 AliConversionMesonCuts.h:116
 AliConversionMesonCuts.h:117
 AliConversionMesonCuts.h:118
 AliConversionMesonCuts.h:119
 AliConversionMesonCuts.h:120
 AliConversionMesonCuts.h:121
 AliConversionMesonCuts.h:122
 AliConversionMesonCuts.h:123
 AliConversionMesonCuts.h:124
 AliConversionMesonCuts.h:125
 AliConversionMesonCuts.h:126
 AliConversionMesonCuts.h:127
 AliConversionMesonCuts.h:128
 AliConversionMesonCuts.h:129
 AliConversionMesonCuts.h:130
 AliConversionMesonCuts.h:131
 AliConversionMesonCuts.h:132
 AliConversionMesonCuts.h:133
 AliConversionMesonCuts.h:134
 AliConversionMesonCuts.h:135
 AliConversionMesonCuts.h:136
 AliConversionMesonCuts.h:137
 AliConversionMesonCuts.h:138
 AliConversionMesonCuts.h:139
 AliConversionMesonCuts.h:140
 AliConversionMesonCuts.h:141
 AliConversionMesonCuts.h:142
 AliConversionMesonCuts.h:143
 AliConversionMesonCuts.h:144
 AliConversionMesonCuts.h:145
 AliConversionMesonCuts.h:146
 AliConversionMesonCuts.h:147
 AliConversionMesonCuts.h:148
 AliConversionMesonCuts.h:149
 AliConversionMesonCuts.h:150
 AliConversionMesonCuts.h:151
 AliConversionMesonCuts.h:152
 AliConversionMesonCuts.h:153
 AliConversionMesonCuts.h:154
 AliConversionMesonCuts.h:155
 AliConversionMesonCuts.h:156
 AliConversionMesonCuts.h:157
 AliConversionMesonCuts.h:158
 AliConversionMesonCuts.h:159
 AliConversionMesonCuts.h:160
 AliConversionMesonCuts.h:161
 AliConversionMesonCuts.h:162
 AliConversionMesonCuts.h:163
 AliConversionMesonCuts.h:164
 AliConversionMesonCuts.h:165
 AliConversionMesonCuts.h:166
 AliConversionMesonCuts.h:167
 AliConversionMesonCuts.h:168
 AliConversionMesonCuts.h:169
 AliConversionMesonCuts.h:170
 AliConversionMesonCuts.h:171
 AliConversionMesonCuts.h:172
 AliConversionMesonCuts.h:173
 AliConversionMesonCuts.h:174
 AliConversionMesonCuts.h:175
 AliConversionMesonCuts.h:176
 AliConversionMesonCuts.h:177
 AliConversionMesonCuts.h:178
 AliConversionMesonCuts.h:179
 AliConversionMesonCuts.h:180
 AliConversionMesonCuts.h:181
 AliConversionMesonCuts.h:182
 AliConversionMesonCuts.h:183
 AliConversionMesonCuts.h:184
 AliConversionMesonCuts.h:185