980 vector<MC_points>&
vec,
987 cout <<
" ---MC tracks association--" << endl;
989 Double_t delta2[4] = {-99., -999., -99., -999.};
990 Double_t delta3[4] = {-99., -999., -99., -999.};
993 Double_t sig[4] = {0.04, 0.08, 0.05, 0.08};
1001 dmc_match[
i][j] = 1000.;
1002 mc_tr_assoc[
i][j] = -1;
1011 cout <<
" Hit: Nmctr = " <<
vec.size() <<
" Nreco[" << iCh <<
"] = " << Nbest_seg_[iCh] << endl;
1020 for (
size_t itr = 0; itr <
vec.size(); itr++) {
1023 cout <<
" Np2 " <<
vec.at(itr).Np2 <<
" Np3 " <<
vec.at(itr).Np3 << endl;
1040 if (
vec.at(itr).Np2 >= 4) {
1042 if (iCh == 2 &&
fDebug) {
1045 if (
vec.at(itr).xWas2 &&
vec.at(itr).uWas2 &&
vec.at(itr).vWas2) {
1048 cout <<
" Den_mcPC2 " << endl;
1053 if (
vec.at(itr).Np3 >= 4) {
1055 if (iCh == 3 &&
fDebug) {
1058 if (
vec.at(itr).xWas3 &&
vec.at(itr).uWas3 &&
vec.at(itr).vWas3) {
1061 cout <<
" Den_mcPC3 " << endl;
1065 if (wasLi7_ch2 && wasHe4_ch2) {
1069 if (wasLi7_ch3 && wasHe4_ch3) {
1076 for (
Int_t iseg = 0; iseg < Nbest_seg_[iCh]; iseg++) {
1077 delta2[0] =
vec.at(itr).param2[0] - par_ab_seg_[iCh][0][iseg];
1078 delta2[1] =
vec.at(itr).param2[1] - par_ab_seg_[iCh][1][iseg];
1079 delta2[2] =
vec.at(itr).param2[2] - par_ab_seg_[iCh][2][iseg];
1080 delta2[3] =
vec.at(itr).param2[3] - par_ab_seg_[iCh][3][iseg];
1084 if (delta2[0] > -90.)
1086 if (delta2[1] > -900.)
1088 if (delta2[2] > -90.)
1090 if (delta2[3] > -900.)
1095 dmatch = (delta2[0] * delta2[0]) / (sig[0] * sig[0]) + (delta2[1] * delta2[1]) / (sig[1] * sig[1])
1096 + (delta2[2] * delta2[2]) / (sig[2] * sig[2])
1097 + (delta2[3] * delta2[3]) / (sig[3] * sig[3]);
1099 if (dmc_match[iCh][itr] > dmatch) {
1100 dmc_match[iCh][itr] = dmatch;
1101 mc_tr_assoc[iCh][itr] = iseg;
1109 cout <<
" itr " << itr <<
" Np2 " <<
vec.at(itr).Np2 <<
" mc_Id " <<
vec.at(itr).Id <<
" bx_mc "
1110 <<
vec.at(itr).param2[1] <<
" iseg_ind " << mc_tr_assoc[iCh][itr] <<
" bx "
1111 << par_ab_seg_[iCh][1][mc_tr_assoc[iCh][itr]] <<
" dmc_match " << dmc_match[iCh][itr] << endl;
1112 if (mc_tr_assoc[iCh][itr] > -1) {
1126 for (
Int_t iseg = 0; iseg < Nbest_seg_[iCh]; iseg++) {
1127 delta3[0] =
vec.at(itr).param3[0] - par_ab_seg_[iCh][0][iseg];
1128 delta3[1] =
vec.at(itr).param3[1] - par_ab_seg_[iCh][1][iseg];
1129 delta3[2] =
vec.at(itr).param3[2] - par_ab_seg_[iCh][2][iseg];
1130 delta3[3] =
vec.at(itr).param3[3] - par_ab_seg_[iCh][3][iseg];
1134 if (delta3[0] > -90.)
1136 if (delta3[1] > -900.)
1138 if (delta3[2] > -90.)
1140 if (delta3[3] > -900.)
1145 dmatch = (delta3[0] * delta3[0]) / (sig[0] * sig[0]) + (delta3[1] * delta3[1]) / (sig[1] * sig[1])
1146 + (delta3[2] * delta3[2]) / (sig[2] * sig[2])
1147 + (delta3[3] * delta3[3]) / (sig[3] * sig[3]);
1149 if (dmc_match[iCh][itr] > dmatch) {
1150 dmc_match[iCh][itr] = dmatch;
1151 mc_tr_assoc[iCh][itr] = iseg;
1160 cout <<
" itr " << itr <<
" Np3 " <<
vec.at(itr).Np3 <<
" mc_Id " <<
vec.at(itr).Id <<
" bx_mc "
1161 <<
vec.at(itr).param3[1] <<
" iseg_ind " << mc_tr_assoc[iCh][itr] <<
" bx "
1162 << par_ab_seg_[iCh][1][mc_tr_assoc[iCh][itr]] <<
" dmc_match " << dmc_match[iCh][itr] << endl;
1164 if (mc_tr_assoc[iCh][itr] > -1) {
1182 cout <<
"reject poorly chosen association segments " << endl;
1185 for (
size_t itr = 0; itr <
vec.size(); itr++) {
1186 if (mc_tr_assoc[iCh][itr] == -1)
1189 for (
size_t itr2 = 0; itr2 <
vec.size(); itr2++) {
1192 if (mc_tr_assoc[iCh][itr2] == -1)
1195 if (mc_tr_assoc[iCh][itr] == mc_tr_assoc[iCh][itr2]) {
1196 if (dmc_match[iCh][itr2] > 20.)
1197 mc_tr_assoc[iCh][itr2] = -1;
1207 cout <<
" mc_Id " <<
vec.at(itr).Id <<
" assoc " << mc_tr_assoc[iCh][itr] <<
" iChamber " << iCh
1209 if (
fDebug && mc_tr_assoc[iCh][itr] > -1) {
1210 if (
fDebug && iCh == 2 &&
vec.at(itr).Np2 >= 4) {
1211 if (
vec.at(itr).xWas2 &&
vec.at(itr).uWas2 &&
vec.at(itr).vWas2) {
1216 cout <<
" Num_mcPC2 " << endl;
1220 if (
fDebug && iCh == 3 &&
vec.at(itr).Np3 >= 4) {
1221 if (
vec.at(itr).xWas3 &&
vec.at(itr).uWas3 &&
vec.at(itr).vWas3) {
1226 cout <<
" Num_mcPC3 " << endl;
1233 if (Nassoc2 == 2 && wasLi7_ch2 && wasHe4_ch2) {
1235 cout <<
" hNum_mcreaction " << endl;
1238 if (Nassoc3 == 2 && wasLi7_ch3 && wasHe4_ch3) {
1240 cout <<
" hNum_mcreaction " << endl;
1250 cout <<
"--ReadWires--" << endl;
1260 Fired_layer_[iChamber][ipll] = 0;
1277 mcTracksArray[Id] = -1;
1280 X2mc[Id][
i] = -999.;
1281 Y2mc[Id][
i] = -999.;
1282 Z2mc[Id][
i] = -999.;
1283 X3mc[Id][
i] = -999.;
1284 Y3mc[Id][
i] = -999.;
1285 Z3mc[Id][
i] = -999.;
1290 int Nmc_tracks = -1;
1303 cout <<
" st_MC " << st_MC <<
" trackId_MC " << trackId_MC <<
" pdg_MC " << pdg_MC <<
" pl_MC " << pl_MC
1304 <<
" X " << hit->GetX() <<
" wire_MC " << wire_MC << endl;
1306 if (tr_before != trackId_MC) {
1308 mcTracksArray[Nmc_tracks] = hit->
GetHitId();
1310 tr_before = trackId_MC;
1311 pn =
kPln[st_MC][pl_MC];
1315 X2mc[Nmc_tracks][pn] = hit->GetX();
1316 Y2mc[Nmc_tracks][pn] = hit->GetY();
1317 Z2mc[Nmc_tracks][pn] = hit->GetZ();
1318 Npl_MC2[Nmc_tracks]++;
1321 X3mc[Nmc_tracks][pn] = hit->GetX();
1322 Y3mc[Nmc_tracks][pn] = hit->GetY();
1323 Z3mc[Nmc_tracks][pn] = hit->GetZ();
1324 mcPdgCode[Nmc_tracks] = pdg_MC;
1325 Npl_MC3[Nmc_tracks]++;
1331 DigitsArray_[st_MC][pn][wire_MC] = time_MC;
1332 Fired_layer_[st_MC][pn] = 1;
1333 iw_Ch_[st_MC][pn]++;
1339 cout <<
" Nmc_tracks " << Nmc_tracks << endl;
1340 for (
Int_t id = 0;
id < Nmc_tracks;
id++) {
1342 cout <<
" Id_mc " << mcTracksArray[id] <<
" Npl2 " << Npl_MC2[id] <<
" Npl3 " << Npl_MC3[id] << endl;
1344 if (
fDebug && X2mc[
id][
i] > -900.)
1345 cout <<
" ipl " <<
i <<
" X2 " << X2mc[id][
i] <<
" Y " << Y2mc[id][
i] << endl;
1346 tmpTr.
x2[
i] = X2mc[id][
i];
1347 tmpTr.
y2[
i] = Y2mc[id][
i];
1348 tmpTr.
z2[
i] = Z2mc[id][
i];
1351 cout <<
"---" << endl;
1353 if (
fDebug && X3mc[
id][
i] > -900.)
1354 cout <<
" ipl " <<
i <<
" X3 " << X3mc[id][
i] <<
" Y " << Y3mc[id][
i] << endl;
1355 tmpTr.
x3[
i] = X3mc[id][
i];
1356 tmpTr.
y3[
i] = Y3mc[id][
i];
1357 tmpTr.
z3[
i] = Z3mc[id][
i];
1360 cout <<
"---" << endl;
1363 tmpTr.
Id = mcTracksArray[id];
1364 tmpTr.
Np2 = Npl_MC2[id];
1365 tmpTr.
Np3 = Npl_MC3[id];
1366 tmpTr.
Pdg = mcPdgCode[id];
1368 if (Npl_MC2[
id] >= 4 || Npl_MC3[
id] >= 4)
1369 vec.push_back(tmpTr);
1373 cout <<
" MC vec_points.size() " <<
vec.size() << endl;
1377 Double_t x_target_ch2, y_target_ch2, x_target_ch3, y_target_ch3;
1379 for (
size_t itr = 0; itr <
vec.size(); itr++) {
1381 if (
vec.at(itr).x2[0] > -900. ||
vec.at(itr).x2[3] > -900.)
1382 vec.at(itr).xWas2 = 1;
1383 if (
vec.at(itr).x2[1] > -900. ||
vec.at(itr).x2[4] > -900.)
1384 vec.at(itr).vWas2 = 1;
1385 if (
vec.at(itr).x2[2] > -900. ||
vec.at(itr).x2[5] > -900.)
1386 vec.at(itr).uWas2 = 1;
1388 if (
vec.at(itr).x3[0] > -900. ||
vec.at(itr).x3[3] > -900.)
1389 vec.at(itr).xWas3 = 1;
1390 if (
vec.at(itr).x3[1] > -900. ||
vec.at(itr).x3[4] > -900.)
1391 vec.at(itr).vWas3 = 1;
1392 if (
vec.at(itr).x3[2] > -900. ||
vec.at(itr).x3[5] > -900.)
1393 vec.at(itr).uWas3 = 1;
1396 if (
vec.at(itr).x2[5] > -900.)
1398 if (i2 < 0 &&
vec.at(itr).x2[4] > -900.)
1400 if (i2 < 0 &&
vec.at(itr).x2[3] > -900.)
1404 if (
vec.at(itr).x2[i20] < -900.)
1406 if (
vec.at(itr).x2[i20] < -900.)
1409 if (i2 > -1 &&
vec.at(itr).Np2 > 3) {
1411 vec.at(itr).param2[0] =
1412 (
vec.at(itr).x2[i20] -
vec.at(itr).x2[i2]) / (
vec.at(itr).
z2[i20] -
vec.at(itr).z2[i2]);
1413 vec.at(itr).param2[1] = (
vec.at(itr).x2[i20] +
vec.at(itr).x2[i2]) * 0.5;
1414 vec.at(itr).param2[2] =
1415 (
vec.at(itr).y2[i20] -
vec.at(itr).y2[i2]) / (
vec.at(itr).
z2[i20] -
vec.at(itr).z2[i2]);
1416 vec.at(itr).param2[3] = (
vec.at(itr).y2[i20] +
vec.at(itr).y2[i2]) * 0.5;
1417 x_target_ch2 =
vec.at(itr).param2[0] * (
Z0_SRC -
ChZ[2]) +
vec.at(itr).param2[1];
1418 y_target_ch2 =
vec.at(itr).param2[2] * (
Z0_SRC -
ChZ[2]) +
vec.at(itr).param2[3];
1421 if (
vec.at(itr).x3[5] > -900.)
1423 if (i3 < 0 &&
vec.at(itr).x3[4] > -900.)
1425 if (i3 < 0 &&
vec.at(itr).x3[3] > -900.)
1429 if (
vec.at(itr).x3[i30] < -900.)
1431 if (
vec.at(itr).x3[i30] < -900.)
1434 if (i3 > -1 &&
vec.at(itr).Np3 > 3) {
1436 vec.at(itr).param3[0] =
1437 (
vec.at(itr).x3[i30] -
vec.at(itr).x3[i3]) / (
vec.at(itr).z3[i30] -
vec.at(itr).z3[i3]);
1438 vec.at(itr).param3[1] = (
vec.at(itr).x3[i30] +
vec.at(itr).x3[i3]) * 0.5;
1439 vec.at(itr).param3[2] =
1440 (
vec.at(itr).y3[i30] -
vec.at(itr).y3[i3]) / (
vec.at(itr).z3[i30] -
vec.at(itr).z3[i3]);
1441 vec.at(itr).param3[3] = (
vec.at(itr).y3[i30] +
vec.at(itr).y3[i3]) * 0.5;
1442 x_target_ch3 =
vec.at(itr).param3[0] * (
Z0_SRC -
ChZ[3]) +
vec.at(itr).param3[1];
1443 y_target_ch3 =
vec.at(itr).param3[2] * (
Z0_SRC -
ChZ[3]) +
vec.at(itr).param3[3];
1445 vec.at(itr).xt = (x_target_ch2 + x_target_ch3) / 2;
1446 vec.at(itr).yt = (y_target_ch2 + y_target_ch3) / 2;
1449 cout <<
" itr " << itr <<
" Id_mc " <<
vec.at(itr).Id <<
" 2:Ax " <<
vec.at(itr).param2[0] <<
" bx "
1450 <<
vec.at(itr).param2[1] <<
" Ay " <<
vec.at(itr).param2[2] <<
" by " <<
vec.at(itr).param2[3]
1451 <<
" x_target " << x_target_ch2 <<
" y_target " << y_target_ch2 <<
" Np2 " <<
vec.at(itr).Np2
1461 cout <<
" itr " << itr <<
" Id_mc " <<
vec.at(itr).Id <<
" 3:Ax " <<
vec.at(itr).param3[0] <<
" bx "
1462 <<
vec.at(itr).param3[1] <<
" Ay " <<
vec.at(itr).param3[2] <<
" by " <<
vec.at(itr).param3[3]
1463 <<
" x_target " << x_target_ch3 <<
" y_target " << y_target_ch3 <<
" Np3 " <<
vec.at(itr).Np3
1466 cout <<
" xt " <<
vec.at(itr).xt <<
" yt " <<
vec.at(itr).yt <<
" Pdg " <<
vec.at(itr).Pdg << endl;
1469 if (
vec.at(itr).Np2 > 2) {
1476 if (
vec.at(itr).Np3 > 2) {
1503 Fired_layer_[st][pl] = 1;
1506 hTime.at(ind)->Fill(ts);
1509 if (ts < 80 || ts > 280)
1516 if (iw_Ch_[st][pn] > 0) {
1517 for (
Int_t ix = 0; ix <
iw_Ch[st][pn]; ix++) {
1518 if (wire ==
wire_Ch[st][ix][pn]) {
1524 wire_Ch[st][iw_Ch_[st][pn]][pn] = wire;
1528 if (iw_Ch_[st][pn] >= 80)
1531 DigitsArray_[st][pn][wire] = ts;
1537 Nlay_w_wires[iChamber] += Fired_layer_[iChamber][iplane];
1539 counter_pl[iplane] += iw_Ch_[iChamber][iplane];
1561 Int_t*** ClusterSize_,
1691 if (counter_pl_[ipll] <= 8) {
1693 cout <<
"<= 8 " << endl;
1696 if (DigitsArray_[chNum][ipll][iwire] > 0.) {
1697 Nfirst[chNum][ipll] = iwire;
1698 ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] = 1;
1699 Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] =
1700 Nfirst[chNum][ipll] + 0.5 * ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]];
1701 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1702 (Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] -
kMiddlePl) *
dw;
1703 if (ipll == 0 || ipll == 1 || ipll == 5)
1704 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] = -Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]];
1706 cout <<
" Coord_xuv_[" << chNum <<
"][" << ipll <<
"][" << Nclust_[chNum][ipll] <<
"] "
1707 << Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] <<
" Coord_wire_ "
1708 << Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] << endl;
1709 Nclust_[chNum][ipll]++;
1715 Nfirst[chNum][ipll] = -1;
1717 Bool_t Next_next_wire = 0;
1723 if ((ipll == 0 || ipll == 3) && (iwire < 33 || iwire > 63)) {
1727 if ((ipll == 1 || ipll == 2) && (iwire < 12 || iwire > 42)) {
1730 if ((ipll == 4 || ipll == 5) && (iwire < 50 || iwire > 80)) {
1734 if (
fDebug && DigitsArray_[chNum][ipll][iwire] > 0) {
1757 if (
fDebug && DigitsArray_[chNum][ipll][iwire] > 0)
1758 cout <<
" DigitsArray_[" << chNum <<
"][" << ipll <<
"][" << iwire <<
"] "
1759 << DigitsArray_[chNum][ipll][iwire] <<
" first " << Nfirst[chNum][ipll] << endl;
1763 if (chNum > 1 && DigitsArray_[chNum][ipll][iwire] > 0
1768 cout <<
" area without beam wire: " << iwire <<
" wire_was " << wire_was << endl;
1770 Nfirst[chNum][ipll] = iwire;
1771 ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] = 1;
1772 Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] =
1773 Nfirst[chNum][ipll] + 0.5 * ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]];
1774 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1775 (Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] -
kMiddlePl) *
dw;
1776 if (ipll == 0 || ipll == 1 || ipll == 5)
1777 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] = -Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]];
1779 cout <<
" Coord_xuv_[" << chNum <<
"][" << ipll <<
"][" << Nclust_[chNum][ipll] <<
"] "
1780 << Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] <<
" Coord_wire_ "
1781 << Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] << endl;
1782 Nclust_[chNum][ipll]++;
1789 if (Nfirst[chNum][ipll] < 0 && DigitsArray_[chNum][ipll][iwire] == 0) {
1797 if (Nfirst[chNum][ipll] < 0 && DigitsArray_[chNum][ipll][iwire] > 0. && Next_next_wire) {
1799 if (DigitsArray_[chNum][ipll][iwire] > DigitsArray_[chNum][ipll][iwire - 1]) {
1804 Nfirst[chNum][ipll] = iwire;
1805 ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] = 1;
1806 Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] =
1807 Nfirst[chNum][ipll] + 0.5 * ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]];
1808 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1809 (Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] -
kMiddlePl) *
dw;
1814 if (ipll == 0 || ipll == 1 || ipll == 5)
1815 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1816 -Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]];
1819 hClusterSize.at(chNum)->Fill(ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]]);
1826 hoccupancyXm.at(chNum)->Fill(Coord_xuv_[chNum][0][Nclust_[chNum][ipll]]);
1827 hoccupancyVm.at(chNum)->Fill(Coord_xuv_[chNum][1][Nclust_[chNum][ipll]]);
1828 hoccupancyUp.at(chNum)->Fill(Coord_xuv_[chNum][2][Nclust_[chNum][ipll]]);
1829 hoccupancyXp.at(chNum)->Fill(Coord_xuv_[chNum][3][Nclust_[chNum][ipll]]);
1830 hoccupancyVp.at(chNum)->Fill(Coord_xuv_[chNum][4][Nclust_[chNum][ipll]]);
1831 hoccupancyUm.at(chNum)->Fill(Coord_xuv_[chNum][5][Nclust_[chNum][ipll]]);
1834 Nclust_[chNum][ipll]++;
1835 Nfirst[chNum][ipll] = -1;
1839 if (Nfirst[chNum][ipll] >= 0
1840 && (DigitsArray_[chNum][ipll][iwire] > 0
1841 && DigitsArray_[chNum][ipll][iwire] < DigitsArray_[chNum][ipll][Nfirst[chNum][ipll]]))
1843 Nfirst[chNum][ipll] = iwire;
1845 cout <<
" first Nfirst " << Nfirst[chNum][ipll] << endl;
1848 if (Nfirst[chNum][ipll] >= 0
1849 && (DigitsArray_[chNum][ipll][iwire] == 0
1850 || (DigitsArray_[chNum][ipll][iwire] > 0
1851 && DigitsArray_[chNum][ipll][iwire] > DigitsArray_[chNum][ipll][Nfirst[chNum][ipll]])))
1854 ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] = 1;
1855 Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] =
1856 Nfirst[chNum][ipll] + 0.5 * ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]];
1857 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1858 (Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] -
kMiddlePl) *
dw;
1859 if (DigitsArray_[chNum][ipll][iwire] > 0)
1865 if (ipll == 0 || ipll == 1 || ipll == 5)
1866 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1867 -Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]];
1869 hClusterSize.at(chNum)->Fill(ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]]);
1870 cout <<
" Coord_xuv_[" << chNum <<
"][" << ipll <<
"][" << Nclust_[chNum][ipll] <<
"] "
1871 << Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] <<
" Coord_wire_ "
1872 << Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] << endl;
1877 hoccupancyXm.at(chNum)->Fill(Coord_xuv_[chNum][0][Nclust_[chNum][ipll]]);
1878 hoccupancyVm.at(chNum)->Fill(Coord_xuv_[chNum][1][Nclust_[chNum][ipll]]);
1879 hoccupancyUp.at(chNum)->Fill(Coord_xuv_[chNum][2][Nclust_[chNum][ipll]]);
1880 hoccupancyXp.at(chNum)->Fill(Coord_xuv_[chNum][3][Nclust_[chNum][ipll]]);
1881 hoccupancyVp.at(chNum)->Fill(Coord_xuv_[chNum][4][Nclust_[chNum][ipll]]);
1882 hoccupancyUm.at(chNum)->Fill(Coord_xuv_[chNum][5][Nclust_[chNum][ipll]]);
1885 Nclust_[chNum][ipll]++;
1886 Nfirst[chNum][ipll] = -1;
1889 if (Nfirst[chNum][ipll] < 0 && DigitsArray_[chNum][ipll][iwire] > 0. && !Next_next_wire)
1890 Nfirst[chNum][ipll] = iwire;
1892 if (iwire == 95 && Nfirst[chNum][ipll] > 0) {
1893 ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] = 1;
1894 Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] =
1895 Nfirst[chNum][ipll] + 0.5 * ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]];
1896 Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] =
1897 (Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] -
kMiddlePl) *
dw;
1899 cout <<
" Coord_xuv_[" << chNum <<
"][" << ipll <<
"][" << Nclust_[chNum][ipll] <<
"] "
1900 << Coord_xuv_[chNum][ipll][Nclust_[chNum][ipll]] << endl;
1902 cout <<
"3 Nfirst " << Nfirst[chNum][ipll] <<
" ClusterSize_ "
1903 << ClusterSize_[chNum][ipll][Nclust_[chNum][ipll]] <<
" Coord_wire_ "
1904 << Coord_wire_[chNum][ipll][Nclust_[chNum][ipll]] << endl;
1906 cout <<
" iwire " << iwire << endl;
1907 Nclust_[chNum][ipll]++;
1908 Nfirst[chNum][ipll] = -1;
1926 Int_t*** ClusterSize_,
1936 cout <<
"SegmentFinder: hexagon on the base of triad chNum: " << chNum << endl;
1940 minHits4_5 = minHits;
1960 Int_t x = 0,
v = 1, u = 2, x1 = 3, v1 = 4, u1 = 5;
2029 if (Nsegm[chNum] > kBig_ - 2)
2032 for (
Int_t ix = 0; ix < Nclust_[chNum][x]; ix++) {
2034 for (
Int_t iv = 0; iv < Nclust_[chNum][
v]; iv++) {
2036 for (
Int_t iu = 0; iu < Nclust_[chNum][u]; iu++) {
2038 if (Nsegm[chNum] > kBig_ - 2)
2043 if (Nsegm[chNum] > 0) {
2044 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2049 if (XVU_coor[chNum][x][iseg] == Coord_xuv_[chNum][x][ix])
2051 if (XVU_coor[chNum][
v][iseg] == Coord_xuv_[chNum][
v][iv])
2053 if (XVU_coor[chNum][u][iseg] == Coord_xuv_[chNum][u][iu])
2056 it_was = it_was_x && it_was_v && it_was_u;
2069 if (
fabs(Coord_xuv_[chNum][u][iu] + Coord_xuv_[chNum][
v][iv] - Coord_xuv_[chNum][x][ix])
2070 < min_for_triples *
dw)
2080 if (
fabs((2 * Coord_xuv_[chNum][u][iu] - Coord_xuv_[chNum][x][ix]) /
sq3) < a_side
2082 fabs((2 * Coord_xuv_[chNum][u][iu] + Coord_xuv_[chNum][
v][iv]) /
sq3) < a_side
2085 fabs((Coord_xuv_[chNum][u][iu] + 2 * Coord_xuv_[chNum][
v][iv]) /
sq3) < a_side)
2089 cout <<
" 3p-candidate new Nsegm " << endl;
2090 XVU_coor[chNum][x][Nsegm[chNum]] = Coord_xuv_[chNum][x][ix];
2091 XVU_coor[chNum][
v][Nsegm[chNum]] = Coord_xuv_[chNum][
v][iv];
2092 XVU_coor[chNum][u][Nsegm[chNum]] = Coord_xuv_[chNum][u][iu];
2093 Cluster_coor[chNum][x][Nsegm[chNum]] = ClusterSize_[chNum][x][ix];
2094 Cluster_coor[chNum][
v][Nsegm[chNum]] = ClusterSize_[chNum][
v][iv];
2095 Cluster_coor[chNum][u][Nsegm[chNum]] = ClusterSize_[chNum][u][iu];
2097 XVU_coor[chNum][x1][Nsegm[chNum]] = -999.;
2098 XVU_coor[chNum][v1][Nsegm[chNum]] = -999.;
2099 XVU_coor[chNum][u1][Nsegm[chNum]] = -999.;
2100 Cluster_coor[chNum][x1][Nsegm[chNum]] = -1;
2101 Cluster_coor[chNum][v1][Nsegm[chNum]] = -1;
2102 Cluster_coor[chNum][u1][Nsegm[chNum]] = -1;
2104 Nhits_Ch_[chNum][Nsegm[chNum]] = 3;
2109 if (XVU_coor[chNum][x][Nsegm[chNum]] != -999.) {
2112 for (
Int_t ix2 = 0; ix2 < Nclust_[chNum][x1]; ix2++) {
2114 if (
abs(XVU_coor[chNum][x][Nsegm[chNum]] - Coord_xuv_[chNum][x1][ix2]) < Min_D) {
2115 XVU_coor[chNum][x1][Nsegm[chNum]] = Coord_xuv_[chNum][x1][ix2];
2116 Cluster_coor[chNum][x1][Nsegm[chNum]] = ClusterSize_[chNum][x1][ix2];
2118 Nhits_Ch_[chNum][Nsegm[chNum]]++;
2120 Min_D =
abs(XVU_coor[chNum][x][Nsegm[chNum]] - Coord_xuv_[chNum][x1][ix2]);
2128 if (XVU_coor[chNum][
v][Nsegm[chNum]] != -999.) {
2131 for (
Int_t iv2 = 0; iv2 < Nclust_[chNum][v1]; iv2++) {
2133 if (
abs(XVU_coor[chNum][
v][Nsegm[chNum]] - Coord_xuv_[chNum][v1][iv2]) < Min_D) {
2134 XVU_coor[chNum][v1][Nsegm[chNum]] = Coord_xuv_[chNum][v1][iv2];
2135 Cluster_coor[chNum][v1][Nsegm[chNum]] = ClusterSize_[chNum][v1][iv2];
2137 Nhits_Ch_[chNum][Nsegm[chNum]]++;
2139 Min_D =
abs(XVU_coor[chNum][
v][Nsegm[chNum]] - Coord_xuv_[chNum][v1][iv2]);
2146 if (XVU_coor[chNum][u][Nsegm[chNum]] != -999.) {
2149 for (
Int_t iu2 = 0; iu2 < Nclust_[chNum][u1]; iu2++) {
2150 if (
abs(XVU_coor[chNum][u][Nsegm[chNum]] - Coord_xuv_[chNum][u1][iu2]) < Min_D) {
2151 XVU_coor[chNum][u1][Nsegm[chNum]] = Coord_xuv_[chNum][u1][iu2];
2152 Cluster_coor[chNum][u1][Nsegm[chNum]] = ClusterSize_[chNum][u1][iu2];
2154 Nhits_Ch_[chNum][Nsegm[chNum]]++;
2156 Min_D =
abs(XVU_coor[chNum][u][Nsegm[chNum]] - Coord_xuv_[chNum][u1][iu2]);
2161 if (chNum > 1 && Nhits_Ch_[chNum][Nsegm[chNum]] > 4)
2162 minHits4_5 = minHits;
2163 if (Nsegm[chNum] > 15)
2165 if (Nsegm[chNum] > 30)
2171 if (Nhits_Ch_[chNum][Nsegm[chNum]] >= minHits4_5) {
2182 if (Nhits_Ch_[chNum][Nsegm[chNum]] < minHits4_5) {
2184 Nhits_Ch_[chNum][Nsegm[chNum]] = 0;
2186 XVU_coor[chNum][x][Nsegm[chNum]] = -999.;
2187 XVU_coor[chNum][
v][Nsegm[chNum]] = -999.;
2188 XVU_coor[chNum][u][Nsegm[chNum]] = -999.;
2189 XVU_coor[chNum][x1][Nsegm[chNum]] = -999.;
2190 XVU_coor[chNum][v1][Nsegm[chNum]] = -999.;
2191 XVU_coor[chNum][u1][Nsegm[chNum]] = -999.;
2192 Cluster_coor[chNum][x][Nsegm[chNum]] = -1;
2193 Cluster_coor[chNum][
v][Nsegm[chNum]] = -1;
2194 Cluster_coor[chNum][u][Nsegm[chNum]] = -1;
2195 Cluster_coor[chNum][x1][Nsegm[chNum]] = -1;
2196 Cluster_coor[chNum][v1][Nsegm[chNum]] = -1;
2197 Cluster_coor[chNum][u1][Nsegm[chNum]] = -1;
2201 if (Nsegm[chNum] > kBig_ - 2)
2204 if (Nsegm[chNum] > kBig_ - 2)
2207 if (Nsegm[chNum] > kBig_ - 2)
2210 if (Nsegm[chNum] > kBig_ - 2)
2221 Int_t*** ClusterSize_,
2234 cout <<
" SegmentFinder2coord " << endl;
2236 cout <<
" Nsegm[" << chNum <<
"] " << Nsegm[chNum] << endl;
2280 if (Nsegm[chNum] > kBig_ - 2)
2284 for (
Int_t jf = 0; jf < Nclust_[chNum][f]; jf++) {
2287 for (
Int_t ib = 0; ib < nbest_seg[chNum]; ib++) {
2288 if (coor_seg[chNum][f][ib] == Coord_xuv_[chNum][f][jf]) {
2296 for (
Int_t il = 0; il < Nclust_[chNum][l]; il++) {
2298 if (Nsegm[chNum] > kBig_ - 2)
2301 for (
Int_t ib = 0; ib < nbest_seg[chNum]; ib++) {
2302 if (coor_seg[chNum][l][ib] == Coord_xuv_[chNum][l][il]) {
2338 ft = (Coord_xuv_[chNum][f][jf] - 2 * Coord_xuv_[chNum][l][il]) /
sq3;
2339 lt = (2 * Coord_xuv_[chNum][f][jf] - Coord_xuv_[chNum][l][il]) /
sq3;
2342 ft = (-Coord_xuv_[chNum][f][jf] + 2 * Coord_xuv_[chNum][l][il]) /
sq3;
2343 lt = (2 * Coord_xuv_[chNum][f][jf] - Coord_xuv_[chNum][l][il]) /
sq3;
2346 ft = (Coord_xuv_[chNum][f][jf] + 2 * Coord_xuv_[chNum][l][il]) /
sq3;
2347 lt = (2 * Coord_xuv_[chNum][f][jf] + Coord_xuv_[chNum][l][il]) /
sq3;
2351 cout <<
" pl f:" << f <<
" coord " << Coord_xuv_[chNum][f][jf] <<
" pl l: " << l <<
" coord "
2352 << Coord_xuv_[chNum][l][il] <<
" ft " << ft <<
" lt " << lt <<
" a_side " << a_side << endl;
2354 if (
fabs(ft) < a_side &&
fabs(lt) < a_side) {
2356 XVU_coor[chNum][f][Nsegm[chNum]] = Coord_xuv_[chNum][f][jf];
2357 XVU_coor[chNum][l][Nsegm[chNum]] = Coord_xuv_[chNum][l][il];
2358 Cluster_coor[chNum][f][Nsegm[chNum]] = ClusterSize_[chNum][f][jf];
2359 Cluster_coor[chNum][l][Nsegm[chNum]] = ClusterSize_[chNum][l][il];
2361 Nhits_Ch_[chNum][Nsegm[chNum]] = 2;
2366 if (XVU_coor[chNum][f][Nsegm[chNum]] != -999.) {
2369 for (
Int_t ix2 = 0; ix2 < Nclust_[chNum][f1]; ix2++) {
2371 if (
abs(XVU_coor[chNum][f][Nsegm[chNum]] - Coord_xuv_[chNum][f1][ix2]) < Min_D) {
2372 XVU_coor[chNum][f1][Nsegm[chNum]] = Coord_xuv_[chNum][f1][ix2];
2373 Cluster_coor[chNum][f1][Nsegm[chNum]] = ClusterSize_[chNum][f1][ix2];
2375 Nhits_Ch_[chNum][Nsegm[chNum]]++;
2377 Min_D =
abs(XVU_coor[chNum][f][Nsegm[chNum]] - Coord_xuv_[chNum][f1][ix2]);
2384 if (XVU_coor[chNum][l][Nsegm[chNum]] != -999.) {
2387 for (
Int_t iv2 = 0; iv2 < Nclust_[chNum][l1]; iv2++) {
2389 if (
abs(XVU_coor[chNum][l][Nsegm[chNum]] - Coord_xuv_[chNum][l1][iv2]) < Min_D) {
2390 XVU_coor[chNum][l1][Nsegm[chNum]] = Coord_xuv_[chNum][l1][iv2];
2391 Cluster_coor[chNum][l1][Nsegm[chNum]] = ClusterSize_[chNum][l1][iv2];
2393 Nhits_Ch_[chNum][Nsegm[chNum]]++;
2395 Min_D =
abs(XVU_coor[chNum][l][Nsegm[chNum]] - Coord_xuv_[chNum][l1][iv2]);
2402 if (Nhits_Ch_[chNum][Nsegm[chNum]] == minHits4) {
2406 cout <<
" Nsegm " << Nsegm[chNum] <<
" Nhits_Ch_[" << chNum <<
"][" << Nsegm[chNum] <<
"] "
2407 << Nhits_Ch_[chNum][Nsegm[chNum]] << endl;
2409 cout <<
" coord " << XVU_coor[chNum][0][Nsegm[chNum]] <<
" " << XVU_coor[chNum][1][Nsegm[chNum]]
2410 <<
" " << XVU_coor[chNum][2][Nsegm[chNum]] <<
" " << XVU_coor[chNum][3][Nsegm[chNum]]
2411 <<
" " << XVU_coor[chNum][4][Nsegm[chNum]] <<
" " << XVU_coor[chNum][5][Nsegm[chNum]]
2417 if (Nhits_Ch_[chNum][Nsegm[chNum]] < minHits4) {
2419 Nhits_Ch_[chNum][Nsegm[chNum]] = 0;
2421 XVU_coor[chNum][f][Nsegm[chNum]] = -999.;
2422 XVU_coor[chNum][l][Nsegm[chNum]] = -999.;
2423 XVU_coor[chNum][f1][Nsegm[chNum]] = -999.;
2424 XVU_coor[chNum][l1][Nsegm[chNum]] = -999.;
2425 Cluster_coor[chNum][f][Nsegm[chNum]] = -1;
2426 Cluster_coor[chNum][l][Nsegm[chNum]] = -1;
2427 Cluster_coor[chNum][f1][Nsegm[chNum]] = -1;
2428 Cluster_coor[chNum][l1][Nsegm[chNum]] = -1;
2433 if (Nsegm[chNum] > kBig_ - 2)
2436 if (Nsegm[chNum] > kBig_ - 2)
2439 if (Nsegm[chNum] > kBig_ - 2)
2443 cout <<
" -- SegmentFinder2coord: Nsegm[" << chNum <<
"] " << Nsegm[chNum] << endl;
2462 Int_t* Nlay_w_wires_,
2466 cout <<
" -- ProcessSegments2coord -- " << endl;
2470 Double_t x1, x2, y1, y2, zx1, zx2, zy1, zy2;
2472 cout <<
" Nbest_seg_[chNum] " << Nbest_seg_[chNum] << endl;
2474 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2475 if (Nbest_seg_[chNum] >
kBig - 2)
2479 Chi2[chNum][iseg] = 0.;
2488 Bool_t x_was = 0, u_was = 0, v_was = 0;
2490 if (XVU_coor[chNum][0][iseg] > -900. && XVU_coor[chNum][3][iseg] > -900.) {
2495 cout <<
" iseg " << iseg <<
" x1 " << XVU_coor[chNum][0][iseg] <<
" x2 " << XVU_coor[chNum][3][iseg]
2497 x1 = XVU_coor[chNum][0][iseg];
2498 x2 = XVU_coor[chNum][3][iseg];
2499 zx1 = z_loc[chNum][0];
2500 zx2 = z_loc[chNum][3];
2501 zy1 = z_loc[chNum][0];
2502 zy2 = z_loc[chNum][3];
2506 if (XVU_coor[chNum][4][iseg] > -999. && XVU_coor[chNum][1][iseg] > -999.) {
2511 cout <<
" iseg " << iseg <<
" v1 " << XVU_coor[chNum][4][iseg] <<
" v2 " << XVU_coor[chNum][1][iseg]
2515 zy1 += z_loc[chNum][4];
2516 zy2 += z_loc[chNum][1];
2518 y1 = (x1 - 2 * XVU_coor[chNum][4][iseg]) /
sq3;
2519 y2 = (x2 - 2 * XVU_coor[chNum][1][iseg]) /
sq3;
2521 zx1 = z_loc[chNum][4];
2522 zx2 = z_loc[chNum][1];
2526 if (XVU_coor[chNum][5][iseg] > -999. && XVU_coor[chNum][2][iseg] > -999.) {
2531 cout <<
" iseg " << iseg <<
" u1 " << XVU_coor[chNum][5][iseg] <<
" u2 " << XVU_coor[chNum][2][iseg]
2534 zy1 += z_loc[chNum][5];
2535 zy2 += z_loc[chNum][2];
2538 y1 = (2 * XVU_coor[chNum][5][iseg] - x1) /
sq3;
2539 y2 = (2 * XVU_coor[chNum][2][iseg] - x2) /
sq3;
2542 x1 = XVU_coor[chNum][5][iseg] + XVU_coor[chNum][4][iseg];
2543 x2 = XVU_coor[chNum][2][iseg] + XVU_coor[chNum][1][iseg];
2545 y1 = (XVU_coor[chNum][5][iseg] - XVU_coor[chNum][4][iseg]) /
sq3;
2546 y2 = (XVU_coor[chNum][2][iseg] - XVU_coor[chNum][1][iseg]) /
sq3;
2548 zx1 += z_loc[chNum][5];
2549 zx2 += z_loc[chNum][2];
2558 Double_t Ax = (x1 - x2) / (zx1 - zx2);
2559 Double_t Ay = (y1 - y2) / (zy1 - zy2);
2564 cout <<
" y_t " << y_t << endl;
2565 Chi2[chNum][iseg] =
fabs(y_t + 6.1);
2568 Double_t u_t1 = (XVU_coor[chNum][0][iseg] + XVU_coor[chNum][4][iseg]) /
sq3;
2569 Double_t u_t2 = (XVU_coor[chNum][3][iseg] + XVU_coor[chNum][1][iseg]) /
sq3;
2570 Double_t Au = (u_t1 - u_t2) / (zy1 - zy2);
2572 Chi2[chNum][iseg] =
fabs(u_t - 3.0);
2574 cout <<
" u_t " << u_t << endl;
2577 Double_t v_t1 = (XVU_coor[chNum][0][iseg] + XVU_coor[chNum][5][iseg]) /
sq3;
2578 Double_t v_t2 = (XVU_coor[chNum][3][iseg] + XVU_coor[chNum][2][iseg]) /
sq3;
2579 Double_t Av = (v_t1 - v_t2) / (zy1 - zy2);
2581 Chi2[chNum][iseg] =
fabs(v_t + 3.3);
2583 cout <<
" v_t " << v_t << endl;
2589 cout <<
" iseg " << iseg <<
" Chi2 " << Chi2[chNum][iseg] << endl;
2591 Par_ab[chNum][0][iseg] = Ax;
2592 Par_ab[chNum][1][iseg] = (x1 + x2) / 2.;
2593 Par_ab[chNum][2][iseg] = Ay;
2594 Par_ab[chNum][3][iseg] = (y1 + y2) / 2.;
2600 Int_t Nbest_vec_ind = 0;
2602 for (
Int_t ind_best = 0; ind_best <
kmaxSeg; ind_best++) {
2604 Int_t iseg_best = -1;
2605 vec_ind_best_seg[ind_best] = -1;
2607 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2609 if (Chi2[chNum][iseg] >= Chi2_best)
2613 if (Nbest_vec_ind > 0) {
2614 for (
Int_t ii = 0; ii < Nbest_vec_ind; ii++) {
2615 if (iseg == vec_ind_best_seg[ii]) {
2623 Chi2_best = Chi2[chNum][iseg];
2627 if (iseg_best == -1)
2630 cout <<
" ind_best " << ind_best <<
" Chi2_best " << Chi2_best <<
" iseg_best " << iseg_best << endl;
2631 vec_ind_best_seg[ind_best] = iseg_best;
2635 cout <<
"-- reject(common points)" << endl;
2636 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2639 if (Nbest_vec_ind > 0) {
2640 for (
Int_t ii = 0; ii < Nbest_vec_ind; ii++) {
2641 if (iseg == vec_ind_best_seg[ii]) {
2651 if (XVU_coor[chNum][i1][iseg] > -999.) {
2652 if (
fabs(XVU_coor[chNum][i1][iseg] - XVU_coor[chNum][i1][iseg_best]) <
dw_half) {
2654 cout <<
" reject point pl:" << i1 <<
" XUV " << XVU_coor[chNum][i1][iseg]
2655 <<
" iseg = " << iseg << endl;
2657 XVU_coor[chNum][i1][iseg] = -999.;
2658 Chi2[chNum][iseg] = 999.;
2665 cout <<
" Nbest_vec_ind " << Nbest_vec_ind << endl;
2667 cout <<
" Chi2_best " << Chi2_best << endl;
2672 if (Nbest_seg_[chNum] <
kmaxSeg) {
2673 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2675 if (Chi2[chNum][iseg] < 900.) {
2676 Par_ab_seg[chNum][0][Nbest_seg_[chNum]] = Par_ab[chNum][0][iseg];
2677 Par_ab_seg[chNum][1][Nbest_seg_[chNum]] = Par_ab[chNum][1][iseg];
2678 Par_ab_seg[chNum][2][Nbest_seg_[chNum]] = Par_ab[chNum][2][iseg];
2679 Par_ab_seg[chNum][3][Nbest_seg_[chNum]] = Par_ab[chNum][3][iseg];
2682 cout <<
" iseg " << iseg <<
" Chi2 " << Chi2[chNum][iseg] << endl;
2685 hpar_Ax_Ch.at(chNum)->Fill(Par_ab_seg[chNum][0][Nbest_seg_[chNum]]);
2686 hpar_Bx_Ch.at(chNum)->Fill(Par_ab_seg[chNum][1][Nbest_seg_[chNum]]);
2687 hpar_Ay_Ch.at(chNum)->Fill(Par_ab_seg[chNum][2][Nbest_seg_[chNum]]);
2688 hpar_By_Ch.at(chNum)->Fill(Par_ab_seg[chNum][3][Nbest_seg_[chNum]]);
2690 for (
int ipla = 0; ipla <
kNPlanes; ipla++) {
2692 coor_seg[chNum][ipla][Nbest_seg_[chNum]] = XVU_coor[chNum][ipla][iseg];
2693 cluster_seg[chNum][ipla][Nbest_seg_[chNum]] = Cluster_coor[chNum][ipla][iseg];
2696 Nhits_seg_[chNum][Nbest_seg_[chNum]] = Nhits_Ch_[chNum][iseg];
2697 Chi2_ndf_seg_[chNum][Nbest_seg_[chNum]] = Chi2[chNum][iseg];
2698 for (
int i1 = 0; i1 < 4; i1++) {
2699 for (
int j1 = 0; j1 < 4; j1++) {
2703 Nbest_seg_[chNum]++;
2709 cout <<
"---end cycle by segments " << endl;
2711 cout <<
" Nbest_seg_[chNum] " << Nbest_seg_[chNum] << endl;
2714 for (
Int_t iseg = 0; iseg < Nbest_seg_[chNum]; iseg++) {
2716 cout <<
" iseg " << iseg <<
" Ax " << Par_ab_seg[chNum][0][iseg] <<
" bx " << Par_ab_seg[chNum][1][iseg]
2717 <<
" Ay " << Par_ab_seg[chNum][2][iseg] <<
" by " << Par_ab_seg[chNum][3][iseg] <<
" Chi2 "
2718 << Chi2_ndf_seg_[chNum][iseg] <<
" Nhits " << Nhits_seg_[chNum][iseg] << endl;
2738 Int_t* Nlay_w_wires_,
2752 for (
Int_t i1 = 0; i1 < 4; i1++) {
2753 for (
Int_t j1 = 0; j1 < 4; j1++) {
2754 bmatr_seg[
i][i1][j1] = 0.;
2763 Double_t xy_t_max[4] = {30., 35., 40., 45.};
2766 Min_hits6 = Min_hits;
2772 int OutSegCount = 0;
2775 if (Nlay_w_wires_[chNum] < 4)
2778 if (chNum > 1 && Min_hits < 6) {
2779 if (Nlay_w_wires_[chNum] == 4)
2783 if (Nsegm[chNum] >
kBig - 2)
2792 for (
Int_t Nhitm =
kNPlanes; Nhitm > Min_hits6 - 1; Nhitm--) {
2795 if (Nhitm < Min_hits6)
2798 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
2799 if (Nbest_seg_[chNum] >
kBig - 2)
2803 if (Nhits_Ch_[chNum][iseg] != Nhitm)
2806 if (Nhits_Ch_[chNum][iseg] != 0) {
2807 Nhits_Ch_[chNum][iseg] = 0;
2809 if (XVU_coor[chNum][i1][iseg] > -900.)
2810 Nhits_Ch_[chNum][iseg]++;
2812 if (Nhits_Ch_[chNum][iseg] < Min_hits6)
2813 Nhits_Ch_[chNum][iseg] = 0;
2818 if (Nhits_Ch_[chNum][iseg] == 0)
2824 if (XVU_coor[chNum][
i][iseg] > -900.) {
2826 sigm[
i] = (Cluster_coor[chNum][
i][iseg] *
dw) /
sq12;
2827 sigm2_[
i] = sigm[
i] * sigm[
i];
2838 for (
Int_t im = 0; im < 4; im++) {
2839 for (
Int_t ii = 0; ii < 4; ii++) {
2851 for (
Int_t i1 = 0; i1 < 4; i1++) {
2852 for (
Int_t j1 = 0; j1 < 4; j1++) {
2853 A0matr[i1][j1] =
Amatr[i1][j1];
2863 for (
Int_t i1 = 0; i1 < 4; ++i1)
2864 for (
Int_t j1 = 0; j1 < 4; ++j1) {
2866 for (
Int_t k1 = 0; k1 < 4; ++k1) {
2874 for (
Int_t i1 = 0; i1 < 4; i1++) {
2875 par_ab[chNum][i1][iseg] = 0;
2876 for (
Int_t j1 = 0; j1 < 4; j1++) {
2877 par_ab[chNum][i1][iseg] +=
bmatr[i1][j1] * matrF[j1];
2878 bmatr_seg[iseg][i1][j1] = 2 *
bmatr[i1][j1];
2884 Chi2[chNum][iseg] = 0.;
2885 Chi2_ndf[chNum][iseg] = 999.;
2889 x_target = par_ab[chNum][0][iseg] * (
Z0_SRC -
ChZ[chNum]) + par_ab[chNum][1][iseg];
2890 y_target = par_ab[chNum][2][iseg] * (
Z0_SRC -
ChZ[chNum]) + par_ab[chNum][3][iseg];
2892 if (
fabs(x_target) > xy_t_max[chNum] ||
fabs(y_target) > xy_t_max[chNum]) {
2893 Nhits_Ch_[chNum][iseg] = 0;
2898 cout <<
" Nhits_Ch_[" << chNum <<
"][" << iseg <<
"] " << Nhits_Ch_[chNum][iseg] << endl;
2900 for (
Int_t i1 = 0; i1 < 6; i1++) {
2903 if (XVU_coor[chNum][i1][iseg] > -999.) {
2904 if (i1 == 0 || i1 == 3) {
2905 dx_[i1] = XVU_coor[chNum][i1][iseg] - par_ab[chNum][0][iseg] * z_loc[chNum][i1]
2906 - par_ab[chNum][1][iseg];
2907 if (
fabs(dx_[i1]) > Max_dx)
2908 Max_dx =
fabs(dx_[i1]);
2916 if (i1 == 2 || i1 == 5) {
2917 dx_[i1] = XVU_coor[chNum][i1][iseg]
2918 - 0.5 * (par_ab[chNum][0][iseg] +
sq3 * par_ab[chNum][2][iseg]) * z_loc[chNum][i1]
2919 - 0.5 * (par_ab[chNum][1][iseg] +
sq3 * par_ab[chNum][3][iseg]);
2920 if (
fabs(dx_[i1]) > Max_dx)
2921 Max_dx =
fabs(dx_[i1]);
2929 if (i1 == 1 || i1 == 4) {
2930 dx_[i1] = XVU_coor[chNum][i1][iseg]
2931 - 0.5 * (par_ab[chNum][0][iseg] -
sq3 * par_ab[chNum][2][iseg]) * z_loc[chNum][i1]
2932 - 0.5 * (par_ab[chNum][1][iseg] -
sq3 * par_ab[chNum][3][iseg]);
2933 if (
fabs(dx_[i1]) > Max_dx)
2934 Max_dx =
fabs(dx_[i1]);
2942 Chi2[chNum][iseg] += dx_[i1] * dx_[i1] / (sigm2_[i1]);
2944 cout <<
"iseg " << iseg <<
" i " << i1 <<
" dx " << dx_[i1] <<
" coor "
2945 << XVU_coor[chNum][i1][iseg] <<
" Chi2 " << Chi2[chNum][iseg] <<
" z " << z_loc[chNum][i1]
2951 cout <<
"---Chi2 calculating.--- Nhits[" << chNum <<
"][" << iseg <<
"] " << Nhits_Ch_[chNum][iseg]
2952 <<
" Chi2 " << Chi2[chNum][iseg] << endl;
2954 cout <<
" Ax= " << par_ab[chNum][0][iseg] <<
" bx= " << par_ab[chNum][1][iseg]
2955 <<
" Ay= " << par_ab[chNum][2][iseg] <<
" by= " << par_ab[chNum][3][iseg] << endl;
2956 if (Nhits_Ch_[chNum][iseg] > 4) {
2957 Chi2_ndf[chNum][iseg] = Chi2[chNum][iseg] / (Nhits_Ch_[chNum][iseg] - 4);
2959 cout <<
" Chi2_ndf[" << chNum <<
"][" << iseg <<
"] " << Chi2_ndf[chNum][iseg] << endl;
2961 Chi2_ndf[chNum][iseg] = 0.;
2964 if (Chi2_ndf[chNum][iseg] > kChi2_Max_) {
2966 if (Nhits_Ch_[chNum][iseg] <= Min_hits6) {
2967 Nhits_Ch_[chNum][iseg] = 0;
2971 cout <<
" iseg " << iseg <<
" --reject or not bad point" << endl;
2973 if (XVU_coor[chNum][i1][iseg] > -999. &&
fabs(dx_[i1]) >= Max_dx) {
2974 XVU_coor[chNum][i1][iseg] = -999.;
2975 Nhits_Ch_[chNum][iseg]--;
2976 if (Nhits_Ch_[chNum][iseg] < Min_hits6)
2977 Nhits_Ch_[chNum][iseg] = 0;
2986 cout <<
"---Nhits calc--- Nhits[" << chNum <<
"][" << iseg <<
"] " << Nhits_Ch_[chNum][iseg]
2987 <<
" Chi2_ndf[" << chNum <<
"][" << iseg <<
"] " << Chi2_ndf[chNum][iseg] << endl;
2989 if (Nhits_Ch_[chNum][iseg] != 0) {
2992 Nhits_Ch_[chNum][iseg] = 0;
2994 if (XVU_coor[chNum][i1][iseg] > -900.)
2995 Nhits_Ch_[chNum][iseg]++;
2998 cout <<
"if ( Nhits_Ch_[chNum][iseg] != 0) Nhits_Ch " << Nhits_Ch_[chNum][iseg] <<
" Min_hits6 "
2999 << Min_hits6 << endl;
3000 if (Nhits_Ch_[chNum][iseg] < Min_hits6)
3001 Nhits_Ch_[chNum][iseg] = 0;
3010 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
3011 x_target = par_ab[chNum][0][iseg] * (
Z0_SRC -
ChZ[chNum]) + par_ab[chNum][1][iseg];
3012 y_target = par_ab[chNum][2][iseg] * (
Z0_SRC -
ChZ[chNum]) + par_ab[chNum][3][iseg];
3018 if (Nhits_Ch_[chNum][iseg] == Nhitm)
3019 cout <<
" chNum " << chNum <<
" iseg " << iseg <<
" Nhits_Ch " << Nhits_Ch_[chNum][iseg] <<
" Chi2 "
3020 << Chi2_ndf[chNum][iseg] <<
" x_target " << x_target <<
" y_target " << y_target << endl;
3033 Int_t Nbest_vec_ind = 0;
3035 for (
Int_t ind_best = 0; ind_best <
kmaxSeg; ind_best++) {
3037 Int_t iseg_best = -1;
3038 vec_ind_best_seg[ind_best] = -1;
3040 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
3042 if (Nhits_Ch_[chNum][iseg] != Nhitm)
3044 if (Nhitm > 4 && Chi2_ndf[chNum][iseg] >= Chi2_best)
3048 if (Nbest_vec_ind > 0) {
3049 for (
Int_t ii = 0; ii < Nbest_vec_ind; ii++) {
3050 if (iseg == vec_ind_best_seg[ii]) {
3058 Chi2_best = Chi2_ndf[chNum][iseg];
3062 if (iseg_best == -1)
3065 cout <<
" ind_best " << ind_best <<
" Chi2_best " << Chi2_best <<
" iseg_best " << iseg_best << endl;
3066 vec_ind_best_seg[ind_best] = iseg_best;
3070 cout <<
"-- reject(common points)" << endl;
3071 for (
Int_t iseg = 0; iseg < Nsegm[chNum]; iseg++) {
3074 if (Nbest_vec_ind > 0) {
3075 for (
Int_t ii = 0; ii < Nbest_vec_ind; ii++) {
3076 if (iseg == vec_ind_best_seg[ii]) {
3086 if (XVU_coor[chNum][i1][iseg] > -999.) {
3087 if (
fabs(XVU_coor[chNum][i1][iseg] - XVU_coor[chNum][i1][iseg_best]) <
dw_half) {
3089 cout <<
" reject point pl:" << i1 <<
" XUV " << XVU_coor[chNum][i1][iseg]
3090 <<
" iseg = " << iseg << endl;
3092 XVU_coor[chNum][i1][iseg] = -999.;
3093 Nhits_Ch_[chNum][iseg]--;
3094 if (Nhits_Ch_[chNum][iseg] < Min_hits6) {
3095 Nhits_Ch_[chNum][iseg] = 0;
3103 cout <<
" Nbest_vec_ind " << Nbest_vec_ind << endl;
3105 cout <<
" Chi2_best " << Chi2_best <<
" Nhits " << Nhits_Ch_[chNum][iseg_best] << endl;
3108 vector<segments> vtmpSeg;
3111 for (
int itSeg = 0; itSeg < Nsegm[chNum]; ++itSeg) {
3112 if (Nhits_Ch_[chNum][itSeg] == Nhitm && Chi2_ndf[chNum][itSeg] < kChi2_Max_) {
3113 tmpSeg.
Nhits = Nhits_Ch_[chNum][itSeg];
3114 tmpSeg.
Chi2 = Chi2_ndf[chNum][itSeg];
3116 for (
int ipla = 0; ipla <
kNPlanes; ipla++) {
3117 tmpSeg.
coord[ipla] = XVU_coor[chNum][ipla][itSeg];
3118 tmpSeg.
clust[ipla] = Cluster_coor[chNum][ipla][itSeg];
3121 Double_t x_t = par_ab[chNum][0][itSeg] * (
Z0_SRC -
ChZ[chNum]) + par_ab[chNum][1][itSeg];
3128 for (
int ipar = 0; ipar < 4; ipar++) {
3129 tmpSeg.
param[ipar] = par_ab[chNum][ipar][itSeg];
3131 for (
Int_t i1 = 0; i1 < 4; i1++) {
3132 for (
Int_t j1 = 0; j1 < 4; j1++) {
3133 tmpSeg.
sigma2[i1][j1] = bmatr_seg[itSeg][i1][j1];
3136 vtmpSeg.push_back(tmpSeg);
3145 for (
size_t iterOut = 0; iterOut < vtmpSeg.size(); iterOut++) {
3147 OutSegArray[OutSegCount] = vtmpSeg.at(iterOut);
3162 for (
int iterOut = 0; iterOut <
kmaxSeg; iterOut++) {
3163 if (OutSegArray[iterOut].Chi2 < 900.) {
3164 Nbest_seg_[chNum]++;
3165 Nhits_seg_[chNum][iterOut] = OutSegArray[iterOut].
Nhits;
3166 Chi2_ndf_seg_[chNum][iterOut] = OutSegArray[iterOut].
Chi2;
3168 for (
int iterCoord = 0; iterCoord <
kNPlanes; iterCoord++) {
3169 coor_seg[chNum][iterCoord][iterOut] = OutSegArray[iterOut].
coord[iterCoord];
3170 cluster_seg[chNum][iterCoord][iterOut] = OutSegArray[iterOut].
clust[iterCoord];
3172 for (
int ipar = 0; ipar < 4; ipar++) {
3173 Par_ab_seg[chNum][ipar][iterOut] = OutSegArray[iterOut].
param[ipar];
3175 for (
int i1 = 0; i1 < 4; i1++) {
3176 for (
int j1 = 0; j1 < 4; j1++) {
3177 sigma2_s[chNum][iterOut][i1][j1] = OutSegArray[iterOut].
sigma2[i1][j1];
3185 for (
Int_t iBig = 0; iBig <
kBig; iBig++) {
3186 XVU_coor[chNum][i1][iBig] = -999.;
3187 Cluster_coor[chNum][i1][iBig] = -1;
3316 Float_t z2_[6] = {z[chN][0] * z[chN][0], z[chN][1] * z[chN][1], z[chN][2] * z[chN][2],
3317 z[chN][3] * z[chN][3], z[chN][4] * z[chN][4], z[chN][5] * z[chN][5]};
3319 AA[0][0] += 2 * z2_[0] * h_[0] / sigm2_[0] + z2_[2] * h_[2] / (2 * sigm2_[2]) + z2_[1] * h_[1] / (2 * sigm2_[1])
3320 + 2 * z2_[3] * h_[3] / sigm2_[3] + z2_[5] * h_[5] / (2 * sigm2_[5])
3321 + z2_[4] * h_[4] / (2 * sigm2_[4]);
3322 AA[0][1] += 2 * z[chN][0] * h_[0] / sigm2_[0] + z[chN][2] * h_[2] / (2 * sigm2_[2])
3323 + z[chN][1] * h_[1] / (2 * sigm2_[1]) + 2 * z[chN][3] * h_[3] / sigm2_[3]
3324 + z[chN][5] * h_[5] / (2 * sigm2_[5]) + z[chN][4] * h_[4] / (2 * sigm2_[4]);
3326 * (z2_[2] * h_[2] / (2 * sigm2_[2]) - z2_[1] * h_[1] / (2 * sigm2_[1])
3327 + z2_[5] * h_[5] / (2 * sigm2_[5]) - z2_[4] * h_[4] / (2 * sigm2_[4]));
3329 * (z[chN][2] * h_[2] / (2 * sigm2_[2]) - z[chN][1] * h_[1] / (2 * sigm2_[1])
3330 + z[chN][5] * h_[5] / (2 * sigm2_[5]) - z[chN][4] * h_[4] / (2 * sigm2_[4]));
3331 AA[1][0] = AA[0][1];
3332 AA[1][1] += 2 * h_[0] / sigm2_[0] + 0.5 * h_[2] / sigm2_[2] + 0.5 * h_[1] / sigm2_[1] + 2 * h_[3] / sigm2_[3]
3333 + 0.5 * h_[5] / sigm2_[5] + 0.5 * h_[4] / sigm2_[4];
3335 * (z[chN][2] * h_[2] / sigm2_[2] - z[chN][1] * h_[1] / sigm2_[1] + z[chN][5] * h_[5] / sigm2_[5]
3336 - z[chN][4] * h_[4] / sigm2_[4])
3338 AA[1][3] +=
sq3 * (h_[2] / sigm2_[2] - h_[1] / sigm2_[1] + h_[5] / sigm2_[5] - h_[4] / sigm2_[4]) * 0.5;
3339 AA[2][0] = AA[0][2];
3340 AA[2][1] = AA[1][2];
3342 * (z2_[2] * h_[2] / sigm2_[2] + z2_[1] * h_[1] / sigm2_[1] + z2_[5] * h_[5] / sigm2_[5]
3343 + z2_[4] * h_[4] / sigm2_[4])
3346 * (z[chN][2] * h_[2] / sigm2_[2] + z[chN][1] * h_[1] / sigm2_[1] + z[chN][5] * h_[5] / sigm2_[5]
3347 + z[chN][4] * h_[4] / sigm2_[4])
3349 AA[3][0] = AA[0][3];
3350 AA[3][1] = AA[1][3];
3351 AA[3][2] = AA[2][3];
3353 3.0 * (0.5 * h_[2] / sigm2_[2] + 0.5 * h_[1] / sigm2_[1] + 0.5 * h_[5] / sigm2_[5] + 0.5 * h_[4] / sigm2_[4]);