public abstract class Propagator extends Object
For each of the options there are two possibilities when the destination surface is the same as the original surface. The original specification was to stay at the same position. Now there are options (XXX_MOVE) to move to the next crossing.
Two methods of propagation are provided. One specifies this option. The other does not and it is the reponsibility of the subclass to make a clear and unambiguous choice.
There are also separate propagation methods for tracks with and without error matrices. These should behave in exactly the same manner except for changes to the error matrix. The new vector may not depend on the error matrix.
The methods to propagate a track with error are implemented here using the methods without error. Typically there should be no need for subclasses to override the former.
The original track is overwritten with the new track parameters if and only if the propagation is successful. A propagation status is returned to indicate whether the propagation was was successful and, if so, the direction of propagation relative to the track's direction.
The propagation may be called repeatedly to iterate over all the crossings in either the forward or backward direction. In order to maintain this capability, a track that is already at the surface (i.e. has the same pure surface as the destination) must be propagated to a new point or the propagation is not successful. However, if the point is on but not at the surface (i.e. it is on a different type of pure surface but has coordinates lying on the destination surface, then the transformed track should be returned as a successful propagation in the requested direction.
When labeling or choosing the direction of propagation, forward should be chosen if there is an ambiguity.
This clase is abstract: derived classes provide the algorithms for propagation.
A higher level class might make use of this interface to provide an iterator over crossings. It could carry out the propagation as needed and cache the results.
The propagate methods all include an optional argument which is a pointer to a track derivative. If this pointer is not null, then its location should be filled with the derivative of the new track w.r.t. the original.
Constructor and Description |
---|
Propagator()
constructor
|
Modifier and Type | Method and Description |
---|---|
PropStat |
errDirProp(ETrack tre0,
Surface srf,
PropDir dir)
propagate a track with error in the specified direction
Typically does not need to be overridden in subclasses.
|
PropStat |
errDirProp(ETrack tre0,
Surface srf,
PropDir dir,
TrackDerivative tder)
propagate a track with error in the specified direction
|
PropStat |
errProp(ETrack tre0,
Surface srf)
propagate a track with error
Typically does not need to be overridden in subclasses.
|
PropStat |
errProp(ETrack tre0,
Surface srf,
TrackDerivative tder)
propagate a track with error
|
abstract Propagator |
newPropagator()
Clone, i.e.
|
static PropDir |
reduce(PropDir dir)
return a reduced PropDir
|
static boolean |
reduceDirection(PropDir dir)
Reduce a propagation direction.
|
static String |
typeName()
Return the type name.
|
PropStat |
vecDirProp(VTrack trv,
Surface srf,
PropDir dir)
propagate a track without error in the specified direction
Must be overriden in subclasses.
|
abstract PropStat |
vecDirProp(VTrack trv,
Surface srf,
PropDir dir,
TrackDerivative tder)
propagate a track without error in the specified direction
|
PropStat |
vecProp(VTrack trv,
Surface srf)
Propagate a track without error.
|
abstract PropStat |
vecProp(VTrack trv,
Surface srf,
TrackDerivative tder)
propagate a track without error
|
public static String typeName()
public static PropDir reduce(PropDir dir)
dir
- direction in which to propagatepublic static boolean reduceDirection(PropDir dir)
dir
- propagation directionpublic abstract Propagator newPropagator()
public PropStat vecProp(VTrack trv, Surface srf)
trv
- VTrack to propagatesrf
- Surface to which to propagatepublic abstract PropStat vecProp(VTrack trv, Surface srf, TrackDerivative tder)
trv
- VTrack to propagatesrf
- Surface to which to propagatetder
- TrackDerivative to update at srfpublic PropStat vecDirProp(VTrack trv, Surface srf, PropDir dir)
trv
- VTrack to propagatesrf
- Surface to which to propagatedir
- direction in which to propagatepublic abstract PropStat vecDirProp(VTrack trv, Surface srf, PropDir dir, TrackDerivative tder)
trv
- VTrack to propagatesrf
- Surface to which to propagatedir
- direction in which to propagatetder
- TrackDerivative to update at srfpublic PropStat errProp(ETrack tre0, Surface srf, TrackDerivative tder)
tre0
- ETrack to propagatesrf
- Surface to which to propagatetder
- TrackDerivative to update at srfpublic PropStat errProp(ETrack tre0, Surface srf)
tre0
- ETrack to propagatesrf
- Surface to which to propagatepublic PropStat errDirProp(ETrack tre0, Surface srf, PropDir dir)
tre0
- ETrack to propagatesrf
- Surface to which to propagatedir
- direction in which to propagatepublic PropStat errDirProp(ETrack tre0, Surface srf, PropDir dir, TrackDerivative tder)
tre0
- ETrack to propagatesrf
- Surface to which to propagatedir
- direction in which to propagatetder
- TrackDerivative to update at srfCopyright © 2016 Linear Collider Detector (LCD). All rights reserved.