8 #include "AliAnalysisTaskSE.h"
9 #include "AliESDtrackCuts.h"
12 #define LAB(x) x + 1, #x
16 class AliOADBContainer;
17 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 SetTrackCutsAss(const AliESDtrackCuts &cuts) { *fCutsPrimAss = cuts; }
55 void SetTrackCutsTrg(const AliESDtrackCuts &cuts) { *fCutsPrimTrg = cuts; }
56 void SetTrackCutsTrgConstrain(const AliESDtrackCuts &cuts) { *fCutsPrimTrgConstrain = cuts; }
58 void SetUseEvplaneV0(Bool_t usev0 = kTRUE) { fUseEvplaneV0 = usev0; }
59 Bool_t GetUseEvplaneV0() const { return fUseEvplaneV0; }
61 void SetJetV2(Float_t v2Cent, Float_t v2Semi) {
62 fTrgJetPhiModCent->SetParameter(0, v2Cent);
63 fTrgJetPhiModSemi->SetParameter(0, v2Semi);
65 void SetHadV2(Float_t v2Cent, Float_t v2Semi) {
66 fTrgHadPhiModCent->SetParameter(0, v2Cent);
67 fTrgHadPhiModSemi->SetParameter(0, v2Semi);
70 void SetLeadingTrackPtMin(Float_t pt) { fTrgJetLeadTrkPtMin = pt; }
71 void SetLeadingTrackPtMax(Float_t pt) { fTrgJetLeadTrkPtMax = pt; }
73 void SetJetAreaMin(Float_t area) { fTrgJetAreaMin = area; }
75 void SetFilterMask(Int_t mask) { fAssFilterMask = mask; }
76 Int_t GetFilterMask() const { return fAssFilterMask; }
78 void SetErrorCount(Int_t cnt) { fErrorMsg = cnt; }
79 Int_t GetErrorCount() const { return fErrorMsg; }
81 void PrintTask(Option_t *option, Int_t indent) const;
83 static Double_t TOFsignal(Double_t *x, Double_t *par)
85 Double_t norm = par[0];
86 Double_t mean = par[1];
87 Double_t sigma = par[2];
88 Double_t tail = par[3];
90 if (x[0] <= (tail + mean))
91 return norm * TMath::Gaus(x[0], mean, sigma);
93 return norm * TMath::Gaus(tail + mean, mean, sigma) * TMath::Exp(-tail * (x[0] - tail - mean) / (sigma * sigma));
103 kHistCentralityCheck,
104 kHistCentralityCheckUsed,
105 kHistCentralityVsMult,
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,
150 kHistNsigmaTOFmismatch,
159 kHistNsigmaTPCmuSemi,
160 kHistNsigmaTPCpiSemi,
164 kHistNsigmaTPCe_eSemi,
166 kHistNsigmaTOFmuSemi,
167 kHistNsigmaTOFpiSemi,
171 kHistNsigmaTOFmismatchSemi,
181 kHistNsigmaTPCTOFUsed,
182 kHistNsigmaTPCTOFUsedCentral,
183 kHistNsigmaTPCTOFUsedSemiCentral,
184 kHistNsigmaTPCTOFUsedPt,
185 kHistNsigmaTPCTOFUsedPtCentral,
186 kHistNsigmaTPCTOFUsedPtSemiCentral,
191 kHistEvPlaneCheckUsed,
194 kHistEvPlaneCorrNoTrgJets,
195 kHistEvPlaneCorrNoTrgJetsTrgd,
202 kHistPhiTrgJetEvPlane,
203 kHistPhiTrgHadEvPlane,
204 kHistPhiAssHadEvPlane,
205 kHistPhiAssHadVsEvPlane,
206 kHistPhiAssProtEvPlane,
207 kHistPhiTrgJetEvPlane3,
208 kHistPhiTrgHadEvPlane3,
209 kHistPhiAssHadEvPlane3,
210 kHistPhiAssProtEvPlane3,
229 // trigger conditions
287 class AliHistCorr : public TNamed {
289 AliHistCorr(TString name, TList *outputList = 0x0);
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.);
305 TH2F *fHistCorrEtaPhi;
306 TH2F *fHistCorrAvgEtaPhi;
307 TH2F *fHistCorrTrgEtaPhi;
308 TH2F *fHistCorrAssEtaPhi;
310 AliHistCorr(const AliHistCorr &rhs);
311 AliHistCorr& operator=(const AliHistCorr &rhs);
313 ClassDef(AliHistCorr, 1);
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]; }
321 AliMCEvent *fMCEvent; //!
322 AliESDEvent *fESDEvent; //!
323 AliAODEvent *fAODEvent; //!
325 Int_t fRunNumber; //! current run number
326 AliOADBContainer *fOADBContainerTOF; //! container for OADB entry with TOF parameters
327 AliTOFPIDParams *fParamsTOF; //! TOF parametrization
329 AliEventplane *fEventplane; //! pointer to the event plane
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; //!
336 AliPIDResponse *fPIDResponse; //!
337 Float_t fEventPlaneAngle; //!
338 Float_t fEventPlaneAngleCheck; //!
339 Float_t fEventPlaneAngle3; //!
341 TObjArray *fPrimTrackArrayAss; //!
342 TObjArray *fPrimTrackArrayTrg; //!
343 TClonesArray *fPrimConstrainedTrackArray; //!
344 TClonesArray *fJetArray; //!
346 AliEventPoolManager *fPoolMgr[kAssProt + 1]; //!
347 AliEventPool *fPool[kAssProt + 1]; //!
349 AliHistCorr **fHistCorr; //! [kCorrLast*kEvLast*kClLast]; //!
351 Int_t fErrorMsg; //! remaining number of error messages to be printed
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)); }
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)); }
361 Bool_t PrepareEvent();
362 Bool_t CleanUpEvent();
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.)); }
370 AliVTrack* GetLeadingTrack(const AliAODJet *jet) const;
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;
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;
383 TObjArray* CloneTracks(TObjArray *tracks) const;
385 Bool_t GenerateRandom(TCollection *trgJetArray, TCollection *trgHadArray,
386 TCollection *assHadJetArray, TCollection *assProtJetArray,
387 TCollection *assHadHadArray, TCollection *assProtHadArray,
388 Float_t pFraction = .5);
390 Bool_t Correlate(CorrType_t corr, Class_t cl, Ev_t ev,
391 TCollection *trgArray, TCollection *assArray, Float_t weight = 1.);
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.);
397 TList *fOutputList; //! list of output objects
399 // histogram management
400 TH1 *fHist[kHistLast]; //! pointers to histogram
401 const char *fShortTaskId; //! short identifier for the task
403 TH1*& GetHistogram(Hist_t hist, const Int_t idx = 0) { return fHist[hist + idx]; }
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);
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); }
422 const char* fkCorrTypeName[kCorrLast]; //!
423 const char* fkClassName[kClLast]; //!
424 const char* fkEvName[kEvLast]; //!
426 // task configuration
427 static const Int_t fgkStringLength = 100; // max length for the jet branch name
428 char fJetBranchName[fgkStringLength]; // jet branch name
430 Bool_t fUseStandardCuts;
431 Bool_t fUseEvplaneV0;
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;
438 UInt_t fAssFilterMask;
439 Float_t fTrgJetEtaMax;
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;
452 TF1 *fTrgJetPhiModCent;
453 TF1 *fTrgJetPhiModSemi;
454 TF1 *fTrgHadPhiModCent;
455 TF1 *fTrgHadPhiModSemi;
458 AliAnalysisTaskJetProtonCorr(const AliAnalysisTaskJetProtonCorr &rhs);
459 AliAnalysisTaskJetProtonCorr& operator=(const AliAnalysisTaskJetProtonCorr &rhs);
461 ClassDef(AliAnalysisTaskJetProtonCorr, 1);