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"
19 #include "TTreeStream.h"
20 #include "AliMultiplicity.h"
21 //#include "AliCFManager.h" // for CF
22 //#include "AliCFContainer.h" // for CF
23 #include "AliAODConversionMother.h"
26 class AliAODPWG4Particle;
27 class AliAODConversionPhoton;
28 class AliAODConversionMother;
29 class AliKFConversionPhoton;
30 class AliKFConversionMother;
32 class AliGammaConversionHistograms;
37 class AliESDInputHandler;
43 class AliESDtrackCuts;
44 class AliTriggerAnalysis;
45 class AliCFManager; // for CF
46 class AliCFContainer; // for CF
50 class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
54 typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t;
55 AliAnalysisTaskGammaConversion();
56 AliAnalysisTaskGammaConversion(const char* name);
57 virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
59 // Implementation of interface methods
60 virtual void UserCreateOutputObjects();
62 virtual void LocalInit() {Init();}
63 virtual void UserExec(Option_t *option);
64 virtual void Terminate(Option_t *option);
65 //virtual void ConnectInputData(Option_t * option);
66 void CheckMesonProcessTypeEventQuality(Int_t evtQ);
67 Int_t GetProcessType(const AliMCEvent * mcEvt) ;
69 void ProcessV0sNoCut();
71 void ProcessGammasForNeutralMesonAnalysis();
72 void ProcessGammasForOmegaMesonAnalysis();
73 Bool_t DoEventSelection();
74 // void ProcessConvPHOSGammasForNeutralMesonAnalysis();
75 // void RecalculateV0ForGamma();
77 void SetCFManager(AliCFManager * const io) {fCFManager = io;};
78 AliCFManager *GetCFManager() const {return fCFManager;}
82 TString GetAODBranchName() const {return fAODBranchName;}
83 void SetAODBranchName(TString name) {fAODBranchName = name ;}
84 void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
85 void FillAODWithConversionGammas();
86 void AddGammaToAOD(AliKFConversionPhoton * kfParticle);
88 // void AddPionToAOD(AliKFConversionMother * kfParticle);
89 // void AddOmegaToAOD(AliKFParticle * kfParticle, Int_t daughter1, Int_t daughter2);
90 void TagDaughter(Int_t gammaIndex);
94 static Bool_t IsGoodImpPar(const AliESDtrack *const track);
96 // for GammaJetAnalysis
97 void ProcessGammasForGammaJetAnalysis();
98 void CreateListOfChargedParticles();
99 Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
100 void CalculateJetCone(Int_t gammaIndex);
101 Int_t GetIndexHighestPtGamma();
102 void SetESDtrackCuts();
105 void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
106 void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
107 void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
108 void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
109 void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
111 void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
112 void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
115 void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
116 void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
117 void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
118 void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
119 void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
120 void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
121 void SetDoJet(Bool_t flag){fDoJet=flag;}
122 void SetDoChic(Bool_t flag){fDoChic=flag;}
123 void SetDoHadInt(Bool_t flag){fDoHadInt=flag;}
124 void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}
126 void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
127 void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
128 void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
129 void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
130 void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
131 void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
132 void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
133 void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
134 void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
135 void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
136 void CalculateBackground();
137 void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
139 Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
140 void CheckV0Efficiency();
141 void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
142 void SetCreateAOD(Bool_t doAod) { fKFCreateAOD = doAod; };
143 void SetExchangeAOD(Bool_t xchAOD) { fKFExchangeAOD = xchAOD; };
144 TString GetDeltaAODFileName() const { return fKFDeltaAODFileName; };
145 //////////////////Chi_c Analysis////////////////////////////
146 void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);
147 double GetSigmaToVertex(const AliESDtrack* t);
148 void ElectronBackground(TString hBg, TClonesArray e);
149 void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
150 void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
151 void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
152 void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
153 TClonesArray GetTLorentzVector(TClonesArray* esdTrack);
154 void ProcessGammaElectronsForChicAnalysis();
155 void ProcessHadronicInteraction(AliESDEvent *event);
156 Bool_t CheckLooper(Int_t index, AliESDEvent *event);
157 Bool_t CheckV0(Int_t index, AliESDEvent *event);
158 ///////////////////////////////////////////////////////////////
160 void SetDoCF(Bool_t flag){fDoCF = flag;}
162 void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}
164 void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
166 void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
168 void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
170 void SetDoRotation(Bool_t flag){fDoRotation = flag;}
172 void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
174 void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
176 void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
178 void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
180 void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
182 void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
183 void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
184 void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
185 void SetUseHBTMultiplicity(Int_t useHBTMultiplicity) {fUseHBTMultiplicity=useHBTMultiplicity;}
186 void SetUseHBTMultiplicityBin(Int_t useHBTMultiplicityBin) {fUseHBTMultiplicityBin=useHBTMultiplicityBin;}
188 Int_t CalculateMultiplicityBin();
189 void SetUseCentrality(Int_t useCentrality) {fUseCentrality=useCentrality;}
190 void SetUseCentralityBin(Int_t useCentralityBin) {fUseCentralityBin=useCentralityBin;}
192 void SetMaxChi2HadIntCut(Float_t chi2HadInt){fMaxChi2HadInt = chi2HadInt; }
193 void SetMaxErr2DHadIntCut(Float_t err2DHadInt){fMaxErr2DHadInt =err2DHadInt ;}
194 void SetMinPtHadIntCut(Float_t ptMinHadInt){fPtMinHadInt =ptMinHadInt ;}
200 AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
201 AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
203 TTreeSRedirector *fpcstream;
208 kStepReconstructable = 1,
213 kStepdEdxElectronSelection = 6,
214 kStepdEdxPpionRejection = 7,
215 kStepNContributors = 8,
229 AliV0Reader* fV0Reader; // The V0 reader object
231 AliStack * fStack; // pointer to the MC particle stack
232 AliMCEventHandler *fMCTruth; // for CF pointer to MCTruth
233 AliMCEvent *fGCMCEvent; // for CF pointer to the MC Event
234 AliESDEvent* fESDEvent; //pointer to the ESDEvent
235 TList * fOutputContainer; // Histogram container
236 AliCFManager *fCFManager; // for CF
237 // AliCFContainer *container; // for CF
241 AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
242 Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
243 Bool_t fDoMCTruth; // Flag to switch on/off MC truth
244 Bool_t fDoNeutralMeson; // flag
245 Bool_t fDoOmegaMeson; // flag
246 Bool_t fDoJet; // flag
247 Bool_t fDoChic; // flag
248 Bool_t fDoHadInt; // flag
250 Bool_t fRecalculateV0ForGamma;//flag
252 TClonesArray * fKFReconstructedGammasTClone; //! transient
253 TClonesArray * fKFReconstructedPi0sTClone; //! transient
254 TClonesArray * fKFRecalculatedGammasTClone; //! transient
255 TClonesArray * fCurrentEventPosElectronTClone; //! transient
256 TClonesArray * fCurrentEventNegElectronTClone; //! transient
257 TClonesArray * fKFReconstructedGammasCutTClone; //! transient
258 TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
259 TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
261 // vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
263 // AliESDpid * fESDpid; // esd pid
266 ///////Chi_c Analysis///////////////////////////
267 // vector<AliESDtrack*> fCurrentEventPosElectron; // comment here
268 // vector<AliESDtrack*> fCurrentEventNegElectron; // comment here
269 // vector<AliKFParticle> fKFReconstructedGammasCut; // comment here
270 // vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
271 // vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
272 //////////////////////////////////////////////////
275 Double_t fElectronMass; //electron mass
276 Double_t fGammaMass; //gamma mass
277 Double_t fPi0Mass; //pi0mass
278 Double_t fEtaMass; //eta mass
281 Double_t fGammaWidth; //gamma width cut
282 Double_t fPi0Width; // pi0 width cut
283 Double_t fEtaWidth; // eta width cut
285 Double_t fMinOpeningAngleGhostCut; // minimum angle cut
287 AliESDtrackCuts* fEsdTrackCuts; // Object containing the parameters of the esd track cuts
289 Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
290 Bool_t fWriteNtuple; // flag to set if writing to ntuple on/off
291 TNtuple *fGammaNtuple; // Ntuple for gamma values
292 TNtuple *fNeutralMesonNtuple;// NTuple for mesons
294 Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
296 TClonesArray* fChargedParticles; //! transient
297 vector<Int_t> fChargedParticlesId; //! transient
299 Double_t fGammaPtHighest; //! transient
300 Double_t fMinPtForGammaJet; //! transient
301 Double_t fMinIsoConeSize; //! transient
302 Double_t fMinPtIsoCone; //! transient
303 Double_t fMinPtGamChargedCorr; //! transient
304 Double_t fMinPtJetCone; //! transient
305 Int_t fLeadingChargedIndex; //! transient
306 Double_t fLowPtMapping; //! transient
307 Double_t fHighPtMapping; //! transient
308 Bool_t fDoCF; //! transient
310 TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
311 //TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
312 //TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
313 TString fAODBranchName; // New AOD branch name
314 Bool_t fKFCreateAOD; //Create the AOD tclones? (regardless if storing or not)
315 Bool_t fKFExchangeAOD; //Create the AOD tclones? (regardless if storing or not)
316 Bool_t fKFForceAOD; //Set the Analysis Manager FillAOD variable to true every event
317 TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
318 Bool_t fDoNeutralMesonV0MCCheck; //flag
319 Bool_t fUseTrackMultiplicityForBG; //flag
320 Bool_t fMoveParticleAccordingToVertex; //flag
321 Bool_t fApplyChi2Cut; //flag
322 Int_t fNRandomEventsForBG; //number of random events to use in rotation method
323 Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
324 Bool_t fDoRotation; //flag
325 Bool_t fCheckBGProbability; //flag
326 // vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
327 Bool_t fRemovePileUp; // Remove Pile Up
328 Bool_t fSelectV0AND; // Select V0AND
329 AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
331 Int_t fUseMultiplicity;
332 Int_t fUseMultiplicityBin;
333 Int_t fUseHBTMultiplicity;
334 Int_t fUseHBTMultiplicityBin;
335 Int_t fUseCentrality;
336 Int_t fUseCentralityBin;
338 Float_t fMaxChi2HadInt;
339 Float_t fMaxErr2DHadInt;
340 Float_t fPtMinHadInt;
342 ClassDef(AliAnalysisTaskGammaConversion, 22); // Analysis task for gamma conversions
345 #endif //ALIANALYSISTASKGAMMA_H