]>
Commit | Line | Data |
---|---|---|
a65a7e70 | 1 | // $Id$ |
2 | ||
3 | //************************************************************************** | |
4 | //* This file is property of and copyright by the ALICE HLT Project * | |
5 | //* ALICE Experiment at CERN, All rights reserved. * | |
6 | //* * | |
7 | //* Primary Authors: Zhongbao Yin <zbyin@mail.ccnu.edu.cn>, * | |
8 | //* Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no> * | |
9 | //* for The ALICE HLT Project. * | |
10 | //* * | |
11 | //* Permission to use, copy, modify and distribute this software and its * | |
12 | //* documentation strictly for non-commercial purposes is hereby granted * | |
13 | //* without fee, provided that the above copyright notice appears in all * | |
14 | //* copies and that both the copyright notice and this permission notice * | |
15 | //* appear in the supporting documentation. The authors make no claims * | |
16 | //* about the suitability of this software for any purpose. It is * | |
17 | //* provided "as is" without express or implied warranty. * | |
18 | //************************************************************************** | |
19 | ||
20 | /** @file AliAnalysisTaskHLTTPC.cxx | |
21 | @author Zhongbao Yin, Kalliopi Kanaki | |
22 | @date | |
23 | @brief | |
24 | */ | |
25 | ||
26 | ||
27 | #include <iostream> | |
28 | ||
29 | #include "TChain.h" | |
30 | #include "TTree.h" | |
31 | #include "TH1F.h" | |
32 | #include "TH2F.h" | |
33 | #include "TCanvas.h" | |
34 | #include "TVector3.h" | |
35 | #include "TString.h" | |
36 | #include "TObjArray.h" | |
37 | #include "TFile.h" | |
38 | ||
39 | #include "AliESDEvent.h" | |
40 | #include "AliESDRun.h" | |
41 | #include "AliESDInputHandler.h" | |
42 | ||
43 | #include "AliAnalysisTask.h" | |
44 | #include "AliAnalysisManager.h" | |
45 | #include "AliAnalysisTaskHLTTPC.h" | |
46 | ||
47 | ||
48 | ClassImp(AliAnalysisTaskHLTTPC) | |
49 | ||
50 | //====================================================================================================== | |
51 | ||
52 | AliAnalysisTaskHLTTPC::AliAnalysisTaskHLTTPC(const char *name) | |
53 | : | |
54 | AliAnalysisTaskSE(name) | |
55 | ,fESDRun(0) | |
56 | ,fOutputList(0) | |
57 | ,fHistTrigger(0) | |
58 | ,fHistHLTTrigger(0) | |
59 | ,fHistOfflTrkDCA(0) | |
60 | ,fHistOfflTrkDCATrig(0) | |
61 | ,fHistOfflTrkDCANoTrig(0) | |
62 | ,fHistOnlTrkDCA(0) | |
63 | ,fHistOnlTrkDCATrig(0) | |
64 | ,fHistOfflTrkNcls(0) | |
65 | ,fHistOfflTrkNclsTrig(0) | |
66 | ,fHistOfflTrkNclsNoTrig(0) | |
67 | ,fHistOnlTrkNcls(0) | |
68 | ,fHistOnlTrkNclsTrig(0) | |
69 | ,fHistOfflTrkDCANoTrigNclsCut1(0) | |
70 | ,fHistOfflTrkDCANoTrigNclsCut2(0) | |
71 | ,fHistOfflTrkP(0) | |
72 | ,fHistOfflTrkPTrig(0) | |
73 | ,fHistOfflTrkPNoTrig(0) | |
74 | ,fHistOnlTrkP(0) | |
75 | ,fHistOfflResPtInv(0) | |
76 | ,fHistOnlResPtInv(0) | |
77 | ,fHistOffldEdx(0) | |
78 | ,fHistOnldEdx(0) | |
79 | ,fHistOffldEdxVsP(0) | |
80 | ,fHistOnldEdxVsP(0) | |
81 | ,fHistOffldZ(0) | |
82 | ,fHistOnldZ(0) | |
83 | ,fHistOffldX(0) | |
84 | ,fHistOnldX(0) | |
85 | ,fHistOfflPhi(0) | |
86 | ,fHistOnlPhi(0) | |
87 | ,fHistOfflTheta(0) | |
88 | ,fHistOnlTheta(0) | |
89 | ,fHistOnlDZ(0) | |
90 | ,fHistOfflDZ(0) | |
91 | ,fHistOfflDZTrig(0) | |
92 | ,fHistOfflDZNoTrig(0) | |
93 | ,fNevt(0) | |
94 | ,fTrgClsArray(0) | |
95 | //,fNtracksThruZ0(0), | |
96 | //,fNtracksThruZ0Trig(0) | |
97 | { | |
98 | // Constructor | |
99 | ||
100 | // Define input and output slots here | |
101 | // Input slot #0 works with a TChain | |
102 | // DefineInput(0, TChain::Class()); | |
103 | // Output slot #0 writes into a TH1 container | |
104 | ||
105 | DefineOutput(1, TList::Class()); | |
106 | } | |
107 | ||
108 | const Float_t AliAnalysisTaskHLTTPC::fgkEtaMin = -0.12; | |
109 | const Float_t AliAnalysisTaskHLTTPC::fgkEtaMax = 0.12; | |
110 | const Float_t AliAnalysisTaskHLTTPC::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599}; | |
111 | const Float_t AliAnalysisTaskHLTTPC::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505}; | |
112 | const Float_t AliAnalysisTaskHLTTPC::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788}; | |
113 | const Float_t AliAnalysisTaskHLTTPC::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044}; | |
114 | const Float_t AliAnalysisTaskHLTTPC::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682}; | |
115 | const Float_t AliAnalysisTaskHLTTPC::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38}; | |
116 | ||
117 | //---------------------------------------------------------------------------------------------------- | |
118 | ||
119 | void AliAnalysisTaskHLTTPC::UserCreateOutputObjects(){ | |
120 | // Create histograms | |
121 | ||
122 | OpenFile(1); | |
123 | ||
124 | fOutputList = new TList(); | |
125 | fOutputList->SetName(GetName()); | |
126 | ||
127 | /* | |
128 | //0 mistriggered, 1 Good triggered, 2, triggered, 3 fake trigger, | |
129 | //4 events with offline track, 5 total events processed, | |
130 | //6 offline track thru CE, 7 online track to CE | |
131 | fHistTrigger = new TH1F("fHistTrigger", "Trigger Status", 8, -0.5, 7.5); | |
132 | fHistTrigger->GetXaxis()->SetTitle(""); | |
133 | fHistTrigger->GetYaxis()->SetTitle("Events"); | |
134 | fHistTrigger->SetMarkerStyle(kFullCircle); | |
135 | fHistTrigger->SetStats(0); | |
136 | fHistTrigger->SetFillColor(2); | |
137 | //fHistTrigger->SetDrawOption("B TEXT60"); | |
138 | ||
139 | //Set bin labels | |
140 | (fHistTrigger->GetXaxis())->SetBinLabel(1,"missed"); | |
141 | (fHistTrigger->GetXaxis())->SetBinLabel(2,"triggerWofflTrk"); | |
142 | (fHistTrigger->GetXaxis())->SetBinLabel(3,"triggered"); | |
143 | (fHistTrigger->GetXaxis())->SetBinLabel(4,"triggerWOofflTrk"); | |
144 | (fHistTrigger->GetXaxis())->SetBinLabel(5,"NevWofflTrk"); | |
145 | (fHistTrigger->GetXaxis())->SetBinLabel(6,"Nevt"); | |
146 | (fHistTrigger->GetXaxis())->SetBinLabel(7,"offlTrkThruCE"); | |
147 | (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); | |
148 | */ | |
149 | ||
150 | fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64); | |
151 | fHistTrigger->GetXaxis()->SetTitle(""); | |
152 | fHistTrigger->GetYaxis()->SetTitle("#Events"); | |
153 | ||
154 | fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64); | |
155 | fHistHLTTrigger->GetXaxis()->SetTitle(""); | |
156 | fHistHLTTrigger->GetYaxis()->SetTitle("#Events"); | |
157 | ||
158 | fHistOfflTrkDCA = new TH1F("fHistOfflTrkDCA", "DCA to beam line (offline)", 250, 0, 250); | |
159 | fHistOfflTrkDCATrig = new TH1F("fHistOfflTrkDCATrig", "DCA to beam line (triggered offline)", 250, 0, 250); | |
160 | fHistOfflTrkDCANoTrig = new TH1F("fHistOfflTrkDCANoTrig","DCA to beam line (offline, not triggered)",250, 0, 250); | |
161 | ||
162 | fHistOnlTrkDCA = new TH1F("fHistOnlTrkDCA", "DCA to beam line (HLT)", 250, 0, 250); | |
163 | fHistOnlTrkDCATrig = new TH1F("fHistOnlTrkDCATrig","DCA to beam line (HLT triggered)",250, 0, 250); | |
164 | ||
165 | fHistOfflTrkNcls = new TH1F("fHistOfflTrkNcls", "clusters per track (offline)", 200, 0, 200); | |
166 | fHistOfflTrkNclsTrig = new TH1F("fHistOfflTrkNclsTrig", "clusters per track (triggered offline)", 200, 0, 200); | |
167 | fHistOfflTrkNclsNoTrig = new TH1F("fHistOfflTrkNclsNoTrig","clusters per track (offline, not triggered)",200, 0, 200); | |
168 | ||
169 | fHistOnlTrkNcls = new TH1F("fHistOnlTrkNcls", "clusters per track (HLT)", 200, 0, 200); | |
170 | fHistOnlTrkNclsTrig = new TH1F("fHistOnlTrkNclsTrig","clusters per track (HLT triggered)", 200, 0, 200); | |
171 | ||
172 | fHistOfflTrkDCANoTrigNclsCut1 = new TH1F("fHistOfflTrkDCANoTrigNclsCut1", "DCA to beam line (offline Ncls>=60, not triggered)",250, 0, 250); | |
173 | fHistOfflTrkDCANoTrigNclsCut2 = new TH1F("fHistOfflTrkDCANoTrigNclsCut2", "DCA to beam line (offline Ncls<60, not triggered)", 250, 0, 250); | |
174 | ||
175 | fHistOfflTrkP = new TH1F("fHistOfflTrkP", "momentum (offline)", 100, 0., 100); | |
176 | fHistOfflTrkPTrig = new TH1F("fHistOfflTrkPTrig", "momentum (offline triggered)", 100, 0., 100); | |
177 | fHistOfflTrkPNoTrig = new TH1F("fHistOfflTrkPNoTrig","momentum (offline, not triggered)",100, 0., 100); | |
178 | ||
179 | fHistOnlTrkP = new TH1F("fHistOnlTrkP", "momentum (HLT)", 100, 0., 100); | |
180 | ||
181 | fHistOfflResPtInv = new TH1F("fHistOfflResPtInv","resolution on 1/pt for the case with 2 offline tracks",100, 0., 1); // cosmics | |
182 | fHistOnlResPtInv = new TH1F("fHistOnlResPtInv", "resolution on 1/pt for the case with 2 HLT tracks", 100, 0., 1); // cosmics | |
183 | ||
184 | fHistOffldEdx = new TH1F("fHistOffldEdx", "energy loss (offline)",500, 0, 500); | |
185 | fHistOnldEdx = new TH1F("fHistOnldEdx", "energy loss (HLT)", 500, 0, 500); | |
186 | ||
187 | fHistOffldEdxVsP = new TH2F("fHistOffldEdxVsP","dE/dx vs. momentum (offline)",100, 0., 100., 500, 0., 500.); | |
188 | fHistOnldEdxVsP = new TH2F("fHistOnldEdxVsP", "dE/dx vs. momentum (HLT)", 100, 0., 100., 500, 0., 500.); | |
189 | ||
190 | fHistOffldZ = new TH1F("fHistOffldZ","z resolution (offline)",100, 0, 5.); | |
191 | fHistOnldZ = new TH1F("fHistOnldZ", "z resolution (HLT)", 100, 0.,5.); | |
192 | ||
193 | fHistOffldX = new TH1F("fHistOffldX","r resolution (offline)",100, 0., 5.); | |
194 | fHistOnldX = new TH1F("fHistOnldX", "r resolution (HLT)", 100, 0., 5.); | |
195 | ||
196 | fHistOfflPhi = new TH1F("fHistOfflPhi","#phi resolution (offline)",100, 0., 10); // in mrad | |
197 | fHistOnlPhi = new TH1F("fHistOnlPhi", "#phi resolution (HLT)", 100, 0., 10); // in mrad | |
198 | ||
199 | fHistOfflTheta = new TH1F("fHistOfflTheta","#theta resolution (offline)",100, 0., 10); | |
200 | fHistOnlTheta = new TH1F("fHistOnlTheta", "#theta resolution (HLT)", 100, 0., 10); | |
201 | ||
202 | fHistOfflDZ = new TH2F("fHistOfflDZ","track D vs. Z (offline)",1000, 0., 250, 1000, 0., 250); | |
203 | fHistOnlDZ = new TH2F("fHistOnlDZ", "track D vs. Z (HLT)", 1000, 0., 250, 1000, 0., 250); | |
204 | ||
205 | fHistOfflDZTrig = new TH2F("fHistOfflDZTrig", "track D vs. Z (offline triggered)", 1000, 0., 250, 1000, 0., 250); | |
206 | fHistOfflDZNoTrig = new TH2F("fHistOfflDZNoTrig","track D vs. Z (offline not triggered)",1000, 0., 250, 1000, 0., 250); | |
207 | ||
208 | ||
209 | fOutputList->Add(fHistTrigger); | |
210 | fOutputList->Add(fHistHLTTrigger); | |
211 | ||
212 | fOutputList->Add(fHistOfflTrkDCA); | |
213 | fOutputList->Add(fHistOfflTrkDCATrig); | |
214 | fOutputList->Add(fHistOfflTrkDCANoTrig); | |
215 | fOutputList->Add(fHistOnlTrkDCA); | |
216 | fOutputList->Add(fHistOnlTrkDCATrig); | |
217 | fOutputList->Add(fHistOfflTrkNcls); | |
218 | fOutputList->Add(fHistOfflTrkNclsTrig); | |
219 | fOutputList->Add(fHistOfflTrkNclsNoTrig); | |
220 | fOutputList->Add(fHistOnlTrkNcls); | |
221 | fOutputList->Add(fHistOnlTrkNclsTrig); | |
222 | fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut1); | |
223 | fOutputList->Add(fHistOfflTrkDCANoTrigNclsCut2); | |
224 | fOutputList->Add(fHistOfflTrkP); | |
225 | fOutputList->Add(fHistOfflTrkPTrig); | |
226 | fOutputList->Add(fHistOfflTrkPNoTrig); | |
227 | fOutputList->Add(fHistOnlTrkP); | |
228 | ||
229 | fOutputList->Add(fHistOfflResPtInv); // cosmics | |
230 | fOutputList->Add(fHistOnlResPtInv); // cosmics | |
231 | ||
232 | fOutputList->Add(fHistOffldEdx); | |
233 | fOutputList->Add(fHistOnldEdx); | |
234 | fOutputList->Add(fHistOffldEdxVsP); | |
235 | fOutputList->Add(fHistOnldEdxVsP); | |
236 | fOutputList->Add(fHistOffldZ); | |
237 | fOutputList->Add(fHistOnldZ); | |
238 | fOutputList->Add(fHistOffldX); | |
239 | fOutputList->Add(fHistOnldX); | |
240 | fOutputList->Add(fHistOfflPhi); | |
241 | fOutputList->Add(fHistOnlPhi); | |
242 | fOutputList->Add(fHistOfflTheta); | |
243 | fOutputList->Add(fHistOnlTheta); | |
244 | fOutputList->Add(fHistOfflDZ); | |
245 | fOutputList->Add(fHistOnlDZ); | |
246 | fOutputList->Add(fHistOfflDZTrig); | |
247 | fOutputList->Add(fHistOfflDZNoTrig); | |
248 | } | |
249 | ||
250 | void AliAnalysisTaskHLTTPC::NotifyRun(){ | |
251 | // This will not work if the active trigger classes change from run to run. | |
252 | // Then one has to know all trigger classes before processing the data. | |
253 | ||
254 | AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent()); | |
255 | TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); | |
256 | ||
257 | /* | |
258 | TObjArray * trgClsArray = trgClasses.Tokenize(" "); | |
259 | cout<<trgClsArray->GetEntries()<<endl; | |
260 | ||
261 | if(!fTrgClsArray){ | |
262 | fTrgClsArray = trgClsArray; | |
263 | for(Int_t i = 0; i < fTrgClsArray->GetEntries(); i++){ | |
264 | TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); | |
265 | (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); | |
266 | (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); | |
267 | } | |
268 | }else{ | |
269 | for(Int_t i = 0; i < trgClsArray->GetEntries(); i++){ | |
270 | ||
271 | } | |
272 | } | |
273 | */ | |
274 | ||
275 | fTrgClsArray = trgClasses.Tokenize(" "); | |
276 | //cout<<fTrgClsArray->GetEntries()<<endl; | |
277 | ||
278 | for(Int_t i=0; i<fTrgClsArray->GetEntries(); i++){ | |
279 | TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); | |
280 | (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); | |
281 | (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); | |
282 | } | |
283 | evESD = NULL; | |
284 | } | |
285 | ||
286 | void AliAnalysisTaskHLTTPC::UserExec(Option_t *){ | |
287 | ||
288 | AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent()); | |
289 | ||
290 | if (!evESD) { | |
291 | Printf("ERROR: fESD not available"); | |
292 | return; | |
293 | } | |
294 | ||
295 | AliESDEvent* evHLTESD = 0; | |
296 | AliESDInputHandler* esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler); | |
297 | ||
298 | if(esdH) evHLTESD = esdH->GetHLTEvent(); | |
299 | ||
300 | if(!evHLTESD){ | |
301 | Printf("ERROR: HLTesd not available"); | |
302 | return; | |
303 | } | |
304 | ||
305 | Double_t b = evESD->GetMagneticField(); | |
306 | ||
307 | Double_t pos[] = { 0., 0., 0.}; | |
308 | AliVertex *vtx = new AliVertex(pos, 0., 0); | |
309 | ||
310 | //Fill CTP Trigger stuff | |
311 | //fHistTrigger->Fill(evESD->GetTriggerMask()); | |
312 | ||
313 | for(Int_t i = 0; i<fTrgClsArray->GetEntries(); i++){ | |
314 | if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i); | |
315 | } | |
316 | ||
317 | if(evHLTESD->IsHLTTriggerFired()){ | |
318 | //fHistHLTTrigger->Fill(evESD->GetTriggerMask()); | |
319 | for(Int_t i = 0; i<fTrgClsArray->GetEntries(); i++){ | |
320 | if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i); | |
321 | } | |
322 | } | |
323 | ||
324 | if(evHLTESD->IsHLTTriggerFired()){ | |
325 | for(Int_t i=0; i<evHLTESD->GetNumberOfTracks(); i++){ | |
326 | AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); | |
327 | ||
328 | if(HLTesdTrk->GetTPCNcls()>0){ | |
329 | fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); | |
330 | fHistOnlTrkNclsTrig->Fill(HLTesdTrk->GetTPCNcls()); | |
331 | } | |
332 | ||
333 | Double_t dz[2] = {-999., -999.}; | |
334 | Double_t covar[3] = {0.}; | |
335 | ||
336 | HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); | |
337 | fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
338 | ||
339 | if(HLTesdTrk){ | |
340 | fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); | |
341 | fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); | |
342 | fHistOnldEdx->Fill(HLTesdTrk->GetTPCsignal()); | |
343 | fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); | |
344 | fHistOnlTrkDCATrig->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); | |
345 | } | |
346 | } | |
347 | } else { | |
348 | for(Int_t i=0; i<evHLTESD->GetNumberOfTracks(); i++){ | |
349 | ||
350 | AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); | |
351 | if(HLTesdTrk->GetTPCNcls()>0) fHistOnlTrkNcls->Fill(HLTesdTrk->GetTPCNcls()); | |
352 | ||
353 | Double_t dz[2] = {-999., -999.}; | |
354 | Double_t covar[3] = {0.}; | |
355 | ||
356 | HLTesdTrk->PropagateToDCA(vtx, b, 250., dz, covar); | |
357 | fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
358 | ||
359 | if(HLTesdTrk){ | |
360 | fHistOnlTrkDCA->Fill(TMath::Abs(HLTesdTrk->GetD(0., 0., b))); | |
361 | fHistOnlTrkP->Fill(TMath::Abs(HLTesdTrk->P())); | |
362 | fHistOnldEdx->Fill( HLTesdTrk->GetTPCsignal()); | |
363 | fHistOnldEdxVsP->Fill(TMath::Abs(HLTesdTrk->P()), HLTesdTrk->GetTPCsignal()); | |
364 | } | |
365 | } | |
366 | } | |
367 | ||
368 | if(evHLTESD->GetNumberOfTracks()==2){ // cosmics | |
369 | ||
370 | Double_t oneOverPt1 = (evHLTESD->GetTrack(0))->OneOverPt(); | |
371 | Double_t oneOverPt2 = (evHLTESD->GetTrack(1))->OneOverPt(); | |
372 | //cout<<"1/pt: "<<oneOverPt1<<", "<<oneOverPt2<<endl; | |
373 | fHistOnlResPtInv->Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2)); | |
374 | ||
375 | Float_t dz1[2], dz2[2]; | |
376 | (evHLTESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); | |
377 | (evHLTESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); | |
378 | fHistOnldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); | |
379 | fHistOnldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); | |
380 | ||
381 | Float_t dPhi = TMath::Abs( (evHLTESD->GetTrack(0))->Phi() - (evHLTESD->GetTrack(1))->Phi() - TMath::Pi() ); | |
382 | if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); | |
383 | ||
384 | fHistOnlPhi->Fill(1000.*dPhi); | |
385 | fHistOnlTheta->Fill(1000.*TMath::Abs( (evHLTESD->GetTrack(0))->Theta() + (evHLTESD->GetTrack(1))->Theta() - TMath::Pi() ) ); | |
386 | } | |
387 | ||
388 | if(evESD->GetNumberOfTracks()==2){ // cosmics | |
389 | ||
390 | Double_t oneOverPt1 = (evESD->GetTrack(0))->OneOverPt(); | |
391 | Double_t oneOverPt2 = (evESD->GetTrack(1))->OneOverPt(); | |
392 | fHistOfflResPtInv->Fill(2.*TMath::Abs(oneOverPt1-oneOverPt2)/(oneOverPt1+oneOverPt2) ); | |
393 | ||
394 | Float_t dz1[2], dz2[2]; | |
395 | (evESD->GetTrack(0))->GetDZ(0., 0., 0., b, dz1); | |
396 | (evESD->GetTrack(1))->GetDZ(0., 0., 0., b, dz2); | |
397 | fHistOffldX->Fill(TMath::Abs(TMath::Abs(dz1[0])-TMath::Abs(dz2[0]))); | |
398 | fHistOffldZ->Fill(TMath::Abs(dz1[1]-dz2[1])); | |
399 | ||
400 | Float_t dPhi = TMath::Abs( (evESD->GetTrack(0))->Phi() - (evESD->GetTrack(1))->Phi() - TMath::Pi() ); | |
401 | if(dPhi>2.*TMath::Pi()) dPhi -= 2.*TMath::Pi(); | |
402 | ||
403 | fHistOfflPhi->Fill(1000.*dPhi); | |
404 | fHistOfflTheta->Fill(1000.*TMath::Abs( (evESD->GetTrack(0))->Theta() + (evESD->GetTrack(1))->Theta() - TMath::Pi() ) ); | |
405 | } | |
406 | ||
407 | //fHistTrigger->Fill(5., 1); | |
408 | ||
409 | // Printf("There are %d tracks in this event", evESD->GetNumberOfTracks()); | |
410 | ||
411 | //if(evESD->GetNumberOfTracks()>0) fHistTrigger->Fill(4., 1); | |
412 | ||
413 | if(evHLTESD->IsHLTTriggerFired()){ | |
414 | //fHistTrigger->Fill(2., 1); | |
415 | ||
416 | for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ | |
417 | ||
418 | AliESDtrack *esdTrk = evESD->GetTrack(i); | |
419 | Double_t dz[2] = {-999., -999.}; | |
420 | Double_t covar[3] = {0}; | |
421 | esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); | |
422 | fHistOfflDZTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
423 | ||
424 | fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
425 | ||
426 | /* | |
427 | Double_t pnt[3] = {0., 0., 0.}; | |
428 | Double_t norm[3] = {0., 0., 1.}; | |
429 | if(esdTrk->Intersect(pnt, norm, b)){ | |
430 | if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { | |
431 | fNtracksThruZ0++; | |
432 | fNtracksThruZ0Trig++; | |
433 | fHistTrigger->Fill(6., 1); | |
434 | fHistTrigger->Fill(7., 1); | |
435 | } | |
436 | } | |
437 | */ | |
438 | ||
439 | fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
440 | fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
441 | ||
442 | if(esdTrk->GetTPCNcls()>0){ | |
443 | fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls()); | |
444 | fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); | |
445 | } | |
446 | ||
447 | fHistOfflTrkPTrig->Fill(TMath::Abs(esdTrk->P())); | |
448 | fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); | |
449 | fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); | |
450 | fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); | |
451 | } | |
452 | } else { | |
453 | ||
454 | for(Int_t i=0; i<evESD->GetNumberOfTracks(); i++){ | |
455 | ||
456 | AliESDtrack * esdTrk = evESD->GetTrack(i); | |
457 | Double_t dz[2] = {0}; | |
458 | Double_t covar[3] = {0}; | |
459 | esdTrk->PropagateToDCA(vtx, b, 250., dz, covar); | |
460 | fHistOfflDZNoTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
461 | ||
462 | fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1])); | |
463 | ||
464 | /* | |
465 | Double_t pnt[3] = {0., 0., 0.}; | |
466 | Double_t norm[3] = {0., 0., 1.}; | |
467 | if(esdTrk->Intersect(pnt, norm, b)){ | |
468 | if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) { | |
469 | fNtracksThruZ0++; | |
470 | fHistTrigger->Fill(6., 1); | |
471 | } | |
472 | } | |
473 | */ | |
474 | ||
475 | fHistOfflTrkDCANoTrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
476 | ||
477 | if(esdTrk->GetTPCNcls()>0) fHistOfflTrkNclsNoTrig->Fill(esdTrk->GetTPCNcls()); | |
478 | ||
479 | if(esdTrk->GetTPCNcls()>=60) fHistOfflTrkDCANoTrigNclsCut1->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
480 | else fHistOfflTrkDCANoTrigNclsCut2->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
481 | ||
482 | fHistOfflTrkDCA->Fill(TMath::Abs(esdTrk->GetD(0., 0., b))); | |
483 | fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls()); | |
484 | ||
485 | fHistOfflTrkPNoTrig->Fill(TMath::Abs(esdTrk->P())); | |
486 | fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P())); | |
487 | fHistOffldEdx->Fill( esdTrk->GetTPCsignal()); | |
488 | fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal()); | |
489 | } | |
490 | } | |
491 | ||
492 | fNevt++; | |
493 | delete vtx; | |
494 | ||
495 | // Post output data. | |
496 | PostData(1, fOutputList); | |
497 | } | |
498 | ||
499 | void AliAnalysisTaskHLTTPC::Terminate(Option_t *){ | |
500 | /* | |
501 | Printf("Number of tracks thru CE: %d", fNtracksThruZ0); | |
502 | Printf("Number of tracks thru CE from triggered events: %d", | |
503 | fNtracksThruZ0Trig); | |
504 | */ | |
505 | ||
506 | // Draw result to the screen | |
507 | // Called once at the end of the query | |
508 | ||
509 | // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTTPC","Trigger",10,10,510,510); | |
510 | //fHistTrigger->DrawCopy("E"); | |
511 | ||
512 | } |