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