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 Member Functions | Private Attributes
SmartPropagator Class Referencefinal

#include <SmartPropagator.h>

Inheritance diagram for SmartPropagator:
Propagator

Public Member Functions

SmartPropagatorclone () const override
 Virtual constructor (using copy c'tor) More...
 
const PropagatorgetGenPropagator () const
 return the propagator used outside tracker More...
 
const PropagatorgetTkPropagator () const
 return the propagator used inside tracker More...
 
bool insideTkVol (const FreeTrajectoryState &fts) const
 true if a fts is inside tracker volume More...
 
bool insideTkVol (const Surface &surface) const
 true if a surface is inside tracker volume More...
 
bool insideTkVol (const Cylinder &cylin) const
 true if a cylinder is inside tracker volume More...
 
bool insideTkVol (const Plane &plane) const
 true if a plane is inside tracker volume More...
 
const MagneticFieldmagneticField () const override
 return the magneticField More...
 
void setPropagationDirection (PropagationDirection dir) override
 setting the direction fo both components More...
 
 SmartPropagator (const Propagator *aTkProp, const Propagator *aGenProp, const MagneticField *field, PropagationDirection dir=alongMomentum, float epsilon=5)
 Defines which propagator is used inside Tk and which outside. More...
 
 SmartPropagator (const Propagator &aTkProp, const Propagator &aGenProp, const MagneticField *field, PropagationDirection dir=alongMomentum, float epsilon=5)
 Defines which propagator is used inside Tk and which outside. More...
 
 SmartPropagator (const SmartPropagator &)
 Copy constructor. More...
 
 ~SmartPropagator () 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
< 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 ~Propagator ()
 

Private Member Functions

void initTkVolume (float epsilon)
 build the tracker volume More...
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &fts, const Plane &plane) const override
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const FreeTrajectoryState &fts, const Cylinder &cylinder) const override
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &tsos, const Plane &sur) const override
 
std::pair
< TrajectoryStateOnSurface,
double > 
propagateWithPath (const TrajectoryStateOnSurface &tsos, const Cylinder &sur) const override
 

Private Attributes

const MagneticFieldtheField
 
PropagatortheGenProp
 
PropagatortheTkProp
 
ReferenceCountingPointer
< Cylinder
theTkVolume
 

Detailed Description

A propagator which use different algorithm to propagate inside or outside tracker

Author
Stefano Lacaprara - INFN Padova author Chang Liu - Purdue University

Modification: 26-Jun-2002 SL: theTkVolume is now a static ReferenceCountingPointer<BoundCylinder> 28-Aug-2002 SL: added methods to unhide Propagator methods 29-Oct-2002 SL: fixed clone and copy constructor, and BoundCylinder are build with CylinderBuilder to enforce the referencePointer

Definition at line 34 of file SmartPropagator.h.

Constructor & Destructor Documentation

SmartPropagator::SmartPropagator ( const Propagator aTkProp,
const Propagator aGenProp,
const MagneticField field,
PropagationDirection  dir = alongMomentum,
float  epsilon = 5 
)

Defines which propagator is used inside Tk and which outside.

Definition at line 36 of file SmartPropagator.cc.

References initTkVolume().

Referenced by clone().

41  : Propagator(dir), theTkProp(aTkProp->clone()), theGenProp(aGenProp->clone()), theField(field) {
43 }
Propagator * theGenProp
void initTkVolume(float epsilon)
build the tracker volume
Propagator(PropagationDirection dir=alongMomentum)
Definition: Propagator.h:46
virtual Propagator * clone() const =0
Propagator * theTkProp
const MagneticField * theField
SmartPropagator::SmartPropagator ( const Propagator aTkProp,
const Propagator aGenProp,
const MagneticField field,
PropagationDirection  dir = alongMomentum,
float  epsilon = 5 
)

Defines which propagator is used inside Tk and which outside.

Definition at line 45 of file SmartPropagator.cc.

References initTkVolume().

50  : Propagator(dir), theTkProp(aTkProp.clone()), theGenProp(aGenProp.clone()), theField(field) {
52 }
Propagator * theGenProp
void initTkVolume(float epsilon)
build the tracker volume
Propagator(PropagationDirection dir=alongMomentum)
Definition: Propagator.h:46
virtual Propagator * clone() const =0
Propagator * theTkProp
const MagneticField * theField
SmartPropagator::SmartPropagator ( const SmartPropagator aProp)

Copy constructor.

Definition at line 54 of file SmartPropagator.cc.

References Propagator::clone(), getGenPropagator(), getTkPropagator(), theGenProp, and theTkProp.

55  : Propagator(aProp.propagationDirection()), theTkProp(nullptr), theGenProp(nullptr) {
56  if (aProp.theTkProp)
57  theTkProp = aProp.getTkPropagator()->clone();
58  if (aProp.theGenProp)
59  theTkProp = aProp.getGenPropagator()->clone();
60 
61  //SL since it's a copy constructor, then the TkVolume has been already
62  //initialized
63  // initTkVolume(epsilon);
64 }
Propagator * theGenProp
const Propagator * getTkPropagator() const
return the propagator used inside tracker
Propagator(PropagationDirection dir=alongMomentum)
Definition: Propagator.h:46
virtual Propagator * clone() const =0
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
Propagator * theTkProp
const Propagator * getGenPropagator() const
return the propagator used outside tracker
SmartPropagator::~SmartPropagator ( )
override

virtual destructor

Definition at line 67 of file SmartPropagator.cc.

References theGenProp, and theTkProp.

67  {
68  delete theTkProp;
69  delete theGenProp;
70 }
Propagator * theGenProp
Propagator * theTkProp

Member Function Documentation

SmartPropagator* SmartPropagator::clone ( void  ) const
inlineoverridevirtual

Virtual constructor (using copy c'tor)

Implements Propagator.

Definition at line 58 of file SmartPropagator.h.

References getGenPropagator(), getTkPropagator(), magneticField(), and SmartPropagator().

58  {
60  }
const Propagator * getTkPropagator() const
return the propagator used inside tracker
const MagneticField * magneticField() const override
return the magneticField
SmartPropagator(const Propagator *aTkProp, const Propagator *aGenProp, const MagneticField *field, PropagationDirection dir=alongMomentum, float epsilon=5)
Defines which propagator is used inside Tk and which outside.
const Propagator * getGenPropagator() const
return the propagator used outside tracker
const Propagator * SmartPropagator::getGenPropagator ( ) const

return the propagator used outside tracker

Definition at line 157 of file SmartPropagator.cc.

References theGenProp.

Referenced by clone(), propagateWithPath(), and SmartPropagator().

157 { return theGenProp; }
Propagator * theGenProp
const Propagator * SmartPropagator::getTkPropagator ( ) const

return the propagator used inside tracker

Definition at line 155 of file SmartPropagator.cc.

References theTkProp.

Referenced by clone(), propagateWithPath(), and SmartPropagator().

155 { return theTkProp; }
Propagator * theTkProp
void SmartPropagator::initTkVolume ( float  epsilon)
private

build the tracker volume

Definition at line 73 of file SmartPropagator.cc.

References Cylinder::build(), geometryDiff::epsilon, TrackerBounds::halfLength(), TrackerBounds::radius(), CosmicsPD_Skims::radius, makeMuonMisalignmentScenario::rot, and theTkVolume.

Referenced by SmartPropagator().

73  {
74  //
75  // fill tracker dimensions
76  //
77  float radius = TrackerBounds::radius();
78  float r_out = radius + epsilon / 2;
79  float r_in = r_out - epsilon;
80  float z_max = TrackerBounds::halfLength();
81  float z_min = -z_max;
82 
83  Surface::PositionType pos(0, 0, 0); // centered at the global origin
84  Surface::RotationType rot; // unit matrix - barrel cylinder orientation
85 
86  theTkVolume = Cylinder::build(radius, pos, rot, new SimpleCylinderBounds(r_in, r_out, z_min, z_max));
87 }
static float halfLength()
Definition: TrackerBounds.h:33
static float radius()
Definition: TrackerBounds.h:32
static CylinderPointer build(const PositionType &pos, const RotationType &rot, Scalar radius, Bounds *bounds=nullptr)
Definition: Cylinder.h:45
ReferenceCountingPointer< Cylinder > theTkVolume
bool SmartPropagator::insideTkVol ( const FreeTrajectoryState fts) const

true if a fts is inside tracker volume

Definition at line 125 of file SmartPropagator.cc.

References runTauDisplay::gp, TrackerBounds::halfLength(), PV3DBase< T, PVType, FrameType >::perp(), FreeTrajectoryState::position(), TrackerBounds::radius(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by propagateWithPath().

125  {
126  GlobalPoint gp = fts.position();
127  // LocalPoint lp = theTkVolume()->toLocal(gp);
128  // return theTkVolume()->bounds().inside(lp);
129 
130  return ((gp.perp() <= TrackerBounds::radius() + 10.) && (fabs(gp.z()) <= TrackerBounds::halfLength() + 10.));
131 }
T perp() const
Definition: PV3DBase.h:69
static float halfLength()
Definition: TrackerBounds.h:33
T z() const
Definition: PV3DBase.h:61
static float radius()
Definition: TrackerBounds.h:32
GlobalPoint position() const
bool SmartPropagator::insideTkVol ( const Surface surface) const

true if a surface is inside tracker volume

Definition at line 133 of file SmartPropagator.cc.

References runTauDisplay::gp, TrackerBounds::halfLength(), PV3DBase< T, PVType, FrameType >::perp(), GloballyPositioned< T >::position(), TrackerBounds::radius(), and PV3DBase< T, PVType, FrameType >::z().

133  {
134  const GlobalPoint& gp = surface.position();
135  // LocalPoint lp = theTkVolume()->toLocal(gp);
136 
137  // return theTkVolume()->bounds().inside(lp);
138  return ((gp.perp() <= TrackerBounds::radius() + 10.) && (fabs(gp.z()) <= TrackerBounds::halfLength() + 10.));
139 }
T perp() const
Definition: PV3DBase.h:69
static float halfLength()
Definition: TrackerBounds.h:33
T z() const
Definition: PV3DBase.h:61
static float radius()
Definition: TrackerBounds.h:32
const PositionType & position() const
bool SmartPropagator::insideTkVol ( const Cylinder cylin) const

true if a cylinder is inside tracker volume

bool SmartPropagator::insideTkVol ( const Plane plane) const

true if a plane is inside tracker volume

Definition at line 148 of file SmartPropagator.cc.

References runTauDisplay::gp, TrackerBounds::halfLength(), PV3DBase< T, PVType, FrameType >::perp(), GloballyPositioned< T >::position(), TrackerBounds::radius(), and PV3DBase< T, PVType, FrameType >::z().

148  {
149  const GlobalPoint& gp = plane.position();
150  // LocalPoint lp = theTkVolume()->toLocal(gp);
151  // return theTkVolume()->bounds().inside(lp);
152  return ((gp.perp() <= TrackerBounds::radius() + 10.) && (fabs(gp.z()) <= TrackerBounds::halfLength() + 10.));
153 }
T perp() const
Definition: PV3DBase.h:69
static float halfLength()
Definition: TrackerBounds.h:33
T z() const
Definition: PV3DBase.h:61
static float radius()
Definition: TrackerBounds.h:32
const PositionType & position() const
const MagneticField* SmartPropagator::magneticField ( ) const
inlineoverridevirtual

return the magneticField

Implements Propagator.

Definition at line 100 of file SmartPropagator.h.

References theField.

Referenced by clone().

100 { return theField; }
const MagneticField * theField
std::pair< TrajectoryStateOnSurface, double > SmartPropagator::propagateWithPath ( const FreeTrajectoryState fts,
const Plane plane 
) const
overrideprivatevirtual

Implements Propagator.

Definition at line 89 of file SmartPropagator.cc.

References getGenPropagator(), getTkPropagator(), insideTkVol(), and Propagator::propagateWithPath().

90  {
91  if (insideTkVol(fts) && insideTkVol(plane)) {
92  return getTkPropagator()->propagateWithPath(fts, plane);
93  } else {
94  return getGenPropagator()->propagateWithPath(fts, plane);
95  }
96 }
const Propagator * getTkPropagator() const
return the propagator used inside tracker
bool insideTkVol(const FreeTrajectoryState &fts) const
true if a fts is inside tracker volume
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
const Propagator * getGenPropagator() const
return the propagator used outside tracker
std::pair< TrajectoryStateOnSurface, double > SmartPropagator::propagateWithPath ( const FreeTrajectoryState fts,
const Cylinder cylinder 
) const
overrideprivatevirtual

Implements Propagator.

Definition at line 98 of file SmartPropagator.cc.

References getGenPropagator(), getTkPropagator(), insideTkVol(), and Propagator::propagateWithPath().

99  {
100  if (insideTkVol(fts) && insideTkVol(cylinder)) {
101  return getTkPropagator()->propagateWithPath(fts, cylinder);
102  } else {
103  return getGenPropagator()->propagateWithPath(fts, cylinder);
104  }
105 }
const Propagator * getTkPropagator() const
return the propagator used inside tracker
bool insideTkVol(const FreeTrajectoryState &fts) const
true if a fts is inside tracker volume
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
const Propagator * getGenPropagator() const
return the propagator used outside tracker
std::pair< TrajectoryStateOnSurface, double > SmartPropagator::propagateWithPath ( const TrajectoryStateOnSurface tsos,
const Plane sur 
) const
overrideprivatevirtual

Reimplemented from Propagator.

Definition at line 107 of file SmartPropagator.cc.

References TrajectoryStateOnSurface::freeState(), getGenPropagator(), getTkPropagator(), insideTkVol(), and Propagator::propagateWithPath().

108  {
109  if (insideTkVol(*fts.freeState()) && insideTkVol(plane)) {
110  return getTkPropagator()->propagateWithPath(fts, plane);
111  } else {
112  return getGenPropagator()->propagateWithPath(fts, plane);
113  }
114 }
const Propagator * getTkPropagator() const
return the propagator used inside tracker
bool insideTkVol(const FreeTrajectoryState &fts) const
true if a fts is inside tracker volume
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
const Propagator * getGenPropagator() const
return the propagator used outside tracker
std::pair< TrajectoryStateOnSurface, double > SmartPropagator::propagateWithPath ( const TrajectoryStateOnSurface tsos,
const Cylinder sur 
) const
overrideprivatevirtual

Reimplemented from Propagator.

Definition at line 116 of file SmartPropagator.cc.

References TrajectoryStateOnSurface::freeState(), getGenPropagator(), getTkPropagator(), insideTkVol(), and Propagator::propagateWithPath().

117  {
118  if (insideTkVol(*fts.freeState()) && insideTkVol(cylinder)) {
119  return getTkPropagator()->propagateWithPath(fts, cylinder);
120  } else {
121  return getGenPropagator()->propagateWithPath(fts, cylinder);
122  }
123 }
const Propagator * getTkPropagator() const
return the propagator used inside tracker
bool insideTkVol(const FreeTrajectoryState &fts) const
true if a fts is inside tracker volume
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
const Propagator * getGenPropagator() const
return the propagator used outside tracker
void SmartPropagator::setPropagationDirection ( PropagationDirection  dir)
inlineoverridevirtual

setting the direction fo both components

Reimplemented from Propagator.

Definition at line 63 of file SmartPropagator.h.

References Propagator::setPropagationDirection(), theGenProp, and theTkProp.

63  {
67  }
Propagator * theGenProp
virtual void setPropagationDirection(PropagationDirection dir)
Definition: Propagator.h:130
Propagator * theTkProp

Member Data Documentation

const MagneticField* SmartPropagator::theField
private

Definition at line 108 of file SmartPropagator.h.

Referenced by magneticField().

Propagator* SmartPropagator::theGenProp
private
Propagator* SmartPropagator::theTkProp
private
ReferenceCountingPointer<Cylinder> SmartPropagator::theTkVolume
private

Definition at line 109 of file SmartPropagator.h.

Referenced by initTkVolume().