CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_8_patch3/src/Alignment/ReferenceTrajectories/interface/TwoBodyDecayTrajectoryState.h

Go to the documentation of this file.
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                                bool propagateErrors = false );
00029 
00030   ~TwoBodyDecayTrajectoryState( void ) {}
00031 
00032   inline bool isValid( void ) const { return theValidityFlag; }
00033 
00034   inline double particleMass( void ) const { return theParticleMass; }
00035   inline const TwoBodyDecayParameters & decayParameters( void ) const { return theParameters; }
00036   inline const TsosContainer& trajectoryStates( bool useRefittedState = true ) const { return useRefittedState ? theRefittedTsos : theOriginalTsos; }
00037   inline const Derivatives& derivatives( void ) const { return theDerivatives; }
00038 
00039   void rescaleError( double scale );
00040 
00041   inline double primaryMass( void ) const { return thePrimaryMass; }
00042   inline double primaryWidth( void ) const { return thePrimaryWidth; }
00043 
00044 private:
00045 
00046   void construct( const MagneticField* magField,
00047                   bool propagateErrors );
00048 
00049   bool propagateSingleState( const FreeTrajectoryState & fts,
00050                              const GlobalTrajectoryParameters & gtp,
00051                              const AlgebraicMatrix & startDeriv,
00052                              const Surface & surface,
00053                              const MagneticField* magField,
00054                              TrajectoryStateOnSurface & tsos,
00055                              AlgebraicMatrix & endDeriv ) const;
00056 
00057 
00058   void setError( FreeTrajectoryState& fts,
00059                  AlgebraicMatrix& derivative ) const;
00060 
00061   bool theValidityFlag;
00062 
00063   double theParticleMass;
00064 
00065   TwoBodyDecayParameters theParameters;
00066   Derivatives theDerivatives;
00067   TsosContainer theOriginalTsos;
00068   TsosContainer theRefittedTsos;
00069 
00070   double thePrimaryMass;
00071   double thePrimaryWidth;
00072 
00073   static const unsigned int nLocalParam = 5;
00074   static const unsigned int nDecayParam = TwoBodyDecayParameters::dimension;
00075 };
00076 
00077 
00078 #endif