]>
Commit | Line | Data |
---|---|---|
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 | |
22 | class AliAODPWG4Particle; | |
4a6157dc | 23 | class AliGammaConversionAODObject; |
6441e967 | 24 | class AliAODConversionParticle; |
d7d7e825 | 25 | class TNtuple; |
26 | class AliGammaConversionHistograms; | |
27 | class AliESDv0; | |
9c1cb6f7 | 28 | class AliV0; |
d7d7e825 | 29 | class AliKFParticle; |
9c1cb6f7 | 30 | class AliKFVertex; |
d7d7e825 | 31 | class AliESDInputHandler; |
32 | class AliESDEvent; | |
33 | class AliAODEvent; | |
a0b94e5c | 34 | class AliMCEvent; |
d7d7e825 | 35 | class TList; |
36 | class AliStack; | |
37 | class AliESDtrackCuts; | |
18a1e325 | 38 | class AliTriggerAnalysis; |
a0b94e5c | 39 | class AliCFManager; // for CF |
40 | class AliCFContainer; // for CF | |
77ac6f3e | 41 | class TRandom3; |
d7d7e825 | 42 | |
43 | class 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 |