63
63
// Filter the first state.
64
64
_filter->Process(sites.front());
65
// int first_site_id = abs(sites.front()->id());
66
67
// Run the extrapolation & filter chain.
67
size_t numb_measurements = sites.size();
68
for ( size_t j = 1; j < numb_measurements; ++j ) {
68
size_t numb_sites = sites.size();
69
// Loop over all 15 planes
70
for ( size_t j = 1; j < sites.size(); ++j ) {
69
71
// Predict the state vector at site i...
70
72
_propagator->Extrapolate(sites, j);
72
75
_filter->Process(sites.at(j));
74
_propagator->PrepareForSmoothing(sites);
77
// std::cerr << "Prepare For Smoothing... " << std::endl;
78
_propagator->PrepareForSmoothing(sites.back());
75
79
// ...and Smooth back all sites.
76
for ( int k = static_cast<int> (numb_measurements-2); k > -1; --k ) {
80
for ( int k = static_cast<int> (sites.size()-2); k >= 0; --k ) {
77
81
_propagator->Smooth(sites, k);
78
82
_filter->UpdateH(sites.at(k));
79
_filter->SetResidual(sites.at(k), KalmanState::Smoothed);
83
_filter->ComputeResidual(sites.at(k), KalmanState::Smoothed);
82
86
track->set_tracker(seed->tracker());
99
103
void KalmanTrackFit::ComputeChi2(SciFiTrack *track, KalmanStatesPArray sites) {
102
// Find the ndf for this track: numb measurements - numb parameters to be estimated
104
// Prepare to loop over all Kalman sites...
103
105
size_t n_sites = sites.size();
104
// Find n_parameters by looking at the dimension of the state vector.
105
int n_parameters = sites.at(0)->a(KalmanState::Filtered).GetNrows();
107
int ndf = n_sites - n_parameters;
106
// ... summing chi2...
108
// .. and counting the numb. of measurements...
109
int n_measurements = 0;
109
110
for ( size_t i = 0; i < n_sites; ++i ) {
110
111
KalmanState *site = sites.at(i);
111
f_chi2 += site->chi2(KalmanState::Filtered);
112
s_chi2 += site->chi2(KalmanState::Smoothed);
112
if ( site->contains_measurement() ) {
114
chi2 += site->chi2();
114
double P_value = TMath::Prob(f_chi2, ndf);
115
track->set_f_chi2(f_chi2);
116
track->set_s_chi2(s_chi2);
117
// Find the ndf for this track: numb measurements - numb parameters to be estimated
118
int n_parameters = sites.at(0)->a(KalmanState::Filtered).GetNrows();
119
int ndf = n_measurements - n_parameters;
120
track->set_chi2(chi2);
117
121
track->set_ndf(ndf);
122
double P_value = TMath::Prob(chi2, ndf);
118
123
track->set_P_value(P_value);
123
128
int tracker = track->tracker();
124
129
if ( pvalue != pvalue ) return;
125
130
for ( size_t i = 0; i < sites.size(); ++i ) {
126
sites.at(i)->MoveToGlobalFrame(_RefPos[tracker]);
127
SciFiTrackPoint *track_point = new SciFiTrackPoint(sites.at(i));
128
track->add_scifitrackpoint(track_point);
131
if ( sites.at(i)->contains_measurement() ) {
132
sites.at(i)->MoveToGlobalFrame(_RefPos[tracker]);
133
SciFiTrackPoint *track_point = new SciFiTrackPoint(sites.at(i));
134
track->add_scifitrackpoint(track_point);
130
137
event.add_scifitrack(track);
136
143
for ( size_t i = 0; i < numb_sites; ++i ) {
137
144
KalmanState* site = sites.at(i);
138
Squeak::mout(Squeak::info)
145
// Squeak::mout(Squeak::info)
139
147
<< "==========================================" << "\n"
140
148
<< "SITE ID: " << site->id() << "\n"
141
149
<< "SITE Z: " << site->z() << "\n"
144
152
<< (site->a(KalmanState::Projected))(1, 0) << " "
145
153
<< (site->a(KalmanState::Projected))(2, 0) << " "
146
154
<< (site->a(KalmanState::Projected))(3, 0) << " "
147
<< (site->a(KalmanState::Projected))(4, 0) << "\n"
148
155
<< "Filtered: " << (site->a(KalmanState::Filtered))(0, 0) << " "
149
156
<< (site->a(KalmanState::Filtered))(1, 0) << " "
150
157
<< (site->a(KalmanState::Filtered))(2, 0) << " "
151
<< (site->a(KalmanState::Filtered))(3, 0) << " "
152
<< (site->a(KalmanState::Filtered))(4, 0) << "\n"
158
<< (site->a(KalmanState::Filtered))(3, 0) << "\n"
153
159
<< "================Residuals================" << "\n"
154
160
<< (site->residual(KalmanState::Projected))(0, 0) << "\n"
155
161
<< (site->residual(KalmanState::Filtered))(0, 0) << "\n"
156
162
<< (site->residual(KalmanState::Smoothed))(0, 0) << "\n"
157
163
<< "=========================================="
165
// site->covariance_matrix(KalmanState::Projected).Print();
166
// site->covariance_matrix(KalmanState::Filtered).Print();
167
// site->covariance_matrix(KalmanState::Smoothed).Print();