A factory that produces instances of class ReferenceTrajectory from a given TrajTrackPairCollection. More...
Classes | |
struct | DualBzeroTrajectoryInput |
Public Member Functions | |
virtual DualBzeroTrajectoryFactory * | clone () const |
DualBzeroTrajectoryFactory (const edm::ParameterSet &config) | |
virtual const ReferenceTrajectoryCollection | trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const ExternalPredictionCollection &external, const reco::BeamSpot &beamSpot) const |
virtual const ReferenceTrajectoryCollection | trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const |
Produce the reference trajectories. | |
virtual | ~DualBzeroTrajectoryFactory () |
Protected Member Functions | |
const TrajectoryStateOnSurface | propagateExternal (const TrajectoryStateOnSurface &external, const Surface &surface, const MagneticField *magField) const |
const DualBzeroTrajectoryInput | referenceStateAndRecHits (const ConstTrajTrackPair &track) const |
Protected Attributes | |
double | theMass |
double | theMomentumEstimate |
A factory that produces instances of class ReferenceTrajectory from a given TrajTrackPairCollection.
Definition at line 18 of file DualBzeroTrajectoryFactory.cc.
DualBzeroTrajectoryFactory::DualBzeroTrajectoryFactory | ( | const edm::ParameterSet & | config | ) |
Definition at line 59 of file DualBzeroTrajectoryFactory.cc.
References edm::ParameterSet::getParameter(), theMass, and theMomentumEstimate.
Referenced by clone().
: TrajectoryFactoryBase( config ) { theMass = config.getParameter< double >( "ParticleMass" ); theMomentumEstimate = config.getParameter< double >( "MomentumEstimate" ); }
DualBzeroTrajectoryFactory::~DualBzeroTrajectoryFactory | ( | void | ) | [virtual] |
Definition at line 67 of file DualBzeroTrajectoryFactory.cc.
{}
virtual DualBzeroTrajectoryFactory* DualBzeroTrajectoryFactory::clone | ( | void | ) | const [inline, virtual] |
Implements TrajectoryFactoryBase.
Definition at line 34 of file DualBzeroTrajectoryFactory.cc.
References DualBzeroTrajectoryFactory().
{ return new DualBzeroTrajectoryFactory(*this); }
const TrajectoryStateOnSurface DualBzeroTrajectoryFactory::propagateExternal | ( | const TrajectoryStateOnSurface & | external, |
const Surface & | surface, | ||
const MagneticField * | magField | ||
) | const [protected] |
Definition at line 240 of file DualBzeroTrajectoryFactory.cc.
References anyDirection, AnalyticalPropagator::propagateWithPath(), and LargeD0_PixelPairStep_cff::propagator.
Referenced by trajectories().
{ AnalyticalPropagator propagator( magField, anyDirection ); const std::pair< TrajectoryStateOnSurface, double > tsosWithPath = propagator.propagateWithPath( external, surface ); return tsosWithPath.first; }
const DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput DualBzeroTrajectoryFactory::referenceStateAndRecHits | ( | const ConstTrajTrackPair & | track | ) | const [protected] |
Definition at line 193 of file DualBzeroTrajectoryFactory.cc.
References DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::bwdRecHits, DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::fwdRecHits, collect_tpl::input, TrajectoryFactoryBase::orderedTrajectoryMeasurements(), DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::refTsos, and TrajectoryFactoryBase::useRecHit().
Referenced by trajectories().
{ DualBzeroTrajectoryInput input; // get the trajectory measurements in the correct order, i.e. reverse if needed Trajectory::DataContainer allTrajMeas = this->orderedTrajectoryMeasurements( *track.first ); Trajectory::DataContainer usedTrajMeas; Trajectory::DataContainer::iterator itM; // get all relevant trajectory measurements for ( itM = allTrajMeas.begin(); itM != allTrajMeas.end(); itM++ ) { if ( useRecHit( ( *itM ).recHit() ) ) usedTrajMeas.push_back( *itM ); } unsigned int iMeas = 0; unsigned int nMeas = usedTrajMeas.size(); unsigned int nRefStateMeas = nMeas/2; // get the valid RecHits for ( itM = usedTrajMeas.begin(); itM != usedTrajMeas.end(); itM++, iMeas++ ) { TransientTrackingRecHit::ConstRecHitPointer aRecHit = ( *itM ).recHit(); if ( iMeas < nRefStateMeas ) { input.bwdRecHits.push_back( aRecHit ); } else if ( iMeas > nRefStateMeas ) { input.fwdRecHits.push_back( aRecHit ); } else { // iMeas == nRefStateMeas if ( ( *itM ).updatedState().isValid() ) { input.refTsos = ( *itM ).updatedState(); input.bwdRecHits.push_back( aRecHit ); input.fwdRecHits.push_back( aRecHit ); } else { // if the tsos of the middle hit is not valid, try the next one ... nRefStateMeas++; input.bwdRecHits.push_back( aRecHit ); } } } // bring input.fwdRecHits into correct order std::reverse( input.bwdRecHits.begin(), input.bwdRecHits.end() ); return input; }
const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTrajectoryFactory::trajectories | ( | const edm::EventSetup & | setup, |
const ConstTrajTrackPairCollection & | tracks, | ||
const reco::BeamSpot & | beamSpot | ||
) | const [virtual] |
Produce the reference trajectories.
Implements TrajectoryFactoryBase.
Definition at line 71 of file DualBzeroTrajectoryFactory.cc.
References SiPixelRawToDigiRegional_cfi::beamSpot, DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::bwdRecHits, DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::fwdRecHits, edm::EventSetup::get(), collect_tpl::input, TrajectoryStateOnSurface::isValid(), TrajectoryFactoryBase::materialEffects(), edm::ESHandle< T >::product(), TrajectoryFactoryBase::propagationDirection(), referenceStateAndRecHits(), DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::refTsos, theMass, theMomentumEstimate, and TrajectoryFactoryBase::theUseBeamSpot.
Referenced by trajectories().
{ ReferenceTrajectoryCollection trajectories; edm::ESHandle< MagneticField > magneticField; setup.get< IdealMagneticFieldRecord >().get( magneticField ); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); while ( itTracks != tracks.end() ) { const DualBzeroTrajectoryInput input = this->referenceStateAndRecHits( *itTracks ); // Check input: If all hits were rejected, the TSOS is initialized as invalid. if ( input.refTsos.isValid() ) { ReferenceTrajectoryPtr ptr( new DualBzeroReferenceTrajectory( input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), materialEffects(), propagationDirection(), theMass, theMomentumEstimate, theUseBeamSpot, beamSpot) ); trajectories.push_back( ptr ); } ++itTracks; } return trajectories; }
const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTrajectoryFactory::trajectories | ( | const edm::EventSetup & | setup, |
const ConstTrajTrackPairCollection & | tracks, | ||
const ExternalPredictionCollection & | external, | ||
const reco::BeamSpot & | beamSpot | ||
) | const [virtual] |
Implements TrajectoryFactoryBase.
Definition at line 107 of file DualBzeroTrajectoryFactory.cc.
References SiPixelRawToDigiRegional_cfi::beamSpot, DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::bwdRecHits, DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::fwdRecHits, edm::EventSetup::get(), collect_tpl::input, TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localError(), TrajectoryFactoryBase::materialEffects(), LocalTrajectoryError::matrix(), edm::ESHandle< T >::product(), propagateExternal(), TrajectoryFactoryBase::propagationDirection(), referenceStateAndRecHits(), DualBzeroTrajectoryFactory::DualBzeroTrajectoryInput::refTsos, TrajectoryStateOnSurface::surface(), theMass, theMomentumEstimate, TrajectoryFactoryBase::theUseBeamSpot, and trajectories().
{ ReferenceTrajectoryCollection trajectories; if ( tracks.size() != external.size() ) { edm::LogInfo("ReferenceTrajectories") << "@SUB=DualBzeroTrajectoryFactory::trajectories" << "Inconsistent input:\n" << "\tnumber of tracks = " << tracks.size() << "\tnumber of external predictions = " << external.size(); return trajectories; } edm::ESHandle< MagneticField > magneticField; setup.get< IdealMagneticFieldRecord >().get( magneticField ); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); ExternalPredictionCollection::const_iterator itExternal = external.begin(); while ( itTracks != tracks.end() ) { const DualBzeroTrajectoryInput input = referenceStateAndRecHits( *itTracks ); // Check input: If all hits were rejected, the TSOS is initialized as invalid. if ( input.refTsos.isValid() ) { if ( (*itExternal).isValid() ) { TrajectoryStateOnSurface propExternal = propagateExternal( *itExternal, input.refTsos.surface(), magneticField.product() ); if ( !propExternal.isValid() ) continue; // set the flag for reversing the RecHits to false, since they are already in the correct order. ReferenceTrajectoryPtr ptr( new DualBzeroReferenceTrajectory( propExternal, input.fwdRecHits, input.bwdRecHits, magneticField.product(), materialEffects(), propagationDirection(), theMass, theMomentumEstimate, theUseBeamSpot, beamSpot ) ); AlgebraicSymMatrix externalParamErrors( asHepMatrix<5>( propExternal.localError().matrix() ) ); ptr->setParameterErrors( externalParamErrors.sub( 2, 5 ) ); trajectories.push_back( ptr ); } else { // GF: Why is the following commented? That is different from the other factories // that usually have the non-external prediction ReferenceTrajectory as fall back... // ReferenceTrajectoryPtr ptr( new DualBzeroReferenceTrajectory( input.refTsos, // input.fwdRecHits, // input.bwdRecHits, // magneticField.product(), // materialEffects(), // propagationDirection(), // theMass, // theMomentumEstimate, // beamSpot ) ); DualBzeroReferenceTrajectory test( input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), materialEffects(), propagationDirection(), theMass, theMomentumEstimate, theUseBeamSpot, beamSpot ); //trajectories.push_back( ptr ); } } ++itTracks; ++itExternal; } return trajectories; }
double DualBzeroTrajectoryFactory::theMass [protected] |
Definition at line 50 of file DualBzeroTrajectoryFactory.cc.
Referenced by DualBzeroTrajectoryFactory(), and trajectories().
double DualBzeroTrajectoryFactory::theMomentumEstimate [protected] |
Definition at line 51 of file DualBzeroTrajectoryFactory.cc.
Referenced by DualBzeroTrajectoryFactory(), and trajectories().