00001 #ifndef Alignment_ReferenceTrajectories_DualBzeroTrajectoryFactory_h 00002 #define Alignment_ReferenceTrajectories_DualBzeroTrajectoryFactory_h 00003 00004 #include "Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h" 00005 00007 00008 00009 class DualBzeroTrajectoryFactory : public TrajectoryFactoryBase 00010 { 00011 00012 public: 00013 00014 DualBzeroTrajectoryFactory( const edm::ParameterSet & config ); 00015 virtual ~DualBzeroTrajectoryFactory( void ); 00016 00018 virtual const ReferenceTrajectoryCollection trajectories( const edm::EventSetup & setup, 00019 const ConstTrajTrackPairCollection & tracks ) const; 00020 00021 virtual const ReferenceTrajectoryCollection trajectories( const edm::EventSetup& setup, 00022 const ConstTrajTrackPairCollection& tracks, 00023 const ExternalPredictionCollection& external ) const; 00024 00025 virtual DualBzeroTrajectoryFactory* clone( void ) const { return new DualBzeroTrajectoryFactory( *this ); } 00026 00027 protected: 00028 00029 struct DualBzeroTrajectoryInput 00030 { 00031 TrajectoryStateOnSurface refTsos; 00032 TransientTrackingRecHit::ConstRecHitContainer fwdRecHits; 00033 TransientTrackingRecHit::ConstRecHitContainer bwdRecHits; 00034 }; 00035 00036 const DualBzeroTrajectoryInput referenceStateAndRecHits( const ConstTrajTrackPair& track ) const; 00037 00038 const TrajectoryStateOnSurface propagateExternal( const TrajectoryStateOnSurface& external, 00039 const Surface& surface, 00040 const MagneticField* magField ) const; 00041 00042 double theMass; 00043 double theMomentumEstimate; 00044 00045 }; 00046 00047 00048 #endif