CMS 3D CMS Logo

Public Member Functions | Private Attributes

RKPropagatorInR Class Reference

#include <RKPropagatorInR.h>

Inheritance diagram for RKPropagatorInR:
Propagator

List of all members.

Public Member Functions

virtual Propagatorclone () const
virtual const MagneticFieldmagneticField () 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 MagVolumetheVolume

Detailed Description

Definition at line 7 of file RKPropagatorInR.h.


Constructor & Destructor Documentation

RKPropagatorInR::RKPropagatorInR ( const MagVolume vol,
PropagationDirection  dir = alongMomentum 
) [inline]

Definition at line 10 of file RKPropagatorInR.h.

Referenced by clone().

                                                                                   : 
    Propagator(dir), theVolume( &vol) {}

Member Function Documentation

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.

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>();
}

Member Data Documentation

Definition at line 31 of file RKPropagatorInR.h.

Referenced by magneticField(), and propagate().