#include <PropagatorWithMaterial.h>
Propagation including material effects.
Propagates using a specific for the geometrical part and a MaterialEffectsUpdator to include multiple scattering and energy loss. By default material effects are included at the source in the case of forward propagation and at the destination for backward propagation. Material effects at the source can only be included when propagating from a TrajectoryStateOnSurface. Ported from ORCA.
Definition at line 25 of file PropagatorWithMaterial.h.
typedef std::pair<TrajectoryStateOnSurface,double> PropagatorWithMaterial::TsosWP [private] |
Definition at line 141 of file PropagatorWithMaterial.h.
Definition at line 101 of file PropagatorWithMaterial.h.
PropagatorWithMaterial::PropagatorWithMaterial | ( | PropagationDirection | dir, |
const float | mass, | ||
const MagneticField * | mf = 0 , |
||
const float | maxDPhi = 1.6 , |
||
bool | useRungeKutta = false , |
||
float | ptMin = -1. , |
||
bool | useOldGeoPropLogic = true |
||
) |
Constructor with PropagationDirection and mass hypothesis. Uses AnalyticalPropagator and CombinedMaterialEffectsUpdator with explicit mass hypothesis.MaxDPhi is a cut on the max change in phi during state propagation. For propagation of very low pt tracks (e.g. loopers), this cut can be loosened. If ptMin > 0, then multiple scattering calculations will take into account the uncertainty in the reconstructed track momentum, (by default neglected), but assuming that the track Pt will never fall below ptMin.
Definition at line 14 of file PropagatorWithMaterial.cc.
References AnalyticalPropagator_cfi::AnalyticalPropagator, theGeometricalPropagator, and useRungeKutta_.
Referenced by clone().
: Propagator(dir), theGeometricalPropagator(), theMEUpdator(new CombinedMaterialEffectsUpdator(mass, ptMin)), theMaterialLocation(atDestination), field(mf),useRungeKutta_(useRungeKutta) { if(useRungeKutta_) theGeometricalPropagator = DeepCopyPointerByClone<Propagator>(new RKTestPropagator(mf,dir)); else theGeometricalPropagator = DeepCopyPointerByClone<Propagator>(new AnalyticalPropagator(mf,dir,maxDPhi, useOldAnalPropLogic)); }
PropagatorWithMaterial::PropagatorWithMaterial | ( | const Propagator & | Propagator, |
const MaterialEffectsUpdator & | MEUpdator, | ||
const MagneticField * | mf = 0 , |
||
bool | useRungeKutta = false |
||
) |
Constructor with explicit propagator and material effects objects.
Definition at line 32 of file PropagatorWithMaterial.cc.
: Propagator(aPropagator.propagationDirection()), theGeometricalPropagator(aPropagator.clone()), theMEUpdator(aMEUpdator.clone()), theMaterialLocation(atDestination), field(mf),useRungeKutta_(useRungeKutta) {}
PropagatorWithMaterial::~PropagatorWithMaterial | ( | ) | [virtual] |
Definition at line 11 of file PropagatorWithMaterial.cc.
{}
virtual PropagatorWithMaterial* PropagatorWithMaterial::clone | ( | void | ) | const [inline, virtual] |
Implements Propagator.
Definition at line 125 of file PropagatorWithMaterial.h.
References PropagatorWithMaterial().
{ return new PropagatorWithMaterial(*this); }
const Propagator& PropagatorWithMaterial::geometricalPropagator | ( | ) | const [inline] |
Access to the geometrical propagator.
Definition at line 114 of file PropagatorWithMaterial.h.
References theGeometricalPropagator.
{ return *theGeometricalPropagator; }
virtual const MagneticField* PropagatorWithMaterial::magneticField | ( | ) | const [inline, virtual] |
Implements Propagator.
Definition at line 122 of file PropagatorWithMaterial.h.
References field.
Referenced by CRackTrajectoryBuilder::innerState().
{return field;}
bool PropagatorWithMaterial::materialAtSource | ( | ) | const [private] |
Inclusion of material at the source?
Definition at line 128 of file PropagatorWithMaterial.cc.
References alongMomentum, anyDirection, atDestination, atSource, Exception, fromDirection, python::rootplot::argparse::message, Propagator::propagationDirection(), and theMaterialLocation.
Referenced by propagateWithPath().
{ if ( propagationDirection()==anyDirection ) { if ( theMaterialLocation!=atDestination ) { string message("PropagatorWithMaterial: propagation direction = anyDirection is "); message += "incompatible with adding of material at source"; throw cms::Exception("TrackingTools/MaterialEffects",message); } } return theMaterialLocation==atSource || (theMaterialLocation==fromDirection&& propagationDirection()==alongMomentum); }
const MaterialEffectsUpdator& PropagatorWithMaterial::materialEffectsUpdator | ( | ) | const [inline] |
Access to the MaterialEffectsUpdator.
Definition at line 118 of file PropagatorWithMaterial.h.
References theMEUpdator.
{ return *theMEUpdator; }
virtual TrajectoryStateOnSurface PropagatorWithMaterial::propagate | ( | const FreeTrajectoryState & | fts, |
const Plane & | plane | ||
) | const [inline, virtual] |
Implements Propagator.
Definition at line 58 of file PropagatorWithMaterial.h.
References propagateWithPath().
{ // should be implemented (in case underlying propagator has an independent // implementation) return propagateWithPath(fts,plane).first; }
virtual TrajectoryStateOnSurface PropagatorWithMaterial::propagate | ( | const TrajectoryStateOnSurface & | tsos, |
const Cylinder & | cylinder | ||
) | const [inline, virtual] |
Reimplemented from Propagator.
Definition at line 72 of file PropagatorWithMaterial.h.
References propagateWithPath().
{ // should be implemented (in case underlying propagator has an independent // implementation) return propagateWithPath(tsos,cylinder).first; }
virtual TrajectoryStateOnSurface PropagatorWithMaterial::propagate | ( | const FreeTrajectoryState & | fts, |
const Cylinder & | cylinder | ||
) | const [inline, virtual] |
Implements Propagator.
Definition at line 80 of file PropagatorWithMaterial.h.
References propagateWithPath().
{ // should be implemented (in case underlying propagator has an independent // implementation) return propagateWithPath(fts,cylinder).first; }
virtual TrajectoryStateOnSurface PropagatorWithMaterial::propagate | ( | const TrajectoryStateOnSurface & | tsos, |
const Plane & | plane | ||
) | const [inline, virtual] |
Reimplemented from Propagator.
Definition at line 50 of file PropagatorWithMaterial.h.
References propagateWithPath().
Referenced by CRackTrajectoryBuilder::AddHit(), SiStripElectronSeedGenerator::altCheckHitsAndTSOS(), ElectronSeedAnalyzer::analyze(), SiStripElectronSeedGenerator::checkHitsAndTSOS(), ConversionProducer::checkPhi(), RoadSearchTrackCandidateMakerAlgorithm::createSeedTrajectory(), RoadSearchTrackCandidateMakerAlgorithm::extrapolateTrajectory(), ConversionTrackEcalImpactPoint::find(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHit(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHits(), RoadSearchTrackCandidateMakerAlgorithm::FindBestHitsByDet(), ConversionProducer::getTrackImpactPosition(), FastElectronSeedGenerator::prepareElTrackSeed(), RoadSearchTrackCandidateMakerAlgorithm::PrepareTrackCandidates(), TrackCandidateProducer::produce(), TrajectorySeedProducer::produce(), ConvBremSeedProducer::produce(), TkConvValidator::recalculateMomentumAtFittedVertex(), SeedGeneratorForCRack::seeds(), SeedGeneratorForCosmics::seeds(), and CRackTrajectoryBuilder::SortHits().
{ // should be implemented (in case underlying propagator has an independent // implementation) return propagateWithPath(tsos,plane).first; }
pair< TrajectoryStateOnSurface, double > PropagatorWithMaterial::propagateWithPath | ( | const TrajectoryStateOnSurface & | tsos, |
const Cylinder & | cylinder | ||
) | const [virtual] |
Reimplemented from Propagator.
Definition at line 96 of file PropagatorWithMaterial.cc.
References materialAtSource(), Propagator::propagationDirection(), theGeometricalPropagator, and theMEUpdator.
{ // // add material at starting surface, if requested // TsosWP newTsosWP(tsos,0.); if ( materialAtSource() ) { bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first,propagationDirection()); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); } if ( !newTsosWP.first.isValid() ) return newTsosWP; // // geometrical propagation // newTsosWP = theGeometricalPropagator->propagateWithPath(newTsosWP.first,cylinder); if ( !(newTsosWP.first).isValid() || materialAtSource() ) return newTsosWP; // // add material at destination surface, if requested // bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first, PropagationDirectionFromPath()(newTsosWP.second, propagationDirection())); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); return newTsosWP; }
pair< TrajectoryStateOnSurface, double > PropagatorWithMaterial::propagateWithPath | ( | const FreeTrajectoryState & | fts, |
const Plane & | plane | ||
) | const [virtual] |
Implements Propagator.
Definition at line 42 of file PropagatorWithMaterial.cc.
References materialAtSource(), Propagator::propagationDirection(), theGeometricalPropagator, and theMEUpdator.
{ TsosWP newTsosWP = theGeometricalPropagator->propagateWithPath(fts,plane); if ( (newTsosWP.first).isValid() && !materialAtSource() ) { bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first, PropagationDirectionFromPath()(newTsosWP.second, propagationDirection())); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); } return newTsosWP; }
pair< TrajectoryStateOnSurface, double > PropagatorWithMaterial::propagateWithPath | ( | const TrajectoryStateOnSurface & | tsos, |
const Plane & | plane | ||
) | const [virtual] |
Reimplemented from Propagator.
Definition at line 69 of file PropagatorWithMaterial.cc.
References materialAtSource(), Propagator::propagationDirection(), theGeometricalPropagator, and theMEUpdator.
Referenced by propagate().
{ // // add material at starting surface, if requested // TsosWP newTsosWP(tsos,0.); if ( materialAtSource() ) { bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first,propagationDirection()); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); } if ( !newTsosWP.first.isValid() ) return newTsosWP; // // geometrical propagation // newTsosWP = theGeometricalPropagator->propagateWithPath(newTsosWP.first,plane); if ( !newTsosWP.first.isValid() || materialAtSource() ) return newTsosWP; // // add material at destination surface, if requested // bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first, PropagationDirectionFromPath()(newTsosWP.second, propagationDirection())); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); return newTsosWP; }
pair< TrajectoryStateOnSurface, double > PropagatorWithMaterial::propagateWithPath | ( | const FreeTrajectoryState & | fts, |
const Cylinder & | cylinder | ||
) | const [virtual] |
Implements Propagator.
Definition at line 55 of file PropagatorWithMaterial.cc.
References materialAtSource(), Propagator::propagationDirection(), theGeometricalPropagator, and theMEUpdator.
{ TsosWP newTsosWP = theGeometricalPropagator->propagateWithPath(fts,cylinder); if ( (newTsosWP.first).isValid() && !materialAtSource() ) { bool updateOk = theMEUpdator->updateStateInPlace(newTsosWP.first, PropagationDirectionFromPath()(newTsosWP.second, propagationDirection())); if (!updateOk) newTsosWP.first = TrajectoryStateOnSurface(); } return newTsosWP; }
void PropagatorWithMaterial::setMaterialLocation | ( | const MaterialLocation | location | ) | [inline] |
Choice of location for including material effects: fromDirection is equivalent to atSource for propagation alongMomentum and to atDestination for propagation oppositeToMomentum. Inclusion of material effects at the source (either explicitely or implicitely) is not possible if propagating with anyDirection and will effectively disable material effects when propagating from a FreeTrajectoryState.
Definition at line 110 of file PropagatorWithMaterial.h.
References theMaterialLocation.
{ theMaterialLocation = location; }
virtual bool PropagatorWithMaterial::setMaxDirectionChange | ( | float | phiMax | ) | [inline, virtual] |
Limit on change in azimuthal angle.
Reimplemented from Propagator.
Definition at line 95 of file PropagatorWithMaterial.h.
References theGeometricalPropagator.
{ return theGeometricalPropagator->setMaxDirectionChange(phiMax); }
void PropagatorWithMaterial::setPropagationDirection | ( | PropagationDirection | dir | ) | const [virtual] |
Propagation direction.
Reimplemented from Propagator.
Definition at line 122 of file PropagatorWithMaterial.cc.
References theGeometricalPropagator.
{ theGeometricalPropagator->setPropagationDirection(dir); Propagator::setPropagationDirection(dir); }
const MagneticField* PropagatorWithMaterial::field [private] |
Definition at line 144 of file PropagatorWithMaterial.h.
Referenced by magneticField().
Definition at line 136 of file PropagatorWithMaterial.h.
Referenced by geometricalPropagator(), propagateWithPath(), PropagatorWithMaterial(), setMaxDirectionChange(), and setPropagationDirection().
Definition at line 143 of file PropagatorWithMaterial.h.
Referenced by materialAtSource(), and setMaterialLocation().
Definition at line 140 of file PropagatorWithMaterial.h.
Referenced by materialEffectsUpdator(), and propagateWithPath().
bool PropagatorWithMaterial::useRungeKutta_ [private] |
Definition at line 145 of file PropagatorWithMaterial.h.
Referenced by PropagatorWithMaterial().