1 #ifndef SteppingHelixPropagator_SteppingHelixPropagator_h
2 #define SteppingHelixPropagator_SteppingHelixPropagator_h
30 #include "CLHEP/Matrix/SymMatrix.h"
31 #include "CLHEP/Matrix/Matrix.h"
32 #include "CLHEP/Vector/ThreeVector.h"
44 typedef CLHEP::Hep3Vector
Point;
97 virtual std::pair<TrajectoryStateOnSurface, double>
101 virtual std::pair<TrajectoryStateOnSurface, double>
104 virtual std::pair<FreeTrajectoryState, double>
107 virtual std::pair<FreeTrajectoryState, double>
111 virtual std::pair<FreeTrajectoryState, double>
200 const double pars[6],
double epsilon = 1
e-3)
const;
216 double dS,
double dX0,
231 double& dEdXPrime,
double& radX0,
MatBounds& rzLims)
const;
238 const double pars[6],
240 double fastSkipDist = 1e12)
const;
246 double& dist,
double& tanDist,
247 double fastSkipDist = 1e12,
bool expectNewMagVolume =
false,
double maxStep = 1e12)
const;
251 double& dist,
double& tanDist,
252 double fastSkipDist = 1e12)
const;
259 typedef std::pair<TrajectoryStateOnSurface, double>
TsosPP;
260 typedef std::pair<FreeTrajectoryState, double>
FtsPP;
StateInfo StateArray[MAX_POINTS+1]
void setUseTuningForL2Speed(bool val)
virtual FreeTrajectoryState propagate(const FreeTrajectoryState &ftsStart, const GlobalPoint &pDest) const final
void setDebug(bool debug)
Switch debug printouts (to cout) .. very verbose.
void setVBFPointer(const VolumeBasedMagneticField *val)
Result refToDest(DestType dest, const SteppingHelixPropagator::StateInfo &sv, const double pars[6], double &dist, double &tanDist, PropagationDirection &refDirection, double fastSkipDist=1e12) const
(Internals) determine distance and direction from the current position to the plane ...
bool applyRadX0Correction_
bool isYokeVolume(const MagVolume *vol) const
check if it's a yoke/iron based on this MagVol internals
virtual ~SteppingHelixPropagator()
Destructor.
static const int MAX_STEPS
SteppingHelixStateInfo::VolumeBounds MatBounds
SteppingHelixStateInfo StateInfo
std::pair< TrajectoryStateOnSurface, double > TsosPP
int cIndex_(int ind) const
(Internals) circular index for array of transients
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
double getDeDx(const SteppingHelixPropagator::StateInfo &sv, double &dEdXPrime, double &radX0, MatBounds &rzLims) const
estimate average (in fact smth. close to MPV and median) energy loss per unit path length ...
std::pair< FreeTrajectoryState, double > FtsPP
Result refToMatVolume(const SteppingHelixPropagator::StateInfo &sv, PropagationDirection dir, double &dist, double &tanDist, double fastSkipDist=1e12) const
bool useInTeslaFromMagField_
void loadState(SteppingHelixPropagator::StateInfo &svCurrent, const SteppingHelixPropagator::Vector &p3, const SteppingHelixPropagator::Point &r3, int charge, PropagationDirection dir, const AlgebraicSymMatrix55 &covCurv) const
void setUseMagVolumes(bool val)
Switch to using MagneticField Volumes .. as in VolumeBasedMagneticField.
void initStateArraySHPSpecific(StateArray &svBuf, bool flagsOnly) const
(Internals) set defaults needed for states used inside propagate methods
SteppingHelixStateInfo::Result Result
void applyRadX0Correction(bool applyRadX0Correction)
SteppingHelixPropagator()
Constructors.
const VolumeBasedMagneticField * vbField_
void propagate(const SteppingHelixStateInfo &ftsStart, const Surface &sDest, SteppingHelixStateInfo &out) const
Propagate to Plane given a starting point.
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
static const int MAX_POINTS
bool useTuningForL2Speed_
virtual const MagneticField * magneticField() const override
bool makeAtomStep(SteppingHelixPropagator::StateInfo &svCurrent, SteppingHelixPropagator::StateInfo &svNext, double dS, PropagationDirection dir, SteppingHelixPropagator::Fancy fancy) const
main stepping function: compute next state vector after a step of length dS
Result refToMagVolume(const SteppingHelixPropagator::StateInfo &sv, PropagationDirection dir, double &dist, double &tanDist, double fastSkipDist=1e12, bool expectNewMagVolume=false, double maxStep=1e12) const
void setUseMatVolumes(bool val)
Switch to using Material Volumes .. internally defined for now.
const AlgebraicSymMatrix55 unit55_
void setRep(SteppingHelixPropagator::Basis &rep, const SteppingHelixPropagator::Vector &tau) const
Set/compute basis vectors for local coordinates at current step (called by incrementState) ...
void setUseIsYokeFlag(bool val)
void setIState(const SteppingHelixStateInfo &sStart, StateArray &svBuff, int &nPoints) const
(Internals) Init starting point
void setReturnTangentPlane(bool val)
flag to return tangent plane for non-plane input
void setSendLogWarning(bool val)
flag to send LogWarning on failures
void setUseInTeslaFromMagField(bool val)
force getting field value from MagneticField, not the geometric one
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &ftsStart, const Plane &pDest) const override
void getNextState(const SteppingHelixPropagator::StateInfo &svPrevious, SteppingHelixPropagator::StateInfo &svNext, double dP, const SteppingHelixPropagator::Vector &tau, const SteppingHelixPropagator::Vector &drVec, double dS, double dX0, const AlgebraicMatrix55 &dCovCurv) const
virtual SteppingHelixPropagator * clone() const override
const MagneticField * field_
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
void setEndcapShiftsInZPosNeg(double valPos, double valNeg)
set shifts in Z for endcap pieces (includes EE, HE, ME, YE)
void setMaterialMode(bool noMaterial)
Switch for material effects mode: no material effects if true.
void setNoErrorPropagation(bool noErrorPropagation)
Force no error propagation.