4 #ifdef MARLINTRK_DIAGNOSTICS_ON
8 #define MarlinTrkNtuple_cxx
11 #include "MarlinTrk/MarlinKalTestTrack.h"
13 #include "streamlog/streamlog.h"
15 #include "kaldet/ILDVTrackHit.h"
16 #include "kaltest/TKalTrackSite.h"
17 #include "kaltest/TKalTrack.h"
37 DiagnosticsController::DiagnosticsController() {
40 _recording_on =
false;
53 DiagnosticsController::~DiagnosticsController(){
54 if(_track_record) {
delete _track_record; _track_record = 0; }
57 void DiagnosticsController::init(
std::string root_file_name,
std::string root_tree_name,
bool recording_on){
59 streamlog_out(DEBUG4) <<
" DiagnosticsController::init called " <<
"\n"
60 <<
"\t root file name = " << root_file_name <<
"\n"
61 <<
"\t root tree name = " << root_tree_name <<
"\n"
62 <<
"\t recording on = " << recording_on <<
"\n"
65 _recording_on = recording_on;
67 if ( _recording_on ==
false ) {
72 _root_file_name = root_file_name+
".root";
73 _root_tree_name = root_tree_name;
75 _root_file =
new TFile(_root_file_name.c_str(),
"RECREATE");
77 _tree =
new TTree( _root_tree_name.c_str(), _root_tree_name.c_str());
81 _track_record->CreateBranches(_tree);
88 void DiagnosticsController::skip_current_track(){
90 streamlog_out(DEBUG) <<
" DiagnosticsController::skip_current_track called " <<
std::endl;
92 if ( _recording_on ==
false ) {
97 this->clear_track_record();
100 void DiagnosticsController::clear_track_record(){
102 streamlog_out(DEBUG) <<
" DiagnosticsController::clear_track_record called " <<
std::endl;
104 if ( _recording_on ==
false ) {
108 _track_record->error_code = 0 ;
110 _track_record->nsites = 0 ;
112 _track_record->nsites_vxd = 0 ;
113 _track_record->nsites_sit = 0 ;
114 _track_record->nsites_ftd = 0 ;
115 _track_record->nsites_tpc = 0 ;
116 _track_record->nsites_set = 0 ;
118 _track_record->x_mcp = 0 ;
119 _track_record->y_mcp = 0 ;
120 _track_record->z_mcp = 0 ;
122 _track_record->px_mcp = 0 ;
123 _track_record->py_mcp = 0 ;
124 _track_record->pz_mcp = 0 ;
125 _track_record->p_mcp = 0 ;
126 _track_record->theta_mcp = 0 ;
127 _track_record->phi_mcp = 0 ;
128 _track_record->pdg_mcp = 0 ;
130 _track_record->d0_mcp = 0 ;
131 _track_record->phi0_mcp = 0 ;
132 _track_record->omega_mcp = 0 ;
133 _track_record->z0_mcp = 0 ;
134 _track_record->tanL_mcp = 0 ;
136 _track_record->ndf = 0 ;
137 _track_record->chi2 = 0 ;
138 _track_record->prob = 0 ;
140 _track_record->d0_seed = 0 ;
141 _track_record->phi0_seed = 0 ;
142 _track_record->omega_seed = 0 ;
143 _track_record->z0_seed = 0 ;
144 _track_record->tanL_seed = 0 ;
146 _track_record->seed_ref_point_x = 0 ;
147 _track_record->seed_ref_point_y = 0 ;
148 _track_record->seed_ref_point_z = 0 ;
150 _track_record->cov_seed_d0d0 = 0 ;
151 _track_record->cov_seed_phi0d0 = 0 ;
152 _track_record->cov_seed_phi0phi0 = 0 ;
153 _track_record->cov_seed_kappad0 = 0 ;
154 _track_record->cov_seed_kappaphi0 = 0 ;
155 _track_record->cov_seed_kappakappa = 0 ;
156 _track_record->cov_seed_z0d0 = 0 ;
157 _track_record->cov_seed_z0phi0 = 0 ;
158 _track_record->cov_seed_z0kappa = 0 ;
159 _track_record->cov_seed_z0z0 = 0 ;
160 _track_record->cov_seed_tanLd0 = 0 ;
161 _track_record->cov_seed_tanLphi0 = 0 ;
162 _track_record->cov_seed_tanLkappa = 0 ;
163 _track_record->cov_seed_tanLz0 = 0 ;
164 _track_record->cov_seed_tanLtanL = 0 ;
167 _track_record->d0_ip = 0 ;
168 _track_record->phi0_ip = 0 ;
169 _track_record->omega_ip = 0 ;
170 _track_record->z0_ip = 0 ;
171 _track_record->tanL_ip = 0 ;
173 _track_record->cov_ip_d0d0 = 0 ;
174 _track_record->cov_ip_phi0d0 = 0 ;
175 _track_record->cov_ip_phi0phi0 = 0 ;
176 _track_record->cov_ip_omegad0 = 0 ;
177 _track_record->cov_ip_omegaphi0 = 0 ;
178 _track_record->cov_ip_omegaomega = 0 ;
179 _track_record->cov_ip_z0d0 = 0 ;
180 _track_record->cov_ip_z0phi0 = 0 ;
181 _track_record->cov_ip_z0omega = 0 ;
182 _track_record->cov_ip_z0z0 = 0 ;
183 _track_record->cov_ip_tanLd0 = 0 ;
184 _track_record->cov_ip_tanLphi0 = 0 ;
185 _track_record->cov_ip_tanLomega = 0 ;
186 _track_record->cov_ip_tanLz0 = 0 ;
187 _track_record->cov_ip_tanLtanL = 0 ;
191 _track_record->CellID0[i] = 0 ;
192 _track_record->rejected[i] = 0 ;
194 _track_record->site_x[i] = 0 ;
195 _track_record->site_y[i] = 0 ;
196 _track_record->site_z[i] = 0 ;
198 _track_record->ref_point_x[i] = 0 ;
199 _track_record->ref_point_y[i] = 0 ;
200 _track_record->ref_point_z[i] = 0 ;
202 _track_record->d0_mc[i] = 0 ;
203 _track_record->phi0_mc[i] = 0 ;
204 _track_record->omega_mc[i] = 0 ;
205 _track_record->z0_mc[i] = 0 ;
206 _track_record->tanL_mc[i] = 0 ;
208 _track_record->d0_predicted[i] = 0 ;
209 _track_record->phi0_predicted[i] = 0 ;
210 _track_record->omega_predicted[i] = 0 ;
211 _track_record->z0_predicted[i] = 0 ;
212 _track_record->tanL_predicted[i] = 0 ;
214 _track_record->d0_filtered[i] = 0 ;
215 _track_record->phi0_filtered[i] = 0 ;
216 _track_record->omega_filtered[i] = 0 ;
217 _track_record->z0_filtered[i] = 0 ;
218 _track_record->tanL_filtered[i] = 0 ;
220 _track_record->d0_smoothed[i] = 0 ;
221 _track_record->phi0_smoothed[i] = 0 ;
222 _track_record->omega_smoothed[i] = 0 ;
223 _track_record->z0_smoothed[i] = 0 ;
224 _track_record->tanL_smoothed[i] = 0 ;
227 _track_record->chi2_inc_filtered[i] = 0 ;
228 _track_record->chi2_inc_smoothed[i] = 0 ;
229 _track_record->dim[i] = 0 ;
231 _track_record->cov_predicted_d0d0[i] = 0 ;
232 _track_record->cov_predicted_phi0d0[i] = 0 ;
233 _track_record->cov_predicted_phi0phi0[i] = 0 ;
234 _track_record->cov_predicted_omegad0[i] = 0 ;
235 _track_record->cov_predicted_omegaphi0[i] = 0 ;
236 _track_record->cov_predicted_omegaomega[i] = 0 ;
237 _track_record->cov_predicted_z0d0[i] = 0 ;
238 _track_record->cov_predicted_z0phi0[i] = 0 ;
239 _track_record->cov_predicted_z0omega[i] = 0 ;
240 _track_record->cov_predicted_z0z0[i] = 0 ;
241 _track_record->cov_predicted_tanLd0[i] = 0 ;
242 _track_record->cov_predicted_tanLphi0[i] = 0 ;
243 _track_record->cov_predicted_tanLomega[i] = 0 ;
244 _track_record->cov_predicted_tanLz0[i] = 0 ;
245 _track_record->cov_predicted_tanLtanL[i] = 0 ;
247 _track_record->cov_filtered_d0d0[i] = 0 ;
248 _track_record->cov_filtered_phi0d0[i] = 0 ;
249 _track_record->cov_filtered_phi0phi0[i] = 0 ;
250 _track_record->cov_filtered_omegad0[i] = 0 ;
251 _track_record->cov_filtered_omegaphi0[i] = 0 ;
252 _track_record->cov_filtered_omegaomega[i] = 0 ;
253 _track_record->cov_filtered_z0d0[i] = 0 ;
254 _track_record->cov_filtered_z0phi0[i] = 0 ;
255 _track_record->cov_filtered_z0omega[i] = 0 ;
256 _track_record->cov_filtered_z0z0[i] = 0 ;
257 _track_record->cov_filtered_tanLd0[i] = 0 ;
258 _track_record->cov_filtered_tanLphi0[i] = 0 ;
259 _track_record->cov_filtered_tanLomega[i] = 0 ;
260 _track_record->cov_filtered_tanLz0[i] = 0 ;
261 _track_record->cov_filtered_tanLtanL[i] = 0 ;
263 _track_record->cov_smoothed_d0d0[i] = 0 ;
264 _track_record->cov_smoothed_phi0d0[i] = 0 ;
265 _track_record->cov_smoothed_phi0phi0[i] = 0 ;
266 _track_record->cov_smoothed_omegad0[i] = 0 ;
267 _track_record->cov_smoothed_omegaphi0[i] = 0 ;
268 _track_record->cov_smoothed_omegaomega[i] = 0 ;
269 _track_record->cov_smoothed_z0d0[i] = 0 ;
270 _track_record->cov_smoothed_z0phi0[i] = 0 ;
271 _track_record->cov_smoothed_z0omega[i] = 0 ;
272 _track_record->cov_smoothed_z0z0[i] = 0 ;
273 _track_record->cov_smoothed_tanLd0[i] = 0 ;
274 _track_record->cov_smoothed_tanLphi0[i] = 0 ;
275 _track_record->cov_smoothed_tanLomega[i] = 0 ;
276 _track_record->cov_smoothed_tanLz0[i] = 0 ;
277 _track_record->cov_smoothed_tanLtanL[i] = 0 ;
285 void DiagnosticsController::new_track(MarlinKalTestTrack* trk){
287 if ( _recording_on ==
false ) {
291 if ( _initialised ==
false ){
292 streamlog_out(ERROR) <<
"DiagnosticsController::new_track: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
301 streamlog_out(DEBUG3) <<
" DiagnosticsController::new_track called " <<
std::endl;
303 this->clear_track_record();
305 _current_track = trk;
309 _mcpInfoStored=
false;
315 void DiagnosticsController::set_intial_track_parameters(
double d0,
double phi0,
double omega,
double z0,
double tanL,
double pivot_x,
double pivot_y,
double pivot_z, TKalMatrix& cov){
317 if ( _recording_on ==
false ) {
321 if ( _initialised ==
false ){
322 streamlog_out(ERROR) <<
"DiagnosticsController::set_intial_track_parameters: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
331 streamlog_out(DEBUG3) <<
" DiagnosticsController::set_intial_track_parameters called " <<
std::endl;
333 _track_record->d0_seed= d0;
334 _track_record->phi0_seed= phi0;
335 _track_record->omega_seed= omega;
336 _track_record->z0_seed= z0;
337 _track_record->tanL_seed= tanL;
339 _track_record->seed_ref_point_x = pivot_x ;
340 _track_record->seed_ref_point_y = pivot_y ;
341 _track_record->seed_ref_point_z = pivot_z ;
344 _track_record->cov_seed_d0d0 = cov( 0 , 0 ) ;
345 _track_record->cov_seed_phi0d0 = cov( 1 , 0 ) ;
346 _track_record->cov_seed_phi0phi0 = cov( 1 , 1 ) ;
347 _track_record->cov_seed_kappad0 = cov( 2 , 0 ) ;
348 _track_record->cov_seed_kappaphi0 = cov( 2 , 1 ) ;
349 _track_record->cov_seed_kappakappa = cov( 2 , 2 ) ;
350 _track_record->cov_seed_z0d0 = cov( 3 , 0 ) ;
351 _track_record->cov_seed_z0phi0 = cov( 3 , 1 ) ;
352 _track_record->cov_seed_z0kappa = cov( 3 , 2 ) ;
353 _track_record->cov_seed_z0z0 = cov( 3 , 3 ) ;
354 _track_record->cov_seed_tanLd0 = cov( 4 , 0 ) ;
355 _track_record->cov_seed_tanLphi0 = cov( 4 , 1 ) ;
356 _track_record->cov_seed_tanLkappa = cov( 4 , 2 ) ;
357 _track_record->cov_seed_tanLz0 = cov( 4 , 3 ) ;
358 _track_record->cov_seed_tanLtanL = cov( 4 , 4 ) ;
363 streamlog_out(DEBUG3) <<
" $#$#$# Initial Track Parameters: "
364 <<
"d0 = " << d0 <<
" " <<
"[+/-" <<
sqrt( _track_record->cov_seed_d0d0 ) <<
"] "
365 <<
"phi0 = " << phi0 <<
" " <<
"[+/-" <<
sqrt( _track_record->cov_seed_phi0phi0 ) <<
"] "
366 <<
"omega = " << omega <<
" " <<
"[+/-" <<
sqrt( _track_record->cov_seed_kappakappa ) <<
"] "
367 <<
"z0 = " << z0 <<
" " <<
"[+/-" <<
sqrt( _track_record->cov_seed_z0z0 ) <<
"] "
368 <<
"tanL = " << tanL <<
" " <<
"[+/-" <<
sqrt( _track_record->cov_seed_tanLtanL ) <<
"] "
369 <<
"ref = " << pivot_x <<
" " << pivot_y <<
" " << pivot_z <<
" "
375 void DiagnosticsController::record_rejected_site(ILDVTrackHit* hit, TKalTrackSite* site){
377 if ( _recording_on ==
false ) {
381 if ( _initialised ==
false ){
382 streamlog_out(ERROR) <<
"DiagnosticsController::record_rejected_site: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
392 if(_skip_track)
return;
394 _track_record->rejected[_track_record->nsites] = 1;
395 _track_record->CellID0[_track_record->nsites] = hit->getLCIOTrackerHit()->getCellID0();
398 EVENT::MCParticle* mcp = hit->getLCIOTrackerHit()->ext<MarlinTrk::MCTruth4HitExt>()->simhit->getMCParticle();
400 ++_track_record->nsites;
401 streamlog_out(DEBUG2) <<
"record_rejected_site _track_record->nsites = " << _track_record->nsites <<
" MCParticle of simhit = " << mcp <<
" pdg " << mcp->
getPDG() <<
" energy = " << mcp->
getEnergy() <<
" id = " << mcp->id() <<
std::endl;
406 void DiagnosticsController::record_site(ILDVTrackHit* hit, TKalTrackSite* site){
408 if ( _recording_on ==
false ) {
412 if ( _initialised ==
false ){
413 streamlog_out(ERROR) <<
"DiagnosticsController::record_site: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
422 streamlog_out(DEBUG2) <<
"DiagnosticsController::record_site called " <<
std::endl;
424 if(_skip_track)
return;
428 MarlinTrk::MCTruth4HitExtStruct* ext = trkhit->ext<MarlinTrk::MCTruth4HitExt>();
432 streamlog_out(ERROR) <<
"MCTruth4HitExt not attached to TrackerHit use processor SetTrackerHitExtensions to set them: exit(1) called from file "
446 streamlog_out(ERROR) <<
"SimTrackerHit not attached to TrackerHit using MCTruth4HitExt use processor SetTrackerHitExtensions to set them: exit(1) called from file "
459 if( _track_record->nsites >= 0 ){
461 if ( _mcpInfoStored ==
false ) {
463 streamlog_out(DEBUG2) <<
"DiagnosticsController::record_site store MCParticle parameters for " << mcp <<
" pdg " << mcp->
getPDG() <<
" energy = " << mcp->
getEnergy() <<
" id = " << mcp->id() <<
std::endl;
467 _track_record->x_mcp = mcp->
getVertex()[0];
468 _track_record->y_mcp = mcp->
getVertex()[1];
469 _track_record->z_mcp = mcp->
getVertex()[2];
475 double pt =
sqrt(_track_record->px_mcp*_track_record->px_mcp +
476 _track_record->py_mcp*_track_record->py_mcp ) ;
478 _track_record->p_mcp =
sqrt( pt*pt + _track_record->pz_mcp*_track_record->pz_mcp );
481 _track_record->theta_mcp =
atan2( pt, _track_record->pz_mcp );
482 _track_record->phi_mcp =
atan2( _track_record->py_mcp, _track_record->px_mcp );
484 _track_record->pdg_mcp = mcp->
getPDG();
491 _track_record->d0_mcp= helixMC.getD0();
492 _track_record->phi0_mcp = helixMC.getPhi0();
493 _track_record->omega_mcp = helixMC.getOmega();
494 _track_record->z0_mcp = helixMC.getZ0();
495 _track_record->tanL_mcp = helixMC.getTanLambda();
497 _mcpInfoStored =
true;
500 else if( _currentMCP != mcp ) {
502 streamlog_out(WARNING) <<
"DiagnosticsController::record_site: Track skipped. Not storing tracks formed from more than one MCParticle " <<
std::endl;
516 if (
fabs(sim_mom[0]) < 1.e-09 &&
fabs(sim_mom[1]) < 1.e-09 &&
fabs(sim_mom[2]) < 1.e-09 ) {
518 streamlog_out(ERROR) <<
"Momentum not set in SimTrackerHit exit(1) called from file "
529 _track_record->CellID0[_track_record->nsites] = trkhit->
getCellID0() ;
534 if (encoder[lcio::LCTrackerCellID::subdet()] == lcio::ILDDetID::VXD) {
535 ++_track_record->nsites_vxd;
537 else if (encoder[lcio::LCTrackerCellID::subdet()] == lcio::ILDDetID::SIT) {
538 ++_track_record->nsites_sit;
540 else if (encoder[lcio::LCTrackerCellID::subdet()] == lcio::ILDDetID::FTD) {
541 ++_track_record->nsites_ftd;
543 else if (encoder[lcio::LCTrackerCellID::subdet()] == lcio::ILDDetID::TPC) {
544 ++_track_record->nsites_tpc;
546 else if (encoder[lcio::LCTrackerCellID::subdet()] == lcio::ILDDetID::SET) {
547 ++_track_record->nsites_set;
550 _track_record->chi2_inc_filtered[_track_record->nsites] = site->GetDeltaChi2();
551 _track_record->dim[_track_record->nsites] = site->GetDimension();
560 streamlog_out(DEBUG2) <<
" $#$#$# SimHit Track Parameters: "
561 <<
"x = " << sim_pos[0] <<
" "
562 <<
"y = " << sim_pos[1] <<
" "
563 <<
"z = " << sim_pos[2] <<
" "
564 <<
"px = " << sim_mom[0] <<
" "
565 <<
"py = " << sim_mom[1] <<
" "
566 <<
"pz = " << sim_mom[2] <<
" "
567 <<
"p = " <<
sqrt(sim_mom[0]*sim_mom[0] + sim_mom[1]*sim_mom[1] + sim_mom[2]*sim_mom[2]) <<
" "
568 <<
"d0 = " << helixMC.getD0() <<
" "
569 <<
"phi0 = " << helixMC.getPhi0() <<
" "
570 <<
"omega = " << helixMC.getOmega() <<
" "
571 <<
"z0 = " << helixMC.getZ0() <<
" "
572 <<
"tanL = " << helixMC.getTanLambda() <<
" "
576 _track_record->d0_mc[_track_record->nsites] = helixMC.getD0();
577 _track_record->phi0_mc[_track_record->nsites] = helixMC.getPhi0();
578 _track_record->omega_mc[_track_record->nsites] = helixMC.getOmega();
579 _track_record->z0_mc[_track_record->nsites] = helixMC.getZ0();
580 _track_record->tanL_mc[_track_record->nsites] = helixMC.getTanLambda();
586 _track_record->site_x[_track_record->nsites] = rec_x;
587 _track_record->site_y[_track_record->nsites] = rec_y;
588 _track_record->site_z[_track_record->nsites] = rec_z;
592 const TVector3 tpoint( sim_pos[0], sim_pos[1], sim_pos[2] ) ;
604 TKalTrackState& trkState_predicted = (TKalTrackState&) site->GetState(TVKalSite::kPredicted);
606 THelicalTrack helix_predicted = trkState_predicted.GetHelix() ;
607 TMatrixD c0_predicted(trkState_predicted.GetCovMat());
609 Int_t sdim = trkState_predicted.GetDimension();
612 TKalMatrix DF(sdim,sdim);
614 helix_predicted.MoveTo( tpoint , dPhi , &DF , &c0_predicted) ;
616 streamlog_out(DEBUG2) <<
"DiagnosticsController::record_site get PREDICTED trackstate " <<
std::endl;
618 _current_track->ToLCIOTrackState( helix_predicted, c0_predicted, ts, chi2, ndf );
620 _track_record->d0_predicted[_track_record->nsites] = ts.
getD0() ;
621 _track_record->phi0_predicted[_track_record->nsites] = ts.
getPhi() ;
622 _track_record->omega_predicted[_track_record->nsites] = ts.
getOmega() ;
623 _track_record->z0_predicted[_track_record->nsites] = ts.
getZ0() ;
624 _track_record->tanL_predicted[_track_record->nsites] = ts.
getTanLambda() ;
627 _track_record->cov_predicted_d0d0[_track_record->nsites] = ts.
getCovMatrix()[0];
628 _track_record->cov_predicted_phi0d0[_track_record->nsites] = ts.
getCovMatrix()[1];
629 _track_record->cov_predicted_phi0phi0[_track_record->nsites] = ts.
getCovMatrix()[2];
630 _track_record->cov_predicted_omegad0[_track_record->nsites] = ts.
getCovMatrix()[3];
631 _track_record->cov_predicted_omegaphi0[_track_record->nsites] = ts.
getCovMatrix()[4];
632 _track_record->cov_predicted_omegaomega[_track_record->nsites] = ts.
getCovMatrix()[5];
633 _track_record->cov_predicted_z0d0[_track_record->nsites] = ts.
getCovMatrix()[6];
634 _track_record->cov_predicted_z0phi0[_track_record->nsites] = ts.
getCovMatrix()[7];
635 _track_record->cov_predicted_z0omega[_track_record->nsites] = ts.
getCovMatrix()[8];
636 _track_record->cov_predicted_z0z0[_track_record->nsites] = ts.
getCovMatrix()[9];
637 _track_record->cov_predicted_tanLd0[_track_record->nsites] = ts.
getCovMatrix()[10];
638 _track_record->cov_predicted_tanLphi0[_track_record->nsites] = ts.
getCovMatrix()[11];
639 _track_record->cov_predicted_tanLomega[_track_record->nsites] = ts.
getCovMatrix()[12];
640 _track_record->cov_predicted_tanLz0[_track_record->nsites] = ts.
getCovMatrix()[13];
641 _track_record->cov_predicted_tanLtanL[_track_record->nsites] = ts.
getCovMatrix()[14];
644 streamlog_out(DEBUG2) <<
"DiagnosticsController::record_site get FILTERED trackstate " <<
std::endl;
646 TKalTrackState& trkState_filtered = (TKalTrackState&) site->GetState(TVKalSite::kFiltered);
648 THelicalTrack helix_filtered = trkState_filtered.GetHelix() ;
649 TMatrixD c0_filtered(trkState_filtered.GetCovMat());
652 helix_filtered.MoveTo( tpoint , dPhi , &DF , &c0_filtered) ;
656 _current_track->ToLCIOTrackState( helix_filtered, c0_filtered, ts_f, chi2, ndf );
658 _track_record->d0_filtered[_track_record->nsites] = ts_f.
getD0() ;
659 _track_record->phi0_filtered[_track_record->nsites] = ts_f.
getPhi() ;
660 _track_record->omega_filtered[_track_record->nsites] = ts_f.
getOmega() ;
661 _track_record->z0_filtered[_track_record->nsites] = ts_f.
getZ0() ;
662 _track_record->tanL_filtered[_track_record->nsites] = ts_f.
getTanLambda() ;
665 _track_record->cov_filtered_d0d0[_track_record->nsites] = ts_f.
getCovMatrix()[0];
666 _track_record->cov_filtered_phi0d0[_track_record->nsites] = ts_f.
getCovMatrix()[1];
667 _track_record->cov_filtered_phi0phi0[_track_record->nsites] = ts_f.
getCovMatrix()[2];
668 _track_record->cov_filtered_omegad0[_track_record->nsites] = ts_f.
getCovMatrix()[3];
669 _track_record->cov_filtered_omegaphi0[_track_record->nsites] = ts_f.
getCovMatrix()[4];
670 _track_record->cov_filtered_omegaomega[_track_record->nsites] = ts_f.
getCovMatrix()[5];
671 _track_record->cov_filtered_z0d0[_track_record->nsites] = ts_f.
getCovMatrix()[6];
672 _track_record->cov_filtered_z0phi0[_track_record->nsites] = ts_f.
getCovMatrix()[7];
673 _track_record->cov_filtered_z0omega[_track_record->nsites] = ts_f.
getCovMatrix()[8];
674 _track_record->cov_filtered_z0z0[_track_record->nsites] = ts_f.
getCovMatrix()[9];
675 _track_record->cov_filtered_tanLd0[_track_record->nsites] = ts_f.
getCovMatrix()[10];
676 _track_record->cov_filtered_tanLphi0[_track_record->nsites] = ts_f.
getCovMatrix()[11];
677 _track_record->cov_filtered_tanLomega[_track_record->nsites] = ts_f.
getCovMatrix()[12];
678 _track_record->cov_filtered_tanLz0[_track_record->nsites] = ts_f.
getCovMatrix()[13];
679 _track_record->cov_filtered_tanLtanL[_track_record->nsites] = ts_f.
getCovMatrix()[14];
683 _track_record->ref_point_x[_track_record->nsites] = tpoint.X();
684 _track_record->ref_point_y[_track_record->nsites] = tpoint.Y();
685 _track_record->ref_point_z[_track_record->nsites] = tpoint.Z();
690 ++_track_record->nsites;
694 this->clear_track_record();
695 streamlog_out(DEBUG4) <<
" DiagnosticsController::end_track: Number of site too large. Track Skipped. nsites = " << _track_record->nsites <<
" : maximum number of site allowed = " <<
MAX_SITES <<
std::endl;
700 streamlog_out(DEBUG2) <<
"_track_record->nsites = " << _track_record->nsites <<
std::endl;
703 void DiagnosticsController::end_track(){
707 if ( _recording_on ==
false ) {
711 if ( _initialised ==
false ){
712 streamlog_out(ERROR) <<
"DiagnosticsController::end_track: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
721 streamlog_out(DEBUG3) <<
" DiagnosticsController::end_track called " <<
std::endl;
725 this->clear_track_record();
729 _track_record->chi2 = _current_track->_kaltrack->GetChi2();
730 _track_record->ndf = _current_track->_kaltrack->GetNDF();
731 _track_record->prob = TMath::Prob(_track_record->chi2, _track_record->ndf);
733 TIter it(_current_track->_kaltrack,kIterForward);
735 Int_t nsites = _current_track->_kaltrack->GetEntries();
740 this->clear_track_record();
741 streamlog_out(DEBUG4) <<
" DiagnosticsController::end_track: Number of site too large. Track Skipped. nsites = " << nsites <<
" : maximum number of site allowed = " <<
MAX_SITES <<
std::endl;
746 if( _current_track->_smoothed ){
748 for (Int_t isite=1; isite<nsites; isite++) {
751 encoder.setValue( _track_record->CellID0[isite] );
754 TVKalSite* site =
static_cast<TVKalSite *
>( _current_track->_kaltrack->At(isite));
756 if ( _track_record->rejected[isite] == 0 && encoder[lcio::LCTrackerCellID::subdet()] != 0 ) {
759 _track_record->chi2_inc_smoothed[isite] = site->GetDeltaChi2();
761 TKalTrackState& trkState_smoothed = (TKalTrackState&) site->GetState(TVKalSite::kSmoothed);
763 THelicalTrack helix_smoothed = trkState_smoothed.GetHelix() ;
764 TMatrixD c0_smoothed(trkState_smoothed.GetCovMat());
766 Int_t sdim = trkState_smoothed.GetDimension();
769 const TVector3 tpoint( _track_record->ref_point_x[isite], _track_record->ref_point_y[isite], _track_record->ref_point_z[isite] ) ;
772 TKalMatrix DF(sdim,sdim);
777 helix_smoothed.MoveTo( tpoint , dPhi , &DF , &c0_smoothed) ;
783 _current_track->ToLCIOTrackState( helix_smoothed, c0_smoothed, ts, chi2, ndf );
786 _track_record->d0_smoothed[isite] = ts.
getD0() ;
787 _track_record->phi0_smoothed[isite] = ts.
getPhi() ;
788 _track_record->omega_smoothed[isite] = ts.
getOmega() ;
789 _track_record->z0_smoothed[isite] = ts.
getZ0() ;
790 _track_record->tanL_smoothed[isite] = ts.
getTanLambda() ;
793 _track_record->cov_smoothed_d0d0[isite] = ts.
getCovMatrix()[0];
794 _track_record->cov_smoothed_phi0d0[isite] = ts.
getCovMatrix()[1];
795 _track_record->cov_smoothed_phi0phi0[isite] = ts.
getCovMatrix()[2];
796 _track_record->cov_smoothed_omegad0[isite] = ts.
getCovMatrix()[3];
797 _track_record->cov_smoothed_omegaphi0[isite] = ts.
getCovMatrix()[4];
798 _track_record->cov_smoothed_omegaomega[isite] = ts.
getCovMatrix()[5];
799 _track_record->cov_smoothed_z0d0[isite] = ts.
getCovMatrix()[6];
800 _track_record->cov_smoothed_z0phi0[isite] = ts.
getCovMatrix()[7];
801 _track_record->cov_smoothed_z0omega[isite] = ts.
getCovMatrix()[8];
802 _track_record->cov_smoothed_z0z0[isite] = ts.
getCovMatrix()[9];
803 _track_record->cov_smoothed_tanLd0[isite] = ts.
getCovMatrix()[10];
804 _track_record->cov_smoothed_tanLphi0[isite] = ts.
getCovMatrix()[11];
805 _track_record->cov_smoothed_tanLomega[isite] = ts.
getCovMatrix()[12];
806 _track_record->cov_smoothed_tanLz0[isite] = ts.
getCovMatrix()[13];
807 _track_record->cov_smoothed_tanLtanL[isite] = ts.
getCovMatrix()[14];
819 _current_track->propagate( point, ts_at_ip, chi2, ndf );
821 _track_record->d0_ip = ts_at_ip.
getD0() ;
822 _track_record->phi0_ip = ts_at_ip.
getPhi() ;
823 _track_record->omega_ip = ts_at_ip.
getOmega() ;
824 _track_record->z0_ip = ts_at_ip.
getZ0() ;
828 _track_record->cov_ip_d0d0 = ts_at_ip.
getCovMatrix()[0];
829 _track_record->cov_ip_phi0d0 = ts_at_ip.
getCovMatrix()[1];
830 _track_record->cov_ip_phi0phi0 = ts_at_ip.
getCovMatrix()[2];
831 _track_record->cov_ip_omegad0 = ts_at_ip.
getCovMatrix()[3];
832 _track_record->cov_ip_omegaphi0 = ts_at_ip.
getCovMatrix()[4];
833 _track_record->cov_ip_omegaomega = ts_at_ip.
getCovMatrix()[5];
834 _track_record->cov_ip_z0d0 = ts_at_ip.
getCovMatrix()[6];
835 _track_record->cov_ip_z0phi0 = ts_at_ip.
getCovMatrix()[7];
836 _track_record->cov_ip_z0omega = ts_at_ip.
getCovMatrix()[8];
837 _track_record->cov_ip_z0z0 = ts_at_ip.
getCovMatrix()[9];
838 _track_record->cov_ip_tanLd0 = ts_at_ip.
getCovMatrix()[10];
839 _track_record->cov_ip_tanLphi0 = ts_at_ip.
getCovMatrix()[11];
840 _track_record->cov_ip_tanLomega = ts_at_ip.
getCovMatrix()[12];
841 _track_record->cov_ip_tanLz0 = ts_at_ip.
getCovMatrix()[13];
842 _track_record->cov_ip_tanLtanL = ts_at_ip.
getCovMatrix()[14];
852 void DiagnosticsController::end(){
854 if ( _recording_on ==
false ) {
858 if ( _initialised ==
false ){
859 streamlog_out(ERROR) <<
"DiagnosticsController::end: Diagnostics not initialised call init(std::string root_file_name, std::string root_tree_name, bool recording_off) first : exit(1) called from file "
868 streamlog_out(DEBUG4) <<
" DiagnosticsController::end() called \n"
869 <<
"\t number of tracks written = " << _ntracks_written
870 <<
"\t number of tracks skipped = " << _ntracks_skipped
878 delete _root_file; _root_file = 0;
virtual const double * getPosition() const =0
virtual float getZ0() const
virtual const double * getPosition() const =0
virtual float getOmega() const
virtual int getPDG() const =0
virtual const float * getMomentum() const =0
dd4hep::rec::Vector3D Vector3D
the Vector3D used for the tracking interface
virtual double getEnergy() const =0
virtual MCParticle * getMCParticle() const =0
virtual const double * getVertex() const =0
virtual float getTanLambda() const
virtual float getD0() const
virtual int getCellID0() const =0
virtual const EVENT::FloatVec & getCovMatrix() const
virtual float getCharge() const =0
double moveRefPoint(double x, double y, double z)
virtual const double * getMomentum() const =0
virtual float getPhi() const