8 #include "AliVParticle.h"
9 #include "AliAnalysisTaskSE.h"
10 #include "AliESDtrackCuts.h"
13 #define LAB(x) x + 1, #x
17 class AliOADBContainer;
18 class AliTOFPIDParams;
21 class AliEventPoolManager;
25 class AliAnalysisTaskJetProtonCorr :
26 public AliAnalysisTaskSE
29 AliAnalysisTaskJetProtonCorr(const char *name = "jets_trg_trd");
30 ~AliAnalysisTaskJetProtonCorr();
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);
41 void SetJetBranchName(const char* branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
42 const char* GetJetBranchName() const { return fJetBranchName; }
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; }
54 void SetTwoTrackCut(Float_t cut) { fCutsTwoTrackEff = cut; }
55 Float_t GetTwoTrackCut() const { return fCutsTwoTrackEff; }
57 void SetTrackCutsAss(const AliESDtrackCuts &cuts) { *fCutsPrimAss = cuts; }
58 void SetTrackCutsTrg(const AliESDtrackCuts &cuts) { *fCutsPrimTrg = cuts; }
59 void SetTrackCutsTrgConstrain(const AliESDtrackCuts &cuts) { *fCutsPrimTrgConstrain = cuts; }
61 void SetTrgJetEtaMax(Float_t etamax) { fTrgJetEtaMax = etamax; }
62 Float_t GetTrgJetEtaMax() const { return fTrgJetEtaMax; }
63 void SetHadEtaMax(Float_t etamax) { fHadEtaMax = etamax; }
64 Float_t GetHadEtaMax() const { return fHadEtaMax; }
66 void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
67 Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
69 void SetJetV2(Float_t v2Cent, Float_t v2Semi) {
70 fTrgJetPhiModCent->SetParameter(0, v2Cent);
71 fTrgJetPhiModSemi->SetParameter(0, v2Semi);
73 void SetHadV2(Float_t v2Cent, Float_t v2Semi) {
74 fTrgHadPhiModCent->SetParameter(0, v2Cent);
75 fTrgHadPhiModSemi->SetParameter(0, v2Semi);
78 void SetLeadingTrackPtMin(Float_t pt) { fTrgJetLeadTrkPtMin = pt; }
79 void SetLeadingTrackPtMax(Float_t pt) { fTrgJetLeadTrkPtMax = pt; }
81 void SetJetAreaMin(Float_t area) { fTrgJetAreaMin = area; }
82 Float_t GetJetAreaMin() const { return fTrgJetAreaMin; }
84 void SetRequirePID(Bool_t req = kTRUE) { fRequirePID = req; }
85 Bool_t GetRequirePID() const { return fRequirePID; }
87 void SetFilterMask(Int_t mask) { fAssFilterMask = mask; }
88 Int_t GetFilterMask() const { return fAssFilterMask; }
90 void SetErrorCount(Int_t cnt) { fErrorMsg = cnt; }
91 Int_t GetErrorCount() const { return fErrorMsg; }
93 void SetTrgAngleToEvPlane(Float_t angle) { fTrgAngleToEvPlane = angle; }
94 Float_t GetTrgAngleToEvPlane() const { return fTrgAngleToEvPlane; }
96 void SetToyMeanNoPart(Float_t mean) { fToyMeanNoPart = mean; }
97 Float_t GetToyMeanNoPart() const { return fToyMeanNoPart; }
98 void SetToyRadius(Float_t radius) { fToyRadius = radius; }
99 Float_t GetToyRadius() const { return fToyRadius; }
100 void SetToySmearPhi(Float_t sigma) { fToySmearPhi = sigma; }
101 Float_t GetToySmearPhi() const { return fToySmearPhi; }
103 void PrintTask(Option_t *option, Int_t indent) const;
105 static Double_t TOFsignal(Double_t *x, Double_t *par)
107 Double_t norm = par[0];
108 Double_t mean = par[1];
109 Double_t sigma = par[2];
110 Double_t tail = par[3];
112 if (x[0] <= (tail + mean))
113 return norm * TMath::Gaus(x[0], mean, sigma);
115 return norm * TMath::Gaus(tail + mean, mean, sigma) * TMath::Exp(-tail * (x[0] - tail - mean) / (sigma * sigma));
125 kHistCentralityCheck,
126 kHistCentralityCheckUsed,
127 kHistCentralityVsMult,
135 // kHistExpSigmaTOFe,
136 // kHistExpSigmaTOFmu,
137 // kHistExpSigmaTOFpi,
138 // kHistExpSigmaTOFk,
139 // kHistExpSigmaTOFp,
140 // kHistExpSigmaTOFd,
141 // kHistExpSigmaTOFeSemi,
142 // kHistExpSigmaTOFmuSemi,
143 // kHistExpSigmaTOFpiSemi,
144 // kHistExpSigmaTOFkSemi,
145 // kHistExpSigmaTOFpSemi,
146 // kHistExpSigmaTOFdSemi,
147 // kHistCmpSigmaTOFe,
148 // kHistCmpSigmaTOFmu,
149 // kHistCmpSigmaTOFpi,
150 // kHistCmpSigmaTOFk,
151 // kHistCmpSigmaTOFp,
152 // kHistCmpSigmaTOFd,
153 // kHistCmpSigmaTOFeSemi,
154 // kHistCmpSigmaTOFmuSemi,
155 // kHistCmpSigmaTOFpiSemi,
156 // kHistCmpSigmaTOFkSemi,
157 // kHistCmpSigmaTOFpSemi,
158 // kHistCmpSigmaTOFdSemi,
172 kHistNsigmaTOFmismatch,
181 kHistNsigmaTPCmuSemi,
182 kHistNsigmaTPCpiSemi,
186 kHistNsigmaTPCe_eSemi,
188 kHistNsigmaTOFmuSemi,
189 kHistNsigmaTOFpiSemi,
193 kHistNsigmaTOFmismatchSemi,
203 kHistNsigmaTPCTOFUsed,
204 kHistNsigmaTPCTOFUsedCentral,
205 kHistNsigmaTPCTOFUsedSemiCentral,
206 kHistNsigmaTPCTOFUsedPt,
207 kHistNsigmaTPCTOFUsedPtCentral,
208 kHistNsigmaTPCTOFUsedPtSemiCentral,
210 kHistNsigmaTPCTOFUsedCentralMCe,
211 kHistNsigmaTPCTOFUsedCentralMCmu,
212 kHistNsigmaTPCTOFUsedCentralMCpi,
213 kHistNsigmaTPCTOFUsedCentralMCk,
214 kHistNsigmaTPCTOFUsedCentralMCp,
215 kHistNsigmaTPCTOFUsedCentralMCd,
217 kHistNsigmaTPCTOFUsedSemiCentralMCe,
218 kHistNsigmaTPCTOFUsedSemiCentralMCmu,
219 kHistNsigmaTPCTOFUsedSemiCentralMCpi,
220 kHistNsigmaTPCTOFUsedSemiCentralMCk,
221 kHistNsigmaTPCTOFUsedSemiCentralMCp,
222 kHistNsigmaTPCTOFUsedSemiCentralMCd,
227 kHistEvPlaneCheckUsed,
230 kHistEvPlaneCorrNoTrgJets,
231 kHistEvPlaneCorrNoTrgJetsTrgd,
238 kHistPhiTrgJetEvPlane,
239 kHistPhiTrgHadEvPlane,
240 kHistPhiRndTrgJetEvPlane,
241 kHistPhiRndTrgHadEvPlane,
242 kHistPhiAssHadEvPlane,
243 kHistPhiAssHadVsEvPlane,
244 kHistPhiAssProtEvPlane,
245 kHistPhiTrgJetEvPlane3,
246 kHistPhiTrgHadEvPlane3,
247 kHistPhiAssHadEvPlane3,
248 kHistPhiAssProtEvPlane3,
267 // trigger conditions
325 class AliPartCorr : public AliVParticle {
327 AliPartCorr(Float_t eta = 0., Float_t phi = 0., Float_t pt = 0., Float_t charge = 0) :
328 fPt(pt), fEta(eta), fPhi(phi), fCharge(charge) {}
329 AliPartCorr(const AliVParticle &rhs) :
330 fPt(rhs.Pt()), fEta(rhs.Eta()), fPhi(rhs.Phi()), fCharge(rhs.Charge()) {}
331 virtual ~AliPartCorr() {}
334 virtual Double_t Px() const { AliFatal("not implemented"); return 0; }
335 virtual Double_t Py() const { AliFatal("not implemented"); return 0; }
336 virtual Double_t Pz() const { AliFatal("not implemented"); return 0; }
337 virtual Double_t Pt() const { return fPt; }
338 virtual Double_t P() const { AliFatal("not implemented"); return 0; }
339 virtual Bool_t PxPyPz(Double_t[3]) const { AliFatal("not implemented"); return 0; }
341 virtual Double_t Xv() const { AliFatal("not implemented"); return 0; }
342 virtual Double_t Yv() const { AliFatal("not implemented"); return 0; }
343 virtual Double_t Zv() const { AliFatal("not implemented"); return 0; }
344 virtual Bool_t XvYvZv(Double_t[3]) const { AliFatal("not implemented"); return 0; }
346 virtual Double_t OneOverPt() const { AliFatal("not implemented"); return 0; }
347 virtual Double_t Phi() const { return fPhi; }
348 virtual Double_t Theta() const { AliFatal("not implemented"); return 0; }
350 virtual Double_t E() const { AliFatal("not implemented"); return 0; }
351 virtual Double_t M() const { AliFatal("not implemented"); return 0; }
353 virtual Double_t Eta() const { return fEta; }
354 virtual Double_t Y() const { AliFatal("not implemented"); return 0; }
356 virtual Short_t Charge() const { return fCharge; }
357 virtual Int_t GetLabel() const { AliFatal("not implemented"); return 0; }
359 virtual Int_t PdgCode() const { AliFatal("not implemented"); return 0; }
360 virtual const Double_t *PID() const { AliFatal("not implemented"); return 0; }
368 ClassDef(AliPartCorr, 1);
371 class AliHistCorr : public TNamed {
373 AliHistCorr(TString name, TList *outputList = 0x0);
376 void Trigger(Float_t phi, Float_t eta, Float_t weight = 1.) {
377 fHistStat->Fill(1., weight);
378 if (fHistCorrTrgEtaPhi)
379 fHistCorrTrgEtaPhi->Fill(phi, eta, weight);
381 void Ass(Float_t phi, Float_t eta, Float_t weight = 1.) {
382 if (fHistCorrAssEtaPhi)
383 fHistCorrAssEtaPhi->Fill(phi, eta, weight);
385 void Fill(AliVParticle *trgPart, AliVParticle *assPart, Float_t weight = 1.);
386 void Fill(TLorentzVector *trgPart, AliVParticle *assPart, Float_t weight = 1.);
387 void Fill(TLorentzVector *trgPart, TLorentzVector *assPart, Float_t weight = 1.);
396 TH2F *fHistCorrEtaPhi;
397 TH2F *fHistCorrAvgEtaPhi;
398 TH2F *fHistCorrTrgEtaPhi;
399 TH2F *fHistCorrAssEtaPhi;
401 const Float_t fHistDphiLo;
402 const Int_t fHistDphiNbins;
403 const Int_t fHistDetaNbins;
405 AliHistCorr(const AliHistCorr &rhs);
406 AliHistCorr& operator=(const AliHistCorr &rhs);
408 ClassDef(AliHistCorr, 1);
411 AliHistCorr*& GetHistCorr(CorrType_t corr, Class_t cl, Ev_t ev) { return fHistCorr[kEvLast*(kClLast*corr + cl) + ev]; }
412 AliEventPoolManager*& GetPoolMgr(Ass_t ass) { return fPoolMgr[ass]; }
413 AliEventPool*& GetPool(Ass_t ass) { return fPool[ass]; }
416 AliMCEvent *fMCEvent; //!
417 AliESDEvent *fESDEvent; //!
418 AliAODEvent *fAODEvent; //!
420 Int_t fRunNumber; //! current run number
421 AliOADBContainer *fOADBContainerTOF; //! container for OADB entry with TOF parameters
422 AliTOFPIDParams *fParamsTOF; //! TOF parametrization
424 AliEventplane *fEventplane; //! pointer to the event plane
426 UInt_t fTriggerMask; //! internal representation of trigger conditions
427 UInt_t fClassMask; //! internal representation of event classes
428 Float_t fCentrality; //!
429 Float_t fCentralityCheck; //!
431 AliPIDResponse *fPIDResponse; //!
432 Float_t fEventPlaneAngle; //!
433 Float_t fEventPlaneAngleCheck; //!
434 Float_t fEventPlaneAngle3; //!
436 TObjArray *fPrimTrackArrayAss; //!
437 TObjArray *fPrimTrackArrayTrg; //!
438 TClonesArray *fPrimConstrainedTrackArray; //!
439 TClonesArray *fJetArray; //!
441 AliEventPoolManager *fPoolMgr[kAssProt + 1]; //!
442 AliEventPool *fPool[kAssProt + 1]; //!
444 AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
446 Int_t fErrorMsg; //! remaining number of error messages to be printed
448 Bool_t DetectTriggers();
449 void MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
450 Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }
452 Bool_t DetectClasses();
453 void MarkClass(Class_t cl) { fClassMask |= (1 << cl); }
454 Bool_t IsClass(Class_t cl) const { return (fClassMask & (1 << cl)); }
456 Bool_t PrepareEvent();
457 Bool_t CleanUpEvent();
459 Float_t GetCentrality() const { return fCentrality; }
460 Float_t GetEventPlaneAngle() const { return fEventPlaneAngle; }
461 AliPIDResponse* GetPID() const { return fPIDResponse; }
462 Bool_t IsCentral() const { return ((fCentrality >= 0.) && (fCentrality <= 10.)); }
463 Bool_t IsSemiCentral() const { return ((fCentrality >= 30.) && (fCentrality <= 50.)); }
465 AliVTrack* GetLeadingTrack(const AliAODJet *jet) const;
467 Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1,
468 Float_t phi2, Float_t pt2, Float_t charge2,
469 Float_t radius, Float_t bSign) const;
471 Bool_t AcceptTrigger(const AliVTrack *trg);
472 Bool_t AcceptTrigger(const AliAODJet *trg);
473 Bool_t AcceptAssoc(const AliVTrack *trk) const;
474 Bool_t IsProton(const AliVTrack *trk) const;
475 Bool_t AcceptAngleToEvPlane(Float_t phi, Float_t psi) const;
476 Bool_t AcceptTwoTracks(const AliVParticle *trgPart, const AliVParticle *assPart) const;
478 TObjArray* CloneTracks(TObjArray *tracks) const;
480 Bool_t GenerateRandom(TCollection *trgJetArray, TCollection *trgHadArray,
481 TCollection *assHadJetArray, TCollection *assProtJetArray,
482 TCollection *assHadHadArray, TCollection *assProtHadArray,
483 Float_t pFraction = .5);
485 Bool_t Correlate(CorrType_t corr, Class_t cl, Ev_t ev,
486 TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
488 Bool_t Correlate(Trg_t trg, Ass_t ass, Class_t cl, Ev_t ev,
489 TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
492 TList *fOutputList; //! list of output objects
494 // histogram management
495 TH1 *fHist[kHistLast]; //! pointers to histogram
496 const char *fShortTaskId; //! short identifier for the task
498 TH1*& GetHistogram(Hist_t hist, const Int_t idx = 0) { return fHist[hist + idx]; }
500 TH1* AddHistogram(Hist_t hist, const char *hid, TString title,
501 Int_t xbins, Float_t xmin, Float_t xmax, Int_t binType = 1);
502 TH2* AddHistogram(Hist_t hist, const char *hid, TString title,
503 Int_t xbins, Float_t xmin, Float_t xmax,
504 Int_t ybins, Float_t ymin, Float_t ymax, Int_t binType = 1);
505 TH3* AddHistogram(Hist_t hist, const char *hid, TString title,
506 Int_t xbins, Float_t xmin, Float_t xmax,
507 Int_t ybins, Float_t ymin, Float_t ymax,
508 Int_t zbins, Float_t zmin, Float_t zmax, Int_t binType = 1);
510 void FillH1(Hist_t hist, Float_t x, Float_t weight = 1., Int_t idx = 0)
511 { GetHistogram(hist, idx)->Fill(x, weight); }
512 void FillH2(Hist_t hist, Float_t x, Float_t y, Float_t weight = 1., Int_t idx = 0)
513 { ((TH2*) GetHistogram(hist, idx))->Fill(x, y, weight); }
514 void FillH3(Hist_t hist, Float_t x, Float_t y, Float_t z, Float_t weight = 1., Int_t idx = 0)
515 { ((TH3*) GetHistogram(hist, idx))->Fill(x, y, z, weight); }
517 const char* fkCorrTypeName[kCorrLast]; //!
518 const char* fkClassName[kClLast]; //!
519 const char* fkEvName[kEvLast]; //!
521 // task configuration
522 static const Int_t fgkStringLength = 100; // max length for the jet branch name
523 char fJetBranchName[fgkStringLength]; // jet branch name
525 const Bool_t fUseStandardCuts;
526 Bool_t fUseEvplaneV0;
528 AliESDtrackCuts *fCutsPrimTrg; // track cuts for primary particles (trigger)
529 AliESDtrackCuts *fCutsPrimTrgConstrain; // track cuts for primary particles (trigger)
530 AliESDtrackCuts *fCutsPrimAss; // track cuts for primary particles (associate)
531 Float_t fCutsTwoTrackEff;
533 UInt_t fAssFilterMask;
535 Float_t fTrgJetEtaMax;
537 Float_t fTrgPartPtMin;
538 Float_t fTrgPartPtMax;
539 Float_t fTrgJetPtMin;
540 Float_t fTrgJetPtMax;
541 Float_t fTrgJetLeadTrkPtMin;
542 Float_t fTrgJetLeadTrkPtMax;
543 Float_t fTrgJetAreaMin;
544 Float_t fAssPartPtMin;
545 Float_t fAssPartPtMax;
546 Float_t fTrgAngleToEvPlane;
548 Float_t fToyMeanNoPart;
550 Float_t fToySmearPhi;
552 TF1 *fTrgJetPhiModCent;
553 TF1 *fTrgJetPhiModSemi;
554 TF1 *fTrgHadPhiModCent;
555 TF1 *fTrgHadPhiModSemi;
558 AliAnalysisTaskJetProtonCorr(const AliAnalysisTaskJetProtonCorr &rhs);
559 AliAnalysisTaskJetProtonCorr& operator=(const AliAnalysisTaskJetProtonCorr &rhs);
561 ClassDef(AliAnalysisTaskJetProtonCorr, 1);