#include <Alignment/ReferenceTrajectories/plugins/DualTrajectoryFactory.h>
Public Member Functions | |
virtual DualTrajectoryFactory * | clone (void) const |
DualTrajectoryFactory (const edm::ParameterSet &config) | |
virtual const ReferenceTrajectoryCollection | trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const ExternalPredictionCollection &external) const |
virtual const ReferenceTrajectoryCollection | trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks) const |
Produce the reference trajectories. | |
virtual | ~DualTrajectoryFactory (void) |
Protected Member Functions | |
const TrajectoryStateOnSurface | propagateExternal (const TrajectoryStateOnSurface &external, const Surface &surface, const MagneticField *magField) const |
const DualTrajectoryInput | referenceStateAndRecHits (const ConstTrajTrackPair &track) const |
Protected Attributes | |
double | theMass |
Classes | |
struct | DualTrajectoryInput |
Definition at line 9 of file DualTrajectoryFactory.h.
DualTrajectoryFactory::DualTrajectoryFactory | ( | const edm::ParameterSet & | config | ) |
Definition at line 16 of file DualTrajectoryFactory.cc.
References edm::ParameterSet::getParameter(), and theMass.
Referenced by clone().
00016 : 00017 TrajectoryFactoryBase( config ) 00018 { 00019 theMass = config.getParameter< double >( "ParticleMass" ); 00020 }
DualTrajectoryFactory::~DualTrajectoryFactory | ( | void | ) | [virtual] |
virtual DualTrajectoryFactory* DualTrajectoryFactory::clone | ( | void | ) | const [inline, virtual] |
Implements TrajectoryFactoryBase.
Definition at line 25 of file DualTrajectoryFactory.h.
References DualTrajectoryFactory().
00025 { return new DualTrajectoryFactory( *this ); }
const TrajectoryStateOnSurface DualTrajectoryFactory::propagateExternal | ( | const TrajectoryStateOnSurface & | external, | |
const Surface & | surface, | |||
const MagneticField * | magField | |||
) | const [protected] |
Definition at line 176 of file DualTrajectoryFactory.cc.
References anyDirection, and AnalyticalPropagator::propagateWithPath().
Referenced by trajectories().
00179 { 00180 AnalyticalPropagator propagator( magField, anyDirection ); 00181 const std::pair< TrajectoryStateOnSurface, double > tsosWithPath = 00182 propagator.propagateWithPath( external, surface ); 00183 return tsosWithPath.first; 00184 }
const DualTrajectoryFactory::DualTrajectoryInput DualTrajectoryFactory::referenceStateAndRecHits | ( | const ConstTrajTrackPair & | track | ) | const [protected] |
Definition at line 129 of file DualTrajectoryFactory.cc.
References DualTrajectoryFactory::DualTrajectoryInput::bwdRecHits, DualTrajectoryFactory::DualTrajectoryInput::fwdRecHits, iggi_31X_cfg::input, TrajectoryFactoryBase::orderedTrajectoryMeasurements(), DualTrajectoryFactory::DualTrajectoryInput::refTsos, and TrajectoryFactoryBase::useRecHit().
Referenced by trajectories().
00130 { 00131 DualTrajectoryInput input; 00132 00133 // get the trajectory measurements in the correct order, i.e. reverse if needed 00134 Trajectory::DataContainer allTrajMeas = this->orderedTrajectoryMeasurements( *track.first ); 00135 Trajectory::DataContainer usedTrajMeas; 00136 Trajectory::DataContainer::iterator itM; 00137 // get all relevant trajectory measurements 00138 for ( itM = allTrajMeas.begin(); itM != allTrajMeas.end(); itM++ ) 00139 { 00140 if ( useRecHit( ( *itM ).recHit() ) ) usedTrajMeas.push_back( *itM ); 00141 } 00142 00143 unsigned int iMeas = 0; 00144 unsigned int nMeas = usedTrajMeas.size(); 00145 unsigned int nRefStateMeas = nMeas/2; 00146 // get the valid RecHits 00147 for ( itM = usedTrajMeas.begin(); itM != usedTrajMeas.end(); itM++, iMeas++ ) 00148 { 00149 TransientTrackingRecHit::ConstRecHitPointer aRecHit = ( *itM ).recHit(); 00150 00151 if ( iMeas < nRefStateMeas ) { 00152 input.bwdRecHits.push_back( aRecHit ); 00153 } else if ( iMeas > nRefStateMeas ) { 00154 input.fwdRecHits.push_back( aRecHit ); 00155 } else { // iMeas == nRefStateMeas 00156 if ( ( *itM ).updatedState().isValid() ) 00157 { 00158 input.refTsos = ( *itM ).updatedState(); 00159 input.bwdRecHits.push_back( aRecHit ); 00160 input.fwdRecHits.push_back( aRecHit ); 00161 } else { 00162 // if the tsos of the middle hit is not valid, try the next one ... 00163 nRefStateMeas++; 00164 input.bwdRecHits.push_back( aRecHit ); 00165 } 00166 } 00167 } 00168 00169 // bring input.fwdRecHits into correct order 00170 std::reverse( input.bwdRecHits.begin(), input.bwdRecHits.end() ); 00171 00172 return input; 00173 }
const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory::trajectories | ( | const edm::EventSetup & | setup, | |
const ConstTrajTrackPairCollection & | tracks, | |||
const ExternalPredictionCollection & | external | |||
) | const [virtual] |
Definition at line 60 of file DualTrajectoryFactory.cc.
References DualTrajectoryFactory::DualTrajectoryInput::bwdRecHits, DualTrajectoryFactory::DualTrajectoryInput::fwdRecHits, edm::EventSetup::get(), iggi_31X_cfg::input, TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localError(), TrajectoryFactoryBase::materialEffects(), LocalTrajectoryError::matrix(), edm::ESHandle< T >::product(), propagateExternal(), TrajectoryFactoryBase::propagationDirection(), ptr, referenceStateAndRecHits(), DualTrajectoryFactory::DualTrajectoryInput::refTsos, TrajectoryStateOnSurface::surface(), theMass, and trajectories().
00063 { 00064 ReferenceTrajectoryCollection trajectories; 00065 00066 if ( tracks.size() != external.size() ) 00067 { 00068 edm::LogInfo("ReferenceTrajectories") << "@SUB=DualTrajectoryFactory::trajectories" 00069 << "Inconsistent input:\n" 00070 << "\tnumber of tracks = " << tracks.size() 00071 << "\tnumber of external predictions = " << external.size(); 00072 return trajectories; 00073 } 00074 00075 edm::ESHandle< MagneticField > magneticField; 00076 setup.get< IdealMagneticFieldRecord >().get( magneticField ); 00077 00078 ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); 00079 ExternalPredictionCollection::const_iterator itExternal = external.begin(); 00080 00081 while ( itTracks != tracks.end() ) 00082 { 00083 const DualTrajectoryInput input = referenceStateAndRecHits( *itTracks ); 00084 // Check input: If all hits were rejected, the TSOS is initialized as invalid. 00085 if ( input.refTsos.isValid() ) 00086 { 00087 if ( (*itExternal).isValid() ) 00088 { 00089 TrajectoryStateOnSurface propExternal = 00090 propagateExternal( *itExternal, input.refTsos.surface(), magneticField.product() ); 00091 00092 if ( !propExternal.isValid() ) continue; 00093 00094 // set the flag for reversing the RecHits to false, since they are already in the correct order. 00095 ReferenceTrajectoryPtr ptr( new DualReferenceTrajectory( propExternal, 00096 input.fwdRecHits, 00097 input.bwdRecHits, 00098 magneticField.product(), 00099 materialEffects(), 00100 propagationDirection(), 00101 theMass ) ); 00102 00103 AlgebraicSymMatrix externalParamErrors( asHepMatrix<5>( propExternal.localError().matrix() ) ); 00104 ptr->setParameterErrors( externalParamErrors ); 00105 trajectories.push_back( ptr ); 00106 } 00107 else 00108 { 00109 ReferenceTrajectoryPtr ptr( new DualReferenceTrajectory( input.refTsos, 00110 input.fwdRecHits, 00111 input.bwdRecHits, 00112 magneticField.product(), 00113 materialEffects(), 00114 propagationDirection(), 00115 theMass ) ); 00116 trajectories.push_back( ptr ); 00117 } 00118 } 00119 00120 ++itTracks; 00121 ++itExternal; 00122 } 00123 00124 return trajectories; 00125 }
const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory::trajectories | ( | const edm::EventSetup & | setup, | |
const ConstTrajTrackPairCollection & | tracks | |||
) | const [virtual] |
Produce the reference trajectories.
Definition at line 27 of file DualTrajectoryFactory.cc.
References DualTrajectoryFactory::DualTrajectoryInput::bwdRecHits, DualTrajectoryFactory::DualTrajectoryInput::fwdRecHits, edm::EventSetup::get(), iggi_31X_cfg::input, TrajectoryStateOnSurface::isValid(), TrajectoryFactoryBase::materialEffects(), edm::ESHandle< T >::product(), TrajectoryFactoryBase::propagationDirection(), ptr, referenceStateAndRecHits(), DualTrajectoryFactory::DualTrajectoryInput::refTsos, and theMass.
Referenced by trajectories().
00029 { 00030 ReferenceTrajectoryCollection trajectories; 00031 00032 edm::ESHandle< MagneticField > magneticField; 00033 setup.get< IdealMagneticFieldRecord >().get( magneticField ); 00034 00035 ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); 00036 00037 while ( itTracks != tracks.end() ) 00038 { 00039 const DualTrajectoryInput input = this->referenceStateAndRecHits( *itTracks ); 00040 // Check input: If all hits were rejected, the TSOS is initialized as invalid. 00041 if ( input.refTsos.isValid() ) 00042 { 00043 ReferenceTrajectoryPtr ptr( new DualReferenceTrajectory( input.refTsos, 00044 input.fwdRecHits, 00045 input.bwdRecHits, 00046 magneticField.product(), 00047 materialEffects(), 00048 propagationDirection(), 00049 theMass ) ); 00050 trajectories.push_back( ptr ); 00051 } 00052 00053 ++itTracks; 00054 } 00055 00056 return trajectories; 00057 }
double DualTrajectoryFactory::theMass [protected] |
Definition at line 42 of file DualTrajectoryFactory.h.
Referenced by DualTrajectoryFactory(), and trajectories().