11 #include <tracking/modules/trackingPerformanceEvaluation/FillTrackFitNtupleModule.h>
13 #include <mdst/dataobjects/HitPatternCDC.h>
14 #include <mdst/dataobjects/HitPatternVXD.h>
29 setDescription(
"This module fills a ntuple with tracking variables under different hypotheses");
31 addParam(
"outputFileName", m_rootFileName,
"Name of output root file.",
32 std::string(
"TrackingPerformanceEvaluation_output.root"));
33 addParam(
"TracksName", m_TracksName,
"Name of Track collection.", std::string(
""));
34 addParam(
"RecoTracksName", m_RecoTracksName,
"Name of RecoTrack collection.", std::string(
"RecoTracks"));
35 addParam(
"ParticleHypothesis", m_ParticleHypothesis,
"Particle Hypothesis used in the track fit.",
int(211));
49 TString var_list(
"evt:run:exp:prod:nhits:ncdc:npxd:nsvd:seed_x:");
50 var_list += (
"seed_y:seed_z:seed_px:seed_py:seed_pz:seed_p:seed_pt:seed_theta:seed_phi:seed_charge:");
51 var_list += (
"nhits_pi:ncdc_pi:npxd_pi:nsvd_pi:nhits_k:ncdc_k:npxd_k:nsvd_k:nhits_p:ncdc_p:npxd_p:nsvd_p:nhits_d:ncdc_d:npxd_d:nsvd_d:");
52 var_list += (
"flag_pi:flag_k:flag_p:flag_d:");
53 var_list += (
"trk_x_pi:trk_y_pi:trk_z_pi:trk_px_pi:trk_py_pi:trk_pz_pi:trk_p_pi:trk_pt_pi:trk_theta_pi:trk_phi_pi:");
54 var_list += (
"trk_charge_pi:trk_chi2_pi:trk_ndf_pi:trk_pvalue_pi:nfailed_pi:");
55 var_list += (
"trk_x_k:trk_y_k:trk_z_k:trk_px_k:trk_py_k:trk_pz_k:trk_p_k:trk_pt_k:trk_theta_k:trk_phi_k:");
56 var_list += (
"trk_charge_k:trk_chi2_k:trk_ndf_k:trk_pvalue_k:nfailed_k:");
57 var_list += (
"trk_x_p:trk_y_p:trk_z_p:trk_px_p:trk_py_p:trk_pz_p:trk_p_p:trk_pt_p:trk_theta_p:trk_phi_p:");
58 var_list += (
"trk_charge_p:trk_chi2_p:trk_ndf_p:trk_pvalue_p:nfailed_p:");
59 var_list += (
"trk_x_d:trk_y_d:trk_z_d:trk_px_d:trk_py_d:trk_pz_d:trk_p_d:trk_pt_d:trk_theta_d:trk_phi_d:");
60 var_list += (
"trk_charge_d:trk_chi2_d:trk_ndf_d:trk_pvalue_d:nfailed_d:");
61 var_list += (
"cdcf_pi:cdcl_pi:svdf_pi:svdl_pi:");
62 var_list += (
"cdcf_k:cdcl_k:svdf_k:svdl_k:");
63 var_list += (
"cdcf_p:cdcl_p:svdf_p:svdl_p:");
64 var_list += (
"cdcf_d:cdcl_d:svdf_d:svdl_d");
65 m_n_MultiParticle =
new TNtuple(
"nMultiParticle",
"ntuple for multi hyp particle", var_list);
72 Float_t event_num = eventMetaData->getEvent();
73 Float_t event_run = eventMetaData->getRun();
74 Float_t event_exp = eventMetaData->getExperiment();
75 Float_t event_prod = eventMetaData->getProduction();
77 B2DEBUG(29,
"+++++ Loop on Tracks");
80 for (
Track& track : tracks) {
83 if (recoTrack ==
nullptr) {
85 B2WARNING(
" the RecoTrack associated to Track is nullptr!");
96 std::map <Const::ChargedStable, Float_t> flag;
97 std::map <Const::ChargedStable, Float_t> trk_x, trk_y, trk_z, trk_px, trk_py, trk_pz, trk_p, trk_pt, trk_theta, trk_phi;
98 std::map <Const::ChargedStable, Float_t> trk_charge, trk_chi2, trk_ndf, trk_pvalue, trk_nfailed;
99 std::map <Const::ChargedStable, Float_t> nhits_pid, ncdc_pid, nsvd_pid, npxd_pid;
100 std::map <Const::ChargedStable, Float_t> first_cdc, last_cdc, first_svd, last_svd;
103 trk_x[pdgIter] = 0.; trk_y[pdgIter] = 0.; trk_z[pdgIter] = 0.;
104 trk_px[pdgIter] = 0.; trk_py[pdgIter] = 0.; trk_pz[pdgIter] = 0.;
105 trk_p[pdgIter] = 0.; trk_pt[pdgIter] = 0.; trk_theta[pdgIter] = 0.; trk_phi[pdgIter] = 0.;
106 trk_charge[pdgIter] = 0.;
107 trk_chi2[pdgIter] = 0.; trk_ndf[pdgIter] = 0.; trk_pvalue[pdgIter] = 0.; trk_nfailed[pdgIter] = 0.;
108 nhits_pid[pdgIter] = 0.; ncdc_pid[pdgIter] = 0.; nsvd_pid[pdgIter] = 0.; npxd_pid[pdgIter] = 0.;
109 first_cdc[pdgIter] = -100.; last_cdc [pdgIter] = -100.;
110 first_svd[pdgIter] = -100.; last_svd [pdgIter] = -100.;
112 const TrackFitResult* fitResult = track.getTrackFitResult(pdgIter);
113 if ((fitResult !=
nullptr) && (fitResult->
getParticleType() == pdgIter)) {
114 flag[pdgIter] = kTRUE;
116 flag[pdgIter] = kFALSE;
128 trk_theta[pdgIter] = fitResult->
getMomentum().Theta() * TMath::RadToDeg();
129 trk_phi[pdgIter] = fitResult->
getMomentum().Phi() * TMath::RadToDeg();
132 if (isnan(chi2)) chi2 = -10;
133 if (isinf(chi2)) chi2 = -20;
134 trk_chi2[pdgIter] = chi2;
136 trk_pvalue[pdgIter] = fitResult->
getPValue();
138 pdgIter.getPDGCode()))->getNFailedPoints();
142 nhits_pid[pdgIter] = ncdc_pid[pdgIter] + npxd_pid[pdgIter] + nsvd_pid[pdgIter];
149 Float_t buffer[] = {event_num, event_run, event_exp, event_prod,
150 nhits, ncdc, npxd, nsvd,