]>
Commit | Line | Data |
---|---|---|
5a5a1232 | 1 | // $Header$ |
2 | ||
3 | #include "Track.h" | |
4 | #include "MCHelixLine.hi" | |
5 | ||
6 | #include <TPolyLine3D.h> | |
7 | #include <TPolyMarker3D.h> | |
8 | #include <TColor.h> | |
9 | ||
10 | // Updates | |
11 | #include <Reve/RGTopFrame.h> | |
12 | #include <TCanvas.h> | |
13 | ||
14 | #include <vector> | |
15 | ||
16 | using namespace Reve; | |
17 | ||
18 | //______________________________________________________________________ | |
19 | // Track | |
20 | // | |
21 | ||
22 | ClassImp(Reve::Track) | |
23 | ||
265ecb21 | 24 | Track::Track() : |
eadaa89b | 25 | Line(), |
5a5a1232 | 26 | |
265ecb21 | 27 | fV(), |
28 | fP(), | |
29 | fBeta(0), | |
30 | fCharge(0), | |
31 | fLabel(0), | |
32 | fPathMarks(), | |
33 | ||
eadaa89b | 34 | fRnrStyle(0) |
265ecb21 | 35 | {} |
36 | ||
3d75306d | 37 | Track::Track(TParticle* t, Int_t label, TrackRnrStyle* rs): |
eadaa89b | 38 | Line(), |
3d75306d | 39 | |
40 | fV(t->Vx(), t->Vy(), t->Vz()), | |
41 | fP(t->Px(), t->Py(), t->Pz()), | |
42 | fBeta(t->P()/t->Energy()), | |
43 | fCharge(0), | |
44 | fLabel(label), | |
45 | fPathMarks(), | |
46 | ||
eadaa89b | 47 | fRnrStyle(rs) |
3d75306d | 48 | { |
49 | fLineColor = fRnrStyle->GetColor(); | |
50 | fMainColorPtr = &fLineColor; | |
51 | ||
52 | TParticlePDG* pdgp = t->GetPDG(); | |
53 | if (pdgp) | |
54 | fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3); | |
eadaa89b | 55 | |
56 | SetName(t->GetName()); | |
3d75306d | 57 | } |
58 | ||
265ecb21 | 59 | Track::Track(Reve::MCTrack* t, TrackRnrStyle* rs): |
eadaa89b | 60 | Line(), |
5a5a1232 | 61 | |
265ecb21 | 62 | fV(t->Vx(), t->Vy(), t->Vz()), |
63 | fP(t->Px(), t->Py(), t->Pz()), | |
64 | fBeta(t->P()/t->Energy()), | |
65 | fCharge(0), | |
66 | fLabel(t->label), | |
fa446a68 | 67 | fIndex(t->index), |
265ecb21 | 68 | fPathMarks(), |
69 | ||
eadaa89b | 70 | fRnrStyle(rs) |
265ecb21 | 71 | { |
5a5a1232 | 72 | fLineColor = fRnrStyle->GetColor(); |
73 | fMainColorPtr = &fLineColor; | |
74 | ||
5a5a1232 | 75 | TParticlePDG* pdgp = t->GetPDG(); |
76 | if(pdgp == 0) { | |
77 | t->ResetPdgCode(); pdgp = t->GetPDG(); | |
78 | } | |
48dc973d | 79 | fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3); |
eadaa89b | 80 | |
81 | SetName(t->GetName()); | |
5a5a1232 | 82 | } |
83 | ||
265ecb21 | 84 | Track::Track(Reve::RecTrack* t, TrackRnrStyle* rs) : |
eadaa89b | 85 | Line(), |
265ecb21 | 86 | |
87 | fV(t->V), | |
88 | fP(t->P), | |
89 | fBeta(t->beta), | |
90 | fCharge(t->sign), | |
91 | fLabel(t->label), | |
fa446a68 | 92 | fIndex(t->index), |
265ecb21 | 93 | fPathMarks(), |
94 | ||
eadaa89b | 95 | fRnrStyle(rs) |
5a5a1232 | 96 | { |
5a5a1232 | 97 | fLineColor = fRnrStyle->GetColor(); |
98 | fMainColorPtr = &fLineColor; | |
eadaa89b | 99 | |
100 | SetName(t->GetName()); | |
5a5a1232 | 101 | } |
102 | ||
103 | Track::~Track() | |
265ecb21 | 104 | { |
105 | for (vpPathMark_i i=fPathMarks.begin(); i!=fPathMarks.end(); ++i) | |
106 | delete *i; | |
107 | } | |
5a5a1232 | 108 | |
eadaa89b | 109 | /* |
5a5a1232 | 110 | void Track::Reset(Int_t n_points) |
111 | { | |
112 | delete [] TPolyLine3D::fP; TPolyLine3D::fP = 0; | |
113 | fN = n_points; | |
114 | if(fN) TPolyLine3D::fP = new Float_t [3*fN]; | |
115 | memset(TPolyLine3D::fP, 0, 3*fN*sizeof(Float_t)); | |
116 | fLastPoint = -1; | |
117 | } | |
eadaa89b | 118 | */ |
5a5a1232 | 119 | |
120 | /**************************************************************************/ | |
121 | ||
122 | void Track::MakeTrack() | |
123 | { | |
124 | ||
125 | TrackRnrStyle& RS((fRnrStyle != 0) ? *fRnrStyle : TrackRnrStyle::fgDefStyle); | |
126 | ||
127 | Float_t px = fP.x, py = fP.y, pz = fP.z; | |
128 | ||
129 | MCVertex mc_v0; | |
130 | mc_v0.x = fV.x; | |
131 | mc_v0.y = fV.y; | |
132 | mc_v0.z = fV.z; | |
133 | mc_v0.t = 0; | |
134 | ||
135 | std::vector<MCVertex> track_points; | |
48dc973d | 136 | Bool_t decay = kFALSE; |
5a5a1232 | 137 | |
138 | if ((TMath::Abs(fV.z) > RS.fMaxZ) || (fV.x*fV.x + fV.y*fV.y > RS.fMaxR*RS.fMaxR)) | |
139 | goto make_polyline; | |
140 | ||
01024c63 | 141 | if (fCharge != 0 && TMath::Abs(RS.fMagField) > 1e-5) { |
142 | ||
143 | // Charged particle in magnetic field | |
5a5a1232 | 144 | |
48dc973d | 145 | Float_t a = RS.fgkB2C * RS.fMagField * fCharge; |
5a5a1232 | 146 | |
147 | MCHelix helix(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points, a); //m->cm | |
148 | helix.Init(TMath::Sqrt(px*px+py*py), pz); | |
149 | ||
150 | if(!fPathMarks.empty()){ | |
151 | for(std::vector<Reve::PathMark*>::iterator i=fPathMarks.begin(); i!=fPathMarks.end(); ++i) { | |
152 | Reve::PathMark* pm = *i; | |
153 | ||
154 | if(RS.fFitDaughters && pm->type == Reve::PathMark::Daughter){ | |
155 | if(TMath::Abs(pm->V.z) > RS.fMaxZ | |
156 | || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR ) | |
157 | goto helix_bounds; | |
158 | ||
159 | //printf("%s fit daughter \n", fName.Data()); | |
160 | helix.LoopToVertex(fP.x, fP.y, fP.z, pm->V.x, pm->V.y, pm->V.z); | |
161 | fP.x -= pm->P.x; | |
162 | fP.y -= pm->P.y; | |
163 | fP.z -= pm->P.z; | |
164 | } | |
165 | if(RS.fFitDecay && pm->type == Reve::PathMark::Decay){ | |
166 | ||
167 | if(TMath::Abs(pm->V.z) > RS.fMaxZ | |
168 | || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR ) | |
169 | goto helix_bounds; | |
170 | helix.LoopToVertex(fP.x, fP.y, fP.z, pm->V.x, pm->V.y, pm->V.z); | |
171 | decay = true; | |
172 | break; | |
173 | } | |
174 | } | |
175 | } | |
176 | helix_bounds: | |
177 | //go to bounds | |
48dc973d | 178 | if(!decay || RS.fFitDecay == kFALSE){ |
5a5a1232 | 179 | helix.LoopToBounds(px,py,pz); |
180 | // printf("%s loop to bounds \n",fName.Data() ); | |
181 | } | |
182 | ||
01024c63 | 183 | } else { |
184 | ||
185 | // Neutral particle or no field | |
5a5a1232 | 186 | |
187 | MCLine line(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points); | |
188 | ||
189 | if(!fPathMarks.empty()){ | |
190 | for(std::vector<Reve::PathMark*>::iterator i=fPathMarks.begin(); i!=fPathMarks.end(); ++i) { | |
191 | Reve::PathMark* pm = *i; | |
192 | ||
193 | if(RS.fFitDaughters && pm->type == Reve::PathMark::Daughter){ | |
194 | if(TMath::Abs(pm->V.z) > RS.fMaxZ | |
195 | || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR ) | |
196 | goto line_bounds; | |
197 | line.GotoVertex(pm->V.x, pm->V.y, pm->V.z); | |
198 | fP.x -= pm->P.x; | |
199 | fP.y -= pm->P.y; | |
200 | fP.z -= pm->P.z; | |
201 | } | |
202 | ||
203 | if(RS.fFitDecay && pm->type == Reve::PathMark::Decay){ | |
204 | if(TMath::Abs(pm->V.z) > RS.fMaxZ | |
205 | || TMath::Sqrt(pm->V.x*pm->V.x + pm->V.y*pm->V.y) > RS.fMaxR ) | |
206 | goto line_bounds; | |
207 | line.GotoVertex(pm->V.x, pm->V.y, pm->V.z); | |
208 | decay = true; | |
209 | break; | |
210 | } | |
211 | } | |
212 | } | |
213 | ||
214 | line_bounds: | |
48dc973d | 215 | if(!decay || RS.fFitDecay == kFALSE) |
5a5a1232 | 216 | line.GotoBounds(px,py,pz); |
217 | ||
218 | } | |
219 | make_polyline: | |
220 | Reset(track_points.size()); | |
221 | for(std::vector<MCVertex>::iterator i=track_points.begin(); i!=track_points.end(); ++i) | |
222 | SetNextPoint(i->x, i->y, i->z); | |
223 | } | |
224 | ||
225 | /**************************************************************************/ | |
226 | ||
48dc973d | 227 | void Track::ImportHits() |
228 | { | |
229 | Reve::LoadMacro("hits_from_label.C"); | |
230 | gROOT->ProcessLine(Form("hits_from_label(%d);", fLabel)); | |
231 | } | |
232 | ||
233 | void Track::ImportClusters() | |
234 | { | |
235 | Reve::LoadMacro("clusters_from_label.C"); | |
236 | gROOT->ProcessLine(Form("clusters_from_label(%d);", fLabel)); | |
237 | } | |
238 | ||
fa446a68 | 239 | void Track::ImportClustersFromIndex() |
240 | { | |
241 | Reve::LoadMacro("clusters_from_index.C"); | |
242 | gROOT->ProcessLine(Form("clusters_from_index(%d);", fIndex)); | |
243 | } | |
244 | ||
b1f08706 | 245 | void Track::PrintKineStack() |
246 | { | |
247 | Reve::LoadMacro("print_kine_from_label.C"); | |
248 | gROOT->ProcessLine(Form("print_kine_from_label(%d);", fLabel)); | |
249 | } | |
250 | ||
9c39ede9 | 251 | /**************************************************************************/ |
252 | ||
253 | void Track::CtrlClicked(Reve::Track* track) | |
254 | { | |
255 | Emit("CtrlClicked(Reve::Track*)", (Long_t)track); | |
256 | } | |
257 | ||
48dc973d | 258 | |
259 | /**************************************************************************/ | |
260 | /**************************************************************************/ | |
261 | ||
5a5a1232 | 262 | //______________________________________________________________________ |
263 | // TrackRnrStyle | |
264 | // | |
265 | ||
266 | ClassImp(Reve::TrackRnrStyle) | |
267 | ||
48dc973d | 268 | Float_t TrackRnrStyle::fgDefMagField = 5; |
269 | const Float_t TrackRnrStyle::fgkB2C = 0.299792458e-3; | |
5a5a1232 | 270 | TrackRnrStyle TrackRnrStyle::fgDefStyle; |
271 | ||
265ecb21 | 272 | TrackRnrStyle::TrackRnrStyle() : |
273 | TObject(), | |
5a5a1232 | 274 | |
265ecb21 | 275 | fColor(1), |
2074deef | 276 | fWidth(1), |
265ecb21 | 277 | fMagField(fgDefMagField), |
5a5a1232 | 278 | |
265ecb21 | 279 | fMaxR (350), |
280 | fMaxZ (450), | |
5a5a1232 | 281 | |
265ecb21 | 282 | fMaxOrbs (0.5), |
283 | fMinAng (45), | |
284 | fDelta (0.1), | |
5a5a1232 | 285 | |
265ecb21 | 286 | fFitDaughters(kTRUE), |
287 | fFitDecay (kTRUE) | |
288 | {} | |
5a5a1232 | 289 | |
290 | /**************************************************************************/ | |
291 | /**************************************************************************/ | |
292 | ||
293 | //______________________________________________________________________ | |
294 | // TrackList | |
295 | // | |
296 | ||
297 | ClassImp(Reve::TrackList) | |
298 | ||
299 | void TrackList::Init() | |
300 | { | |
301 | fMarkerStyle = 6; | |
302 | fMarkerColor = 5; | |
303 | // fMarker->SetMarkerSize(0.05); | |
304 | ||
a8600b56 | 305 | if (fRnrStyle== 0) fRnrStyle = new TrackRnrStyle; |
306 | SetMainColorPtr(&fRnrStyle->fColor); | |
5a5a1232 | 307 | } |
308 | ||
a8600b56 | 309 | TrackList::TrackList(Int_t n_tracks, TrackRnrStyle* rs) : |
7d42b6c2 | 310 | RenderElementListBase(), |
265ecb21 | 311 | TPolyMarker3D(n_tracks), |
312 | ||
313 | fTitle(), | |
314 | ||
a8600b56 | 315 | fRnrStyle (rs), |
265ecb21 | 316 | fRnrMarkers (kTRUE), |
317 | fRnrTracks (kTRUE) | |
5a5a1232 | 318 | { |
319 | Init(); | |
320 | } | |
321 | ||
a8600b56 | 322 | TrackList::TrackList(const Text_t* name, Int_t n_tracks, TrackRnrStyle* rs) : |
7d42b6c2 | 323 | RenderElementListBase(), |
265ecb21 | 324 | TPolyMarker3D(n_tracks), |
a8600b56 | 325 | |
265ecb21 | 326 | fTitle(), |
327 | ||
a8600b56 | 328 | fRnrStyle (rs), |
265ecb21 | 329 | fRnrMarkers (kTRUE), |
330 | fRnrTracks (kTRUE) | |
5a5a1232 | 331 | { |
332 | Init(); | |
333 | SetName(name); | |
334 | } | |
335 | ||
336 | void TrackList::Reset(Int_t n_tracks) | |
337 | { | |
338 | delete [] fP; fP = 0; | |
339 | fN = n_tracks; | |
340 | if(fN) fP = new Float_t [3*fN]; | |
341 | memset(fP, 0, 3*fN*sizeof(Float_t)); | |
342 | fLastPoint = -1; | |
343 | } | |
344 | ||
345 | /**************************************************************************/ | |
346 | ||
347 | void TrackList::Paint(Option_t* option) | |
348 | { | |
349 | if(fRnrElement) { | |
350 | if(fRnrMarkers) { | |
351 | TPolyMarker3D::Paint(option); | |
352 | } | |
353 | if(fRnrTracks) { | |
9c39ede9 | 354 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
5a5a1232 | 355 | if((*i)->GetRnrElement()) |
356 | (*i)->GetObject()->Paint(option); | |
357 | } | |
358 | } | |
359 | } | |
360 | } | |
361 | ||
362 | /**************************************************************************/ | |
363 | ||
364 | void TrackList::AddElement(RenderElement* el) | |
365 | { | |
366 | static const Exc_t eH("TrackList::AddElement "); | |
367 | if (dynamic_cast<Track*>(el) == 0) | |
368 | throw(eH + "new element not a Track."); | |
369 | RenderElementListBase::AddElement(el); | |
370 | } | |
371 | ||
372 | /**************************************************************************/ | |
373 | ||
374 | void TrackList::SetRnrMarkers(Bool_t rnr) | |
375 | { | |
376 | fRnrMarkers = rnr; | |
377 | gReve->Redraw3D(); | |
378 | } | |
379 | ||
380 | void TrackList::SetRnrTracks(Bool_t rnr) | |
381 | { | |
382 | ||
383 | fRnrTracks = rnr; | |
384 | gReve->Redraw3D(); | |
385 | } | |
386 | ||
387 | /**************************************************************************/ | |
388 | ||
389 | void TrackList::MakeTracks() | |
390 | { | |
9c39ede9 | 391 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
5a5a1232 | 392 | ((Track*)(*i))->MakeTrack(); |
393 | } | |
394 | gReve->Redraw3D(); | |
395 | } | |
396 | ||
397 | ||
398 | void TrackList::MakeMarkers() | |
399 | { | |
7d42b6c2 | 400 | Reset(fChildren.size()); |
9c39ede9 | 401 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
5a5a1232 | 402 | Track& t = *((Track*)(*i)); |
403 | if(t.GetN() > 0) | |
404 | SetNextPoint(t.fV.x, t.fV.y, t.fV.z); | |
405 | } | |
406 | gReve->Redraw3D(); | |
407 | } | |
408 | ||
409 | /**************************************************************************/ | |
410 | /*************************************************************************/ | |
411 | ||
2074deef | 412 | void TrackList::SetWidth(Width_t w) |
413 | { | |
414 | Width_t oldw = fRnrStyle->fWidth; | |
415 | fRnrStyle->fWidth = w; | |
9c39ede9 | 416 | for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
2074deef | 417 | Track& t = *((Track*)(*i)); |
418 | if (t.GetLineWidth() == oldw) | |
419 | t.SetLineWidth(w); | |
420 | } | |
421 | } | |
422 | ||
5a5a1232 | 423 | void TrackList::SetMaxR(Float_t x) |
424 | { | |
a8600b56 | 425 | fRnrStyle->fMaxR = x; |
5a5a1232 | 426 | MakeTracks(); |
427 | MakeMarkers(); | |
428 | } | |
429 | ||
430 | void TrackList::SetMaxZ(Float_t x) | |
431 | { | |
a8600b56 | 432 | fRnrStyle->fMaxZ = x; |
5a5a1232 | 433 | MakeTracks(); |
434 | MakeMarkers(); | |
435 | } | |
436 | ||
437 | void TrackList::SetMaxOrbs(Float_t x) | |
438 | { | |
a8600b56 | 439 | fRnrStyle->fMaxOrbs = x; |
5a5a1232 | 440 | MakeTracks(); |
441 | } | |
442 | ||
443 | void TrackList::SetMinAng(Float_t x) | |
444 | { | |
a8600b56 | 445 | fRnrStyle->fMinAng = x; |
5a5a1232 | 446 | MakeTracks(); |
447 | } | |
448 | ||
449 | void TrackList::SetDelta(Float_t x) | |
450 | { | |
a8600b56 | 451 | fRnrStyle->fDelta = x; |
5a5a1232 | 452 | MakeTracks(); |
453 | } | |
454 | ||
455 | void TrackList::SetFitDaughters(Bool_t x) | |
456 | { | |
a8600b56 | 457 | fRnrStyle->fFitDaughters = x; |
5a5a1232 | 458 | MakeTracks(); |
459 | } | |
460 | ||
461 | void TrackList::SetFitDecay(Bool_t x) | |
462 | { | |
a8600b56 | 463 | fRnrStyle->fFitDecay = x; |
5a5a1232 | 464 | MakeTracks(); |
465 | } | |
466 | ||
467 | /**************************************************************************/ | |
468 | /**************************************************************************/ | |
469 | ||
470 | void TrackList::SelectByPt(Float_t min_pt, Float_t max_pt) | |
471 | { | |
472 | Float_t minptsq = min_pt*min_pt; | |
473 | Float_t maxptsq = max_pt*max_pt; | |
474 | Float_t ptsq; | |
475 | ||
9c39ede9 | 476 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
5a5a1232 | 477 | ptsq = ((Track*)(*i))->fP.Perp2(); |
478 | (*i)->SetRnrElement(ptsq >= minptsq && ptsq <= maxptsq); | |
479 | } | |
480 | } | |
481 | ||
482 | /**************************************************************************/ | |
483 | ||
b99aed53 | 484 | void TrackList::ImportHits() |
5a5a1232 | 485 | { |
9c39ede9 | 486 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
b99aed53 | 487 | ((Track*)(*i))->ImportHits(); |
488 | } | |
5a5a1232 | 489 | } |
490 | ||
b99aed53 | 491 | void TrackList::ImportClusters() |
5a5a1232 | 492 | { |
9c39ede9 | 493 | for(List_i i=fChildren.begin(); i!=fChildren.end(); ++i) { |
b99aed53 | 494 | ((Track*)(*i))->ImportClusters(); |
495 | } | |
5a5a1232 | 496 | } |
9c39ede9 | 497 | |
498 | /**************************************************************************/ | |
499 | /**************************************************************************/ | |
500 | /**************************************************************************/ | |
501 | ||
502 | #include "RGEditor.h" | |
503 | ||
504 | //______________________________________________________________________ | |
505 | // TrackCounter | |
506 | // | |
507 | ||
508 | ClassImp(TrackCounter) | |
509 | ||
b1f08706 | 510 | TrackCounter* TrackCounter::fgInstance = 0; |
511 | ||
9c39ede9 | 512 | TrackCounter::TrackCounter(const Text_t* name, const Text_t* title) : |
513 | RenderElement(), | |
514 | TNamed(name, title), | |
515 | ||
516 | fBadLineStyle (6), | |
517 | fClickAction (CA_ToggleTrack), | |
518 | fAllTracks (0), | |
519 | fGoodTracks (0), | |
520 | fTrackLists () | |
521 | { | |
b1f08706 | 522 | if (fgInstance == 0) fgInstance = this; |
9c39ede9 | 523 | TQObject::Connect("Reve::Track", "CtrlClicked(Reve::Track*)", |
524 | "Reve::TrackCounter", this, "DoTrackAction(Reve::Track*)"); | |
525 | } | |
526 | ||
527 | TrackCounter::~TrackCounter() | |
528 | { | |
529 | TQObject::Disconnect("Reve::Track", "DoTrackAction(Reve::Track*)"); | |
b1f08706 | 530 | if (fgInstance == this) fgInstance = 0; |
9c39ede9 | 531 | } |
532 | ||
533 | /**************************************************************************/ | |
534 | ||
535 | void TrackCounter::Reset() | |
536 | { | |
537 | printf("TrackCounter::Reset()\n"); | |
538 | fAllTracks = 0; | |
539 | fGoodTracks = 0; | |
540 | TIter next(&fTrackLists); | |
541 | TrackList* tlist; | |
542 | while ((tlist = dynamic_cast<TrackList*>(next()))) | |
543 | tlist->RemoveParent(this); | |
544 | fTrackLists.Clear(); | |
545 | } | |
546 | ||
547 | void TrackCounter::RegisterTracks(TrackList* tlist, Bool_t goodTracks) | |
548 | { | |
549 | // printf("TrackCounter::RegisterTracks '%s', %s\n", | |
550 | // tlist->GetObject()->GetName(), goodTracks ? "good" : "bad"); | |
551 | ||
552 | tlist->AddParent(this); | |
553 | fTrackLists.Add(tlist); | |
554 | ||
555 | List_i i = tlist->BeginChildren(); | |
556 | while (i != tlist->EndChildren()) | |
557 | { | |
558 | Track* t = dynamic_cast<Track*>(*i); | |
559 | if (t != 0) | |
560 | { | |
561 | if (goodTracks) | |
562 | { | |
563 | ++fGoodTracks; | |
564 | } else { | |
565 | t->SetLineStyle(fBadLineStyle); | |
566 | } | |
567 | ++fAllTracks; | |
568 | } | |
569 | ++i; | |
570 | } | |
571 | } | |
572 | ||
573 | void TrackCounter::DoTrackAction(Track* track) | |
574 | { | |
575 | // !!!! No check done if ok. | |
576 | // !!!! Should also override RemoveElementLocal | |
7af62191 | 577 | // !!!! But then ... should also sotre local information if track is ok. |
9c39ede9 | 578 | |
579 | switch (fClickAction) | |
580 | { | |
581 | ||
582 | case CA_PrintTrackInfo: | |
583 | { | |
584 | printf("Track '%s'\n", track->GetObject()->GetName()); | |
585 | Vector &v = track->fV, &p = track->fP; | |
586 | printf(" Vx=%f, Vy=%f, Vz=%f; Pt=%f, Pz=%f, phi=%f)\n", | |
587 | v.x, v.y, v.z, p.Perp(), p.z, TMath::RadToDeg()*p.Phi()); | |
588 | printf(" <other information should be printed ... full AliESDtrack>\n"); | |
589 | break; | |
590 | } | |
591 | ||
592 | case CA_ToggleTrack: | |
593 | { | |
594 | if (track->GetLineStyle() == 1) | |
595 | { | |
596 | track->SetLineStyle(fBadLineStyle); | |
597 | --fGoodTracks; | |
598 | } else { | |
599 | track->SetLineStyle(1); | |
600 | ++fGoodTracks; | |
601 | } | |
602 | gReve->Redraw3D(); | |
603 | ||
604 | printf("TrackCounter::CountTrack All=%d, Good=%d, Bad=%d\n", | |
605 | fAllTracks, fGoodTracks, fAllTracks-fGoodTracks); | |
606 | ||
607 | if (gReve->GetEditor()->GetModel() == GetObject()) | |
608 | gReve->EditRenderElement(this); | |
609 | ||
610 | break; | |
611 | } | |
612 | ||
613 | } // end switch fClickAction | |
614 | } | |
7af62191 | 615 | |
616 | /**************************************************************************/ | |
617 | ||
618 | void TrackCounter::OutputEventTracks(FILE* out) | |
619 | { | |
620 | if (out == 0) | |
621 | { | |
622 | out = stdout; | |
623 | fprintf(out, "TrackCounter::FinalizeEvent()\n"); | |
624 | } | |
625 | ||
626 | fprintf(out, "Event = %d Ntracks = %d\n", fEventId, fGoodTracks); | |
627 | ||
628 | TIter tlists(&fTrackLists); | |
629 | TrackList* tlist; | |
630 | Int_t cnt = 0; | |
631 | while ((tlist = (TrackList*) tlists()) != 0) | |
632 | { | |
633 | List_i i = tlist->BeginChildren(); | |
634 | while (i != tlist->EndChildren()) | |
635 | { | |
636 | Track* t = dynamic_cast<Track*>(*i); | |
637 | if (t != 0 && t->GetLineStyle() == 1) | |
638 | { | |
639 | ++cnt; | |
640 | fprintf(out, " %2d: chg=%+2d pt=%8.5f eta=%+8.5f\n", | |
641 | cnt, t->fCharge, t->fP.Perp(), t->fP.Eta()); | |
642 | } | |
643 | ++i; | |
644 | } | |
645 | ||
646 | } | |
647 | } |