]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/QA/tasks/AliAnalysisTaskHLTTPC.cxx
end-of-line normalization
[u/mrichter/AliRoot.git] / HLT / QA / tasks / AliAnalysisTaskHLTTPC.cxx
CommitLineData
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
48ClassImp(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
108const Float_t AliAnalysisTaskHLTTPC::fgkEtaMin = -0.12;
109const Float_t AliAnalysisTaskHLTTPC::fgkEtaMax = 0.12;
110const Float_t AliAnalysisTaskHLTTPC::fgkPhiMin[5] = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599};
111const Float_t AliAnalysisTaskHLTTPC::fgkPhiMax[5] = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505};
112const Float_t AliAnalysisTaskHLTTPC::fgkNormX[5] = {-0.642788, -0.34202, 0, 0.34202, 0.642788};
113const Float_t AliAnalysisTaskHLTTPC::fgkNormY[5] = {-0.766044, -0.939693, -1, -0.939693, -0.766044};
114const Float_t AliAnalysisTaskHLTTPC::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682};
115const Float_t AliAnalysisTaskHLTTPC::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38};
116
117//----------------------------------------------------------------------------------------------------
118
119void 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
250void 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
286void 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
499void 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}