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 **************************************************************************/
17 /***********************************************************************
18 * This code defines the reconstructed v0 visualized with EVE
20 * Ludovic Gaudichet (gaudichet@to.infn.it)
21 ************************************************************************/
25 #include "MCHelixLine.hi"
27 #include <TPolyLine3D.h>
28 #include <TPolyMarker3D.h>
31 #include <Reve/RGTopFrame.h>
42 /***********************************************************************
46 ************************************************************************/
48 const Float_t V0::fgkMassPion2 = 0.13956995*0.13956995;
49 const Float_t V0::fgkMassProton2 = 0.93827231*0.93827231;
74 fCosPointingAngle(999),
79 V0::V0(Reve::RecTrack* tNeg, Reve::RecTrack* tPos,
80 Reve::RecV0* v0, TrackRnrStyle* rs) :
88 fV0_birth(v0->V0_birth),
89 fBeta_neg(tNeg->beta),
90 fBeta_pos(tPos->beta),
91 fLabel_neg(v0->d_label[0]),
92 fLabel_pos(v0->d_label[1]),
101 fCosPointingAngle(999),
104 fMarkerColor = fRnrStyle->GetColor();
105 fPolyLineV0.SetLineColor(fMarkerColor);
106 fPolyLinePos.SetLineColor(2); // red
107 fPolyLineNeg.SetLineColor(7); // light blue
109 fMainColorPtr = &fMarkerColor;
118 for (vpPathMark_i i=fPathMarksNeg.begin(); i!=fPathMarksNeg.end(); ++i)
120 for (vpPathMark_i i=fPathMarksPos.begin(); i!=fPathMarksPos.end(); ++i)
125 void V0::Reset(TPolyLine3D* polyLine) {
126 //polyLine->SetPolyLine(n_points);
127 polyLine->SetPolyLine(0);
130 //______________________________________________________________________
131 void V0::SetDecayLength(Float_t primx, Float_t primy, Float_t primz) {
133 Float_t dx = fV_v0.x-primx;
134 Float_t dy = fV_v0.y-primy;
135 Float_t dz = fV_v0.z-primz;
137 fDecayLength = sqrt(dx*dx+dy*dy+dz*dz);
139 // This is probably wrong but I can only do this for now
140 Float_t distNorm = fDecayLength/GetMomentum();
141 fV0_birth.x = fV_v0.x - distNorm*GetPx();
142 fV0_birth.y = fV_v0.y - distNorm*GetPy();
143 fV0_birth.z = fV_v0.z - distNorm*GetPz();
148 //______________________________________________________________________
149 void V0::MakeTrack(vpPathMark_t& pathMark, Reve::Vector& vtx, Reve::Vector& p,
150 Int_t charge, Float_t beta, TPolyLine3D& polyLine) {
152 TrackRnrStyle& RS((fRnrStyle != 0) ? *fRnrStyle : TrackRnrStyle::fgDefStyle);
154 Float_t px = p.x, py = p.y, pz = p.z;
162 std::vector<MCVertex> track_points;
163 Bool_t decay = kFALSE;
165 if ((TMath::Abs(vtx.z) > RS.fMaxZ) || (vtx.x*vtx.x + vtx.y*vtx.y > RS.fMaxR*RS.fMaxR))
168 if (TMath::Abs(RS.fMagField) > 1e-5) {
170 // Charged particle in magnetic field
172 Float_t a = RS.fgkB2C * RS.fMagField * charge;
174 MCHelix helix(fRnrStyle, &mc_v0, TMath::C()*beta, &track_points, a); //m->cm
175 helix.Init(TMath::Sqrt(px*px+py*py), pz);
177 if(!pathMark.empty()){
178 for(std::vector<Reve::PathMark*>::iterator i=pathMark.begin();
179 i!=pathMark.end(); ++i) {
181 Reve::PathMark* pm = *i;
183 if(RS.fFitDaughters && pm->type == Reve::PathMark::Daughter){
184 if(TMath::Abs(pm->V.z) > RS.fMaxZ
185 || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR )
188 //printf("%s fit daughter \n", fName.Data());
189 helix.LoopToVertex(p.x, p.y, p.z, pm->V.x, pm->V.y, pm->V.z);
194 if(RS.fFitDecay && pm->type == Reve::PathMark::Decay){
196 if(TMath::Abs(pm->V.z) > RS.fMaxZ
197 || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR )
199 helix.LoopToVertex(p.x, p.y, p.z, pm->V.x, pm->V.y, pm->V.z);
207 if(!decay || RS.fFitDecay == kFALSE){
208 helix.LoopToBounds(px,py,pz);
209 // printf("%s loop to bounds \n",fName.Data() );
214 // Neutral particle or no field
216 MCLine line(fRnrStyle, &mc_v0, TMath::C()*beta, &track_points);
218 if(!pathMark.empty()) {
219 for(std::vector<Reve::PathMark*>::iterator i=pathMark.begin();
220 i!=pathMark.end(); ++i) {
221 Reve::PathMark* pm = *i;
223 if(RS.fFitDaughters && pm->type == Reve::PathMark::Daughter){
224 if(TMath::Abs(pm->V.z) > RS.fMaxZ
225 || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR )
227 line.GotoVertex(pm->V.x, pm->V.y, pm->V.z);
233 if(RS.fFitDecay && pm->type == Reve::PathMark::Decay){
234 if(TMath::Abs(pm->V.z) > RS.fMaxZ
235 || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR )
237 line.GotoVertex(pm->V.x, pm->V.y, pm->V.z);
245 if(!decay || RS.fFitDecay == kFALSE)
246 line.GotoBounds(px,py,pz);
251 for(std::vector<MCVertex>::iterator i=track_points.begin();
252 i!=track_points.end(); ++i) {
253 polyLine.SetNextPoint(i->x,i->y, i->z);
259 //______________________________________________________________________
260 void V0::MakeV0path() {
268 std::vector<MCVertex> track_points;
269 MCLine line(fRnrStyle, &mc_v0, TMath::C()*0.99, &track_points);
271 line.GotoVertex(fV0_birth.x,fV0_birth.y,fV0_birth.z);
274 for(std::vector<MCVertex>::iterator i=track_points.begin();
275 i!=track_points.end(); ++i) {
276 fPolyLineV0.SetNextPoint(i->x,i->y, i->z);
281 //______________________________________________________________________
284 SetNextPoint(fV_v0.x, fV_v0.y, fV_v0.z);
285 MakeTrack(fPathMarksNeg, fV_neg, fP_neg, -1, fBeta_neg, fPolyLineNeg);
286 MakeTrack(fPathMarksPos, fV_pos, fP_pos, 1, fBeta_pos, fPolyLinePos);
288 //fN = fPolyLineNeg.GetN();
292 //______________________________________________________________________
293 Float_t V0::GetAlphaArmenteros() const
295 Float_t posXv0 = fP_pos.x*GetPx() + fP_pos.y*GetPy() + fP_pos.z*GetPz();
296 Float_t negXv0 = fP_neg.x*GetPx() + fP_neg.y*GetPy() + fP_neg.z*GetPz();
298 if (posXv0+negXv0 > 1.e-39)
299 return (posXv0-negXv0)/(posXv0+negXv0);
303 //______________________________________________________________________
304 Float_t V0::GetPtArmenteros() const
306 Float_t posXv0 = fP_pos.x*GetPx() + fP_pos.y*GetPy() + fP_pos.z*GetPz();
307 Float_t v0mom2 = GetP2();
310 return TMath::Sqrt( GetPosP2() - posXv0*posXv0/v0mom2 ) ;
316 /***********************************************************************
320 ************************************************************************/
322 ClassImp(Reve::V0List)
324 //______________________________________________________________________
329 fRnrDaughters(kTRUE),
335 for (Int_t i=0; i<fgkNcutVar; i++)
337 for (Int_t i=0; i<fgkNcutVar2D; i++)
341 //______________________________________________________________________
342 V0List::V0List(TrackRnrStyle* rs) :
346 fRnrDaughters(kTRUE),
355 //______________________________________________________________________
356 V0List::V0List(const Text_t* name, TrackRnrStyle* rs) :
360 fRnrDaughters(kTRUE),
370 //______________________________________________________________________
374 if (fRnrStyle== 0) fRnrStyle = new TrackRnrStyle;
375 SetMainColorPtr(&fRnrStyle->fColor);
377 fMin[0] = 0; fMax[0] = 10; // pt
378 fMin[1] = 0; fMax[1] = 10; // K0s mass
379 fMin[2] = 0; fMax[2] = 10; // lambda mass
380 fMin[3] = 0; fMax[3] = 10; // anti-lambda mass
381 fMin[4] = 0; fMax[4] = 10; // daughter DCA
382 fMin[5] = 0.8; fMax[5] = 1; // cos of pointing angle
384 fMin[6] = 0; fMax[6] = 200; // radius
385 fMin[7] = -2; fMax[7] = 2; // PseudoRapidity
386 fMin[8] = 0; fMax[8] = 10; // NegPt
387 fMin[9] = -2; fMax[9] = 2; // NegPseudoRapidity
388 fMin[10] = 0; fMax[10] = 10; // PosPt
389 fMin[11] = -2; fMax[11] = 2; // PosPseudoRapidity
390 fMin[12] = 0; fMax[12] = 1e5; // index, would be good to be able to adjust it
393 fHist[0] = new TH1F(ch,ch, 100, fMin[0], fMax[0]);
395 fHist[1] = new TH1F(ch,ch, 100, fMin[1], fMax[1]);
397 fHist[2] = new TH1F(ch,ch, 100, fMin[2], fMax[2]);
398 ch = "AntiLambdaMass";
399 fHist[3] = new TH1F(ch,ch, 100, fMin[3], fMax[3]);
401 fHist[4] = new TH1F(ch,ch, 100, fMin[4], fMax[4]);
402 ch = "cosPointingAngle";
403 fHist[5] = new TH1F(ch,ch, 100, fMin[5], fMax[5]);
405 fHist[6] = new TH1F(ch,ch, 100, fMin[6], fMax[6]);
406 ch = "PseudoRapidity";
407 fHist[7] = new TH1F(ch,ch, 100, fMin[7], fMax[7]);
410 fHist[8] = new TH1F(ch,ch, 100, fMin[8], fMax[8]);
411 ch = "NegPseudoRapidity";
412 fHist[9] = new TH1F(ch,ch, 100, fMin[9], fMax[9]);
414 fHist[10] = new TH1F(ch,ch, 100, fMin[10], fMax[10]);
415 ch = "PosPseudoRapidity";
416 fHist[11] = new TH1F(ch,ch, 100, fMin[11], fMax[11]);
418 fHist[12] = new TH1F(ch,ch, 100, fMin[12], fMax[12]);
425 ch = "ArmenterosPodolansky";
426 fHist2D[0] = new TH2F(ch,ch, 70, fMinX[0], fMaxX[0], 70,
429 for (Int_t i=0; i<fgkNcutVar; i++) {
430 fHist[i]->GetXaxis()->SetLabelSize(0.07);
431 fHist[i]->GetYaxis()->SetLabelSize(0.07);
432 fHist[i]->SetStats(0);
434 for (Int_t i=0; i<fgkNcutVar2D; i++) {
435 fHist2D[i]->GetXaxis()->SetLabelSize(0.07);
436 fHist2D[i]->GetYaxis()->SetLabelSize(0.07);
437 fHist2D[i]->SetStats(0);
441 //______________________________________________________________________
444 for (Int_t i=0; i<fgkNcutVar; i++)
445 if (fHist[i]) delete fHist[i];
446 for (Int_t i=0; i<fgkNcutVar2D; i++)
447 if (fHist2D[i]) delete fHist2D[i];
451 //______________________________________________________________________
452 void V0List::Paint(Option_t* option) {
456 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
457 if((*i)->GetRnrSelf()) {
458 ((V0*)(*i))->Paint(option);
464 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
465 if((*i)->GetRnrSelf()) {
466 ((V0*)(*i))->PaintDaughters(option);
472 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
473 if((*i)->GetRnrSelf()) {
474 ((V0*)(*i))->PaintPath(option);
482 //______________________________________________________________________
484 void V0List::AddElement(RenderElement* el) {
486 static const Exc_t eH("V0List::AddElement ");
487 if (dynamic_cast<V0*>(el) == 0)
488 throw(eH + "new element not a V0.");
489 RenderElement::AddElement(el);
494 void V0List::SetRnrV0vtx(Bool_t rnr) {
499 void V0List::SetRnrV0path(Bool_t rnr) {
504 void V0List::SetRnrDaughters(Bool_t rnr) {
510 //______________________________________________________________________
512 void V0List::MakeV0s() {
513 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
514 ((V0*)(*i))->MakeV0();
520 void V0List::MakeMarkers() {
525 //_________________________________________________________________________
526 void V0List::AdjustHist(Int_t iHist) {
528 if ((iHist<0)||(iHist>=fgkNcutVar)) return;
529 if (! fHist[iHist]) return;
531 TString name = fHist[iHist]->GetName();
532 Int_t nBin = fHist[iHist]->GetXaxis()->GetNbins();
534 fHist[iHist] = new TH1F(name.Data(), name.Data(), nBin, GetMin(iHist),
536 fHist[iHist]->GetXaxis()->SetLabelSize(0.07);
537 fHist[iHist]->GetYaxis()->SetLabelSize(0.07);
538 fHist[iHist]->SetStats(0);
543 //______________________________________________________________________
544 void V0List::UnFill(V0* v0) {
546 Int_t bin = fHist[0]->GetXaxis()->FindBin(v0->GetPt());
547 fHist[0]->SetBinContent( bin, fHist[0]->GetBinContent(bin)-1 );
549 bin = fHist[1]->GetXaxis()->FindBin( v0->GetK0mass() );
550 fHist[1]->SetBinContent( bin, fHist[1]->GetBinContent(bin)-1 );
552 bin = fHist[2]->GetXaxis()->FindBin( v0->GetLamMass() );
553 fHist[2]->SetBinContent( bin, fHist[2]->GetBinContent(bin)-1 );
555 bin = fHist[3]->GetXaxis()->FindBin( v0->GetAntiLamMass() );
556 fHist[3]->SetBinContent( bin, fHist[3]->GetBinContent(bin)-1 );
558 bin = fHist[4]->GetXaxis()->FindBin( v0->GetDaughterDCA() );
559 fHist[4]->SetBinContent( bin, fHist[4]->GetBinContent(bin)-1 );
561 bin = fHist[5]->GetXaxis()->FindBin( v0->GetCosPointingAngle() );
562 fHist[5]->SetBinContent( bin, fHist[5]->GetBinContent(bin)-1 );
565 bin = fHist[6]->GetXaxis()->FindBin( v0->GetRadius() );// radius
566 fHist[6]->SetBinContent( bin, fHist[6]->GetBinContent(bin)-1 );
568 bin = fHist[7]->GetXaxis()->FindBin( v0->GetPseudoRapidity() ); // PseudoRapidity
569 fHist[7]->SetBinContent( bin, fHist[7]->GetBinContent(bin)-1 );
571 bin = fHist[8]->GetXaxis()->FindBin( v0->GetNegPt() );// NegPt
572 fHist[8]->SetBinContent( bin, fHist[8]->GetBinContent(bin)-1 );
574 bin = fHist[9]->GetXaxis()->FindBin( v0->GetNegPseudoRapidity() );// NegPseudoRapidity
575 fHist[9]->SetBinContent( bin, fHist[9]->GetBinContent(bin)-1 );
577 bin = fHist[10]->GetXaxis()->FindBin( v0->GetPosPt() ); // PosPt
578 fHist[10]->SetBinContent( bin, fHist[10]->GetBinContent(bin)-1 );
580 bin = fHist[11]->GetXaxis()->FindBin( v0->GetPosPseudoRapidity() ); // PosPseudoRapidity
581 fHist[11]->SetBinContent( bin, fHist[11]->GetBinContent(bin)-1 );
583 bin = fHist[12]->GetXaxis()->FindBin( v0->GetESDIndex() ); // ESD index
584 fHist[12]->SetBinContent( bin, fHist[12]->GetBinContent(bin)-1 );
587 bin = fHist2D[0]->GetXaxis()->FindBin( v0->GetAlphaArmenteros() );
588 Int_t binY = fHist2D[0]->GetYaxis()->FindBin( v0->GetPtArmenteros() );
589 fHist2D[0]->SetBinContent( bin, binY, fHist2D[0]->GetBinContent(bin,binY)-1 );
593 //______________________________________________________________________
594 void V0List::Filter(V0* v0) {
596 Float_t pt = v0->GetPt();
597 if ((pt<fMin[0])||(pt>fMax[0])) return;
599 Float_t k0sMass = v0->GetK0mass();
600 if ( (k0sMass<fMin[1])||(k0sMass>fMax[1]) ) return;
602 Float_t lamMass = v0->GetLamMass();
603 if ( (lamMass<fMin[2])||(lamMass>fMax[2]) ) return;
605 Float_t alamMass = v0->GetAntiLamMass();
606 if ( (alamMass<fMin[3])||(alamMass>fMax[3]) ) return;
608 Float_t daughtDCA = v0->GetDaughterDCA();
609 if ( (daughtDCA<fMin[4])||(daughtDCA>fMax[4]) ) return;
611 Float_t cosPointing = v0->GetCosPointingAngle();
612 if ( (cosPointing<fMin[5])||(cosPointing>fMax[5]) ) return;
615 Float_t radius = v0->GetRadius();
616 if ( (radius<fMin[6])||(radius>fMax[6]) ) return;
618 Float_t pseudoRapidity = v0->GetPseudoRapidity();
619 if ( (pseudoRapidity<fMin[7])||(pseudoRapidity>fMax[7]) ) return;
621 Float_t negPt = v0->GetNegPt();
622 if ( (negPt<fMin[8])||(negPt>fMax[8]) ) return;
624 Float_t negPseudoRapidity = v0->GetNegPseudoRapidity();
625 if ( (negPseudoRapidity<fMin[9])||(negPseudoRapidity>fMax[9]) ) return;
627 Float_t posPt = v0->GetPosPt();
628 if ( (posPt<fMin[10])||(posPt>fMax[10]) ) return;
630 Float_t posPseudoRapidity = v0->GetPosPseudoRapidity();
631 if ( (posPseudoRapidity<fMin[11])||(posPseudoRapidity>fMax[11]) ) return;
633 Float_t esdIndex = v0->GetESDIndex();
634 if ( (esdIndex<fMin[12])||(esdIndex>fMax[12]) ) return;
636 Float_t alphaArm = v0->GetAlphaArmenteros();
637 // if ( (alphaArm<fMinX[0])||(alphaArm>fMaxX[0]) ) return;
639 Float_t ptArm = v0->GetPtArmenteros();
640 // if ( (ptArm<fMinY[0])||(ptArm>fMaxY[0]) ) return;
642 v0->SetRnrSelf(kTRUE);
644 fHist[1]->Fill(k0sMass);
645 fHist[2]->Fill(lamMass);
646 fHist[3]->Fill(alamMass);
647 fHist[4]->Fill(daughtDCA);
648 fHist[5]->Fill(cosPointing);
649 fHist[6]->Fill(radius);
650 fHist[7]->Fill(pseudoRapidity);
651 fHist[8]->Fill(negPt);
652 fHist[9]->Fill(negPseudoRapidity);
653 fHist[10]->Fill(posPt);
654 fHist[11]->Fill(posPseudoRapidity);
655 fHist[12]->Fill(esdIndex);
656 fHist2D[0]->Fill(alphaArm, ptArm);
659 //______________________________________________________________________
660 void V0List::FilterAll() {
662 for (Int_t i=0; i<fgkNcutVar; i++)
665 for (Int_t i=0; i<fgkNcutVar2D; i++)
669 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
677 //______________________________________________________________________
678 void V0List::GetV0IndexRange(Int_t &imin, Int_t &imax) {
682 List_i i=fChildren.begin();
684 index = myV0->GetESDIndex();
688 for(; i!=fChildren.end(); ++i) {
691 index = myV0->GetESDIndex();
692 if (index<imin) imin = index;
693 if (index>imax) imax = index;
698 //______________________________________________________________________
699 void V0List::PtFilter(Float_t min, Float_t max) {
709 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
713 wasSelected = myV0->GetRnrSelf();
714 isSelected = ( (val>=min) && (val<=max) );
719 myV0->SetRnrSelf(isSelected);
722 if (isSelected) Filter(myV0);
728 //______________________________________________________________________
729 void V0List::K0sMFilter(Float_t min, Float_t max) {
739 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
742 val = myV0->GetK0mass();
743 wasSelected = myV0->GetRnrSelf();
744 isSelected = ( (val>=min) && (val<=max) );
749 myV0->SetRnrSelf(isSelected);
752 if (isSelected) Filter(myV0);
757 //______________________________________________________________________
758 void V0List::LamMFilter(Float_t min, Float_t max) {
768 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
771 val = myV0->GetLamMass();
772 wasSelected = myV0->GetRnrSelf();
773 isSelected = ( (val>=min) && (val<=max) );
778 myV0->SetRnrSelf(isSelected);
781 if (isSelected) Filter(myV0);
788 //______________________________________________________________________
789 void V0List::ALamMFilter(Float_t min, Float_t max) {
799 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
802 val = myV0->GetAntiLamMass();
803 wasSelected = myV0->GetRnrSelf();
804 isSelected = ( (val>=min) && (val<=max) );
809 myV0->SetRnrSelf(isSelected);
812 if (isSelected) Filter(myV0);
817 //______________________________________________________________________
818 void V0List::CosPointingFilter(Float_t min, Float_t max) {
828 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
831 val = myV0->GetCosPointingAngle();
832 wasSelected = myV0->GetRnrSelf();
833 isSelected = ( (val>=min) && (val<=max) );
838 myV0->SetRnrSelf(isSelected);
841 if (isSelected) Filter(myV0);
846 //______________________________________________________________________
847 void V0List::DaughterDCAFilter(Float_t min, Float_t max) {
857 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
860 val = myV0->GetDaughterDCA();
861 wasSelected = myV0->GetRnrSelf();
862 isSelected = ( (val>=min) && (val<=max) );
867 myV0->SetRnrSelf(isSelected);
870 if (isSelected) Filter(myV0);
875 //______________________________________________________________________
876 void V0List::RadiusFilter(Float_t min, Float_t max) {
886 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
889 val = myV0->GetRadius();
890 wasSelected = myV0->GetRnrSelf();
891 isSelected = ( (val>=min) && (val<=max) );
896 myV0->SetRnrSelf(isSelected);
899 if (isSelected) Filter(myV0);
904 //______________________________________________________________________
905 void V0List::EtaFilter(Float_t min, Float_t max) {
915 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
918 val = myV0->GetPseudoRapidity();
919 wasSelected = myV0->GetRnrSelf();
920 isSelected = ( (val>=min) && (val<=max) );
925 myV0->SetRnrSelf(isSelected);
928 if (isSelected) Filter(myV0);
933 //______________________________________________________________________
934 void V0List::NegPtFilter(Float_t min, Float_t max) {
944 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
947 val = myV0->GetNegPt();
948 wasSelected = myV0->GetRnrSelf();
949 isSelected = ( (val>=min) && (val<=max) );
954 myV0->SetRnrSelf(isSelected);
957 if (isSelected) Filter(myV0);
962 //______________________________________________________________________
963 void V0List::NegEtaFilter(Float_t min, Float_t max) {
973 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
976 val = myV0->GetNegPseudoRapidity();
977 wasSelected = myV0->GetRnrSelf();
978 isSelected = ( (val>=min) && (val<=max) );
983 myV0->SetRnrSelf(isSelected);
986 if (isSelected) Filter(myV0);
991 //______________________________________________________________________
992 void V0List::PosPtFilter(Float_t min, Float_t max) {
1002 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
1005 val = myV0->GetPosPt();
1006 wasSelected = myV0->GetRnrSelf();
1007 isSelected = ( (val>=min) && (val<=max) );
1012 myV0->SetRnrSelf(isSelected);
1015 if (isSelected) Filter(myV0);
1020 //______________________________________________________________________
1021 void V0List::PosEtaFilter(Float_t min, Float_t max) {
1031 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
1034 val = myV0->GetPosPseudoRapidity();
1035 wasSelected = myV0->GetRnrSelf();
1036 isSelected = ( (val>=min) && (val<=max) );
1041 myV0->SetRnrSelf(isSelected);
1044 if (isSelected) Filter(myV0);
1049 //______________________________________________________________________
1050 void V0List::IndexFilter(Float_t min, Float_t max) {
1060 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
1063 val = myV0->GetESDIndex();
1064 wasSelected = myV0->GetRnrSelf();
1065 isSelected = ( (val>=min) && (val<=max) );
1070 myV0->SetRnrSelf(isSelected);
1073 if (isSelected) Filter(myV0);