library: libGeom #include "TGeoHelix.h" |
TGeoHelix
class description - source file - inheritance tree (.pdf)
public:
TGeoHelix()
TGeoHelix(Double_t curvature, Double_t step, Int_t charge = 1)
TGeoHelix(const TGeoHelix&)
virtual ~TGeoHelix()
static TClass* Class()
Double_t ComputeSafeStep(Double_t epsil = 1E-6) const
const Double_t* GetCurrentDirection() const
const Double_t* GetCurrentPoint() const
Double_t GetStep() const
Double_t GetTotalCurvature() const
Double_t GetXYcurvature() const
void InitDirection(Double_t dirx, Double_t diry, Double_t dirz, Bool_t is_normalized = kTRUE)
void InitDirection(Double_t* dir, Bool_t is_normalized = kTRUE)
void InitPoint(Double_t x0, Double_t y0, Double_t z0)
void InitPoint(Double_t* point)
virtual TClass* IsA() const
Bool_t IsRightHanded() const
TGeoHelix& operator=(const TGeoHelix&)
void ResetStep()
void SetCharge(Int_t charge)
void SetField(Double_t bx, Double_t by, Double_t bz, Bool_t is_normalized = kTRUE)
void SetHelixStep(Double_t hstep)
void SetXYcurvature(Double_t curvature)
virtual void ShowMembers(TMemberInspector& insp, char* parent)
void Step(Double_t step)
Double_t StepToPlane(Double_t* point, Double_t* norm)
virtual void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
void UpdateHelix()
private:
Double_t fC curvature in XY plane
Double_t fS Z step of the helix / 2*PI
Double_t fStep current step
Double_t fPhi phi angle
Double_t fPointInit[3] initial point
Double_t fDirInit[3] normalized initial direction
Double_t fPoint[3] point after a step
Double_t fDir[3] direction after a step
Double_t fB[3] normalized direction for magnetic field
Int_t fQ right/left-handed (+/- 1) - "charge"
TGeoHMatrix* fMatrix transformation of local helix frame to MARS
public:
static const TGeoHelix::EGeoHelixTypes kHelixNeedUpdate
static const TGeoHelix::EGeoHelixTypes kHelixStraigth
static const TGeoHelix::EGeoHelixTypes kHelixCircle
TGeoHelix - class representing a helix curve
A helix is a curve defined by the following equations:
x = (1/c) * COS(q*phi)
y = (1/c) * SIN(q*phi)
z = s * alfa
where:
c = 1/Rxy - curvature in XY plane
phi - phi angle
S = 2*PI*s - vertical separation between helix loops
q = +/- 1 - (+)=left-handed, (-)=right-handed
In particular, a helix describes the trajectory of a charged particle in magnetic
field. In such case, the helix is right-handed for negative particle charge.
To define a helix, one must define:
- the curvature - positive defined
- the Z step made after one full turn of the helix
- the particle charge sign
- the initial particle position and direction (force normalization to unit)
- the magnetic field direction
A helix provides:
- propagation to a given Z position (in global frame)
Double_t *point = TGeoHelix::PropagateToZ(Double_t z);
- propagation to an arbitrary plane, returning also the new point
- propagation in a geometry until the next crossed surface
- computation of the total track length along a helix
TGeoHelix()
Dummy constructor
TGeoHelix(Double_t curvature, Double_t hstep, Int_t charge)
Normal constructor
~TGeoHelix()
Destructor
Double_t ComputeSafeStep(Double_t epsil) const
Compute safe linear step that can be made such that the error
between linear-helix extrapolation is less than EPSIL.
void InitPoint(Double_t x0, Double_t y0, Double_t z0)
Initialize coordinates of a point on the helix
void InitPoint (Double_t *point)
void InitDirection(Double_t dirx, Double_t diry, Double_t dirz, Bool_t is_normalized)
Initialize particle direction (tangent on the helix in initial point)
void InitDirection(Double_t *dir, Bool_t is_normalized)
Double_t GetTotalCurvature() const
Compute helix total curvature
void SetXYcurvature(Double_t curvature)
Set XY curvature: c = 1/Rxy
void SetCharge(Int_t charge)
Positive charge means left-handed helix.
void SetField(Double_t bx, Double_t by, Double_t bz, Bool_t is_normalized)
Initialize particle direction (tangent on the helix in initial point)
void SetHelixStep(Double_t step)
Set Z step of the helix on a complete turn. Positive or null.
void ResetStep()
Reset current point/direction to initial values
void Step(Double_t step)
Make a step from current point along the helix and compute new point, direction and angle
To reach a plane/ shape boundary, one has to:
1. Compute the safety to the plane/boundary
2. Define / update a helix according local field and particle state (position, direction, charge)
3. Compute the magnetic safety (maximum distance for which the field can be considered constant)
4. Call TGeoHelix::Step() having as argument the minimum between 1. and 3.
5. Repeat from 1. until the step to be made is small enough.
6. Add to the total step the distance along a straigth line from the last point
to the plane/shape boundary
Double_t StepToPlane(Double_t *point, Double_t *norm)
Propagate initial point up to a given Z position in MARS.
void UpdateHelix()
Update the local helix matrix.
Inline Functions
const Double_t* GetCurrentPoint() const
const Double_t* GetCurrentDirection() const
Double_t GetXYcurvature() const
Double_t GetStep() const
Bool_t IsRightHanded() const
TClass* Class()
TClass* IsA() const
void ShowMembers(TMemberInspector& insp, char* parent)
void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
TGeoHelix TGeoHelix(const TGeoHelix&)
TGeoHelix& operator=(const TGeoHelix&)
Author: Andrei Gheata 28/04/04
Last update: root/geom:$Name: $:$Id: TGeoHelix.cxx,v 1.1 2004/05/26 15:11:13 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.