]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/UserTasks/AliAnalysisTaskJetProtonCorr.h
- allow for hybrid track cuts - include third order evplane - update histogram titles
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskJetProtonCorr.h
CommitLineData
23536a91 1#include "TH1.h"
2#include "TH2.h"
3#include "TH3.h"
4
5#include "AliLog.h"
6
7#include "AliAnalysisTaskSE.h"
a4c7ef28 8#include "AliESDtrackCuts.h"
23536a91 9
10#define ID(x) x, #x
11#define LAB(x) x + 1, #x
12
ebdf1dbb 13class TF1;
23536a91 14class TList;
15class TClonesArray;
ebdf1dbb 16class AliOADBContainer;
17class AliTOFPIDParams;
23536a91 18class AliVParticle;
19class AliVTrack;
20class AliPIDResponse;
21class AliEventPoolManager;
22class AliEventPool;
ebdf1dbb 23class AliEventplane;
23536a91 24
25class AliAnalysisTaskJetProtonCorr :
26 public AliAnalysisTaskSE
27{
28public:
29 AliAnalysisTaskJetProtonCorr(const char *name = "jets_trg_trd");
30 ~AliAnalysisTaskJetProtonCorr();
31
32 // analysis operations
33 virtual void UserCreateOutputObjects();
34 virtual Bool_t Notify();
35 virtual void UserExec(Option_t *option);
36 virtual void Terminate(const Option_t *option);
37
ebdf1dbb 38 void SetParamsTOF();
39
23536a91 40 // task configuration
2751fb9a 41 void SetJetBranchName(const char* const branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
23536a91 42 const char* GetJetBranchName() const { return fJetBranchName; }
43
44 void SetPtThrPart(Float_t minPt, Float_t maxPt) { fTrgPartPtMin = minPt; fTrgPartPtMax = maxPt; }
45 Float_t GetPtMinPart() const { return fTrgPartPtMin; }
46 Float_t GetPtMaxPart() const { return fTrgPartPtMax; }
47 void SetPtThrJet(Float_t minPt, Float_t maxPt) { fTrgJetPtMin = minPt; fTrgJetPtMax = maxPt; }
48 Float_t GetPtMinJet() const { return fTrgJetPtMin; }
49 Float_t GetPtMaxJet() const { return fTrgJetPtMax; }
50 void SetPtThrAss(Float_t minPt, Float_t maxPt) { fAssPartPtMin = minPt; fAssPartPtMax = maxPt; }
51 Float_t GetPtMinAss() const { return fAssPartPtMin; }
52 Float_t GetPtMaxAss() const { return fAssPartPtMax; }
53
a4c7ef28 54 void SetTrackCutsAss(AliESDtrackCuts cuts) { *fCutsPrimAss = cuts; }
55 void SetTrackCutsTrg(AliESDtrackCuts cuts) { *fCutsPrimTrg = cuts; }
56 void SetTrackCutsTrgConstrain(AliESDtrackCuts cuts) { *fCutsPrimTrgConstrain = cuts; }
57
58 void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
59 Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
60
3082e8ab 61 void PrintTask(Option_t *option, Int_t indent) const;
62
63 static Double_t TOFsignal(Double_t *x, Double_t *par)
64 {
65 Double_t norm = par[0];
66 Double_t mean = par[1];
67 Double_t sigma = par[2];
68 Double_t tail = par[3];
69
70 if (x[0] <= (tail + mean))
71 return norm * TMath::Gaus(x[0], mean, sigma);
72 else
73 return norm * TMath::Gaus(tail + mean, mean, sigma) * TMath::Exp(-tail * (x[0] - tail - mean) / (sigma * sigma));
74 }
75
23536a91 76 // histograms
77 enum Hist_t {
78 kHistStat = 0,
ebdf1dbb 79 kHistVertexNctb,
80 kHistVertexZ,
23536a91 81 kHistCentrality,
82 kHistCentralityUsed,
83 kHistCentralityCheck,
84 kHistCentralityCheckUsed,
ebdf1dbb 85 kHistCentralityVsMult,
3082e8ab 86 kHistSignalTPC,
87 kHistSignalTOF,
88 kHistBetaTOF,
89 kHistDeltaTPC,
90 kHistDeltaTPCSemi,
91 kHistDeltaTOF,
92 kHistDeltaTOFSemi,
ebdf1dbb 93 // kHistExpSigmaTOFe,
94 // kHistExpSigmaTOFmu,
95 // kHistExpSigmaTOFpi,
96 // kHistExpSigmaTOFk,
97 // kHistExpSigmaTOFp,
98 // kHistExpSigmaTOFd,
99 // kHistExpSigmaTOFeSemi,
100 // kHistExpSigmaTOFmuSemi,
101 // kHistExpSigmaTOFpiSemi,
102 // kHistExpSigmaTOFkSemi,
103 // kHistExpSigmaTOFpSemi,
104 // kHistExpSigmaTOFdSemi,
105 // kHistCmpSigmaTOFe,
106 // kHistCmpSigmaTOFmu,
107 // kHistCmpSigmaTOFpi,
108 // kHistCmpSigmaTOFk,
109 // kHistCmpSigmaTOFp,
110 // kHistCmpSigmaTOFd,
111 // kHistCmpSigmaTOFeSemi,
112 // kHistCmpSigmaTOFmuSemi,
113 // kHistCmpSigmaTOFpiSemi,
114 // kHistCmpSigmaTOFkSemi,
115 // kHistCmpSigmaTOFpSemi,
116 // kHistCmpSigmaTOFdSemi,
3082e8ab 117 kHistNsigmaTPCe,
118 kHistNsigmaTPCmu,
119 kHistNsigmaTPCpi,
120 kHistNsigmaTPCk,
121 kHistNsigmaTPCp,
122 kHistNsigmaTPCd,
123 kHistNsigmaTPCe_e,
124 kHistNsigmaTOFe,
125 kHistNsigmaTOFmu,
126 kHistNsigmaTOFpi,
127 kHistNsigmaTOFk,
128 kHistNsigmaTOFp,
129 kHistNsigmaTOFd,
130 kHistNsigmaTOFmismatch,
3082e8ab 131 kHistDeltaTOFe,
132 kHistDeltaTOFmu,
133 kHistDeltaTOFpi,
134 kHistDeltaTOFk,
135 kHistDeltaTOFp,
136 kHistDeltaTOFd,
ebdf1dbb 137
3082e8ab 138 kHistNsigmaTPCeSemi,
139 kHistNsigmaTPCmuSemi,
140 kHistNsigmaTPCpiSemi,
141 kHistNsigmaTPCkSemi,
142 kHistNsigmaTPCpSemi,
143 kHistNsigmaTPCdSemi,
144 kHistNsigmaTPCe_eSemi,
145 kHistNsigmaTOFeSemi,
146 kHistNsigmaTOFmuSemi,
147 kHistNsigmaTOFpiSemi,
148 kHistNsigmaTOFkSemi,
149 kHistNsigmaTOFpSemi,
150 kHistNsigmaTOFdSemi,
151 kHistNsigmaTOFmismatchSemi,
3082e8ab 152 kHistDeltaTOFeSemi,
153 kHistDeltaTOFmuSemi,
154 kHistDeltaTOFpiSemi,
155 kHistDeltaTOFkSemi,
156 kHistDeltaTOFpSemi,
157 kHistDeltaTOFdSemi,
ebdf1dbb 158
23536a91 159 kHistNsigmaTPCTOF,
3082e8ab 160 kHistNsigmaTPCTOFPt,
161 kHistNsigmaTPCTOFUsed,
162 kHistNsigmaTPCTOFUsedCentral,
163 kHistNsigmaTPCTOFUsedSemiCentral,
164 kHistNsigmaTPCTOFUsedPt,
165 kHistNsigmaTPCTOFUsedPtCentral,
166 kHistNsigmaTPCTOFUsedPtSemiCentral,
ebdf1dbb 167
23536a91 168 kHistEvPlane,
169 kHistEvPlaneUsed,
3082e8ab 170 kHistEvPlaneCheck,
171 kHistEvPlaneCheckUsed,
a4c7ef28 172 kHistEvPlane3,
3082e8ab 173 kHistEvPlaneCorr,
ebdf1dbb 174 kHistEvPlaneCorrNoTrgJets,
175 kHistEvPlaneCorrNoTrgJetsTrgd,
3082e8ab 176 kHistJetPtCentral,
177 kHistJetPtSemi,
23536a91 178 kHistEtaPhiTrgHad,
179 kHistEtaPhiTrgJet,
180 kHistEtaPhiAssHad,
181 kHistEtaPhiAssProt,
ebdf1dbb 182 kHistPhiTrgJetEvPlane,
183 kHistPhiTrgHadEvPlane,
184 kHistPhiAssHadEvPlane,
185 kHistPhiAssHadVsEvPlane,
186 kHistPhiAssProtEvPlane,
a4c7ef28 187 kHistPhiTrgJetEvPlane3,
188 kHistPhiTrgHadEvPlane3,
189 kHistPhiAssHadEvPlane3,
190 kHistPhiAssProtEvPlane3,
23536a91 191 kHistLast
192 };
193
194 // statistics
195 enum Stat_t {
196 kStatSeen = 1,
197 kStatTrg,
ebdf1dbb 198 kStatVtx,
23536a91 199 kStatCent,
200 kStatEvPlane,
201 kStatPID,
3082e8ab 202 kStatUsed,
23536a91 203 kStatEvCuts,
3082e8ab 204 kStatCentral,
205 kStatSemiCentral,
23536a91 206 kStatLast
207 };
208
209 // trigger conditions
3082e8ab 210 enum Trigger_t {
23536a91 211 kTriggerMB = 0,
212 kTriggerInt,
213 kTriggerLast
3082e8ab 214 };
23536a91 215
216 // classification
217 enum CorrType_t {
218 kCorrHadHad = 0,
219 kCorrHadProt,
220 kCorrJetHad,
221 kCorrJetProt,
ebdf1dbb 222
223 kCorrRndJetHad,
224 kCorrRndJetProt,
225 kCorrRndHadHad,
226 kCorrRndHadProt,
227
228 kCorrRndJetExcHad,
229 kCorrRndJetExcProt,
230 kCorrRndHadExcHad,
231 kCorrRndHadExcProt,
232
23536a91 233 kCorrLast
234 };
235
236 enum Class_t {
237 kClCentral = 0,
238 kClSemiCentral,
2751fb9a 239 // kClDijet,
23536a91 240 kClLast
241 };
242
243 enum Trg_t {
244 kTrgHad = 0,
245 kTrgJet,
ebdf1dbb 246 kTrgHadRnd,
247 kTrgJetRnd,
23536a91 248 kTrgLast
249 };
250
251 enum Ass_t {
ebdf1dbb 252 kAssHad = 0,
23536a91 253 kAssProt,
ebdf1dbb 254 kAssHadJetExc,
255 kAssProtJetExc,
256 kAssHadHadExc,
257 kAssProtHadExc,
23536a91 258 kAssLast
259 };
260
261 enum Ev_t {
262 kEvSame = 0,
263 kEvMix,
264 kEvLast
265 };
266
267 class AliHistCorr : public TNamed {
268 public:
269 AliHistCorr(TString name, TList *outputList = 0x0);
270 ~AliHistCorr();
271
ebdf1dbb 272 void Trigger(Float_t phi, Float_t eta, Float_t weight = 1.) { fHistStat->Fill(1., weight); fHistCorrTrgEtaPhi->Fill(phi, eta, weight); }
273 void Ass(Float_t phi, Float_t eta, Float_t weight = 1.) { fHistCorrAssEtaPhi->Fill(phi, eta, weight); }
23536a91 274 void Fill(AliVParticle *trgPart, AliVParticle *assPart, Float_t weight = 1.);
ebdf1dbb 275 void Fill(TLorentzVector *trgPart, AliVParticle *assPart, Float_t weight = 1.);
276 void Fill(TLorentzVector *trgPart, TLorentzVector *assPart, Float_t weight = 1.);
23536a91 277
278 protected:
279 TList *fOutputList;
280
281 TH1F *fHistStat;
282
283 TH1F *fHistCorrPhi;
284 TH2F *fHistCorrPhi2;
285 TH2F *fHistCorrEtaPhi;
ebdf1dbb 286 TH2F *fHistCorrAvgEtaPhi;
287 TH2F *fHistCorrTrgEtaPhi;
288 TH2F *fHistCorrAssEtaPhi;
23536a91 289
290 AliHistCorr(const AliHistCorr &rhs);
291 AliHistCorr& operator=(const AliHistCorr &rhs);
292
293 ClassDef(AliHistCorr, 1);
294 };
295
296 AliHistCorr*& GetHistCorr(CorrType_t corr, Class_t cl, Ev_t ev) { return fHistCorr[kEvLast*(kClLast*corr + cl) + ev]; }
2751fb9a 297 AliEventPoolManager*& GetPoolMgr(Ass_t ass) { return fPoolMgr[ass]; }
298 AliEventPool*& GetPool(Ass_t ass) { return fPool[ass]; }
23536a91 299
300protected:
301 AliMCEvent *fMCEvent; //!
302 AliESDEvent *fESDEvent; //!
303 AliAODEvent *fAODEvent; //!
304
ebdf1dbb 305 Int_t fRunNumber; //! current run number
306 AliOADBContainer *fOADBContainerTOF; //! container for OADB entry with TOF parameters
307 AliTOFPIDParams *fParamsTOF; //! TOF parametrization
308
309 AliEventplane *fEventplane; //! pointer to the event plane
310
23536a91 311 UInt_t fTriggerMask; //! internal representation of trigger conditions
312 UInt_t fClassMask; //! internal representation of event classes
313 Float_t fCentrality; //!
314 Float_t fCentralityCheck; //!
315 Float_t fZvtx; //!
316 AliPIDResponse *fPIDResponse; //!
ebdf1dbb 317 Float_t fEventPlaneAngle; //!
318 Float_t fEventPlaneAngleCheck; //!
a4c7ef28 319 Float_t fEventPlaneAngle3; //!
320
321 TObjArray *fPrimTrackArrayAss; //!
322 TObjArray *fPrimTrackArrayTrg; //!
323 TClonesArray *fPrimConstrainedTrackArray; //!
23536a91 324 TClonesArray *fJetArray; //!
325
2751fb9a 326 AliEventPoolManager *fPoolMgr[kAssProt + 1]; //!
327 AliEventPool *fPool[kAssProt + 1]; //!
23536a91 328
329 AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
330
331 Bool_t DetectTriggers();
332 void MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
333 Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }
334
335 Bool_t DetectClasses();
336 void MarkClass(Class_t cl) { fClassMask |= (1 << cl); }
337 Bool_t IsClass(Class_t cl) const { return (fClassMask & (1 << cl)); }
338
339 Bool_t PrepareEvent();
340 Bool_t CleanUpEvent();
341
342 Float_t GetCentrality() const { return fCentrality; }
ebdf1dbb 343 Float_t GetEventPlaneAngle() const { return fEventPlaneAngle; }
23536a91 344 AliPIDResponse* GetPID() const { return fPIDResponse; }
345 Bool_t IsCentral() { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
346 Bool_t IsSemiCentral() { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
347
3082e8ab 348 AliVTrack* GetLeadingTrack(AliAODJet *jet) const;
349
350 Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
351 Float_t phi2, Float_t pt2, Float_t charge2,
352 Float_t radius, Float_t bSign);
353
23536a91 354 Bool_t AcceptTrigger(AliVTrack *trg);
355 Bool_t AcceptTrigger(AliAODJet *trg);
3082e8ab 356 Bool_t AcceptAssoc(AliVTrack *trk);
23536a91 357 Bool_t IsProton(AliVTrack *trk);
3082e8ab 358 Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi);
359 Bool_t AcceptTwoTracks(AliVParticle *trgPart, AliVParticle *assPart);
23536a91 360
361 TObjArray* CloneTracks(TObjArray *tracks) const;
362
ebdf1dbb 363 Bool_t GenerateRandom(TCollection *trgJetArray, TCollection *trgHadArray,
364 TCollection *assHadJetArray, TCollection *assProtJetArray,
365 TCollection *assHadHadArray, TCollection *assProtHadArray,
366 Float_t pFraction = .5);
367
23536a91 368 Bool_t Correlate(CorrType_t corr, Class_t cl, Ev_t ev,
369 TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
370
371 Bool_t Correlate(Trg_t trg, Ass_t ass, Class_t cl, Ev_t ev,
372 TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
373
374 // output objects
375 TList *fOutputList; //! list of output objects
376
377 // histogram management
378 TH1 *fHist[kHistLast]; //! pointers to histogram
379 const char *fShortTaskId; //! short identifier for the task
380
381 TH1*& GetHistogram(Hist_t hist, const Int_t idx = 0) { return fHist[hist + idx]; }
382
383 TH1* AddHistogram(Hist_t hist, const char *hid, TString title,
384 Int_t xbins, Float_t xmin, Float_t xmax, Int_t binType = 1);
385 TH2* AddHistogram(Hist_t hist, const char *hid, TString title,
386 Int_t xbins, Float_t xmin, Float_t xmax,
387 Int_t ybins, Float_t ymin, Float_t ymax, Int_t binType = 1);
388 TH3* AddHistogram(Hist_t hist, const char *hid, TString title,
389 Int_t xbins, Float_t xmin, Float_t xmax,
390 Int_t ybins, Float_t ymin, Float_t ymax,
391 Int_t zbins, Float_t zmin, Float_t zmax, Int_t binType = 1);
392
393 void FillH1(Hist_t hist, Float_t x, Float_t weight = 1., Int_t idx = 0)
394 { GetHistogram(hist, idx)->Fill(x, weight); }
395 void FillH2(Hist_t hist, Float_t x, Float_t y, Float_t weight = 1., Int_t idx = 0)
396 { ((TH2*) GetHistogram(hist, idx))->Fill(x, y, weight); }
397 void FillH3(Hist_t hist, Float_t x, Float_t y, Float_t z, Float_t weight = 1., Int_t idx = 0)
398 { ((TH3*) GetHistogram(hist, idx))->Fill(x, y, z, weight); }
399
400 const char* fkCorrTypeName[kCorrLast]; //!
401 const char* fkClassName[kClLast]; //!
402 const char* fkEvName[kEvLast]; //!
403
404 // task configuration
405 static const Int_t fgkStringLength = 100; // max length for the jet branch name
406 char fJetBranchName[fgkStringLength]; // jet branch name
407
3082e8ab 408 Bool_t fUseStandardCuts;
a4c7ef28 409 Bool_t fUseEvplaneV0;
3082e8ab 410
a4c7ef28 411 AliESDtrackCuts *fCutsPrimTrg; // track cuts for primary particles (trigger)
412 AliESDtrackCuts *fCutsPrimTrgConstrain; // track cuts for primary particles (trigger)
413 AliESDtrackCuts *fCutsPrimAss; // track cuts for primary particles (associate)
3082e8ab 414 Float_t fCutsTwoTrackEff;
23536a91 415
416 Float_t fTrgPartPtMin;
417 Float_t fTrgPartPtMax;
418 Float_t fTrgJetPtMin;
419 Float_t fTrgJetPtMax;
3082e8ab 420 Float_t fTrgJetLeadTrkPtMin;
23536a91 421 Float_t fAssPartPtMin;
422 Float_t fAssPartPtMax;
3082e8ab 423 Float_t fTrgAngleToEvPlane;
23536a91 424
ebdf1dbb 425 TF1 *fTrgJetPhiModCent;
426 TF1 *fTrgJetPhiModSemi;
427 TF1 *fTrgHadPhiModCent;
428 TF1 *fTrgHadPhiModSemi;
429
23536a91 430 // not implemented
431 AliAnalysisTaskJetProtonCorr(const AliAnalysisTaskJetProtonCorr &rhs);
432 AliAnalysisTaskJetProtonCorr& operator=(const AliAnalysisTaskJetProtonCorr &rhs);
433
434 ClassDef(AliAnalysisTaskJetProtonCorr, 1);
435};