Logo ROOT  
Reference Guide
REveTrackPropagator.hxx
Go to the documentation of this file.
1 // @(#)root/eve7:$Id$
2 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT7_REveTrackPropagator
13 #define ROOT7_REveTrackPropagator
14 
15 #include <ROOT/REveVector.hxx>
16 #include <ROOT/REvePathMark.hxx>
17 #include <ROOT/REveUtil.hxx>
18 #include <ROOT/REveElement.hxx>
19 #include "TMarker.h"
20 
21 #include <vector>
22 
23 namespace ROOT {
24 namespace Experimental {
25 
26 class REvePointSet;
27 
28 ////////////////////////////////////////////////////////////////////////////////
29 /// REveMagField
30 /// Abstract interface to magnetic field
31 ////////////////////////////////////////////////////////////////////////////////
32 
33 class REveMagField
34 {
35 protected:
37 
38 public:
39  REveMagField() = default;
40  virtual ~REveMagField() {}
41 
42  virtual Bool_t IsConst() const { return fFieldConstant; }
43 
44  virtual void PrintField(Double_t x, Double_t y, Double_t z) const
45  {
46  REveVector b = GetField(x, y, z);
47  printf("v(%f, %f, %f) B(%f, %f, %f) \n", x, y, z, b.fX, b.fY, b.fZ);
48  }
49 
50  virtual Double_t GetMaxFieldMag() const = 0;
51  virtual REveVectorD GetField(Double_t x, Double_t y, Double_t z) const = 0;
52 
53  REveVectorD GetField(const REveVectorD &v) const { return GetField(v.fX, v.fY, v.fZ); }
54 };
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 /// REveMagFieldConst
58 /// Interface to constant magnetic field.
59 ////////////////////////////////////////////////////////////////////////////////
60 
61 class REveMagFieldConst : public REveMagField
62 {
63 protected:
65 
66 public:
68  virtual ~REveMagFieldConst() {}
69 
70  Double_t GetMaxFieldMag() const override { return fB.Mag(); };
71  REveVectorD GetField(Double_t /*x*/, Double_t /*y*/, Double_t /*z*/) const override { return fB; }
72 };
73 
74 ////////////////////////////////////////////////////////////////////////////////
75 /// REveMagFieldDuo
76 /// Interface to magnetic field with two different values depending on radius.
77 ////////////////////////////////////////////////////////////////////////////////
78 
80 {
81 protected:
84  Double_t fR2;
85 
86 public:
88  : REveMagField(), fBIn(0, 0, bIn), fBOut(0, 0, bOut), fR2(r * r)
89  {
91  }
92  virtual ~REveMagFieldDuo() {}
93 
94  Double_t GetMaxFieldMag() const override
95  {
96  Double_t b1 = fBIn.Mag(), b2 = fBOut.Mag();
97  return b1 > b2 ? b1 : b2;
98  }
99 
100  REveVectorD GetField(Double_t x, Double_t y, Double_t /*z*/) const override
101  {
102  return ((x * x + y * y) < fR2) ? fBIn : fBOut;
103  }
104 };
105 
106 ////////////////////////////////////////////////////////////////////////////////
107 /// REveTrackPropagator
108 /// Calculates path of a particle taking into account special path-marks and imposed boundaries.
109 ////////////////////////////////////////////////////////////////////////////////
110 
111 class REveTrackPropagator : public REveElement,
113 {
114 public:
115  enum EStepper_e { kHelix, kRungeKutta };
116 
118 
119 protected:
120  struct Helix_t {
121  Int_t fCharge; // Charge of tracked particle.
122  Double_t fMaxAng; // Maximum step angle.
123  Double_t fMaxStep; // Maximum allowed step size.
124  Double_t fDelta; // Maximum error in the middle of the step.
125 
126  Double_t fPhi; // Accumulated angle to check fMaxOrbs by propagator.
127  Bool_t fValid; // Corner case pT~0 or B~0, possible in variable mag field.
128 
129  // ----------------------------------------------------------------
130 
131  // helix parameters
132  Double_t fLam; // Momentum ratio pT/pZ.
133  Double_t fR; // Helix radius in cm.
134  Double_t fPhiStep; // Caluclated from fMinAng and fDelta.
135  Double_t fSin, fCos; // Current sin/cos(phistep).
136 
137  // Runge-Kutta parameters
138  Double_t fRKStep; // Step for Runge-Kutta.
139 
140  // cached
141  REveVectorD fB; // Current magnetic field, cached.
142  REveVectorD fE1, fE2, fE3; // Base vectors: E1 -> B dir, E2->pT dir, E3 = E1xE2.
143  REveVectorD fPt, fPl; // Transverse and longitudinal momentum.
144  Double_t fPtMag; // Magnitude of pT.
145  Double_t fPlMag; // Momentum parallel to mag field.
146  Double_t fLStep; // Transverse step arc-length in cm.
147 
148  // ----------------------------------------------------------------
149 
151 
152  void UpdateCommon(const REveVectorD &p, const REveVectorD &b);
153  void UpdateHelix(const REveVectorD &p, const REveVectorD &b, Bool_t full_update, Bool_t enforce_max_step);
154  void UpdateRK(const REveVectorD &p, const REveVectorD &b);
155 
156  void Step(const REveVector4D &v, const REveVectorD &p, REveVector4D &vOut, REveVectorD &pOut);
157 
158  Double_t GetStep() { return fLStep * TMath::Sqrt(1 + fLam * fLam); }
159  Double_t GetStep2() { return fLStep * fLStep * (1 + fLam * fLam); }
160  };
161 
162 private:
163  REveTrackPropagator(const REveTrackPropagator &) = delete;
165 
166  void DistributeOffset(const REveVectorD &off, Int_t first_point, Int_t np, REveVectorD &p);
167 
168 protected:
170 
173 
174  // Track extrapolation limits
175  Double_t fMaxR; // Max radius for track extrapolation
176  Double_t fMaxZ; // Max z-coordinate for track extrapolation.
177  Int_t fNMax; // Max steps
178  // Helix limits
179  Double_t fMaxOrbs; // Maximal angular path of tracks' orbits (1 ~ 2Pi).
180 
181  // Path-mark / first-vertex control
182  Bool_t fEditPathMarks; // Show widgets for path-mark control in GUI editor.
183  Bool_t fFitDaughters; // Pass through daughter creation points when extrapolating a track.
184  Bool_t fFitReferences; // Pass through given track-references when extrapolating a track.
185  Bool_t fFitDecay; // Pass through decay point when extrapolating a track.
186  Bool_t fFitCluster2Ds; // Pass through 2D-clusters when extrapolating a track.
187  Bool_t fFitLineSegments; // Pass through line when extrapolating a track.
188  Bool_t fRnrDaughters; // Render daughter path-marks.
189  Bool_t fRnrReferences; // Render track-reference path-marks.
190  Bool_t fRnrDecay; // Render decay path-marks.
191  Bool_t fRnrCluster2Ds; // Render 2D-clusters.
192  Bool_t fRnrFV; // Render first vertex.
193  TMarker fPMAtt; // Marker attributes for rendering of path-marks.
194  TMarker fFVAtt; // Marker attributes for fits vertex.
195 
196  // Handling of discontinuities in projections
197  UChar_t fProjTrackBreaking; // Handling of projected-track breaking.
198  Bool_t fRnrPTBMarkers; // Render break-points on tracks.
199  TMarker fPTBAtt; // Marker attributes for track break-points.
200 
201  // ----------------------------------------------------------------
202 
203  // Propagation, state of current track
204  std::vector<REveVector4D> fPoints; // Calculated point.
205  std::vector<REveVector4D> fLastPoints; // Copy of the latest calculated points.
206  REveVectorD fV; // Start vertex.
207  Helix_t fH; // Helix.
208 
210  void Update(const REveVector4D &v, const REveVectorD &p, Bool_t full_update = kFALSE, Bool_t enforce_max_step = kFALSE);
211  void Step(const REveVector4D &v, const REveVectorD &p, REveVector4D &vOut, REveVectorD &pOut);
212 
215  void LoopToBounds(REveVectorD &p);
216 
219 
220  void StepRungeKutta(Double_t step, Double_t *vect, Double_t *vout);
221 
222  Bool_t HelixIntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect);
223  Bool_t LineIntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect);
224  Bool_t PointOverVertex(const REveVector4D &v0, const REveVector4D &v, Double_t *p = 0);
225 
227  Double_t rMagInv, REveVectorD &c);
229  REveVectorD &out);
230 
231 public:
232  REveTrackPropagator(const std::string& n = "REveTrackPropagator", const std::string& t = "", REveMagField *field = nullptr,
233  Bool_t own_field = kTRUE);
234  virtual ~REveTrackPropagator();
235 
236  void OnZeroRefCount() override;
237 
238  void CheckReferenceCount(const std::string &from = "<unknown>") override;
239 
240  void StampAllTracks();
241 
242  // propagation
243  void InitTrack(const REveVectorD &v, Int_t charge);
244  void ResetTrack();
245 
246  Int_t GetCurrentPoint() const;
247  Double_t GetTrackLength(Int_t start_point = 0, Int_t end_point = -1) const;
248 
249  virtual void GoToBounds(REveVectorD &p);
250  virtual Bool_t GoToVertex(REveVectorD &v, REveVectorD &p);
251  virtual Bool_t GoToLineSegment(const REveVectorD &s, const REveVectorD &r, REveVectorD &p);
252 
253  // REveVectorF wrappers
254  void InitTrack(const REveVectorF &v, Int_t charge);
255  void GoToBounds(REveVectorF &p);
258 
259  Bool_t IntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect);
260 
261  void FillPointSet(REvePointSet *ps) const;
262 
263  void SetStepper(EStepper_e s) { fStepper = s; }
264 
265  void SetMagField(Double_t bX, Double_t bY, Double_t bZ);
266  void SetMagField(Double_t b) { SetMagField(0, 0, b); }
267  void SetMagFieldObj(REveMagField *field, Bool_t own_field = kTRUE);
268 
269  void SetMaxR(Double_t x);
270  void SetMaxZ(Double_t x);
271  void SetMaxOrbs(Double_t x);
272  void SetMinAng(Double_t x);
273  void SetMaxAng(Double_t x);
274  void SetMaxStep(Double_t x);
276 
279  void SetRnrReferences(Bool_t x);
280  void SetRnrDecay(Bool_t x);
281  void SetRnrCluster2Ds(Bool_t x);
282  void SetFitDaughters(Bool_t x);
283  void SetFitReferences(Bool_t x);
284  void SetFitDecay(Bool_t x);
285  void SetFitCluster2Ds(Bool_t x);
287  void SetRnrFV(Bool_t x);
290 
292  void PrintMagField(Double_t x, Double_t y, Double_t z) const;
293 
294  EStepper_e GetStepper() const { return fStepper; }
295 
296  Double_t GetMaxR() const { return fMaxR; }
297  Double_t GetMaxZ() const { return fMaxZ; }
298  Double_t GetMaxOrbs() const { return fMaxOrbs; }
299  Double_t GetMinAng() const;
300  Double_t GetMaxAng() const { return fH.fMaxAng; }
301  Double_t GetMaxStep() const { return fH.fMaxStep; }
302  Double_t GetDelta() const { return fH.fDelta; }
303 
304  Bool_t GetEditPathMarks() const { return fEditPathMarks; }
305  Bool_t GetRnrDaughters() const { return fRnrDaughters; }
307  Bool_t GetRnrDecay() const { return fRnrDecay; }
311  Bool_t GetFitDecay() const { return fFitDecay; }
314  Bool_t GetRnrFV() const { return fRnrFV; }
317 
318  TMarker &RefPMAtt() { return fPMAtt; }
319  TMarker &RefFVAtt() { return fFVAtt; }
320  TMarker &RefPTBAtt() { return fPTBAtt; }
321 
322  const std::vector<REveVector4D> &GetLastPoints() const { return fLastPoints; }
323 
324  static Bool_t IsOutsideBounds(const REveVectorD &point, Double_t maxRsqr, Double_t maxZ);
325 
326  static Double_t fgDefMagField; // Default value for constant solenoid magnetic field.
327  static const Double_t fgkB2C; // Constant for conversion of momentum to curvature.
328  static REveTrackPropagator fgDefault; // Default track propagator.
329 };
330 
331 //______________________________________________________________________________
333 {
334  // Return true if point% is outside of cylindrical bounds detrmined by
335  // square radius and z.
336 
337  return TMath::Abs(point.fZ) > maxZ || point.fX * point.fX + point.fY * point.fY > maxRsqr;
338 }
339 
340 //______________________________________________________________________________
342 {
343  static const Double_t kMinPl = 1e-5;
344 
345  REveVectorD dv;
346  dv.Sub(v0, v);
347 
348  Double_t dotV;
349 
350  if (TMath::Abs(fH.fPlMag) > kMinPl) {
351  // Use longitudinal momentum to determine crossing point.
352  // Works ok for spiraling helices, also for loopers.
353 
354  dotV = fH.fE1.Dot(dv);
355  if (fH.fPlMag < 0)
356  dotV = -dotV;
357  } else {
358  // Use full momentum, which is pT, under this conditions.
359 
360  dotV = fH.fE2.Dot(dv);
361  }
362 
363  if (p)
364  *p = dotV;
365 
366  return dotV < 0;
367 }
368 
369 } // namespace Experimental
370 } // namespace ROOT
371 
372 #endif
ROOT::Experimental::REveTrackPropagator::SetFitReferences
void SetFitReferences(Bool_t x)
Set track-reference fitting and rebuild tracks.
Definition: REveTrackPropagator.cxx:1105
ROOT::Experimental::REveMagFieldConst::~REveMagFieldConst
virtual ~REveMagFieldConst()
Definition: REveTrackPropagator.hxx:80
ROOT::Experimental::REveMagFieldDuo::fR2
Double_t fR2
Definition: REveTrackPropagator.hxx:96
c
#define c(i)
Definition: RSha256.hxx:119
ROOT::Experimental::REveTrackPropagator::Helix_t::GetStep2
Double_t GetStep2()
Definition: REveTrackPropagator.hxx:171
ROOT::Experimental::REveTrackPropagator::GetTrackLength
Double_t GetTrackLength(Int_t start_point=0, Int_t end_point=-1) const
Calculate track length from start_point to end_point.
Definition: REveTrackPropagator.cxx:330
ROOT::Experimental::REveTrackPropagator::SetProjTrackBreaking
void SetProjTrackBreaking(UChar_t x)
Set projection break-point mode and rebuild tracks.
Definition: REveTrackPropagator.cxx:1186
n
const Int_t n
Definition: legend1.C:16
ROOT::Experimental::REveTrackPropagator::SetMagField
void SetMagField(Double_t bX, Double_t bY, Double_t bZ)
Set constant magnetic field and rebuild tracks.
Definition: REveTrackPropagator.cxx:995
ROOT::Experimental::REveTrackPropagator::Helix_t::fE2
REveVectorD fE2
Definition: REveTrackPropagator.hxx:154
ROOT::Experimental::REveTrackPropagator::fV
REveVectorD fV
Definition: REveTrackPropagator.hxx:218
ROOT::Experimental::REveTrackPropagator::FillPointSet
void FillPointSet(REvePointSet *ps) const
Reset ps and populate it with points in propagation cache.
Definition: REveTrackPropagator.cxx:967
ROOT::Experimental::REveTrackPropagator::SetRnrPTBMarkers
void SetRnrPTBMarkers(Bool_t x)
Set projection break-point rendering and rebuild tracks.
Definition: REveTrackPropagator.cxx:1195
ROOT::Experimental::REveTrackPropagator::GetMaxStep
Double_t GetMaxStep() const
Definition: REveTrackPropagator.hxx:313
ROOT::Experimental::REveMagFieldDuo::fBIn
REveVectorD fBIn
Definition: REveTrackPropagator.hxx:94
ROOT::Experimental::REveTrackPropagator::LineToVertex
Bool_t LineToVertex(REveVectorD &v)
Propagate neutral particle to vertex v.
Definition: REveTrackPropagator.cxx:771
ROOT::Experimental::REveTrackPropagator::Helix_t::UpdateCommon
void UpdateCommon(const REveVectorD &p, const REveVectorD &b)
Common update code for helix and RK propagation.
Definition: REveTrackPropagator.cxx:70
ROOT::Experimental::REveTrackPropagator::Helix_t::GetStep
Double_t GetStep()
Definition: REveTrackPropagator.hxx:170
kTRUE
const Bool_t kTRUE
Definition: RtypesCore.h:91
ROOT::Experimental::REveTrackPropagator::RebuildTracks
void RebuildTracks()
Rebuild all tracks using this render-style.
Definition: REveTrackPropagator.cxx:981
v0
@ v0
Definition: rootcling_impl.cxx:3636
e
#define e(i)
Definition: RSha256.hxx:121
ROOT::Experimental::REveTrackPropagator::GetFitLineSegments
Bool_t GetFitLineSegments() const
Definition: REveTrackPropagator.hxx:325
ROOT::Experimental::REveTrackPropagator::GetMinAng
Double_t GetMinAng() const
Get maximum step angle.
Definition: REveTrackPropagator.cxx:1060
ROOT::Experimental::REveTrackPropagator::GetFitReferences
Bool_t GetFitReferences() const
Definition: REveTrackPropagator.hxx:322
ROOT::Experimental::REveTrackPropagator::fNMax
Int_t fNMax
Definition: REveTrackPropagator.hxx:189
ROOT::Experimental::REveVector4T
REveVector4T A four-vector template without TObject inheritance and virtual functions.
Definition: REveVector.hxx:238
ROOT::Experimental::REveTrackPropagator::SetRnrReferences
void SetRnrReferences(Bool_t x)
Set track-reference rendering and rebuild tracks.
Definition: REveTrackPropagator.cxx:1168
ROOT::Experimental::REveTrackPropagator::LineIntersectPlane
Bool_t LineIntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect)
Intersect line with a plane.
Definition: REveTrackPropagator.cxx:869
REvePathMark.hxx
ROOT::Experimental::REveTrackPropagator::Helix_t::fB
REveVectorD fB
Definition: REveTrackPropagator.hxx:153
ROOT::Experimental::REveTrackPropagator::LoopToVertex
Bool_t LoopToVertex(REveVectorD &v, REveVectorD &p)
Propagate charged particle with momentum p to vertex v.
Definition: REveTrackPropagator.cxx:573
ROOT::Experimental::REveTrackPropagator::SetMinAng
void SetMinAng(Double_t x)
Set maximum step angle and rebuild tracks.
Definition: REveTrackPropagator.cxx:1051
ROOT::Experimental::REveTrackPropagator::IsOutsideBounds
static Bool_t IsOutsideBounds(const REveVectorD &point, Double_t maxRsqr, Double_t maxZ)
Definition: REveTrackPropagator.hxx:344
ROOT::Experimental::REveTrackPropagator::fRnrFV
Bool_t fRnrFV
Definition: REveTrackPropagator.hxx:204
ROOT::Experimental::REveVectorT::fX
TT fX
Definition: REveVector.hxx:31
ROOT::Experimental::REveTrackPropagator::kPTB_Break
@ kPTB_Break
Definition: REveTrackPropagator.hxx:129
ROOT::Experimental::REveTrackPropagator::fRnrDaughters
Bool_t fRnrDaughters
Definition: REveTrackPropagator.hxx:200
ROOT::Experimental::REveMagFieldConst::GetMaxFieldMag
Double_t GetMaxFieldMag() const override
Definition: REveTrackPropagator.hxx:82
ROOT::Experimental::REveTrackPropagator::Helix_t::fR
Double_t fR
Definition: REveTrackPropagator.hxx:145
ROOT::Experimental::REveTrackPropagator::GetDelta
Double_t GetDelta() const
Definition: REveTrackPropagator.hxx:314
ROOT::Experimental::REveTrackPropagator::GetStepper
EStepper_e GetStepper() const
Definition: REveTrackPropagator.hxx:306
ROOT::Experimental::REveVectorT::Dot
TT Dot(const REveVectorT &a) const
Definition: REveVector.hxx:164
ROOT::Experimental::REveTrackPropagator::SetMagFieldObj
void SetMagFieldObj(REveMagField *field, Bool_t own_field=kTRUE)
Set constant magnetic field and rebuild tracks.
Definition: REveTrackPropagator.cxx:1003
ROOT::Experimental::REveTrackPropagator::GetMagField
REveVectorD GetMagField(Double_t x, Double_t y, Double_t z)
Definition: REveTrackPropagator.hxx:303
ROOT::Experimental::REveTrackPropagator::fFitDaughters
Bool_t fFitDaughters
Definition: REveTrackPropagator.hxx:195
r
ROOT::R::TRInterface & r
Definition: Object.C:4
ROOT::Experimental::REveTrackPropagator::fMagFieldObj
REveMagField * fMagFieldObj
Definition: REveTrackPropagator.hxx:183
TMath::Sqrt
Double_t Sqrt(Double_t x)
Definition: TMath.h:691
ROOT::Experimental::REveTrackPropagator::fRnrCluster2Ds
Bool_t fRnrCluster2Ds
Definition: REveTrackPropagator.hxx:203
ROOT::Experimental::REveTrackPropagator::GetRnrPTBMarkers
Bool_t GetRnrPTBMarkers() const
Definition: REveTrackPropagator.hxx:328
ROOT::Experimental::REveTrackPropagator::Helix_t::fCos
Double_t fCos
Definition: REveTrackPropagator.hxx:147
TGeant4Unit::s
static constexpr double s
Definition: TGeant4SystemOfUnits.h:168
ROOT::Experimental::REveTrackPropagator::SetMaxOrbs
void SetMaxOrbs(Double_t x)
Set maximum number of orbits and rebuild tracks.
Definition: REveTrackPropagator.cxx:1041
Int_t
int Int_t
Definition: RtypesCore.h:45
ROOT::Experimental::REveTrackPropagator::SetMaxAng
void SetMaxAng(Double_t x)
Set maximum step angle and rebuild tracks.
Definition: REveTrackPropagator.cxx:1069
ROOT::Experimental::REveTrackPropagator::CheckReferenceCount
void CheckReferenceCount(const std::string &from="<unknown>") override
Check reference count - virtual from REveElement.
Definition: REveTrackPropagator.cxx:264
ROOT::Experimental::REveTrackPropagator::LineToBounds
void LineToBounds(REveVectorD &p)
Propagate neutral particle with momentum p to bounds.
Definition: REveTrackPropagator.cxx:787
ROOT::Experimental::REveTrackPropagator::SetDelta
void SetDelta(Double_t x)
Set maximum error and rebuild tracks.
Definition: REveTrackPropagator.cxx:1087
TGeant4Unit::ps
static constexpr double ps
Definition: TGeant4SystemOfUnits.h:171
ROOT::Experimental::REveTrackPropagator::fLastPoints
std::vector< REveVector4D > fLastPoints
Definition: REveTrackPropagator.hxx:217
x
Double_t x[n]
Definition: legend1.C:17
ROOT::Experimental::REveTrackPropagator::InitTrack
void InitTrack(const REveVectorD &v, Int_t charge)
Initialize internal data-members for given particle parameters.
Definition: REveTrackPropagator.cxx:287
ROOT::Experimental::REveTrackPropagator::Helix_t
Definition: REveTrackPropagator.hxx:132
ROOT::Experimental::REveTrackPropagator::GoToBounds
virtual void GoToBounds(REveVectorD &p)
Propagate particle to bounds.
Definition: REveTrackPropagator.cxx:405
ROOT::Experimental::REveMagField::~REveMagField
virtual ~REveMagField()
Definition: REveTrackPropagator.hxx:52
ROOT::Experimental::REveTrackPropagator::fProjTrackBreaking
UChar_t fProjTrackBreaking
Definition: REveTrackPropagator.hxx:209
TMath::Abs
Short_t Abs(Short_t d)
Definition: TMathBase.h:120
ROOT::Experimental::REveTrackPropagator::GetProjTrackBreaking
UChar_t GetProjTrackBreaking() const
Definition: REveTrackPropagator.hxx:327
ROOT::Experimental::REveElement
Definition: REveElement.hxx:79
ROOT::Experimental::REveVectorT< Float_t >
ROOT::Experimental::REveMagFieldDuo::REveMagFieldDuo
REveMagFieldDuo(Double_t r, Double_t bIn, Double_t bOut)
Definition: REveTrackPropagator.hxx:99
Bool_t
bool Bool_t
Definition: RtypesCore.h:63
ROOT::Experimental::REveTrackPropagator::Helix_t::fLam
Double_t fLam
Definition: REveTrackPropagator.hxx:144
ROOT::Experimental::REveMagFieldDuo::GetMaxFieldMag
Double_t GetMaxFieldMag() const override
Definition: REveTrackPropagator.hxx:106
ROOT::Experimental::REveTrackPropagator::SetFitDaughters
void SetFitDaughters(Bool_t x)
Set daughter creation point fitting and rebuild tracks.
Definition: REveTrackPropagator.cxx:1096
ROOT::Experimental::REveTrackPropagator::HelixIntersectPlane
Bool_t HelixIntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect)
Intersect helix with a plane.
Definition: REveTrackPropagator.cxx:822
v
@ v
Definition: rootcling_impl.cxx:3635
b
#define b(i)
Definition: RSha256.hxx:118
ROOT::Experimental::REveTrackPropagator::SetMaxStep
void SetMaxStep(Double_t x)
Set maximum step-size and rebuild tracks.
Definition: REveTrackPropagator.cxx:1078
ROOT::Experimental::REveVectorT::Sub
REveVectorT & Sub(const REveVectorT &a, const REveVectorT &b)
Definition: REveVector.hxx:182
ROOT::Experimental::REveTrackPropagator::SetFitDecay
void SetFitDecay(Bool_t x)
Set decay fitting and rebuild tracks.
Definition: REveTrackPropagator.cxx:1114
ROOT::Experimental::REveTrackPropagator::GetMaxOrbs
Double_t GetMaxOrbs() const
Definition: REveTrackPropagator.hxx:310
bool
ROOT::Experimental::REveTrackPropagator::GetLastPoints
const std::vector< REveVector4D > & GetLastPoints() const
Definition: REveTrackPropagator.hxx:334
ROOT::Experimental::REveTrackPropagator::GetCurrentPoint
Int_t GetCurrentPoint() const
Get index of current point on track.
Definition: REveTrackPropagator.cxx:321
ROOT::Experimental::REveTrackPropagator::Helix_t::fValid
Bool_t fValid
Definition: REveTrackPropagator.hxx:139
ROOT::Experimental::REveVectorT::Mag
TT Mag() const
Definition: REveVector.hxx:97
ROOT::Experimental::REveMagFieldConst::fB
REveVectorD fB
Definition: REveTrackPropagator.hxx:76
ROOT::Experimental::REveTrackPropagator::SetMaxZ
void SetMaxZ(Double_t x)
Set maximum z and rebuild tracks.
Definition: REveTrackPropagator.cxx:1032
ROOT::Experimental::REveTrackPropagator::fOwnMagFiledObj
Bool_t fOwnMagFiledObj
Definition: REveTrackPropagator.hxx:184
ROOT::Experimental::REveTrackPropagator::LoopToBounds
void LoopToBounds(REveVectorD &p)
Propagate charged particle with momentum p to bounds.
Definition: REveTrackPropagator.cxx:510
ROOT::Experimental::REveTrackPropagator::ClosestPointFromVertexToLineSegment
void ClosestPointFromVertexToLineSegment(const REveVectorD &v, const REveVectorD &s, const REveVectorD &r, Double_t rMagInv, REveVectorD &c)
Get closest point from given vertex v to line segment defined with s and r.
Definition: REveTrackPropagator.cxx:918
ROOT::Experimental::REveTrackPropagator::SetFitLineSegments
void SetFitLineSegments(Bool_t x)
Set line segment fitting and rebuild tracks.
Definition: REveTrackPropagator.cxx:1123
ROOT::Experimental::REveMagFieldConst::REveMagFieldConst
REveMagFieldConst(Double_t x, Double_t y, Double_t z)
Definition: REveTrackPropagator.hxx:79
ROOT::Experimental::REveTrackPropagator::fgDefMagField
static Double_t fgDefMagField
Definition: REveTrackPropagator.hxx:338
ROOT::Experimental::REveTrackPropagator::Helix_t::fSin
Double_t fSin
Definition: REveTrackPropagator.hxx:147
ROOT::Experimental::REveTrackPropagator::SetMaxR
void SetMaxR(Double_t x)
Set maximum radius and rebuild tracks.
Definition: REveTrackPropagator.cxx:1023
ROOT::Experimental::REveTrackPropagator::Helix_t::fE3
REveVectorD fE3
Definition: REveTrackPropagator.hxx:154
ROOT::Experimental::REveTrackPropagator::StepRungeKutta
void StepRungeKutta(Double_t step, Double_t *vect, Double_t *vout)
Wrapper to step with method RungeKutta.
Definition: REveTrackPropagator.cxx:1204
ROOT::Experimental::REveTrackPropagator::SetRnrDecay
void SetRnrDecay(Bool_t x)
Set decay rendering and rebuild tracks.
Definition: REveTrackPropagator.cxx:1141
ROOT::Experimental::REveTrackPropagator::fPMAtt
TMarker fPMAtt
Definition: REveTrackPropagator.hxx:205
ROOT::Experimental::REveTrackPropagator::LoopToLineSegment
Bool_t LoopToLineSegment(const REveVectorD &s, const REveVectorD &r, REveVectorD &p)
Propagate charged particle with momentum p to line segment with point s and vector r to the second po...
Definition: REveTrackPropagator.cxx:650
ROOT::Experimental::REveTrackPropagator::ClosestPointBetweenLines
Bool_t ClosestPointBetweenLines(const REveVectorD &, const REveVectorD &, const REveVectorD &, const REveVectorD &, REveVectorD &out)
Get closest point on line defined with vector p0 and u.
Definition: REveTrackPropagator.cxx:945
ROOT::Experimental::REveTrackPropagator::Step
void Step(const REveVector4D &v, const REveVectorD &p, REveVector4D &vOut, REveVectorD &pOut)
Wrapper to step helix.
Definition: REveTrackPropagator.cxx:473
ROOT::Experimental::REveTrackPropagator::Helix_t::fE1
REveVectorD fE1
Definition: REveTrackPropagator.hxx:154
ROOT::Experimental::REveTrackPropagator::Helix_t::fDelta
Double_t fDelta
Definition: REveTrackPropagator.hxx:136
ROOT::Experimental::REveMagFieldDuo
REveMagFieldDuo Interface to magnetic field with two different values depending on radius.
Definition: REveTrackPropagator.hxx:91
ROOT::Experimental::REveTrackPropagator::GetRnrReferences
Bool_t GetRnrReferences() const
Definition: REveTrackPropagator.hxx:318
ROOT::Experimental::REveMagFieldDuo::GetField
REveVectorD GetField(Double_t x, Double_t y, Double_t) const override
Definition: REveTrackPropagator.hxx:112
ROOT::Experimental::REveMagField
REveMagField Abstract interface to magnetic field.
Definition: REveTrackPropagator.hxx:45
ROOT::Experimental::REveTrackPropagator::GetFitCluster2Ds
Bool_t GetFitCluster2Ds() const
Definition: REveTrackPropagator.hxx:324
ROOT::Experimental::REveMagField::GetMaxFieldMag
virtual Double_t GetMaxFieldMag() const =0
TMarker.h
REveElement.hxx
ROOT::Experimental::REveTrackPropagator::SetEditPathMarks
void SetEditPathMarks(Bool_t x)
Definition: REveTrackPropagator.hxx:289
ROOT::Experimental::REveTrackPropagator::PointOverVertex
Bool_t PointOverVertex(const REveVector4D &v0, const REveVector4D &v, Double_t *p=0)
Definition: REveTrackPropagator.hxx:353
ROOT::Experimental::REveTrackPropagator::OnZeroRefCount
void OnZeroRefCount() override
Virtual from REveRefBackPtr - track reference count has reached zero.
Definition: REveTrackPropagator.cxx:255
ROOT::Experimental::REveTrackPropagator::~REveTrackPropagator
virtual ~REveTrackPropagator()
Destructor.
Definition: REveTrackPropagator.cxx:244
ROOT::Experimental::REveVectorT::fZ
TT fZ
Definition: REveVector.hxx:31
ROOT::Experimental::REveTrackPropagator::Helix_t::fPtMag
Double_t fPtMag
Definition: REveTrackPropagator.hxx:156
ROOT::Experimental::REveTrackPropagator::Helix_t::fPl
REveVectorD fPl
Definition: REveTrackPropagator.hxx:155
ROOT::Experimental::REveTrackPropagator::PrintMagField
void PrintMagField(Double_t x, Double_t y, Double_t z) const
Definition: REveTrackPropagator.cxx:1015
ROOT::Experimental::REveTrackPropagator::SetFitCluster2Ds
void SetFitCluster2Ds(Bool_t x)
Set 2D-cluster fitting and rebuild tracks.
Definition: REveTrackPropagator.cxx:1132
ROOT::Experimental::REveVectorD
REveVectorT< Double_t > REveVectorD
Definition: REveVector.hxx:121
kFALSE
const Bool_t kFALSE
Definition: RtypesCore.h:92
ROOT::Experimental::REveVectorT::fY
TT fY
Definition: REveVector.hxx:31
ROOT::Experimental::REveTrackPropagator::EProjTrackBreaking_e
EProjTrackBreaking_e
Definition: REveTrackPropagator.hxx:129
ROOT::Experimental::REveTrackPropagator::RefPTBAtt
TMarker & RefPTBAtt()
Definition: REveTrackPropagator.hxx:332
ROOT::Experimental::REveTrackPropagator::StampAllTracks
void StampAllTracks()
Element-change notification.
Definition: REveTrackPropagator.cxx:276
ROOT::Experimental::REveTrackPropagator::fgkB2C
static const Double_t fgkB2C
Definition: REveTrackPropagator.hxx:339
ROOT::Experimental::REveTrackPropagator::Helix_t::UpdateHelix
void UpdateHelix(const REveVectorD &p, const REveVectorD &b, Bool_t full_update, Bool_t enforce_max_step)
Update helix parameters.
Definition: REveTrackPropagator.cxx:89
ROOT::Experimental::REvePointSet
Definition: REvePointSet.hxx:46
ROOT::Experimental::REveRefBackPtr
REveRefBackPtr reference-count with back pointers.
Definition: REveUtil.hxx:129
ROOT::Experimental::REveTrackPropagator::GetEditPathMarks
Bool_t GetEditPathMarks() const
Definition: REveTrackPropagator.hxx:316
y
Double_t y[n]
Definition: legend1.C:17
ROOT::Experimental::REveTrackPropagator::Update
void Update(const REveVector4D &v, const REveVectorD &p, Bool_t full_update=kFALSE, Bool_t enforce_max_step=kFALSE)
Update helix / B-field projection state.
Definition: REveTrackPropagator.cxx:425
ROOT::Experimental::REveTrackPropagator::GetFitDaughters
Bool_t GetFitDaughters() const
Definition: REveTrackPropagator.hxx:321
ROOT::Experimental::REveTrackPropagator::fMaxR
Double_t fMaxR
Definition: REveTrackPropagator.hxx:187
ROOT::Experimental::REveMagField::fFieldConstant
Bool_t fFieldConstant
Definition: REveTrackPropagator.hxx:48
ROOT::Experimental::REveMagField::REveMagField
REveMagField()=default
ROOT::Experimental::REveTrackPropagator::Helix_t::fPlMag
Double_t fPlMag
Definition: REveTrackPropagator.hxx:157
ROOT::Experimental::REveMagFieldDuo::~REveMagFieldDuo
virtual ~REveMagFieldDuo()
Definition: REveTrackPropagator.hxx:104
ROOT::Experimental::REveTrackPropagator::fEditPathMarks
Bool_t fEditPathMarks
Definition: REveTrackPropagator.hxx:194
ROOT::Experimental::REveTrackPropagator::fFitReferences
Bool_t fFitReferences
Definition: REveTrackPropagator.hxx:196
ROOT::Experimental::REveTrackPropagator::fgDefault
static REveTrackPropagator fgDefault
Definition: REveTrackPropagator.hxx:340
ROOT::Experimental::REveMagField::IsConst
virtual Bool_t IsConst() const
Definition: REveTrackPropagator.hxx:54
ROOT::Experimental::REveTrackPropagator::RefPMAtt
TMarker & RefPMAtt()
Definition: REveTrackPropagator.hxx:330
ROOT::Experimental::REveTrackPropagator::SetRnrFV
void SetRnrFV(Bool_t x)
Set first-vertex rendering and rebuild tracks.
Definition: REveTrackPropagator.cxx:1177
ROOT::Experimental::REveTrackPropagator::fRnrDecay
Bool_t fRnrDecay
Definition: REveTrackPropagator.hxx:202
ROOT::Experimental::REveMagFieldConst::GetField
REveVectorD GetField(Double_t, Double_t, Double_t) const override
Definition: REveTrackPropagator.hxx:83
ROOT::Experimental::REveMagFieldConst
REveMagFieldConst Interface to constant magnetic field.
Definition: REveTrackPropagator.hxx:73
ROOT::Experimental::REveTrackPropagator::operator=
REveTrackPropagator & operator=(const REveTrackPropagator &)=delete
ROOT::Experimental::REveTrackPropagator::SetStepper
void SetStepper(EStepper_e s)
Definition: REveTrackPropagator.hxx:275
ROOT::Experimental::REveTrackPropagator::SetRnrCluster2Ds
void SetRnrCluster2Ds(Bool_t x)
Set rendering of 2D-clusters and rebuild tracks.
Definition: REveTrackPropagator.cxx:1150
ROOT::Experimental::REveTrackPropagator
REveTrackPropagator Calculates path of a particle taking into account special path-marks and imposed ...
Definition: REveTrackPropagator.hxx:123
ROOT::Experimental::REveTrackPropagator::fFitDecay
Bool_t fFitDecay
Definition: REveTrackPropagator.hxx:197
ROOT::Experimental::REveTrackPropagator::kPTB_UseFirstPointPos
@ kPTB_UseFirstPointPos
Definition: REveTrackPropagator.hxx:129
ROOT::Experimental::REveTrackPropagator::GetMaxR
Double_t GetMaxR() const
Definition: REveTrackPropagator.hxx:308
ROOT::Experimental::REveTrackPropagator::fPoints
std::vector< REveVector4D > fPoints
Definition: REveTrackPropagator.hxx:216
Double_t
double Double_t
Definition: RtypesCore.h:59
ROOT::Experimental::REveTrackPropagator::Helix_t::fMaxAng
Double_t fMaxAng
Definition: REveTrackPropagator.hxx:134
ROOT::Experimental::REveTrackPropagator::GetMaxAng
Double_t GetMaxAng() const
Definition: REveTrackPropagator.hxx:312
ROOT::Experimental::REveTrackPropagator::Helix_t::fCharge
Int_t fCharge
Definition: REveTrackPropagator.hxx:133
ROOT::Experimental::REveTrackPropagator::GetRnrFV
Bool_t GetRnrFV() const
Definition: REveTrackPropagator.hxx:326
ROOT::Experimental::REveTrackPropagator::Helix_t::Helix_t
Helix_t()
Default constructor.
Definition: REveTrackPropagator.cxx:57
REveUtil.hxx
ROOT::Experimental::REveTrackPropagator::EStepper_e
EStepper_e
Definition: REveTrackPropagator.hxx:127
ROOT::Experimental::REveTrackPropagator::Helix_t::fRKStep
Double_t fRKStep
Definition: REveTrackPropagator.hxx:150
UChar_t
unsigned char UChar_t
Definition: RtypesCore.h:38
ROOT::Experimental::REveTrackPropagator::Helix_t::fPhi
Double_t fPhi
Definition: REveTrackPropagator.hxx:138
ROOT::Experimental::REveTrackPropagator::fFitCluster2Ds
Bool_t fFitCluster2Ds
Definition: REveTrackPropagator.hxx:198
ROOT::Experimental::REveTrackPropagator::GetRnrCluster2Ds
Bool_t GetRnrCluster2Ds() const
Definition: REveTrackPropagator.hxx:320
ROOT::Experimental::REveMagField::GetField
virtual REveVectorD GetField(Double_t x, Double_t y, Double_t z) const =0
ROOT::Experimental::REveTrackPropagator::fRnrReferences
Bool_t fRnrReferences
Definition: REveTrackPropagator.hxx:201
ROOT::Experimental::REveMagFieldDuo::fBOut
REveVectorD fBOut
Definition: REveTrackPropagator.hxx:95
ROOT::Experimental::REveTrackPropagator::Helix_t::Step
void Step(const REveVector4D &v, const REveVectorD &p, REveVector4D &vOut, REveVectorD &pOut)
Step helix for given momentum p from vertex v.
Definition: REveTrackPropagator.cxx:147
REveVector.hxx
ROOT::Experimental::REveMagField::PrintField
virtual void PrintField(Double_t x, Double_t y, Double_t z) const
Definition: REveTrackPropagator.hxx:56
ROOT::Experimental::REveTrackPropagator::fPTBAtt
TMarker fPTBAtt
Definition: REveTrackPropagator.hxx:211
ROOT::Experimental::REveTrackPropagator::GetRnrDaughters
Bool_t GetRnrDaughters() const
Definition: REveTrackPropagator.hxx:317
ROOT::Experimental::REveTrackPropagator::kPTB_UseLastPointPos
@ kPTB_UseLastPointPos
Definition: REveTrackPropagator.hxx:129
ROOT::Experimental::REveTrackPropagator::GoToLineSegment
virtual Bool_t GoToLineSegment(const REveVectorD &s, const REveVectorD &r, REveVectorD &p)
Propagate particle with momentum p to line with start point s and vector r to the second point.
Definition: REveTrackPropagator.cxx:362
ROOT::Experimental::REveTrackPropagator::fMaxOrbs
Double_t fMaxOrbs
Definition: REveTrackPropagator.hxx:191
TMarker
Definition: TMarker.h:22
ROOT::Experimental::REveTrackPropagator::GoToVertex
virtual Bool_t GoToVertex(REveVectorD &v, REveVectorD &p)
Propagate particle with momentum p to vertex v.
Definition: REveTrackPropagator.cxx:345
ROOT::Experimental::REveTrackPropagator::kHelix
@ kHelix
Definition: REveTrackPropagator.hxx:127
ROOT::Experimental::REveTrackPropagator::fH
Helix_t fH
Definition: REveTrackPropagator.hxx:219
ROOT::Experimental::REveTrackPropagator::GetMaxZ
Double_t GetMaxZ() const
Definition: REveTrackPropagator.hxx:309
ROOT::Experimental::REveTrackPropagator::RefFVAtt
TMarker & RefFVAtt()
Definition: REveTrackPropagator.hxx:331
ROOT::Experimental::REveTrackPropagator::SetRnrDaughters
void SetRnrDaughters(Bool_t x)
Set daughter rendering and rebuild tracks.
Definition: REveTrackPropagator.cxx:1159
ROOT::Experimental::REveTrackPropagator::fMaxZ
Double_t fMaxZ
Definition: REveTrackPropagator.hxx:188
ROOT::Experimental::REveTrackPropagator::Helix_t::fPt
REveVectorD fPt
Definition: REveTrackPropagator.hxx:155
ROOT::Experimental::REveTrackPropagator::IntersectPlane
Bool_t IntersectPlane(const REveVectorD &p, const REveVectorD &point, const REveVectorD &normal, REveVectorD &itsect)
Find intersection of currently propagated track with a plane.
Definition: REveTrackPropagator.cxx:903
ROOT::Experimental::REveTrackPropagator::fFitLineSegments
Bool_t fFitLineSegments
Definition: REveTrackPropagator.hxx:199
ROOT::Experimental::REveTrackPropagator::fStepper
EStepper_e fStepper
Definition: REveTrackPropagator.hxx:181
ROOT::Experimental::REveTrackPropagator::Helix_t::fLStep
Double_t fLStep
Definition: REveTrackPropagator.hxx:158
ROOT::Experimental::REveTrackPropagator::DistributeOffset
void DistributeOffset(const REveVectorD &off, Int_t first_point, Int_t np, REveVectorD &p)
Distribute offset between first and last point index and rotate momentum.
Definition: REveTrackPropagator.cxx:740
ROOT::Experimental::REveTrackPropagator::GetRnrDecay
Bool_t GetRnrDecay() const
Definition: REveTrackPropagator.hxx:319
ROOT
VSD Structures.
Definition: StringConv.hxx:21
ROOT::Experimental::REveTrackPropagator::fRnrPTBMarkers
Bool_t fRnrPTBMarkers
Definition: REveTrackPropagator.hxx:210
ROOT::Experimental::REveTrackPropagator::Helix_t::fMaxStep
Double_t fMaxStep
Definition: REveTrackPropagator.hxx:135
ROOT::Experimental::REveTrackPropagator::GetFitDecay
Bool_t GetFitDecay() const
Definition: REveTrackPropagator.hxx:323
ROOT::Experimental::REveTrackPropagator::Helix_t::UpdateRK
void UpdateRK(const REveVectorD &p, const REveVectorD &b)
Update helix for stepper RungeKutta.
Definition: REveTrackPropagator.cxx:137
ROOT::Experimental::REveTrackPropagator::kRungeKutta
@ kRungeKutta
Definition: REveTrackPropagator.hxx:127
ROOT::Experimental::REveTrackPropagator::ResetTrack
void ResetTrack()
Reset cache holding particle trajectory.
Definition: REveTrackPropagator.cxx:309
ROOT::Experimental::REveTrackPropagator::fFVAtt
TMarker fFVAtt
Definition: REveTrackPropagator.hxx:206
int
ROOT::Experimental::REveTrackPropagator::REveTrackPropagator
REveTrackPropagator(const REveTrackPropagator &)=delete
ROOT::Experimental::REveTrackPropagator::Helix_t::fPhiStep
Double_t fPhiStep
Definition: REveTrackPropagator.hxx:146