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
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
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
20 /** @file AliAnalysisTaskHLT.cxx
\r
21 @author Kalliopi Kanaki
\r
33 #include "TCanvas.h"
\r
34 #include "TVector3.h"
\r
35 #include "TString.h"
\r
36 #include "TObjArray.h"
\r
39 #include "AliESDEvent.h"
\r
40 #include "AliESDRun.h"
\r
41 #include "AliESDInputHandler.h"
\r
43 #include "AliAnalysisTask.h"
\r
44 #include "AliAnalysisManager.h"
\r
45 #include "AliAnalysisTaskHLT.h"
\r
48 ClassImp(AliAnalysisTaskHLT)
\r
50 //======================================================================================================
\r
52 AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
\r
54 AliAnalysisTaskSE(name)
\r
58 ,fHistHLTTrigger(0)
\r
81 // ,fDCA_off_trig(0)
\r
82 // ,fNcluster_off_trig(0)
\r
84 // ,fDCA_hlt_trig(0)
\r
85 // ,fNcluster_hlt_trig(0)
\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
95 DefineOutput(1, TList::Class());
\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
107 //----------------------------------------------------------------------------------------------------
\r
109 void AliAnalysisTaskHLT::UserCreateOutputObjects(){
\r
110 // Create histograms
\r
114 fOutputList = new TList();
\r
115 fOutputList->SetName(GetName());
\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
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
140 fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64);
\r
141 fHistTrigger->GetXaxis()->SetTitle("");
\r
142 fHistTrigger->GetYaxis()->SetTitle("#Events");
\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
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
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
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
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
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
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
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
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
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
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
181 //---------------------- add histograms to the output TList ------------------//
\r
183 fOutputList->Add(fHistTrigger);
\r
184 fOutputList->Add(fHistHLTTrigger);
\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
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
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
214 AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
\r
215 TString trgClasses = esdOFF->GetESDRun()->GetActiveTriggerClasses();
\r
218 TObjArray * trgClsArray = trgClasses.Tokenize(" ");
\r
219 cout<<trgClsArray->GetEntries()<<endl;
\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
229 for(Int_t i = 0; i < trgClsArray->GetEntries(); i++){
\r
235 fTrgClsArray = trgClasses.Tokenize(" ");
\r
236 //cout<<fTrgClsArray->GetEntries()<<endl;
\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
246 void AliAnalysisTaskHLT::UserExec(Option_t *){
\r
248 AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
\r
251 Printf("ERROR: fESD not available");
\r
255 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
\r
256 AliESDEvent *esdHLT = NULL;
\r
257 if(esdH) esdHLT = esdH->GetHLTEvent();
\r
260 Printf("ERROR: HLTesd not available");
\r
264 Double_t bfield = esdOFF->GetMagneticField();
\r
266 Double_t pos[] = { 0., 0., 0.};
\r
267 AliVertex *vtx = new AliVertex(pos, 0., 0);
\r
269 //Fill CTP Trigger stuff
\r
270 //fHistTrigger->Fill(esdOFF->GetTriggerMask());
\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
281 fMult_hlt->Fill( esdHLT->GetNumberOfTracks() );
\r
283 //---------------- loop over HLT ESD tree -------------//
\r
285 for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
\r
287 AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i);
\r
290 fNcluster_hlt->Fill(esdtrackHLT->GetTPCNcls());
\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
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
304 fXYvertex_hlt->Fill( esdHLT->GetPrimaryVertex()->GetX(), esdHLT->GetPrimaryVertex()->GetY() );
\r
305 fZvertex_hlt->Fill( esdHLT->GetPrimaryVertex()->GetZ() );
\r
309 fMult_off->Fill( esdOFF->GetNumberOfTracks() );
\r
311 //----------------- loop over OFFLINE ESD tree ----------------//
\r
313 for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
\r
315 AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i);
\r
318 fNcluster_off->Fill(esdtrackOFF->GetTPCNcls());
\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
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
332 fXYvertex_off->Fill( esdOFF->GetPrimaryVertex()->GetX(), esdOFF->GetPrimaryVertex()->GetY() );
\r
333 fZvertex_off->Fill( esdOFF->GetPrimaryVertex()->GetZ() );
\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
342 // fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
\r
344 // fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
345 // fDCA_off->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
347 // if(esdTrk->GetTPCNcls()>0){
\r
348 // fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls());
\r
349 // fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls());
\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
359 // if(esdHLT->IsHLTTriggerFired()){
\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
365 // for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
\r
366 // AliESDtrack * esdtrackHLT = esdHLT->GetTrack(i);
\r
368 // if(esdtrackHLT->GetTPCNcls()>0){
\r
369 // fNcluster_hlt->Fill(esdtrackHLT->GetTPCNcls());
\r
370 // fNcluster_hlt_trig->Fill(esdtrackHLT->GetTPCNcls());
\r
373 // Double_t dz[2] = {-999., -999.};
\r
374 // Double_t covar[3] = {0.};
\r
376 // esdtrackHLT->PropagateToDCA(vtx, bfield, 250., dz, covar);
\r
377 // fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
\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
388 // for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
\r
390 // AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i);
\r
391 // if(esdtrackHLT->GetTPCNcls()>0) fNcluster_hlt->Fill(esdtrackHLT->GetTPCNcls());
\r
393 // Double_t dz[2] = {-999., -999.};
\r
394 // Double_t covar[3] = {0.};
\r
396 // esdtrackHLT->PropagateToDCA(vtx, bfield, 250., dz, covar);
\r
397 // fHistOnlDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
\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
405 // fPhi_hlt->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
\r
406 // fTheta_hlt->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
\r
412 // if(esdHLT->IsHLTTriggerFired()){
\r
414 // for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
\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
422 // fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
\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
437 // fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
438 // fDCA_off->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
440 // if(esdTrk->GetTPCNcls()>0){
\r
441 // fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls());
\r
442 // fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls());
\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
452 // for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
\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
460 // fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
\r
462 // fHistOfflTrkDCANoTrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
464 // if(esdTrk->GetTPCNcls()>0) fHistOfflTrkNclsNoTrig->Fill(esdTrk->GetTPCNcls());
\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
469 // fDCA_off->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
\r
470 // fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls());
\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
477 // fPhi_off->Fill(esdTrk->Phi()*TMath::RadToDeg());
\r
478 // fTheta_off->Fill(esdTrk->Theta()*TMath::RadToDeg());
\r
485 // Post output data.
\r
486 PostData(1, fOutputList);
\r
489 void AliAnalysisTaskHLT::Terminate(Option_t *){
\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
496 // Draw result to the screen
\r
497 // Called once at the end of the query
\r
499 // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLT","Trigger",10,10,510,510);
\r
500 //fHistTrigger->DrawCopy("E");
\r