00001 #ifndef Alignment_ReferenceTrajectories_DualReferenceTrajectory_H 00002 #define Alignment_ReferenceTrajectories_DualReferenceTrajectory_H 00003 00029 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectoryBase.h" 00030 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h" 00031 00032 class ReferenceTrajectory; 00033 00034 00035 class DualReferenceTrajectory : public ReferenceTrajectoryBase 00036 { 00037 00038 public: 00039 00040 typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer; 00041 00042 DualReferenceTrajectory( const TrajectoryStateOnSurface &referenceTsos, 00043 const ConstRecHitContainer &forwardRecHits, 00044 const ConstRecHitContainer &backwardRecHits, 00045 const MagneticField *magField, 00046 MaterialEffects materialEffects = combined, 00047 PropagationDirection propDir = alongMomentum, 00048 double mass = 0.10565836 ); 00049 00050 virtual ~DualReferenceTrajectory() {} 00051 00052 virtual DualReferenceTrajectory* clone() const { return new DualReferenceTrajectory(*this); } 00053 00054 protected: 00055 00056 DualReferenceTrajectory( unsigned int nPar = 0, unsigned int nHits = 0 ); 00057 00060 virtual bool construct(const TrajectoryStateOnSurface &referenceTsos, 00061 const ConstRecHitContainer &forwardRecHits, 00062 const ConstRecHitContainer &backwardRecHits, 00063 double mass, MaterialEffects materialEffects, 00064 const PropagationDirection propDir, 00065 const MagneticField *magField); 00066 00067 virtual ReferenceTrajectory* construct(const TrajectoryStateOnSurface &referenceTsos, 00068 const ConstRecHitContainer &recHits, 00069 double mass, MaterialEffects materialEffects, 00070 const PropagationDirection propDir, 00071 const MagneticField *magField) const; 00072 00073 virtual AlgebraicVector extractParameters(const TrajectoryStateOnSurface &referenceTsos) const; 00074 00075 inline const PropagationDirection oppositeDirection( const PropagationDirection propDir ) const 00076 { return ( propDir == anyDirection ) ? anyDirection : ( ( propDir == alongMomentum ) ? oppositeToMomentum : alongMomentum ); } 00077 00078 }; 00079 00080 #endif