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