12 #ifndef ROOT_TEveTrackPropagator
13 #define ROOT_TEveTrackPropagator
44 printf(
"v(%f, %f, %f) B(%f, %f, %f) \n", x, y, z, b.
fX, b.
fY, b.
fZ);
99 fBIn(0,0,bIn), fBOut(0,0,bOut), fR2(r*r)
107 {
return ((x*x+y*y)<fR2) ? fBIn :
fBOut; }
110 {
Double_t b1 = fBIn.
Mag(), b2 = fBOut.
Mag();
return b1 > b2 ? b1 : b2; }
359 point.
fX*point.
fX + point.
fY*point.
fY > maxRsqr;
367 static const Double_t kMinPl = 1e-5;
Double_t GetMinAng() const
Get maximum step angle.
Double_t GetMaxOrbs() const
EStepper_e GetStepper() const
Bool_t ClosestPointBetweenLines(const TEveVectorD &, const TEveVectorD &, const TEveVectorD &, const TEveVectorD &, TEveVectorD &out)
Get closest point on line defined with vector p0 and u.
void SetRnrCluster2Ds(Bool_t x)
Set rendering of 2D-clusters and rebuild tracks.
Implements constant magnetic filed that switches on given axial radius fR2 from vector fBIn to fBOut...
virtual TEveVector GetField(Float_t, Float_t, Float_t) const
Bool_t GetRnrDecay() const
Bool_t GetRnrCluster2Ds() const
Int_t GetCurrentPoint() const
Get index of current point on track.
static Double_t fgEditorMaxR
Base-class for reference-counted objects with reverse references to TEveElement objects.
ClassDef(TEveMagFieldDuo, 0)
TEveMagField * fMagFieldObj
UChar_t GetProjTrackBreaking() const
TEveVectorD GetFieldD(const TEveVectorD &v) const
virtual TEveVectorD GetFieldD(Double_t x, Double_t y, Double_t) const
void SetDelta(Double_t x)
Set maximum error and rebuild tracks.
Implements constant magnetic field, given by a vector fB.
Bool_t IntersectPlane(const TEveVectorD &p, const TEveVectorD &point, const TEveVectorD &normal, TEveVectorD &itsect)
Find intersection of currently propagated track with a plane.
TEveMagFieldConst(Double_t x, Double_t y, Double_t z)
void PrintMagField(Double_t x, Double_t y, Double_t z) const
ClassDef(TEveMagField, 0)
TT Dot(const TEveVectorT &a) const
virtual Double_t GetMaxFieldMagD() const
void SetMaxStep(Double_t x)
Set maximum step-size and rebuild tracks.
Bool_t GetFitDaughters() const
void SetMinAng(Double_t x)
Set maximum step angle and rebuild tracks.
void SetFitLineSegments(Bool_t x)
Set line segment fitting and rebuild tracks.
void SetMaxAng(Double_t x)
Set maximum step angle and rebuild tracks.
virtual TEveVectorD GetFieldD(Double_t, Double_t, Double_t) const
void LoopToBounds(TEveVectorD &p)
Propagate charged particle with momentum p to bounds.
virtual ~TEveMagFieldConst()
Double_t GetMaxStep() const
Minimal, templated four-vector.
void SetMaxR(Double_t x)
Set maximum radius and rebuild tracks.
void SetRnrReferences(Bool_t x)
Set track-reference rendering and rebuild tracks.
void SetProjTrackBreaking(UChar_t x)
Set projection break-point mode and rebuild tracks.
void SetStepper(EStepper_e s)
void ClosestPointFromVertexToLineSegment(const TEveVectorD &v, const TEveVectorD &s, const TEveVectorD &r, Double_t rMagInv, TEveVectorD &c)
Get closest point from given vertex v to line segment defined with s and r.
Bool_t LoopToLineSegment(const TEveVectorD &s, const TEveVectorD &r, TEveVectorD &p)
Propagate charged particle with momentum p to line segment with point s and vector r to the second po...
Bool_t GetFitCluster2Ds() const
static Double_t fgDefMagField
virtual Bool_t GoToLineSegment(const TEveVectorD &s, const TEveVectorD &r, TEveVectorD &p)
Propagate particle with momentum p to line with start point s and vector r to the second point...
void UpdateCommon(const TEveVectorD &p, const TEveVectorD &b)
Common update code for helix and RK propagation.
void Step(const TEveVector4D &v, const TEveVectorD &p, TEveVector4D &vOut, TEveVectorD &pOut)
Wrapper to step helix.
void SetFitDaughters(Bool_t x)
Set daughter creation point fitting and rebuild tracks.
Bool_t GetFitLineSegments() const
Double_t GetMaxAng() const
void DistributeOffset(const TEveVectorD &off, Int_t first_point, Int_t np, TEveVectorD &p)
Distribute offset between first and last point index and rotate momentum.
ClassDef(TEveMagFieldConst, 0)
virtual Bool_t IsConst() const
static Bool_t IsOutsideBounds(const TEveVectorD &point, Double_t maxRsqr, Double_t maxZ)
virtual Bool_t GoToVertex(TEveVectorD &v, TEveVectorD &p)
Propagate particle with momentum p to vertex v.
void FillPointSet(TEvePointSet *ps) const
Reset ps and populate it with points in propagation cache.
static const Double_t fgkB2C
Bool_t GetFitReferences() const
virtual void PrintField(Double_t x, Double_t y, Double_t z) const
void UpdateRK(const TEveVectorD &p, const TEveVectorD &b)
Update helix for stepper RungeKutta.
void Step(const TEveVector4D &v, const TEveVectorD &p, TEveVector4D &vOut, TEveVectorD &pOut)
Step helix for given momentum p from vertex v.
static TEveTrackPropagator fgDefault
static Double_t fgEditorMaxZ
Bool_t GetFitDecay() const
void SetRnrFV(Bool_t x)
Set first-vertex rendering and rebuild tracks.
Bool_t LoopToVertex(TEveVectorD &v, TEveVectorD &p)
Propagate charged particle with momentum p to vertex v.
Bool_t LineToVertex(TEveVectorD &v)
Propagate neutral particle to vertex v.
TEveTrackPropagator & operator=(const TEveTrackPropagator &)
Bool_t GetRnrReferences() const
void SetRnrDaughters(Bool_t x)
Set daughter rendering and rebuild tracks.
TEveTrackPropagator(const TEveTrackPropagator &)
virtual void CheckReferenceCount(const TEveException &eh="TEveElement::CheckReferenceCount ")
Check reference count - virtual from TEveElement.
Bool_t GetRnrDaughters() const
Bool_t GetEditPathMarks() const
TEvePointSet is a render-element holding a collection of 3D points with optional per-point TRef and a...
void SetMagField(Double_t b)
void SetMaxOrbs(Double_t x)
Set maximum number of orbits and rebuild tracks.
Bool_t PointOverVertex(const TEveVector4D &v0, const TEveVector4D &v, Double_t *p=0)
Double_t GetTrackLength(Int_t start_point=0, Int_t end_point=-1) const
Calculate track length from start_point to end_point.
Holding structure for a number of track rendering parameters.
void SetMaxZ(Double_t x)
Set maximum z and rebuild tracks.
const std::vector< TEveVector4D > & GetLastPoints() const
void Update(const TEveVector4D &v, const TEveVectorD &p, Bool_t full_update=kFALSE, Bool_t enforce_max_step=kFALSE)
Update helix / B-field projection state.
Bool_t HelixIntersectPlane(const TEveVectorD &p, const TEveVectorD &point, const TEveVectorD &normal, TEveVectorD &itsect)
Intersect helix with a plane.
Bool_t GetRnrPTBMarkers() const
Double_t GetDelta() const
void ResetTrack()
Reset cache holding particle trajectory.
std::vector< TEveVector4D > fLastPoints
void SetMagFieldObj(TEveMagField *field, Bool_t own_field=kTRUE)
Set constant magnetic field and rebuild tracks.
std::vector< TEveVector4D > fPoints
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
virtual Float_t GetMaxFieldMag() const
void SetEditPathMarks(Bool_t x)
void RebuildTracks()
Rebuild all tracks using this render-style.
virtual Double_t GetMaxFieldMagD() const
void SetMagField(Double_t bX, Double_t bY, Double_t bZ)
Set constant magnetic field and rebuild tracks.
TEveVectorT< Float_t > TEveVector
void UpdateHelix(const TEveVectorD &p, const TEveVectorD &b, Bool_t full_update, Bool_t enforce_max_step)
Update helix parameters.
Sub-editor for TEveTrackPropagator class.
void SetRnrDecay(Bool_t x)
Set decay rendering and rebuild tracks.
void SetFitReferences(Bool_t x)
Set track-reference fitting and rebuild tracks.
virtual void OnZeroRefCount()
Virtual from TEveRefBackPtr - track reference count has reached zero.
Helix_t()
Default constructor.
void SetFitDecay(Bool_t x)
Set decay fitting and rebuild tracks.
virtual ~TEveMagFieldDuo()
virtual void ElementChanged(Bool_t update_scenes=kTRUE, Bool_t redraw=kFALSE)
Element-change notification.
TEveVectorT & Sub(const TEveVectorT &a, const TEveVectorT &b)
Exception class thrown by TEve classes and macros.
virtual ~TEveTrackPropagator()
Destructor.
virtual TEveVectorD GetFieldD(Double_t x, Double_t y, Double_t z) const
UChar_t fProjTrackBreaking
void SetFitCluster2Ds(Bool_t x)
Set 2D-cluster fitting and rebuild tracks.
ClassDef(TEveTrackPropagator, 0)
Abstract base-class for interfacing to magnetic field needed by the TEveTrackPropagator.
void SetRnrPTBMarkers(Bool_t x)
Set projection break-point rendering and rebuild tracks.
Double_t Sqrt(Double_t x)
TEveVectorD GetMagField(Double_t x, Double_t y, Double_t z)
void StepRungeKutta(Double_t step, Double_t *vect, Double_t *vout)
Wrapper to step with method RungeKutta.
void InitTrack(const TEveVectorD &v, Int_t charge)
Initialize internal data-members for given particle parameters.
virtual void GoToBounds(TEveVectorD &p)
Propagate particle to bounds.
void LineToBounds(TEveVectorD &p)
Propagate neutral particle with momentum p to bounds.
virtual Double_t GetMaxFieldMagD() const
TEveMagFieldDuo(Double_t r, Double_t bIn, Double_t bOut)
Bool_t LineIntersectPlane(const TEveVectorD &p, const TEveVectorD &point, const TEveVectorD &normal, TEveVectorD &itsect)
Intersect line with a plane.