Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

FitNode.cpp

Go to the documentation of this file.
00001 // Include files
00002 // -------------
00003 // local
00004 #include "Event/FitNode.h"
00005 
00025 //=============================================================================
00026 // Standard constructor, initializes variables
00027 //=============================================================================
00028 FitNode::FitNode():
00029   m_predictedState(0),
00030   m_filteredState(0)
00031 {
00032   // FitNode default constructer
00033   m_transportMatrix = HepMatrix(5, 5, 1);
00034   m_transportVector = HepVector(5, 0);
00035   m_noiseMatrix     = HepSymMatrix(5, 0);
00036   m_state           = 0;
00037 }
00038 
00039 //=============================================================================
00040 // Constructor from a Measurement
00041 //=============================================================================
00042 FitNode::FitNode(Measurement* aMeas):
00043   m_predictedState(0),
00044   m_filteredState(0)
00045 {
00046   //FitNode constructer
00047   m_transportMatrix = HepMatrix(5, 5, 1);
00048   m_transportVector = HepVector(5, 0);
00049   m_noiseMatrix     = HepSymMatrix(5, 0);
00050   m_state           = 0;
00051   m_measurement     = aMeas;
00052 }
00053 
00054 //=============================================================================
00055 // Destructor
00056 //=============================================================================
00057 FitNode::~FitNode()
00058 {
00059   delete m_predictedState;
00060   delete m_filteredState;
00061   delete m_state;
00062 }
00063 
00064 //=============================================================================
00065 // Update the State predicted by the Kalman filter
00066 //=============================================================================
00067 void FitNode::updatePredictedState( State* predictedState )
00068 {  
00069   //if pointer not set clone state - else copy (not great)
00070   if ( !m_predictedState ) {
00071     m_predictedState = predictedState -> clone();    
00072   }
00073   else{
00074     // get reference to the state vector and cov
00075     HepVector& tX    = m_predictedState -> state();
00076     HepSymMatrix& tC = m_predictedState -> covariance();
00077    
00078     //update 
00079     tX = predictedState -> state();
00080     tC = predictedState -> covariance();
00081 
00082   }
00083 }
00084 
00085 //=============================================================================
00086 // Update the filtered state from the Kalman filter step
00087 //=============================================================================
00088 void FitNode::updateFilteredState( State* filteredState )
00089 {  
00090   //if pointer not set clone state - else copy (not great)
00091   if ( !m_filteredState ) {
00092     m_filteredState = filteredState -> clone();
00093   }
00094   else{
00095     // get reference to the state vector and cov
00096     HepVector& tX    = m_filteredState -> state();
00097     HepSymMatrix& tC = m_filteredState -> covariance();
00098    
00099     //update 
00100     tX = filteredState -> state();
00101     tC = filteredState -> covariance();
00102 
00103   }
00104 }
00105 
00106 //=============================================================================
00107 // 
00108 //=============================================================================
00109 void FitNode::updateBestState( State* state )
00110 {
00112   //if pointer not set clone state - else copy (not great)
00113   if ( !m_state ) {
00114     m_state = state -> clone();
00115   }
00116   else{
00117     // get reference to the state vector and cov
00118     HepVector& tX    = m_state -> state();
00119     HepSymMatrix& tC = m_state -> covariance();
00120 
00121     //update 
00122     tX = state -> state();
00123     tC = state -> covariance();
00124   }
00125 }
00126 
00127 //=============================================================================
00128 // Add the transport transformation of prevNode to this node
00129 //=============================================================================
00130 void FitNode::addNode( FitNode* prevNode )
00131 {
00132   // add the transport transformation of prevNode to this node
00133   m_transportVector += m_transportMatrix * prevNode->transportVector() ;
00134   m_noiseMatrix += (prevNode->noiseMatrix()).similarity( m_transportMatrix );
00135   m_transportMatrix = m_transportMatrix * prevNode->transportMatrix();  
00136 }
00137 
00138 //=============================================================================

Generated on Wed May 4 11:52:34 2005 for New Track Event Model by doxygen 1.4.1