00001 #ifndef Alignment_ReferenceTrajectories_TwoBodyDecayTrajectory_h 00002 #define Alignment_ReferenceTrajectories_TwoBodyDecayTrajectory_h 00003 00004 #include "Alignment/ReferenceTrajectories/interface/ReferenceTrajectory.h" 00005 #include "Alignment/ReferenceTrajectories/interface/TwoBodyDecayTrajectoryState.h" 00006 00007 00008 class TwoBodyDecayTrajectory : public ReferenceTrajectoryBase 00009 { 00010 00011 public: 00012 00013 typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer; 00014 typedef std::pair< ConstRecHitContainer, ConstRecHitContainer > ConstRecHitCollection; 00015 00016 TwoBodyDecayTrajectory( const TwoBodyDecayTrajectoryState & trajectoryState, 00017 const ConstRecHitCollection & recHits, 00018 const MagneticField* magField, 00019 MaterialEffects materialEffects = combined, 00020 PropagationDirection propDir = alongMomentum, 00021 bool hitsAreReverse = false, 00022 bool useRefittedState = true, 00023 bool constructTsosWithErrors = false ); 00024 00025 TwoBodyDecayTrajectory( void ); 00026 00027 ~TwoBodyDecayTrajectory( void ) {} 00028 00029 virtual TwoBodyDecayTrajectory* clone( void ) const 00030 { return new TwoBodyDecayTrajectory( *this ); } 00031 00034 inline const std::pair< int, int > numberOfRecHits( void ) { return theNumberOfRecHits; } 00035 00036 private: 00037 00038 bool construct( const TwoBodyDecayTrajectoryState & state, 00039 const ConstRecHitCollection & recHits, 00040 const MagneticField* field, 00041 MaterialEffects materialEffects, 00042 PropagationDirection propDir, 00043 bool useRefittedState, 00044 bool constructTsosWithErrors ); 00045 00046 void constructTsosVecWithErrors( const ReferenceTrajectory& traj1, 00047 const ReferenceTrajectory& traj2, 00048 const MagneticField* field ); 00049 00050 void constructSingleTsosWithErrors( const TrajectoryStateOnSurface & tsos, 00051 int iTsos, 00052 const MagneticField* field ); 00053 00054 std::pair< int, int > theNumberOfRecHits; 00055 00056 }; 00057 00058 #endif