00001 #ifndef Alignment_ReferenceTrajectories_TwoBodyDecayTrajectoryState_h 00002 #define Alignment_ReferenceTrajectories_TwoBodyDecayTrajectoryState_h 00003 00004 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" 00005 #include "Alignment/TwoBodyDecay/interface/TwoBodyDecay.h" 00006 00010 class GlobalTrajectoryParameters; 00011 00012 00013 class TwoBodyDecayTrajectoryState 00014 { 00015 00016 public: 00017 00018 typedef std::pair< TrajectoryStateOnSurface, TrajectoryStateOnSurface > TsosContainer; 00019 typedef std::pair< AlgebraicMatrix, AlgebraicMatrix > Derivatives; 00020 00024 TwoBodyDecayTrajectoryState( const TsosContainer & tsos, 00025 const TwoBodyDecay & tbd, 00026 double particleMass, 00027 const MagneticField* magField ); 00028 00032 TwoBodyDecayTrajectoryState( const TsosContainer & tsos, 00033 const TwoBodyDecayParameters & param, 00034 double particleMass, 00035 const MagneticField* magField ); 00036 00037 ~TwoBodyDecayTrajectoryState( void ) {} 00038 00039 inline bool isValid( void ) const { return theValidityFlag; } 00040 00041 inline double particleMass( void ) const { return theParticleMass; } 00042 inline const TwoBodyDecayParameters & decayParameters( void ) const { return theParameters; } 00043 inline const TsosContainer& trajectoryStates( bool useRefittedState = true ) const { return useRefittedState ? theRefittedTsos : theOriginalTsos; } 00044 inline const Derivatives& derivatives( void ) const { return theDerivatives; } 00045 00046 private: 00047 00048 void construct( const MagneticField* magField ); 00049 00050 bool propagateSingleState( const GlobalTrajectoryParameters & gtp, 00051 const AlgebraicMatrix & startDeriv, 00052 const Surface & surface, 00053 const MagneticField* magField, 00054 TrajectoryStateOnSurface & tsos, 00055 AlgebraicMatrix & endDeriv ); 00056 00057 bool theValidityFlag; 00058 00059 double theParticleMass; 00060 00061 TwoBodyDecayParameters theParameters; 00062 Derivatives theDerivatives; 00063 TsosContainer theOriginalTsos; 00064 TsosContainer theRefittedTsos; 00065 00066 00067 static const unsigned int nLocalParam = 5; 00068 static const unsigned int nDecayParam = TwoBodyDecayParameters::dimension; 00069 }; 00070 00071 00072 #endif