]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGPP/HMPID/AliHMPIDTaskQA.cxx
some more updates
[u/mrichter/AliRoot.git] / PWGPP / HMPID / AliHMPIDTaskQA.cxx
CommitLineData
3882540a 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//==============================================================================
17// AliHMPIDTaskQA - Class representing a quality check tool of HMPID
18// A set of histograms is created.
19//==============================================================================
20
21#ifndef AliHMPIDTaskQA_CXX
22#define AliHMPIDTaskQA_CXX
23
24
25#include "TH1.h"
26#include "TH2.h"
27#include "TFile.h"
28#include "TCanvas.h"
29#include "TGraphErrors.h"
30#include "AliAnalysisManager.h"
31#include "AliESDInputHandler.h"
32#include "AliMCEventHandler.h"
33#include "AliMCEvent.h"
34#include "AliESDtrack.h"
35#include "AliPID.h"
36#include "AliLog.h"
37#include "AliHMPIDTaskQA.h"
38
39ClassImp(AliHMPIDTaskQA)
40
41//__________________________________________________________________________
42AliHMPIDTaskQA::AliHMPIDTaskQA() :
43 fESD(0x0),fMC(0x0),fUseMC(kTRUE),
44 fHmpHistList(0x0),
15939b4c 45 fHmpPesdPhmp(0x0),fHmpCkovPesd(0x0),fHmpCkovPhmp(0x0),
65896ecb 46 fHmpMipCharge3cm(0x0),fHmpMipTrkDist(0x0),
3882540a 47 fHmpTrkFlags(0x0),
48 fN1(6),
49 fN2(8),
50 fPionEff(0x0),
51 fKaonEff(0x0),
52 fProtEff(0x0),
53 fPionTot(0x0),
54 fKaonTot(0x0),
55 fProtTot(0x0),
56 fPionNot(0x0),
57 fKaonNot(0x0),
58 fProtNot(0x0),
59 fPionCon(0x0),
60 fKaonCon(0x0),
15939b4c 61 fProtCon(0x0)
3882540a 62{
63 //
64 //Default ctor
65 //
65896ecb 66 for (Int_t i=0; i<7; i++){
67 fHmpPhotons[i] = 0x0;
68 fHmpPhotP[i] = 0x0;
69 fHmpPhotSin2th[i] = 0x0;
70 fHmpMipTrkDistPosX[i] = fHmpMipTrkDistNegX[i] = 0x0;
15939b4c 71 fHmpMipTrkDistPosY[i] = fHmpMipTrkDistNegY[i] = 0x0;
65896ecb 72 fHmpMipCharge[i] = 0x0;
73 }
3882540a 74}
75
76//___________________________________________________________________________
77AliHMPIDTaskQA::AliHMPIDTaskQA(const Char_t* name) :
78 AliAnalysisTaskSE(name),
79 fESD(0x0), fMC(0x0), fUseMC(kTRUE),
80 fHmpHistList(0x0),
15939b4c 81 fHmpPesdPhmp(0x0),fHmpCkovPesd(0x0),fHmpCkovPhmp(0x0),
65896ecb 82 fHmpMipCharge3cm(0x0),fHmpMipTrkDist(0x0),
3882540a 83 fHmpTrkFlags(0x0),
84 fN1(6),
85 fN2(8),
86 fPionEff(0x0),
87 fKaonEff(0x0),
88 fProtEff(0x0),
89 fPionTot(0x0),
90 fKaonTot(0x0),
91 fProtTot(0x0),
92 fPionNot(0x0),
93 fKaonNot(0x0),
94 fProtNot(0x0),
95 fPionCon(0x0),
96 fKaonCon(0x0),
15939b4c 97 fProtCon(0x0)
3882540a 98{
99 //
100 // Constructor. Initialization of Inputs and Outputs
101 //
65896ecb 102 for (Int_t i=0; i<7; i++){
103 fHmpPhotons[i] = 0x0;
104 fHmpPhotP[i] = 0x0;
105 fHmpPhotSin2th[i] = 0x0;
106 fHmpMipTrkDistPosX[i] = fHmpMipTrkDistNegX[i] = 0x0;
15939b4c 107 fHmpMipTrkDistPosY[i] = fHmpMipTrkDistNegY[i] = 0x0;
65896ecb 108 fHmpMipCharge[i] = 0x0;
109 }
3882540a 110
111 DefineOutput(1,TList::Class());
3882540a 112}
113
114//___________________________________________________________________________
115AliHMPIDTaskQA& AliHMPIDTaskQA::operator=(const AliHMPIDTaskQA& c)
116{
117 //
118 // Assignment operator
119 //
120 if (this!=&c) {
121 AliAnalysisTaskSE::operator=(c);
122 fESD = c.fESD;
123 fMC = c.fMC;
124 fUseMC = c.fUseMC;
125 fHmpHistList = c.fHmpHistList;
15939b4c 126 fHmpPesdPhmp = c.fHmpPesdPhmp;
127 fHmpCkovPesd = c.fHmpCkovPesd;
128 fHmpCkovPhmp = c.fHmpCkovPhmp;
3882540a 129 fHmpMipCharge3cm = c.fHmpMipCharge3cm;
65896ecb 130 fHmpMipTrkDist = c.fHmpMipTrkDist;
3882540a 131 fHmpTrkFlags = c.fHmpTrkFlags;
132 fN1 = c.fN1;
133 fN2 = c.fN2;
134 fPionEff = c.fPionEff;
135 fKaonEff = c.fKaonEff;
136 fProtEff = c.fProtEff;
137 fPionTot = c.fPionTot;
138 fKaonTot = c.fKaonTot;
139 fProtTot = c.fProtTot;
140 fPionNot = c.fPionNot;
141 fKaonNot = c.fKaonNot;
142 fProtNot = c.fProtNot;
143 fPionCon = c.fPionCon;
144 fKaonCon = c.fKaonCon;
145 fProtCon = c.fProtCon;
15939b4c 146 for (Int_t i=0; i<7; i++){
65896ecb 147 fHmpPhotons[i] = c.fHmpPhotons[i];
148 fHmpPhotP[i] = c.fHmpPhotP[i];
149 fHmpPhotSin2th[i] = c.fHmpPhotSin2th[i];
150 fHmpMipTrkDistPosX[i] = c.fHmpMipTrkDistPosX[i];
151 fHmpMipTrkDistNegX[i] = c.fHmpMipTrkDistNegX[i];
15939b4c 152 fHmpMipTrkDistPosY[i] = c.fHmpMipTrkDistPosY[i];
153 fHmpMipTrkDistNegY[i] = c.fHmpMipTrkDistNegY[i];
65896ecb 154 fHmpMipCharge[i] = c.fHmpMipCharge[i];
15939b4c 155 }
3882540a 156 }
157 return *this;
158}
159
160//___________________________________________________________________________
161AliHMPIDTaskQA::AliHMPIDTaskQA(const AliHMPIDTaskQA& c) :
162 AliAnalysisTaskSE(c),
163 fESD(c.fESD),fMC(c.fMC),fUseMC(c.fUseMC),
164 fHmpHistList(c.fHmpHistList),
15939b4c 165 fHmpPesdPhmp(c.fHmpPesdPhmp),fHmpCkovPesd(c.fHmpCkovPesd),fHmpCkovPhmp(c.fHmpCkovPhmp),
65896ecb 166 fHmpMipCharge3cm(c.fHmpMipCharge3cm),fHmpMipTrkDist(c.fHmpMipTrkDist),
3882540a 167 fHmpTrkFlags(c.fHmpTrkFlags),
168 fN1(c.fN1),
169 fN2(c.fN2),
170 fPionEff(c.fPionEff),
171 fKaonEff(c.fKaonEff),
172 fProtEff(c.fProtEff),
173 fPionTot(c.fPionTot),
174 fKaonTot(c.fKaonTot),
175 fProtTot(c.fProtTot),
176 fPionNot(c.fPionNot),
177 fKaonNot(c.fKaonNot),
178 fProtNot(c.fProtNot),
179 fPionCon(c.fPionCon),
180 fKaonCon(c.fKaonCon),
15939b4c 181 fProtCon(c.fProtCon)
3882540a 182{
183 //
184 // Copy Constructor
185 //
15939b4c 186 for (Int_t i=0; i<7; i++){
65896ecb 187 fHmpPhotons[i] = c.fHmpPhotons[i];
188 fHmpPhotP[i] = c.fHmpPhotP[i];
189 fHmpPhotSin2th[i] = c.fHmpPhotSin2th[i];
190 fHmpMipTrkDistPosX[i] = c.fHmpMipTrkDistPosX[i];
191 fHmpMipTrkDistNegX[i] = c.fHmpMipTrkDistNegX[i];
15939b4c 192 fHmpMipTrkDistPosY[i] = c.fHmpMipTrkDistPosY[i];
193 fHmpMipTrkDistNegY[i] = c.fHmpMipTrkDistNegY[i];
65896ecb 194 fHmpMipCharge[i] = c.fHmpMipCharge[i];
15939b4c 195 }
3882540a 196}
197
198//___________________________________________________________________________
199AliHMPIDTaskQA::~AliHMPIDTaskQA() {
200 //
201 //destructor
202 //
203 Info("~AliHMPIDTaskQA","Calling Destructor");
4860c9db 204 if (fHmpHistList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHmpHistList;
3882540a 205}
206
207//___________________________________________________________________________
15939b4c 208void AliHMPIDTaskQA::ConnectInputData(Option_t *option)
3882540a 209{
15939b4c 210 AliAnalysisTaskSE::ConnectInputData(option);
3882540a 211
15939b4c 212 // Connect ESD here
3882540a 213 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
214 if (!esdH) {
215 AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
216 } else
217 fESD = esdH->GetEvent();
218
219 if (fUseMC){
220 // Connect MC
221 AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
222 if (!mcH) {
223 AliDebug(2,Form("ERROR: Could not get MCEventHandler"));
224 fUseMC = kFALSE;
31096cc9 225 }
3882540a 226 }
227}
228
229//___________________________________________________________________________
230void AliHMPIDTaskQA::UserExec(Option_t *)
231{
735bc477 232 Double_t priors[10]={1.,1.,1.,1.,1.,0.,0.,0.,0.,0.}; //{0.01,0.01,0.83,0.10,0.5};
3882540a 233 Double_t probs[5];
234 AliPID *pPid = new AliPID();
235 pPid->SetPriors(priors);
3882540a 236 AliESDtrack *track=0;
237 TParticle *pPart=0;
238 AliStack* pStack = 0;
001fa2ee 239 Int_t label = -1;
3882540a 240 if (fUseMC){
31096cc9 241 AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
720e01cf 242 if (mcH) {
243 fMC = mcH->MCEvent();
244 pStack = fMC->Stack();
e5c51efe 245 } else {
246 AliFatal("fMC flag set but MC handler not available");
247 return;
720e01cf 248 }
3882540a 249 }
250
251 //
252 // Main loop function, executed on Event basis
253 //
f5d9a192 254
255 if( !fESD->GetPrimaryVertex()) return;
256 if( fESD->GetPrimaryVertex()->GetNContributors() < 1 ) return;
257 if( TMath::Abs(fESD->GetPrimaryVertex()->GetZ()) > 10.0 /* cm */) return;
258
259
260 for (Int_t iTrack = 0; iTrack < fESD->GetNumberOfTracks(); iTrack++) {
3882540a 261
262 track = fESD->GetTrack(iTrack);
263 if(!track) continue;
f5d9a192 264 if(! track->IsOn(AliESDtrack::kITSrefit) || !track->IsOn(AliESDtrack::kITSrefit) ) continue;
265
3882540a 266 Double_t rin[3], rout[3];
267 track->GetInnerXYZ(rin);
268 track->GetOuterXYZ(rout);
269 Double_t ktol = 0.001;
65896ecb 270 Double_t thetaCh = track->GetHMPIDsignal();
3882540a 271
65896ecb 272 if(Equal(thetaCh,-20.,ktol)) fHmpTrkFlags->Fill(0);
273 else if(Equal(thetaCh,-9.,ktol)) fHmpTrkFlags->Fill(1);
274 else if(Equal(thetaCh,-5.,ktol)) fHmpTrkFlags->Fill(2);
275 else if(Equal(thetaCh,-11.,ktol)) fHmpTrkFlags->Fill(3);
276 else if(Equal(thetaCh,-22.,ktol)) fHmpTrkFlags->Fill(4);
3882540a 277 else fHmpTrkFlags->Fill(4);
278
65896ecb 279 if(Equal(thetaCh,-20.,ktol)) continue;
3882540a 280 if(track->GetHMPIDcluIdx() < 0) continue;
281
282 Int_t q, nph;
283 Float_t x, y;
284 Float_t xpc, ypc, th, ph;
285 track->GetHMPIDmip(x,y,q,nph);
286 track->GetHMPIDtrk(xpc,ypc,th,ph);
287
288 if(Equal(x,0.,ktol) && Equal(y,0.,ktol) && Equal(xpc,0.,ktol) && Equal(ypc,0.,ktol)) continue;
289
15939b4c 290 Float_t sign = track->GetSign();
85c88881 291 Int_t ch = track->GetHMPIDcluIdx()/1000000;
292 if( ch < 0 || ch > 6 ) continue; //Chamber numbering is [0,6]
293
65896ecb 294 if (sign > 0.) fHmpMipTrkDistPosX[ch]->Fill(xpc - x), fHmpMipTrkDistPosY[ch]->Fill(ypc - y);
295 if (sign < 0.) fHmpMipTrkDistNegX[ch]->Fill(xpc - x), fHmpMipTrkDistNegY[ch]->Fill(ypc - y);
296 fHmpMipCharge[ch]->Fill(q);
297 Double_t dist = TMath::Sqrt((xpc - x)*(xpc - x) + (ypc - y)*(ypc - y));
3882540a 298 if (dist <= 3.0) fHmpMipCharge3cm->Fill(q);
65896ecb 299 fHmpMipTrkDist->Fill(dist);
3882540a 300
3882540a 301 track->GetHMPIDpid(probs);
302 pPid->SetProbabilities(probs);
303 if (fUseMC){
304 if ((label = track->GetLabel()) < 0) continue;
305 pPart = pStack->Particle(label);
306 }
307
65896ecb 308 if(thetaCh > 0 ){
309 Double_t pHmp[3] = {0}, pHmp3 = 0;
310 if (track->GetOuterHmpPxPyPz(pHmp)) pHmp3 = TMath::Sqrt(pHmp[0]*pHmp[0]+pHmp[1]*pHmp[1]+pHmp[2]*pHmp[2]);
15939b4c 311 if (pHmp3) fHmpPesdPhmp->Fill(track->P(),pHmp3);
65896ecb 312 fHmpCkovPesd->Fill(track->P(),thetaCh);
313 if (pHmp3) fHmpCkovPhmp->Fill(pHmp3,thetaCh);
314 fHmpPhotons[ch]->Fill(nph);
315 fHmpPhotP[ch]->Fill(pHmp3,nph);
316 Double_t sin2 = TMath::Power(TMath::Sin(th),2);
317 fHmpPhotSin2th[ch]->Fill(sin2,nph);
3882540a 318
319 if (fUseMC && dist<0.5 && TMath::Abs(th)<0.13){
320 if (!pStack->IsPhysicalPrimary(label)) continue;
321 if (track->Pt()<1. || track->Pt()>5.) continue;
322 Int_t pdgCode = TMath::Abs(pPart->GetPdgCode());
323 Int_t ptBin=(Int_t) (2*(track->Pt()-1));
324 if (pdgCode!=2212) fProtCon->Fill(ptBin);
325 if (pdgCode==2212){
326 fProtTot->Fill(ptBin);
327 fProtEff->Fill(ptBin,pPid->GetProbability(AliPID::kProton));
328 fPionNot->Fill(ptBin,pPid->GetProbability(AliPID::kPion));
329 fKaonNot->Fill(ptBin,pPid->GetProbability(AliPID::kKaon));
330 }
331 if (pdgCode!=211) fPionCon->Fill(ptBin);
332 if (pdgCode!=321) fKaonCon->Fill(ptBin);
333 if (pdgCode==211){
334 if (ptBin < 6){
335 Float_t weight=pPid->GetProbability(AliPID::kElectron)+
336 pPid->GetProbability(AliPID::kMuon)+
337 pPid->GetProbability(AliPID::kPion);
338 fPionTot->Fill(ptBin);
339 fPionEff->Fill(ptBin,weight);
340 fKaonNot->Fill(ptBin,pPid->GetProbability(AliPID::kKaon));
341 }
342 fProtNot->Fill(ptBin,pPid->GetProbability(AliPID::kProton));
343 }
344 if (pdgCode==321){
345 if (ptBin < 6){
346 fKaonTot->Fill(ptBin);
347 fKaonEff->Fill(ptBin,pPid->GetProbability(AliPID::kKaon));
348 fPionNot->Fill(ptBin,(pPid->GetProbability(AliPID::kPion)));
349 }
350 fProtNot->Fill(ptBin,(pPid->GetProbability(AliPID::kProton)));
351 }
352 }
353 }//there is signal
3882540a 354 }//track loop
355 delete pPid;
356
357 /* PostData(0) is taken care of by AliAnalysisTaskSE */
358 PostData(1,fHmpHistList);
3882540a 359}
360
361//___________________________________________________________________________
362void AliHMPIDTaskQA::Terminate(Option_t*)
363{
364 // The Terminate() function is the last function to be called during
365 // a query. It always runs on the client, it can be used to present
366 // the results graphically or save the results to file.
367
368 Info("Terminate"," ");
369 AliAnalysisTaskSE::Terminate();
370
371}
372
373//___________________________________________________________________________
374void AliHMPIDTaskQA::UserCreateOutputObjects() {
375 //
376 //HERE ONE CAN CREATE OUTPUT OBJECTS
377 //TO BE SET BEFORE THE EXECUTION OF THE TASK
378 //
379
380 //slot #1
15939b4c 381// OpenFile(1);
3882540a 382 fHmpHistList = new TList();
15939b4c 383 fHmpHistList->SetOwner();
384
385 fHmpPesdPhmp = new TH2F("fHmpPesdPhmp","HMPID: ESD p - running p;HMP p (GeV/c);ESD p (Gev/c)",100,0,10,100,0,10);
386 fHmpHistList->Add(fHmpPesdPhmp);
387
70277699 388 fHmpCkovPesd = new TH2F("fHmpCkovPesd","HMPID: ThetaCherenkov vs P;p_esd (GeV/c);#Theta_C;Entries",500,0,10,500,0,1.0);
15939b4c 389 fHmpHistList->Add(fHmpCkovPesd);
390
70277699 391 fHmpCkovPhmp = new TH2F("fHmpCkovPhmp","HMPID: ThetaCherenkov vs P;p_hmp (GeV/c);#Theta_C;Entries",500,0,10,500,0,1.0);
15939b4c 392 fHmpHistList->Add(fHmpCkovPhmp);
3882540a 393
15939b4c 394 for (Int_t i=0; i<7; i++){
65896ecb 395 TString title=Form("MIP-Track distance in local X, Chamber %d;distance (cm);Entries",i);
396 fHmpMipTrkDistPosX[i] = new TH1F(Form("fHmpMipTrkDistPosX%d",i),title.Data(),800,-20,20);
397 fHmpHistList->Add(fHmpMipTrkDistPosX[i]);
398 fHmpMipTrkDistNegX[i] = new TH1F(Form("fHmpMipTrkDistNegX%d",i),title.Data(),800,-20,20);
399 fHmpHistList->Add(fHmpMipTrkDistNegX[i]);
400
401 title=Form("MIP-Track distance in local Y, Chamber %d;distance (cm);Entries",i);
15939b4c 402 fHmpMipTrkDistPosY[i] = new TH1F(Form("fHmpMipTrkDistPosY%d",i),title.Data(),800,-20,20);
403 fHmpHistList->Add(fHmpMipTrkDistPosY[i]);
404 fHmpMipTrkDistNegY[i] = new TH1F(Form("fHmpMipTrkDistNegY%d",i),title.Data(),800,-20,20);
405 fHmpHistList->Add(fHmpMipTrkDistNegY[i]);
65896ecb 406
407 title=Form("Mip charge distribution, Chamber %d;Charge;Entries",i);
408 fHmpMipCharge[i] = new TH1F(Form("fHmpMipCharge%d",i),title.Data(),5001,-0.5,5000.5);
409 fHmpHistList->Add(fHmpMipCharge[i]);
410
411 title=Form("Photons, Chamber %d;N of Photons;Entries",i);
412 fHmpPhotons[i] = new TH1F(Form("fHmpPhotons%d",i),title.Data(),100,0,100);
413 fHmpHistList->Add(fHmpPhotons[i]);
414
415 title=Form("Photons versus HMP momentum, Chamber %d;P (GeV);N of Photons",i);
416 fHmpPhotP[i] = new TH2F(Form("fHmpPhotP%d",i),title.Data(),200,0.,20.,100,0,100);
417 fHmpHistList->Add(fHmpPhotP[i]);
418
419 title=Form("Photons versus sin(th)^2 (uncorrected), Chamber %d;P (GeV);N of Photons",i);
420 fHmpPhotSin2th[i] = new TH2F(Form("fHmpPhotSin2th%d",i),title.Data(),100,0.,1.,100,0,100);
421 fHmpHistList->Add(fHmpPhotSin2th[i]);
15939b4c 422 }
3882540a 423
424 fHmpMipCharge3cm = new TH1F("fHmpMipCharge3cm","HMPID MIP Charge;MIP Charge (ADC);Entries",5001,-0.5,5000.5);
425 fHmpHistList->Add(fHmpMipCharge3cm);
426
65896ecb 427 fHmpMipTrkDist = new TH1F("fHmpMipTrkDist","Mip-track distance in all the chambers",100,0.,10.);
428 fHmpHistList->Add(fHmpMipTrkDist);
429
3882540a 430 fHmpTrkFlags = new TH1F("fHmpTrkFlags","HMPID track flags",6,0,6);
431 TString summary[6] = {"NotPerformed","MipDistCut", "MipQdcCut", "NoPhotAccept", "kNoRad", "other"};
432 for(Int_t ibin = 0; ibin < 6; ibin++) fHmpTrkFlags->GetXaxis()->SetBinLabel(ibin+1,Form("%i %s",ibin+1,summary[ibin].Data()));
433 fHmpHistList->Add(fHmpTrkFlags);
434
435 fPionEff = new TH1F("PionEff","Identified pions",fN1,0,fN1);
436 fKaonEff = new TH1F("KaonEff","Identified kaons",fN1,0,fN1);
437 fProtEff = new TH1F("ProtEff","Identified protons",fN2,0,fN2);
438 fPionTot = new TH1I("PionTot","Total MC pions",fN1,0,fN1);
439 fKaonTot = new TH1I("KaonTot","Total MC kaons",fN1,0,fN1);
440 fProtTot = new TH1I("ProtTot","Total MC protons",fN2,0,fN2);
441 fPionNot = new TH1F("PionNot","Misidentified pions",fN1,0,fN1);
442 fKaonNot = new TH1F("KaonNot","Misidentified kaons",fN1,0,fN1);
443 fProtNot = new TH1F("ProtNot","Misidentified protons",fN2,0,fN2);
444 fPionCon = new TH1I("PionCon","Total not MC pions",fN1,0,fN1);
445 fKaonCon = new TH1I("KaonCon","Total not MC kaons",fN1,0,fN1);
446 fProtCon = new TH1I("ProtCon","Total not MC protons",fN2,0,fN2);
447
448 fHmpHistList->Add(fPionEff); fHmpHistList->Add(fKaonEff); fHmpHistList->Add(fProtEff);
449 fHmpHistList->Add(fPionTot); fHmpHistList->Add(fKaonTot); fHmpHistList->Add(fProtTot);
450 fHmpHistList->Add(fPionNot); fHmpHistList->Add(fKaonNot); fHmpHistList->Add(fProtNot);
451 fHmpHistList->Add(fPionCon); fHmpHistList->Add(fKaonCon); fHmpHistList->Add(fProtCon);
452
15939b4c 453 PostData(1,fHmpHistList);
3882540a 454}
455
456//____________________________________________________________________________________________________________________________________
457Bool_t AliHMPIDTaskQA::Equal(Double_t x, Double_t y, Double_t tolerance)
458{
459 return abs(x - y) <= tolerance ;
460}
461
462#endif