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

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