20#include "FairRootManager.h"
43 return a.Chi2m < b.Chi2m;
83 delete[]
XVU_Ch[iCh][iPlane];
103 for (
Int_t iBig = 0; iBig <
kBig; ++iBig) {
124 for (
Int_t ii = 0; ii < 4; ii++) {
166 clock_t tStart = clock();
169 cout <<
"\n======================== MWPC track finder exec started ===================\n" << endl;
171 cout <<
"Event number: " <<
fEventNo++ << endl;
208 Int_t First_Chamber = 0;
214 cout <<
" Nbest_pair[0] " <<
Nbest_pair[0] << endl;
241 cout <<
"\n======================== MWPC track finder exec finished ==================" << endl;
242 clock_t tFinish = clock();
254 Float_t X_par_to_target, Y_par_to_target;
256 if (Nbest[iPair] > 0) {
258 cout <<
" Nbest[" << iPair <<
"] " << Nbest[iPair] << endl;
259 for (
Int_t itr = 0; itr < Nbest[iPair]; itr++) {
261 cout <<
" pair " << itr <<
" Chi2_ndf_pair " << Chi2_ndf[iPair][itr] << endl;
263 if (Chi2_ndf[iPair][itr] > 1000.)
267 cout <<
" Chi2_ndf_pair " << Chi2_ndf[iPair][itr] <<
" Nhits_pair[" << iPair <<
"][" << itr <<
"] "
268 << Nhits[iPair][itr] << endl;
269 X_par_to_target = par_ab[iPair][0][itr] * (
Z0_SRC -
kZ_midle_pair[iPair]) + par_ab[iPair][1][itr];
270 Y_par_to_target = par_ab[iPair][2][itr] * (
Z0_SRC -
kZ_midle_pair[iPair]) + par_ab[iPair][3][itr];
271 phi =
TMath::ATan2(par_ab[iPair][2][itr], par_ab[iPair][0][itr]);
277 hYvsX_pair.at(iPair)->Fill(par_ab[iPair][1][itr], par_ab[iPair][3][itr]);
289 Tr->
SetChi2(Chi2_ndf[iPair][itr]);
292 FairTrackParam TrParams;
294 TrParams.SetTx(par_ab[iPair][0][itr]);
295 TrParams.SetTy(par_ab[iPair][2][itr]);
297 for (
Int_t i1 = 0; i1 < 4; i1++) {
298 for (
Int_t j1 = 0; j1 < 4; j1++) {
301 TrParams.SetCovariance(i1, j1, sigma2[iPair][itr][i1][j1]);
316 cout <<
" ---MC tracks association--" << endl;
318 Double_t delta2[4] = {-999., -999., -999., -999.};
319 Double_t sig[4] = {0.04, 0.08, 0.05, 0.08};
326 dmc_match[j] = 1000.;
334 Int_t Ngood_mc_tracks = 0;
335 Int_t Ngood_reco_tracks = 0;
337 for (
size_t itr = 0; itr <
vec.size(); itr++) {
346 cout <<
" PCDen " << endl;
350 for (
Int_t iseg = 0; iseg < Nbest[1]; iseg++) {
351 delta2[0] =
vec.at(itr).param[0] - par_ab[1][0][iseg];
352 delta2[1] =
vec.at(itr).param[1] - par_ab[1][1][iseg];
353 delta2[2] =
vec.at(itr).param[2] - par_ab[1][2][iseg];
354 delta2[3] =
vec.at(itr).param[3] - par_ab[1][3][iseg];
357 dmatch = (delta2[0] * delta2[0]) / (sig[0] * sig[0]) + (delta2[1] * delta2[1]) / (sig[1] * sig[1])
358 + (delta2[2] * delta2[2]) / (sig[2] * sig[2]) + (delta2[3] * delta2[3]) / (sig[3] * sig[3]);
360 if (dmc_match[itr] > dmatch) {
361 dmc_match[itr] = dmatch;
362 mc_tr_assoc[itr] = iseg;
370 if (mc_tr_assoc[itr] > -1) {
371 cout <<
" index_mc " << itr <<
" Np " <<
vec.at(itr).Np <<
" mc_Id " <<
vec.at(itr).Id
372 <<
" index_track " << mc_tr_assoc[itr] <<
375 " dmc_match " << dmc_match[itr] << endl;
390 cout <<
"reject poorly chosen association PC tracks " << endl;
391 for (
size_t itr = 0; itr <
vec.size(); itr++) {
392 if (mc_tr_assoc[itr] == -1)
395 for (
size_t itr2 = 0; itr2 <
vec.size(); itr2++) {
398 if (mc_tr_assoc[itr2] == -1)
401 if (mc_tr_assoc[itr] == mc_tr_assoc[itr2]) {
402 if (dmc_match[itr2] > 20.)
403 mc_tr_assoc[itr2] = -1;
413 cout <<
" mc_Id " <<
vec.at(itr).Id <<
" assoc " << mc_tr_assoc[itr] << endl;
414 if (
fDebug && mc_tr_assoc[itr] > -1 &&
vec.at(itr).Np >= 8) {
415 if (
vec.at(itr).xWas3 &&
vec.at(itr).uWas3 &&
vec.at(itr).vWas3 &&
vec.at(itr).xWas2 &&
vec.at(itr).uWas2
416 &&
vec.at(itr).vWas2)
419 cout <<
" PCNum " << endl;
427 cout <<
"PCp: Ngood_mc_tracks " << Ngood_mc_tracks <<
" Ngood_reco_tracks " << Ngood_reco_tracks << endl;
437 vector<MC_points>&
vec)
440 cout <<
"--ReadSegments--" << endl;
455 mcTracksArray[Id] = -1;
481 if (tr_before != trackId_MC) {
483 mcTracksArray[Nmc_tracks] = hit->
GetHitId();
485 tr_before = trackId_MC;
488 X2mc[Nmc_tracks][pl_MC] = hit->GetX();
489 Y2mc[Nmc_tracks][pl_MC] = hit->GetY();
490 Z2mc[Nmc_tracks][pl_MC] = hit->GetZ();
491 Npl_MC2[Nmc_tracks]++;
494 X3mc[Nmc_tracks][pl_MC] = hit->GetX();
495 Y3mc[Nmc_tracks][pl_MC] = hit->GetY();
496 Z3mc[Nmc_tracks][pl_MC] = hit->GetZ();
497 Npl_MC3[Nmc_tracks]++;
508 cout <<
" Nmc_tracks " << Nmc_tracks << endl;
509 for (
Int_t id = 0;
id < Nmc_tracks;
id++) {
511 cout <<
" id " <<
id <<
" Id_mc " << mcTracksArray[id] <<
" Npl2 " << Npl_MC2[id] <<
" Npl3 "
512 << Npl_MC3[id] << endl;
514 if (
fDebug && X2mc[
id][
i] > -900.)
515 cout <<
" ipl " <<
i <<
" X2 " << X2mc[id][
i] << endl;
516 tmpTr.
x2[
i] = X2mc[id][
i];
517 tmpTr.
y2[
i] = Y2mc[id][
i];
518 tmpTr.
z2[
i] = Z2mc[id][
i];
521 if (
fDebug && X3mc[
id][
i] > -900.)
522 cout <<
" ipl " <<
i <<
" X3 " << X3mc[id][
i] << endl;
523 tmpTr.
x3[
i] = X3mc[id][
i];
524 tmpTr.
y3[
i] = Y3mc[id][
i];
525 tmpTr.
z3[
i] = Z3mc[id][
i];
529 tmpTr.
Id = mcTracksArray[id];
530 tmpTr.
Np2 = Npl_MC2[id];
531 tmpTr.
Np3 = Npl_MC3[id];
532 tmpTr.
Np = Npl_MC2[id] + Npl_MC3[id];
534 if (Npl_MC2[
id] >= 4 || Npl_MC3[
id] >= 4)
535 vec.push_back(tmpTr);
539 cout <<
" MC vec_points.size() " <<
vec.size() << endl;
543 for (
size_t itr = 0; itr <
vec.size(); itr++) {
546 if (
vec.at(itr).x2[5] > -900.)
548 if (i2 < 0 &&
vec.at(itr).x2[4] > -900.)
550 if (i2 < 0 &&
vec.at(itr).x2[3] > -900.)
553 if (
vec.at(itr).x2[i20] < -900.)
555 if (
vec.at(itr).x2[i20] < -900.)
557 if (i2 > -1 &&
vec.at(itr).Np2 > 3) {
558 vec.at(itr).param2[0] =
559 (
vec.at(itr).x2[i20] -
vec.at(itr).x2[i2]) / (
vec.at(itr).z2[i20] -
vec.at(itr).z2[i2]);
560 vec.at(itr).param2[1] = (
vec.at(itr).x2[i20] +
vec.at(itr).x2[i2]) * 0.5;
561 vec.at(itr).param2[2] =
562 (
vec.at(itr).y2[i20] -
vec.at(itr).y2[i2]) / (
vec.at(itr).z2[i20] -
vec.at(itr).z2[i2]);
563 vec.at(itr).param2[3] = (
vec.at(itr).y2[i20] +
vec.at(itr).y2[i2]) * 0.5;
567 if (
vec.at(itr).x3[5] > -900.)
569 if (i3 < 0 &&
vec.at(itr).x3[4] > -900.)
571 if (i3 < 0 &&
vec.at(itr).x3[3] > -900.)
574 if (
vec.at(itr).x3[i30] < -900.)
576 if (
vec.at(itr).x3[i30] < -900.)
579 if (i3 > -1 &&
vec.at(itr).Np3 > 3) {
580 vec.at(itr).param3[0] =
581 (
vec.at(itr).x3[i30] -
vec.at(itr).x3[i3]) / (
vec.at(itr).z3[i30] -
vec.at(itr).z3[i3]);
582 vec.at(itr).param3[1] = (
vec.at(itr).x3[i30] +
vec.at(itr).x3[i3]) * 0.5;
583 vec.at(itr).param3[2] =
584 (
vec.at(itr).y3[i30] -
vec.at(itr).y3[i3]) / (
vec.at(itr).z3[i30] -
vec.at(itr).z3[i3]);
585 vec.at(itr).param3[3] = (
vec.at(itr).y3[i30] +
vec.at(itr).y3[i3]) * 0.5;
588 if (i2 > -1 &&
vec.at(itr).Np2 > 3 && i3 > -1 &&
vec.at(itr).Np3 > 3) {
589 vec.at(itr).param[0] =
590 (
vec.at(itr).x2[i20] -
vec.at(itr).x3[i3]) / (
vec.at(itr).z2[i20] -
vec.at(itr).z3[i3]);
591 vec.at(itr).param[1] = (
vec.at(itr).x2[i20] +
vec.at(itr).x3[i3]) * 0.5;
592 vec.at(itr).param[2] =
593 (
vec.at(itr).y2[i20] -
vec.at(itr).y3[i3]) / (
vec.at(itr).z2[i20] -
vec.at(itr).z3[i3]);
594 vec.at(itr).param[3] = (
vec.at(itr).y2[i20] +
vec.at(itr).y3[i3]) * 0.5;
597 if (
vec.at(itr).x2[0] > -900. ||
vec.at(itr).x2[3] > -900.)
598 vec.at(itr).xWas2 = 1;
599 if (
vec.at(itr).x2[1] > -900. ||
vec.at(itr).x2[4] > -900.)
600 vec.at(itr).vWas2 = 1;
601 if (
vec.at(itr).x2[2] > -900. ||
vec.at(itr).x2[5] > -900.)
602 vec.at(itr).uWas2 = 1;
604 if (
vec.at(itr).x3[0] > -900. ||
vec.at(itr).x3[3] > -900.)
605 vec.at(itr).xWas3 = 1;
606 if (
vec.at(itr).x3[1] > -900. ||
vec.at(itr).x3[4] > -900.)
607 vec.at(itr).vWas3 = 1;
608 if (
vec.at(itr).x3[2] > -900. ||
vec.at(itr).x3[5] > -900.)
609 vec.at(itr).uWas3 = 1;
632 Nhits[iCh][ise] = segment->
GetNHits();
633 Chi2_ndf[iCh][ise] = segment->
GetChi2();
639 for (
Int_t i1 = 0; i1 < 6; i1++) {
640 XVU[iCh][i1][ise] = segment->
GetCoord().at(i1);
641 Clust[iCh][i1][ise] = segment->
GetClust().at(i1);
648 if (
fDebug && Nbest[iChamber] > 0) {
649 for (
Int_t ise = 0; ise < Nbest[iChamber]; ise++) {
650 hChi2_ndf_Ch.at(iChamber)->Fill(Chi2_ndf[iChamber][ise]);
651 hpar_Ax_Ch.at(iChamber)->Fill(par_ab[iChamber][0][ise]);
652 hpar_Bx_Ch.at(iChamber)->Fill(par_ab[iChamber][1][ise]);
653 hpar_Ay_Ch.at(iChamber)->Fill(par_ab[iChamber][2][ise]);
654 hpar_By_Ch.at(iChamber)->Fill(par_ab[iChamber][3][ise]);
658 for (
Int_t i1 = 0; i1 < 6; i1++) {
671 for (
Int_t iBest = 0; iBest < Nbest[chNum]; iBest++) {
673 par_ab[chNum][0][iBest] +=
674 shiftt[chNum][0] + shiftt[chNum][0] * par_ab[chNum][0][iBest] * par_ab[chNum][0][iBest];
675 par_ab[chNum][2][iBest] +=
676 shiftt[chNum][2] + shiftt[chNum][2] * par_ab[chNum][2][iBest] * par_ab[chNum][2][iBest];
677 par_ab[chNum][1][iBest] += shiftt[chNum][1];
678 par_ab[chNum][3][iBest] += shiftt[chNum][3];
715 Int_t Nvariations = 100;
717 vector<match> vtmpSeg;
718 vector<match> OutVector;
725 Int_t Secon_Ch = first_Ch + 1;
729 for (
Int_t bst1 = 0; bst1 < Nbest[first_Ch]; bst1++) {
734 for (
Int_t bst2 = 0; bst2 < Nbest[Secon_Ch]; bst2++) {
738 dAx12 = par_ab[first_Ch][0][bst1] - par_ab[Secon_Ch][0][bst2];
739 dAy12 = par_ab[first_Ch][2][bst1] - par_ab[Secon_Ch][2][bst2];
742 dx_loc = par_ab[first_Ch][1][bst1] - par_ab[Secon_Ch][1][bst2];
743 dy_loc = par_ab[first_Ch][3][bst1] - par_ab[Secon_Ch][3][bst2];
760 if (Chi2_m < min_Chi2m && Nvariat < Nvariations &&
fabs(dx_loc) < 1.5 &&
fabs(dy_loc) < 1.5)
763 tmpSeg.
Chi2m = Chi2_m;
766 tmpSeg.
Nhits1 = Nhits_[first_Ch][bst1];
767 tmpSeg.
Nhits2 = Nhits_[Secon_Ch][bst2];
768 tmpSeg.
distX = dx_loc;
769 tmpSeg.
distY = dy_loc;
771 for (
int ipar = 0; ipar < 4; ipar++) {
772 tmpSeg.
param1[ipar] = par_ab[first_Ch][ipar][bst1];
773 tmpSeg.
param2[ipar] = par_ab[Secon_Ch][ipar][bst2];
776 vtmpSeg.push_back(tmpSeg);
783 if (vtmpSeg.size() < 1)
791 OutVector.push_back(vtmpSeg.at(0));
795 for (
size_t iter = 0; iter < vtmpSeg.size(); ++iter) {
799 for (
size_t InIter = 0; InIter < OutVector.size(); ++InIter) {
800 if (vtmpSeg.at(iter).Ind1 == OutVector.at(InIter).Ind1
801 || vtmpSeg.at(iter).Ind2 == OutVector.at(InIter).Ind2)
809 OutVector.push_back(vtmpSeg.at(iter));
812 if (
fDebug && vtmpSeg.size() > 1)
815 for (
size_t iter = 0; iter < OutVector.size(); ++iter) {
819 Chi2_match_[Pairr][Nbest_pair_[Pairr]] = OutVector.at(iter).Chi2m;
820 best_Ch[first_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Ind1;
821 best_Ch[Secon_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Ind2;
822 Nhits_m[first_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Nhits1;
823 Nhits_m[Secon_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Nhits2;
824 Min_distX[Nbest_pair_[Pairr]] = OutVector.at(iter).distX;
825 Min_distY[Nbest_pair_[Pairr]] = OutVector.at(iter).distY;
827 Nbest_pair_[Pairr]++;
832 for (
Int_t ii = 0; ii < Nbest_pair_[Pairr]; ii++) {
857 cout <<
" SegmentMatching AfterTarget" << endl;
872 Int_t Nvariations = 100;
873 vector<match> vtmpSeg;
874 vector<match> OutVector;
881 Int_t Secon_Ch = first_Ch + 1;
889 for (
Int_t bst1 = 0; bst1 < Nbest[first_Ch]; bst1++) {
895 for (
Int_t bst2 = 0; bst2 < Nbest[Secon_Ch]; bst2++) {
901 dx_loc = par_ab[first_Ch][1][bst1] - par_ab[Secon_Ch][1][bst2];
902 dy_loc = par_ab[first_Ch][3][bst1] - par_ab[Secon_Ch][3][bst2];
903 dAx = par_ab[first_Ch][0][bst1] - par_ab[Secon_Ch][0][bst2];
904 dAy = par_ab[first_Ch][2][bst1] - par_ab[Secon_Ch][2][bst2];
907 (par_ab[Secon_Ch][1][bst2] - par_ab[first_Ch][1][bst1]) / (
kZmid[Secon_Ch] -
kZmid[first_Ch]);
909 (par_ab[Secon_Ch][3][bst2] - par_ab[first_Ch][3][bst1]) / (
kZmid[Secon_Ch] -
kZmid[first_Ch]);
931 cout <<
" x_target " << x_target <<
" fabs(x_target - kX_target) " <<
fabs(x_target -
kX_target)
932 <<
" fabs(y_target - kX_target) " <<
fabs(y_target -
kX_target) << endl;
934 cout <<
" bst1 " << bst1 <<
" bst2 " << bst2 <<
" Chi2_m " << Chi2_m << endl;
939 tmpSeg.
Chi2m = Chi2_m;
942 tmpSeg.
Nhits1 = Nhits_[first_Ch][bst1];
943 tmpSeg.
Nhits2 = Nhits_[Secon_Ch][bst2];
944 tmpSeg.
distX = dx_loc;
945 tmpSeg.
distY = dy_loc;
949 for (
int ipar = 0; ipar < 4; ipar++) {
950 tmpSeg.
param1[ipar] = par_ab[first_Ch][ipar][bst1];
951 tmpSeg.
param2[ipar] = par_ab[Secon_Ch][ipar][bst2];
954 vtmpSeg.push_back(tmpSeg);
960 if (vtmpSeg.size() < 1)
967 Bool_t exist_pair[Nvariations];
968 for (
size_t im = 0; im < vtmpSeg.size(); ++im)
972 for (
size_t im = 0; im < vtmpSeg.size(); ++im) {
975 OutVector.push_back(vtmpSeg.at(im));
976 int InIter = OutVector.size() - 1;
978 cout <<
" im " << im <<
" InIter " << InIter << endl;
981 if (im + 1 < vtmpSeg.size()) {
982 for (
size_t iter = im + 1; iter < vtmpSeg.size(); ++iter) {
984 cout <<
" iter " << iter << endl;
987 if (!exist_pair[iter])
990 cout <<
" vtmpSeg.at(iter).Ind1 " << vtmpSeg.at(iter).Ind1 <<
" OutVector.at(InIter).Ind1 "
991 << OutVector.at(InIter).Ind1 << endl;
992 if (vtmpSeg.at(iter).Ind1 == OutVector.at(InIter).Ind1
993 || vtmpSeg.at(iter).Ind2 == OutVector.at(InIter).Ind2)
994 exist_pair[iter] = 0;
1000 cout <<
" OutVector.at(0).Chi2m " << OutVector.at(0).Chi2m <<
" vtmpSeg.at(0).Chi2m " << vtmpSeg.at(0).Chi2m
1002 if (
fDebug && vtmpSeg.size() > 1)
1005 for (
size_t iter = 0; iter < OutVector.size(); ++iter) {
1007 printf(
"OutVector.at(%zu): %8.4f | %d - %d\n", iter, OutVector.at(iter).Chi2m, OutVector.at(iter).Ind1,
1008 OutVector.at(iter).Ind2);
1011 Chi2_match_[Pairr][Nbest_pair_[Pairr]] = OutVector.at(iter).Chi2m;
1012 best_Ch[first_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Ind1;
1013 best_Ch[Secon_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Ind2;
1014 Nhits_m[first_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Nhits1;
1015 Nhits_m[Secon_Ch][Nbest_pair_[Pairr]] = OutVector.at(iter).Nhits2;
1016 Min_distX[Nbest_pair_[Pairr]] = OutVector.at(iter).distX;
1017 Min_distY[Nbest_pair_[Pairr]] = OutVector.at(iter).distY;
1019 Double_t Ax = (OutVector.at(iter).param2[1] - OutVector.at(iter).param1[1]) / (
ZCh[3] -
ZCh[2]);
1021 Double_t Ay = (OutVector.at(iter).param2[3] - OutVector.at(iter).param1[3]) / (
ZCh[3] -
ZCh[2]);
1033 Nbest_pair_[Pairr]++;
1038 for (
Int_t ii = 0; ii < Nbest_pair_[Pairr]; ii++) {
1046 cout <<
"--Matching efficiency--" << endl;
1048 cout <<
" Nbest_pair_[" << Pairr <<
"] " << Nbest_pair_[Pairr] << endl;
1049 if (
fDebug && Nbest_pair_[Pairr] > 0)
1059 Int_t Npair_dist = 0;
1060 Double_t sig_dx = 1., sig_dy = 1., sig_dax = .006, sig_day = .006;
1063 Float_t X_pair0_to_pair1, Y_pair0_to_pair1;
1064 Double_t phi0, theta0, phi1, theta1;
1066 for (
Int_t pair0 = 0; pair0 < Nbest_p[0]; pair0++) {
1069 Double_t x1 = par_ab_p[0][0][pair0] * (
Z0_SRC - kZ_midle_pair_[0]) + par_ab_p[0][1][pair0];
1070 Double_t y1 = par_ab_p[0][2][pair0] * (
Z0_SRC - kZ_midle_pair_[0]) + par_ab_p[0][3][pair0];
1075 for (
Int_t pair1 = 0; pair1 < Nbest_p[1]; pair1++) {
1078 Double_t x2 = par_ab_p[1][0][pair1] * (
Z0_SRC - kZ_midle_pair_[1]) + par_ab_p[1][1][pair1];
1079 Double_t y2 = par_ab_p[1][2][pair1] * (
Z0_SRC - kZ_midle_pair_[1]) + par_ab_p[1][3][pair1];
1083 Float_t dAx12 = par_ab_p[0][0][pair0] - par_ab_p[1][0][pair1];
1084 Float_t dAy12 = par_ab_p[0][2][pair0] - par_ab_p[1][2][pair1];
1088 Float_t Chi2_m = dX / (sig_dx * sig_dx) + dY / (sig_dy * sig_dy) + dAx12 * dAx12 / (sig_dax * sig_dax)
1089 + dAy12 * dAy12 / (sig_day * sig_day);
1094 if (Chi2_m < min_Chi2m) {
1129 if (
fDebug && min_Chi2m < 50) {
1144 Int_t** ind_best_Ch_,
1149 Int_t** ind_best_pair_,
1151 Int_t** Nhits_pair_,
1158 printf(
"!!! ERROR: Nbest_pair_[%d] > 10\n", chiEl);
1168 for (
Int_t bst = 0; bst < Nbest_pair_[Pair1]; bst++) {
1170 cout <<
"SegmentFit bst " << bst << endl;
1172 Int_t fir = First_Ch;
1173 Int_t sec = First_Ch + 1;
1174 Int_t best1 = ind_best_Ch_[fir][bst];
1175 Int_t best2 = ind_best_Ch_[sec][bst];
1177 int h1[6] = {0, 0, 0, 0, 0, 0};
1178 int h2[6] = {0, 0, 0, 0, 0, 0};
1188 if (XVU_Ch_[fir][
i][best1] > -900.) {
1190 sigm_1[
i] = (Clust_Ch_[fir][
i][best1] *
dw) /
sq12;
1191 sigm2_1[
i] = sigm_1[
i] * sigm_1[
i];
1194 if (XVU_Ch_[sec][
i][best2] > -900.) {
1196 sigm_2[
i] = (Clust_Ch_[sec][
i][best2] *
dw) /
sq12;
1197 sigm2_2[
i] = sigm_2[
i] * sigm_2[
i];
1201 for (
Int_t im = 0; im < 4; im++) {
1202 for (
Int_t ii = 0; ii < 4; ii++) {
1229 for (
Int_t i1 = 0; i1 < 4; i1++) {
1230 for (
Int_t j1 = 0; j1 < 4; j1++) {
1231 A0matr[i1][j1] =
Amatr[i1][j1];
1240 for (
Int_t i1 = 0; i1 < 4; ++i1)
1241 for (
Int_t j1 = 0; j1 < 4; ++j1) {
1243 for (
Int_t k1 = 0; k1 < 4; ++k1) {
1251 for (
Int_t i1 = 0; i1 < 4; i1++) {
1252 par_ab_pair_[Pair1][i1][bst] = 0;
1253 for (
Int_t j1 = 0; j1 < 4; j1++) {
1254 par_ab_pair_[Pair1][i1][bst] +=
bmatr[i1][j1] * matrF[j1];
1260 + par_ab_pair_[Pair1][1][bst];
1262 + par_ab_pair_[Pair1][3][bst];
1266 cout <<
" Xtarget " << Xtarget <<
" Ytarget " << Ytarget << endl;
1267 cout <<
" Pair " << Pair1 <<
" par [0] " << par_ab_pair_[Pair1][0][bst] <<
" par [1] "
1268 << par_ab_pair_[Pair1][1][bst] <<
" par [2] " << par_ab_pair_[Pair1][2][bst] <<
" par [3] "
1269 << par_ab_pair_[Pair1][3][bst] << endl;
1274 Chi2_ndf_pair_[Pair1][bst] = 0;
1279 if (XVU_Ch_[fir][i1][best1] > -900.) {
1280 if (i1 == 0 || i1 == 3)
1281 dx_[i1] = XVU_Ch_[fir][i1][best1] - par_ab_pair_[Pair1][0][bst] * z_gl_[fir][i1]
1282 - par_ab_pair_[Pair1][1][bst];
1283 if (i1 == 2 || i1 == 5)
1284 dx_[i1] = XVU_Ch_[fir][i1][best1]
1285 - 0.5 * (par_ab_pair_[Pair1][0][bst] +
sq3 * par_ab_pair_[Pair1][2][bst]) * z_gl_[fir][i1]
1286 - 0.5 * (par_ab_pair_[Pair1][1][bst] +
sq3 * par_ab_pair_[Pair1][3][bst]);
1287 if (i1 == 1 || i1 == 4)
1288 dx_[i1] = XVU_Ch_[fir][i1][best1]
1289 - 0.5 * (par_ab_pair_[Pair1][0][bst] -
sq3 * par_ab_pair_[Pair1][2][bst]) * z_gl_[fir][i1]
1290 - 0.5 * (par_ab_pair_[Pair1][1][bst] -
sq3 * par_ab_pair_[Pair1][3][bst]);
1291 Chi2_ndf_pair_[Pair1][bst] = Chi2_ndf_pair_[Pair1][bst] + dx_[i1] * dx_[i1] / (sigm2_1[i1]);
1301 if (XVU_Ch_[sec][i2][best2] > -900.) {
1302 if (i2 == 0 || i2 == 3)
1303 dx_[i2] = XVU_Ch_[sec][i2][best2] - par_ab_pair_[Pair1][0][bst] * z_gl_[sec][i2]
1304 - par_ab_pair_[Pair1][1][bst];
1305 if (i2 == 2 || i2 == 5)
1306 dx_[i2] = XVU_Ch_[sec][i2][best2]
1307 - 0.5 * (par_ab_pair_[Pair1][0][bst] +
sq3 * par_ab_pair_[Pair1][2][bst]) * z_gl_[sec][i2]
1308 - 0.5 * (par_ab_pair_[Pair1][1][bst] +
sq3 * par_ab_pair_[Pair1][3][bst]);
1309 if (i2 == 1 || i2 == 4)
1310 dx_[i2] = XVU_Ch_[sec][i2][best2]
1311 - 0.5 * (par_ab_pair_[Pair1][0][bst] -
sq3 * par_ab_pair_[Pair1][2][bst]) * z_gl_[sec][i2]
1312 - 0.5 * (par_ab_pair_[Pair1][1][bst] -
sq3 * par_ab_pair_[Pair1][3][bst]);
1313 Chi2_ndf_pair_[Pair1][bst] = Chi2_ndf_pair_[Pair1][bst] + dx_[i2] * dx_[i2] / (sigm2_2[i2]);
1320 if (Nhits_Ch_[fir][best1] + Nhits_Ch_[sec][best2] > 4)
1321 Chi2_ndf_pair_[Pair1][bst] =
1322 Chi2_ndf_pair_[Pair1][bst] / (Nhits_Ch_[fir][best1] + Nhits_Ch_[sec][best2] - 4);
1326 cout <<
" in fun Chi2_ndf_pair[" << Pair1 <<
"][" << bst <<
"] " << Chi2_ndf_pair_[Pair1][bst] << endl;
1328 ind_best_pair_[Pair1][bst] = bst;
1329 Nhits_pair_[Pair1][bst] = Nhits_Ch_[fir][best1] + Nhits_Ch_[sec][best2];
1330 for (
Int_t i1 = 0; i1 < 4; i1++) {
1331 for (
Int_t j1 = 0; j1 < 4; j1++) {
1332 sigma2_p[Pair1][bst][i1][j1] = 2 *
bmatr[i1][j1];
1348 Float_t z2_[6] = {z[chN][0] * z[chN][0], z[chN][1] * z[chN][1], z[chN][2] * z[chN][2],
1349 z[chN][3] * z[chN][3], z[chN][4] * z[chN][4], z[chN][5] * z[chN][5]};
1351 AA[0][0] += 2 * z2_[0] * h_[0] / sigmm2[0] + z2_[2] * h_[2] / (2 * sigmm2[2]) + z2_[1] * h_[1] / (2 * sigmm2[1])
1352 + 2 * z2_[3] * h_[3] / sigmm2[3] + z2_[5] * h_[5] / (2 * sigmm2[5])
1353 + z2_[4] * h_[4] / (2 * sigmm2[4]);
1354 AA[0][1] += 2 * z[chN][0] * h_[0] / sigmm2[0] + z[chN][2] * h_[2] / (2 * sigmm2[2])
1355 + z[chN][1] * h_[1] / (2 * sigmm2[1]) + 2 * z[chN][3] * h_[3] / sigmm2[3]
1356 + z[chN][5] * h_[5] / (2 * sigmm2[5]) + z[chN][4] * h_[4] / (2 * sigmm2[4]);
1358 * (z2_[2] * h_[2] / (2 * sigmm2[2]) - z2_[1] * h_[1] / (2 * sigmm2[1])
1359 + z2_[5] * h_[5] / (2 * sigmm2[5]) - z2_[4] * h_[4] / (2 * sigmm2[4]));
1361 * (z[chN][2] * h_[2] / (2 * sigmm2[2]) - z[chN][1] * h_[1] / (2 * sigmm2[1])
1362 + z[chN][5] * h_[5] / (2 * sigmm2[5]) - z[chN][4] * h_[4] / (2 * sigmm2[4]));
1363 AA[1][0] = AA[0][1];
1364 AA[1][1] += 2 * h_[0] / sigmm2[0] + 0.5 * h_[2] / sigmm2[2] + 0.5 * h_[1] / sigmm2[1] + 2 * h_[3] / sigmm2[3]
1365 + 0.5 * h_[5] / sigmm2[5] + 0.5 * h_[4] / sigmm2[4];
1367 * (z[chN][2] * h_[2] / sigmm2[2] - z[chN][1] * h_[1] / sigmm2[1] + z[chN][5] * h_[5] / sigmm2[5]
1368 - z[chN][4] * h_[4] / sigmm2[4])
1370 AA[1][3] +=
sq3 * (h_[2] / sigmm2[2] - h_[1] / sigmm2[1] + h_[5] / sigmm2[5] - h_[4] / sigmm2[4]) * 0.5;
1371 AA[2][0] = AA[0][2];
1372 AA[2][1] = AA[1][2];
1374 * (z2_[2] * h_[2] / sigmm2[2] + z2_[1] * h_[1] / sigmm2[1] + z2_[5] * h_[5] / sigmm2[5]
1375 + z2_[4] * h_[4] / sigmm2[4])
1378 * (z[chN][2] * h_[2] / sigmm2[2] + z[chN][1] * h_[1] / sigmm2[1] + z[chN][5] * h_[5] / sigmm2[5]
1379 + z[chN][4] * h_[4] / sigmm2[4])
1381 AA[3][0] = AA[0][3];
1382 AA[3][1] = AA[1][3];
1383 AA[3][2] = AA[2][3];
1385 3.0 * (0.5 * h_[2] / sigmm2[2] + 0.5 * h_[1] / sigmm2[1] + 0.5 * h_[5] / sigmm2[5] + 0.5 * h_[4] / sigmm2[4]);
1405 F[0] += 2 * XVU_[ichNum][0][ise] * z[ichNum][0] * h_[0] / sigmm2[0]
1406 + XVU_[ichNum][1][ise] * z[ichNum][1] * h_[1] / sigmm2[1]
1407 + XVU_[ichNum][2][ise] * z[ichNum][2] * h_[2] / sigmm2[2]
1408 + 2 * XVU_[ichNum][3][ise] * z[ichNum][3] * h_[3] / sigmm2[3]
1409 + XVU_[ichNum][4][ise] * z[ichNum][4] * h_[4] / sigmm2[4]
1410 + XVU_[ichNum][5][ise] * z[ichNum][5] * h_[5] / sigmm2[5];
1411 F[1] += 2 * XVU_[ichNum][0][ise] * h_[0] / sigmm2[0] + XVU_[ichNum][1][ise] * h_[1] / sigmm2[1]
1412 + XVU_[ichNum][2][ise] * h_[2] / sigmm2[2] + 2 * XVU_[ichNum][3][ise] * h_[3] / sigmm2[3]
1413 + XVU_[ichNum][4][ise] * h_[4] / sigmm2[4] + XVU_[ichNum][5][ise] * h_[5] / sigmm2[5];
1415 * (-XVU_[ichNum][1][ise] * z[ichNum][1] * h_[1] / sigmm2[1]
1416 + XVU_[ichNum][2][ise] * z[ichNum][2] * h_[2] / sigmm2[2]
1417 - XVU_[ichNum][4][ise] * z[ichNum][4] * h_[4] / sigmm2[4]
1418 + XVU_[ichNum][5][ise] * z[ichNum][5] * h_[5] / sigmm2[5]);
1420 * (-XVU_[ichNum][1][ise] * h_[1] / sigmm2[1] + XVU_[ichNum][2][ise] * h_[2] / sigmm2[2]
1421 - XVU_[ichNum][4][ise] * h_[4] / sigmm2[4] + XVU_[ichNum][5][ise] * h_[5] / sigmm2[5]);
1433 for (
Int_t i1 = 0; i1 < 4; i1++)
1434 for (
Int_t j1 = 0; j1 < 4; j1++)
1440 for (
Int_t i1 = 0; i1 < 4; i1++) {
1441 for (
Int_t j1 = i1 + 1; j1 < 4; j1++) {
1442 if (
fabs(AA[i1][i1]) <
fabs(AA[j1][i1])) {
1443 for (
Int_t l1 = 0; l1 < 4; l1++)
1444 temp[l1] = AA[i1][l1];
1445 for (
Int_t l1 = 0; l1 < 4; l1++)
1446 AA[i1][l1] = AA[j1][l1];
1447 for (
Int_t l1 = 0; l1 < 4; l1++)
1448 AA[j1][l1] = temp[l1];
1449 for (
Int_t l1 = 0; l1 < 4; l1++)
1450 temp[l1] = bb[i1][l1];
1451 for (
Int_t l1 = 0; l1 < 4; l1++)
1452 bb[i1][l1] = bb[j1][l1];
1453 for (
Int_t l1 = 0; l1 < 4; l1++)
1454 bb[j1][l1] = temp[l1];
1457 factor = AA[i1][i1];
1458 for (
Int_t j1 = 4 - 1; j1 > -1; j1--) {
1459 bb[i1][j1] /= factor;
1460 AA[i1][j1] /= factor;
1462 for (
Int_t j1 = i1 + 1; j1 < 4; j1++) {
1463 factor = -AA[j1][i1];
1464 for (
Int_t k1 = 0; k1 < 4; k1++) {
1465 AA[j1][k1] += AA[i1][k1] * factor;
1466 bb[j1][k1] += bb[i1][k1] * factor;
1470 for (
Int_t i1 = 3; i1 > 0; i1--) {
1471 for (
Int_t j1 = i1 - 1; j1 > -1; j1--) {
1472 factor = -AA[j1][i1];
1473 for (
Int_t k1 = 0; k1 < 4; k1++) {
1474 AA[j1][k1] += AA[i1][k1] * factor;
1475 bb[j1][k1] += bb[i1][k1] * factor;
1499 if (
fabs(min_distX) < 5. &&
fabs(min_distY) < 5.5) {
1500 for (
int i1 = 0; i1 < 6; i1++) {
1502 if (XVU_Ch_[ChN][i1][ind_best] > -999. &&
Nhits_Ch[ChN][ind_best] == MinHits)
1506 if (XVU_Ch_[ChN][i1][ind_best] > -999.) {
1519 FairRootManager* ioman = FairRootManager::Instance();
1523 cout <<
" !expData " << endl;
1529 <<
" not found! Task will be deactivated" << endl;
1535 cout <<
" BmnMwpcTrackFinder::Init() " << endl;
1540 cout <<
"BmnMwpcTrackFinder::Init(): branch " <<
fInputBranchName <<
" not found! Task will be deactivated"
1613 for (
Int_t ii = 0; ii < 4; ii++) {
1621 h =
new TH1D(
Form(
"par_Ax_Ch%d",
i),
Form(
"par_Ax_Ch%d",
i), 100, -.4, .4);
1624 h =
new TH1D(
Form(
"par_Bx_Ch%d",
i),
Form(
"par_Bx_Ch%d",
i), 100, -10., 10.0);
1627 h =
new TH1D(
Form(
"par_Ay_Ch%d",
i),
Form(
"par_Ay_Ch%d",
i), 100, -.4, .4);
1630 h =
new TH1D(
Form(
"par_By_Ch%d",
i),
Form(
"par_By_Ch%d",
i), 100, -10., 10.0);
1633 h =
new TH1D(
Form(
"Chi2_ndf_Ch%d",
i),
Form(
"Chi2_ndf_Ch%d",
i), 100, 0., 20.0);
1636 h =
new TH1D(
Form(
"Nomin_Ch%d",
i),
Form(
"Nomin_Ch%d",
i), 6, 0., 6.);
1639 h =
new TH1D(
Form(
"Denom_Ch%d",
i),
Form(
"Denom_Ch%d",
i), 6, 0., 6.);
1642 h =
new TH1D(
Form(
"Efficiency_Ch%d",
i),
Form(
"Efficiency_Ch%d",
i), 6, 0., 6.);
1668 if (
i == 0 ||
i == 2) {
1671 if (
i == 1 ||
i == 3) {
1675 printf(
"Chamber %d Z: %f Zmid: %f\n",
i,
ZCh[
i],
kZmid[
i]);
1681 h =
new TH1D(
Form(
"Chi2_match_pair%d",
i),
Form(
"Chi2_match_pair%d",
i), 100, 0., 100.0);
1684 h =
new TH1D(
Form(
"par_Ax_pair%d",
i),
Form(
"slopeX pair%d; [degrees]; Events",
i), 100, -2.3, 2.3);
1687 h =
new TH1D(
Form(
"par_Bx_pair%d",
i),
Form(
"posX pair%d; [cm]; Events",
i), 100, -10., 10.0);
1690 h =
new TH1D(
Form(
"par_Ay_pair%d",
i),
Form(
"slopeY pair%d; [degrees]; Events",
i), 100, -2.3, 2.3);
1693 h =
new TH1D(
Form(
"par_By_pair%d",
i),
Form(
"posY pair%d; [cm]; Events",
i), 100, -10., 10.0);
1697 h =
new TH1D(
Form(
"Chi2_ndf_pair%d",
i),
Form(
"Chi2_ndf_pair%d",
i), 30, 0., 30.0);
1700 h =
new TH1D(
Form(
"Nbest_pair%d",
i),
Form(
"Nbest_pair%d; Ntracks; Events",
i), 5, 0., 5.);
1703 h =
new TH1D(
Form(
"theta_pair%d",
i),
Form(
"theta_pair%d; [degrees]; Events",
i), 160, 0., 8.);
1706 h =
new TH1D(
Form(
"phi_pair%d",
i),
Form(
"phi_pair%d; [degrees]; Events",
i), 380, -190., 190.);
1710 h =
new TH1D(
Form(
"dX_pair%d",
i),
Form(
"dX_pair%d; cm; Events",
i), 100, -5., 5.);
1713 h =
new TH1D(
Form(
"dY_pair%d",
i),
Form(
"dY_pair%d; cm; Events",
i), 100, -5., 5.);
1716 h =
new TH1D(
Form(
"dAx_pair%d",
i),
Form(
"dAx_pair%d; rad;Events",
i), 100, -.5, .5);
1719 h =
new TH1D(
Form(
"dAy_pair%d",
i),
Form(
"dAy_pair%d; rad;Events",
i), 100, -.5, .5);
1723 h =
new TH1D(
Form(
"X_in_target_pair%d",
i),
Form(
" posX_pair%d in target;[cm]; Events ",
i), 100, -10.,
1727 h =
new TH1D(
Form(
"Y_in_target_pair%d",
i),
Form(
" posY_pair%d in target;[cm]; Events ",
i), 100, -10.,
1733 h1 =
new TH2D(
Form(
"YvsX_pair%d",
i),
Form(
"YvsX_pair%d; X[cm]; Y[cm]",
i), 100, -25, 25, 100, -21, 21);
1737 h1 =
new TH2D(
Form(
"Y_X_in_target_pair%d",
i),
Form(
"posY vs posX pair%d in target; X[cm]; Y[cm]",
i), 150,
1738 -7.5, 7.5, 150, -13., 2.);
1741 h1 =
new TH2D(
Form(
"Ax_bx_in_target_pair%d",
i),
1742 Form(
"slopeX vs posX in target pair%d; posX[cm]; slopeX",
i), 100, -10., 10., 100, -2.3, 2.3);
1745 h1 =
new TH2D(
Form(
"Ay_by_in_target_pair%d",
i),
1746 Form(
"slopeY vs posY in target pair%d; posY[cm]; slopeY",
i), 100, -10., 10., 100, -2.3, 2.3);
1767 for (
Int_t k = 0; k < 4; k++) {
1775 new TH2D(
"Ax_bx_in_target",
"slopeX vs posX in target; posX[cm]; slopeX", 100, -10., 10., 100, -2.3, 2.3);
1778 new TH2D(
"Ay_by_in_target",
"slopeY vs posY in target; posY[cm]; slopeY", 100, -10., 10., 100, -2.3, 2.3);
1781 new TH2D(
"Y_X_in_target",
"posY vs posX (pair0) in target; X[cm]; Y[cm]", 100, -10., 10., 100, -10., 10.);
1784 htheta_p1vsp0 =
new TH2D(
"theta_p1vsp0",
"theta pair1 vs pair0", 160, 0., 3., 160, 0., 3.);
1786 hdX_pair01_vs_x1 =
new TH2D(
"dX_pair01_vs_x1",
"dX(pair0- pair1)_vs_Xpair1;Xpair1[cm];dX(pair0- pair1)[cm]",
1787 100, -10., 10., 100, -10., 10.);
1789 hdY_pair01_vs_y1 =
new TH2D(
"dY_pair01_vs_y1",
"dY(pair0- pair1)_vs_Ypair1;Ypair1[cm];dY(pair0- pair1)[cm]",
1790 100, -10., 10., 100, -10., 10.);
1797 hdX_target =
new TH1D(
"dX_target",
" PosX(pair0-pair1) in target;[cm]; Events ", 200, -10., 10.);
1799 hdY_target =
new TH1D(
"dY_target",
" PosY(pair0-pair1) in target;[cm]; Events ", 200, -10., 10.);
1801 hdAx_target =
new TH1D(
"dAx_target",
"SlopeX(pair0-pair1); rad; Events ", 100, -.05, .05);
1803 hdAy_target =
new TH1D(
"dAy_target",
"SlopeY(pair0-pair1); rad; Events ", 100, -.05, .05);
1805 hChi2_m_target =
new TH1D(
"Chi2_m_target",
"Chi2_m in target;; Events ", 100, 0., 100.);
1809 new TH2D(
"Chi2best_Chi2fake_before_target",
"Chi2best_Chi2fake_before_target; Chi2_best; Chi2_second", 20,
1810 0., 20., 20, 0., 20.);
1813 new TH2D(
"Chi2best_Chi2fake_after_target",
"Chi2best_Chi2fake_after_target; Chi2_best; Chi2_second", 100,
1814 0., 100., 100, 0., 100.);
1832 hDen =
new TH1D(
"hDen",
"hDen", 1, 0, 1);
1834 hNum =
new TH1D(
"hNum",
"hNum", 1, 0, 1);
1836 hEff =
new TH1D(
"hEff",
"hEff", 1, 0, 1);
1839 hYvsX_mc_pair =
new TH2D(
"hYvsX_mc_pair",
"YvsX_mc_pair", 100, -25, 25, 100, -21, 21);
1842 hdAx_tr_mc =
new TH1D(
"hdAx_tr_mc",
"dAx_tr_mc", 200, -0.005, 0.005);
1844 hdX_tr_mc =
new TH1D(
"hdX_tr_mc",
"dX_tr_mc", 200, -0.2, 0.2);
1846 hdAy_tr_mc =
new TH1D(
"hdAy_tr_mc",
"dAy_tr_mc", 200, -0.005, 0.005);
1848 hdY_tr_mc =
new TH1D(
"hdY_tr_mc",
"dY_tr_mc", 200, -0.2, 0.2);
1857 hEff_mctr->GetXaxis()->SetBinLabel(1,
"2+3 coord");
1858 hEff_mctr->GetXaxis()->SetBinLabel(2,
"only 3coord");
1860 hNtrpc_reco =
new TH1D(
"Ntrpc_reco",
";N of pair1 tr reco", 10, 0, 10);
1862 hNtrpc_mc =
new TH1D(
"Ntrpc_mc",
";N of tr pair1 mc", 10, 0, 10);
1864 hNtrpc_mc_vs_reco =
new TH2D(
"Ntrpc_mc_vs_reco",
"Ntr_mc_vs_reco; Nreco;Nmctrue", 10, 0, 10, 10, 0, 10);
1923 for (
int ii = 0; ii < 6; ii++) {
1927 if (ichh == 0 || ichh == 1) {
1928 kZ_loc[ichh][ii] = -0.5 + ii;
1940 if (ichh == 0 || ichh == 1) {
1941 kZ_loc[ichh][ii] = -0.5 + ii;
1968 if (
fRunPeriod == 7 && (ichh == 2 || ichh == 3)) {
1970 kZ_loc[ichh][ii] = -0.5 + ii;
1978 if (
fRunPeriod == 8 && (ichh == 2 || ichh == 3)) {
1992 cout <<
" ich " << ichh <<
" ii " << ii <<
" kZ_loc " <<
kZ_loc[ichh][ii] <<
" z_gl " <<
z_gl[ichh][ii]
2008 for (
Int_t i4 = 0; i4 < 4; i4++) {
2029 for (
Int_t iBig = 0; iBig <
kBig; iBig++) {
2030 XVU_Ch[iCh][iPlane][iBig] = -999.;
2035 for (
Int_t ii = 0; ii < 4; ii++) {
2041 for (
Int_t iBig = 0; iBig <
kBig; iBig++) {
2060 for (
Int_t i4 = 0; i4 < 4; i4++) {
2071 for (
Int_t k = 0; k < 4; k++) {
2072 for (
Int_t i4 = 0; i4 < 4; i4++) {
2088 printf(
"MWPC track finder: write hists to file... ");
2106 cout <<
"Work time of the MWPC track finder: " <<
workTime <<
" s" << endl;
bool compareSegments(const segments &a, const segments &b)
bool compareSegments(const match &a, const match &b)
friend F32vec4 fabs(const F32vec4 &a)
char * Form(const char *fmt,...)
Short_t GetMwpcId() const
TString fOutputBranchName
void FillFreeCoefVector(Int_t, Double_t *, Double_t ***, Int_t, Float_t **, Double_t *, Int_t *)
virtual void Exec(Option_t *opt)
TString fInputBranchNameHit
vector< TH1D * > hChi2_ndf_Ch
vector< TH1D * > hpar_Bx_pair
TClonesArray * fBmnHitsArray
vector< TH1D * > Nomin_Ch
vector< TH1D * > hpar_Ax_pair
vector< TH1D * > hpar_Ax_Ch
void SegmentMatching(Int_t, Int_t *, Double_t ***, Float_t *, Int_t **, Int_t *, Double_t **, Double_t ***, Int_t **, Int_t **)
TClonesArray * fBmnMwpcTracksArray
Output array of MWPC tracks.
vector< TH1D * > hY_in_target_pair
vector< TH1D * > hpar_Ay_pair
vector< TH1D * > hdX_pair
vector< TH2D * > hAx_bx_in_target_pair
vector< TH1D * > hChi2_ndf_pair
vector< TH2D * > hY_X_in_target_pair
TH2D * hChi2best_Chi2fake_after_target
vector< TH1D * > hdAy_pair
TH1D * hdX_pair01_inZpair1
vector< TH1D * > Denom_Ch
vector< TH1D * > hdY_pair
vector< TH2D * > hYvsX_pair
vector< TH2D * > hAy_by_in_target_pair
void PrepareArraysToProcessEvent()
TClonesArray * fBmnMwpcSegmentsArray
Input array of MWPC hits.
vector< TH1D * > hpar_phi_pair
void PairMatching(Int_t *, Double_t ***, Float_t *)
void TracksStoring(Int_t *, Double_t ***, Double_t **, Int_t **, Double_t ****)
TH2D * hChi2best_Chi2fake_before_target
void SegmentMatchingAfterTarget(Int_t, Int_t *, Double_t ***, Float_t *, Int_t **, Int_t *, Double_t **, Double_t ***, Int_t **, Int_t **)
vector< MC_points > vec_points
vector< TH1D * > hpar_By_Ch
virtual ~BmnMwpcTrackFinder()
virtual InitStatus Init()
BmnMwpcGeometrySRC * fMwpcGeo
void ReadSegments(Double_t ***, Int_t **, Double_t **, Int_t *, Double_t ***, Double_t ***, vector< MC_points > &)
vector< TH1D * > hX_in_target_pair
Double_t ** Chi2_match_pair
vector< TH1D * > hpar_By_pair
Double_t ** Chi2_ndf_pair
vector< TH1D * > hNbest_pair
vector< TH1D * > hpar_Ay_Ch
void InverseMatrix(Double_t **, Double_t **)
void SegmentParamAlignment(Int_t, Int_t *, Double_t ***, Float_t **)
vector< TH1D * > hpar_theta_pair
Double_t **** sigma2_pair
vector< TH1D * > hdAx_pair
void SegmentFit(Int_t, Float_t **, Float_t *, Int_t *, Int_t **, Double_t ***, Double_t **, Double_t ***, Double_t ***, Int_t **, Int_t **, Int_t **, Double_t ****)
TH1D * hdY_pair01_inZpair1
vector< TH1D * > hChi2_match_pair
void FillFitMatrix(Int_t, Double_t **, Float_t **, Double_t *, Int_t *)
void MCefficiencyCalculation(vector< MC_points > &, Int_t *, Double_t ***)
vector< TH1D * > hpar_Bx_Ch
void FillEfficiency(Int_t, Double_t ***, Int_t **, Int_t, Int_t, Float_t, Float_t)
vector< Double_t > GetCoord()
vector< Double_t > GetClust()
void SetChi2(Double_t chi2)
FairTrackParam * GetParamFirst()
Int_t GetNHits() const
Accessors.
void SetParamFirst(FairTrackParam &par)
Modifiers.
void Close(Option_t *option="") override
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
Double_t ATan2(Double_t y, Double_t x)
constexpr Double_t RadToDeg()