1 #ifndef ALIANALYSISTASKGAMMACONVERSION_H
2 #define ALIANALYSISTASKGAMMACONVERSION_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 ////////////////////////////////////////////////
8 //---------------------------------------------
9 // Class used to do analysis on conversion pairs
10 //---------------------------------------------
11 ////////////////////////////////////////////////
13 #include "AliAnalysisTaskSE.h"
15 #include "AliV0Reader.h"
16 #include "AliGammaConversionBGHandler.h"
17 //#include "TRandom3.h"
18 //#include "AliCFManager.h" // for CF
19 //#include "AliCFContainer.h" // for CF
21 class AliGammaConversionAODObject;
23 class AliGammaConversionHistograms;
28 class AliESDInputHandler;
34 class AliESDtrackCuts;
35 class AliTriggerAnalysis;
36 class AliCFManager; // for CF
37 class AliCFContainer; // for CF
40 class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
44 typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t;
45 AliAnalysisTaskGammaConversion();
46 AliAnalysisTaskGammaConversion(const char* name);
47 virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
49 // Implementation of interface methods
50 virtual void UserCreateOutputObjects();
52 virtual void LocalInit() {Init();}
53 virtual void UserExec(Option_t *option);
54 virtual void Terminate(Option_t *option);
55 //virtual void ConnectInputData(Option_t * option);
56 void CheckMesonProcessTypeEventQuality(Int_t evtQ);
57 Int_t GetProcessType(const AliMCEvent * mcEvt) ;
59 void ProcessV0sNoCut();
61 void ProcessGammasForNeutralMesonAnalysis();
62 void ProcessGammasForOmegaMesonAnalysis();
63 // void ProcessConvPHOSGammasForNeutralMesonAnalysis();
64 void RecalculateV0ForGamma();
66 void SetCFManager(AliCFManager * const io) {fCFManager = io;};
67 AliCFManager *GetCFManager() const {return fCFManager;}
71 TString GetAODBranchName() const {return fAODBranchName;}
72 void SetAODBranchName(TString name) {fAODBranchName = name ;}
73 void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
74 void FillAODWithConversionGammas();
77 static Bool_t IsGoodImpPar(const AliESDtrack *const track);
79 // for GammaJetAnalysis
80 void ProcessGammasForGammaJetAnalysis();
81 void CreateListOfChargedParticles();
82 Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
83 void CalculateJetCone(Int_t gammaIndex);
84 Int_t GetIndexHighestPtGamma();
85 void SetESDtrackCuts();
88 void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
89 void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
90 void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
91 void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
92 void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
94 void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
95 void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
98 void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
99 void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
100 void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
101 void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
102 void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
103 void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
104 void SetDoJet(Bool_t flag){fDoJet=flag;}
105 void SetDoChic(Bool_t flag){fDoChic=flag;}
106 void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}
108 void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
109 void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
110 void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
111 void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
112 void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
113 void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
114 void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
115 void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
116 void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
117 void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
118 void CalculateBackground();
119 void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
121 Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
122 void CheckV0Efficiency();
123 void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
125 //////////////////Chi_c Analysis////////////////////////////
126 void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);
127 double GetSigmaToVertex(const AliESDtrack* t);
128 void ElectronBackground(TString hBg, TClonesArray e);
129 void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
130 void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
131 void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
132 void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
133 TClonesArray GetTLorentzVector(TClonesArray* esdTrack);
134 void ProcessGammaElectronsForChicAnalysis();
135 ///////////////////////////////////////////////////////////////
137 void SetDoCF(Bool_t flag){fDoCF = flag;}
139 void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}
141 void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
143 void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
145 void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
147 void SetDoRotation(Bool_t flag){fDoRotation = flag;}
149 void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
151 void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
153 void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
155 void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
157 void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
159 void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
162 AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
163 AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
165 /// Add reconstructed pions to aod
166 void AddPionToAOD(const AliKFParticle * const pionkf, Double_t mass, Int_t daughter1, Int_t daughter2);
167 void AddOmegaToAOD(const AliKFParticle * const omegakf, Double_t mass, Int_t daughter1, Int_t daughter2);
172 kStepReconstructable = 1,
177 kStepdEdxElectronSelection = 6,
178 kStepdEdxPpionRejection = 7,
179 kStepNContributors = 8,
193 AliV0Reader* fV0Reader; // The V0 reader object
195 AliStack * fStack; // pointer to the MC particle stack
196 AliMCEventHandler *fMCTruth; // for CF pointer to MCTruth
197 AliMCEvent *fGCMCEvent; // for CF pointer to the MC Event
198 AliESDEvent* fESDEvent; //pointer to the ESDEvent
199 TList * fOutputContainer; // Histogram container
200 AliCFManager *fCFManager; // for CF
201 // AliCFContainer *container; // for CF
205 AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
206 Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
207 Bool_t fDoMCTruth; // Flag to switch on/off MC truth
208 Bool_t fDoNeutralMeson; // flag
209 Bool_t fDoOmegaMeson; // flag
210 Bool_t fDoJet; // flag
211 Bool_t fDoChic; // flag
212 Bool_t fRecalculateV0ForGamma;//flag
214 TClonesArray * fKFReconstructedGammasTClone; //! transient
215 TClonesArray * fKFReconstructedPi0sTClone; //! transient
216 TClonesArray * fKFRecalculatedGammasTClone; //! transient
217 TClonesArray * fCurrentEventPosElectronTClone; //! transient
218 TClonesArray * fCurrentEventNegElectronTClone; //! transient
219 TClonesArray * fKFReconstructedGammasCutTClone; //! transient
220 TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
221 TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
223 // vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
224 vector<Int_t> fElectronv1; // vector containing index of electron 1
225 vector<Int_t> fElectronv2; // vector containing index of electron 2
227 vector<Int_t> fGammav1; // vector containing index of gamma 1
228 vector<Int_t> fGammav2; // vector containing index of gamma 2
230 vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
231 vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
233 // AliESDpid * fESDpid; // esd pid
236 ///////Chi_c Analysis///////////////////////////
237 // vector<AliESDtrack*> fCurrentEventPosElectron; // comment here
238 // vector<AliESDtrack*> fCurrentEventNegElectron; // comment here
239 // vector<AliKFParticle> fKFReconstructedGammasCut; // comment here
240 // vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
241 // vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
242 //////////////////////////////////////////////////
245 Double_t fElectronMass; //electron mass
246 Double_t fGammaMass; //gamma mass
247 Double_t fPi0Mass; //pi0mass
248 Double_t fEtaMass; //eta mass
251 Double_t fGammaWidth; //gamma width cut
252 Double_t fPi0Width; // pi0 width cut
253 Double_t fEtaWidth; // eta width cut
255 Double_t fMinOpeningAngleGhostCut; // minimum angle cut
257 AliESDtrackCuts* fEsdTrackCuts; // Object containing the parameters of the esd track cuts
259 Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
260 Bool_t fWriteNtuple; // flag to set if writing to ntuple on/off
261 TNtuple *fGammaNtuple; // Ntuple for gamma values
262 TNtuple *fNeutralMesonNtuple;// NTuple for mesons
264 Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
266 TClonesArray* fChargedParticles; //! transient
267 vector<Int_t> fChargedParticlesId; //! transient
269 Double_t fGammaPtHighest; //! transient
270 Double_t fMinPtForGammaJet; //! transient
271 Double_t fMinIsoConeSize; //! transient
272 Double_t fMinPtIsoCone; //! transient
273 Double_t fMinPtGamChargedCorr; //! transient
274 Double_t fMinPtJetCone; //! transient
275 Int_t fLeadingChargedIndex; //! transient
276 Double_t fLowPtMapping; //! transient
277 Double_t fHighPtMapping; //! transient
278 Bool_t fDoCF; //! transient
280 TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
281 TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
282 TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
283 TString fAODBranchName; // New AOD branch name
284 Bool_t fKFForceAOD; //Set the Analysis Manager FillAOD variable to true every event
285 TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
286 Bool_t fDoNeutralMesonV0MCCheck; //flag
287 Bool_t fUseTrackMultiplicityForBG; //flag
288 Bool_t fMoveParticleAccordingToVertex; //flag
289 Bool_t fApplyChi2Cut; //flag
290 Int_t fNRandomEventsForBG; //number of random events to use in rotation method
291 Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
292 Bool_t fDoRotation; //flag
293 Bool_t fCheckBGProbability; //flag
294 vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
295 Bool_t fRemovePileUp; // Remove Pile Up
296 Bool_t fSelectV0AND; // Select V0AND
297 AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
298 ClassDef(AliAnalysisTaskGammaConversion, 14); // Analysis task for gamma conversions
301 #endif //ALIANALYSISTASKGAMMA_H