1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //==============================================================================
17 // AliHMPIDAnalysysTask - Class representing a basic analysis tool of HMPID data
18 // A set of histograms is created.
19 //==============================================================================
21 // By means of AliHMPIDPerformanceTask.C macro it is possible to use this class
22 // to perform the analysis on local data, on data on alien using local machine
25 #ifndef AliHMPIDPERFORMANCETASK_CXX
26 #define AliHMPIDPERFORMANCETASK_CXX
34 #include "TGraphErrors.h"
35 #include "AliAnalysisManager.h"
36 #include "AliESDInputHandler.h"
37 #include "AliMCEventHandler.h"
38 #include "AliMCEvent.h"
39 #include "AliESDtrack.h"
40 #include "AliESDEvent.h"
41 #include "AliESDVertex.h"
42 #include "AliESDfriend.h"
43 #include "AliHMPIDCluster.h"
44 #include "AliESDfriendTrack.h"
47 #include "AliESDtrackCuts.h"
48 #include "AliHMPIDPerformanceTask.h"
49 #include "AliCentrality.h"
51 ClassImp(AliHMPIDPerformanceTask)
53 //__________________________________________________________________________
54 AliHMPIDPerformanceTask::AliHMPIDPerformanceTask() :
55 fESD(0x0),fESDfriend(0x0),fEsdTrackCuts(0x0),fClu(0x0),fMC(0x0),fEsdVtx(0x0),fCentrality(0x0),fEsdTrack(0x0),fEsdFriendTrack(0x0),
56 fCalibObject(0x0), fUseMC(kTRUE), fHmpHistList(0x0), fHmpNevents(0x0),fHmpNevPerTrigClass(0x0),
57 fGlobalEventNumber(0),
60 fvFiredTriggerClasses(0x0), fvRunNumber(0), fvBunchCrossNumber(0),fvOrbitNumber(0), fvPeriodNumber(0), fvMagField(0),
61 fvVertexX(0),fvVertexY(0),fvVertexZ(0),fvVertexNContributors(0), fvPesd(0),fvPhmpMag(0),fvCentrality(0),
62 fvAcceptedTracks(0),fvRefMultTpc(0), fvHmpChi2(0),fvHmpCluIndx(0),fvHmpMipX(0),fvHmpMipY(0),fvHmpMipQ(0),fvHmpMipNPhots(0),fvHmpSignal(0),
63 fvHmpTrkX(0),fvHmpTrkY(0),fvHmpTrkTheta(0),fvHmpTrkPhi(0), fvHmpCluQ(0), fvHmpCluX(0),fvHmpCluY(0),fvHmpCluCh(0),fvHmpCluSize(0),fvHmpCluBox(0),fvHmpCluStatus(0),
64 fvEsdTrackAccepted(0), fvKinkIndex(0),fvTofSignal(0),
70 for (Int_t i=0; i<3; i++) fvPhmp[i]=0;
71 for (Int_t i=0; i<5; i++) fvHmpPid[i] = 0;
74 //___________________________________________________________________________
75 AliHMPIDPerformanceTask::AliHMPIDPerformanceTask(const Char_t* name) :
76 AliAnalysisTaskSE(name),
77 fESD(0x0), fESDfriend(0x0), fEsdTrackCuts(0x0), fClu(0x0),fMC(0x0), fEsdVtx(0x0),fCentrality(0x0),
78 fEsdTrack(0x0),fEsdFriendTrack(0x0), fCalibObject(0x0), fUseMC(kTRUE),
79 fHmpHistList(0x0), fHmpNevents(0x0),fHmpNevPerTrigClass(0x0),
80 fGlobalEventNumber(0), fvType(0), fvFiredTriggerClasses(0x0), fvRunNumber(0), fvBunchCrossNumber(0),fvOrbitNumber(0),
81 fvPeriodNumber(0),fvMagField(0), fvVertexX(0),fvVertexY(0),fvVertexZ(0),fvVertexNContributors(0),
82 fvPesd(0),fvPhmpMag(0),fvCentrality(0), fvAcceptedTracks(0),fvRefMultTpc(0),
83 fvHmpChi2(0),fvHmpCluIndx(0),fvHmpMipX(0),fvHmpMipY(0),fvHmpMipQ(0),fvHmpMipNPhots(0),fvHmpSignal(0),
84 fvHmpTrkX(0),fvHmpTrkY(0),fvHmpTrkTheta(0),fvHmpTrkPhi(0), fvHmpCluQ(0), fvHmpCluX(0),fvHmpCluY(0),fvHmpCluCh(0),fvHmpCluSize(0),fvHmpCluBox(0),fvHmpCluStatus(0),
85 fvEsdTrackAccepted(0), fvKinkIndex(0),fvTofSignal(0),
90 // Constructor. Initialization of Inputs and Outputs
92 for (Int_t i=0; i<3; i++) fvPhmp[i]=0;
93 for (Int_t i=0; i<5; i++) fvHmpPid[i] = 0;
94 DefineOutput(1,TList::Class());
95 DefineOutput(2,TTree::Class());
98 //___________________________________________________________________________
99 AliHMPIDPerformanceTask& AliHMPIDPerformanceTask::operator=(const AliHMPIDPerformanceTask& c)
102 // Assignment operator
105 AliAnalysisTaskSE::operator=(c);
107 fESDfriend = c.fESDfriend;
108 fEsdTrackCuts = c.fEsdTrackCuts;
112 fCentrality = c.fCentrality;
113 fEsdTrack = c.fEsdTrack;
114 fEsdFriendTrack =c.fEsdFriendTrack;
115 fCalibObject = c.fCalibObject;
118 fHmpHistList = c.fHmpHistList;
119 fHmpNevents = c.fHmpNevents;
120 fHmpNevPerTrigClass = c.fHmpNevPerTrigClass;
121 fGlobalEventNumber = c.fGlobalEventNumber;
123 fvFiredTriggerClasses =c.fvFiredTriggerClasses;
124 fvRunNumber = c.fvRunNumber;
125 fvBunchCrossNumber = c.fvBunchCrossNumber;
126 fvOrbitNumber = c.fvOrbitNumber;
127 fvPeriodNumber = c.fvPeriodNumber;
128 fvMagField =c.fvMagField;
129 fvVertexX = c.fvVertexX;
130 fvVertexY = c.fvVertexY;
131 fvVertexZ = c.fvVertexZ;
132 fvVertexNContributors = c.fvVertexNContributors;
134 fvPhmpMag = c.fvPhmpMag;
135 fvCentrality = c.fvCentrality;
136 fvAcceptedTracks = c.fvAcceptedTracks;
137 fvRefMultTpc = c.fvRefMultTpc;
139 fvHmpChi2 = c.fvHmpChi2;
140 fvHmpCluIndx = c.fvHmpCluIndx;
141 fvHmpMipX = c.fvHmpMipX;
142 fvHmpMipY = c.fvHmpMipY;
143 fvHmpMipQ = c.fvHmpMipQ;
144 fvHmpMipNPhots = c.fvHmpMipNPhots;
145 fvHmpSignal = c.fvHmpSignal;
146 fvHmpTrkX = c.fvHmpTrkX;
147 fvHmpTrkY = c.fvHmpTrkY;
148 fvHmpTrkTheta = c.fvHmpTrkTheta;
149 fvHmpTrkPhi = c.fvHmpTrkPhi;
151 fvHmpCluQ = c.fvHmpCluQ;
152 fvHmpCluX = c.fvHmpCluX;
153 fvHmpCluY = c.fvHmpCluY;
154 fvHmpCluCh = c.fvHmpCluCh;
155 fvHmpCluSize = c.fvHmpCluSize;
156 fvHmpCluBox = c.fvHmpCluBox;
157 fvHmpCluStatus = c.fvHmpCluStatus;
158 fvEsdTrackAccepted = c.fvEsdTrackAccepted;
160 fvKinkIndex = c.fvKinkIndex;
161 fvTofSignal = c.fvTofSignal;
165 for (Int_t i=0; i<3; i++) fvPhmp[i] = c.fvPhmp[i];
166 for (Int_t i=0; i<5; i++) fvHmpPid[i] = c.fvHmpPid[i];
171 //___________________________________________________________________________
172 AliHMPIDPerformanceTask::AliHMPIDPerformanceTask(const AliHMPIDPerformanceTask& c) :
173 AliAnalysisTaskSE(c),
174 fESD(c.fESD),fESDfriend(c.fESDfriend),fEsdTrackCuts(c.fEsdTrackCuts),fClu(c.fClu),
175 fMC(c.fMC), fEsdVtx(c.fEsdVtx), fCentrality(c.fCentrality),fEsdTrack(c.fEsdTrack),
176 fEsdFriendTrack(c.fEsdFriendTrack),
177 fCalibObject(c.fCalibObject),
180 fHmpHistList(c.fHmpHistList),
181 fHmpNevents(c.fHmpNevents),
182 fHmpNevPerTrigClass(c.fHmpNevPerTrigClass),
183 fGlobalEventNumber(c.fGlobalEventNumber),
184 fvFiredTriggerClasses(c.fvFiredTriggerClasses),
185 fvRunNumber(c.fvRunNumber),
186 fvBunchCrossNumber(c.fvBunchCrossNumber),
187 fvOrbitNumber(c.fvOrbitNumber),
188 fvPeriodNumber(c.fvPeriodNumber),
189 fvMagField(c.fvMagField),
190 fvVertexX(c.fvVertexX),
191 fvVertexY(c.fvVertexY),
192 fvVertexZ(c.fvVertexZ),
193 fvVertexNContributors(c.fvVertexNContributors),
195 fvPhmpMag(c.fvPhmpMag),
196 fvCentrality(c.fvCentrality),
197 fvAcceptedTracks(c.fvAcceptedTracks),
198 fvRefMultTpc(c.fvRefMultTpc),
199 fvHmpChi2 ( c.fvHmpChi2),
200 fvHmpCluIndx ( c.fvHmpCluIndx),
201 fvHmpMipX ( c.fvHmpMipX),
202 fvHmpMipY ( c.fvHmpMipY),
203 fvHmpMipQ ( c.fvHmpMipQ),
204 fvHmpMipNPhots ( c.fvHmpMipNPhots),
205 fvHmpSignal ( c.fvHmpSignal),
206 fvHmpTrkX ( c.fvHmpTrkX),
207 fvHmpTrkY ( c.fvHmpTrkY),
208 fvHmpTrkTheta ( c.fvHmpTrkTheta),
209 fvHmpTrkPhi ( c.fvHmpTrkPhi),
211 fvHmpCluQ ( c.fvHmpCluQ),
212 fvHmpCluX ( c.fvHmpCluX),
213 fvHmpCluY ( c.fvHmpCluY),
214 fvHmpCluCh ( c.fvHmpCluCh),
215 fvHmpCluSize ( c.fvHmpCluSize),
216 fvHmpCluBox ( c.fvHmpCluBox),
217 fvHmpCluStatus ( c.fvHmpCluStatus),
219 fvEsdTrackAccepted(c.fvEsdTrackAccepted),
220 fvKinkIndex(c.fvKinkIndex),
221 fvTofSignal(c.fvTofSignal),
228 for (Int_t i=0; i<3; i++) fvPhmp[i] = c.fvPhmp[i];
229 for (Int_t i=0; i<5; i++) fvHmpPid[i] = c.fvHmpPid[i];
232 //___________________________________________________________________________
233 AliHMPIDPerformanceTask::~AliHMPIDPerformanceTask() {
237 Info("~AliHMPIDPerformanceTask","Calling Destructor");
238 if (fHmpHistList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fHmpHistList;
241 //___________________________________________________________________________
242 void AliHMPIDPerformanceTask::ConnectInputData(Option_t *)
246 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
248 AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
250 fESD = esdH->GetEvent();
254 AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
256 AliDebug(2,Form("ERROR: Could not get MCEventHandler"));
259 fMC = mcH->MCEvent();
260 if (!fMC) AliDebug(2,Form("ERROR: Could not get MCEvent"));
263 //Init ESD track cuts
264 fEsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
267 //___________________________________________________________________________
268 void AliHMPIDPerformanceTask::UserExec(Option_t *)
272 Printf("ERROR: fESD not available");
276 fHmpNevents->Fill(0);
278 //fEsdVtx = fESD->GetPrimaryVertex();
280 /* check which trigger is fired */ fHmpNevPerTrigClass->Fill(0);
281 if(fESD->IsTriggerClassFired("kMB")) fHmpNevPerTrigClass->Fill(1);
282 if(fESD->IsTriggerClassFired("kINT7")) fHmpNevPerTrigClass->Fill(2);
283 if(fESD->IsTriggerClassFired("kCINT5")) fHmpNevPerTrigClass->Fill(3);
284 if(fESD->IsTriggerClassFired("kFastOnly")) fHmpNevPerTrigClass->Fill(4);
285 if(fESD->IsTriggerClassFired("kHighMult")) fHmpNevPerTrigClass->Fill(5);
286 if(fESD->IsTriggerClassFired("kAnyINT")) fHmpNevPerTrigClass->Fill(6);
288 fvFiredTriggerClasses = Form("%s",(fESD->GetFiredTriggerClasses()).Data());
291 if(!fESD->GetPrimaryVertex() || !fESD->GetPrimaryVertex() || fESD->GetPrimaryVertex()->GetNContributors()<1) { // SPD vertex
292 if(!fESD->GetPrimaryVertexSPD()) return;
293 if(!fESD->GetPrimaryVertexSPD()->GetStatus()) return;
294 if(fESD->GetPrimaryVertexSPD()->GetNContributors()<1) return; // no good vertex, skip event
297 fHmpNevents->Fill(1);
298 if(fESD->GetPrimaryVertex()) {
299 fvVertexX = fESD->GetPrimaryVertex()->GetX();
300 fvVertexY = fESD->GetPrimaryVertex()->GetY();
301 fvVertexZ = fESD->GetPrimaryVertex()->GetZ();
302 fvVertexNContributors = fESD->GetPrimaryVertex()->GetNContributors();
303 fvMagField = fESD->GetMagneticField();
306 fCentrality = fESD->GetCentrality();
309 fvCentrality = fCentrality->GetCentralityPercentile("V0M");
313 // Loop over tracks and call Process function
318 fvAcceptedTracks = fEsdTrackCuts->CountAcceptedTracks(fESD);
319 fvRefMultTpc = fEsdTrackCuts->GetReferenceMultiplicity(fESD, kTRUE);
324 fESDfriend=(AliESDfriend*)(((AliESDEvent*)fESD)->FindListObject("AliESDfriend"));
326 // if (!fESDfriend) { Printf("ERROR: fESDfriend not available"); }
328 Double_t ktol = 0.001;
330 fvRunNumber = fESD->GetRunNumber();
331 fvBunchCrossNumber = fESD->GetBunchCrossNumber();
332 fvOrbitNumber = fESD->GetOrbitNumber();
333 fvPeriodNumber = fESD->GetPeriodNumber();
335 fGlobalEventNumber = (ULong64_t)fESD->GetBunchCrossNumber() + (ULong64_t)fESD->GetOrbitNumber()*3564+ (ULong64_t)fESD->GetPeriodNumber()*16777215*3564;
337 fEsdTrackCuts -> CountAcceptedTracks(fESD);
340 for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) { // tracks loop
342 fEsdTrack=fESD->GetTrack(iTrack);
343 if(!fEsdTrack) continue;
345 if(fEsdTrackCuts && fEsdTrackCuts->AcceptTrack(fEsdTrack) == kTRUE ) fvEsdTrackAccepted = 1;
346 else fvEsdTrackAccepted = 0;
349 if(Equal(fEsdTrack->GetHMPIDsignal(),-20.,ktol)) continue;
350 if(fEsdTrack->GetHMPIDcluIdx() < 0) continue;
352 fvPesd = fEsdTrack->P();
354 //fEsdTrack->GetOuterHmpPxPyPz(fvPhmp);
355 fvPhmpMag = TMath::Sqrt(fvPhmp[0]*fvPhmp[0] + fvPhmp[1]*fvPhmp[1] + fvPhmp[2]*fvPhmp[2] );
357 fvTofSignal = fEsdTrack->GetTOFsignal();
359 fEsdFriendTrack=fESDfriend->GetTrack(iTrack);
362 fvHmpChi2 = fEsdTrack -> GetHMPIDchi2();
363 fvHmpCluIndx = fEsdTrack -> GetHMPIDcluIdx();
364 fEsdTrack->GetHMPIDmip(fvHmpMipX,fvHmpMipY,fvHmpMipQ,fvHmpMipNPhots);
366 //oid GetHMPIDpid(Double_t* p) const
367 fvHmpSignal= fEsdTrack->GetHMPIDsignal();
368 fEsdTrack->GetHMPIDtrk(fvHmpTrkX,fvHmpTrkY,fvHmpTrkTheta, fvHmpTrkPhi);
369 fEsdTrack->GetHMPIDpid(fvHmpPid);
371 fvKinkIndex = fEsdTrack->GetKinkIndex(0);
373 fvType = 0; fTree->Fill();
374 if(fEsdFriendTrack) {
375 for(Int_t j=0;( fCalibObject=fEsdFriendTrack->GetCalibObject(j));++j){ // calib object loop
376 if((fClu=dynamic_cast<AliHMPIDCluster*>(fCalibObject))){ // if HMPID calib object
377 fvHmpCluQ = fClu->Q();
378 fvHmpCluX = fClu->X();
379 fvHmpCluY = fClu->Y();
380 fvHmpCluCh = fClu->Ch();
381 fvHmpCluSize = fClu->Size();
382 fvHmpCluBox = fClu->Box();
383 fvHmpCluStatus = fClu->Status();
385 fvType = 1; fTree->Fill();
387 } // if HMPID calib object
388 } // calib object loop
389 }//there is fEsdFriendTrack
395 /* PostData(0) is taken care of by AliAnalysisTaskSE */
396 PostData(1,fHmpHistList);
399 //___________________________________________________________________________
400 void AliHMPIDPerformanceTask::Terminate(Option_t*)
402 // The Terminate() function is the last function to be called during
403 // a query. It always runs on the client, it can be used to present
404 // the results graphically or save the results to file.
406 Info("Terminate"," ");
410 fHmpHistList = dynamic_cast<TList*> (GetOutputData(1));
413 AliError("Histogram List is not available");
417 AliAnalysisTaskSE::Terminate();
421 //___________________________________________________________________________
422 void AliHMPIDPerformanceTask::UserCreateOutputObjects() {
424 //HERE ONE CAN CREATE OUTPUT OBJECTS
425 //TO BE SET BEFORE THE EXECUTION OF THE TASK
430 fHmpHistList = new TList();
431 fHmpHistList->SetOwner();
433 fHmpNevents = new TH1F("fHmpNevents","Number of events",2,0,2);
434 fHmpHistList->Add(fHmpNevents);
436 fHmpNevPerTrigClass = new TH1I("fHmpNevPerTrigClass","Number of event per trigger class;Trigger class;Events",10,0,10);
437 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(1,"All coll.");
438 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(2,"MB");
439 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(3,"INT7");
440 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(4,"CINT5");
441 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(5,"FastOnly");
442 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(6,"HighMult");
443 fHmpNevPerTrigClass->GetXaxis()->SetBinLabel(7,"AnyINT");
444 fHmpHistList->Add(fHmpNevPerTrigClass);
448 fTree = new TTree("TreePhot","Tree with photon clusters information");
449 fTree->Branch("fvFiredTriggerClasses",fvFiredTriggerClasses,"fvFiredTriggerClasses/C");
450 fTree->Branch("fvRunNumber",&fvRunNumber,"fvRunNumber/I");
451 fTree->Branch("fvBunchCrossNumber",&fvBunchCrossNumber,"fvBunchCrossNumber/I");
452 fTree->Branch("fvOrbitNumber",&fvOrbitNumber,"fvOrbitNumber/I");
453 fTree->Branch("fvPeriodNumber",&fvPeriodNumber,"fvPeriodNumber/I");
454 fTree->Branch("fvMagField",&fvMagField,"fvMagField/D");
455 fTree->Branch("fvVertexX",&fvVertexX,"fvVertexX/D");
456 fTree->Branch("fvVertexY",&fvVertexY,"fvVertexY/D");
457 fTree->Branch("fvVertexZ",&fvVertexZ,"fvVertexZ/D");
458 fTree->Branch("fvVertexNContributors",&fvVertexNContributors,"fvVertexNContributors/I");
459 fTree->Branch("fvCentrality",&fvCentrality,"fvCentrality/D");
460 fTree->Branch("fvAcceptedTracks",&fvAcceptedTracks,"fvAcceptedTracks/I");
461 fTree->Branch("fvRefMultTpc",&fvRefMultTpc,"fvRefMultTpc/I");
462 fTree->Branch("fvHmpChi2",&fvHmpChi2,"fvHmpChi2/D");
463 fTree->Branch("fvHmpCluIndx",&fvHmpCluIndx,"fvHmpCluIndx/I");
464 fTree->Branch("fvHmpMipX",&fvHmpMipX,"fvHmpMipX/F");
465 fTree->Branch("fvHmpMipY",&fvHmpMipY,"fvHmpMipY/F");
466 fTree->Branch("fvHmpMipQ",&fvHmpMipQ,"fvHmpMipQ/I");
467 fTree->Branch("fvHmpMipNPhots",&fvHmpMipNPhots,"fvHmpMipNPhots/I");
468 fTree->Branch("fvHmpSignal",&fvHmpSignal,"fvHmpSignal/D");
469 fTree->Branch("fvHmpTrkX",&fvHmpTrkX,"fvHmpTrkX/F");
470 fTree->Branch("fvHmpTrkY",&fvHmpTrkY,"fvHmpTrkY/F");
471 fTree->Branch("fvHmpTrkTheta",&fvHmpTrkTheta,"fvHmpTrkTheta/F");
472 fTree->Branch("fvHmpTrkPhi",&fvHmpTrkPhi,"fvHmpTrkPhi/F");
473 fTree->Branch("fvHmpPid",fvHmpPid,"fvHmpPid/D");
474 fTree->Branch("fvType",&fvType,"fvType/I");
475 fTree->Branch("fvHmpCluQ",&fvHmpCluQ,"fvHmpCluQ/D");
476 fTree->Branch("fvHmpCluX",&fvHmpCluX,"fvHmpCluX/D");
477 fTree->Branch("fvHmpCluY",&fvHmpCluY,"fvHmpCluY/D");
478 fTree->Branch("fvHmpCluCh",&fvHmpCluCh,"fvHmpCluCh/I");
479 fTree->Branch("fvHmpCluSize",&fvHmpCluSize,"fvHmpCluSize/I");
480 fTree->Branch("fvHmpCluBox",&fvHmpCluBox,"fvHmpCluBox/I");
481 fTree->Branch("fvHmpCluStatus",&fvHmpCluStatus,"fvHmpCluStatus/I");
482 fTree->Branch("fvEsdTrackAccepted",&fvEsdTrackAccepted,"fvEsdTrackAccepted/I");
483 fTree->Branch("fvKinkIndex",&fvKinkIndex,"fvKinkIndex/I");
484 fTree->Branch("fvTofSignal",&fvTofSignal,"fvTofSignal/D");
486 PostData(1,fHmpHistList);
489 //____________________________________________________________________________________________________________________________________
490 Bool_t AliHMPIDPerformanceTask::Equal(Double_t x, Double_t y, Double_t tolerance)
492 return abs(x - y) <= tolerance ;
494 //____________________________________________________________________________________________________________________________________