#include <RKPropagatorInR.h>
Public Member Functions | |
virtual Propagator * | clone () const |
virtual const MagneticField * | magneticField () const |
virtual TrajectoryStateOnSurface | propagate (const FreeTrajectoryState &, const Cylinder &) const |
virtual TrajectoryStateOnSurface | propagate (const FreeTrajectoryState &, const Plane &) const |
virtual std::pair < TrajectoryStateOnSurface, double > | propagateWithPath (const FreeTrajectoryState &, const Plane &) const |
virtual std::pair < TrajectoryStateOnSurface, double > | propagateWithPath (const FreeTrajectoryState &, const Cylinder &) const |
RKPropagatorInR (const MagVolume &vol, PropagationDirection dir=alongMomentum) | |
Private Attributes | |
const MagVolume * | theVolume |
Definition at line 7 of file RKPropagatorInR.h.
RKPropagatorInR::RKPropagatorInR | ( | const MagVolume & | vol, |
PropagationDirection | dir = alongMomentum |
||
) | [inline] |
Definition at line 10 of file RKPropagatorInR.h.
Referenced by clone().
: Propagator(dir), theVolume( &vol) {}
Propagator * RKPropagatorInR::clone | ( | void | ) | const [virtual] |
Implements Propagator.
Definition at line 73 of file RKPropagatorInR.cc.
References RKPropagatorInR().
{ return new RKPropagatorInR(*this); }
virtual const MagneticField* RKPropagatorInR::magneticField | ( | ) | const [inline, virtual] |
Implements Propagator.
Definition at line 27 of file RKPropagatorInR.h.
References theVolume.
{return theVolume;}
TrajectoryStateOnSurface RKPropagatorInR::propagate | ( | const FreeTrajectoryState & | ts, |
const Cylinder & | cyl | ||
) | const [virtual] |
Implements Propagator.
Definition at line 15 of file RKPropagatorInR.cc.
References FreeTrajectoryState::charge(), ExpressReco_HICollisions_FallBack::e, FreeTrajectoryState::momentum(), CylindricalState::parameters(), pos, FreeTrajectoryState::position(), Cylinder::radius(), ExpressReco_HICollisions_FallBack::step, theVolume, Surface::toGlobal(), and GloballyPositioned< T >::toLocal().
{ //typedef RK4PreciseSolver<double,5> Solver; typedef RKAdaptiveSolver<double,RKOne4OrderStep, 5> Solver; //typedef RKAdaptiveSolver<Scalar,RKOneCashKarpStep, 5> Solver; typedef double Scalar; typedef Solver::Vector RKVector; GlobalPoint pos( ts.position()); GlobalVector mom( ts.momentum()); LocalPoint startpos = cyl.toLocal(pos); LocalVector startmom = cyl.toLocal(mom); CylindricalState startState( startpos, startmom, ts.charge()); RKVector start = startState.parameters(); RKLocalFieldProvider localField( *theVolume, cyl); CylindricalLorentzForce<double,5> deriv(localField); RKCylindricalDistance<double,5> dist; double eps = 1.e-5; Solver solver; try { Scalar step = cyl.radius() - startState.rho(); RKVector rkresult = solver( startState.rho(), start, step, deriv, dist, eps); CylindricalState endState( cyl.radius(), rkresult, startState.prSign()); return TrajectoryStateOnSurface( GlobalTrajectoryParameters( cyl.toGlobal( endState.position()), cyl.toGlobal( endState.momentum()), TrackCharge(endState.charge()), theVolume), cyl); } catch (CylindricalLorentzForceException& e) { // the propagation failed due to momentum almost parallel to the plane. // This does not mean the propagation is impossible, but it should be done // in a different parametrization (e.g. s) return TrajectoryStateOnSurface(); } }
TrajectoryStateOnSurface RKPropagatorInR::propagate | ( | const FreeTrajectoryState & | , |
const Plane & | |||
) | const [virtual] |
Implements Propagator.
Definition at line 56 of file RKPropagatorInR.cc.
{ return TrajectoryStateOnSurface(); }
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInR::propagateWithPath | ( | const FreeTrajectoryState & | , |
const Plane & | |||
) | const [virtual] |
Implements Propagator.
Definition at line 62 of file RKPropagatorInR.cc.
{
return std::pair< TrajectoryStateOnSurface, double>();
}
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInR::propagateWithPath | ( | const FreeTrajectoryState & | , |
const Cylinder & | |||
) | const [virtual] |
Implements Propagator.
Definition at line 68 of file RKPropagatorInR.cc.
{
return std::pair< TrajectoryStateOnSurface, double>();
}
const MagVolume* RKPropagatorInR::theVolume [private] |
Definition at line 31 of file RKPropagatorInR.h.
Referenced by magneticField(), and propagate().