CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
AnalyticalPropagator Class Reference

#include <AnalyticalPropagator.h>

Inheritance diagram for AnalyticalPropagator:
Propagator

Public Member Functions

 AnalyticalPropagator (const MagneticField *field, PropagationDirection dir=alongMomentum, float maxDPhi=1.6)
 
virtual AnalyticalPropagatorclone () const
 
TrajectoryStateOnSurface propagate (const FreeTrajectoryState &fts, const Plane &plane) const
 propagation to plane More...
 
TrajectoryStateOnSurface propagate (const FreeTrajectoryState &fts, const Cylinder &cylinder) const
 propagation to cylinder More...
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &fts, const Plane &plane) const
 propagation to plane with path length More...
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &fts, const Cylinder &cylinder) const
 propagation to cylinder with path length More...
 
virtual bool setMaxDirectionChange (float phiMax)
 
void setMaxRelativeChangeInBz (const float maxDBz)
 
 ~AnalyticalPropagator ()
 
- Public Member Functions inherited from Propagator
virtual TrajectoryStateOnSurface propagate (const FreeTrajectoryState &, const Surface &) const
 
virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface &, const Surface &) const
 
virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface &, const Plane &) const
 
virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface &, const Cylinder &) const
 
virtual FreeTrajectoryState propagate (const FreeTrajectoryState &, const reco::BeamSpot &) const
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &, const Surface &) const
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &, const Surface &) const
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &, const Plane &) const
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &, const Cylinder &) const
 
virtual std::pair
< FreeTrajectoryState, double > 
propagateWithPath (const FreeTrajectoryState &, const GlobalPoint &, const GlobalPoint &) const
 
virtual PropagationDirection propagationDirection () const
 
 Propagator (PropagationDirection dir=alongMomentum)
 
virtual void setPropagationDirection (PropagationDirection dir) const
 
virtual ~Propagator ()
 

Private Types

typedef std::pair
< TrajectoryStateOnSurface,
double > 
TsosWP
 

Private Member Functions

virtual const MagneticFieldmagneticField () const
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagatedStateWithPath (const FreeTrajectoryState &fts, const Surface &surface, const GlobalTrajectoryParameters &gtp, const double &s) const
 propagation of errors (if needed) and generation of a new TSOS More...
 
bool propagateParametersOnCylinder (const FreeTrajectoryState &fts, const Cylinder &cylinder, GlobalPoint &x, GlobalVector &p, double &s) const
 parameter propagation to cylinder (returns position, momentum and path length) More...
 
bool propagateParametersOnPlane (const FreeTrajectoryState &fts, const Plane &plane, GlobalPoint &x, GlobalVector &p, double &s) const
 parameter propagation to plane (returns position, momentum and path length) More...
 
bool propagateWithHelixCrossing (HelixPlaneCrossing &, const Plane &, const float, GlobalPoint &, GlobalVector &, double &s) const
 helix parameter propagation to a plane using HelixPlaneCrossing More...
 
bool propagateWithLineCrossing (const GlobalPoint &, const GlobalVector &, const Plane &, GlobalPoint &, double &) const
 straight line parameter propagation to a plane More...
 
bool propagateWithLineCrossing (const GlobalPoint &, const GlobalVector &, const Cylinder &, GlobalPoint &, double &) const
 straight line parameter propagation to a cylinder More...
 

Private Attributes

const MagneticFieldtheField
 
float theMaxDBzRatio
 
float theMaxDPhi2
 

Detailed Description

(Mostly) analytical helix propagation to cylindrical or planar surfaces. Based on GtfGeometricalPropagator with successive replacement of components (currently: propagation to arbitrary plane).

Definition at line 22 of file AnalyticalPropagator.h.

Member Typedef Documentation

typedef std::pair<TrajectoryStateOnSurface,double> AnalyticalPropagator::TsosWP
private

Definition at line 125 of file AnalyticalPropagator.h.

Constructor & Destructor Documentation

AnalyticalPropagator::AnalyticalPropagator ( const MagneticField field,
PropagationDirection  dir = alongMomentum,
float  maxDPhi = 1.6 
)
inline

Definition at line 26 of file AnalyticalPropagator.h.

Referenced by clone().

28  :
29  Propagator(dir),
31  theMaxDBzRatio(0.5),
32  theField(field) {}
Propagator(PropagationDirection dir=alongMomentum)
Definition: Propagator.h:41
const MagneticField * theField
dbl *** dir
Definition: mlp_gen.cc:35
AnalyticalPropagator::~AnalyticalPropagator ( )
inline

Definition at line 34 of file AnalyticalPropagator.h.

34 {}

Member Function Documentation

virtual AnalyticalPropagator* AnalyticalPropagator::clone ( void  ) const
inlinevirtual

Implements Propagator.

Definition at line 73 of file AnalyticalPropagator.h.

References AnalyticalPropagator().

77  {
78  return new AnalyticalPropagator(*this);
79  }
AnalyticalPropagator(const MagneticField *field, PropagationDirection dir=alongMomentum, float maxDPhi=1.6)
virtual const MagneticField* AnalyticalPropagator::magneticField ( ) const
inlineprivatevirtual

Implements Propagator.

Definition at line 122 of file AnalyticalPropagator.h.

References theField.

122 {return theField;}
const MagneticField * theField
TrajectoryStateOnSurface AnalyticalPropagator::propagate ( const FreeTrajectoryState fts,
const Plane plane 
) const
inlinevirtual
TrajectoryStateOnSurface AnalyticalPropagator::propagate ( const FreeTrajectoryState fts,
const Cylinder cylinder 
) const
inlinevirtual

propagation to cylinder

Implements Propagator.

Definition at line 56 of file AnalyticalPropagator.h.

References propagateWithPath().

57  {
58  return propagateWithPath(fts,cylinder).first;
59  }
std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &fts, const Plane &plane) const
propagation to plane with path length
std::pair< TrajectoryStateOnSurface, double > AnalyticalPropagator::propagatedStateWithPath ( const FreeTrajectoryState fts,
const Surface surface,
const GlobalTrajectoryParameters gtp,
const double &  s 
) const
private

propagation of errors (if needed) and generation of a new TSOS

Definition at line 105 of file AnalyticalPropagator.cc.

References SurfaceSideDefinition::afterSurface, alongMomentum, SurfaceSideDefinition::beforeSurface, FreeTrajectoryState::curvilinearError(), FreeTrajectoryState::hasError(), AnalyticalCurvilinearJacobian::jacobian(), CurvilinearTrajectoryError::matrix(), GlobalTrajectoryParameters::momentum(), FreeTrajectoryState::parameters(), GlobalTrajectoryParameters::position(), and asciidump::s.

109 {
110  //
111  // for forward propagation: state is before surface,
112  // for backward propagation: state is after surface
113  //
116  //
117  //
118  // error propagation (if needed) and conversion to a TrajectoryStateOnSurface
119  //
120  if (fts.hasError()) {
121  //
122  // compute jacobian
123  //
124  AnalyticalCurvilinearJacobian analyticalJacobian(fts.parameters(), gtp.position(), gtp.momentum(), s);
125  const AlgebraicMatrix55 &jacobian = analyticalJacobian.jacobian();
126  CurvilinearTrajectoryError cte(ROOT::Math::Similarity(jacobian, fts.curvilinearError().matrix()));
127  return TsosWP(TrajectoryStateOnSurface(gtp,cte,surface,side),s);
128  }
129  else {
130  //
131  // return state without errors
132  //
133  return TsosWP(TrajectoryStateOnSurface(gtp,surface,side),s);
134  }
135 }
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
const GlobalTrajectoryParameters & parameters() const
const CurvilinearTrajectoryError & curvilinearError() const
virtual const AlgebraicMatrix55 & jacobian() const
const AlgebraicSymMatrix55 & matrix() const
std::pair< TrajectoryStateOnSurface, double > TsosWP
string s
Definition: asciidump.py:422
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepStd< double, 5, 5 > > AlgebraicMatrix55
bool AnalyticalPropagator::propagateParametersOnCylinder ( const FreeTrajectoryState fts,
const Cylinder cylinder,
GlobalPoint x,
GlobalVector p,
double &  s 
) const
private

parameter propagation to cylinder (returns position, momentum and path length)

Definition at line 137 of file AnalyticalPropagator.cc.

References ExpressReco_HICollisions_FallBack::e, PV3DBase< T, PVType, FrameType >::mag(), FreeTrajectoryState::momentum(), L1TEmulatorMonitor_cff::p, HelixBarrelCylinderCrossing::pathLength(), GloballyPositioned< T >::position(), FreeTrajectoryState::position(), rho, asciidump::s, FreeTrajectoryState::transverseCurvature(), Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), ExpressReco_HICollisions_FallBack::x, and PV3DBase< T, PVType, FrameType >::y().

140 {
141 
142  GlobalPoint const & sp = cylinder.position();
143  if (sp.x()!=0. || sp.y()!=0.) {
144  throw PropagationException("Cannot propagate to an arbitrary cylinder");
145  }
146  // preset output
147  x = fts.position();
148  p = fts.momentum();
149  s = 0;
150  // (transverse) curvature
151  double rho = fts.transverseCurvature();
152  //
153  // Straight line approximation? |rho|<1.e-10 equivalent to ~ 1um
154  // difference in transversal position at 10m.
155  //
156  if( fabs(rho)<1.e-10 )
157  return propagateWithLineCrossing(fts.position(),p,cylinder,x,s);
158  //
159  // Helix case
160  //
161  // check for possible intersection
162  const double tolerance = 1.e-4; // 1 micron distance
163  double rdiff = x.perp() - cylinder.radius();
164  if ( fabs(rdiff) < tolerance ) return true;
165  //
166  // Instantiate HelixBarrelCylinderCrossing and get solutions
167  //
168  HelixBarrelCylinderCrossing cylinderCrossing(fts.position(),fts.momentum(),rho,
169  propagationDirection(),cylinder);
170  if ( !cylinderCrossing.hasSolution() ) return false;
171  // path length
172  s = cylinderCrossing.pathLength();
173  // point
174  x = cylinderCrossing.position();
175  // direction (renormalised)
176  p = cylinderCrossing.direction().unit()*fts.momentum().mag();
177  return true;
178 }
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
Definition: DDAxes.h:10
T y() const
Definition: PV3DBase.h:57
bool propagateWithLineCrossing(const GlobalPoint &, const GlobalVector &, const Plane &, GlobalPoint &, double &) const
straight line parameter propagation to a plane
T mag() const
Definition: PV3DBase.h:61
Common base class.
GlobalVector momentum() const
Vector3DBase unit() const
Definition: Vector3DBase.h:57
GlobalPoint position() const
double transverseCurvature() const
string s
Definition: asciidump.py:422
T x() const
Definition: PV3DBase.h:56
const PositionType & position() const
bool AnalyticalPropagator::propagateParametersOnPlane ( const FreeTrajectoryState fts,
const Plane plane,
GlobalPoint x,
GlobalVector p,
double &  s 
) const
private

parameter propagation to plane (returns position, momentum and path length)

Definition at line 181 of file AnalyticalPropagator.cc.

References ExpressReco_HICollisions_FallBack::e, PV3DBase< T, PVType, FrameType >::mag(), FreeTrajectoryState::momentum(), L1TEmulatorMonitor_cff::p, FreeTrajectoryState::position(), rho, asciidump::s, FreeTrajectoryState::transverseCurvature(), and ExpressReco_HICollisions_FallBack::x.

186 {
187  // initialisation of position, momentum and path length
188  x = fts.position();
189  p = fts.momentum();
190  s = 0;
191  // (transverse) curvature
192  double rho = fts.transverseCurvature();
193  //
194  // Straight line approximation? |rho|<1.e-10 equivalent to ~ 1um
195  // difference in transversal position at 10m.
196  //
197  if( fabs(rho)<1.e-10 )
198  return propagateWithLineCrossing(fts.position(),p,plane,x,s);
199  //
200  // Helix case
201  //
202  GlobalVector u = plane.normalVector();
203  const double small = 1.e-6; // for orientation of planes
204  //
205  // Frame-independant point and vector are created explicitely to
206  // avoid confusing gcc (refuses to compile with temporary objects
207  // in the constructor).
208  //
211  if (fabs(u.z()) < small) {
212  // barrel plane:
213  // instantiate HelixBarrelPlaneCrossing, get vector of solutions and check for existance
214  HelixBarrelPlaneCrossingByCircle planeCrossing(helixPos,helixDir,rho,propagationDirection());
215  return propagateWithHelixCrossing(planeCrossing,plane,fts.momentum().mag(),x,p,s);
216  }
217  if (fabs(u.x()) < small && fabs(u.y()) < small) {
218  // forward plane:
219  // instantiate HelixForwardPlaneCrossing, get vector of solutions and check for existance
220  HelixForwardPlaneCrossing planeCrossing(helixPos,helixDir,rho,propagationDirection());
221  return propagateWithHelixCrossing(planeCrossing,plane,fts.momentum().mag(),x,p,s);
222  }
223  else {
224  // arbitrary plane:
225  // instantiate HelixArbitraryPlaneCrossing, get vector of solutions and check for existance
226  HelixArbitraryPlaneCrossing planeCrossing(helixPos,helixDir,rho,propagationDirection());
227  return propagateWithHelixCrossing(planeCrossing,plane,fts.momentum().mag(),x,p,s);
228  }
229 }
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
Definition: DDAxes.h:10
bool propagateWithLineCrossing(const GlobalPoint &, const GlobalVector &, const Plane &, GlobalPoint &, double &) const
straight line parameter propagation to a plane
T mag() const
Definition: PV3DBase.h:61
bool propagateWithHelixCrossing(HelixPlaneCrossing &, const Plane &, const float, GlobalPoint &, GlobalVector &, double &s) const
helix parameter propagation to a plane using HelixPlaneCrossing
GlobalVector momentum() const
GlobalPoint position() const
double transverseCurvature() const
string s
Definition: asciidump.py:422
bool AnalyticalPropagator::propagateWithHelixCrossing ( HelixPlaneCrossing planeCrossing,
const Plane plane,
const float  pmag,
GlobalPoint x,
GlobalVector p,
double &  s 
) const
private

helix parameter propagation to a plane using HelixPlaneCrossing

Definition at line 282 of file AnalyticalPropagator.cc.

References HelixPlaneCrossing::direction(), Basic3DVector< T >::mag(), HelixPlaneCrossing::pathLength(), and HelixPlaneCrossing::position().

287  {
288  // get solution
289  std::pair<bool,double> propResult = planeCrossing.pathLength(plane);
290  if ( !propResult.first ) return false;
291  s = propResult.second;
292  // point (reconverted to GlobalPoint)
293  HelixPlaneCrossing::PositionType xGen = planeCrossing.position(s);
294  x = GlobalPoint(xGen);
295  // direction (reconverted to GlobalVector, renormalised)
296  HelixPlaneCrossing::DirectionType pGen = planeCrossing.direction(s);
297  pGen *= pmag/pGen.mag();
298  p = GlobalVector(pGen);
299  //
300  return true;
301 }
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
virtual DirectionType direction(double s) const =0
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
virtual std::pair< bool, double > pathLength(const Plane &)=0
virtual PositionType position(double s) const =0
string s
Definition: asciidump.py:422
Global3DVector GlobalVector
Definition: GlobalVector.h:10
bool AnalyticalPropagator::propagateWithLineCrossing ( const GlobalPoint x0,
const GlobalVector p0,
const Plane plane,
GlobalPoint x,
double &  s 
) const
private

straight line parameter propagation to a plane

Definition at line 232 of file AnalyticalPropagator.cc.

References dir, StraightLinePlaneCrossing::pathLength(), pos, and StraightLinePlaneCrossing::position().

235  {
236  //
237  // Instantiate auxiliary object for finding intersection.
238  // Frame-independant point and vector are created explicitely to
239  // avoid confusing gcc (refuses to compile with temporary objects
240  // in the constructor).
241  //
245  //
246  // get solution
247  //
248  std::pair<bool,double> propResult = planeCrossing.pathLength(plane);
249  if ( !propResult.first ) return false;
250  s = propResult.second;
251  // point (reconverted to GlobalPoint)
252  x = GlobalPoint(planeCrossing.position(s));
253  //
254  return true;
255 }
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
string s
Definition: asciidump.py:422
dbl *** dir
Definition: mlp_gen.cc:35
bool AnalyticalPropagator::propagateWithLineCrossing ( const GlobalPoint x0,
const GlobalVector p0,
const Cylinder cylinder,
GlobalPoint x,
double &  s 
) const
private

straight line parameter propagation to a cylinder

Definition at line 258 of file AnalyticalPropagator.cc.

References StraightLineBarrelCylinderCrossing::pathLength(), and StraightLineBarrelCylinderCrossing::position().

261  {
262  //
263  // Instantiate auxiliary object for finding intersection.
264  // Frame-independant point and vector are created explicitely to
265  // avoid confusing gcc (refuses to compile with temporary objects
266  // in the constructor).
267  //
269  //
270  // get solution
271  //
272  std::pair<bool,double> propResult = cylCrossing.pathLength(cylinder);
273  if ( !propResult.first ) return false;
274  s = propResult.second;
275  // point (reconverted to GlobalPoint)
276  x = cylCrossing.position(s);
277  //
278  return true;
279 }
virtual PropagationDirection propagationDirection() const
Definition: Propagator.h:143
string s
Definition: asciidump.py:422
std::pair< TrajectoryStateOnSurface, double > AnalyticalPropagator::propagateWithPath ( const FreeTrajectoryState fts,
const Plane plane 
) const
virtual

propagation to plane with path length

Implements Propagator.

Definition at line 28 of file AnalyticalPropagator.cc.

References FreeTrajectoryState::charge(), ExpressReco_HICollisions_FallBack::e, Plane::localZ(), LogDebug, PV3DBase< T, PVType, FrameType >::mag(), PV3DBase< T, PVType, FrameType >::mag2(), FreeTrajectoryState::momentum(), L1TEmulatorMonitor_cff::p, PV3DBase< T, PVType, FrameType >::perp2(), GloballyPositioned< T >::position(), FreeTrajectoryState::position(), rho, asciidump::s, FreeTrajectoryState::transverseCurvature(), and ExpressReco_HICollisions_FallBack::x.

Referenced by ReferenceTrajectory::construct(), TrackerValidationVariables::fillHitQuantities(), propagate(), DualTrajectoryFactory::propagateExternal(), DualBzeroTrajectoryFactory::propagateExternal(), and TwoBodyDecayTrajectoryState::propagateSingleState().

30 {
31  // check curvature
32  double rho = fts.transverseCurvature();
33 
34  // propagate parameters
35  GlobalPoint x;
37  double s;
38 
39  // check if already on plane
40  const float maxDistToPlane(0.1e-4);
41  const float numericalPrecision(5.e-7);
42  float maxDz = numericalPrecision*plane.position().mag();
43  if ( fabs(plane.localZ(fts.position()))>(maxDistToPlane>maxDz?maxDistToPlane:maxDz) ) {
44  // propagate
45  bool parametersOK = this->propagateParametersOnPlane(fts, plane, x, p, s);
46  // check status and deltaPhi limit
47  float dphi2 = s*rho;
48  dphi2 = dphi2*dphi2*fts.momentum().perp2()/fts.momentum().mag2();
49  if ( !parametersOK || dphi2>theMaxDPhi2 ) return TsosWP(TrajectoryStateOnSurface(),0.);
50  }
51  else {
52  LogDebug("AnalyticalPropagator")<<"not going anywhere. Already on surface.\n"
53  <<"plane.localZ(fts.position()): "<<plane.localZ(fts.position())<<"\n"
54  <<"maxDistToPlane: "<<maxDistToPlane<<"\n"
55  <<"maxDz: "<<maxDz<<"\n"
56  <<"plane.position().mag(): "<<plane.position().mag();
57  x = fts.position();
58  p = fts.momentum();
59  s = 0.;
60  }
61  //
62  // Compute propagated state and check change in curvature
63  //
65  if ( fabs(rho)>1.e-10 && fabs((gtp.transverseCurvature()-rho)/rho)>theMaxDBzRatio )
66  return TsosWP(TrajectoryStateOnSurface(),0.);
67  //
68  // construct TrajectoryStateOnSurface
69  //
70  return propagatedStateWithPath(fts,plane,gtp,s);
71 }
#define LogDebug(id)
T mag2() const
Definition: PV3DBase.h:60
Definition: DDAxes.h:10
float localZ(const GlobalPoint &gp) const
Fast access to distance from plane for a point.
Definition: Plane.h:52
T perp2() const
Definition: PV3DBase.h:65
TrackCharge charge() const
bool propagateParametersOnPlane(const FreeTrajectoryState &fts, const Plane &plane, GlobalPoint &x, GlobalVector &p, double &s) const
parameter propagation to plane (returns position, momentum and path length)
std::pair< TrajectoryStateOnSurface, double > propagatedStateWithPath(const FreeTrajectoryState &fts, const Surface &surface, const GlobalTrajectoryParameters &gtp, const double &s) const
propagation of errors (if needed) and generation of a new TSOS
T mag() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
GlobalPoint position() const
double transverseCurvature() const
std::pair< TrajectoryStateOnSurface, double > TsosWP
const MagneticField * theField
string s
Definition: asciidump.py:422
const PositionType & position() const
std::pair< TrajectoryStateOnSurface, double > AnalyticalPropagator::propagateWithPath ( const FreeTrajectoryState fts,
const Cylinder cylinder 
) const
virtual

propagation to cylinder with path length

Implements Propagator.

Definition at line 75 of file AnalyticalPropagator.cc.

References FreeTrajectoryState::charge(), PV3DBase< T, PVType, FrameType >::mag2(), FreeTrajectoryState::momentum(), L1TEmulatorMonitor_cff::p, PV3DBase< T, PVType, FrameType >::perp2(), rho, asciidump::s, Cylinder::tangentPlane(), FreeTrajectoryState::transverseCurvature(), and ExpressReco_HICollisions_FallBack::x.

77 {
78  // check curvature
79  double rho = fts.transverseCurvature();
80 
81  // propagate parameters
82  GlobalPoint x;
84  double s = 0;
85 
86  bool parametersOK = this->propagateParametersOnCylinder(fts, cylinder, x, p, s);
87  // check status and deltaPhi limit
88  float dphi2 = s*rho;
89  dphi2 = dphi2*dphi2*fts.momentum().perp2()/fts.momentum().mag2();
90  if ( !parametersOK || dphi2>theMaxDPhi2 ) return TsosWP(TrajectoryStateOnSurface(),0.);
91  //
92  // Compute propagated state and check change in curvature
93  //
95  if ( fabs(rho)>1.e-10 && fabs((gtp.transverseCurvature()-rho)/rho)>theMaxDBzRatio )
96  return TsosWP(TrajectoryStateOnSurface(),0.);
97  //
98  // create result TSOS on TangentPlane (local parameters & errors are better defined)
99  //
100  ReferenceCountingPointer<TangentPlane> plane(cylinder.tangentPlane(x)); // need to be here until tsos is created!
101  return propagatedStateWithPath(fts,*plane,gtp,s);
102 }
T mag2() const
Definition: PV3DBase.h:60
virtual ReferenceCountingPointer< TangentPlane > tangentPlane(const GlobalPoint &) const
tangent plane to surface from global point
Definition: Cylinder.cc:23
Definition: DDAxes.h:10
T perp2() const
Definition: PV3DBase.h:65
TrackCharge charge() const
std::pair< TrajectoryStateOnSurface, double > propagatedStateWithPath(const FreeTrajectoryState &fts, const Surface &surface, const GlobalTrajectoryParameters &gtp, const double &s) const
propagation of errors (if needed) and generation of a new TSOS
GlobalVector momentum() const
bool propagateParametersOnCylinder(const FreeTrajectoryState &fts, const Cylinder &cylinder, GlobalPoint &x, GlobalVector &p, double &s) const
parameter propagation to cylinder (returns position, momentum and path length)
double transverseCurvature() const
std::pair< TrajectoryStateOnSurface, double > TsosWP
const MagneticField * theField
string s
Definition: asciidump.py:422
virtual bool AnalyticalPropagator::setMaxDirectionChange ( float  phiMax)
inlinevirtual

limitation of change in transverse direction (to avoid loops).

Reimplemented from Propagator.

Definition at line 67 of file AnalyticalPropagator.h.

References ExpressReco_HICollisions_FallBack::phiMax, and theMaxDPhi2.

void AnalyticalPropagator::setMaxRelativeChangeInBz ( const float  maxDBz)
inline

Set the maximum relative change in Bz (Bz_at_end-Bz_at_start)/Bz_at_start for a single propagation. The default is no limit. NB: this propagator assumes constant, non-zero magnetic field parallel to the z-axis!

Definition at line 85 of file AnalyticalPropagator.h.

References theMaxDBzRatio.

85  {
86  theMaxDBzRatio = maxDBz;
87  }

Member Data Documentation

const MagneticField* AnalyticalPropagator::theField
private

Definition at line 128 of file AnalyticalPropagator.h.

Referenced by magneticField().

float AnalyticalPropagator::theMaxDBzRatio
private

Definition at line 127 of file AnalyticalPropagator.h.

Referenced by setMaxRelativeChangeInBz().

float AnalyticalPropagator::theMaxDPhi2
private

Definition at line 126 of file AnalyticalPropagator.h.

Referenced by setMaxDirectionChange().