Merged Cvetans RowHoughTransformer, Anders latest developments in comp
[u/mrichter/AliRoot.git] / HBTAN / AliHBTReaderESD.cxx
CommitLineData
7be13e68 1#include "AliHBTReaderESD.h"
7e35966a 2//____________________________________________________________________
3//////////////////////////////////////////////////////////////////////
4// //
5// class AliHBTReaderESD //
6// //
7// reader for ALICE Event Summary Data (ESD). //
8// //
9// Piotr.Skowronski@cern.ch //
10// //
11//////////////////////////////////////////////////////////////////////
7be13e68 12
13#include <TPDGCode.h>
14#include <TString.h>
15#include <TObjString.h>
16#include <TTree.h>
17#include <TFile.h>
88378f71 18#include <TKey.h>
7be13e68 19#include <TParticle.h>
58734aa5 20#include <TH1.h>
7be13e68 21
88378f71 22#include <AliRun.h>
bed069a4 23#include <AliRunLoader.h>
24#include <AliStack.h>
7be13e68 25#include <AliESDtrack.h>
26#include <AliESD.h>
27
28#include "AliHBTRun.h"
29#include "AliHBTEvent.h"
30#include "AliHBTParticle.h"
31#include "AliHBTParticleCut.h"
88378f71 32#include "AliHBTTrackPoints.h"
33#include "AliHBTClusterMap.h"
7be13e68 34
35ClassImp(AliHBTReaderESD)
36
bed069a4 37AliHBTReaderESD::AliHBTReaderESD(const Char_t* esdfilename, const Char_t* galfilename):
7be13e68 38 fESDFileName(esdfilename),
bed069a4 39 fGAlFileName(galfilename),
40 fFile(0x0),
41 fRunLoader(0x0),
88378f71 42 fKeyIterator(0x0),
43 fReadParticles(kFALSE),
eb9ddbc0 44 fCheckParticlePID(kFALSE),
88378f71 45 fNTrackPoints(0),
46 fdR(0.0),
47 fClusterMap(kFALSE),
48 fNTPCClustMin(0),
49 fNTPCClustMax(150),
50 fTPCChi2PerClustMin(0.0),
51 fTPCChi2PerClustMax(10e5),
52 fC00Min(0.0),
53 fC00Max(10e5),
54 fC11Min(0.0),
55 fC11Max(10e5),
56 fC22Min(0.0),
57 fC22Max(10e5),
58 fC33Min(0.0),
59 fC33Max(10e5),
60 fC44Min(0.0),
61 fC44Max(10e5),
62 fTPCC00Min(0.0),
63 fTPCC00Max(10e5),
64 fTPCC11Min(0.0),
65 fTPCC11Max(10e5),
66 fTPCC22Min(0.0),
67 fTPCC22Max(10e5),
68 fTPCC33Min(0.0),
69 fTPCC33Max(10e5),
70 fTPCC44Min(0.0),
71 fTPCC44Max(10e5)
72
7be13e68 73{
74 //cosntructor
75 if ( ((Int_t)kNSpecies) != ((Int_t)AliESDtrack::kSPECIES))
76 Fatal("AliHBTReaderESD","ESD defintions probobly changed. Ask Youra.");
77}
78/********************************************************************/
79
bed069a4 80AliHBTReaderESD::AliHBTReaderESD(TObjArray* dirs,const Char_t* esdfilename, const Char_t* galfilename):
7be13e68 81 AliHBTReader(dirs),
7be13e68 82 fESDFileName(esdfilename),
bed069a4 83 fGAlFileName(galfilename),
84 fFile(0x0),
85 fRunLoader(0x0),
88378f71 86 fKeyIterator(0x0),
87 fReadParticles(kFALSE),
eb9ddbc0 88 fCheckParticlePID(kFALSE),
88378f71 89 fNTrackPoints(0),
90 fdR(0.0),
91 fClusterMap(kFALSE),
92 fNTPCClustMin(0),
93 fNTPCClustMax(150),
94 fTPCChi2PerClustMin(0.0),
95 fTPCChi2PerClustMax(10e5),
96 fC00Min(0.0),
97 fC00Max(10e5),
98 fC11Min(0.0),
99 fC11Max(10e5),
100 fC22Min(0.0),
101 fC22Max(10e5),
102 fC33Min(0.0),
103 fC33Max(10e5),
104 fC44Min(0.0),
105 fC44Max(10e5),
106 fTPCC00Min(0.0),
107 fTPCC00Max(10e5),
108 fTPCC11Min(0.0),
109 fTPCC11Max(10e5),
110 fTPCC22Min(0.0),
111 fTPCC22Max(10e5),
112 fTPCC33Min(0.0),
113 fTPCC33Max(10e5),
114 fTPCC44Min(0.0),
115 fTPCC44Max(10e5)
7be13e68 116{
117 //cosntructor
118 if ( ((Int_t)kNSpecies) != ((Int_t)AliESDtrack::kSPECIES))
119 Fatal("AliHBTReaderESD","ESD defintions probobly changed. Ask Youra.");
120}
121/********************************************************************/
122
123AliHBTReaderESD::~AliHBTReaderESD()
124{
125 //desctructor
bed069a4 126 delete fRunLoader;
88378f71 127 delete fKeyIterator;
7e35966a 128 delete fFile;
7be13e68 129}
bed069a4 130/**********************************************************/
131Int_t AliHBTReaderESD::ReadNext()
7be13e68 132{
bed069a4 133//reads next event from fFile
88378f71 134 //fRunLoader is for reading Kine
7be13e68 135
83a9f895 136 if (AliHBTParticle::GetDebug())
bed069a4 137 Info("ReadNext","Entered");
138
bed069a4 139 if (fParticlesEvent == 0x0) fParticlesEvent = new AliHBTEvent();
140 if (fTracksEvent == 0x0) fTracksEvent = new AliHBTEvent();
141
142 fParticlesEvent->Reset();
143 fTracksEvent->Reset();
144
7be13e68 145 do //do{}while; is OK even if 0 dirs specified. In that case we try to read from "./"
146 {
bed069a4 147 if (fFile == 0x0)
7be13e68 148 {
bed069a4 149 fFile = OpenFile(fCurrentDir);//rl is opened here
150 if (fFile == 0x0)
7be13e68 151 {
bed069a4 152 Error("ReadNext","Cannot get fFile for dir no. %d",fCurrentDir);
153 fCurrentDir++;
154 continue;
155 }
156 fCurrentEvent = 0;
88378f71 157 fKeyIterator = new TIter(fFile->GetListOfKeys());
61f231ad 158// fFile->Dump();
159// fFile->GetListOfKeys()->Print();
bed069a4 160 }
88378f71 161 TKey* key = (TKey*)fKeyIterator->Next();
162 if (key == 0x0)
163 {
164 if (AliHBTParticle::GetDebug() > 2 )
165 {
166 Info("ReadNext","No more keys.");
167 }
168 fCurrentDir++;
169 delete fKeyIterator;
170 fKeyIterator = 0x0;
171 delete fFile;//we have to assume there is no more ESD objects in the fFile
172 fFile = 0x0;
173 delete fRunLoader;
174 fRunLoader = 0x0;
175 continue;
176 }
bed069a4 177 //try to read
88378f71 178
179
180// TObject* esdobj = key->ReadObj();
181// if (esdobj == 0x0)
182// {
183// if (AliHBTParticle::GetDebug() > 2 )
184// {
185// Info("ReadNext","Key read NULL. Key Name is %s",key->GetName());
186// key->Dump();
187// }
188// continue;
189// }
190// esdobj->Dump();
191// AliESD* esd = dynamic_cast<AliESD*>(esdobj);
192
193 TString esdname = "ESD";
bed069a4 194 esdname+=fCurrentEvent;
195 AliESD* esd = dynamic_cast<AliESD*>(fFile->Get(esdname));
196 if (esd == 0x0)
197 {
88378f71 198// if (AliHBTParticle::GetDebug() > 2 )
199// {
200// Info("ReadNext","This key is not an AliESD object %s",key->GetName());
201// }
83a9f895 202 if (AliHBTParticle::GetDebug() > 2 )
bed069a4 203 {
88378f71 204 Info("ReadNext","Can not find AliESD object named %s",esdname.Data());
bed069a4 205 }
206 fCurrentDir++;
88378f71 207 delete fKeyIterator;
208 fKeyIterator = 0x0;
bed069a4 209 delete fFile;//we have to assume there is no more ESD objects in the fFile
bed069a4 210 fFile = 0x0;
88378f71 211 delete fRunLoader;
7e35966a 212 fRunLoader = 0x0;
bed069a4 213 continue;
214 }
61f231ad 215
216 ReadESD(esd);
217
218 fCurrentEvent++;
219 fNEventsRead++;
220 delete esd;
221 return 0;//success -> read one event
222 }while(fCurrentDir < GetNumberOfDirs());//end of loop over directories specified in fDirs Obj Array
223
224 return 1; //no more directories to read
225}
226/**********************************************************/
88378f71 227
61f231ad 228Int_t AliHBTReaderESD::ReadESD(AliESD* esd)
229{
230 //****** Tentative particle type "concentrations"
231 static const Double_t concentr[5]={0.05, 0., 0.85, 0.10, 0.05};
232
233 Double_t pidtable[kNSpecies];//array used for reading pid probabilities from ESD track
234 Double_t w[kNSpecies];
235 Double_t mom[3];//momentum
236 Double_t pos[3];//position
237 Double_t vertexpos[3];//vertex position
238 //Reads one ESD
239 if (esd == 0x0)
240 {
241 Error("ReadESD","ESD is NULL");
242 return 1;
243 }
88378f71 244
61f231ad 245 TDatabasePDG* pdgdb = TDatabasePDG::Instance();
246 if (pdgdb == 0x0)
247 {
248 Error("ReadESD","Can not get PDG Database Instance.");
249 return 1;
250 }
251
252 Float_t mf = esd->GetMagneticField();
253
254 if ( (mf == 0.0) && (fNTrackPoints > 0) )
255 {
256 Error("ReadESD","Magnetic Field is 0 and Track Points Demended. Skipping to next event.");
257 return 1;
258 }
259
260 AliStack* stack = 0x0;
261 if (fReadParticles && fRunLoader)
262 {
263 fRunLoader->GetEvent(fCurrentEvent);
264 stack = fRunLoader->Stack();
265 }
266
267 const AliESDVertex* vertex = esd->GetVertex();
268 if (vertex == 0x0)
269 {
270 Info("ReadESD","ESD returned NULL pointer to vertex - assuming (0.0,0.0,0.0)");
271 vertexpos[0] = 0.0;
272 vertexpos[1] = 0.0;
273 vertexpos[2] = 0.0;
274 }
275 else
276 {
277 vertex->GetXYZ(vertexpos);
278 }
279
280 if (AliHBTParticle::GetDebug() > 0)
281 {
282 Info("ReadESD","Primary Vertex is (%f,%f,%f)",vertexpos[0],vertexpos[1],vertexpos[2]);
283 }
284
285 Info("ReadESD","Reading Event %d",fCurrentEvent);
286
287 Int_t ntr = esd->GetNumberOfTracks();
288 Info("ReadESD","Found %d tracks.",ntr);
289 for (Int_t i = 0;i<ntr; i++)
290 {
291 AliESDtrack *esdtrack = esd->GetTrack(i);
292 if (esdtrack == 0x0)
88378f71 293 {
61f231ad 294 Error("Next","Can not get track %d", i);
295 continue;
88378f71 296 }
61f231ad 297
298 //if (esdtrack->HasVertexParameters() == kFALSE)
299 if ((esdtrack->GetStatus() & AliESDtrack::kITSrefit) == kFALSE)
300 {
301 if (AliHBTParticle::GetDebug() > 2)
302 Info("ReadNext","Particle skipped: Data at vertex not available.");
303 continue;
304 }
305
306 if ((esdtrack->GetStatus() & AliESDtrack::kESDpid) == kFALSE)
bed069a4 307 {
61f231ad 308 if (AliHBTParticle::GetDebug() > 2)
309 Info("ReadNext","Particle skipped: PID BIT is not set.");
310 continue;
bed069a4 311 }
61f231ad 312
313
314 Double_t extx;
315 Double_t extp[5];
316 esdtrack->GetConstrainedExternalParameters(extx,extp);
317 if (extp[4] == 0.0)
318 {
319 if (AliHBTParticle::GetDebug() > 2)
320 Info("ReadNext","Track has 0 contrianed curvature -> Probobly parameters never updated. Skipping.");
321 continue;
322 }
323 esdtrack->GetESDpid(pidtable);
61f231ad 324 esdtrack->GetConstrainedPxPyPz(mom);
61f231ad 325 esdtrack->GetConstrainedXYZ(pos);
326 pos[0] -= vertexpos[0];//we are interested only in relative position to Primary vertex at this point
327 pos[1] -= vertexpos[1];
328 pos[2] -= vertexpos[2];
329
d62f2982 330 Int_t charge = (extp[4] > 0)?1:-1;//if curvature=charg/Pt is positive charge is positive
61f231ad 331
332 //Particle from kinematics
333 AliHBTParticle* particle = 0;
334 Bool_t keeppart = kFALSE;
335 if ( fReadParticles && stack )
bed069a4 336 {
61f231ad 337 if (esdtrack->GetLabel() < 0) continue;//this is fake - we are not able to match any track
338 TParticle *p = stack->Particle(esdtrack->GetLabel());
339 if (p==0x0)
bed069a4 340 {
61f231ad 341 Error("ReadNext","Can not find track with such label.");
bed069a4 342 continue;
343 }
eb9ddbc0 344 if(Pass(p->GetPdgCode()))
345 {
346 if ( AliHBTParticle::GetDebug() > 5 )
347 Info("ReadNext","Simulated Particle PID (%d) did not pass the cut.",p->GetPdgCode());
348 continue; //check if we are intersted with particles of this type
349 }
61f231ad 350// if(p->GetPdgCode()<0) charge = -1;
351 particle = new AliHBTParticle(*p,i);
352
353 }
eb9ddbc0 354
355 if(CheckTrack(esdtrack)) continue;
356
61f231ad 357 //Here we apply Bayes' formula
358 Double_t rc=0.;
359 for (Int_t s=0; s<AliESDtrack::kSPECIES; s++) rc+=concentr[s]*pidtable[s];
360 if (rc==0.0)
361 {
362 if (AliHBTParticle::GetDebug() > 2)
363 Info("ReadNext","Particle rejected since total bayessian PID probab. is zero.");
364 continue;
365 }
366
367 for (Int_t s=0; s<AliESDtrack::kSPECIES; s++) w[s]=concentr[s]*pidtable[s]/rc;
368
369 if (AliHBTParticle::GetDebug() > 4)
370 {
371 Info("ReadNext","###########################################################################");
372 Info("ReadNext","Momentum: %f %f %f",mom[0],mom[1],mom[2]);
373 Info("ReadNext","Position: %f %f %f",pos[0],pos[1],pos[2]);
374 TString msg("Pid list got from track:");
375 for (Int_t s = 0;s<kNSpecies;s++)
7e35966a 376 {
61f231ad 377 msg+="\n ";
378 msg+=s;
379 msg+="(";
380 msg+=charge*GetSpeciesPdgCode((ESpecies)s);
381 msg+="): ";
382 msg+=w[s];
383 msg+=" (";
384 msg+=pidtable[s];
385 msg+=")";
7e35966a 386 }
61f231ad 387 Info("ReadNext","%s",msg.Data());
388 }//if (AliHBTParticle::GetDebug()>4)
389
390 AliHBTTrackPoints* tpts = 0x0;
391 if (fNTrackPoints > 0)
392 {
393 tpts = new AliHBTTrackPoints(fNTrackPoints,esdtrack,mf,fdR);
394 }
395
396 AliHBTClusterMap* cmap = 0x0;
397 if ( fClusterMap )
398 {
399 cmap = new AliHBTClusterMap(esdtrack);
400 }
401
402 for (Int_t s = 0; s<kNSpecies; s++)
403 {
404 Int_t pdgcode = charge*GetSpeciesPdgCode((ESpecies)s);
405 Float_t pp = w[s];
406 if (pp == 0.0)
bed069a4 407 {
61f231ad 408 if ( AliHBTParticle::GetDebug() > 5 )
409 Info("ReadNext","Probability of being PID %d is zero. Continuing.",pdgcode);
bed069a4 410 continue;
411 }
61f231ad 412
413 if(Pass(pdgcode))
bed069a4 414 {
61f231ad 415 if ( AliHBTParticle::GetDebug() > 5 )
416 Info("ReadNext","PID (%d) did not pass the cut.",pdgcode);
417 continue; //check if we are intersted with particles of this type
bed069a4 418 }
61f231ad 419
420 Double_t mass = pdgdb->GetParticle(pdgcode)->Mass();
421 Double_t tEtot = TMath::Sqrt( mom[0]*mom[0] + mom[1]*mom[1] + mom[2]*mom[2] + mass*mass);//total energy of the track
422
423 AliHBTParticle* track = new AliHBTParticle(pdgcode, w[s],i,
424 mom[0], mom[1], mom[2], tEtot,
425 pos[0], pos[1], pos[2], 0.);
426 //copy probabilitis of other species (if not zero)
427 for (Int_t k = 0; k<kNSpecies; k++)
bed069a4 428 {
61f231ad 429 if (k == s) continue;
430 if (w[k] == 0.0) continue;
431 track->SetPIDprobability(charge*GetSpeciesPdgCode( (ESpecies)k ),w[k]);
432 }
433
434 if(Pass(track))//check if meets all criteria of any of our cuts
435 //if it does not delete it and take next good track
436 {
437 if ( AliHBTParticle::GetDebug() > 4 )
438 Info("ReadNext","Track did not pass the cut");
439 delete track;
bed069a4 440 continue;
441 }
7be13e68 442
61f231ad 443 //Single Particle cuts on cluster map and track points rather do not have sense
444 if (tpts)
445 {
446 track->SetTrackPoints(tpts);
447 }
7be13e68 448
61f231ad 449 if (cmap)
bed069a4 450 {
61f231ad 451 track->SetClusterMap(cmap);
452 }
88378f71 453
61f231ad 454 fTracksEvent->AddParticle(track);
455 if (particle) fParticlesEvent->AddParticle(particle);
456 keeppart = kTRUE;
7be13e68 457
61f231ad 458 if (AliHBTParticle::GetDebug() > 4 )
bed069a4 459 {
61f231ad 460 Info("ReadNext","\n\nAdding Particle with incarnation %d",pdgcode);
461 track->Print();
d62f2982 462 if (particle) particle->Print();
463 Info("ReadNext","\n----------------------------------------------\n");
88378f71 464 }
61f231ad 465 }//for (Int_t s = 0; s<kNSpecies; s++)
466
467 if (keeppart == kFALSE)
468 {
469 delete particle;//particle was not stored in event
470 delete tpts;
471 delete cmap;
472 }
473
474 }//for (Int_t i = 0;i<ntr; i++) -- loop over tracks
475
476 Info("ReadNext","Read %d tracks and %d particles from event %d (event %d in dir %d).",
477 fTracksEvent->GetNumberOfParticles(), fParticlesEvent->GetNumberOfParticles(),
478 fNEventsRead,fCurrentEvent,fCurrentDir);
58734aa5 479 fTrackCounter->Fill(fTracksEvent->GetNumberOfParticles());
61f231ad 480 return 0;
bed069a4 481}
61f231ad 482
bed069a4 483/**********************************************************/
61f231ad 484
bed069a4 485void AliHBTReaderESD::Rewind()
486{
7e35966a 487 //rewinds reading
88378f71 488 delete fKeyIterator;
bed069a4 489 delete fFile;
88378f71 490 fFile = 0x0;
491 fKeyIterator = 0x0;
bed069a4 492 delete fRunLoader;
88378f71 493 fRunLoader = 0x0;
bed069a4 494 fCurrentDir = 0;
495 fNEventsRead = 0;
58734aa5 496 if (fTrackCounter) fTrackCounter->Reset();
bed069a4 497}
7be13e68 498/**********************************************************/
bed069a4 499
7be13e68 500TFile* AliHBTReaderESD::OpenFile(Int_t n)
501{
bed069a4 502//opens fFile with kine tree
7be13e68 503
504 const TString& dirname = GetDirName(n);
505 if (dirname == "")
506 {
507 Error("OpenFiles","Can not get directory name");
508 return 0x0;
509 }
510 TString filename = dirname +"/"+ fESDFileName;
511 TFile *ret = TFile::Open(filename.Data());
512
513 if ( ret == 0x0)
514 {
bed069a4 515 Error("OpenFiles","Can't open fFile %s",filename.Data());
7be13e68 516 return 0x0;
517 }
518 if (!ret->IsOpen())
519 {
bed069a4 520 Error("OpenFiles","Can't open fFile %s",filename.Data());
7be13e68 521 return 0x0;
522 }
523
88378f71 524 if (fReadParticles )
bed069a4 525 {
526 fRunLoader = AliRunLoader::Open(dirname +"/"+ fGAlFileName);
527 if (fRunLoader == 0x0)
528 {
529 Error("OpenFiles","Can't get RunLoader for directory %s",dirname.Data());
530 delete ret;
531 return 0x0;
532 }
88378f71 533
bed069a4 534 fRunLoader->LoadHeader();
535 if (fRunLoader->LoadKinematics())
536 {
537 Error("Next","Error occured while loading kinematics.");
538 delete fRunLoader;
539 delete ret;
540 return 0x0;
541 }
542 }
88378f71 543
7be13e68 544 return ret;
545}
546/**********************************************************/
547
548Int_t AliHBTReaderESD::GetSpeciesPdgCode(ESpecies spec)//skowron
549{
550 //returns pdg code from the PID index
551 //ask jura about charge
552 switch (spec)
553 {
554 case kESDElectron:
555 return kPositron;
556 break;
557 case kESDMuon:
558 return kMuonPlus;
559 break;
560 case kESDPion:
561 return kPiPlus;
562 break;
563 case kESDKaon:
564 return kKPlus;
565 break;
566 case kESDProton:
567 return kProton;
568 break;
569 default:
570 ::Warning("GetSpeciesPdgCode","Specie with number %d is not defined.",(Int_t)spec);
571 break;
572 }
573 return 0;
574}
88378f71 575/********************************************************************/
eb9ddbc0 576Bool_t AliHBTReaderESD::CheckTrack(AliESDtrack* t) const
577{
578 //Performs check of the track
579
580 if ( (t->GetConstrainedChi2() < fChi2Min) || (t->GetConstrainedChi2() > fChi2Min) ) return kTRUE;
581
582 if ( (t->GetTPCclusters(0x0) < fNTPCClustMin) || (t->GetTPCclusters(0x0) > fNTPCClustMax) ) return kTRUE;
583
584 Float_t chisqpercl = t->GetTPCchi2()/((Double_t)t->GetTPCclusters(0x0));
585 if ( (chisqpercl < fTPCChi2PerClustMin) || (chisqpercl > fTPCChi2PerClustMin) ) return kTRUE;
586
587 Double_t cc[15];
588 t->GetConstrainedExternalCovariance(cc);
589
590 if ( (cc[0] < fC00Min) || (cc[0] > fC00Max) ) return kTRUE;
591 if ( (cc[2] < fC11Min) || (cc[2] > fC11Max) ) return kTRUE;
592 if ( (cc[5] < fC22Min) || (cc[5] > fC22Max) ) return kTRUE;
593 if ( (cc[9] < fC33Min) || (cc[9] > fC33Max) ) return kTRUE;
594 if ( (cc[14] < fC44Min) || (cc[14] > fC44Max) ) return kTRUE;
595
596
597 t->GetInnerExternalCovariance(cc);
598
599 if ( (cc[0] < fTPCC00Min) || (cc[0] > fTPCC00Max) ) return kTRUE;
600 if ( (cc[2] < fTPCC11Min) || (cc[2] > fTPCC11Max) ) return kTRUE;
601 if ( (cc[5] < fTPCC22Min) || (cc[5] > fTPCC22Max) ) return kTRUE;
602 if ( (cc[9] < fTPCC33Min) || (cc[9] > fTPCC33Max) ) return kTRUE;
603 if ( (cc[14] < fTPCC44Min) || (cc[14] > fTPCC44Max) ) return kTRUE;
604
605 return kFALSE;
606
607}
608/********************************************************************/
609
610void AliHBTReaderESD::SetChi2(Float_t min, Float_t max)
611{
612 //sets range of Chi2 per Cluster
613 fChi2Min = min;
614 fChi2Max = max;
615}
616/********************************************************************/
88378f71 617
618void AliHBTReaderESD::SetTPCNClustersRange(Int_t min,Int_t max)
619{
620 //sets range of Number Of Clusters that tracks have to have
621 fNTPCClustMin = min;
622 fNTPCClustMax = max;
623}
624/********************************************************************/
625
626void AliHBTReaderESD::SetTPCChi2PerCluserRange(Float_t min, Float_t max)
627{
628 //sets range of Chi2 per Cluster
629 fTPCChi2PerClustMin = min;
630 fTPCChi2PerClustMax = max;
631}
632/********************************************************************/
633
634void AliHBTReaderESD::SetC00Range(Float_t min, Float_t max)
635{
636 //Sets range of C00 parameter of covariance matrix of the track
637 //it defines uncertainty of the momentum
638 fC00Min = min;
639 fC00Max = max;
640}
641/********************************************************************/
642
643void AliHBTReaderESD::SetC11Range(Float_t min, Float_t max)
644{
645 //Sets range of C11 parameter of covariance matrix of the track
646 //it defines uncertainty of the momentum
647 fC11Min = min;
648 fC11Max = max;
649}
650/********************************************************************/
651
652void AliHBTReaderESD::SetC22Range(Float_t min, Float_t max)
653{
654 //Sets range of C22 parameter of covariance matrix of the track
655 //it defines uncertainty of the momentum
656 fC22Min = min;
657 fC22Max = max;
658}
659/********************************************************************/
660
661void AliHBTReaderESD::SetC33Range(Float_t min, Float_t max)
662{
663 //Sets range of C33 parameter of covariance matrix of the track
664 //it defines uncertainty of the momentum
665 fC33Min = min;
666 fC33Max = max;
667}
668/********************************************************************/
669
670void AliHBTReaderESD::SetC44Range(Float_t min, Float_t max)
671{
672 //Sets range of C44 parameter of covariance matrix of the track
673 //it defines uncertainty of the momentum
674 fC44Min = min;
675 fC44Max = max;
676}