CMS 3D CMS Logo

RKPropagatorInR Class Reference

#include <TrackPropagation/RungeKutta/interface/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 Cylinder &) const
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &, const Plane &) 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().

00010                                                                                    : 
00011     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().

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]

Implements Propagator.

Definition at line 68 of file RKPropagatorInR.cc.

00069 {
00070     return std::pair< TrajectoryStateOnSurface, double>();
00071 }

std::pair< TrajectoryStateOnSurface, double > RKPropagatorInR::propagateWithPath ( const FreeTrajectoryState ,
const Plane  
) const [virtual]

Implements Propagator.

Definition at line 62 of file RKPropagatorInR.cc.

00063 {
00064     return std::pair< TrajectoryStateOnSurface, double>();
00065 }


Member Data Documentation

const MagVolume* RKPropagatorInR::theVolume [private]

Definition at line 31 of file RKPropagatorInR.h.

Referenced by magneticField(), and propagate().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:30:48 2009 for CMSSW by  doxygen 1.5.4