]>
Commit | Line | Data |
---|---|---|
aac81e6b | 1 | #include <TCanvas.h> |
2 | #include <TChain.h> | |
3 | #include <TFormula.h> | |
4 | #include <TH1.h> | |
5 | #include <TH2.h> | |
6 | #include <TH3.h> | |
7 | #include <TProfile2D.h> | |
8 | #include <THnSparse.h> | |
9 | #include <TROOT.h> | |
10 | #include <TTree.h> | |
11 | #include <TArrayI.h> | |
12 | #include <TClonesArray.h> | |
13 | #include <TRandom3.h> | |
14 | #include <TFile.h> | |
15 | #include <TF1.h> | |
16 | #include <TLorentzVector.h> | |
17 | #include "TKey.h" | |
18 | #include "TList.h" | |
19 | #include "TSystem.h" | |
20 | #include "AliFJWrapper.h" | |
21 | #include "AliAODHandler.h" | |
22 | #include "AliAODEvent.h" | |
23 | #include "AliAODInputHandler.h" | |
24 | #include "AliAnalysisManager.h" | |
25 | #include "AliAnalysisTask.h" | |
26 | #include "AliCentrality.h" | |
27 | #include "AliAnalysisTaskHJetDphi.h" | |
28 | #include "AliESDEvent.h" | |
29 | #include "AliESDInputHandler.h" | |
30 | #include "AliESDtrack.h" | |
31 | #include "AliESDtrackCuts.h" | |
32 | #include "AliVParticle.h" | |
33 | #include "AliVTrack.h" | |
34 | #include "AliInputEventHandler.h" | |
35 | #include "AliMCEvent.h" | |
36 | #include "AliStack.h" | |
37 | #include "AliGenEventHeader.h" | |
38 | #include "AliGenPythiaEventHeader.h" | |
39 | #include "AliLog.h" | |
40 | #include "AliRhoParameter.h" | |
41 | #include "AliAODMCParticle.h" | |
42 | #include "AliNamedArrayI.h" | |
43 | #include "AliNamedString.h" | |
44 | #include "AliPicoTrack.h" | |
45 | #include "AliAnalysisTaskFastEmbedding.h" | |
46 | #include "AliEmcalJet.h" | |
47 | #include "AliAODJet.h" | |
48 | #include "AliAODJetEventBackground.h" | |
abe5a06b | 49 | #include "AliAnalysisHelperJetTasks.h" |
aac81e6b | 50 | |
51 | #include <iostream> | |
52 | using std::cout; | |
53 | using std::cerr; | |
54 | using std::endl; | |
55 | ||
56 | ClassImp(AliAnalysisTaskHJetDphi) | |
57 | ||
58 | const Double_t pi = TMath::Pi(); | |
59 | const Double_t areaCut[4] = {0.1, 0.23, 0.4, 0.63}; | |
60 | const Double_t kSector = pi/9; | |
61 | ||
62 | //________________________________________________________________________ | |
63 | AliAnalysisTaskHJetDphi::AliAnalysisTaskHJetDphi() : | |
64 | AliAnalysisTaskSE(), | |
65 | fVerbosity(0), fIsEmbedding(kFALSE), fAnaType(0), fPeriod("lhc11h"), fCollisionSystem("PbPb"), | |
66 | fIsMC(kFALSE), fAnalyzeMCTruth(kFALSE), fMC(0), | |
67 | fEvent(0x0), fESD(0x0), fAODIn(0x0), fAODOut(0x0), fAODExtension(0x0), | |
68 | fOfflineTrgMask(AliVEvent::kAny), fTriggerType(-1), fCentrality(-1), fMaxVtxZ(10), | |
49bf6461 | 69 | fEsdTrkCut(0x0), fEsdHybCut(0x0), fFilterMask(0), fRequireITSRefit(kTRUE), fRequireSharedClsCut(kTRUE), |
aac81e6b | 70 | fIsInit(kFALSE), fNonStdFile(""), fMcParticleArrName(""), fMcParticleArray(0x0), fMcParticlelMap(0x0), |
71 | fEmbTrkArrName(""), fEmbTrkArray(0x0), fTrackArrName(""), fTrackArray(0x0), | |
72 | fTriggerTrkIndex(-1), fTriggerTrkPt(-1), fSwitchOnAvoidTpcHole(kFALSE), fAvoidTpcHole(kFALSE), fCutTPCBoundary(kFALSE), fDistToTPCBoundary(0.), | |
73 | fMinTrkPt(0.15), fMaxTrkPt(1e4), fMinTrkEta(-0.9), fMaxTrkEta(0.9), fMinTrkPhi(0), fMaxTrkPhi(2*pi), | |
74 | fRadius(0.4), fJetArrName(""), fPLJetArrName(""), fDLJetArrName(""), fJetArray(0x0), fPLJetArray(0x0), fDLJetArray(0x0), | |
75 | fRhoName(""), fRho(0x0), fRhoValue(0), fEvtBkg(0x0), fPtHardBinName(0x0), fPtHardBin(-1), | |
76 | fRunTrkQA(kFALSE), fRunJetQA(kFALSE), fRunSingleInclHJet(kFALSE), fTTtype(0), fTTMinPt(9), fTTMaxPt(10), fJetPtMin(10), | |
77 | fRunPLHJet(kFALSE), fRunDLHJet(kFALSE), fRunLeadTrkQA(kFALSE), fStudyKtEffects(kFALSE), fKtValue(0), fRandom(0), | |
78 | fRunBkgFlow(kFALSE), | |
79 | fOutputList(0x0), fhEventStat(0x0), fhNTrials(0x0), fhPtHardBins(0x0) | |
80 | { | |
81 | // Constructor | |
82 | ||
83 | // Define input and output slots here | |
84 | // Input slot #0 works with a TChain | |
85 | //DefineInput(0, TChain::Class()); | |
86 | //DefineOutput(1, TList::Class()); | |
87 | // Output slot #0 id reserved by the base class for AOD | |
88 | ||
89 | for(Int_t i=0; i<4; i++) | |
90 | { | |
91 | fhVtxZ[i] = 0x0; | |
92 | fhCentrality[i] = 0x0; | |
93 | fhRhoVsCent[i] = 0x0; | |
94 | ||
95 | fhTrkPt[i] = 0x0; | |
96 | fhTrkQA[i] = 0x0; | |
97 | fhTrkPtRes[i] = 0x0; | |
98 | fhTrkPhiRes[i] = 0x0; | |
99 | ||
100 | fhNumberOfTT[i] = 0x0; | |
101 | for(Int_t j=0; j<3; j++) | |
102 | { | |
103 | fhJetPt[i][j] = 0x0; | |
104 | fhJetArea[i][j] = 0x0; | |
105 | fhJetQA[i][j] = 0x0; | |
106 | ||
107 | fhTTPt[i][j] = 0x0; | |
108 | fHJetPhiCorr[i][j] = 0x0; | |
109 | } | |
110 | fHJetPhiCorrUp[i] = 0x0; | |
111 | fHJetPhiCorrDown[i] = 0x0; | |
112 | ||
113 | fhLeadTrkQA[i] = 0x0; | |
114 | fhKtEffects[i] = 0x0; | |
115 | } | |
116 | ||
117 | fAODfilterBits[0] = -1; | |
118 | fAODfilterBits[1] = -1; | |
119 | } | |
120 | ||
121 | //________________________________________________________________________ | |
122 | AliAnalysisTaskHJetDphi::AliAnalysisTaskHJetDphi(const char *name) : | |
123 | AliAnalysisTaskSE(name), | |
124 | fVerbosity(0), fIsEmbedding(kFALSE), fAnaType(0), fPeriod("lhc11h"), fCollisionSystem("PbPb"), | |
125 | fIsMC(kFALSE), fAnalyzeMCTruth(kFALSE), fMC(0), | |
126 | fEvent(0x0), fESD(0x0), fAODIn(0x0), fAODOut(0x0), fAODExtension(0x0), | |
127 | fOfflineTrgMask(AliVEvent::kAny), fTriggerType(-1), fCentrality(-1), fMaxVtxZ(10), | |
49bf6461 | 128 | fEsdTrkCut(0x0), fEsdHybCut(0x0), fFilterMask(0), fRequireITSRefit(kTRUE), fRequireSharedClsCut(kTRUE), |
aac81e6b | 129 | fIsInit(kFALSE), fNonStdFile(""), fMcParticleArrName(""), fMcParticleArray(0x0), fMcParticlelMap(0x0), |
130 | fEmbTrkArrName(""), fEmbTrkArray(0x0), fTrackArrName(""), fTrackArray(0x0), | |
131 | fTriggerTrkIndex(-1), fTriggerTrkPt(-1), fSwitchOnAvoidTpcHole(kFALSE), fAvoidTpcHole(kFALSE), fCutTPCBoundary(kFALSE), fDistToTPCBoundary(0.), | |
132 | fMinTrkPt(0.15), fMaxTrkPt(1e4), fMinTrkEta(-0.9), fMaxTrkEta(0.9), fMinTrkPhi(0), fMaxTrkPhi(2*pi), | |
133 | fRadius(0.4), fJetArrName(""), fPLJetArrName(""), fDLJetArrName(""), fJetArray(0x0), fPLJetArray(0x0), fDLJetArray(0x0), | |
134 | fRhoName(""), fRho(0x0), fRhoValue(0), fEvtBkg(0x0), fPtHardBinName(0x0), fPtHardBin(-1), | |
135 | fRunTrkQA(kFALSE), fRunJetQA(kFALSE), fRunSingleInclHJet(kFALSE), fTTtype(0), fTTMinPt(9), fTTMaxPt(10), fJetPtMin(10), | |
136 | fRunPLHJet(kFALSE), fRunDLHJet(kFALSE), fRunLeadTrkQA(kFALSE), fStudyKtEffects(kFALSE), fKtValue(0), fRandom(0), | |
137 | fRunBkgFlow(kFALSE), | |
138 | fOutputList(0x0), fhEventStat(0x0), fhNTrials(0x0), fhPtHardBins(0x0) | |
139 | { | |
140 | // Constructor | |
141 | ||
142 | // Define input and output slots here | |
143 | // Input slot #0 works with a TChain | |
144 | DefineInput(0, TChain::Class()); | |
145 | DefineOutput(1, TList::Class()); | |
146 | // Output slot #0 id reserved by the base class for AOD | |
147 | ||
148 | for(Int_t i=0; i<4; i++) | |
149 | { | |
150 | fhVtxZ[i] = 0x0; | |
151 | fhCentrality[i] = 0x0; | |
152 | fhRhoVsCent[i] = 0x0; | |
153 | ||
154 | fhTrkPt[i] = 0x0; | |
155 | fhTrkQA[i] = 0x0; | |
156 | fhTrkPtRes[i] = 0x0; | |
157 | fhTrkPhiRes[i] = 0x0; | |
158 | ||
159 | fhNumberOfTT[i] = 0x0; | |
160 | for(Int_t j=0; j<3; j++) | |
161 | { | |
162 | fhJetPt[i][j] = 0x0; | |
163 | fhJetArea[i][j] = 0x0; | |
164 | fhJetQA[i][j] = 0x0; | |
165 | ||
166 | fhTTPt[i][j] = 0x0; | |
167 | fHJetPhiCorr[i][j] = 0x0; | |
168 | } | |
169 | ||
170 | fHJetPhiCorrUp[i] = 0x0; | |
171 | fHJetPhiCorrDown[i] = 0x0; | |
172 | ||
173 | fhLeadTrkQA[i] = 0x0; | |
174 | fhKtEffects[i] = 0x0; | |
175 | } | |
176 | ||
177 | fAODfilterBits[0] = -1; | |
178 | fAODfilterBits[1] = -1; | |
179 | } | |
180 | ||
181 | ||
182 | //________________________________________________________________________ | |
183 | AliAnalysisTaskHJetDphi::~AliAnalysisTaskHJetDphi() | |
184 | { | |
185 | //Destructor | |
186 | if(fRandom) delete fRandom; | |
187 | if(fEsdTrkCut) delete fEsdTrkCut; | |
188 | if(fEsdHybCut) delete fEsdHybCut; | |
189 | if(fOutputList) { fOutputList->Delete(); delete fOutputList;} | |
190 | } | |
191 | ||
192 | //________________________________________________________________________ | |
193 | void AliAnalysisTaskHJetDphi::UserCreateOutputObjects() | |
194 | { | |
195 | // Create histograms | |
196 | ||
197 | const Int_t nTrkPtBins = 100; | |
198 | const Float_t lowTrkPtBin=0, upTrkPtBin=100; | |
199 | const Int_t nJetPtBins = 300; | |
200 | const Float_t lowJetPtBin=-100, upJetPtBin=200; | |
201 | ||
202 | // track QA | |
203 | const Int_t dimTrkqa = 4; | |
204 | const Int_t nBinsTrkqa[dimTrkqa] = {nTrkPtBins/5, 36, 40, 10}; | |
205 | const Double_t lowBinTrkqa[dimTrkqa] = {lowTrkPtBin, 0, -1, 0}; | |
206 | const Double_t hiBinTrkqa[dimTrkqa] = {upTrkPtBin, 360, 1, 10}; | |
207 | ||
208 | const Int_t dimTrkRes = 5; | |
209 | const Int_t nBinsTrkRes[dimTrkRes] = {nTrkPtBins, 50, 50, 3, 10}; | |
210 | const Double_t lowBinTrkRes[dimTrkRes] = {lowTrkPtBin, 0, 0, 0, 0}; | |
211 | const Double_t hiBinTrkRes[dimTrkRes] = {upTrkPtBin, 0.5, 0.5, 3, 10}; | |
212 | ||
213 | const Int_t dimPhiRes = 4; | |
214 | const Int_t nBinsPhiRes[dimPhiRes] = {nTrkPtBins, 200, 3, 10}; | |
215 | const Double_t lowBinPhiRes[dimPhiRes] = {lowTrkPtBin, -0.00995, 0, 0}; | |
216 | const Double_t hiBinPhiRes[dimPhiRes] = {upTrkPtBin, 0.01005, 3, 10}; | |
217 | ||
218 | // jet QA | |
219 | const Int_t dimJetpt = 4; | |
220 | const Int_t nBinsJetpt[dimJetpt] = {nJetPtBins, 300, 10, 10}; | |
221 | const Double_t lowBinJetpt[dimJetpt] = {lowJetPtBin, 0, 0, 0}; | |
222 | const Double_t hiBinJetpt[dimJetpt] = {upJetPtBin, 300, 10, 10}; | |
223 | ||
224 | const Int_t dimJetA = 4; | |
225 | const Int_t nBinsJetA[dimJetA] = {nJetPtBins, 100, 10, 10}; | |
226 | const Double_t lowBinJetA[dimJetA] = {lowJetPtBin, 0, 0, 0}; | |
227 | const Double_t hiBinJetA[dimJetA] = {upJetPtBin, 1, 10, 10}; | |
228 | ||
229 | const Int_t dimJetqa = 7; | |
230 | const Int_t nBinsJetqa[dimJetqa] = {nJetPtBins/10, 36, 24, 6, 100, 10, 11}; | |
231 | const Double_t lowBinJetqa[dimJetqa] = {lowJetPtBin, 0, -0.6, 0, 0, 0, 0}; | |
232 | const Double_t hiBinJetqa[dimJetqa] = {upJetPtBin, 360, 0.6, 1.2, 500, 10, 11}; | |
233 | ||
234 | // h-jet analysis | |
235 | const Int_t dimTT = 3; | |
236 | const Int_t nBinsTT[dimTT] = {nTrkPtBins, 10, 11}; | |
237 | const Double_t lowBinTT[dimTT] = {lowTrkPtBin, 0, 0}; | |
238 | const Double_t hiBinTT[dimTT] = {upTrkPtBin, 100, 11}; | |
239 | ||
240 | const Int_t dimCor = 7; | |
241 | const Int_t nBinsCor[dimCor] = {nTrkPtBins, nJetPtBins, 140, 6, 10, 40, 11}; | |
242 | const Double_t lowBinCor[dimCor] = {lowTrkPtBin,lowJetPtBin, pi-4.95, 0, 0, -1.95, 0}; | |
243 | const Double_t hiBinCor[dimCor] = {upTrkPtBin, upJetPtBin, pi+2.05, 1.2, 100, 2.05, 11}; | |
244 | ||
245 | // Leading track QA | |
246 | const Int_t dimLeadTrkqa = 5; | |
247 | const Int_t nBinsLeadTrkqa[dimLeadTrkqa] = {nTrkPtBins, 200, 80, 55, 10}; | |
248 | const Double_t lowBinLeadTrkqa[dimLeadTrkqa] = {lowTrkPtBin, 0, -0.4, 0, 0}; | |
249 | const Double_t hiBinLeadTrkqa[dimLeadTrkqa] = {upTrkPtBin, 200, 0.4, 1.1, 100}; | |
250 | ||
251 | // kt effects | |
252 | const Int_t dimKt = 5; | |
253 | const Int_t nBinsKt[dimKt] = {nTrkPtBins, 20, 81, 10, 11}; | |
254 | const Double_t lowBinKt[dimKt] = {lowTrkPtBin, 0, -40.5, 0, 0}; | |
255 | const Double_t hiBinKt[dimKt] = {upTrkPtBin, 200, 40.5, 10, 11}; | |
256 | ||
aac81e6b | 257 | // Called once |
258 | OpenFile(1); | |
259 | if(!fOutputList) fOutputList = new TList; | |
260 | fOutputList->SetOwner(kTRUE); | |
261 | ||
262 | Bool_t oldStatus = TH1::AddDirectoryStatus(); | |
263 | if(fAnaType==1) TH1::AddDirectory(kFALSE); | |
264 | ||
abe5a06b | 265 | fhEventStat = new TH1F("fhEventStat","Event statistics for jet analysis",8,0,8); |
aac81e6b | 266 | fhEventStat->GetXaxis()->SetBinLabel(1,"All"); |
267 | fhEventStat->GetXaxis()->SetBinLabel(2,"PS"); | |
268 | fhEventStat->GetXaxis()->SetBinLabel(3,"Vtx"); | |
269 | fhEventStat->GetXaxis()->SetBinLabel(4,"Vtx+10cm"); | |
270 | fhEventStat->GetXaxis()->SetBinLabel(5,"kMB"); | |
271 | fhEventStat->GetXaxis()->SetBinLabel(6,"kCentral"); | |
272 | fhEventStat->GetXaxis()->SetBinLabel(7,"kSemiCentral"); | |
abe5a06b | 273 | fhEventStat->GetXaxis()->SetBinLabel(8,"kJetService"); |
aac81e6b | 274 | fOutputList->Add(fhEventStat); |
275 | ||
276 | fhNTrials = new TH1F("fhNTrials","Number of trials",1,0,1); | |
277 | fOutputList->Add(fhNTrials); | |
278 | ||
279 | fhPtHardBins = new TH1F("fhPtHardBins","Number of events in each pT hard bin",11,0,11); | |
280 | fOutputList->Add(fhPtHardBins); | |
281 | ||
282 | const char *triggerName[4] = {"kMB","kEGA","kEJE","MC"}; | |
283 | const char *dataType[3] = {"", "_DL","_PL"}; | |
284 | const char *dataName[3] = {"Data","DL","PL"}; | |
285 | ||
286 | Double_t newbins[7] = {0,0.07,0.2,0.4,0.6,0.8,1}; | |
287 | ||
288 | for(Int_t i=0; i<4; i++) | |
289 | { | |
290 | if( fAnalyzeMCTruth ) | |
291 | { | |
292 | if(i!=3) continue; | |
293 | } | |
294 | else | |
295 | { | |
296 | if( fPeriod=="lhc11a" && i>1 ) continue; | |
297 | if( fPeriod=="lhc10h" && i!=0 ) continue; | |
298 | if( fPeriod=="lhc11h" && i!=0 ) continue; | |
299 | if( fPeriod.Contains("lhc12a15a") && i!=0 ) continue; | |
300 | if( fPeriod.Contains("lhc12a15e") && i!=0 ) continue; | |
301 | } | |
302 | ||
303 | fhVtxZ[i] = new TH1F(Form("%s_fhVtxZ",triggerName[i]),Form("%s: z distribution of event vertexz;z(cm)",triggerName[i]),400,-20,20); | |
304 | fOutputList->Add(fhVtxZ[i]); | |
305 | ||
306 | fhCentrality[i] = new TH1F(Form("%s_fhCentrality",triggerName[i]),Form("%s: Event centrality;centrality",triggerName[i]),100,0,100); | |
307 | fOutputList->Add(fhCentrality[i]); | |
308 | ||
309 | fhRhoVsCent[i] = new TH2F(Form("%s_fhRhoVsCent",triggerName[i]),Form("%s: Rho vs centrality (R=%1.1f);centrality;Rho",triggerName[i],fRadius),100,0,100,300,0,300); | |
310 | fOutputList->Add(fhRhoVsCent[i]); | |
311 | ||
312 | if(fRunTrkQA) | |
313 | { | |
314 | fhTrkPt[i] = new TH2F(Form("%s_fhTrkPt",triggerName[i]),Form("%s: Trigger track p_{T} vs centrality;p_{T}^{Trigger} (GeV/c);Centrality",triggerName[i]),nTrkPtBins,lowTrkPtBin,upTrkPtBin,10,0,100); | |
315 | fOutputList->Add(fhTrkPt[i]); | |
316 | ||
317 | fhTrkQA[i] = new THnSparseF(Form("%s_fhTrkQA",triggerName[i]),Form("%s: track p_{T} vs #phi vs #eta vs centrality;p_{T,track} (GeV/c);#phi;#eta;centrality",triggerName[i]),dimTrkqa,nBinsTrkqa,lowBinTrkqa,hiBinTrkqa); | |
318 | fOutputList->Add(fhTrkQA[i]); | |
319 | ||
320 | fhTrkPtRes[i] = new THnSparseF(Form("%s_fhTrkPtRes",triggerName[i]),Form("%s: track p_{T} vs resolution vs (p_{T}^{gen}-p_{T}^{rec})/p_{T}^{gen} vs type vs centrality;p_{T,track} (GeV/c);#sigma(p_{T})/p_{T};type;centrality",triggerName[i]),dimTrkRes,nBinsTrkRes,lowBinTrkRes,hiBinTrkRes); | |
321 | fOutputList->Add(fhTrkPtRes[i]); | |
322 | ||
323 | fhTrkPhiRes[i] = new THnSparseF(Form("%s_fhTrkPhiRes",triggerName[i]),Form("%s: track p_{T} vs #varphi^{gen}-#varphi^{rec} vs type vs centrality;p_{T,track} (GeV/c);#Delta#varphi;type;centrality",triggerName[i]),dimPhiRes,nBinsPhiRes,lowBinPhiRes,hiBinPhiRes); | |
324 | fOutputList->Add(fhTrkPhiRes[i]); | |
325 | } | |
326 | ||
327 | for(Int_t j=0; j<3; j++) | |
328 | { | |
329 | if(!fRunDLHJet && j==1) continue; | |
330 | if(!fRunPLHJet && j==2) continue; | |
331 | if(fRunJetQA) | |
332 | { | |
333 | fhJetPt[i][j] = new THnSparseF(Form("%s_fhJetPt%s",triggerName[i],dataType[j]),Form("%s-%s: jet p_{T} vs raw jet p_{T} vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);p_{T,jet}^{raw} (GeV/c);centrality;ptHardBin",dataName[j],triggerName[i],fRadius),dimJetpt,nBinsJetpt,lowBinJetpt,hiBinJetpt); | |
334 | fOutputList->Add(fhJetPt[i][j]); | |
335 | ||
336 | fhJetArea[i][j] = new THnSparseF(Form("%s_fhJetArea%s",triggerName[i],dataType[j]),Form("%s-%s: jet p_{T} vs area vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);area;centrality;ptHardBin",dataName[j],triggerName[i],fRadius),dimJetA,nBinsJetA,lowBinJetA,hiBinJetA); | |
337 | fOutputList->Add(fhJetArea[i][j]); | |
338 | ||
339 | fhJetQA[i][j] = new THnSparseF(Form("%s_fhJetQA%s",triggerName[i],dataType[j]),Form("%s-%s: jet p_{T} vs #phi vs #eta vs area vs # of constituents vs centrality vs pt hard bin (R=%1.1f);p_{T,jet}^{ch} (GeV/c);#phi;#eta;area;# of constituents;centrality;ptHardBin",dataName[j],triggerName[i],fRadius),dimJetqa,nBinsJetqa,lowBinJetqa,hiBinJetqa); | |
340 | fhJetQA[i][j]->SetBinEdges(3,newbins); | |
341 | fOutputList->Add(fhJetQA[i][j]); | |
342 | } | |
343 | ||
344 | if(fRunSingleInclHJet) | |
345 | { | |
346 | fhTTPt[i][j] = new THnSparseF(Form("%s_fhTTPt%s",triggerName[i],dataType[j]),Form("%s-%s: TT p_{T} vs centrality vs pT hard bin;p_{T,TT}^{ch} (GeV/c);centrality;ptHardBin",dataName[j],triggerName[i]),dimTT,nBinsTT,lowBinTT,hiBinTT); | |
347 | fOutputList->Add(fhTTPt[i][j]); | |
348 | ||
349 | fHJetPhiCorr[i][j] = new THnSparseF(Form("%s_fHJetPhiCorr%s",triggerName[i],dataType[j]),Form("%s-%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin",dataName[j],triggerName[i],fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor); | |
350 | fHJetPhiCorr[i][j]->SetBinEdges(3,newbins); | |
351 | fOutputList->Add(fHJetPhiCorr[i][j]); | |
352 | } | |
353 | } | |
354 | ||
355 | ||
356 | if(fRunSingleInclHJet) | |
357 | { | |
358 | fhNumberOfTT[i] = new TH1F(Form("%s_fhNumberOfTT",triggerName[i]), Form("%s: number of TT",triggerName[i]),6,0,6); | |
359 | fOutputList->Add(fhNumberOfTT[i]); | |
360 | ||
aac81e6b | 361 | |
0330533a | 362 | if(fRunBkgFlow) |
363 | { | |
364 | fHJetPhiCorrUp[i] = new THnSparseF(Form("%s_fHJetPhiCorrUp",triggerName[i]),Form("%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin",triggerName[i],fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor); | |
365 | fOutputList->Add(fHJetPhiCorrUp[i]); | |
366 | ||
367 | fHJetPhiCorrDown[i] = new THnSparseF(Form("%s_fHJetPhiCorrDown",triggerName[i]),Form("%s: single inclusive TT p_{T} vs recoil jet p_{T} vs #Delta#varphi vs area vs centrality vs #Delta#eta vs pt hard bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);#Delta#varphi;area;centrality;#Delta#eta;ptHardBin",triggerName[i],fRadius),dimCor,nBinsCor,lowBinCor,hiBinCor); | |
368 | fOutputList->Add(fHJetPhiCorrDown[i]); | |
369 | } | |
aac81e6b | 370 | } |
371 | ||
372 | if(fRunLeadTrkQA) | |
373 | { | |
374 | fhLeadTrkQA[i] = new THnSparseF(Form("%s_fhLeadTrkQA",triggerName[i]),Form("%s: p_{T,trk}^{leading} vs p_{T,jet}^{full} vs #Delta#varphi vs z vs centrality;p_{T,trk}^{leading} (GeV/c); p_{T,jet}^{full} (GeV/c);#Delta#varphi;z;centrality",triggerName[i]),dimLeadTrkqa,nBinsLeadTrkqa,lowBinLeadTrkqa,hiBinLeadTrkqa); | |
375 | fOutputList->Add(fhLeadTrkQA[i]); | |
376 | } | |
377 | ||
378 | if(fStudyKtEffects) | |
379 | { | |
380 | fhKtEffects[i] = new THnSparseF(Form("%s_fhKtEffects",triggerName[i]),Form("%s: TT p_{T} vs recoil jet p_{T} vs k_{t} vs centrality vs pt hard bin (R=%1.1f);TT p_{T} (GeV/c);p_{T,jet}^{ch} (GeV/c);k_{t} (GeV/c);centrality;ptHardBin",triggerName[i],fRadius),dimKt,nBinsKt,lowBinKt,hiBinKt); | |
381 | fOutputList->Add(fhKtEffects[i]); | |
382 | } | |
383 | } | |
384 | ||
385 | //error calculation in THnSparse | |
386 | Int_t nObj = fOutputList->GetEntries(); | |
387 | for(Int_t i=0; i<nObj; i++) | |
388 | { | |
389 | TObject *obj = (TObject*) fOutputList->At(i); | |
390 | if (obj->IsA()->InheritsFrom( "THnSparse" )) | |
391 | { | |
392 | THnSparseF *hn = (THnSparseF*)obj; | |
393 | hn->Sumw2(); | |
394 | } | |
395 | } | |
396 | ||
397 | if(fRunTrkQA) | |
398 | { | |
399 | fEsdTrkCut = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE,1); | |
400 | fEsdTrkCut->SetMaxDCAToVertexXY(2.4); | |
401 | fEsdTrkCut->SetMaxDCAToVertexZ(3.2); | |
402 | fEsdTrkCut->SetDCAToVertex2D(kTRUE); | |
403 | fEsdTrkCut->SetMaxChi2TPCConstrainedGlobal(36); | |
404 | fEsdTrkCut->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); | |
405 | ||
406 | fEsdHybCut = new AliESDtrackCuts(*fEsdTrkCut); | |
407 | fEsdHybCut->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone); | |
408 | } | |
409 | ||
410 | fRandom = new TRandom3(0); | |
411 | ||
412 | PrintConfig(); | |
413 | ||
414 | if(fAnaType==1) TH1::AddDirectory(oldStatus); | |
415 | PostData(1, fOutputList); | |
416 | } | |
417 | ||
418 | //________________________________________________________________________ | |
419 | Bool_t AliAnalysisTaskHJetDphi::UserNotify() | |
420 | { | |
421 | AliInfo("User Nofity"); | |
422 | ||
423 | Int_t runNumber = InputEvent()->GetRunNumber(); | |
424 | if(fSwitchOnAvoidTpcHole) | |
425 | { | |
426 | Int_t runs[28] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 170270, 170306, 170308, 170309}; | |
427 | Bool_t isSemigood = kFALSE; | |
428 | for(Int_t i=0; i<28; i++) | |
429 | { | |
430 | if(runNumber==runs[i]) | |
431 | { | |
432 | isSemigood = kTRUE; | |
433 | break; | |
434 | } | |
435 | } | |
436 | if(isSemigood) fAvoidTpcHole = kTRUE; | |
437 | else fAvoidTpcHole = kFALSE; | |
438 | } | |
439 | ||
440 | if(fIsMC) | |
441 | { | |
442 | TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree(); | |
443 | TFile *currFile = tree->GetCurrentFile(); | |
444 | TString fileName(currFile->GetName()); | |
445 | if(fileName.Contains("root_archive.zip#")) | |
446 | { | |
447 | Ssiz_t pos = fileName.Index("#",0,TString::kExact); | |
448 | fileName.Replace(pos+1,20,""); | |
449 | } | |
450 | else | |
451 | { | |
452 | fileName.ReplaceAll(gSystem->BaseName(fileName.Data()),""); | |
453 | } | |
454 | ||
455 | TFile *fxsec = TFile::Open(Form("%s%s",fileName.Data(),"pyxsec_hists.root"),"read"); | |
456 | if(fxsec) | |
457 | { | |
458 | TKey *key = (TKey*)fxsec->GetListOfKeys()->At(0); | |
459 | if(key) | |
460 | { | |
461 | TList *list = dynamic_cast<TList*>(key->ReadObj()); | |
462 | if(list) | |
463 | { | |
464 | fhNTrials->Fill(0.5, ((TH1F*)list->FindObject("h1Trials"))->GetBinContent(1)); | |
465 | } | |
466 | else | |
467 | return kFALSE; | |
468 | } | |
469 | else | |
470 | return kFALSE; | |
471 | } | |
472 | else | |
473 | { | |
474 | fxsec = TFile::Open(Form("%s%s",fileName.Data(),"pyxsec.root"),"read"); | |
475 | TTree *xtree = (TTree*)fxsec->Get("Xsection"); | |
476 | if(xtree) | |
477 | { | |
478 | UInt_t ntrials = 0; | |
479 | xtree->SetBranchAddress("ntrials",&ntrials); | |
480 | xtree->GetEntry(0); | |
481 | fhNTrials->Fill(0.5, ntrials); | |
482 | } | |
483 | else | |
484 | return kFALSE; | |
485 | } | |
486 | fxsec->Close(); | |
487 | } | |
488 | return kTRUE; | |
489 | } | |
490 | ||
491 | //________________________________________________________________________ | |
492 | void AliAnalysisTaskHJetDphi::UserExec(Option_t *) | |
493 | { | |
494 | // Main loop, called for each event. | |
495 | ||
496 | fTriggerType = -1; | |
497 | ||
498 | // Get pointers to input events | |
499 | fEvent = InputEvent(); | |
500 | if (!fEvent) | |
501 | { | |
502 | AliError("Input event not available"); | |
503 | return; | |
504 | } | |
505 | ||
506 | if(fIsMC) | |
507 | { | |
508 | fMC = MCEvent(); | |
509 | if (!fMC) | |
510 | { | |
511 | AliError("MC event available"); | |
512 | return; | |
513 | } | |
514 | } | |
515 | ||
516 | fESD=dynamic_cast<AliESDEvent*>(InputEvent()); | |
517 | if (!fESD) | |
518 | { | |
aac81e6b | 519 | fAODIn = dynamic_cast<AliAODEvent*>(InputEvent()); |
520 | } | |
0330533a | 521 | else |
522 | { | |
523 | if(fAnaType==1) fEvent = AODEvent(); | |
524 | } | |
aac81e6b | 525 | if(fAnaType==1) |
526 | { | |
527 | fAODOut = dynamic_cast<AliAODEvent*>(AODEvent()); | |
528 | if(fNonStdFile.Length()!=0) | |
529 | { | |
530 | // case that we have an AOD extension we need can fetch the jets from the extended output | |
531 | AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); | |
532 | fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0); | |
533 | if(!fAODExtension) | |
534 | { | |
535 | if(fVerbosity>1) printf("AODExtension not found for %s",fNonStdFile.Data()); | |
536 | } | |
537 | } | |
538 | } | |
539 | ||
540 | fhEventStat->Fill(0.5); | |
541 | ||
0330533a | 542 | if(fVerbosity>1) |
543 | { | |
49bf6461 | 544 | TList *list = 0x0; |
545 | if(fAnaType==0) list = fEvent->GetList(); | |
546 | else list = fAODOut->GetList(); | |
0330533a | 547 | for(Int_t i=0; i<list->GetEntries(); i++) |
548 | { | |
549 | TObject *obj = (TObject*)list->At(i); | |
550 | cout<<i<<": "<<obj->GetName()<<" : "<<obj->ClassName()<<endl; | |
551 | } | |
552 | } | |
553 | // Retrieve arraies from memory | |
554 | if(!fIsInit) fIsInit = RetrieveArraies(); | |
555 | if(!fIsInit) return; | |
556 | ||
aac81e6b | 557 | if(fIsEmbedding) |
558 | { | |
559 | if(fAnaType==0) | |
560 | { | |
561 | TString fileName = fPtHardBinName->GetString(); | |
562 | fileName.Remove(0,51); | |
563 | fileName.Remove(fileName.Index("/")); | |
564 | fPtHardBin = fileName.Atoi(); | |
565 | } | |
566 | if(fAnaType==1) | |
567 | { | |
568 | Double_t pthard = AliAnalysisTaskFastEmbedding::GetPtHard(); | |
569 | fPtHardBin = GetPtHardBin(pthard); | |
570 | } | |
571 | } | |
572 | ||
573 | // physics selection | |
574 | UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); | |
575 | if(fOfflineTrgMask==AliVEvent::kAny) fTriggerType = 0; | |
576 | else | |
577 | { | |
578 | if(trigger & fOfflineTrgMask) fTriggerType=0; | |
579 | ||
580 | if(fPeriod.Contains("lhc11a",TString::kIgnoreCase)) | |
581 | { | |
582 | if (trigger & AliVEvent::kMB) { fTriggerType=0; } | |
583 | if (trigger & AliVEvent::kEMC1) { fTriggerType=1; } | |
584 | } | |
585 | } | |
586 | if(fTriggerType==-1) return; | |
587 | if(fAnalyzeMCTruth) fTriggerType = 3; | |
588 | fhEventStat->Fill(1.5); | |
589 | ||
590 | // Vertex cut | |
591 | const AliVVertex* vtx = fEvent->GetPrimaryVertex(); | |
592 | if (!vtx || vtx->GetNContributors()<1) return; | |
593 | fhEventStat->Fill(2.5); | |
594 | fhVtxZ[fTriggerType]->Fill(vtx->GetZ()); | |
595 | if (TMath::Abs(vtx->GetZ())>fMaxVtxZ) return; | |
596 | fhEventStat->Fill(3.5); | |
597 | ||
598 | if(fTriggerType==0) | |
599 | { | |
600 | if(trigger & AliVEvent::kCentral) fhEventStat->Fill(5.5); | |
601 | else if (trigger & AliVEvent::kCentral) fhEventStat->Fill(6.5); | |
602 | else fhEventStat->Fill(4.5); | |
603 | } | |
abe5a06b CL |
604 | |
605 | if(!AliAnalysisHelperJetTasks::Selected()) return; | |
606 | fhEventStat->Fill(7.5); | |
aac81e6b | 607 | |
608 | // GetCentrality | |
609 | if(fCollisionSystem=="PbPb") | |
610 | { | |
611 | AliCentrality *centrality = fEvent->GetCentrality(); | |
612 | if (centrality) fCentrality = centrality->GetCentralityPercentile("V0M"); | |
613 | else fCentrality = 99; | |
614 | } | |
615 | else if(fCollisionSystem=="pp") | |
616 | fCentrality = 0; | |
617 | fhCentrality[fTriggerType]->Fill(fCentrality); | |
618 | ||
aac81e6b | 619 | // Get Rho value |
620 | if(fCollisionSystem=="PbPb") | |
621 | { | |
622 | if(fAnaType==0) fRhoValue = fRho->GetVal(); | |
623 | if(fAnaType==1) fRhoValue = fEvtBkg->GetBackground(0); | |
624 | } | |
625 | else if(fCollisionSystem=="pp") | |
626 | { | |
627 | fRhoValue = 0; | |
628 | } | |
629 | fhRhoVsCent[fTriggerType]->Fill(fCentrality,fRhoValue); | |
630 | fhPtHardBins->Fill(fPtHardBin); | |
631 | ||
632 | if(fRunSingleInclHJet) | |
633 | { | |
634 | Double_t trigPt = -1, trigPhi = -999, trigEta = -999; | |
635 | Int_t nTrig = FindSingleIncTrigger(fTrackArray, trigPt, trigPhi, trigEta, fIsEmbedding); | |
636 | if(nTrig>0) fhNumberOfTT[fTriggerType]->Fill(nTrig); | |
637 | RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue, fhTTPt[fTriggerType][0], fHJetPhiCorr[fTriggerType][0]); | |
638 | if(fRunBkgFlow) | |
639 | { | |
640 | RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue+1, 0x0, fHJetPhiCorrUp[fTriggerType]); | |
641 | RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fJetArray, fRhoValue-1, 0x0, fHJetPhiCorrDown[fTriggerType]); | |
642 | } | |
643 | ||
644 | if(fIsEmbedding) | |
645 | { | |
646 | if(fRunDLHJet) | |
647 | { | |
648 | FindSingleIncTrigger(fTrackArray, trigPt, trigPhi, trigEta, 1); | |
649 | RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fDLJetArray, 0, fhTTPt[fTriggerType][1], fHJetPhiCorr[fTriggerType][1]); | |
650 | } | |
651 | ||
652 | if(fRunPLHJet) | |
653 | { | |
654 | FindSingleIncTrigger(fMcParticleArray, trigPt, trigPhi, trigEta, 2); | |
655 | RunSingleInclHJetCorr(trigPt, trigPhi, trigEta, fPLJetArray, 0, fhTTPt[fTriggerType][2], fHJetPhiCorr[fTriggerType][2]); | |
656 | } | |
657 | } | |
658 | } | |
659 | ||
660 | if(fRunJetQA) | |
661 | { | |
662 | RunJetQA(fJetArray, fRhoValue, fhJetPt[fTriggerType][0], fhJetArea[fTriggerType][0], fhJetQA[fTriggerType][0]); | |
663 | if(fIsEmbedding) | |
664 | { | |
665 | if(fRunDLHJet) RunJetQA(fDLJetArray, 0, fhJetPt[fTriggerType][1], fhJetArea[fTriggerType][1], fhJetQA[fTriggerType][1]); | |
666 | if(fRunPLHJet) RunJetQA(fPLJetArray, 0, fhJetPt[fTriggerType][2], fhJetArea[fTriggerType][2], fhJetQA[fTriggerType][2]); | |
667 | } | |
668 | } | |
669 | ||
670 | if(!fIsEmbedding) | |
671 | { | |
672 | if(fRunTrkQA) RunTrackQA(); | |
673 | if(fRunLeadTrkQA) RunLeadTrkQA(); | |
674 | } | |
675 | ||
676 | if(fStudyKtEffects) StudyKtEffects(); | |
677 | ||
678 | PostData(1, fOutputList); | |
679 | return; | |
680 | } | |
681 | ||
682 | //________________________________________________________________________ | |
683 | Int_t AliAnalysisTaskHJetDphi::FindSingleIncTrigger(const TClonesArray *trackArray, Double_t &trigPt, Double_t &trigPhi, Double_t &trigEta, const Int_t arrayType) | |
684 | { | |
685 | Int_t trigIndex = -1; | |
686 | trigPt = -1; | |
687 | trigPhi = -999; | |
688 | trigEta = -999; | |
689 | ||
690 | // arrayType: 0 -> data, 1 -> embedding, 2 -> MC | |
691 | if(!trackArray) return 0; | |
692 | ||
693 | Int_t nTT = 0, counter = 0; | |
694 | Int_t ntracks = trackArray->GetEntries(); | |
695 | TArrayI arr; | |
696 | arr.Set(ntracks); | |
697 | for(Int_t it=0; it<ntracks; it++) | |
698 | { | |
699 | AliVParticle *t = dynamic_cast<AliVParticle*>(trackArray->At(it)); | |
700 | if(!t || t->Charge()==0 || !AcceptTrack(t)) continue; | |
701 | ||
702 | if(fAnaType==0 && arrayType==1 && t->GetLabel()==0) continue; | |
703 | ||
704 | if(fAnaType==1 && arrayType<2 && !IsGoodAODtrack(t) ) continue; | |
705 | ||
706 | Double_t pt = t->Pt(); | |
707 | if(fTTtype==0) | |
708 | { | |
709 | if (pt<fTTMaxPt && pt>=fTTMinPt) | |
710 | { | |
711 | nTT++; | |
712 | arr.AddAt(it,counter); | |
713 | counter++; | |
714 | } | |
715 | } | |
716 | } | |
717 | arr.Set(counter); | |
718 | ||
719 | if(fTTtype==0) | |
720 | { | |
721 | if(counter==0) trigIndex = -1; | |
722 | else if(counter==1) trigIndex = arr.At(0); | |
723 | else | |
724 | { | |
725 | fRandom->SetSeed(arr.At(0)); //make this random selection reproducible | |
726 | Double_t pro = fRandom->Uniform() * counter; | |
727 | trigIndex = arr.At(TMath::FloorNint(pro)); | |
728 | } | |
729 | arr.Reset(); | |
730 | } | |
731 | ||
0330533a | 732 | if(trigIndex>-1) |
aac81e6b | 733 | { |
734 | AliVParticle *tt = (AliVParticle*) fTrackArray->At(trigIndex); | |
735 | trigPt = tt->Pt(); | |
736 | trigPhi = tt->Phi(); | |
737 | trigEta = tt->Eta(); | |
738 | if(fSwitchOnAvoidTpcHole && fAvoidTpcHole && trigPhi>3.91-pi && trigPhi<5.51-pi) trigIndex = -1; | |
739 | ||
740 | if(fCutTPCBoundary) | |
741 | { | |
742 | Double_t phiDist = trigPhi - TMath::FloorNint(trigPhi/kSector)*kSector; | |
743 | if(phiDist<fDistToTPCBoundary || phiDist>kSector-fDistToTPCBoundary) | |
744 | { | |
745 | trigIndex = -1; | |
746 | } | |
747 | } | |
748 | } | |
0330533a | 749 | |
aac81e6b | 750 | if(trigIndex==-1) { trigPt = -1; trigPhi = -999; trigEta = -999;} |
0330533a | 751 | if(arrayType<2) fTriggerTrkIndex = trigIndex; |
aac81e6b | 752 | return nTT; |
753 | } | |
754 | ||
755 | //________________________________________________________________________ | |
756 | void AliAnalysisTaskHJetDphi::RunSingleInclHJetCorr(Double_t trigPt, Double_t trigPhi, Double_t trigEta, const TClonesArray *jetArray, Double_t rho, THnSparse *hTT, THnSparse *hn) | |
757 | { | |
758 | if(trigPt<0 || !fJetArray) return; | |
759 | ||
760 | if(hTT) | |
761 | { | |
0330533a | 762 | Double_t fillTT[] = {trigPt, fCentrality, (Double_t)fPtHardBin}; |
aac81e6b | 763 | hTT->Fill(fillTT); |
764 | } | |
765 | ||
766 | Int_t nJets = jetArray->GetEntries(); | |
0330533a | 767 | Double_t jetPt = 0, jetEta = 0, jetPhi = 0, jetArea = 0; |
aac81e6b | 768 | for(Int_t ij=0; ij<nJets; ij++) |
769 | { | |
770 | if(fAnaType==0) | |
771 | { | |
772 | AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(jetArray->At(ij)); | |
773 | jetPt = jet->Pt(); | |
774 | jetEta = jet->Eta(); | |
775 | jetPhi = jet->Phi(); | |
776 | jetArea = jet->Area(); | |
777 | } | |
0330533a | 778 | else if(fAnaType==1) |
aac81e6b | 779 | { |
780 | AliAODJet* jet = dynamic_cast<AliAODJet*>(jetArray->At(ij)); | |
781 | jetPt = jet->Pt(); | |
782 | jetEta = jet->Eta(); | |
783 | jetPhi = jet->Phi(); | |
784 | jetArea = jet->EffectiveAreaCharged(); | |
785 | } | |
0330533a | 786 | else |
787 | return; | |
aac81e6b | 788 | if(!IsGoodJet(jetEta)) continue; // eta cut |
789 | Double_t dPhi = CalculateDPhi(trigPhi,jetPhi); | |
790 | ||
791 | Double_t jetPtCorr = jetPt-rho*jetArea; | |
792 | if(jetPtCorr>fJetPtMin) | |
793 | { | |
0330533a | 794 | Double_t fill[] = {trigPt,jetPtCorr,dPhi,jetArea,fCentrality,trigEta-jetEta, (Double_t)fPtHardBin}; |
aac81e6b | 795 | hn->Fill(fill); |
796 | } | |
797 | } | |
798 | } | |
799 | ||
800 | ||
801 | //________________________________________________________________________ | |
802 | void AliAnalysisTaskHJetDphi::RunTrackQA() | |
803 | { | |
804 | if(fIsEmbedding) return; | |
805 | if(!fTrackArray) return; | |
806 | ||
807 | Int_t ntracks = fTrackArray->GetEntries(); | |
808 | for(Int_t it=0; it<ntracks; it++) | |
809 | { | |
810 | AliVParticle *t = dynamic_cast<AliVParticle*>(fTrackArray->At(it)); | |
811 | if(!t || t->Charge()==0 || !AcceptTrack(t)) continue; | |
812 | if(fAnaType==1 && !IsGoodAODtrack(t)) continue; | |
813 | fhTrkPt[fTriggerType]->Fill(t->Pt(),fCentrality); | |
814 | Double_t phi = t->Phi(); | |
815 | if(phi<0) phi += 2*pi; | |
816 | Double_t fill[] = {t->Pt(), phi*TMath::RadToDeg(), t->Eta(), fCentrality}; | |
817 | fhTrkQA[fTriggerType]->Fill(fill); | |
818 | } | |
819 | ||
820 | if(fESD) | |
821 | { | |
822 | Int_t ntrack = fESD->GetNumberOfTracks(); | |
823 | for(Int_t itr=0; itr<ntrack; itr++) | |
824 | { | |
825 | AliESDtrack *esdtrack = fESD->GetTrack(itr); | |
826 | if(!esdtrack || TMath::Abs(esdtrack->Eta())>0.9 )continue; | |
827 | Int_t type = -1; | |
828 | if(fEsdTrkCut->AcceptTrack(esdtrack)) | |
829 | type = 0; | |
830 | else if(fEsdHybCut->AcceptTrack(esdtrack)) | |
831 | type = 1; | |
832 | else | |
833 | continue; | |
834 | ||
835 | Double_t resolution = -1; | |
836 | Int_t label = esdtrack->GetLabel(); | |
837 | if(label>0 && fMC) | |
838 | { | |
839 | AliMCParticle *part = (AliMCParticle*)fMC->GetTrack(label); | |
840 | TParticle *tpart = (TParticle*)part->Particle(); | |
841 | if(TMath::Abs(tpart->GetPdgCode())==211) | |
842 | { | |
0330533a | 843 | Double_t fillPhiRes[] = {esdtrack->Pt(),part->Phi()-esdtrack->Phi(),(Double_t)type,fCentrality}; |
aac81e6b | 844 | fhTrkPhiRes[fTriggerType]->Fill(fillPhiRes); |
845 | } | |
846 | resolution = (part->Pt()-esdtrack->Pt())/part->Pt(); | |
847 | } | |
0330533a | 848 | Double_t fillPtRes[] = {esdtrack->Pt(),esdtrack->Pt()*TMath::Sqrt(esdtrack->GetSigma1Pt2()),resolution,(Double_t)type,fCentrality}; |
aac81e6b | 849 | fhTrkPtRes[fTriggerType]->Fill(fillPtRes); |
850 | } | |
851 | } | |
852 | else if(fAODIn) | |
853 | { | |
854 | ntracks = fAODIn->GetNumberOfTracks(); | |
855 | Int_t type = -1; | |
856 | for(Int_t itrack=0; itrack<ntracks; itrack++) | |
857 | { | |
858 | AliAODTrack *aodtrack = (AliAODTrack*)fAODIn->GetTrack(itrack); | |
859 | if(!aodtrack || !AcceptTrack(dynamic_cast<AliVParticle*>(aodtrack)) ) continue; | |
860 | if (fAODfilterBits[0] < 0) | |
861 | { | |
862 | if (aodtrack->IsHybridGlobalConstrainedGlobal()) | |
863 | type = 3; | |
864 | else | |
865 | continue; | |
866 | } | |
867 | else | |
868 | { | |
869 | if (aodtrack->TestFilterBit(fAODfilterBits[0])) type = 0; | |
870 | else if (aodtrack->TestFilterBit(fAODfilterBits[1]) && (aodtrack->GetStatus()&AliESDtrack::kITSrefit)!=0) type = 1; | |
871 | else continue; | |
872 | } | |
873 | Double_t sigma1Pt2 = GetAODTrackPtRes(aodtrack); | |
874 | Double_t resolution = -1; | |
875 | Int_t label = aodtrack->GetLabel(); | |
876 | if(label>0 && fMC) | |
877 | { | |
878 | AliMCParticle *part = (AliMCParticle*)fMC->GetTrack(label); | |
879 | resolution = (part->Pt()-aodtrack->Pt())/part->Pt(); | |
0330533a | 880 | Double_t fillPhiRes[] = {aodtrack->Pt(),part->Phi()-aodtrack->Phi(),(Double_t)type,fCentrality}; |
aac81e6b | 881 | fhTrkPhiRes[fTriggerType]->Fill(fillPhiRes); |
882 | } | |
883 | if(sigma1Pt2>0) | |
884 | { | |
0330533a | 885 | Double_t fillPtRes[5] = {aodtrack->Pt(),aodtrack->Pt()*TMath::Sqrt(sigma1Pt2),resolution,(Double_t)type,fCentrality}; |
aac81e6b | 886 | fhTrkPtRes[fTriggerType]->Fill(fillPtRes); |
887 | } | |
888 | } | |
889 | } | |
890 | } | |
891 | ||
892 | //________________________________________________________________________ | |
893 | void AliAnalysisTaskHJetDphi::RunJetQA(const TClonesArray *jetArray, const Double_t rho, THnSparse *hJetPt, THnSparse *hJetArea, THnSparse *hJetQA) | |
894 | { | |
895 | Int_t nJets = jetArray->GetEntries(); | |
0330533a | 896 | Double_t jetPt = 0, jetEta = 0, jetPhi = 0, jetArea = 0, jetPtCorr = 0; |
897 | Int_t nCons = 0; | |
aac81e6b | 898 | for(Int_t ij=0; ij<nJets; ij++) |
899 | { | |
900 | if(fAnaType==0) | |
901 | { | |
902 | AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(jetArray->At(ij)); | |
903 | jetPt = jet->Pt(); | |
904 | jetEta = jet->Eta(); | |
905 | jetPhi = jet->Phi(); | |
906 | jetArea = jet->Area(); | |
907 | nCons = jet->GetNumberOfConstituents(); | |
908 | } | |
0330533a | 909 | else if(fAnaType==1) |
aac81e6b | 910 | { |
911 | AliAODJet* jet = dynamic_cast<AliAODJet*>(jetArray->At(ij)); | |
912 | jetPt = jet->Pt(); | |
913 | jetEta = jet->Eta(); | |
914 | jetPhi = jet->Phi(); | |
915 | jetArea = jet->EffectiveAreaCharged(); | |
916 | nCons = jet->GetRefTracks()->GetEntriesFast(); | |
917 | } | |
0330533a | 918 | else |
919 | return; | |
aac81e6b | 920 | if(!IsGoodJet(jetEta)) continue; // eta cut |
921 | ||
922 | jetPtCorr = jetPt-rho*jetArea; | |
0330533a | 923 | Double_t fillPt[] = {jetPtCorr, jetPt, fCentrality, (Double_t)fPtHardBin}; |
aac81e6b | 924 | hJetPt->Fill(fillPt); |
925 | ||
0330533a | 926 | Double_t fillA[] = {jetPtCorr, jetArea, fCentrality, (Double_t)fPtHardBin}; |
aac81e6b | 927 | hJetArea->Fill(fillA); |
928 | ||
929 | if(jetPtCorr>fJetPtMin) | |
930 | { | |
0330533a | 931 | Double_t fillQA[] = {jetPtCorr, jetPhi*TMath::RadToDeg(), jetEta, jetArea, (Double_t)nCons, fCentrality, (Double_t)fPtHardBin}; |
aac81e6b | 932 | hJetQA->Fill(fillQA); |
933 | } | |
934 | } | |
935 | } | |
936 | ||
937 | ||
938 | //________________________________________________________________________ | |
939 | void AliAnalysisTaskHJetDphi::RunLeadTrkQA() | |
940 | { | |
941 | if(fIsEmbedding || fTriggerTrkIndex<0) return; | |
942 | Double_t jetPt = -1, jetPhi = -999; | |
943 | ||
944 | if(fAnaType==0) | |
945 | { | |
946 | Int_t nJets = fJetArray->GetEntries(); | |
947 | for(Int_t ij=0; ij<nJets; ij++) | |
948 | { | |
949 | AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fJetArray->At(ij)); | |
950 | if(!IsGoodJet(jet->Eta())) continue; // eta cut | |
951 | for (Int_t i = 0; i < jet->GetNumberOfTracks(); i++) | |
952 | { | |
953 | if(jet->TrackAt(i)==fTriggerTrkIndex) | |
954 | { | |
955 | jetPt = jet->Pt(); | |
956 | jetPhi = jet->Phi(); | |
957 | break; | |
958 | } | |
959 | } | |
960 | } | |
961 | } | |
962 | if(fAnaType==1) | |
963 | { | |
964 | jetPt = -1; | |
965 | } | |
966 | ||
967 | ||
968 | if(jetPt<=0) return; | |
969 | AliVParticle *tt = (AliVParticle*) fTrackArray->At(fTriggerTrkIndex); | |
970 | Double_t fill[] = {tt->Pt(), jetPt, tt->Phi()-jetPhi, tt->Pt()/jetPt, fCentrality}; | |
971 | fhLeadTrkQA[fTriggerType]->Fill(fill); | |
972 | } | |
973 | ||
974 | ||
975 | //________________________________________________________________________ | |
976 | void AliAnalysisTaskHJetDphi::StudyKtEffects() | |
977 | { | |
978 | if(fAnaType==1) return; | |
979 | if(fTriggerTrkIndex<0) return; | |
980 | ||
981 | fKtValue = 0; // dummy | |
982 | ||
0330533a | 983 | |
aac81e6b | 984 | AliPicoTrack *tt = (AliPicoTrack*) fTrackArray->At(fTriggerTrkIndex); |
985 | Double_t triggerPhi = tt->GetTrackPhiOnEMCal(); | |
986 | ||
987 | Int_t nJets = fDLJetArray->GetEntries(); | |
aac81e6b | 988 | for(Int_t ij=0; ij<nJets; ij++) |
989 | { | |
990 | AliEmcalJet* jet = dynamic_cast<AliEmcalJet*>(fDLJetArray->At(ij)); | |
991 | if(!IsGoodJet(jet->Eta())) continue; // eta cut | |
0330533a | 992 | Double_t jetPhi = jet->Phi(); |
993 | Double_t jetPt = jet->Pt(); | |
994 | Double_t dPhi = CalculateDPhi(triggerPhi,jetPhi); | |
aac81e6b | 995 | if(dPhi<pi+0.6 && dPhi>pi-0.6) |
996 | { | |
0330533a | 997 | Double_t fill[] = {tt->Pt(), jetPt, jetPt*TMath::Tan(tt->GetTrackPtOnEMCal()), fCentrality, (Double_t)fPtHardBin}; |
aac81e6b | 998 | fhKtEffects[fTriggerType]->Fill(fill); |
999 | } | |
1000 | } | |
1001 | } | |
1002 | ||
1003 | ||
1004 | //________________________________________________________________________ | |
1005 | Bool_t AliAnalysisTaskHJetDphi::RetrieveArraies() | |
1006 | { | |
1007 | if(fAnaType==0) | |
1008 | { | |
1009 | // Get mc particles | |
1010 | if (!fMcParticleArrName.IsNull()) | |
1011 | { | |
1012 | AliInfo(Form("Retrieve mc particles %s!", fMcParticleArrName.Data())); | |
1013 | fMcParticleArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fMcParticleArrName)); | |
1014 | if (!fMcParticleArray) | |
1015 | { | |
1016 | AliError(Form("Could not retrieve mc particles %s!", fMcParticleArrName.Data())); | |
1017 | return kFALSE; | |
1018 | } | |
1019 | ||
1020 | TString fMcParticleMapArrName = fMcParticleArrName + "_Map"; | |
1021 | fMcParticlelMap = dynamic_cast<AliNamedArrayI*>(fEvent->FindListObject(fMcParticleMapArrName)); | |
1022 | if (!fMcParticlelMap) | |
1023 | { | |
1024 | AliWarning(Form("%s: Could not retrieve map for MC particles %s! Will assume MC labels consistent with indexes...", GetName(), fMcParticleArrName.Data())); | |
1025 | return kFALSE; | |
1026 | } | |
1027 | } | |
1028 | ||
1029 | // Get track collection | |
1030 | if (!fTrackArrName.IsNull()) | |
1031 | { | |
1032 | AliInfo(Form("Retrieve tracks %s!", fTrackArrName.Data())); | |
1033 | fTrackArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fTrackArrName)); | |
1034 | if (!fTrackArray) | |
1035 | { | |
1036 | AliError(Form("Could not retrieve tracks %s!", fTrackArrName.Data())); | |
1037 | return kFALSE; | |
1038 | } | |
1039 | } | |
1040 | ||
1041 | // Get mixed track collection | |
1042 | if (!fEmbTrkArrName.IsNull()) | |
1043 | { | |
1044 | AliInfo(Form("Retrieve PYTHIA+PbPb tracks %s!", fEmbTrkArrName.Data())); | |
1045 | fEmbTrkArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fEmbTrkArrName)); | |
1046 | if (!fEmbTrkArray) | |
1047 | { | |
1048 | AliError(Form("Could not retrieve PYTHIA+PbPb tracks %s!", fEmbTrkArrName.Data())); | |
1049 | return kFALSE; | |
1050 | } | |
1051 | } | |
1052 | ||
1053 | // Get Rho value | |
1054 | if(fCollisionSystem=="PbPb") | |
1055 | { | |
1056 | if(!fRhoName.IsNull()) | |
1057 | { | |
1058 | AliInfo(Form("Retrieve rho %s!", fRhoName.Data())); | |
1059 | fRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoName)); | |
1060 | if(!fRho) | |
1061 | { | |
1062 | AliError(Form("Could not retrieve rho %s!",fRhoName.Data())); | |
1063 | return kFALSE; | |
1064 | } | |
1065 | } | |
1066 | } | |
1067 | ||
1068 | // Get jet collection | |
1069 | if (!fJetArrName.IsNull()) | |
1070 | { | |
1071 | AliInfo(Form("Retrieve jets %s!", fJetArrName.Data())); | |
1072 | fJetArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fJetArrName)); | |
1073 | if (!fJetArray) | |
1074 | { | |
1075 | AliError(Form("%s: Could not retrieve jets %s!", GetName(), fJetArrName.Data())); | |
1076 | return kFALSE; | |
1077 | } | |
1078 | } | |
1079 | ||
1080 | // Get DL jet collection | |
1081 | if (!fDLJetArrName.IsNull()) | |
1082 | { | |
1083 | AliInfo(Form("Retrieve DL jets %s!", fDLJetArrName.Data())); | |
1084 | fDLJetArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fDLJetArrName)); | |
1085 | if (!fDLJetArray) | |
1086 | { | |
1087 | AliError(Form("%s: Could not retrieve DL jets %s!", GetName(), fDLJetArrName.Data())); | |
1088 | return kFALSE; | |
1089 | } | |
1090 | } | |
1091 | ||
1092 | // Get PL jet collection | |
1093 | if (!fPLJetArrName.IsNull()) | |
1094 | { | |
1095 | AliInfo(Form("Retrieve PL jets %s!", fPLJetArrName.Data())); | |
1096 | fPLJetArray = dynamic_cast<TClonesArray*>(fEvent->FindListObject(fPLJetArrName)); | |
1097 | if (!fPLJetArray) | |
1098 | { | |
1099 | AliError(Form("%s: Could not retrieve PL jets %s!", GetName(), fPLJetArrName.Data())); | |
1100 | return kFALSE; | |
1101 | } | |
1102 | } | |
1103 | ||
1104 | if(fIsEmbedding) | |
1105 | { | |
1106 | if(fAnaType==0 && !fPtHardBinName) | |
1107 | { | |
1108 | // Get embedded pt hard bin number | |
1109 | fPtHardBinName = static_cast<AliNamedString*>(fEvent->FindListObject("AODEmbeddingFile")); | |
1110 | if(!fPtHardBinName) | |
1111 | { | |
1112 | AliError("The object for pt hard bin information is not available!"); | |
1113 | return kFALSE; | |
1114 | } | |
1115 | } | |
1116 | } | |
1117 | } | |
1118 | ||
1119 | if(fAnaType==1) | |
1120 | { | |
1121 | // Get mc particles | |
1122 | if (!fMcParticleArrName.IsNull()) | |
1123 | { | |
1124 | AliInfo(Form("Retrieve mc particles %s!", fMcParticleArrName.Data())); | |
1125 | if(fAODOut && !fMcParticleArray) fMcParticleArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fMcParticleArrName)); | |
1126 | if(fAODIn && !fMcParticleArray) fMcParticleArray = dynamic_cast<TClonesArray*>(fAODIn ->FindListObject(fMcParticleArrName)); | |
1127 | if(fAODExtension && !fMcParticleArray) fMcParticleArray = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fMcParticleArrName)); | |
1128 | if (!fMcParticleArray) | |
1129 | { | |
1130 | AliError(Form("Could not retrieve mc particles %s!", fMcParticleArrName.Data())); | |
1131 | return kFALSE; | |
1132 | } | |
1133 | } | |
1134 | ||
1135 | // Get tracks | |
1136 | if (!fTrackArrName.IsNull()) | |
1137 | { | |
1138 | AliInfo(Form("Retrieve tracks %s!", fTrackArrName.Data())); | |
1139 | if(fAODIn && !fTrackArray) fTrackArray = dynamic_cast<TClonesArray*>(fAODIn ->FindListObject(fTrackArrName)); | |
1140 | if(fAODOut && !fTrackArray) fTrackArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fTrackArrName)); | |
1141 | if (!fTrackArray) | |
1142 | { | |
1143 | AliError(Form("Could not retrieve tracks %s!", fTrackArrName.Data())); | |
1144 | return kFALSE; | |
1145 | } | |
1146 | } | |
1147 | ||
1148 | // Get PYTHIA+PbPb tracks | |
1149 | if (!fEmbTrkArrName.IsNull()) | |
1150 | { | |
1151 | AliInfo(Form("Retrieve PYTHIA+PbPb tracks %s!", fEmbTrkArrName.Data())); | |
1152 | if(fAODOut && !fEmbTrkArray) fEmbTrkArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fEmbTrkArrName)); | |
1153 | if(fAODIn && !fEmbTrkArray) fEmbTrkArray = dynamic_cast<TClonesArray*>(fAODIn ->FindListObject(fEmbTrkArrName)); | |
1154 | if(fAODExtension && !fEmbTrkArray) fEmbTrkArray = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fEmbTrkArrName)); | |
1155 | if (!fTrackArray) | |
1156 | { | |
1157 | AliError(Form("Could not retrieve PYTHIA+PbPb tracks %s!", fTrackArrName.Data())); | |
1158 | return kFALSE; | |
1159 | } | |
1160 | } | |
1161 | ||
1162 | // Get jet collection | |
1163 | if (!fJetArrName.IsNull()) | |
1164 | { | |
1165 | AliInfo(Form("Retrieve jets %s!", fJetArrName.Data())); | |
1166 | if(fAODOut && !fJetArray) fJetArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetArrName)); | |
1167 | if(fAODExtension && !fJetArray) fJetArray = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetArrName)); | |
1168 | if(fAODIn && !fJetArray) fJetArray = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetArrName)); | |
1169 | if (!fJetArray) | |
1170 | { | |
1171 | AliError(Form("%s: Could not retrieve jets %s!", GetName(), fJetArrName.Data())); | |
1172 | return kFALSE; | |
1173 | } | |
1174 | } | |
1175 | ||
1176 | // Get DL jet collection | |
1177 | if (!fDLJetArrName.IsNull()) | |
1178 | { | |
0330533a | 1179 | AliInfo(Form("Retrieve DL jets %s!", fDLJetArrName.Data())); |
aac81e6b | 1180 | if(fAODOut && !fDLJetArray) fDLJetArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fDLJetArrName)); |
1181 | if(fAODExtension && !fDLJetArray) fDLJetArray = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fDLJetArrName)); | |
1182 | if(fAODIn && !fDLJetArray) fDLJetArray = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fDLJetArrName)); | |
1183 | if (!fDLJetArray) | |
1184 | { | |
1185 | AliError(Form("%s: Could not retrieve DL jets %s!", GetName(), fDLJetArrName.Data())); | |
1186 | return kFALSE; | |
1187 | } | |
1188 | } | |
1189 | ||
1190 | // Get PL jet collection | |
1191 | if (!fPLJetArrName.IsNull()) | |
1192 | { | |
1193 | AliInfo(Form("Retrieve PL jets %s!", fPLJetArrName.Data())); | |
1194 | if(fAODOut && !fPLJetArray) fPLJetArray = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fPLJetArrName)); | |
1195 | if(fAODExtension && !fPLJetArray) fPLJetArray = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fPLJetArrName)); | |
1196 | if(fAODIn && !fPLJetArray) fPLJetArray = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fPLJetArrName)); | |
1197 | if (!fPLJetArray) | |
1198 | { | |
1199 | AliError(Form("%s: Could not retrieve PL jets %s!", GetName(), fPLJetArrName.Data())); | |
1200 | return kFALSE; | |
1201 | } | |
1202 | } | |
1203 | ||
1204 | // Get Rho | |
1205 | if(fCollisionSystem=="PbPb" && !fRhoName.IsNull()) | |
1206 | { | |
1207 | AliInfo(Form("Retrieve rho %s!", fRhoName.Data())); | |
1208 | if(fAODOut && !fEvtBkg ) fEvtBkg = (AliAODJetEventBackground*)(fAODOut->FindListObject(fRhoName)); | |
1209 | if(fAODExtension && !fEvtBkg ) fEvtBkg = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fRhoName)); | |
1210 | if(fAODIn && !fEvtBkg ) fEvtBkg = (AliAODJetEventBackground*)(fAODIn->FindListObject(fRhoName)); | |
1211 | if(!fEvtBkg) | |
1212 | { | |
1213 | AliError(Form("Could not retrieve rho %s!",fRhoName.Data())); | |
1214 | return kFALSE; | |
1215 | } | |
1216 | } | |
1217 | } | |
1218 | ||
1219 | return kTRUE; | |
1220 | } | |
1221 | ||
1222 | //________________________________________________________________________ | |
1223 | Double_t AliAnalysisTaskHJetDphi::CalculatePhi(const Double_t py, const Double_t px) | |
1224 | { | |
1225 | Double_t phi = TMath::ATan2(py,px); | |
1226 | if(phi<0) phi += 2*pi; | |
1227 | return phi; | |
1228 | } | |
1229 | ||
1230 | //________________________________________________________________________ | |
1231 | Double_t AliAnalysisTaskHJetDphi::CalculateDPhi(const Double_t phi1, const Double_t phi2) | |
1232 | { | |
1233 | Double_t dPhi = phi1-phi2; | |
1234 | if(dPhi>2*pi) dPhi -= 2*pi; | |
1235 | if(dPhi<-2*pi) dPhi += 2*pi; | |
1236 | if(dPhi<-0.5*pi) dPhi += 2*pi; | |
1237 | if(dPhi>1.5*pi) dPhi -= 2*pi; | |
1238 | return dPhi; | |
1239 | } | |
1240 | ||
1241 | //________________________________________________________________________ | |
1242 | Int_t AliAnalysisTaskHJetDphi::LocateToTPCHole(const Double_t phi) | |
1243 | { | |
1244 | if(phi<4-pi/2 && phi>5.5-1.5*pi) return 1; // away-side | |
1245 | else return 0; //near-side | |
1246 | } | |
1247 | ||
1248 | ||
1249 | //________________________________________________________________________ | |
1250 | Bool_t AliAnalysisTaskHJetDphi::AcceptTrack(AliVParticle *track) | |
1251 | { | |
1252 | if(track->Pt()<fMinTrkPt || track->Pt()>fMaxTrkPt) return kFALSE; | |
1253 | if(track->Eta()<fMinTrkEta || track->Eta()>fMaxTrkEta) return kFALSE; | |
1254 | if(track->Phi()<fMinTrkPhi || track->Phi()>fMaxTrkPhi) return kFALSE; | |
1255 | return kTRUE; | |
1256 | } | |
1257 | ||
1258 | //________________________________________________________________________ | |
1259 | Bool_t AliAnalysisTaskHJetDphi::IsGoodAODtrack(AliVParticle *track) | |
1260 | { | |
1261 | AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track); | |
1262 | if( fFilterMask>0) | |
1263 | { | |
1264 | if(!aodtrack->TestFilterBit(fFilterMask) ) return kFALSE; | |
1265 | } | |
1266 | else | |
1267 | { | |
1268 | if(!aodtrack->IsHybridGlobalConstrainedGlobal()) return kFALSE; | |
1269 | } | |
1270 | if( fRequireITSRefit && (aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0 ) return kFALSE; | |
49bf6461 | 1271 | if (fRequireSharedClsCut) |
1272 | { | |
1273 | Double_t frac = Double_t(aodtrack->GetTPCnclsS())/Double_t(aodtrack->GetTPCncls()); | |
1274 | if (frac > 0.4) return kFALSE; | |
1275 | } | |
aac81e6b | 1276 | return kTRUE; |
1277 | } | |
1278 | ||
1279 | //________________________________________________________________________ | |
1280 | Bool_t AliAnalysisTaskHJetDphi::IsGoodJet(Double_t jetEta) | |
1281 | { | |
1282 | Double_t etaCut = (0.9-fRadius>0.5)?0.5:0.9-fRadius; | |
1283 | if(TMath::Abs(jetEta)>etaCut) return kFALSE; | |
1284 | return kTRUE; | |
1285 | } | |
1286 | ||
1287 | //________________________________________________________________________ | |
1288 | Int_t AliAnalysisTaskHJetDphi::GetPtHardBin(Double_t ptHard) | |
1289 | { | |
1290 | const Int_t nBins = 10; | |
1291 | Double_t binLimits[nBins] = { 5., 11., 21., 36., 57., 84., 117., 156., 200., 249. }; // lower limits | |
1292 | Int_t bin = -1; | |
1293 | while(bin<nBins-1 && binLimits[bin+1]<ptHard) | |
1294 | { | |
1295 | bin++; | |
1296 | } | |
1297 | return bin; | |
1298 | } | |
1299 | ||
1300 | //________________________________________________________________________ | |
1301 | Int_t AliAnalysisTaskHJetDphi::GetParticleType(Int_t pdg_input) | |
1302 | { | |
1303 | Int_t type = -1; | |
1304 | Int_t pdg = TMath::Abs(pdg_input); | |
1305 | if(pdg==211) type = 0; | |
1306 | else if(pdg==321) type = 1; | |
1307 | else if(pdg==2212) type = 2; | |
1308 | else if(pdg==11) type = 3; | |
1309 | else if(pdg>=3122 && pdg<=3334) type = 4; | |
1310 | else type = 9; | |
1311 | return type; | |
1312 | } | |
1313 | ||
1314 | //________________________________________________________________________ | |
1315 | Double_t AliAnalysisTaskHJetDphi::GetAODTrackPtRes(AliAODTrack *aodtrack) | |
1316 | { | |
1317 | Double_t sigma1Pt2 = -1; | |
1318 | Double_t cov[21] = {0,}, pxpypz[3] = {0,}, xyz[3] = {0,}; | |
1319 | AliExternalTrackParam *exParam = new AliExternalTrackParam(); | |
1320 | aodtrack->GetCovMatrix(cov); | |
1321 | aodtrack->PxPyPz(pxpypz); | |
1322 | aodtrack->GetXYZ(xyz); | |
1323 | exParam->Set(xyz,pxpypz,cov,aodtrack->Charge()); | |
1324 | sigma1Pt2 = exParam->GetSigma1Pt2(); | |
1325 | delete exParam; | |
1326 | return sigma1Pt2; | |
1327 | } | |
1328 | ||
1329 | // | |
1330 | //________________________________________________________________________ | |
1331 | // | |
1332 | void AliAnalysisTaskHJetDphi::PrintConfig() | |
1333 | { | |
1334 | const char *decision[2] = {"no","yes"}; | |
1335 | printf("\n\n===== h-jet analysis configuration =====\n"); | |
1336 | printf("Input event type: %s - %s\n",fCollisionSystem.Data(),fPeriod.Data()); | |
1337 | printf("Is this MC data: %s\n",decision[fIsMC]); | |
1338 | printf("Run on particle level: %s\n",decision[fAnalyzeMCTruth]); | |
1339 | printf("Event type selection: %d\n",fOfflineTrgMask); | |
0330533a | 1340 | printf("Is embedding? %s\n",decision[fIsEmbedding]); |
aac81e6b | 1341 | printf("Track filter mask: %d\n",fFilterMask); |
1342 | printf("Require track to have ITS refit? %s\n",decision[fRequireITSRefit]); | |
49bf6461 | 1343 | printf("Require to cut on fraction of shared TPC clusters? %s\n",decision[fRequireSharedClsCut]); |
aac81e6b | 1344 | printf("Track pt range: %2.2f < pt < %2.2f\n",fMinTrkPt, fMaxTrkPt); |
1345 | printf("Track eta range: %2.1f < eta < %2.1f\n",fMinTrkEta, fMaxTrkEta); | |
1346 | printf("Track phi range: %2.0f < phi < %2.0f\n",fMinTrkPhi*TMath::RadToDeg(),fMaxTrkPhi*TMath::RadToDeg()); | |
1347 | printf("Cut TT away from boundary: %s with distance = %2.2f\n",decision[fCutTPCBoundary],fDistToTPCBoundary); | |
1348 | printf("Avoid TPC holes: %s\n", decision[fAvoidTpcHole]); | |
1349 | printf("Jet cone size R = %1.1f, and jet pt > %1.0f GeV/c \n",fRadius,fJetPtMin); | |
1350 | printf("Run track QA: %s\n",decision[fRunTrkQA]); | |
1351 | printf("Run jet QA: %s\n",decision[fRunJetQA]); | |
1352 | printf("Run single inclusive h+jet analysis: %s\n",decision[fRunSingleInclHJet]); | |
1353 | printf("TT interval: %2.0f < pt < %2.0f\n",fTTMinPt, fTTMaxPt); | |
1354 | printf("Run leading track QA: %s\n",decision[fRunLeadTrkQA]); | |
1355 | printf("Run kT effects study: %s\n",decision[fStudyKtEffects]); | |
1356 | printf("Run background flow: %s\n",decision[fRunBkgFlow]); | |
1357 | printf("=======================================\n\n"); | |
1358 | } | |
1359 | ||
1360 | //________________________________________________________________________ | |
1361 | Double_t AliAnalysisTaskHJetDphi::GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz) | |
1362 | { | |
1363 | return (trkPx*jetPx+trkPy*jetPy+trkPz*jetPz)/(jetPx*jetPx+jetPy*jetPy+jetPz*jetPz); | |
1364 | } | |
1365 | ||
1366 | //________________________________________________________________________ | |
1367 | void AliAnalysisTaskHJetDphi::Terminate(Option_t *) | |
1368 | { | |
1369 | // Called once at the end of the query | |
1370 | } |