]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/GammaConv/AliAnalysisTaskGammaConversion.h
Coverity fixes (Laurent, Ivana)
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliAnalysisTaskGammaConversion.h
CommitLineData
d7d7e825 1#ifndef ALIANALYSISTASKGAMMACONVERSION_H
2#define ALIANALYSISTASKGAMMACONVERSION_H
a0b94e5c 3
d7d7e825 4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7////////////////////////////////////////////////
8//---------------------------------------------
9// Class used to do analysis on conversion pairs
10//---------------------------------------------
11////////////////////////////////////////////////
a0b94e5c 12
d7d7e825 13#include "AliAnalysisTaskSE.h"
14#include <vector>
15#include "AliV0Reader.h"
5ce758b0 16#include "AliGammaConversionBGHandler.h"
77ac6f3e 17//#include "TRandom3.h"
4a6157dc 18//#include "AliCFManager.h" // for CF
19//#include "AliCFContainer.h" // for CF
d7d7e825 20
6441e967 21
22class AliAODPWG4Particle;
4a6157dc 23class AliGammaConversionAODObject;
6441e967 24class AliAODConversionParticle;
d7d7e825 25class TNtuple;
26class AliGammaConversionHistograms;
27class AliESDv0;
9c1cb6f7 28class AliV0;
d7d7e825 29class AliKFParticle;
9c1cb6f7 30class AliKFVertex;
d7d7e825 31class AliESDInputHandler;
32class AliESDEvent;
33class AliAODEvent;
a0b94e5c 34class AliMCEvent;
d7d7e825 35class TList;
36class AliStack;
37class AliESDtrackCuts;
18a1e325 38class AliTriggerAnalysis;
a0b94e5c 39class AliCFManager; // for CF
40class AliCFContainer; // for CF
77ac6f3e 41class TRandom3;
d7d7e825 42
43class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
44{
a0b94e5c 45
d7d7e825 46 public:
3c45d101 47 typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t;
d7d7e825 48 AliAnalysisTaskGammaConversion();
49 AliAnalysisTaskGammaConversion(const char* name);
50 virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
a0b94e5c 51
d7d7e825 52 // Implementation of interface methods
53 virtual void UserCreateOutputObjects();
54 virtual void Init();
55 virtual void LocalInit() {Init();}
c00009fb 56 virtual void UserExec(Option_t *option);
d7d7e825 57 virtual void Terminate(Option_t *option);
48682642 58 //virtual void ConnectInputData(Option_t * option);
77ac6f3e 59 void CheckMesonProcessTypeEventQuality(Int_t evtQ);
60 Int_t GetProcessType(const AliMCEvent * mcEvt) ;
d7d7e825 61 void ProcessMCData();
62 void ProcessV0sNoCut();
63 void ProcessV0s();
64 void ProcessGammasForNeutralMesonAnalysis();
6272370b 65 void ProcessGammasForOmegaMesonAnalysis();
77ac6f3e 66 // void ProcessConvPHOSGammasForNeutralMesonAnalysis();
9c1cb6f7 67 void RecalculateV0ForGamma();
a0b94e5c 68 // for CF
4a6157dc 69 void SetCFManager(AliCFManager * const io) {fCFManager = io;};
a0b94e5c 70 AliCFManager *GetCFManager() const {return fCFManager;}
71
72
d7d7e825 73 // AOD
74 TString GetAODBranchName() const {return fAODBranchName;}
75 void SetAODBranchName(TString name) {fAODBranchName = name ;}
d765d400 76 void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
d7d7e825 77 void FillAODWithConversionGammas();
6441e967 78 void AddToAODBranch(TClonesArray * branch, AliAODPWG4Particle & particle);
79 void AddToAODBranch(TClonesArray * branch, AliGammaConversionAODObject & particle);
80 void AddToAODBranch(TClonesArray * branch, AliAODConversionParticle & particle);
81
82 virtual TString GetOutputAODClassName() const {return fOutputAODClassName;}
83 virtual void SetOutputAODClassName(TString name) {fOutputAODClassName = name; }
84
d7d7e825 85 // end AOD
a0b94e5c 86
77ac6f3e 87 static Bool_t IsGoodImpPar(const AliESDtrack *const track);
6272370b 88
a0b94e5c 89 // for GammaJetAnalysis
d7d7e825 90 void ProcessGammasForGammaJetAnalysis();
91 void CreateListOfChargedParticles();
6c84d371 92 Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
93 void CalculateJetCone(Int_t gammaIndex);
d7d7e825 94 Int_t GetIndexHighestPtGamma();
95 void SetESDtrackCuts();
96 // end of Gamma Jet
a0b94e5c 97
d7d7e825 98 void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
99 void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
100 void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
101 void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
102 void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
9640a3d1 103
104 void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
105 void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
106
a0b94e5c 107
d7d7e825 108 void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
b5832f95 109 void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
d7d7e825 110 void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
111 void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
6272370b 112 void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
037dc2db 113 void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
d7d7e825 114 void SetDoJet(Bool_t flag){fDoJet=flag;}
115 void SetDoChic(Bool_t flag){fDoChic=flag;}
9c1cb6f7 116 void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}
117
d7d7e825 118 void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
119 void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
120 void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
121 void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
122 void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
123 void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
124 void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
125 void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
037dc2db 126 void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
d7d7e825 127 void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
128 void CalculateBackground();
129 void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
130 void FillNtuple();
77ac6f3e 131 Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
d7d7e825 132 void CheckV0Efficiency();
332f1f44 133 void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
63477d82 134 void SetCreateAOD(Bool_t doAod) { fKFCreateAOD = doAod; };
135 TString GetDeltaAODFileName() const { return fKFDeltaAODFileName; };
d7d7e825 136 //////////////////Chi_c Analysis////////////////////////////
77ac6f3e 137 void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);
138 double GetSigmaToVertex(const AliESDtrack* t);
6c84d371 139 void ElectronBackground(TString hBg, TClonesArray e);
140 void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
141 void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
142 void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
143 void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
144 TClonesArray GetTLorentzVector(TClonesArray* esdTrack);
d7d7e825 145 void ProcessGammaElectronsForChicAnalysis();
146 ///////////////////////////////////////////////////////////////
1e7846f4 147
148 void SetDoCF(Bool_t flag){fDoCF = flag;}
5ce758b0 149
150 void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}
151
152 void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
153
77ac6f3e 154 void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
5ce758b0 155
2e2da371 156 void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
157
111d75df 158 void SetDoRotation(Bool_t flag){fDoRotation = flag;}
159
77ac6f3e 160 void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
111d75df 161
77ac6f3e 162 void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
111d75df 163
164 void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
165
166 void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
167
2f426a53 168 void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
169
18a1e325 170 void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
6746e1e1 171 void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
172 void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
173 Int_t CalculateMultiplicityBin();
64f4118c 174 void SetUseCentrality(Int_t useCentrality) {fUseCentrality=useCentrality;}
175 void SetUseCentralityBin(Int_t useCentralityBin) {fUseCentralityBin=useCentralityBin;}
176
177
178
179
d7d7e825 180 private:
181 AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
182 AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
04bf4381 183
184 /// Add reconstructed pions to aod
22eae5f9 185 void AddPionToAOD(AliKFParticle * pionkf, Double_t mass, Int_t daughter1, Int_t daughter2);
77ac6f3e 186 void AddOmegaToAOD(const AliKFParticle * const omegakf, Double_t mass, Int_t daughter1, Int_t daughter2);
a0b94e5c 187
4a6157dc 188 // for CF
189 enum{
190 kStepGenerated = 0,
191 kStepReconstructable = 1,
ebcfaa7e 192 kStepGetOnFly = 2,
193 kStepLikeSign = 3,
194 kStepTPCRefit = 4,
195 kStepKinks = 5,
77ac6f3e 196 kStepdEdxElectronSelection = 6,
197 kStepdEdxPpionRejection = 7,
ebcfaa7e 198 kStepNContributors = 8,
199 kStepTPCPID = 9,
200 kStepR = 10,
201 kStepLine = 11,
202 kStepZ = 12,
48682642 203 kStepMinClsTPC = 13,
204 kStepSinglePt = 14,
205 kStepNDF = 15,
206 kStepChi2 = 16,
207 kStepEta = 17,
208 kStepPt = 18,
209 kStepTrueGamma = 19
4a6157dc 210 };
26923b22 211
d7d7e825 212 AliV0Reader* fV0Reader; // The V0 reader object
a0b94e5c 213
d7d7e825 214 AliStack * fStack; // pointer to the MC particle stack
a0b94e5c 215 AliMCEventHandler *fMCTruth; // for CF pointer to MCTruth
4a6157dc 216 AliMCEvent *fGCMCEvent; // for CF pointer to the MC Event
d7d7e825 217 AliESDEvent* fESDEvent; //pointer to the ESDEvent
a0b94e5c 218 TList * fOutputContainer; // Histogram container
219 AliCFManager *fCFManager; // for CF
220 // AliCFContainer *container; // for CF
d7d7e825 221
a0b94e5c 222
223
d7d7e825 224 AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
b5832f95 225 Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
d7d7e825 226 Bool_t fDoMCTruth; // Flag to switch on/off MC truth
6c84d371 227 Bool_t fDoNeutralMeson; // flag
6272370b 228 Bool_t fDoOmegaMeson; // flag
6c84d371 229 Bool_t fDoJet; // flag
230 Bool_t fDoChic; // flag
9c1cb6f7 231 Bool_t fRecalculateV0ForGamma;//flag
a0b94e5c 232
6c84d371 233 TClonesArray * fKFReconstructedGammasTClone; //! transient
6272370b 234 TClonesArray * fKFReconstructedPi0sTClone; //! transient
9c1cb6f7 235 TClonesArray * fKFRecalculatedGammasTClone; //! transient
6c84d371 236 TClonesArray * fCurrentEventPosElectronTClone; //! transient
237 TClonesArray * fCurrentEventNegElectronTClone; //! transient
238 TClonesArray * fKFReconstructedGammasCutTClone; //! transient
239 TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
240 TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
a0b94e5c 241
6c84d371 242 // vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
d7d7e825 243 vector<Int_t> fElectronv1; // vector containing index of electron 1
244 vector<Int_t> fElectronv2; // vector containing index of electron 2
a0b94e5c 245
6272370b 246 vector<Int_t> fGammav1; // vector containing index of gamma 1
247 vector<Int_t> fGammav2; // vector containing index of gamma 2
9c1cb6f7 248
249 vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
250 vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
6272370b 251
9c1cb6f7 252 // AliESDpid * fESDpid; // esd pid
6272370b 253
254
d7d7e825 255 ///////Chi_c Analysis///////////////////////////
6c84d371 256 // vector<AliESDtrack*> fCurrentEventPosElectron; // comment here
257 // vector<AliESDtrack*> fCurrentEventNegElectron; // comment here
258 // vector<AliKFParticle> fKFReconstructedGammasCut; // comment here
259 // vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
260 // vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
d7d7e825 261 //////////////////////////////////////////////////
a0b94e5c 262
d7d7e825 263 //mass defines
264 Double_t fElectronMass; //electron mass
265 Double_t fGammaMass; //gamma mass
266 Double_t fPi0Mass; //pi0mass
267 Double_t fEtaMass; //eta mass
a0b94e5c 268
d7d7e825 269 // width defines
270 Double_t fGammaWidth; //gamma width cut
271 Double_t fPi0Width; // pi0 width cut
272 Double_t fEtaWidth; // eta width cut
a0b94e5c 273
d7d7e825 274 Double_t fMinOpeningAngleGhostCut; // minimum angle cut
a0b94e5c 275
d7d7e825 276 AliESDtrackCuts* fEsdTrackCuts; // Object containing the parameters of the esd track cuts
a0b94e5c 277
d7d7e825 278 Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
279 Bool_t fWriteNtuple; // flag to set if writing to ntuple on/off
280 TNtuple *fGammaNtuple; // Ntuple for gamma values
281 TNtuple *fNeutralMesonNtuple;// NTuple for mesons
a0b94e5c 282
d7d7e825 283 Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
a0b94e5c 284
6c84d371 285 TClonesArray* fChargedParticles; //! transient
286 vector<Int_t> fChargedParticlesId; //! transient
a0b94e5c 287
6c84d371 288 Double_t fGammaPtHighest; //! transient
289 Double_t fMinPtForGammaJet; //! transient
290 Double_t fMinIsoConeSize; //! transient
291 Double_t fMinPtIsoCone; //! transient
292 Double_t fMinPtGamChargedCorr; //! transient
293 Double_t fMinPtJetCone; //! transient
294 Int_t fLeadingChargedIndex; //! transient
1e7846f4 295 Double_t fLowPtMapping; //! transient
296 Double_t fHighPtMapping; //! transient
297 Bool_t fDoCF; //! transient
a0b94e5c 298
04bf4381 299 TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
300 TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
301 TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
d7d7e825 302 TString fAODBranchName; // New AOD branch name
6441e967 303 TString fOutputAODClassName; //Class to use for the AOD
63477d82 304 Bool_t fKFCreateAOD; //Create the AOD tclones? (regardless if storing or not)
6441e967 305
d765d400 306 Bool_t fKFForceAOD; //Set the Analysis Manager FillAOD variable to true every event
332f1f44 307 TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
037dc2db 308 Bool_t fDoNeutralMesonV0MCCheck; //flag
77ac6f3e 309 Bool_t fUseTrackMultiplicityForBG; //flag
310 Bool_t fMoveParticleAccordingToVertex; //flag
311 Bool_t fApplyChi2Cut; //flag
312 Int_t fNRandomEventsForBG; //number of random events to use in rotation method
313 Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
314 Bool_t fDoRotation; //flag
315 Bool_t fCheckBGProbability; //flag
037dc2db 316 vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
2f426a53 317 Bool_t fRemovePileUp; // Remove Pile Up
18a1e325 318 Bool_t fSelectV0AND; // Select V0AND
319 AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
6746e1e1 320 Int_t fMultiplicity;
321 Int_t fUseMultiplicity;
322 Int_t fUseMultiplicityBin;
64f4118c 323 Int_t fUseCentrality;
324 Int_t fUseCentralityBin;
63477d82 325 ClassDef(AliAnalysisTaskGammaConversion, 17); // Analysis task for gamma conversions
d7d7e825 326};
a0b94e5c 327
d7d7e825 328#endif //ALIANALYSISTASKGAMMA_H