]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskChargedJetsPA.h
Charged jets (pPb): Updated deltaPt calculation
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskChargedJetsPA.h
CommitLineData
8628b70c 1#ifndef ALIANALYSISTASKCHARGEDJETSPA_H
2#define ALIANALYSISTASKCHARGEDJETSPA_H
3
12eb4ac1 4//#define DEBUGMODE
8628b70c 5
8628b70c 6class TList;
8628b70c 7class TClonesArray;
8class TString;
9class AliEmcalJet;
10class AliRhoParameter;
11class AliVParticle;
12class AliLog;
3fa9cde0 13class AliAnalysisUtils;
b95d0245 14class TRandom3;
013103f5 15class AliESDtrack;
16
17#include "AliESDtrackCuts.h"
18#include "THn.h"
19
0cf2a402 20const int kMaxMatch=5;
565f94c4 21const double kMaxChi2 = 200;
0cf2a402 22
013103f5 23// Class for the hybrid track cuts
24class AliESDHybridTrackcuts {
25 public:
26 AliESDHybridTrackcuts() : fMainCuts(0), fAdditionalCuts(0) {};
27 AliESDHybridTrackcuts(const AliESDHybridTrackcuts& pd) : fMainCuts(0), fAdditionalCuts(0) {((AliESDHybridTrackcuts &) pd).Copy(*this);};
28 virtual ~AliESDHybridTrackcuts() {delete fAdditionalCuts; delete fMainCuts;};
29
30 virtual void Copy(AliESDHybridTrackcuts &c) const
31 {
32 AliESDHybridTrackcuts& target = (AliESDHybridTrackcuts &) c;
33 target.fAdditionalCuts = fAdditionalCuts;
34 target.fMainCuts = fMainCuts;
35 };
36
37 // Meta function to accept hybrid tracks
38 Int_t AcceptTrack (const AliESDtrack* esdTrack) {
39 if (AcceptNormalTrack(esdTrack))
40 return 1;
41 else if (AcceptAdditionalTrack(esdTrack))
42 return 2;
43 else
44 return 0;
45 };
46
47 Bool_t AcceptNormalTrack (const AliESDtrack* esdTrack) {if(fMainCuts) return fMainCuts->AcceptTrack(esdTrack); else return kFALSE;};
48 Bool_t AcceptAdditionalTrack (const AliESDtrack* esdTrack) {if(fAdditionalCuts) return fAdditionalCuts->AcceptTrack(esdTrack); else return kFALSE;};
49 void SetMainCuts (AliESDtrackCuts* trackCuts) {fMainCuts = trackCuts;};
50 void SetAdditionalCuts (AliESDtrackCuts* trackCuts) {fAdditionalCuts = trackCuts;};
51 AliESDtrackCuts* GetAdditionalCuts () {return fAdditionalCuts;};
52 AliESDtrackCuts* GetMainCuts () {return fMainCuts;};
53
54 AliESDHybridTrackcuts &operator=(const AliESDHybridTrackcuts &c) {if (this != &c) ((AliESDHybridTrackcuts &) c).Copy(*this); return *this;};
55 protected:
56 AliESDtrackCuts* fMainCuts; // trackcut object for the global tracks
57 AliESDtrackCuts* fAdditionalCuts; // trackcut object for the complementary tracks
58
59// ClassDef(AliESDHybridTrackcuts, 2);
60};
8628b70c 61
8628b70c 62class AliAnalysisTaskChargedJetsPA : public AliAnalysisTaskSE {
63 public:
12eb4ac1 64 // ######### CONTRUCTORS/DESTRUCTORS AND STD FUNCTIONS
b896743a 65 AliAnalysisTaskChargedJetsPA() : AliAnalysisTaskSE(), fOutputLists(), fCurrentOutputList(0), fDoJetAnalysis(1), fAnalyzeJetProfile(0), fAnalyzeTrackcuts(0), fAnalyzeJetConstituents(1), fParticleLevel(0), fUseDefaultVertexCut(1), fUsePileUpCut(1), fSetCentralityToOne(0), fNoExternalBackground(0), fBackgroundForJetProfile(0), fPartialAnalysisNParts(1), fPartialAnalysisIndex(0), fJetArray(0), fTrackArray(0), fBackgroundJetArray(0), fJetArrayName(), fTrackArrayName(), fBackgroundJetArrayName(), fRhoTaskName(), fRandConeRadius(0.4), fRandConeNumber(10), fSignalJetRadius(0.4), fBackgroundJetRadius(0.4), fNumberExcludedJets(-1), fMinEta(-0.9), fMaxEta(0.9), fMinJetEta(-0.5), fMaxJetEta(0.5), fMinTrackPt(0.150), fMinJetPt(5.0), fMinJetArea(0.5), fMinBackgroundJetPt(0.0), fMinNCrossedRows(70), fUsePtDepCrossedRowsCut(0), fNumberOfCentralityBins(20), fCentralityType("V0A"), fMatchTr(), fMatchChi(), fPrimaryVertex(0), fFirstLeadingJet(0), fSecondLeadingJet(0), fFirstLeadingKTJet(0), fSecondLeadingKTJet(0), fNumberSignalJets(0), fNumberSignalJetsAbove5GeV(0), fRandom(0), fHelperClass(0), fInitialized(0), fTaskInstanceCounter(0), fIsDEBUG(0), fIsPA(1), fNoTerminate(1), fEventCounter(0), fHybridESDtrackCuts(0), fHybridESDtrackCuts_variedPtDep(0), fHybridESDtrackCuts_variedPtDep2(0)
b95d0245 66 {
013103f5 67 // dummy
b95d0245 68 }
0983dd5b 69
013103f5 70 AliAnalysisTaskChargedJetsPA(const char *name, const char* trackArrayName, const char* jetArrayName, const char* backgroundJetArrayName, Bool_t analyzeJetProfile, Bool_t analyzeTrackcuts);
8628b70c 71 virtual ~AliAnalysisTaskChargedJetsPA();
72 virtual void UserCreateOutputObjects();
73 virtual void UserExec(Option_t *option);
392aa819 74 virtual Bool_t UserNotify();
8628b70c 75 virtual void Terminate(Option_t *);
efb9b161 76
12eb4ac1 77 // ######### SETTERS/GETTERS
013103f5 78 void SetDoJetAnalysis(Bool_t val) {fDoJetAnalysis = val;}
2a82f637 79 void SetAnalyzeJetProfile(Bool_t val) {fAnalyzeJetProfile = val;}
013103f5 80 void SetAnalyzeTrackcuts(Bool_t val) {fAnalyzeTrackcuts = val;}
90297a16 81 void SetAnalyzeJetConstituents(Bool_t val) {fAnalyzeJetConstituents = val;}
c2b0976c 82 void SetAnalyzePartialEvents(Int_t nParts, Int_t index) {fPartialAnalysisNParts = nParts; fPartialAnalysisIndex = index;}
2a82f637 83 void SetUseDefaultVertexCut (Bool_t val) {fUseDefaultVertexCut = val;}
392aa819 84 void SetUsePileUpCut (Bool_t val) {fUsePileUpCut = val;}
0779c72f 85 void SetNoTerminate (Bool_t val) {fNoTerminate = val;}
013103f5 86 void SetIsPA (Bool_t val) {fIsPA = val;}
9f1e4f53 87 void SetCentralityToOne (Bool_t val) {fSetCentralityToOne = val;}
4bb1bca6 88 void SetNoExternalBackground (Bool_t val) {fNoExternalBackground = val;}
3dff28bc 89 void SetBackgroundForJetProfile (Bool_t val) {fBackgroundForJetProfile = val;}
2d6ed1a3 90 void SetMinNCrossedRows(Int_t val) {fMinNCrossedRows = val;}
e3ed0600 91 void SetUsePtDepCrossedRowsCut(Bool_t val) {fUsePtDepCrossedRowsCut = val;}
92
fa866fc8 93 void SetNumberOfCentralityBins(Int_t val) {fNumberOfCentralityBins = val;}
12eb4ac1 94 void SetTrackMinPt(Double_t minPt) {fMinJetPt = minPt;}
95 void SetSignalJetMinPt(Double_t minPt) {fMinJetPt = minPt;}
96 void SetSignalJetMinArea(Double_t minArea) {fMinJetArea = minArea;}
97 void SetBackgroundJetMinPt(Double_t minPt) {fMinBackgroundJetPt = minPt;}
12eb4ac1 98 void SetRandConeRadius(Double_t radius) {fRandConeRadius = radius;}
b896743a 99 void SetRandConeNumber(Int_t number) {fRandConeNumber = number;}
12eb4ac1 100 void SetSignalJetRadius(Double_t radius) {fSignalJetRadius = radius;}
101 void SetBackgroundJetRadius(Double_t radius) {fBackgroundJetRadius = radius;}
12eb4ac1 102 void SetCentralityType(const char* type) {fCentralityType = type;}
06b41974 103 void SetExternalRhoTaskName(const char* name) {fRhoTaskName = name;}
b836a932 104 void SetAcceptanceEta(Double_t minEta, Double_t maxEta) {fMinEta = minEta; fMaxEta = maxEta;}
105 void SetAcceptanceJetEta(Double_t minEta, Double_t maxEta) {fMinJetEta = minEta; fMaxJetEta = maxEta;}
12eb4ac1 106 Int_t GetInstanceCounter() {return fTaskInstanceCounter;}
013103f5 107 void SetCurrentOutputList(Int_t i)
108 {
109 if(i==0)
110 {
111 fCurrentOutputList = fOutputLists[0];
112 }
113 else if(i==1)
114 {
115 if(fAnalyzeJetProfile)
116 fCurrentOutputList = fOutputLists[1];
117 else
118 AliError("Non-existing output list demanded!");
119 }
120 else if(i==2)
121 {
122 if(!fAnalyzeJetProfile && fAnalyzeTrackcuts)
123 fCurrentOutputList = fOutputLists[1];
124 else if(fAnalyzeJetProfile && fAnalyzeTrackcuts)
125 fCurrentOutputList = fOutputLists[2];
126 else
127 AliError("Non-existing output list demanded!");
128 }
129 }
8628b70c 130
131 private:
12eb4ac1 132
133 // ######### MAIN CALCULATION FUNCTIONS
013103f5 134 void InitializeTrackcuts();
135 void GetLeadingJets();
e8df4140 136 Double_t GetCorrectedJetPt(AliEmcalJet* jet, Double_t background);
b896743a 137 Double_t GetDeltaPt(Double_t rho, Double_t overlappingJetExclusionProbability = 0);
0cb49d99 138
139 void GetKTBackgroundDensityAll(Int_t numberExcludeLeadingJets, Double_t& rhoPbPb, Double_t& rhoPbPbWithGhosts, Double_t& rhoCMS, Double_t& rhoImprovedCMS, Double_t& rhoMean, Double_t& rhoTrackLike);
b95d0245 140 void GetTRBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoNoExclusion, Double_t& rhoConeExclusion02, Double_t& rhoConeExclusion04, Double_t& rhoConeExclusion06, Double_t& rhoConeExclusion08, Double_t& rhoExactExclusion);
3dff28bc 141 void GetPPBackgroundDensity(Double_t& background);
013103f5 142
12eb4ac1 143 Double_t GetConePt(Double_t eta, Double_t phi, Double_t radius);
271cbc5d 144 Double_t GetCorrectedConePt(Double_t eta, Double_t phi, Double_t radius, Double_t background);
a8b7cbf6 145 Int_t GetConeConstituentCount(Double_t eta, Double_t phi, Double_t radius);
06b41974 146 Double_t GetExternalRho();
013103f5 147 void CreateJetProfilePlots(Double_t bgrd);
148 void CreateCutHistograms();
0cf2a402 149 void CreateITSTPCMatchingHistograms();
12eb4ac1 150 void GetPerpendicularCone(Double_t vecPhi, Double_t vecTheta, Double_t& conePt);
151
152 // ######### CHECK FUNCTIONS
153 Bool_t IsTrackInAcceptance(AliVParticle* track);
154 Bool_t IsTrackInCone(AliVTrack* track, Double_t eta, Double_t phi, Double_t radius);
b95d0245 155 Bool_t IsTrackInJet(AliEmcalJet* jet, Int_t trackIndex);
156 Bool_t IsJetOverlapping(AliEmcalJet* jet1, AliEmcalJet* jet2);
12eb4ac1 157
0cb49d99 158 Bool_t IsEventInAcceptance(AliVEvent* event);
12eb4ac1 159 Bool_t IsBackgroundJetInAcceptance(AliEmcalJet* jet);
ec676623 160 Bool_t IsSignalJetInAcceptance(AliEmcalJet* jet, Bool_t usePtCut = kFALSE);
8628b70c 161
12eb4ac1 162 // ######### HELPER FUNCTIONS
163 Double_t EtaToTheta(Double_t arg);
164 Double_t ThetaToEta(Double_t arg);
165 Double_t GetDeltaPhi(Double_t phi1, Double_t phi2);
166 Double_t MCGetOverlapCircleRectancle(Double_t cPosX, Double_t cPosY, Double_t cRadius, Double_t rPosXmin, Double_t rPosXmax, Double_t rPosYmin, Double_t rPosYmax);
b95d0245 167 Double_t MCGetOverlapMultipleCirclesRectancle(Int_t numCircles, std::vector<Double_t> cPosX, std::vector<Double_t> cPosY, Double_t cRadius, Double_t rPosXmin, Double_t rPosXmax, Double_t rPosYmin, Double_t rPosYmax);
0cf2a402 168 void Match(AliESDtrack* tr0, AliESDtrack* tr1, Int_t& nmatch, Bool_t excludeMom = kFALSE, Double_t rotate=0);
12eb4ac1 169
170 // ######### HISTOGRAM FUNCTIONS
171 void FillHistogram(const char * key, Double_t x);
172 void FillHistogram(const char * key, Double_t x, Double_t y);
173 void FillHistogram(const char * key, Double_t x, Double_t y, Double_t add);
013103f5 174 void FillCutHistogram(const char * key, Double_t cut, Double_t pT, Double_t eta, Double_t phi, Int_t isAdditionalTrack);
175
8628b70c 176 const char* GetHistoName(const char* name)
177 {
013103f5 178 if (fParticleLevel)
7e413f22 179 return Form("%s_MC", name);
180 return Form("%s", name);
8628b70c 181 }
8628b70c 182 template <class T> T* AddHistogram1D(const char* name = "CustomHistogram", const char* title = "NO_TITLE", const char* options = "", Int_t xBins = 100, Double_t xMin = 0.0, Double_t xMax = 20.0, const char* xTitle = "x axis", const char* yTitle = "y axis");
8628b70c 183 template <class T> T* AddHistogram2D(const char* name = "CustomHistogram", const char* title = "NO_TITLE", const char* options = "", Int_t xBins = 100, Double_t xMin = 0.0, Double_t xMax = 20.0, Int_t yBins = 100, Double_t yMin = 0.0, Double_t yMax = 20.0, const char* xTitle = "x axis", const char* yTitle = "y axis", const char* zTitle = "z axis");
013103f5 184 THnF* AddCutHistogram(const char* name, const char* title, const char* cutName, Int_t nBins, Double_t xMin, Double_t xMax);
185 void BinLogAxis(const THn *h, Int_t axisNumber);
8628b70c 186
12eb4ac1 187 // ######### STANDARD FUNCTIONS
8628b70c 188 void Calculate(AliVEvent* event);
189 void ExecOnce();
190 void Init ();
191
013103f5 192 std::vector<TList*> fOutputLists; //! Output lists
193 TList* fCurrentOutputList; //! Currently selected list where the histograms will be saved to
12eb4ac1 194 // ########## USAGE TRIGGERS
013103f5 195 Bool_t fDoJetAnalysis; // trigger if jets/tracks etc. should be analyzed
2a82f637 196 Bool_t fAnalyzeJetProfile; // trigger if jet profile should be analyzed
013103f5 197 Bool_t fAnalyzeTrackcuts; // trigger if trackcuts should be analyzed
90297a16 198 Bool_t fAnalyzeJetConstituents;// trigger if constituents should be analyzed
013103f5 199 Bool_t fParticleLevel; // trigger if data is kinematics only (for naming reasons)
2a82f637 200 Bool_t fUseDefaultVertexCut; // trigger if automatic vertex cut from helper class should be done
392aa819 201 Bool_t fUsePileUpCut; // trigger if pileup cut should be done
9f1e4f53 202 Bool_t fSetCentralityToOne; // trigger if centrality val. should be set to one for every event (failsafe)
4bb1bca6 203 Bool_t fNoExternalBackground; // External background is set to 0 (e.g. for PP)
3dff28bc 204 Int_t fBackgroundForJetProfile; // Which background will be subtracted for the profile calculation (0=External,1=Improved CMS,2=CMS,3=PP,4=TR,5=None)
c2b0976c 205 Int_t fPartialAnalysisNParts; // take only every Nth event
206 Int_t fPartialAnalysisIndex; // using e.g. only every 5th event, this specifies which one
207
12eb4ac1 208
8628b70c 209 // ########## SOURCE INFORMATION
210 TClonesArray* fJetArray; //! object containing the jets
211 TClonesArray* fTrackArray; //! object containing the tracks
8628b70c 212 TClonesArray* fBackgroundJetArray; //! object containing background jets
013103f5 213 TString fJetArrayName; // name of object containing the jets
214 TString fTrackArrayName; // name of object containing the tracks
215 TString fBackgroundJetArrayName;// name of object containing event wise bckgrds
06b41974 216 TString fRhoTaskName; // name of rho task for this analysis
8628b70c 217 // ########## JET/DIJET/RC PROPERTIES
218 Double_t fRandConeRadius; // Radius for the random cones
b896743a 219 Int_t fRandConeNumber; // Number of random cones thrown per event
8628b70c 220 Double_t fSignalJetRadius; // Radius for the signal jets
221 Double_t fBackgroundJetRadius; // Radius for the KT background jets
8628b70c 222 Int_t fNumberExcludedJets; // Number of jets to be excluded from backgrounds
8628b70c 223 // ########## CUTS
b836a932 224 Double_t fMinEta; // min eta of tracks
225 Double_t fMaxEta; // max eta of tracks
226 Double_t fMinJetEta; // min eta of jets
227 Double_t fMaxJetEta; // max eta of jets
8628b70c 228 Double_t fMinTrackPt; // Min track pt to be accepted
8628b70c 229 Double_t fMinJetPt; // Min jet pt to be accepted
230 Double_t fMinJetArea; // Min jet area to be accepted
231 Double_t fMinBackgroundJetPt; // Min jet pt to be accepted as background jet
2d6ed1a3 232 Int_t fMinNCrossedRows; // Min number of crossed TPC rows for trackcut analysis
e3ed0600 233 Bool_t fUsePtDepCrossedRowsCut;// Trigger if linear pT dep. for crossed rows cut should be applied
b95d0245 234 Int_t fNumberOfCentralityBins;// Number of centrality bins used for histograms
12eb4ac1 235 TString fCentralityType; // Used centrality estimate (V0A, V0C, V0M, ...)
8628b70c 236
565f94c4 237 AliESDtrack* fMatchTr[kMaxMatch]; //! Helper variables track matching
238 Double_t fMatchChi[kMaxMatch]; //! Helper variables track matching
0cf2a402 239
240
8628b70c 241 // ########## EVENT PROPERTIES
565f94c4 242 const AliVVertex* fPrimaryVertex; //! Vertex found per event
8628b70c 243 AliEmcalJet* fFirstLeadingJet; //! leading jet in event
244 AliEmcalJet* fSecondLeadingJet; //! next to leading jet in event
013103f5 245 AliEmcalJet* fFirstLeadingKTJet; //! leading kT jet in event
246 AliEmcalJet* fSecondLeadingKTJet; //! next to leading kT jet in event
247 Int_t fNumberSignalJets; // Number of signal jets in event
248 Int_t fNumberSignalJetsAbove5GeV; // Number of signal jets in event > 5GeV
8628b70c 249 // ########## GENERAL VARS
250 TRandom3* fRandom; //! A random number
3fa9cde0 251 AliAnalysisUtils* fHelperClass; //! Vertex selection helper
013103f5 252 Bool_t fInitialized; // trigger if tracks/jets are loaded
8628b70c 253 Int_t fTaskInstanceCounter; // for naming reasons
b95d0245 254 Bool_t fIsDEBUG; // Debug trigger
013103f5 255 Bool_t fIsPA; // pPb trigger
0779c72f 256 Bool_t fNoTerminate; // don't use terminate routines
c2b0976c 257 ULong_t fEventCounter; // Internal event counter
013103f5 258 AliESDHybridTrackcuts* fHybridESDtrackCuts; //! these trackcuts are applied
e3ed0600 259 AliESDHybridTrackcuts* fHybridESDtrackCuts_variedPtDep; //! these trackcuts are applied
260 AliESDHybridTrackcuts* fHybridESDtrackCuts_variedPtDep2; //! these trackcuts are applied
013103f5 261
12eb4ac1 262 AliAnalysisTaskChargedJetsPA(const AliAnalysisTaskChargedJetsPA&);
263 AliAnalysisTaskChargedJetsPA& operator=(const AliAnalysisTaskChargedJetsPA&);
8628b70c 264
013103f5 265 ClassDef(AliAnalysisTaskChargedJetsPA, 3); // Charged jet analysis for pA
8628b70c 266
267};
268#endif