#include <TrackPropagation/RungeKutta/interface/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 Cylinder &) const |
virtual std::pair < TrajectoryStateOnSurface, double > | propagateWithPath (const FreeTrajectoryState &, const Plane &) 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().
00010 : 00011 Propagator(dir), theVolume( &vol) {}
Propagator * RKPropagatorInR::clone | ( | void | ) | const [virtual] |
Implements Propagator.
Definition at line 73 of file RKPropagatorInR.cc.
References RKPropagatorInR().
00074 { 00075 return new RKPropagatorInR(*this); 00076 }
virtual const MagneticField* RKPropagatorInR::magneticField | ( | ) | const [inline, virtual] |
Implements Propagator.
Definition at line 27 of file RKPropagatorInR.h.
References theVolume.
00027 {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(), dist(), e, FreeTrajectoryState::momentum(), FreeTrajectoryState::position(), Cylinder::radius(), cmsRelvalreportInput::step, theVolume, Surface::toGlobal(), and GloballyPositioned< T >::toLocal().
00016 { 00017 //typedef RK4PreciseSolver<double,5> Solver; 00018 typedef RKAdaptiveSolver<double,RKOne4OrderStep, 5> Solver; 00019 //typedef RKAdaptiveSolver<Scalar,RKOneCashKarpStep, 5> Solver; 00020 typedef double Scalar; 00021 typedef Solver::Vector RKVector; 00022 00023 GlobalPoint pos( ts.position()); 00024 GlobalVector mom( ts.momentum()); 00025 00026 LocalPoint startpos = cyl.toLocal(pos); 00027 LocalVector startmom = cyl.toLocal(mom); 00028 00029 CylindricalState startState( startpos, startmom, ts.charge()); 00030 RKVector start = startState.parameters(); 00031 00032 RKLocalFieldProvider localField( *theVolume, cyl); 00033 CylindricalLorentzForce<double,5> deriv(localField); 00034 RKCylindricalDistance<double,5> dist; 00035 double eps = 1.e-5; 00036 Solver solver; 00037 try { 00038 Scalar step = cyl.radius() - startState.rho(); 00039 RKVector rkresult = solver( startState.rho(), start, step, deriv, dist, eps); 00040 CylindricalState endState( cyl.radius(), rkresult, startState.prSign()); 00041 return TrajectoryStateOnSurface( GlobalTrajectoryParameters( cyl.toGlobal( endState.position()), 00042 cyl.toGlobal( endState.momentum()), 00043 TrackCharge(endState.charge()), 00044 theVolume), 00045 cyl); 00046 } 00047 catch (CylindricalLorentzForceException& e) { 00048 // the propagation failed due to momentum almost parallel to the plane. 00049 // This does not mean the propagation is impossible, but it should be done 00050 // in a different parametrization (e.g. s) 00051 return TrajectoryStateOnSurface(); 00052 } 00053 }
TrajectoryStateOnSurface RKPropagatorInR::propagate | ( | const FreeTrajectoryState & | , | |
const Plane & | ||||
) | const [virtual] |
Implements Propagator.
Definition at line 56 of file RKPropagatorInR.cc.
00057 { 00058 return TrajectoryStateOnSurface(); 00059 }
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInR::propagateWithPath | ( | const FreeTrajectoryState & | , | |
const Cylinder & | ||||
) | const [virtual] |
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInR::propagateWithPath | ( | const FreeTrajectoryState & | , | |
const Plane & | ||||
) | const [virtual] |
const MagVolume* RKPropagatorInR::theVolume [private] |