00001
00002
00003
00004 #include "Event/FitNode.h"
00005
00025
00026
00027
00028 FitNode::FitNode():
00029 m_predictedState(0),
00030 m_filteredState(0)
00031 {
00032
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
00041
00042 FitNode::FitNode(Measurement* aMeas):
00043 m_predictedState(0),
00044 m_filteredState(0)
00045 {
00046
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
00056
00057 FitNode::~FitNode()
00058 {
00059 delete m_predictedState;
00060 delete m_filteredState;
00061 delete m_state;
00062 }
00063
00064
00065
00066
00067 void FitNode::updatePredictedState( State* predictedState )
00068 {
00069
00070 if ( !m_predictedState ) {
00071 m_predictedState = predictedState -> clone();
00072 }
00073 else{
00074
00075 HepVector& tX = m_predictedState -> state();
00076 HepSymMatrix& tC = m_predictedState -> covariance();
00077
00078
00079 tX = predictedState -> state();
00080 tC = predictedState -> covariance();
00081
00082 }
00083 }
00084
00085
00086
00087
00088 void FitNode::updateFilteredState( State* filteredState )
00089 {
00090
00091 if ( !m_filteredState ) {
00092 m_filteredState = filteredState -> clone();
00093 }
00094 else{
00095
00096 HepVector& tX = m_filteredState -> state();
00097 HepSymMatrix& tC = m_filteredState -> covariance();
00098
00099
00100 tX = filteredState -> state();
00101 tC = filteredState -> covariance();
00102
00103 }
00104 }
00105
00106
00107
00108
00109 void FitNode::updateBestState( State* state )
00110 {
00112
00113 if ( !m_state ) {
00114 m_state = state -> clone();
00115 }
00116 else{
00117
00118 HepVector& tX = m_state -> state();
00119 HepSymMatrix& tC = m_state -> covariance();
00120
00121
00122 tX = state -> state();
00123 tC = state -> covariance();
00124 }
00125 }
00126
00127
00128
00129
00130 void FitNode::addNode( FitNode* prevNode )
00131 {
00132
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