Go to the documentation of this file. 1 #ifndef SteppingHelixPropagator_SteppingHelixPropagator_h
2 #define SteppingHelixPropagator_SteppingHelixPropagator_h
26 #include "CLHEP/Matrix/SymMatrix.h"
27 #include "CLHEP/Matrix/Matrix.h"
28 #include "CLHEP/Vector/ThreeVector.h"
39 typedef CLHEP::Hep3Vector
Point;
89 const Plane& pDest)
const override;
93 const Cylinder& cDest)
const override;
186 const double pars[6],
231 const double pars[6],
235 double fastSkipDist = 1e12)
const;
243 double fastSkipDist = 1e12,
244 bool expectNewMagVolume =
false,
245 double maxStep = 1e12)
const;
251 double fastSkipDist = 1e12)
const;
257 typedef std::pair<TrajectoryStateOnSurface, double>
TsosPP;
258 typedef std::pair<FreeTrajectoryState, double>
FtsPP;
SteppingHelixPropagator * clone() const override
SteppingHelixStateInfo::VolumeBounds MatBounds
void setEndcapShiftsInZPosNeg(double valPos, double valNeg)
set shifts in Z for endcap pieces (includes EE, HE, ME, YE)
void setReturnTangentPlane(bool val)
flag to return tangent plane for non-plane input
void initStateArraySHPSpecific(StateArray &svBuf, bool flagsOnly) const
(Internals) set defaults needed for states used inside propagate methods
std::pair< FreeTrajectoryState, double > FtsPP
void setIState(const SteppingHelixStateInfo &sStart, StateArray &svBuff, int &nPoints) const
(Internals) Init starting point
const MagneticField * field_
void setUseTuningForL2Speed(bool 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
void setNoErrorPropagation(bool noErrorPropagation)
Force no error propagation.
void setUseMagVolumes(bool val)
Switch to using MagneticField Volumes .. as in VolumeBasedMagneticField.
SteppingHelixStateInfo::Result Result
void setDebug(bool debug)
Switch debug printouts (to cout) .. very verbose.
SteppingHelixPropagator()
Constructors.
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
SteppingHelixStateInfo StateInfo
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
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
void setVBFPointer(const VolumeBasedMagneticField *val)
bool applyRadX0Correction_
~SteppingHelixPropagator() override
Destructor.
static const int MAX_STEPS
bool useTuningForL2Speed_
std::pair< TrajectoryStateOnSurface, double > TsosPP
bool isYokeVolume(const MagVolume *vol) const
check if it's a yoke/iron based on this MagVol internals
void setRep(SteppingHelixPropagator::Basis &rep, const SteppingHelixPropagator::Vector &tau) const
Set/compute basis vectors for local coordinates at current step (called by incrementState)
bool useInTeslaFromMagField_
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
void applyRadX0Correction(bool applyRadX0Correction)
void setSendLogWarning(bool val)
flag to send LogWarning on failures
std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &ftsStart, const Plane &pDest) const override
const VolumeBasedMagneticField * vbField_
void loadState(SteppingHelixPropagator::StateInfo &svCurrent, const SteppingHelixPropagator::Vector &p3, const SteppingHelixPropagator::Point &r3, int charge, PropagationDirection dir, const AlgebraicSymMatrix55 &covCurv) const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
void setMaterialMode(bool noMaterial)
Switch for material effects mode: no material effects if true.
void setUseInTeslaFromMagField(bool val)
force getting field value from MagneticField, not the geometric one
Result refToMagVolume(const SteppingHelixPropagator::StateInfo &sv, PropagationDirection dir, double &dist, double &tanDist, double fastSkipDist=1e12, bool expectNewMagVolume=false, double maxStep=1e12) const
Result refToMatVolume(const SteppingHelixPropagator::StateInfo &sv, PropagationDirection dir, double &dist, double &tanDist, double fastSkipDist=1e12) const
StateInfo StateArray[MAX_POINTS+1]
static const int MAX_POINTS
const MagneticField * magneticField() const override
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
const AlgebraicSymMatrix55 unit55_
void setUseIsYokeFlag(bool val)
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void setUseMatVolumes(bool val)
Switch to using Material Volumes .. internally defined for now.
int cIndex_(int ind) const
(Internals) circular index for array of transients