CMS 3D CMS Logo

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

#include <RKPropagatorInS.h>

Inheritance diagram for RKPropagatorInS:
Propagator

Public Member Functions

Propagatorclone () const override
 
const MagneticFieldmagneticField () const override
 
 RKPropagatorInS (const MagVolume &vol, PropagationDirection dir=alongMomentum, double tolerance=5.e-5)
 
 ~RKPropagatorInS () override
 
- Public Member Functions inherited from Propagator
template<typename STA , typename SUR >
TrajectoryStateOnSurface propagate (STA const &state, SUR const &surface) const
 
virtual FreeTrajectoryState propagate (const FreeTrajectoryState &ftsStart, const GlobalPoint &pDest) const final
 
virtual FreeTrajectoryState propagate (const FreeTrajectoryState &ftsStart, const GlobalPoint &pDest1, const GlobalPoint &pDest2) const final
 
virtual FreeTrajectoryState propagate (const FreeTrajectoryState &ftsStart, const reco::BeamSpot &beamSpot) const final
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &, const Surface &) const final
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &tsos, const Surface &sur) const final
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &tsos, const Plane &sur) const
 
virtual std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &tsos, const Cylinder &sur) const
 
virtual std::pair
< FreeTrajectoryState, double > 
propagateWithPath (const FreeTrajectoryState &ftsStart, const GlobalPoint &pDest) const
 
virtual std::pair
< FreeTrajectoryState, double > 
propagateWithPath (const FreeTrajectoryState &ftsStart, const GlobalPoint &pDest1, const GlobalPoint &pDest2) const
 Propagate to PCA to a line (given by 2 points) given a starting point. More...
 
virtual std::pair
< FreeTrajectoryState, double > 
propagateWithPath (const FreeTrajectoryState &ftsStart, const reco::BeamSpot &beamSpot) const
 Propagate to PCA to a line (given by beamSpot position and slope) given a starting point. More...
 
virtual PropagationDirection propagationDirection () const final
 
 Propagator (PropagationDirection dir=alongMomentum)
 
virtual bool setMaxDirectionChange (float phiMax)
 
virtual void setPropagationDirection (PropagationDirection dir)
 
virtual ~Propagator ()
 

Private Types

typedef std::pair
< TrajectoryStateOnSurface,
double > 
TsosWP
 

Private Member Functions

RKLocalFieldProvider fieldProvider () const
 
RKLocalFieldProvider fieldProvider (const Cylinder &cyl) const
 
GlobalVector globalMomentum (const Basic3DVector< float > &mom) const
 
GlobalPoint globalPosition (const Basic3DVector< float > &pos) const
 
GlobalTrajectoryParameters gtpFromLocal (const Basic3DVector< float > &lpos, const Basic3DVector< float > &lmom, TrackCharge ch, const Surface &surf) const
 
GlobalTrajectoryParameters gtpFromVolumeLocal (const CartesianStateAdaptor &state, TrackCharge charge) const
 
PropagationDirection invertDirection (PropagationDirection dir) const
 
GlobalParametersWithPath propagateParametersOnCylinder (const FreeTrajectoryState &ts, const Cylinder &cyl) const
 
GlobalParametersWithPath propagateParametersOnPlane (const FreeTrajectoryState &ts, const Plane &plane) const
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &, const Plane &) const override
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &, const Cylinder &) const override
 
Basic3DVector< double > rkMomentum (const GlobalVector &mom) const
 
Basic3DVector< double > rkPosition (const GlobalPoint &pos) const
 

Private Attributes

double theTolerance
 
const MagVolumetheVolume
 

Detailed Description

Definition at line 19 of file RKPropagatorInS.h.

Member Typedef Documentation

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

Definition at line 46 of file RKPropagatorInS.h.

Constructor & Destructor Documentation

RKPropagatorInS::RKPropagatorInS ( const MagVolume vol,
PropagationDirection  dir = alongMomentum,
double  tolerance = 5.e-5 
)
inlineexplicit

Definition at line 25 of file RKPropagatorInS.h.

Referenced by clone().

Propagator(PropagationDirection dir=alongMomentum)
Definition: Propagator.h:46
const double tolerance
const MagVolume * theVolume
RKPropagatorInS::~RKPropagatorInS ( )
inlineoverride

Definition at line 28 of file RKPropagatorInS.h.

28 {}

Member Function Documentation

Propagator * RKPropagatorInS::clone ( void  ) const
overridevirtual

Implements Propagator.

Definition at line 304 of file RKPropagatorInS.cc.

References RKPropagatorInS().

304 { return new RKPropagatorInS(*this); }
RKPropagatorInS(const MagVolume &vol, PropagationDirection dir=alongMomentum, double tolerance=5.e-5)
RKLocalFieldProvider RKPropagatorInS::fieldProvider ( ) const
private

Definition at line 313 of file RKPropagatorInS.cc.

References theVolume.

Referenced by propagateParametersOnCylinder(), and propagateParametersOnPlane().

RKLocalFieldProvider RKPropagatorInS::fieldProvider ( const Cylinder cyl) const
private

Definition at line 315 of file RKPropagatorInS.cc.

References theVolume.

315  {
316  return RKLocalFieldProvider(*theVolume, cyl);
317 }
const MagVolume * theVolume
GlobalVector RKPropagatorInS::globalMomentum ( const Basic3DVector< float > &  mom) const
private

Definition at line 346 of file RKPropagatorInS.cc.

References theVolume, and GloballyPositioned< T >::toGlobal().

Referenced by gtpFromVolumeLocal().

348 {
349  if (theVolume != nullptr)
350  return theVolume->toGlobal(LocalVector(mom));
351  else
352  return GlobalVector(mom);
353 }
Local3DVector LocalVector
Definition: LocalVector.h:12
const MagVolume * theVolume
GlobalPoint toGlobal(const LocalPoint &lp) const
Global3DVector GlobalVector
Definition: GlobalVector.h:10
GlobalPoint RKPropagatorInS::globalPosition ( const Basic3DVector< float > &  pos) const
private

Definition at line 339 of file RKPropagatorInS.cc.

References theVolume, and GloballyPositioned< T >::toGlobal().

Referenced by gtpFromVolumeLocal(), and propagateParametersOnPlane().

339  {
340  if (theVolume != nullptr)
341  return theVolume->toGlobal(LocalPoint(pos));
342  else
343  return GlobalPoint(pos);
344 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const MagVolume * theVolume
GlobalPoint toGlobal(const LocalPoint &lp) const
GlobalTrajectoryParameters RKPropagatorInS::gtpFromLocal ( const Basic3DVector< float > &  lpos,
const Basic3DVector< float > &  lmom,
TrackCharge  ch,
const Surface surf 
) const
private

Definition at line 306 of file RKPropagatorInS.cc.

References theVolume, and Surface::toGlobal().

Referenced by propagateParametersOnCylinder().

309  {
310  return GlobalTrajectoryParameters(surf.toGlobal(LocalPoint(lpos)), surf.toGlobal(LocalVector(lmom)), ch, theVolume);
311 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
Local3DVector LocalVector
Definition: LocalVector.h:12
const MagVolume * theVolume
GlobalTrajectoryParameters RKPropagatorInS::gtpFromVolumeLocal ( const CartesianStateAdaptor state,
TrackCharge  charge 
) const
private

Definition at line 355 of file RKPropagatorInS.cc.

References globalMomentum(), globalPosition(), CartesianStateAdaptor::momentum(), CartesianStateAdaptor::position(), and theVolume.

Referenced by propagateParametersOnPlane().

356  {
359 }
GlobalPoint globalPosition(const Basic3DVector< float > &pos) const
const Vector3D & momentum() const
const MagVolume * theVolume
GlobalVector globalMomentum(const Basic3DVector< float > &mom) const
const Vector3D & position() const
PropagationDirection RKPropagatorInS::invertDirection ( PropagationDirection  dir) const
private
const MagneticField* RKPropagatorInS::magneticField ( ) const
inlineoverridevirtual

Implements Propagator.

Definition at line 43 of file RKPropagatorInS.h.

References theVolume.

43 { return theVolume; }
const MagVolume * theVolume
GlobalParametersWithPath RKPropagatorInS::propagateParametersOnCylinder ( const FreeTrajectoryState ts,
const Cylinder cyl 
) const
private

Definition at line 186 of file RKPropagatorInS.cc.

References funct::abs(), FreeTrajectoryState::charge(), alignCSCRings::e, gpuVertexFinder::eps, fieldProvider(), gtpFromLocal(), invertDirection(), LIKELY, LogDebug, CartesianStateAdaptor::momentum(), FreeTrajectoryState::momentum(), fed_dqm_sourceclient-live_cfg::path, StraightLineCylinderCrossing::pathLength(), StraightLineBarrelCylinderCrossing::pathLength(), Basic3DVector< T >::perp(), perp(), CartesianStateAdaptor::position(), StraightLineBarrelCylinderCrossing::position(), GloballyPositioned< T >::position(), FreeTrajectoryState::position(), Propagator::propagationDirection(), Cylinder::radius(), rho, CartesianStateAdaptor::rkstate(), alignCSCRings::s, command_line::start, theTolerance, theVolume, GloballyPositioned< T >::toLocal(), FreeTrajectoryState::transverseCurvature(), UNLIKELY, x, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and Basic3DVector< T >::z().

Referenced by propagateWithPath().

187  {
189  typedef Solver::Vector RKVector;
190 
191  const GlobalPoint& sp = cyl.position();
192  if UNLIKELY (sp.x() != 0. || sp.y() != 0.) {
193  throw PropagationException("Cannot propagate to an arbitrary cylinder");
194  }
195 
196  GlobalPoint gpos(ts.position());
197  GlobalVector gmom(ts.momentum());
198  LocalPoint pos(cyl.toLocal(gpos));
199  LocalVector mom(cyl.toLocal(gmom));
200  double startR = cyl.radius() - pos.perp();
201 
202  // LogDebug("RKPropagatorInS") << "RKPropagatorInS: starting from FTS " << ts ;
203 
204  // (transverse) curvature
205  double rho = ts.transverseCurvature();
206  //
207  // Straight line approximation? |rho|<1.e-10 equivalent to ~ 1um
208  // difference in transversal position at 10m.
209  //
210  if UNLIKELY (fabs(rho) < 1.e-10) {
211  //
212  // Instantiate auxiliary object for finding intersection.
213  // Frame-independant point and vector are created explicitely to
214  // avoid confusing gcc (refuses to compile with temporary objects
215  // in the constructor).
216  //
217 
218  StraightLineBarrelCylinderCrossing cylCrossing(gpos, gmom, propagationDirection());
219 
220  //
221  // get solution
222  //
223  std::pair<bool, double> propResult = cylCrossing.pathLength(cyl);
224  if LIKELY (propResult.first && theVolume != nullptr) {
225  double s = propResult.second;
226  // point (reconverted to GlobalPoint)
227  GlobalPoint x(cylCrossing.position(s));
228  GlobalTrajectoryParameters res(x, gmom, ts.charge(), theVolume);
229  LogDebug("RKPropagatorInS") << "Straight line propagation to cylinder succeeded !!";
230  return GlobalParametersWithPath(res, s);
231  }
232 
233  //do someting
234  edm::LogError("RKPropagatorInS") << "Straight line propagation to cylinder failed !!";
235  return GlobalParametersWithPath();
236  }
237 
239  // StraightLineCylinderCrossing pathLength( pos, mom, propagationDirection());
240  CartesianLorentzForce deriv(field, ts.charge());
241 
242  RKCartesianDistance dist;
243  double eps = theTolerance;
244  Solver solver;
245  double stot = 0;
246  PropagationDirection currentDirection = propagationDirection();
247 
248  RKVector start(CartesianStateAdaptor::rkstate(pos.basicVector(), mom.basicVector()));
249  int safeGuard = 0;
250  while (safeGuard++ < 100) {
251  CartesianStateAdaptor startState(start);
252  StraightLineCylinderCrossing pathLength(
253  LocalPoint(startState.position()), LocalVector(startState.momentum()), currentDirection, eps);
254 
255  std::pair<bool, double> path = pathLength.pathLength(cyl);
256  if UNLIKELY (!path.first) {
257  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Path length calculation to cylinder failed!"
258  << "Radius " << cyl.radius() << " pos.perp() "
259  << LocalPoint(startState.position()).perp();
260  return GlobalParametersWithPath();
261  }
262 
263  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Path lenght to cylinder is " << path.second << " from point (R,z) "
264  << startState.position().perp() << ", " << startState.position().z() << " to R "
265  << cyl.radius();
266 
267  double sstep = path.second;
268  if UNLIKELY (std::abs(sstep) < eps) {
269  LogDebug("RKPropagatorInS") << "accuracy not reached, but pathLength calculation says we are there! "
270  << path.second;
271 
272  GlobalTrajectoryParameters res(gtpFromLocal(startState.position(), startState.momentum(), ts.charge(), cyl));
273  return GlobalParametersWithPath(res, stot);
274  }
275 
276  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Solving for " << sstep << " current distance to cylinder is "
277  << startR;
278 
279  RKVector rkresult = solver(0, start, sstep, deriv, dist, eps);
280  stot += sstep;
281  CartesianStateAdaptor cur(rkresult);
282  double remainingR = cyl.radius() - cur.position().perp();
283 
284  if (fabs(remainingR) < eps) {
285  LogDebug("RKPropagatorInS") << "Accuracy reached! " << remainingR;
286  GlobalTrajectoryParameters res(gtpFromLocal(cur.position(), cur.momentum(), ts.charge(), cyl));
287  return GlobalParametersWithPath(res, stot);
288  }
289 
290  start = rkresult;
291  if (remainingR * startR > 0) {
292  LogDebug("RKPropagatorInS") << "Accuracy not reached yet, trying in same direction again " << remainingR;
293  } else {
294  LogDebug("RKPropagatorInS") << "Accuracy not reached yet, trying in opposite direction " << remainingR;
295  currentDirection = invertDirection(currentDirection);
296  }
297  startR = remainingR;
298  }
299 
300  edm::LogError("FailedPropagation") << " too many iterations trying to reach cylinder ";
301  return GlobalParametersWithPath();
302 }
Local3DVector LocalVector
Definition: LocalVector.h:12
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
WorkSpace int float eps
ROOT::Math::Plane3D::Vector Vector
Definition: EcalHitMaker.cc:29
RKLocalFieldProvider fieldProvider() const
T y() const
Definition: PV3DBase.h:60
#define LIKELY(x)
Definition: Likely.h:20
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
PropagationDirection
TrackCharge charge() const
Log< level::Error, false > LogError
Estimator of the distance between two state vectors, e.g. for convergence test.
Scalar radius() const
Radius of the cylinder.
Definition: Cylinder.h:64
PropagationDirection invertDirection(PropagationDirection dir) const
LocalPoint toLocal(const GlobalPoint &gp) const
GlobalTrajectoryParameters gtpFromLocal(const Basic3DVector< float > &lpos, const Basic3DVector< float > &lmom, TrackCharge ch, const Surface &surf) const
Derivative calculation for the 6D cartesian case.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const MagVolume * theVolume
Common base class.
GlobalVector momentum() const
GlobalPoint position() const
double transverseCurvature() const
T perp() const
Magnitude of transverse component.
#define UNLIKELY(x)
Definition: Likely.h:21
static RKSmallVector< double, 6 > rkstate(const Vector3D &pos, const Vector3D &mom)
T x() const
Definition: PV3DBase.h:59
const PositionType & position() const
#define LogDebug(id)
GlobalParametersWithPath RKPropagatorInS::propagateParametersOnPlane ( const FreeTrajectoryState ts,
const Plane plane 
) const
private

Definition at line 51 of file RKPropagatorInS.cc.

References funct::abs(), PV3DBase< T, PVType, FrameType >::basicVector(), FreeTrajectoryState::charge(), cross(), DeadROC_duringRun::dir, alignCSCRings::e, gpuVertexFinder::eps, fieldProvider(), RKLocalFieldProvider::frame(), globalPosition(), gtpFromVolumeLocal(), RKLocalFieldProvider::inTesla(), invertDirection(), LIKELY, Plane::localZ(), LogDebug, CartesianStateAdaptor::momentum(), FreeTrajectoryState::momentum(), fed_dqm_sourceclient-live_cfg::path, StraightLinePlaneCrossing::pathLength(), CartesianStateAdaptor::position(), GloballyPositioned< T >::position(), StraightLinePlaneCrossing::position(), FreeTrajectoryState::position(), Propagator::propagationDirection(), rho, rkMomentum(), rkPosition(), CartesianStateAdaptor::rkstate(), alignCSCRings::s, command_line::start, theTolerance, theVolume, GloballyPositioned< T >::toGlobal(), GloballyPositioned< T >::toLocal(), FrameChanger::transformPlane(), FreeTrajectoryState::transverseCurvature(), UNLIKELY, and x.

Referenced by propagateWithPath().

52  {
53  GlobalPoint gpos(ts.position());
54  GlobalVector gmom(ts.momentum());
55  double startZ = plane.localZ(gpos);
56  // (transverse) curvature
57  double rho = ts.transverseCurvature();
58  //
59  // Straight line approximation? |rho|<1.e-10 equivalent to ~ 1um
60  // difference in transversal position at 10m.
61  //
62  if UNLIKELY (fabs(rho) < 1.e-10) {
63  //
64  // Instantiate auxiliary object for finding intersection.
65  // Frame-independant point and vector are created explicitely to
66  // avoid confusing gcc (refuses to compile with temporary objects
67  // in the constructor).
68  //
69  LogDebug("RKPropagatorInS") << " startZ = " << startZ;
70 
71  if UNLIKELY (fabs(startZ) < 1e-5) {
72  LogDebug("RKPropagatorInS") << "Propagation is not performed: state is already on final surface.";
73  GlobalTrajectoryParameters res(gpos, gmom, ts.charge(), theVolume);
74  return GlobalParametersWithPath(res, 0.0);
75  }
76 
79  StraightLinePlaneCrossing planeCrossing(pos, dir, propagationDirection());
80  //
81  // get solution
82  //
83  std::pair<bool, double> propResult = planeCrossing.pathLength(plane);
84  if LIKELY (propResult.first && theVolume != nullptr) {
85  double s = propResult.second;
86  // point (reconverted to GlobalPoint)
87  GlobalPoint x(planeCrossing.position(s));
88  GlobalTrajectoryParameters res(x, gmom, ts.charge(), theVolume);
89  return GlobalParametersWithPath(res, s);
90  }
91  //do someting
92  LogDebug("RKPropagatorInS") << "Straight line propgation to plane failed !!";
93  return GlobalParametersWithPath();
94  }
95 
96 #ifdef EDM_ML_DEBUG
97  if (theVolume != 0) {
98  LogDebug("RKPropagatorInS") << "RKPropagatorInS: starting prop to plane in volume with pos "
99  << theVolume->position() << " Z axis " << theVolume->toGlobal(LocalVector(0, 0, 1));
100 
101  LogDebug("RKPropagatorInS") << "The starting position is " << ts.position() << " (global) "
102  << theVolume->toLocal(ts.position()) << " (local) ";
103 
104  FrameChanger changer;
105  auto localPlane = changer.transformPlane(plane, *theVolume);
106  LogDebug("RKPropagatorInS") << "The plane position is " << plane.position() << " (global) " << localPlane.position()
107  << " (local) ";
108 
109  LogDebug("RKPropagatorInS") << "The initial distance to plane is " << plane.localZ(ts.position());
110 
112  std::pair<bool, double> res3 = cross.pathLength(plane);
113  LogDebug("RKPropagatorInS") << "straight line distance " << res3.first << " " << res3.second;
114  }
115 #endif
116 
118  typedef Solver::Vector RKVector;
119 
121  PathToPlane2Order pathLength(field, &field.frame());
122  CartesianLorentzForce deriv(field, ts.charge());
123 
124  RKCartesianDistance dist;
125  double eps = theTolerance;
126  Solver solver;
127  double stot = 0;
128  PropagationDirection currentDirection = propagationDirection();
129 
130  // in magVolume frame
132  int safeGuard = 0;
133  while (safeGuard++ < 100) {
134  CartesianStateAdaptor startState(start);
135 
136  std::pair<bool, double> path =
137  pathLength(plane, startState.position(), startState.momentum(), (double)ts.charge(), currentDirection);
138  if UNLIKELY (!path.first) {
139  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Path length calculation to plane failed!"
140  << "...distance to plane " << plane.localZ(globalPosition(startState.position()))
141  << "...Local starting position in volume " << startState.position()
142  << "...Magnetic field " << field.inTesla(startState.position());
143 
144  return GlobalParametersWithPath();
145  }
146 
147  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Path lenght to plane is " << path.second;
148 
149  double sstep = path.second;
150  if UNLIKELY (std::abs(sstep) < eps) {
151  LogDebug("RKPropagatorInS") << "On-surface accuracy not reached, but pathLength calculation says we are there! "
152  << "path " << path.second << " distance to plane is " << startZ;
154  return GlobalParametersWithPath(res, stot);
155  }
156 
157  LogDebug("RKPropagatorInS") << "RKPropagatorInS: Solving for " << sstep << " current distance to plane is "
158  << startZ;
159 
160  RKVector rkresult = solver(0, start, sstep, deriv, dist, eps);
161  stot += sstep;
162  CartesianStateAdaptor cur(rkresult);
163  double remainingZ = plane.localZ(globalPosition(cur.position()));
164 
165  if (fabs(remainingZ) < eps) {
166  LogDebug("RKPropagatorInS") << "On-surface accuracy reached! " << remainingZ;
168  return GlobalParametersWithPath(res, stot);
169  }
170 
171  start = rkresult;
172 
173  if (remainingZ * startZ > 0) {
174  LogDebug("RKPropagatorInS") << "Accuracy not reached yet, trying in same direction again " << remainingZ;
175  } else {
176  LogDebug("RKPropagatorInS") << "Accuracy not reached yet, trying in opposite direction " << remainingZ;
177  currentDirection = invertDirection(currentDirection);
178  }
179  startZ = remainingZ;
180  }
181 
182  edm::LogError("FailedPropagation") << " too many iterations trying to reach plane ";
183  return GlobalParametersWithPath();
184 }
Local3DVector LocalVector
Definition: LocalVector.h:12
GlobalTrajectoryParameters gtpFromVolumeLocal(const CartesianStateAdaptor &state, TrackCharge charge) const
WorkSpace int float eps
ROOT::Math::Plane3D::Vector Vector
Definition: EcalHitMaker.cc:29
RKLocalFieldProvider fieldProvider() const
GlobalPoint globalPosition(const Basic3DVector< float > &pos) const
float localZ(const GlobalPoint &gp) const
Definition: Plane.h:45
#define LIKELY(x)
Definition: Likely.h:20
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
PropagationDirection
TrackCharge charge() const
Log< level::Error, false > LogError
Basic3DVector< double > rkMomentum(const GlobalVector &mom) const
Estimator of the distance between two state vectors, e.g. for convergence test.
PropagationDirection invertDirection(PropagationDirection dir) const
LocalPoint toLocal(const GlobalPoint &gp) const
Derivative calculation for the 6D cartesian case.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const MagVolume * theVolume
GlobalVector momentum() const
GlobalPoint toGlobal(const LocalPoint &lp) const
GlobalPoint position() const
static Plane transformPlane(const Plane &plane, const GloballyPositioned< T > &frame)
Definition: FrameChanger.h:14
double transverseCurvature() const
#define UNLIKELY(x)
Definition: Likely.h:21
static RKSmallVector< double, 6 > rkstate(const Vector3D &pos, const Vector3D &mom)
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53
const PositionType & position() const
Basic3DVector< double > rkPosition(const GlobalPoint &pos) const
Basic3DVector cross(const Basic3DVector &v) const
Vector product, or &quot;cross&quot; product, with a vector of same type.
#define LogDebug(id)
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInS::propagateWithPath ( const FreeTrajectoryState fts,
const Plane plane 
) const
overrideprivatevirtual

Implements Propagator.

Definition at line 25 of file RKPropagatorInS.cc.

References SurfaceSideDefinition::afterSurface, alongMomentum, analyticalErrorPropagation(), SurfaceSideDefinition::beforeSurface, runTauDisplay::gp, GlobalParametersWithPath::parameters(), propagateParametersOnPlane(), Propagator::propagationDirection(), GlobalParametersWithPath::s(), and UNLIKELY.

26  {
28  if UNLIKELY (!gp)
30 
31  SurfaceSideDefinition::SurfaceSide side =
33  ? SurfaceSideDefinition::beforeSurface
34  : SurfaceSideDefinition::afterSurface;
35  return analyticalErrorPropagation(fts, plane, side, gp.parameters(), gp.s());
36 }
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
std::pair< TrajectoryStateOnSurface, double > analyticalErrorPropagation(const FreeTrajectoryState &startingState, const Surface &surface, SurfaceSideDefinition::SurfaceSide side, const GlobalTrajectoryParameters &destParameters, const double &s)
std::pair< TrajectoryStateOnSurface, double > TsosWP
GlobalParametersWithPath propagateParametersOnPlane(const FreeTrajectoryState &ts, const Plane &plane) const
#define UNLIKELY(x)
Definition: Likely.h:21
std::pair< TrajectoryStateOnSurface, double > RKPropagatorInS::propagateWithPath ( const FreeTrajectoryState fts,
const Cylinder cyl 
) const
overrideprivatevirtual

Implements Propagator.

Definition at line 38 of file RKPropagatorInS.cc.

References SurfaceSideDefinition::afterSurface, alongMomentum, analyticalErrorPropagation(), SurfaceSideDefinition::beforeSurface, runTauDisplay::gp, GlobalParametersWithPath::parameters(), propagateParametersOnCylinder(), Propagator::propagationDirection(), GlobalParametersWithPath::s(), and UNLIKELY.

39  {
41  if UNLIKELY (!gp)
43 
44  SurfaceSideDefinition::SurfaceSide side =
46  ? SurfaceSideDefinition::beforeSurface
47  : SurfaceSideDefinition::afterSurface;
48  return analyticalErrorPropagation(fts, cyl, side, gp.parameters(), gp.s());
49 }
GlobalParametersWithPath propagateParametersOnCylinder(const FreeTrajectoryState &ts, const Cylinder &cyl) const
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
std::pair< TrajectoryStateOnSurface, double > analyticalErrorPropagation(const FreeTrajectoryState &startingState, const Surface &surface, SurfaceSideDefinition::SurfaceSide side, const GlobalTrajectoryParameters &destParameters, const double &s)
std::pair< TrajectoryStateOnSurface, double > TsosWP
#define UNLIKELY(x)
Definition: Likely.h:21
Basic3DVector< double > RKPropagatorInS::rkMomentum ( const GlobalVector mom) const
private

Definition at line 332 of file RKPropagatorInS.cc.

References PV3DBase< T, PVType, FrameType >::basicVector(), theVolume, and GloballyPositioned< T >::toLocal().

Referenced by propagateParametersOnPlane().

332  {
333  if (theVolume != nullptr)
334  return theVolume->toLocal(mom).basicVector();
335  else
336  return mom.basicVector();
337 }
LocalPoint toLocal(const GlobalPoint &gp) const
const MagVolume * theVolume
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53
Basic3DVector< double > RKPropagatorInS::rkPosition ( const GlobalPoint pos) const
private

Definition at line 325 of file RKPropagatorInS.cc.

References PV3DBase< T, PVType, FrameType >::basicVector(), theVolume, and GloballyPositioned< T >::toLocal().

Referenced by propagateParametersOnPlane().

325  {
326  if (theVolume != nullptr)
327  return theVolume->toLocal(pos).basicVector();
328  else
329  return pos.basicVector();
330 }
LocalPoint toLocal(const GlobalPoint &gp) const
const MagVolume * theVolume
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:53

Member Data Documentation

double RKPropagatorInS::theTolerance
private

Definition at line 49 of file RKPropagatorInS.h.

Referenced by propagateParametersOnCylinder(), and propagateParametersOnPlane().

const MagVolume* RKPropagatorInS::theVolume
private