19#include "FairLogger.h"
20#include "FairRootManager.h"
35 clock_t tStart = clock();
38 cout <<
"\n======================== Upstream track finder exec started ===================\n" << endl;
40 printf(
"Event number: %d\n",
fEventNo);
44 cout <<
"--------------Read-------------" << endl;
49 cout <<
"--------------Reco: MWPCSegments-----" << endl;
52 cout <<
"--------------Reco: MWPCTracks" << endl;
57 cout <<
"--------------Matching Si-tracks & PC-tracks-----" << endl;
61 cout <<
"--------------Matching Si-tracks & PC-segments---" << endl;
65 cout <<
"--------------Adding hits-------------------------" << endl;
70 cout <<
"--------------Fit--------------------------------" << endl;
79 cout <<
"----TrackRecording--------------------------------" << endl;
85 cout <<
"======================== Upstream track finder exec finished ===================" << endl;
86 clock_t tFinish = clock();
95 cout <<
" ---UpMC tracks association--" << endl;
97 Double_t delta2[4] = {-999., -999., -999., -999.};
98 Double_t sig[4] = {0.03, 4., 0.03, 4.};
105 dmc_match[j] = 1000.;
115 cout <<
" MC " << points.size() <<
" UpTracks " << vecUp.size() << endl;
117 Int_t Ngood_mc_tracks = 0;
118 Int_t Ngood_reco_tracks = 0;
119 for (
size_t itr = 0; itr < points.size(); itr++) {
124 cout <<
" Np " << points.at(itr).Np <<
" pdg " << points.at(itr).Pdg << endl;
125 if (
fDebug && points.at(itr).Np >= 7
126 && points.at(itr).np_3si == 0 && (points.at(itr).Np_ch2 > 3 || points.at(itr).Np_ch3 > 3))
132 hY_vs_Xmctrue->Fill(points.at(itr).param[1], points.at(itr).param[3]);
135 cout <<
" itr " << itr <<
" Ngood_mc_tracks " << Ngood_mc_tracks << endl;
136 cout <<
"UpDen" << endl;
139 for (
size_t iup = 0; iup < vecUp.size(); iup++) {
140 delta2[0] = points.at(itr).param[0] - vecUp.at(iup).param[0];
141 delta2[1] = points.at(itr).param[1] - vecUp.at(iup).param[1];
142 delta2[2] = points.at(itr).param[2] - vecUp.at(iup).param[2];
143 delta2[3] = points.at(itr).param[3] - vecUp.at(iup).param[3];
146 dmatch = (delta2[0] * delta2[0]) / (sig[0] * sig[0]) + (delta2[1] * delta2[1]) / (sig[1] * sig[1])
147 + (delta2[2] * delta2[2]) / (sig[2] * sig[2]) + (delta2[3] * delta2[3]) / (sig[3] * sig[3]);
150 if (
fDebug && delta2[0] > -900.)
152 if (
fDebug && delta2[1] > -900.)
154 if (
fDebug && delta2[2] > -900.)
156 if (
fDebug && delta2[3] > -900.)
160 cout <<
" imc " << itr <<
" iup " << iup <<
" Nhits " << vecUp.at(iup).Nhits <<
" ax_mc "
161 << points.at(itr).param[0] <<
" ay_mc " << points.at(itr).param[2] <<
" ax_up "
162 << vecUp.at(iup).param[0] <<
" ay_up " << vecUp.at(iup).param[2] <<
" dmc_match " << dmc_match[itr]
163 <<
" " << dmatch <<
" delta2[0] " << delta2[0] <<
" delta2[1] " << delta2[1] <<
" delta2[2] "
164 << delta2[2] <<
" delta2[3] " << delta2[3] << endl;
166 if (dmc_match[itr] > dmatch) {
167 dmc_match[itr] = dmatch;
168 mc_tr_assoc[itr] = iup;
181 if (mc_tr_assoc[itr] > -1) {
182 cout <<
" mc itr " << itr <<
" rec " << mc_tr_assoc[itr] << endl;
197 cout <<
"reject poorly chosen association segments " << endl;
198 for (
size_t itr = 0; itr < points.size(); itr++) {
199 if (mc_tr_assoc[itr] == -1)
202 for (
size_t itr2 = 0; itr2 < points.size(); itr2++) {
205 if (mc_tr_assoc[itr2] == -1)
208 if (mc_tr_assoc[itr] == mc_tr_assoc[itr2]) {
209 if (dmc_match[itr2] > dmc_match[itr])
210 mc_tr_assoc[itr2] = -1;
212 mc_tr_assoc[itr] = -1;
220 cout <<
" mc_Id " << points.at(itr).Id <<
" pdg " << points.at(itr).Pdg <<
" assoc " << mc_tr_assoc[itr]
222 if (
fDebug && mc_tr_assoc[itr] > -1 &&
fDebug && points.at(itr).Np >= 7
223 && points.at(itr).np_3si == 0 && (points.at(itr).Np_ch2 > 3 || points.at(itr).Np_ch3 > 3))
225 if (points.at(itr).xWas3 && points.at(itr).uWas3 && points.at(itr).vWas3 && points.at(itr).xWas2
226 && points.at(itr).uWas2 && points.at(itr).vWas2)
232 cout <<
"UpNum" << endl;
236 cout <<
" Ngood_mc_tracks " << Ngood_mc_tracks <<
" Ngood_reco_tracks " << Ngood_reco_tracks << endl;
239 hNtr_mc->Fill(Ngood_mc_tracks);
241 if (Ngood_mc_tracks == 2)
245 for (
size_t itr = 0; itr < points.size(); itr++) {
246 if (mc_tr_assoc[itr] > -1)
247 vecUp.at(mc_tr_assoc[itr]).Pdg = points.at(itr).Pdg;
253 Bool_t ifSelectedCases = 0;
255 cout <<
" reco tracks: " << endl;
257 if (Ngood_mc_tracks == 2)
260 if (vecUp.size() == 2 && Ngood_mc_tracks == 2) {
261 for (
size_t iup = 0; iup < vecUp.size(); iup++) {
263 cout <<
" iup " << iup <<
" found code pdg " << vecUp.at(iup).Pdg << endl;
264 if (track1_was == 0) {
267 tt.
track1[0] = vecUp.at(iup).param[0];
268 tt.
track1[1] = vecUp.at(iup).param[1];
269 tt.
track1[2] = vecUp.at(iup).param[2];
270 tt.
track1[3] = vecUp.at(iup).param[3];
272 if (track1_was == 1) {
274 tt.
track2[0] = vecUp.at(iup).param[0];
275 tt.
track2[1] = vecUp.at(iup).param[1];
276 tt.
track2[2] = vecUp.at(iup).param[2];
277 tt.
track2[3] = vecUp.at(iup).param[3];
311 <<
" ifSelectedCases " << ifSelectedCases << endl;
321 cout <<
" alpha " << alpha <<
" CosA " << CosA <<
" ToDeg " << alphaDeg << endl;
325 if (ifNmc2 && ifSelectedCases)
339 cout <<
" MC_SiliconTracks:" << endl;
345 int mcTracksArray[
kMaxMC];
352 mcTracksArray[Id] = -1;
369 if (tr_before != trackId_MC) {
371 mcTracksArray[Nmc_tracks] = trackId_MC;
373 tr_before = trackId_MC;
377 Np_in_3st[Nmc_tracks]++;
379 if (z_MC < -434. && z_MC > -436.)
384 cout <<
" Id " << trackId_MC <<
" x " << x_MC <<
" y " << y_MC <<
" z " << z_MC <<
" st_mc " << st_mc
387 Xmc[Nmc_tracks][st_mc] = x_MC;
388 Ymc[Nmc_tracks][st_mc] = y_MC;
389 Zmc[Nmc_tracks][st_mc] = z_MC;
390 Nst_mc[Nmc_tracks]++;
398 tmpTr.
x_si[
i] = Xmc[Id][
i];
399 tmpTr.
y_si[
i] = Ymc[Id][
i];
400 tmpTr.
z_si[
i] = Zmc[Id][
i];
403 tmpTr.
Id = mcTracksArray[Id];
404 tmpTr.
Np_Si = Nst_mc[Id];
405 if (Np_in_3st[Id] == tmpTr.
Np_Si)
407 if (
fDebug && Np_in_3st[Id] > 0)
408 cout <<
" Np_in_3st " << Np_in_3st[Id] <<
" tmpTr.Np_Si " << tmpTr.
Np_Si <<
" tmpTr.np_3si "
410 if (Nst_mc[Id] >= 2 && Np_in_3st[Id] > 0)
411 vec.push_back(tmpTr);
415 cout <<
" vec_points.size() " <<
vec.size() << endl;
422 cout <<
"----Reco_SiliconTracks:" << endl;
423 for (
Int_t iTrack = 0; iTrack <
fSiTracks->GetEntriesFast(); iTrack++) {
430 cout <<
" SiTr " << iTrack <<
" SiTx " << par->GetTx() <<
" SiX " << par->GetX() <<
" SiTy " << par->GetTy()
431 <<
" SiY " << par->GetY() <<
" SiZ " << par->GetZ() <<
" Nhits " << track->
GetNHits() << endl;
433 par_ab[0][NTracks] = par->GetTx();
434 par_ab[1][NTracks] = par->GetX();
435 par_ab[2][NTracks] = par->GetTy();
436 par_ab[3][NTracks] = par->GetY();
437 par_ab[4][NTracks] = track->
GetNHits();
438 par_z[NTracks] = par->GetZ();
453 cout <<
" Hits from Tracks " << endl;
454 for (
Int_t iSihit = 0; iSihit <
fSilHits->GetEntriesFast(); iSihit++) {
461 cout <<
" st " << st <<
" hit: X " << hit->GetX() <<
" Y " << hit->GetY() <<
" Sigx " << hit->GetDx()
462 <<
" Sigy " << hit->GetDy() << endl;
463 hits[st][NSihits[st]][0] = hit->GetX();
464 hits[st][NSihits[st]][1] = hit->GetY();
465 hits[st][NSihits[st]][2] = hit->GetZ();
466 hits[st][NSihits[st]][3] = hit->GetDx();
467 hits[st][NSihits[st]][4] = hit->GetDy();
468 hits[st][NSihits[st]][5] = hit->
GetModule();
485 if (Z_mwpc >= -859. && Z_mwpc <= -857.)
487 if (Z_mwpc >= -760. && Z_mwpc <= -758.)
489 if (Z_mwpc >= -365. && Z_mwpc <= -363.)
491 if (Z_mwpc >= -215. && Z_mwpc <= -213.)
498 cout <<
" MWPCSeg: ich " << ich <<
" Tx " << segment->
GetParamFirst()->GetTx() <<
" X "
501 par_ab[ich][0][Nseg[ich]] = segment->
GetParamFirst()->GetTx();
502 par_ab[ich][1][Nseg[ich]] = segment->
GetParamFirst()->GetX();
503 par_ab[ich][2][Nseg[ich]] = segment->
GetParamFirst()->GetTy();
504 par_ab[ich][3][Nseg[ich]] = segment->
GetParamFirst()->GetY();
505 par_ab[ich][4][Nseg[ich]] = segment->
GetNHits();
506 par_ab[ich][5][Nseg[ich]] = segment->
GetParamFirst()->GetCovariance(0, 0);
507 par_ab[ich][6][Nseg[ich]] = segment->
GetParamFirst()->GetCovariance(1, 1);
508 par_ab[ich][7][Nseg[ich]] = segment->
GetParamFirst()->GetCovariance(2, 2);
509 par_ab[ich][8][Nseg[ich]] = segment->
GetParamFirst()->GetCovariance(3, 3);
514 par_ab[ich][3][Nseg[ich]] += -
Y_shift;
521 cout <<
"----MC: MWPCSegments" << endl;
537 mcTracksArray[Id] = -1;
538 mcTracksPdg[Id] = -1;
565 if (tr_before != trackId_MC) {
567 mcTracksArray[Nmc_tracks] = hit->
GetHitId();
568 mcTracksPdg[Nmc_tracks] = hit->
GetPdgId();
570 tr_before = trackId_MC;
573 X2mc[Nmc_tracks][pl_MC] = hit->GetX();
576 Npl_MC2[Nmc_tracks]++;
579 X3mc[Nmc_tracks][pl_MC] = hit->GetX();
582 Npl_MC3[Nmc_tracks]++;
592 cout <<
" Nmc_tracks " << Nmc_tracks <<
" MC vec_points.size() " <<
vec.size() << endl;
595 for (
Int_t id = 0;
id < Nmc_tracks;
id++) {
597 cout <<
" id " <<
id <<
" Id_mc " << mcTracksArray[id] <<
" pdg " << mcTracksPdg[id] <<
" Npl2 "
598 << Npl_MC2[id] <<
" Npl3 " << Npl_MC3[id] << endl;
600 for (
size_t itr = 0; itr <
vec.size(); itr++) {
602 if (Npl_MC2[
id] >= 4 || Npl_MC3[
id] >= 4) {
603 if (
vec.at(itr).Id == mcTracksArray[
id]) {
604 vec.at(itr).Pdg = mcTracksPdg[id];
605 vec.at(itr).Np_ch2 = Npl_MC2[id];
606 vec.at(itr).Np_ch3 = Npl_MC3[id];
607 vec.at(itr).Np_P = Npl_MC2[id] + Npl_MC3[id];
608 vec.at(itr).Np =
vec.at(itr).Np_P +
vec.at(itr).Np_Si;
611 if (X3mc[
id][5] > -900.)
613 if (i3 < 0 && X3mc[
id][4] > -900.)
615 if (i3 < 0 && X3mc[
id][3] > -900.)
619 if (isi < 0 &&
vec.at(itr).x_si[1] > -900.)
621 if (isi < 0 &&
vec.at(itr).x_si[2] > -900.)
624 vec.at(itr).param[0] = (
vec.at(itr).x_si[isi] -
vec.at(itr).x_si[3])
625 / (
vec.at(itr).z_si[isi] -
vec.at(itr).z_si[3]);
626 vec.at(itr).param[1] =
627 vec.at(itr).param[0] * (-350 -
vec.at(itr).z_si[3]) +
vec.at(itr).x_si[3];
628 vec.at(itr).param[2] = (
vec.at(itr).y_si[isi] -
vec.at(itr).y_si[3])
629 / (
vec.at(itr).z_si[isi] -
vec.at(itr).z_si[3]);
630 vec.at(itr).param[3] =
631 vec.at(itr).param[2] * (-350 -
vec.at(itr).z_si[3]) +
vec.at(itr).y_si[3];
634 cout <<
" si mc: x3 " <<
vec.at(itr).x_si[3] <<
" z3 " <<
vec.at(itr).z_si[3] <<
" UpX "
635 <<
vec.at(itr).param[1] << endl;
637 if (X2mc[
id][0] > -900. || X2mc[
id][3] > -900.)
638 vec.at(itr).xWas2 = 1;
639 if (X2mc[
id][1] > -900. || X2mc[
id][4] > -900.)
640 vec.at(itr).vWas2 = 1;
641 if (X2mc[
id][2] > -900. || X2mc[
id][5] > -900.)
642 vec.at(itr).uWas2 = 1;
644 if (X3mc[
id][0] > -900. || X3mc[
id][3] > -900.)
645 vec.at(itr).xWas3 = 1;
646 if (X3mc[
id][1] > -900. || X3mc[
id][4] > -900.)
647 vec.at(itr).vWas3 = 1;
648 if (X3mc[
id][2] > -900. || X3mc[
id][5] > -900.)
649 vec.at(itr).uWas3 = 1;
659 cout <<
"----MCtrue all systems, size: " <<
vec.size() << endl;
660 for (
size_t itr = 0; itr <
vec.size(); itr++) {
661 cout <<
" itr " << itr <<
" Id " <<
vec.at(itr).Id <<
" Np_Si " <<
vec.at(itr).Np_Si <<
" Np_P "
662 <<
vec.at(itr).Np_P <<
" Np_ch2 " <<
vec.at(itr).Np_ch2 <<
" Np_ch3 " <<
vec.at(itr).Np_ch3
664 cout <<
" itr " << itr <<
" Id " <<
vec.at(itr).Id <<
" Up: ax " <<
vec.at(itr).param[0] <<
" bx "
665 <<
vec.at(itr).param[1] <<
" ay " <<
vec.at(itr).param[2] <<
" by " <<
vec.at(itr).param[3]
692 if (Z >= -809. && Z <= -807.)
694 if (Z >= -290. && Z <= -288.)
700 cout <<
" MWPCTr: ip " << iTr <<
" Tx " << track->
GetParamFirst()->GetTx() <<
" X "
704 par_ab[ip][0][NTracks[ip]] = track->
GetParamFirst()->GetTx();
706 par_ab[ip][2][NTracks[ip]] = track->
GetParamFirst()->GetTy();
708 par_ab[ip][4][NTracks[ip]] = track->
GetNHits();
709 par_ab[ip][5][NTracks[ip]] = track->
GetParamFirst()->GetCovariance(0, 0);
710 par_ab[ip][6][NTracks[ip]] = track->
GetParamFirst()->GetCovariance(1, 1);
711 par_ab[ip][7][NTracks[ip]] = track->
GetParamFirst()->GetCovariance(2, 2);
712 par_ab[ip][8][NTracks[ip]] = track->
GetParamFirst()->GetCovariance(3, 3);
715 par_ab[1][1][NTracks[ip]] += -
X_shift;
716 par_ab[1][3][NTracks[ip]] += -
Y_shift;
738 vector<Smatch>& vec_m,
746 cout <<
" NTracksSi " << NTracksSi <<
" NPCTracks[1] " <<
NPCTracks[1] << endl;
748 for (
Int_t iSi = 0; iSi < NTracksSi; ++iSi) {
751 Double_t dz = par_PCz[1][iPCtr] - par_Siz[iSi];
753 Double_t dAx = par_Si[0][iSi] - par_PC[1][0][iPCtr];
754 Double_t dAy = par_Si[2][iSi] - par_PC[1][2][iPCtr];
755 Double_t dX = (par_Si[0][iSi] * dz + par_Si[1][iSi]) - par_PC[1][1][iPCtr];
756 Double_t dY = (par_Si[2][iSi] * dz + par_Si[3][iSi]) - par_PC[1][3][iPCtr];
764 cout <<
" Si(" << iSi <<
")-P1(" << iPCtr <<
"): dAx(" <<
cutAx <<
") " << dAx <<
" dAy(" <<
cutAy
765 <<
") " << dAy <<
" dX(" <<
cutX <<
") " << dX <<
" dY(" <<
cutY <<
") " << dY << endl;
768 cout <<
"after cuts: Si " << iSi <<
"- P1 " << iPCtr << endl;
769 Double_t Chi2_match = dX * dX + 0.25 * dY * dY;
775 tmpSeg.
Nhits1 = par_Si[4][iSi];
776 tmpSeg.
Nhits2 = par_PC[1][4][iPCtr];
777 tmpSeg.
Z1 = par_Siz[iSi];
778 tmpSeg.
Z2 = par_PCz[1][iPCtr];
781 tmpSeg.
Chi2m = Chi2_match;
785 for (
int ipar = 0; ipar < 4; ipar++) {
786 tmpSeg.
param1[ipar] = par_Si[ipar][iSi];
787 tmpSeg.
param2[ipar] = par_PC[1][ipar][iPCtr];
789 vec_m.push_back(tmpSeg);
801 cout <<
" --End PCtracks: size " <<
vtmpSeg.size() << endl;
809 cout <<
"PCTracksSiTracksMatching: OutVector.size() " << Out.size() << endl;
810 for (
size_t iter = 0; iter < Out.size(); ++iter) {
812 printf(
" OutVector.at(%zu): %8.4f | Si %d - PC %d Seg2 %d - Seg3 %d\n", iter, Out.at(iter).Chi2m,
813 Out.at(iter).Ind1, Out.at(iter).Ind2, Out.at(iter).Inds2, Out.at(iter).Inds3);
825 vector<Smatch>& vec_m,
833 cout <<
" ----Matching: PC segments Ch2 ---" << endl;
835 cout <<
" NTracksSi " << NTracksSi <<
" NSegPC[2] " << NSegPC[2] << endl;
836 for (
int iSi = 0; iSi < NTracksSi; ++iSi) {
837 for (
int iseg2 = 0; iseg2 < NSegPC[2]; ++iseg2) {
839 Double_t dz2 = par_PCz[2][iseg2] - par_Siz[iSi];
841 Double_t X_extr2 = par_Si[0][iSi] * dz2 + par_Si[1][iSi];
842 Double_t Y_extr2 = par_Si[2][iSi] * dz2 + par_Si[3][iSi];
844 Double_t dX = X_extr2 - par_PC[2][1][iseg2];
845 Double_t dY = Y_extr2 - par_PC[2][3][iseg2];
851 cout <<
" Si[" << iSi <<
"]-Seg2[" << iseg2 <<
"] : dX(" <<
cutX <<
") " << dX <<
" dY(" <<
cutY <<
") "
857 cout <<
" cuts ok:iseg2 " << iseg2 << endl;
858 RecordCandidateSeg(iSi, iseg2, iseg3, par_Si, par_PC, par_Siz, par_PCz, dX, dY, vec_m);
865 cout <<
" --End PCiseg2 : now vec_m.size " << vec_m.size() << endl;
872 cout <<
" ----Matching: PC segments Ch3 ---" << endl;
874 cout <<
" NTracksSi " << NTracksSi <<
" NSegPC[3] " << NSegPC[3] << endl;
875 for (
int iSi = 0; iSi <
NSiTracks; ++iSi) {
876 for (
int iseg3 = 0; iseg3 < NSegPC[3]; ++iseg3) {
878 Double_t dz3 = par_PCz[3][iseg3] - par_Siz[iSi];
879 Double_t X_extr3 = par_Si[0][iSi] * dz3 + par_Si[1][iSi];
880 Double_t Y_extr3 = par_Si[2][iSi] * dz3 + par_Si[3][iSi];
882 Double_t dX = X_extr3 - par_PC[3][1][iseg3];
883 Double_t dY = Y_extr3 - par_PC[3][3][iseg3];
888 cout <<
" Si[" << iSi <<
"]-Seg3[" << iseg3 <<
"] : dX(" <<
cutX <<
") " << dX <<
" dY(" <<
cutY <<
") "
893 RecordCandidateSeg(iSi, iseg2, iseg3, par_Si, par_PC, par_Siz, par_PCz, dX, dY, vec_m);
900 cout <<
" --End PCiseg3 : now vec_m.size " << vec_m.size() << endl;
902 if (vec_m.size() > 0) {
907 cout <<
" vec_m.size() " << vec_m.size() <<
" Out.size() " << Out.size() << endl;
923 vector<Smatch>& vtmp)
927 cout <<
" RecordCandidateSeg: Inds: seg2 " << is2 <<
" seg3 " << is3 << endl;
936 Double_t Chi2_match = dx * dx + 0.25 * dy * dy;
942 tmpSeg.
Z1 = par_Siz[iSi];
943 tmpSeg.
Zs2 = ZPC[ich][iseg];
946 tmpSeg.
Chi2m = Chi2_match;
948 cout <<
" iSi " << iSi <<
" iseg2 " << is2 <<
" iseg3 " << is3 <<
" dX " << dx <<
" dY " << dy <<
" Chi2_match "
949 << Chi2_match << endl;
951 for (
int ipar = 0; ipar < 4; ipar++) {
952 tmpSeg.
param1[ipar] = par_Si[ipar][iSi];
953 tmpSeg.
params2[ipar] = par_PC[ich][ipar][iseg];
955 vtmp.push_back(tmpSeg);
966 cout <<
"--RecordingBest: tracks --" << endl;
971 OutVec.push_back(
vec.at(0));
973 cout <<
"--isMatch: Chi2 " <<
vec.at(0).Chi2m << endl;
977 for (
size_t iter = 0; iter <
vec.size(); ++iter) {
979 printf(
" vtmpSeg.at(%zu): %8.4f | %d - %d\n", iter,
vec.at(iter).Chi2m,
vec.at(iter).Ind1,
982 for (
size_t InIter = 0; InIter < OutVec.size(); ++InIter) {
983 if (
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 ||
vec.at(iter).Ind2 == OutVec.at(InIter).Ind2) {
991 cout <<
"--isMatch: Chi2 " <<
vec.at(iter).Chi2m << endl;
992 OutVec.push_back(
vec.at(iter));
997 cout <<
" Now OutVec.size " << OutVec.size() << endl;
1001 cout <<
"--RecordingBest: segs --" << endl;
1007 for (
size_t iter = 0; iter <
vec.size(); ++iter) {
1009 printf(
" vec.at(%zu): %8.4f | Si %d - Seg2 %d - Seg3 %d\n", iter,
vec.at(iter).Chi2m,
vec.at(iter).Ind1,
1010 vec.at(iter).Inds2,
vec.at(iter).Inds3);
1012 for (
size_t InIter = 0; InIter < OutVec.size(); ++InIter) {
1013 if (
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 && OutVec.at(InIter).Ind2 > -1) {
1017 if ((
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 && OutVec.at(InIter).Inds3 > -1)
1018 || (
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 &&
vec.at(iter).Inds2 == OutVec.at(InIter).Inds2))
1023 if ((
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 && OutVec.at(InIter).Inds2 > -1)
1024 || (
vec.at(iter).Ind1 == OutVec.at(InIter).Ind1 &&
vec.at(iter).Inds3 == OutVec.at(InIter).Inds3))
1029 if ((OutVec.at(InIter).Inds2 > -1 &&
vec.at(iter).Inds2 == OutVec.at(InIter).Inds2)
1030 || (OutVec.at(InIter).Inds3 > -1 &&
vec.at(iter).Inds3 == OutVec.at(InIter).Inds3))
1037 cout <<
" writing unique index " << endl;
1040 cout <<
"--isMatch: Chi2 " <<
vec.at(iter).Chi2m <<
" Inds2 " <<
vec.at(iter).Inds2 <<
" Inds3 "
1041 <<
vec.at(iter).Inds3 << endl;
1042 OutVec.push_back(
vec.at(iter));
1047 cout <<
" RecordingBest: Now OutVec.size " << OutVec.size() << endl;
1048 for (
size_t iter = 0; iter < OutVec.size(); ++iter) {
1050 cout <<
" iter " << iter <<
" index: Si:" << OutVec.at(iter).Ind1 <<
" PCtr: " << OutVec.at(iter).Ind2
1051 <<
" PCseg2: " << OutVec.at(iter).Inds2 <<
" PCseg3: " << OutVec.at(iter).Inds3 << endl;
1066 cout <<
"--GetAddSiHits--" << endl;
1068 for (
size_t iter = 0; iter < Out.size(); ++iter) {
1070 printf(
" Out.at(%zu): %8.4f | Si %d - PC %d Seg2 %d - Seg3 %d\n", iter, Out.at(iter).Chi2m,
1071 Out.at(iter).Ind1, Out.at(iter).Ind2, Out.at(iter).Inds2, Out.at(iter).Inds3);
1074 for (
int st = 1; st <
kNumStSi; ++st) {
1075 for (
int i = 0;
i < 5; ++
i) {
1076 tmp_array[st][
i] = -999.;
1078 for (
int ihit = 0; ihit < Nh[st]; ++ihit) {
1079 if (Out.at(iter).Ind1 == ihit) {
1081 tmp_array[st][0] = hits[st][ihit][0];
1082 tmp_array[st][1] = hits[st][ihit][1];
1083 tmp_array[st][2] = hits[st][ihit][2];
1084 tmp_array[st][3] = hits[st][ihit][3];
1085 tmp_array[st][4] = hits[st][ihit][4];
1086 tmp_array[st][5] = hits[st][ihit][5];
1091 for (
int st = 1; st <
kNumStSi; ++st) {
1092 Out.at(iter).SiCoordX[st] = tmp_array[st][0];
1093 Out.at(iter).SiCoordY[st] = tmp_array[st][1];
1094 Out.at(iter).SiCoordZ[st] = tmp_array[st][2];
1095 Out.at(iter).SiSigmaX[st] = tmp_array[st][3];
1096 Out.at(iter).SiSigmaY[st] = tmp_array[st][4];
1097 Out.at(iter).SiMod[st] = tmp_array[st][5];
1099 cout <<
" st " << st <<
" X " << tmp_array[st][0] <<
" Y " << tmp_array[st][1] <<
" Z "
1100 << tmp_array[st][2] <<
" mod " << tmp_array[st][5] << endl;
1118 cout <<
" ---GetHitsToPoints---" << endl;
1119 for (
size_t iter = 0; iter < Out.size(); iter++) {
1121 cout <<
" silicon points " << endl;
1122 for (
int ist = 1; ist <
kNumStSi; ++ist) {
1124 Points_[iter][ist - 1][0] = Out.at(iter).SiCoordX[ist];
1125 Points_[iter][ist - 1][1] = Out.at(iter).SiCoordY[ist];
1126 Points_[iter][ist - 1][2] = Out.at(iter).SiCoordZ[ist];
1127 Points_[iter][ist - 1][3] = Out.at(iter).SiSigmaX[ist];
1128 Points_[iter][ist - 1][4] = Out.at(iter).SiSigmaY[ist];
1130 cout <<
" X[" << ist <<
"] " << Points_[iter][ist - 1][0] <<
" Y[" << ist <<
"] "
1131 << Points_[ist - 1][ist][1] << endl;
1133 Points_[iter][ist][0] = Out.at(iter).SiCoordX[ist];
1134 Points_[iter][ist][1] = Out.at(iter).SiCoordY[ist];
1135 Points_[iter][ist][2] = Out.at(iter).SiCoordZ[ist];
1136 Points_[iter][ist][3] = Out.at(iter).SiSigmaX[ist];
1137 Points_[iter][ist][4] = Out.at(iter).SiSigmaY[ist];
1139 cout <<
" X[" << ist <<
"] " << Points_[iter][ist][0] <<
" Y[" << ist <<
"] "
1140 << Points_[iter][ist][1] << endl;
1143 for (
int ipctr = 0; ipctr < NPCTracks_[1]; ++ipctr) {
1145 if (Out.at(iter).Ind2 == ipctr) {
1148 Double_t deltaAx = ab_tr[1][7][ipctr];
1149 Double_t deltaAy = ab_tr[1][8][ipctr];
1151 Points_[iter][2][0] =
1152 Out.at(iter).param2[0] * (
Z_Chamber[2] -
Z_pair[1]) + Out.at(iter).param2[1];
1153 Points_[iter][4][0] = Out.at(iter).param2[0] * (
Z_Chamber[3] -
Z_pair[1])
1154 + Out.at(iter).param2[1];
1156 Points_[iter][2][1] =
1157 Out.at(iter).param2[2] * (
Z_Chamber[2] -
Z_pair[1]) + Out.at(iter).param2[3];
1158 Points_[iter][4][1] = Out.at(iter).param2[2] * (
Z_Chamber[3] -
Z_pair[1])
1159 + Out.at(iter).param2[3];
1161 Points_[iter][2][3] =
1163 Points_[iter][2][4] =
1168 cout <<
" MWPCs from track" << endl;
1169 cout <<
" X3 " << Points_[iter][2][0] <<
" X4 " << Points_[iter][4][0]
1171 cout <<
" Y3 " << Points_[iter][2][1] <<
" X4 " << Points_[iter][4][1]
1178 for (
int iseg2 = 0; iseg2 < Nseg_ch_[2]; ++iseg2) {
1179 if (Out.at(iter).Inds2 == iseg2) {
1180 Points_[iter][2][0] = ab_Ch[2][1][iseg2];
1181 Points_[iter][2][1] = ab_Ch[2][3][iseg2];
1185 cout <<
" MWPCs from segment" << endl;
1186 cout <<
" X3 " << Points_[iter][2][0] <<
" Y3 " << Points_[iter][2][1]
1192 for (
int iseg3 = 0; iseg3 < Nseg_ch_[3]; ++iseg3) {
1193 if (Out.at(iter).Inds3 == iseg3) {
1194 Points_[iter][4][0] = ab_Ch[3][1][iseg3];
1195 Points_[iter][4][1] = ab_Ch[3][3][iseg3];
1199 cout <<
" MWPCs from segment" << endl;
1200 cout <<
" X4 " << Points_[iter][4][0] <<
" Y4 " << Points_[iter][4][1] << endl;
1207 NumPoints_ = iter + 1;
1217 cout <<
" Check points before fit " <<
" Zcentr " <<
Zcentr << endl;
1219 for (
int ip = 0; ip < NumPoints_; ++ip) {
1221 for (
int ist = 0; ist <
kPoints; ++ist) {
1224 Points_[ip][ist][2] -=
Zcentr;
1227 if (Points_[ip][ist][0] > -900.)
1229 if (Points_[ip][ist][1] > -900.)
1234 cout <<
" Nhits_before " << Nhits_before << endl;
1238 for (
Int_t j = 0; j < 5; ++j) {
1243 for (
Int_t itr = 0; itr < NumPoints_; ++itr) {
1245 if (Nhits_before < 6)
1252 cout <<
"--GlobalFit--" << endl;
1256 for (
Int_t j = 0; j < 4; ++j) {
1284 for (
Int_t row = 0; row < 4; ++row) {
1285 for (
Int_t col = 0; col < 4; ++col) {
1293 cout <<
"???? InvertMatrix is unsuccessfull ????" << endl;
1296 cout <<
"???? InvertMatrix is unsuccessfull ????" << endl;
1300 Double_t line_[4] = {0., 0., 0., 0.};
1301 for (
Int_t coeff = 0; coeff < 4; ++coeff) {
1302 for (
Int_t iCol = 0; iCol < 4; ++iCol) {
1310 cout <<
" ax " << line_[0] <<
" bx " << line_[1] <<
" ay " << line_[2] <<
" by " << line_[3] << endl;
1325 ChiSquare_ += ((hit - fit) * (hit - fit)) / (sigmaX_2);
1333 cout <<
" ist " << ist <<
" hitx " << hit <<
" fit " << fit <<
" dx " << hit - fit <<
" Z "
1334 <<
Xforglfit[ist][2] <<
" sigma " <<
Xforglfit[ist][3] <<
" ChiSquare_ " << ChiSquare_ << endl;
1345 ChiSquare_ += ((hit - fit) * (hit - fit)) / (sigmaY_2);
1349 cout <<
" ist " << ist <<
" hity " << hit <<
" fit " << fit <<
" dy " << hit - fit <<
" Z "
1350 <<
Xforglfit[ist][2] <<
" sigma " <<
Xforglfit[ist][4] <<
" ChiSquare_ " << ChiSquare_ << endl;
1353 Double_t ChiSquareNdf = ChiSquare_ / (nhits - 4);
1355 if (ChiSquareNdf < kChi2_Max && nhits > 5) {
1357 tmptr.
Chi2 = ChiSquareNdf;
1360 cout <<
" Chi2 " << tmptr.
Chi2 <<
" nhits " << nhits << endl;
1362 cout <<
" ------" << endl;
1364 for (
Int_t iCol = 0; iCol < 4; ++iCol) {
1365 tmptr.
param[iCol] = line_[iCol];
1372 if (tmptr.
CoordX[ist] < -900.)
1379 if (tmptr.
CoordY[ist] < -900.)
1383 tmptr.
Nhits = nhits;
1384 vec.push_back(tmptr);
1395 cout <<
" ------PrintAllTracks: " << vecUp.size() << endl;
1396 for (
size_t itr = 0; itr < vecUp.size(); ++itr) {
1398 cout <<
" itr " << itr <<
" Chi2 " << vecUp.at(itr).Chi2 <<
" Ax " << vecUp.at(itr).param[0] <<
" bx "
1399 << vecUp.at(itr).param[1] <<
" Ay " << vecUp.at(itr).param[2] <<
" by " << vecUp.at(itr).param[3]
1400 <<
" Nhits " << vecUp.at(itr).Nhits << endl;
1402 cout <<
"--X--" << endl;
1404 if (vecUp.at(itr).CoordX[st] < -900.)
1406 Double_t Hit = vecUp.at(itr).CoordX[st];
1407 Double_t Fit = vecUp.at(itr).param[0] * vecUp.at(itr).CoordZ[st] + vecUp.at(itr).param[1];
1409 cout <<
" st " << st <<
" Xhit " << Hit <<
" Xfit " << Fit <<
" Z " << vecUp.at(itr).CoordZ[st] << endl;
1411 cout <<
"--Y--" << endl;
1413 if (vecUp.at(itr).CoordY[st] < -900.)
1415 Double_t Hit = vecUp.at(itr).CoordY[st];
1416 Double_t Fit = vecUp.at(itr).param[2] * vecUp.at(itr).CoordZ[st] + vecUp.at(itr).param[3];
1418 cout <<
" st " << st <<
" Yhit " << Hit <<
" Yfit " << Fit <<
" Z " << vecUp.at(itr).CoordZ[st] << endl;
1423 hAx_fitUp->Fill(vecUp.at(itr).param[0]);
1424 hAy_fitUp->Fill(vecUp.at(itr).param[2]);
1425 hx_fitUp->Fill(vecUp.at(itr).param[1]);
1426 hy_fitUp->Fill(vecUp.at(itr).param[3]);
1428 hy_vs_x_Up->Fill(vecUp.at(itr).param[1], vecUp.at(itr).param[3]);
1430 hNhitsUp->Fill(vecUp.at(itr).Nhits);
1431 hTyTx_Up->Fill(vecUp.at(itr).param[0], vecUp.at(itr).param[2]);
1433 cout <<
"---" << endl;
1440 for (
size_t InIter = 0; InIter < vecUp.size(); ++InIter) {
1460 FairTrackParam trackParaml;
1467 track->
SetChi2(vecUp.at(InIter).Chi2);
1468 track->
SetNHits(vecUp.at(InIter).Nhits);
1483 inv[0] =
m[5] *
m[10] *
m[15] -
m[5] *
m[11] *
m[14] -
m[9] *
m[6] *
m[15] +
m[9] *
m[7] *
m[14]
1484 +
m[13] *
m[6] *
m[11] -
m[13] *
m[7] *
m[10];
1485 inv[4] = -
m[4] *
m[10] *
m[15] +
m[4] *
m[11] *
m[14] +
m[8] *
m[6] *
m[15] -
m[8] *
m[7] *
m[14]
1486 -
m[12] *
m[6] *
m[11] +
m[12] *
m[7] *
m[10];
1487 inv[8] =
m[4] *
m[9] *
m[15] -
m[4] *
m[11] *
m[13] -
m[8] *
m[5] *
m[15] +
m[8] *
m[7] *
m[13]
1488 +
m[12] *
m[5] *
m[11] -
m[12] *
m[7] *
m[9];
1489 inv[12] = -
m[4] *
m[9] *
m[14] +
m[4] *
m[10] *
m[13] +
m[8] *
m[5] *
m[14] -
m[8] *
m[6] *
m[13]
1490 -
m[12] *
m[5] *
m[10] +
m[12] *
m[6] *
m[9];
1491 inv[1] = -
m[1] *
m[10] *
m[15] +
m[1] *
m[11] *
m[14] +
m[9] *
m[2] *
m[15] -
m[9] *
m[3] *
m[14]
1492 -
m[13] *
m[2] *
m[11] +
m[13] *
m[3] *
m[10];
1493 inv[5] =
m[0] *
m[10] *
m[15] -
m[0] *
m[11] *
m[14] -
m[8] *
m[2] *
m[15] +
m[8] *
m[3] *
m[14]
1494 +
m[12] *
m[2] *
m[11] -
m[12] *
m[3] *
m[10];
1495 inv[9] = -
m[0] *
m[9] *
m[15] +
m[0] *
m[11] *
m[13] +
m[8] *
m[1] *
m[15] -
m[8] *
m[3] *
m[13]
1496 -
m[12] *
m[1] *
m[11] +
m[12] *
m[3] *
m[9];
1497 inv[13] =
m[0] *
m[9] *
m[14] -
m[0] *
m[10] *
m[13] -
m[8] *
m[1] *
m[14] +
m[8] *
m[2] *
m[13]
1498 +
m[12] *
m[1] *
m[10] -
m[12] *
m[2] *
m[9];
1499 inv[2] =
m[1] *
m[6] *
m[15] -
m[1] *
m[7] *
m[14] -
m[5] *
m[2] *
m[15] +
m[5] *
m[3] *
m[14] +
m[13] *
m[2] *
m[7]
1500 -
m[13] *
m[3] *
m[6];
1501 inv[6] = -
m[0] *
m[6] *
m[15] +
m[0] *
m[7] *
m[14] +
m[4] *
m[2] *
m[15] -
m[4] *
m[3] *
m[14]
1502 -
m[12] *
m[2] *
m[7] +
m[12] *
m[3] *
m[6];
1503 inv[10] =
m[0] *
m[5] *
m[15] -
m[0] *
m[7] *
m[13] -
m[4] *
m[1] *
m[15] +
m[4] *
m[3] *
m[13]
1504 +
m[12] *
m[1] *
m[7] -
m[12] *
m[3] *
m[5];
1505 inv[14] = -
m[0] *
m[5] *
m[14] +
m[0] *
m[6] *
m[13] +
m[4] *
m[1] *
m[14] -
m[4] *
m[2] *
m[13]
1506 -
m[12] *
m[1] *
m[6] +
m[12] *
m[2] *
m[5];
1507 inv[3] = -
m[1] *
m[6] *
m[11] +
m[1] *
m[7] *
m[10] +
m[5] *
m[2] *
m[11] -
m[5] *
m[3] *
m[10] -
m[9] *
m[2] *
m[7]
1508 +
m[9] *
m[3] *
m[6];
1509 inv[7] =
m[0] *
m[6] *
m[11] -
m[0] *
m[7] *
m[10] -
m[4] *
m[2] *
m[11] +
m[4] *
m[3] *
m[10] +
m[8] *
m[2] *
m[7]
1510 -
m[8] *
m[3] *
m[6];
1511 inv[11] = -
m[0] *
m[5] *
m[11] +
m[0] *
m[7] *
m[9] +
m[4] *
m[1] *
m[11] -
m[4] *
m[3] *
m[9] -
m[8] *
m[1] *
m[7]
1512 +
m[8] *
m[3] *
m[5];
1513 inv[15] =
m[0] *
m[5] *
m[10] -
m[0] *
m[6] *
m[9] -
m[4] *
m[1] *
m[10] +
m[4] *
m[2] *
m[9] +
m[8] *
m[1] *
m[6]
1514 -
m[8] *
m[2] *
m[5];
1515 det =
m[0] * inv[0] +
m[1] * inv[4] +
m[2] * inv[8] +
m[3] * inv[12];
1520 for (
i = 0;
i < 16;
i++)
1521 invOut[
i] = inv[
i] * det;
1532 Double_t X = 999., Y = 999., Z = 999.;
1536 Z = XYZsigXY[iSt][2];
1538 if (XYZsigXY[iSt][0] > -900.) {
1539 X = XYZsigXY[iSt][0];
1540 sigmaX_2 = XYZsigXY[iSt][3] * XYZsigXY[iSt][3];
1542 Amatr_[0][0] += 2 * Z * Z / sigmaX_2;
1543 Amatr_[0][1] += 2 * Z / sigmaX_2;
1544 rhs_[0] += 2 * Z * X / sigmaX_2;
1546 Amatr_[1][0] += 2 * Z / sigmaX_2;
1547 Amatr_[1][1] += 2 / sigmaX_2;
1548 rhs_[1] += 2 * X / sigmaX_2;
1551 if (XYZsigXY[iSt][1] > -900.) {
1552 Y = XYZsigXY[iSt][1];
1553 sigmaY_2 = XYZsigXY[iSt][4] * XYZsigXY[iSt][4];
1555 Amatr_[2][2] += 2 * Z * Z / sigmaY_2;
1556 Amatr_[2][3] += 2 * Z / sigmaY_2;
1557 rhs_[2] += 2 * Z * Y / sigmaY_2;
1559 Amatr_[3][2] += 2 * Z / sigmaY_2;
1560 Amatr_[3][3] += 2 / sigmaY_2;
1561 rhs_[3] += 2 * Y / sigmaY_2;
1564 for (
Int_t coeff = 0; coeff < 4; ++coeff) {
1565 for (
Int_t iCol = 0; iCol < 4; ++iCol) {
1581 cout <<
"BmnUpstreamTracking == Init ==" << endl;
1582 FairRootManager* ioman = FairRootManager::Instance();
1587 cout <<
"BmnUpstreamTracking::Init(): branch " <<
fInputBranchName1 <<
" not found! Task will be deactivated"
1595 cout <<
"BmnUpstreamTracking::Init(): branch " <<
fInputBranchHits <<
" not found! Task will be deactivated"
1603 cout <<
"BmnUpstreamTracking::Init(): branch " <<
fInputBranchName2 <<
" not found! Task will be deactivated"
1610 cout <<
"BmnUpstreamTracking::Init(): branch " <<
fInputBranchName3 <<
" not found! Task will be deactivated"
1618 cout <<
" !expData " << endl;
1622 <<
" not found! Task will be deactivated" << endl;
1629 cout <<
"BmnMwpcHitFinder::Init(): branch " <<
fInputBranchName <<
" not found! Task will be deactivated"
1704 hAx_fitUp =
new TH1D(
"Ax_fitUp",
"Tx_fitUp;[rad]", 200, -0.03, 0.03);
1706 hAy_fitUp =
new TH1D(
"Ay_fitUp",
"Ty_fitUp;[rad]", 200, -0.05, 0.05);
1708 hx_fitUp =
new TH1D(
"x_fitUp",
"x_fitUp;[cm]", 200, -10, 10);
1710 hy_fitUp =
new TH1D(
"y_fitUp",
"y_fitUp;[cm]", 200, -15, 5);
1712 hy_vs_x_Up =
new TH2D(
"y_vs_x_Up",
";X[cm];Y[cm]", 200, -10, 10, 200, -15, 5);
1714 hvertexXYUp =
new TH2D(
"vertexXYUp",
"vertexUp;X[cm];Y[cm]", 200, -10, 10, 200, -10, 10);
1716 hTyTx_Up =
new TH2D(
"hTyTx_Up",
"hTyTx_Up", 100, -0.04, 0.04, 100, -0.04, 0.04);
1721 hNhitsUp =
new TH1D(
"NhitsUp",
"Number of hits", 10, 0.5, 10.5);
1724 hAx_upmc =
new TH1D(
"Ax_upmc",
"Ax_upmc;[rad]", 100, -0.05, 0.05);
1726 hAy_upmc =
new TH1D(
"Ay_upmc",
"Ay_upmc;[rad]", 100, -0.05, 0.05);
1728 hX_upmc =
new TH1D(
"X_upmc",
"X_upmc;[rad]", 100, -10, 10);
1730 hY_upmc =
new TH1D(
"Y_upmc",
"Y_upmc;[rad]", 100, -10, 10);
1750 hY_vs_Xmctrue =
new TH2D(
"Y_vs_Xmctrue",
"mctrue;X[cm];Y[cm]", 200, -10, 10, 200, -15, 5);
1753 hNtr_reco =
new TH1D(
"Ntr_reco",
"N up tr reco", 10, 0, 10);
1755 hNtr_mc =
new TH1D(
"Ntr_mc",
"N up tr mc", 10, 0, 10);
1757 hNtr_mc_vs_reco =
new TH2D(
"Ntr_mc_vs_reco",
"; Nupreco; Nupmctrue", 10, 0, 10, 10, 0, 10);
1761 hAngle_reco =
new TH1D(
"Angle_reco",
"Angle_reco if Nreco = 2 ;[deg];N/0.02^{o}", 200, 0., 4.);
1764 new TH1D(
"Angle_recoifNmc2",
"Angle_reco if Nreco = 2 & Nmc = 2;[deg];N/0.02^{o}", 200, 0., 4.);
1767 new TH1D(
"Angle_recoifNmc2Cases",
"Angle_reco if Nreco = 2 & Nmc = 2 & SelectedCases;[deg];N/0.02^{o}",
1777 hEff_mcuptr->GetXaxis()->SetBinLabel(1,
"2+3 coord");
1778 hEff_mcuptr->GetXaxis()->SetBinLabel(2,
"only 3coord");
1782 if (
i == 2 ||
i == 4)
1783 h =
new TH1D(
Form(
"ResXst%d",
i),
Form(
"ResXst%d",
i), 100, -0.5, 0.5);
1785 h =
new TH1D(
Form(
"ResXst%d",
i),
Form(
"ResXst%d",
i), 150, -0.015, 0.015);
1790 if (
i == 2 ||
i == 4)
1791 h =
new TH1D(
Form(
"ResYst%d",
i),
Form(
"ResYst%d",
i), 100, -0.25, 0.25);
1794 h =
new TH1D(
Form(
"ResYst%d",
i),
Form(
"ResYst%d",
i), 100, -0.4, 0.4);
2027 printf(
"BmnUpstreamTracking: write hists to file... ");
2034 cout <<
"Work time of the UpstreamTrack finder: " <<
workTime <<
" s" << endl;
friend F32vec4 fabs(const F32vec4 &a)
char * Form(const char *fmt,...)
Short_t GetStation() const
Short_t GetMwpcId() const
void SetChi2(Double_t chi2)
void SetParamLast(FairTrackParam &par)
FairTrackParam * GetParamFirst()
Int_t GetNHits() const
Accessors.
FairTrackParam * GetParamLast()
void PrepareArraysToProcessEvent()
Double_t Shift_toCenterOfMagnetAY
vector< UpTracks > vecUpTracks
TString fOutputTracksBranchName
TClonesArray * fBmnHitsArray
void PCTracksSiTracksMatching(Double_t **, Double_t *, Int_t &, Double_t ***, Double_t **, Int_t *, vector< Smatch > &, vector< Smatch > &)
vector< Smatch > OutVector
void RecordCandidateSeg(Int_t &, Int_t &, Int_t &, Double_t **, Double_t ***, Double_t *, Double_t **, Double_t &, Double_t &, vector< Smatch > &)
bool InvertMatrix(Double_t *, Double_t *)
TString fInputBranchName3
void RecordingBest(Int_t &, vector< Smatch > &, vector< Smatch > &)
void PrintAllTracks(vector< UpTracks > &)
TH1D * hAngle_recoifNmc2Cases
vector< MC_points > vec_points
void PCSegmentsSiTracksMatching(Double_t **, Double_t *, Int_t &, Double_t ***, Double_t **, Int_t *, vector< Smatch > &, vector< Smatch > &)
void GetHitsToPoints(vector< Smatch > &, Double_t ***, Int_t *, Double_t ***, Int_t *, Double_t ***, Int_t &)
vector< twotracks > vec_twotracks
void ReadSiliconTracks(Double_t **, Double_t *, Int_t &, vector< MC_points > &)
virtual ~BmnUpstreamTracking()
TString fInputBranchName2
TClonesArray * fMWPCTracks
void ReadMWPCSegments(Double_t ***, Double_t **, Int_t *, vector< MC_points > &)
Double_t Shift_toCenterOfMagnetX
Double_t Shift_toCenterOfMagnetAX
void ReadSiliconHits(Double_t ***, Int_t *)
TString fInputBranchNameSimTrue
static bool compareSegments(const Smatch &a, const Smatch &b)
Double_t Shift_toCenterOfMagnetY
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
void ReadMWPCTracks(Double_t ***, Double_t **, Int_t *)
void MCefficiencyCalculation(vector< MC_points > &, vector< UpTracks > &)
void GlobalFit(Double_t **, Double_t **, Double_t *)
TClonesArray * fMWPCSegments
TClonesArray * fBmnUpstreamTracksArray
Output array of Silicon Hits.
TString fInputBranchName1
void GetAddSiHits(vector< Smatch > &, Double_t ***, Int_t *)
void TrackRecording(vector< UpTracks > &)
void CalculationOfChi2(Double_t ***, Int_t &, vector< UpTracks > &)
TClonesArray * fSiTracksSim
void Close(Option_t *option="") override
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
constexpr Double_t RadToDeg()