With Boris and Antonin - improvements for V0 visualization.
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveV0.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
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  **************************************************************************/
9
10 #include "AliEveV0.h"
11
12 #include <TEveTrack.h>
13 #include <TEveTrackPropagator.h>
14 #include <TEveManager.h>
15
16 #include <TPolyLine3D.h>
17 #include <TPolyMarker3D.h>
18 #include <TColor.h>
19
20 #include <vector>
21
22
23 /***********************************************************************
24 *
25 *  AliEveV0 class
26 *
27 ************************************************************************/
28
29 ClassImp(AliEveV0)
30
31 //______________________________________________________________________________
32 AliEveV0::AliEveV0() :
33   TEvePointSet(),
34
35   fRecBirthV(),
36   fRecDecayV(),
37   fRecDecayP(),
38   fNegTrack(0),
39   fPosTrack(0),
40   fRnrStyle(0),
41   fPointingLine(0),
42   fESDIndex(-1),
43   fOnFlyStatus(kFALSE),
44   fDaughterDCA(999),
45   fChi2V0(-1)
46 {
47   // Default constructor.
48
49   // Override from TEveElement.
50   fPickable = kTRUE;
51   fMainColorPtr = &fMarkerColor;
52 }
53
54 //______________________________________________________________________________
55 AliEveV0::AliEveV0(TEveRecTrack* tNeg, TEveRecTrack* tPos,
56                    TEveRecV0* v0, TEveTrackPropagator* rs) :
57   TEvePointSet(),
58
59   fRecBirthV(v0->fV0Birth),
60   fRecDecayV(v0->fVCa),
61   fRecDecayP(v0->fPNeg + v0->fPPos),
62
63   fNegTrack(new TEveTrack(tNeg, rs)),
64   fPosTrack(new TEveTrack(tPos, rs)),
65
66   fRnrStyle(rs),
67   fPointingLine(new TEveLine("Pointing line")),
68   fESDIndex(-1),
69   fOnFlyStatus(kFALSE),
70   fDaughterDCA(999),
71   fChi2V0(-1)
72 {
73   // Constructor with full V0 specification.
74
75   // Override from TEveElement.
76   fPickable = kTRUE;
77   fMainColorPtr = &fMarkerColor;
78
79   fMarkerStyle = 2;
80   fMarkerColor = kSpring + 6;
81   fMarkerSize  = 1;
82
83   fPointingLine->SetLineColor(fMarkerColor);
84   fPointingLine->SetLineWidth(2);
85   fPointingLine->IncDenyDestroy();
86   AddElement(fPointingLine);
87
88   fPosTrack->SetLineColor(2);  // red
89   fPosTrack->SetStdTitle();
90   fNegTrack->SetLineColor(7);  // light blue
91   fNegTrack->SetStdTitle();
92
93   fNegTrack->IncDenyDestroy();
94   AddElement(fNegTrack);
95   fPosTrack->IncDenyDestroy();
96   AddElement(fPosTrack);
97 }
98
99 //______________________________________________________________________________
100 AliEveV0::~AliEveV0()
101 {
102   // Destructor. Dereferences pos/neg tracks and pointing-line objects.
103
104   fNegTrack->DecDenyDestroy();
105   fPosTrack->DecDenyDestroy();
106   fPointingLine->DecDenyDestroy();
107 }
108
109 //______________________________________________________________________________
110 void AliEveV0::MakeV0()
111 {
112   // Set all dependant components for drawing.
113
114   SetPoint(0, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
115
116   fNegTrack->MakeTrack();
117   fPosTrack->MakeTrack();
118
119   fPointingLine->SetPoint(0, fRecBirthV.fX, fRecBirthV.fY, fRecBirthV.fZ);
120   fPointingLine->SetPoint(1, fRecDecayV.fX, fRecDecayV.fY, fRecDecayV.fZ);
121 }
122
123
124 /***********************************************************************
125 *
126 *  AliEveV0List class
127 *
128 ************************************************************************/
129
130 ClassImp(AliEveV0List)
131
132 //______________________________________________________________________________
133 AliEveV0List::AliEveV0List() :
134   TEveElementList(),
135   fTitle(),
136   fRnrStyle(0),
137   fRnrDaughters(kTRUE),
138   fRnrV0vtx(kTRUE),
139   fRnrV0path(kTRUE),
140   fNegColor(0),
141   fPosColor(0),
142   fMinRCut(0),
143   fMaxRCut(250)
144 {
145   // Default constructor.
146
147   fChildClass = AliEveV0::Class(); // override member from base TEveElementList
148 }
149
150 //______________________________________________________________________________
151 AliEveV0List::AliEveV0List(TEveTrackPropagator* rs) :
152   TEveElementList(),
153   fTitle(),
154   fRnrStyle(rs),
155   fRnrDaughters(kTRUE),
156   fRnrV0vtx(kTRUE),
157   fRnrV0path(kTRUE),
158   fNegColor(0),
159   fPosColor(0),
160   fMinRCut(0),
161   fMaxRCut(250)
162 {
163   // Constructor with given track-propagator..
164
165   fChildClass = AliEveV0::Class(); // override member from base TEveElementList
166
167   Init();
168 }
169
170 //______________________________________________________________________________
171 AliEveV0List::AliEveV0List(const Text_t* name, TEveTrackPropagator* rs) :
172   TEveElementList(),
173   fTitle(),
174   fRnrStyle(rs),
175   fRnrDaughters(kTRUE),
176   fRnrV0vtx(kTRUE),
177   fRnrV0path(kTRUE),
178   fNegColor(0),
179   fPosColor(0),
180   fMinRCut(0),
181   fMaxRCut(100)
182 {
183   // Standard constructor.
184
185   fChildClass = AliEveV0::Class(); // override member from base TEveElementList
186
187   Init();
188   SetName(name);
189 }
190
191 //______________________________________________________________________________
192 void AliEveV0List::Init()
193 {
194   // Initialize members needed for drawing operations.
195
196   if (fRnrStyle== 0) fRnrStyle = new TEveTrackPropagator;
197 }
198
199 /******************************************************************************/
200
201 //______________________________________________________________________________
202 void AliEveV0List::MakeV0s()
203 {
204   // Call MakeV0() for all elements.
205
206   for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
207     ((AliEveV0*)(*i))->MakeV0();
208   }
209   gEve->Redraw3D();
210 }
211
212 /******************************************************************************/
213
214 //______________________________________________________________________________
215 void AliEveV0List::FilterByRadius(Float_t minR, Float_t maxR)
216 {
217   // Select visibility of elements based on their axial radius.
218
219   fMinRCut = minR;
220   fMaxRCut = maxR;
221
222   for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
223   {
224     AliEveV0* v0 = (AliEveV0*) *i;
225     Float_t  rad = v0->GetRadius();
226     Bool_t  show = rad >= fMinRCut && rad <= fMaxRCut;
227     v0->SetRnrState(show);
228   }
229   ElementChanged();
230   gEve->Redraw3D();
231 }