2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveCascade.h"
12 #include <TEveTrack.h>
13 #include <TEveTrackPropagator.h>
14 #include <TEveManager.h>
16 #include <TPolyLine3D.h>
17 #include <TPolyMarker3D.h>
23 /***********************************************************************
27 ************************************************************************/
29 ClassImp(AliEveCascade)
31 //______________________________________________________________________________
32 AliEveCascade::AliEveCascade() :
47 // Default constructor.
49 // Override from TEveElement.
51 fMainColorPtr = &fMarkerColor;
54 //______________________________________________________________________________
55 AliEveCascade::AliEveCascade(TEveRecTrack* tBac, TEveRecV0* v0, TEveRecCascade* cascade, TEveTrackPropagator* rs) :
58 fRecBirthV(cascade->fCascadeBirth),
59 fRecDecayV(cascade->fCascadeVCa),
60 fRecDecayP(cascade->fPBac + v0->fPNeg + v0->fPPos),
61 fRecDecayV0(v0->fVCa),
62 fBacTrack(new TEveTrack(tBac, rs)),
65 fPointingCurve(new TEveLine("Pointing Curve")),
66 fV0Path(new TEveLine("V0 Path")),
71 // Constructor with full Cascade specification.
73 // Override from TEveElement.
75 fMainColorPtr = &fMarkerColor;
78 fMarkerColor = kViolet;
81 fPointingCurve->SetLineColor(fMarkerColor);
82 fPointingCurve->SetLineWidth(2);
83 fPointingCurve->IncDenyDestroy();
84 AddElement(fPointingCurve);
86 fV0Path->SetLineColor(fMarkerColor);
87 fV0Path->SetLineStyle(3);
88 fV0Path->SetLineWidth(2);
89 fV0Path->IncDenyDestroy();
92 fBacTrack->SetLineColor(6);
93 fBacTrack->SetStdTitle();
95 fBacTrack->IncDenyDestroy();
96 AddElement(fBacTrack);
99 //______________________________________________________________________________
100 AliEveCascade::~AliEveCascade()
102 // Destructor. Dereferences bachelor track and pointing-line objects.
104 fBacTrack->DecDenyDestroy();
105 fPointingCurve->DecDenyDestroy();
106 fV0Path->DecDenyDestroy();
109 //______________________________________________________________________________
110 void AliEveCascade::MakeCascade()
112 // Set all dependant components for drawing.
114 SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
116 fBacTrack->MakeTrack();
118 fPointingCurve->SetPoint(0, fRecBirthV.fX, fRecBirthV.fY, fRecBirthV.fZ);
119 fPointingCurve->SetPoint(1, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
121 fV0Path->SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
122 fV0Path->SetPoint(1, fRecDecayV0.fX, fRecDecayV0.fY, fRecDecayV0.fZ);
126 /***********************************************************************
128 * AliEveCascadeList class
130 ************************************************************************/
132 ClassImp(AliEveCascadeList)
134 //______________________________________________________________________________
135 AliEveCascadeList::AliEveCascadeList() :
139 fRnrDaughters(kTRUE),
140 fRnrCascadevtx(kTRUE),
141 fRnrCascadepath(kTRUE),
150 // Default constructor.
152 fChildClass = AliEveCascade::Class(); // override member from base TEveElementList
155 //______________________________________________________________________________
156 AliEveCascadeList::AliEveCascadeList(TEveTrackPropagator* rs) :
160 fRnrDaughters(kTRUE),
161 fRnrCascadevtx(kTRUE),
162 fRnrCascadepath(kTRUE),
171 // Constructor with given track-propagator..
173 fChildClass = AliEveCascade::Class(); // override member from base TEveElementList
178 //______________________________________________________________________________
179 AliEveCascadeList::AliEveCascadeList(const Text_t* name, TEveTrackPropagator* rs) :
183 fRnrDaughters(kTRUE),
184 fRnrCascadevtx(kTRUE),
185 fRnrCascadepath(kTRUE),
194 // Standard constructor.
196 fChildClass = AliEveCascade::Class(); // override member from base TEveElementList
202 //______________________________________________________________________________
203 void AliEveCascadeList::Init()
205 // Initialize members needed for drawing operations.
207 if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator;
210 /******************************************************************************/
212 //______________________________________________________________________________
213 void AliEveCascadeList::MakeCascades()
215 // Call MakeCascade() for all elements.
217 for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
218 ((AliEveCascade*)(*i))->MakeCascade();
223 /******************************************************************************/
225 //______________________________________________________________________________
226 void AliEveCascadeList::FilterByRadius(Float_t minR, Float_t maxR)
228 // Select visibility of elements based on their axial radius.
233 for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
235 AliEveCascade* cascade = (AliEveCascade*) *i;
236 Float_t rad = cascade->GetRadius();
237 Bool_t show = rad >= fMinRCut && rad <= fMaxRCut;
238 cascade->SetRnrState(show);
244 /******************************************************************************/
246 //______________________________________________________________________________
247 void AliEveCascadeList::FilterByDaughterDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA)
249 // Select visibility of elements based on the DCA between daughters.
251 fMinDaughterDCA = minDaughterDCA;
252 fMaxDaughterDCA = maxDaughterDCA;
254 for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
256 AliEveCascade* cascade = (AliEveCascade*) *i;
257 Float_t dca = cascade->GetDaughterDCA();
258 Bool_t show = dca >= fMinDaughterDCA && dca <= fMaxDaughterDCA;
259 cascade->SetRnrState(show);
265 /******************************************************************************/
267 //______________________________________________________________________________
268 void AliEveCascadeList::FilterByPt(Float_t minPt, Float_t maxPt)
270 // Select visibility of elements based on the Cascade pt.
275 for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
277 AliEveCascade* cascade = (AliEveCascade*) *i;
278 Float_t pt = cascade->GetPt();
279 Bool_t show = pt >= fMinPt && pt <= fMaxPt;
280 cascade->SetRnrState(show);