872 clock_t tStart = clock();
875 cout <<
"======================== DCH track finder exec started ====================" << endl;
877 cout <<
"Event number: " <<
fEventNo << endl;
881 const Int_t nDim = 80;
882 const Int_t nPlanes = 16;
884 Double_t driftLength[nPlanes][nDim];
886 Int_t hitId[nPlanes][nDim];
892 Bool_t used[nPlanes][nDim];
893 for (
Int_t iPlanes = 0; iPlanes < nPlanes; iPlanes++) {
895 for (
Int_t iDim = 0; iDim < nDim; iDim++) {
896 used[iPlanes][iDim] =
kFALSE;
897 driftLength[iPlanes][iDim] = 0.;
898 hitId[iPlanes][iDim] = -999;
899 wires[iPlanes][iDim] = 0.;
935 if (wire > 143 && wire < 176) {
936 if (wire > 159 && wire < 176) {
944 for (
Int_t sec = 0; sec < it[plane] - 1; sec++)
945 if (wire == wires[plane][sec]) {
950 if (it[plane] == (nDim - 1) || secondaries)
953 wires[plane][it[plane]] = wire;
954 driftLength[plane][it[plane]] = time;
1022 hitId[plane][it[plane]] = hit->
GetHitId();
1023 wires[plane][it[plane]] = wire;
1024 driftLength[plane][it[plane]] = time;
1037 const Int_t nWires_ = 4;
1038 const Int_t nLayers_ = 2;
1039 TString wireNames[nWires_] = {
"v",
"u",
"y",
"x"};
1040 TString layNames[nLayers_] = {
"a",
"b"};
1045 Int_t start = 2 * iWire + (nPlanes / 2) * iDch;
1046 Int_t finish = start + 1;
1047 Double_t*** coord = (iWire == 0) ?
v : (iWire == 1) ?
u : (iWire == 2) ?
y :
x;
1048 Int_t*** coordId = (iWire == 0) ?
vId : (iWire == 1) ?
uId : (iWire == 2) ?
yId :
xId;
1052 pairs[iDch][iWire] =
1053 Reconstruction(iDch + 1, wireNames[iWire],
pairs[iDch][iWire], it[start], it[finish], wires[start],
1054 wires[finish], driftLength[start], driftLength[finish], used[start], used[finish],
1055 coord[iDch], sigma[iDch], coord_time[iDch]);
1067 iDch + 1, wireNames[iWire], layNames[iLayer],
singles[iDch][iWire][iLayer], it[cntr],
1068 wires[cntr], driftLength[cntr], used[cntr], single_coord[iDch], single_sigma[iDch]);
1073 iDch + 1, wireNames[iWire],
pairs[iDch][iWire], it[start], it[finish], wires[start], wires[finish],
1074 driftLength[start], driftLength[finish], hitId[start], hitId[finish], used[start], used[finish],
1075 coord[iDch], coordId[iDch], sigma[iDch], coord_time[iDch]);
1091 iDch + 1, wireNames[iWire], layNames[iLayer],
singles[iDch][iWire][iLayer], it[cntr],
1092 wires[cntr], driftLength[cntr], hitId[cntr], used[cntr], single_coord[iDch],
1093 single_coordId[iDch], single_sigma[iDch]);
1158 cout <<
"======================== DCH track finder exec finished ===================" << endl;
1159 clock_t tFinish = clock();
1315 for (
Int_t i = 0;
i < pairU;
i++) {
1316 if (nDC_segments > 25 *
N - 1)
1318 Double_t u_coord = (u_ab[0][
i] + u_ab[1][
i]) / 2;
1323 for (
Int_t j = 0; j < pairV; j++) {
1324 if (nDC_segments > 25 *
N - 1)
1327 Double_t v_coord = (v_ab[0][j] + v_ab[1][j]) / 2;
1328 if (
fabs(u_coord) < 12. &&
fabs(v_coord) < 12.)
1332 if (
fabs(u_coord - 30) < 12 &&
fabs(v_coord + 22) < 12)
1336 if (
fabs(u_coord - 37) < 14 &&
fabs(v_coord + 25) < 16)
1344 Double_t x_est = isqrt_2 * (VX - UX);
1345 Double_t y_est = isqrt_2 * (UY + VY);
1348 for (
Int_t k = 0; k < pairX; k++) {
1349 Double_t x_coord = (x_ab[0][k] + x_ab[1][k]) / 2;
1350 if (nDC_segments > 25 *
N - 1)
1354 if (
Abs(x_coord - x_est) > dX_thresh)
1356 dX_thresh =
Abs(x_coord - x_est);
1358 rh_seg[0][nDC_segments] = x_ab[0][k];
1359 rh_seg[1][nDC_segments] = x_ab[1][k];
1360 rh_seg[4][nDC_segments] = u_ab[0][
i];
1361 rh_seg[5][nDC_segments] = u_ab[1][
i];
1362 rh_seg[6][nDC_segments] = v_ab[0][j];
1363 rh_seg[7][nDC_segments] = v_ab[1][j];
1364 rhId_seg[0][nDC_segments] = x_abId[0][k];
1365 rhId_seg[1][nDC_segments] = x_abId[1][k];
1366 rhId_seg[4][nDC_segments] = u_abId[0][
i];
1367 rhId_seg[5][nDC_segments] = u_abId[1][
i];
1368 rhId_seg[6][nDC_segments] = v_abId[0][j];
1369 rhId_seg[7][nDC_segments] = v_abId[1][j];
1370 rh_seg_time[0][nDC_segments] = x_ab_time[0][k];
1371 rh_seg_time[1][nDC_segments] = x_ab_time[1][k];
1372 rh_seg_time[4][nDC_segments] = u_ab_time[0][
i];
1373 rh_seg_time[5][nDC_segments] = u_ab_time[1][
i];
1374 rh_seg_time[6][nDC_segments] = v_ab_time[0][j];
1375 rh_seg_time[7][nDC_segments] = v_ab_time[1][j];
1376 rh_sigm_seg[0][nDC_segments] = sigm_x_ab[0][k];
1377 rh_sigm_seg[1][nDC_segments] = sigm_x_ab[1][k];
1378 rh_sigm_seg[4][nDC_segments] = sigm_u_ab[0][
i];
1379 rh_sigm_seg[5][nDC_segments] = sigm_u_ab[1][
i];
1380 rh_sigm_seg[6][nDC_segments] = sigm_v_ab[0][j];
1381 rh_sigm_seg[7][nDC_segments] = sigm_v_ab[1][j];
1384 if (nDC_segments > 25 *
N - 1)
1392 for (
Int_t m = 0;
m < pairY;
m++) {
1393 if (nDC_segments > 25 *
N - 1)
1395 Double_t y_coord = (y_ab[0][
m] + y_ab[1][
m]) / 2;
1398 if (
Abs(y_coord - y_est) > dY_thresh)
1400 dY_thresh =
Abs(y_coord - y_est);
1402 rh_seg[2][nDC_segments] = y_ab[0][
m];
1403 rh_seg[3][nDC_segments] = y_ab[1][
m];
1404 rh_seg[4][nDC_segments] = u_ab[0][
i];
1405 rh_seg[5][nDC_segments] = u_ab[1][
i];
1406 rh_seg[6][nDC_segments] = v_ab[0][j];
1407 rh_seg[7][nDC_segments] = v_ab[1][j];
1408 rhId_seg[2][nDC_segments] = y_abId[0][
m];
1409 rhId_seg[3][nDC_segments] = y_abId[1][
m];
1410 rhId_seg[4][nDC_segments] = u_abId[0][
i];
1411 rhId_seg[5][nDC_segments] = u_abId[1][
i];
1412 rhId_seg[6][nDC_segments] = v_abId[0][j];
1413 rhId_seg[7][nDC_segments] = v_abId[1][j];
1414 rh_seg_time[2][nDC_segments] = y_ab_time[0][
m];
1415 rh_seg_time[3][nDC_segments] = y_ab_time[1][
m];
1416 rh_seg_time[4][nDC_segments] = u_ab_time[0][
i];
1417 rh_seg_time[5][nDC_segments] = u_ab_time[1][
i];
1418 rh_seg_time[6][nDC_segments] = v_ab_time[0][j];
1419 rh_seg_time[7][nDC_segments] = v_ab_time[1][j];
1420 rh_sigm_seg[2][nDC_segments] = sigm_y_ab[0][
m];
1421 rh_sigm_seg[3][nDC_segments] = sigm_y_ab[1][
m];
1422 rh_sigm_seg[4][nDC_segments] = sigm_u_ab[0][
i];
1423 rh_sigm_seg[5][nDC_segments] = sigm_u_ab[1][
i];
1424 rh_sigm_seg[6][nDC_segments] = sigm_v_ab[0][j];
1425 rh_sigm_seg[7][nDC_segments] = sigm_v_ab[1][j];
1429 for (
Int_t kk = 0; kk < single_xa; kk++) {
1430 if (
Abs(x_single[0][kk] - x_est) > 1.2)
1433 if (
Abs(x_single[0][kk] - x_est) < min_a) {
1434 min_a =
Abs(x_single[0][kk] - x_est);
1435 rh_seg[0][nDC_segments] = x_single[0][kk];
1436 rhId_seg[0][nDC_segments] = x_singleId[0][kk];
1437 rh_sigm_seg[0][nDC_segments] = sigm_x_single[0][kk];
1441 for (
Int_t kk = 0; kk < single_xb; kk++) {
1442 if (
Abs(x_single[1][kk] - x_est) > 1.2)
1444 if (
Abs(x_single[1][kk] - x_est) < min_b) {
1445 min_b =
Abs(x_single[1][kk] - x_est);
1446 rh_seg[1][nDC_segments] = x_single[1][kk];
1447 rhId_seg[1][nDC_segments] = x_singleId[1][kk];
1448 rh_sigm_seg[1][nDC_segments] = sigm_x_single[1][kk];
1452 if (nDC_segments > 25 *
N - 1)
1456 if (foundX && !foundY) {
1459 for (
Int_t kk = 0; kk < single_ya; kk++) {
1460 if (
Abs(y_single[0][kk] - y_est) > 1.2)
1462 if (
Abs(y_single[0][kk] - y_est) < min_a) {
1463 min_a =
Abs(y_single[0][kk] - y_est);
1464 rh_seg[2][nDC_segments] = y_single[0][kk];
1465 rhId_seg[2][nDC_segments] = y_singleId[0][kk];
1466 rh_sigm_seg[2][nDC_segments] = sigm_y_single[0][kk];
1470 for (
Int_t kk = 0; kk < single_yb; kk++) {
1471 if (
Abs(y_single[1][kk] - y_est) > 1.2)
1473 if (
Abs(y_single[1][kk] - y_est) < min_b) {
1474 min_b =
Abs(y_single[1][kk] - y_est);
1475 rh_seg[3][nDC_segments] = y_single[1][kk];
1476 rhId_seg[3][nDC_segments] = y_singleId[1][kk];
1477 rh_sigm_seg[3][nDC_segments] = sigm_y_single[1][kk];
1483 if (foundX || foundY)
1487 return nDC_segments;
1531 for (
Int_t i = 0;
i < pairX;
i++) {
1532 if (nDC_segments > 25 *
N - 1)
1534 Double_t x_coord = (x_ab[0][
i] + x_ab[1][
i]) / 2;
1539 for (
Int_t j = 0; j < pairY; j++) {
1540 Double_t y_coord = (y_ab[0][j] + y_ab[1][j]) / 2;
1543 if (
fabs(x_coord + 37) < 12 &&
fabs(y_coord - 5) < 12)
1547 if (
fabs(x_coord + 45) < 12 &&
fabs(y_coord - 8) < 12)
1551 if (
fabs(y_coord) < 12. &&
fabs(x_coord) < 12.)
1557 Double_t u_est = isqrt_2 * (YU - XU);
1558 Double_t v_est = isqrt_2 * (YV + XV);
1561 for (
Int_t k = 0; k < pairU; k++) {
1562 Double_t u_coord = (u_ab[0][k] + u_ab[1][k]) / 2;
1565 if (
Abs(u_coord - u_est) > dU_thresh)
1567 dU_thresh =
Abs(u_coord - u_est);
1569 rh_seg[0][nDC_segments] = x_ab[0][
i];
1570 rh_seg[1][nDC_segments] = x_ab[1][
i];
1571 rh_seg[2][nDC_segments] = y_ab[0][j];
1572 rh_seg[3][nDC_segments] = y_ab[1][j];
1573 rh_seg[4][nDC_segments] = u_ab[0][k];
1574 rh_seg[5][nDC_segments] = u_ab[1][k];
1575 rhId_seg[0][nDC_segments] = x_abId[0][
i];
1576 rhId_seg[1][nDC_segments] = x_abId[1][
i];
1577 rhId_seg[2][nDC_segments] = y_abId[0][j];
1578 rhId_seg[3][nDC_segments] = y_abId[1][j];
1579 rhId_seg[4][nDC_segments] = u_abId[0][k];
1580 rhId_seg[5][nDC_segments] = u_abId[1][k];
1581 rh_seg_time[0][nDC_segments] = x_ab_time[0][
i];
1582 rh_seg_time[1][nDC_segments] = x_ab_time[1][
i];
1583 rh_seg_time[2][nDC_segments] = y_ab_time[0][j];
1584 rh_seg_time[3][nDC_segments] = y_ab_time[1][j];
1585 rh_seg_time[4][nDC_segments] = u_ab_time[0][k];
1586 rh_seg_time[5][nDC_segments] = u_ab_time[1][k];
1587 rh_sigm_seg[0][nDC_segments] = sigm_x_ab[0][
i];
1588 rh_sigm_seg[1][nDC_segments] = sigm_x_ab[1][
i];
1589 rh_sigm_seg[2][nDC_segments] = sigm_y_ab[0][j];
1590 rh_sigm_seg[3][nDC_segments] = sigm_y_ab[1][j];
1591 rh_sigm_seg[4][nDC_segments] = sigm_u_ab[0][k];
1592 rh_sigm_seg[5][nDC_segments] = sigm_u_ab[1][k];
1595 if (nDC_segments > 25 *
N - 1)
1602 for (
Int_t m = 0;
m < pairV;
m++) {
1603 if (nDC_segments > 25 *
N - 1)
1605 Double_t v_coord = (v_ab[0][
m] + v_ab[1][
m]) / 2;
1608 if (
Abs(v_coord - v_est) > dV_thresh)
1610 dV_thresh =
Abs(v_coord - v_est);
1613 rh_seg[0][nDC_segments] = x_ab[0][
i];
1614 rh_seg[1][nDC_segments] = x_ab[1][
i];
1615 rh_seg[2][nDC_segments] = y_ab[0][j];
1616 rh_seg[3][nDC_segments] = y_ab[1][j];
1617 rh_seg[6][nDC_segments] = v_ab[0][
m];
1618 rh_seg[7][nDC_segments] = v_ab[1][
m];
1619 rhId_seg[0][nDC_segments] = x_abId[0][
i];
1620 rhId_seg[1][nDC_segments] = x_abId[1][
i];
1621 rhId_seg[2][nDC_segments] = y_abId[0][j];
1622 rhId_seg[3][nDC_segments] = y_abId[1][j];
1623 rhId_seg[6][nDC_segments] = v_abId[0][
m];
1624 rhId_seg[7][nDC_segments] = v_abId[1][
m];
1625 rh_seg_time[0][nDC_segments] = x_ab_time[0][
i];
1626 rh_seg_time[1][nDC_segments] = x_ab_time[1][
i];
1627 rh_seg_time[2][nDC_segments] = y_ab_time[0][j];
1628 rh_seg_time[3][nDC_segments] = y_ab_time[1][j];
1629 rh_seg_time[6][nDC_segments] = v_ab_time[0][
m];
1630 rh_seg_time[7][nDC_segments] = v_ab_time[1][
m];
1631 rh_sigm_seg[0][nDC_segments] = sigm_x_ab[0][
i];
1632 rh_sigm_seg[1][nDC_segments] = sigm_x_ab[1][
i];
1633 rh_sigm_seg[2][nDC_segments] = sigm_y_ab[0][j];
1634 rh_sigm_seg[3][nDC_segments] = sigm_y_ab[1][j];
1635 rh_sigm_seg[6][nDC_segments] = sigm_v_ab[0][
m];
1636 rh_sigm_seg[7][nDC_segments] = sigm_v_ab[1][
m];
1641 for (
Int_t kk = 0; kk < single_ua; kk++) {
1642 if (
Abs(u_single[0][kk] - u_est) > 1.2)
1644 if (
Abs(u_single[0][kk] - u_est) < min_a) {
1645 min_a =
Abs(u_single[0][kk] - u_est);
1646 rh_seg[4][nDC_segments] = u_single[0][kk];
1647 rhId_seg[4][nDC_segments] = u_singleId[0][kk];
1648 rh_sigm_seg[4][nDC_segments] = sigm_u_single[0][kk];
1652 for (
Int_t kk = 0; kk < single_ub; kk++) {
1653 if (
Abs(u_single[1][kk] - u_est) > 1.2)
1655 if (
Abs(u_single[1][kk] - u_est) < min_b) {
1656 min_b =
Abs(u_single[1][kk] - u_est);
1657 rh_seg[5][nDC_segments] = u_single[1][kk];
1658 rhId_seg[5][nDC_segments] = u_singleId[1][kk];
1659 rh_sigm_seg[5][nDC_segments] = sigm_u_single[1][kk];
1663 if (nDC_segments > 25 *
N - 1)
1667 if (nDC_segments > 25 *
N - 1)
1670 if (!foundV && foundU) {
1673 for (
Int_t kk = 0; kk < single_va; kk++) {
1674 if (
Abs(v_single[0][kk] - v_est) > 1.2)
1676 if (
Abs(v_single[0][kk] - v_est) < min_a) {
1677 min_a =
Abs(v_single[0][kk] - v_est);
1678 rh_seg[6][nDC_segments] = v_single[0][kk];
1679 rhId_seg[6][nDC_segments] = v_singleId[0][kk];
1680 rh_sigm_seg[6][nDC_segments] = sigm_v_single[0][kk];
1684 for (
Int_t kk = 0; kk < single_vb; kk++) {
1685 if (
Abs(v_single[1][kk] - v_est) > 1.2)
1687 if (
Abs(v_single[1][kk] - v_est) < min_b) {
1688 min_b =
Abs(v_single[1][kk] - v_est);
1689 rh_seg[7][nDC_segments] = v_single[1][kk];
1690 rhId_seg[7][nDC_segments] = v_singleId[1][kk];
1691 rh_sigm_seg[7][nDC_segments] = sigm_v_single[1][kk];
1696 if (foundV || foundU)
1700 return nDC_segments;
1717 for (
Int_t j = 0; j < nDC_segments; j++) {
1718 Int_t worst_hit = -1;
1726 if (
Abs(rh_seg[
i][j] + 999.) > FLT_EPSILON)
1729 for (
Int_t rej = 0; rej < 2; rej++) {
1731 _rh_seg[
i] = rh_seg[
i][j];
1732 _rh_sigm_seg[
i] = rh_sigm_seg[
i][j];
1735 fit_seg(
z_loc, _rh_seg, _rh_sigm_seg, _par_ab, -1, -1);
1737 par_ab[
i][j] = _par_ab[
i];
1743 if (
Abs(rh_seg[
i][j] + 999.) < FLT_EPSILON)
1747 chi2[j] += (resid * resid) / rh_sigm_seg[
i][j];
1748 if (
Abs(resid) > max_resid) {
1750 max_resid =
Abs(resid);
1754 chi2[j] /= (size_seg[j] - 4);
1756 if (chi2[j] > 180.) {
1757 if (size_seg[j] == 6) {
1761 rh_seg[worst_hit][j] = -999.;
1775 par_ab[0][j] += x_slope_sh + x_slope_sh * par_ab[0][j] * par_ab[0][j];
1776 par_ab[2][j] += y_slope_sh + y_slope_sh * par_ab[2][j] * par_ab[2][j];
1777 par_ab[1][j] += x_sh;
1778 par_ab[3][j] += y_sh;
1782 hXDC1_atZ0->Fill(par_ab[0][j] * (-Z_dch + 249) + par_ab[1][j]);
1783 hYDC1_atZ0->Fill(par_ab[2][j] * (-Z_dch + 249) + par_ab[3][j]);
1785 hXDC2_atZ0->Fill(par_ab[0][j] * (-Z_dch + 249) + par_ab[1][j]);
1786 hYDC2_atZ0->Fill(par_ab[2][j] * (-Z_dch + 249) + par_ab[3][j]);
1790 if ((par_ab[2][j] * (-Z_dch + 249) + par_ab[3][j]) < -50
1791 || (par_ab[2][j] * (-Z_dch + 249) + par_ab[3][j]) > 50
1792 || (par_ab[0][j] * (-Z_dch + 249) + par_ab[1][j]) < -85
1793 || (par_ab[0][j] * (-Z_dch + 249) + par_ab[1][j]) > 85)
1798 Int_t coeff = (dchID == 1) ? 1 : -1;
1799 x_glob[j] = coeff * par_ab[0][j] *
dZ_dch_mid + par_ab[1][j];
1800 y_glob[j] = coeff * par_ab[2][j] *
dZ_dch_mid + par_ab[3][j];
1801 if (size_seg[j] > 5)
1802 hasSuffNumberOfSegments =
kTRUE;
1804 return hasSuffNumberOfSegments;
1869 for (
Int_t it1 = 0; it1 < nDC_segments; it1++) {
1870 if (chi2[it1] > 990.)
1877 _rh_seg[
i] = rh_seg[
i][it1];
1878 _rh_sigm_seg[
i] = rh_sigm_seg[
i][it1];
1881 fit_seg(
z_loc, _rh_seg, _rh_sigm_seg, _par_ab, -1, -1);
1883 par_ab[
i][it1] = _par_ab[
i];
1885 if (size_seg[it1] == 8) {
1896 double dist_a = 999;
1897 double dist_b = 999;
1898 if (
fabs(modf(rh_seg[0][it1], &int1)) < .5) {
1899 dist_a =
fabs(modf(rh_seg[0][it1], &int1));
1906 dist_a = 1 -
fabs(modf(rh_seg[0][it1], &int1));
1913 if (
fabs(modf(rh_seg[1][it1], &int1)) < .5) {
1914 dist_b = 0.5 -
fabs(modf(rh_seg[1][it1], &int1));
1921 dist_b =
fabs(modf(rh_seg[1][it1], &int1)) - .5;
1932 if (dist_a > .1 && dist_a < .4) {
1944 if (dist_b > .1 && dist_b < .4) {
1961 if (
fabs(modf(rh_seg[2][it1], &int1)) < .5) {
1962 dist_a =
fabs(modf(rh_seg[2][it1], &int1));
1964 dist_a = 1 -
fabs(modf(rh_seg[2][it1], &int1));
1966 if (
fabs(modf(rh_seg[3][it1], &int1)) < .5) {
1967 dist_b = 0.5 -
fabs(modf(rh_seg[3][it1], &int1));
1969 dist_b =
fabs(modf(rh_seg[3][it1], &int1)) - .5;
1973 if (dist_a > .1 && dist_a < .4)
1979 if (dist_b > .1 && dist_b < .4)
1987 if (dist_a > .1 && dist_a < .4) {
1996 if (dist_b > .1 && dist_b < .4) {
2011 if (
fabs(modf(rh_seg[4][it1], &int1)) < .5) {
2012 dist_a =
fabs(modf(rh_seg[4][it1], &int1));
2014 dist_a = 1 -
fabs(modf(rh_seg[4][it1], &int1));
2016 if (
fabs(modf(rh_seg[5][it1], &int1)) < .5) {
2017 dist_b = 0.5 -
fabs(modf(rh_seg[5][it1], &int1));
2019 dist_b =
fabs(modf(rh_seg[5][it1], &int1)) - .5;
2023 if (dist_a > .1 && dist_a < .4)
2029 if (dist_b > .1 && dist_b < .4)
2037 if (dist_a > .1 && dist_a < .4) {
2046 if (dist_b > .1 && dist_b < .4) {
2059 if (
fabs(modf(rh_seg[6][it1], &int1)) < .5) {
2061 dist_a =
fabs(modf(rh_seg[6][it1], &int1));
2063 dist_a = 1 -
fabs(modf(rh_seg[6][it1], &int1));
2065 if (
fabs(modf(rh_seg[7][it1], &int1)) < .5) {
2066 dist_b = 0.5 -
fabs(modf(rh_seg[7][it1], &int1));
2068 dist_b =
fabs(modf(rh_seg[7][it1], &int1)) - .5;
2072 if (dist_a > .1 && dist_a < .4)
2078 if (dist_b > .1 && dist_b < .4)
2087 if (dist_a > .1 && dist_a < .4) {
2096 if (dist_b > .1 && dist_b < .4) {
2111 double dist_a = 999;
2112 double dist_b = 999;
2113 if (
fabs(modf(rh_seg[0][it1], &int1)) < .5) {
2114 dist_a =
fabs(modf(rh_seg[0][it1], &int1));
2116 dist_a = 1 -
fabs(modf(rh_seg[0][it1], &int1));
2118 if (
fabs(modf(rh_seg[1][it1], &int1)) < .5) {
2119 dist_b = 0.5 -
fabs(modf(rh_seg[1][it1], &int1));
2121 dist_b =
fabs(modf(rh_seg[1][it1], &int1)) - .5;
2125 if (dist_a > .1 && dist_a < .4)
2131 if (dist_b > .1 && dist_b < .4)
2138 if (dist_a > .1 && dist_a < .4) {
2147 if (dist_b > .1 && dist_b < .4) {
2163 if (
fabs(modf(rh_seg[2][it1], &int1)) < .5) {
2164 dist_a =
fabs(modf(rh_seg[2][it1], &int1));
2166 dist_a = 1 -
fabs(modf(rh_seg[2][it1], &int1));
2168 if (
fabs(modf(rh_seg[3][it1], &int1)) < .5) {
2169 dist_b = 0.5 -
fabs(modf(rh_seg[3][it1], &int1));
2171 dist_b =
fabs(modf(rh_seg[3][it1], &int1)) - .5;
2175 if (dist_a > .1 && dist_a < .4)
2181 if (dist_b > .1 && dist_b < .4)
2188 if (dist_a > .1 && dist_a < .4) {
2197 if (dist_b > .1 && dist_b < .4) {
2213 if (
fabs(modf(rh_seg[4][it1], &int1)) < .5) {
2214 dist_a =
fabs(modf(rh_seg[4][it1], &int1));
2216 dist_a = 1 -
fabs(modf(rh_seg[4][it1], &int1));
2218 if (
fabs(modf(rh_seg[5][it1], &int1)) < .5) {
2219 dist_b = 0.5 -
fabs(modf(rh_seg[5][it1], &int1));
2221 dist_b =
fabs(modf(rh_seg[5][it1], &int1)) - .5;
2225 if (dist_a > .1 && dist_a < .4)
2231 if (dist_b > .1 && dist_b < .4)
2238 if (dist_a > .1 && dist_a < .4) {
2247 if (dist_b > .1 && dist_b < .4) {
2263 if (
fabs(modf(rh_seg[6][it1], &int1)) < .5) {
2264 dist_a =
fabs(modf(rh_seg[6][it1], &int1));
2266 dist_a = 1 -
fabs(modf(rh_seg[6][it1], &int1));
2268 if (
fabs(modf(rh_seg[7][it1], &int1)) < .5) {
2269 dist_b = 0.5 -
fabs(modf(rh_seg[7][it1], &int1));
2271 dist_b =
fabs(modf(rh_seg[7][it1], &int1)) - .5;
2275 if (dist_a > .1 && dist_a < .4)
2281 if (dist_b > .1 && dist_b < .4)
2288 if (dist_a > .1 && dist_a < .4) {
2297 if (dist_b > .1 && dist_b < .4) {
2413 Int_t* SegMC_IdCount)
2416 Int_t good_dc_segs = 0;
2417 Int_t best_seg1 = -1;
2418 Int_t best_chi1 = 1000.;
2421 for (
Int_t iSegment = 0; iSegment < nDC_segments; iSegment++) {
2422 if (chi2Arr[iSegment] > 990.)
2426 if (sizeArr[iSegment] == 8) {
2427 if (chi2Arr[iSegment] < best_chi1) {
2428 best_chi1 = chi2Arr[iSegment];
2429 best_seg1 = iSegment;
2432 FairTrackParam trackParam;
2436 Double_t x_align = (dchID == 1) ? 0.0 : 0.0;
2437 Double_t y_align = (dchID == 1) ? 0.0 : 0.0;
2438 Double_t tx_align = (dchID == 1) ? 0.0 : 0.0;
2439 Double_t ty_align = (dchID == 1) ? 0.0 : 0.0;
2440 trackParam.SetPosition(
TVector3(-x0 + x_align, y0 + y_align, z0));
2441 trackParam.SetTx(-parArr[0][iSegment] + tx_align);
2442 trackParam.SetTy(parArr[2][iSegment] + ty_align);
2443 trackParam.SetCovariance(0, 0, sigm_seg_par[1][iSegment] * sigm_seg_par[1][iSegment]);
2444 trackParam.SetCovariance(1, 1, sigm_seg_par[3][iSegment] * sigm_seg_par[3][iSegment]);
2445 trackParam.SetCovariance(2, 2, sigm_seg_par[0][iSegment] * sigm_seg_par[0][iSegment]);
2446 trackParam.SetCovariance(3, 3, sigm_seg_par[2][iSegment] * sigm_seg_par[2][iSegment]);
2448 track->
SetChi2(chi2Arr[iSegment]);
2455 track->
SetLength(SegMC_IdCount[iSegment]);
2457 track->
SetNHits(sizeArr[iSegment]);
2460 haX1->Fill(-parArr[0][iSegment]);
2461 haY1->Fill(parArr[2][iSegment]);
2462 hx1->Fill(parArr[1][iSegment]);
2463 hy1->Fill(parArr[3][iSegment]);
2464 hlocXY1->Fill(rh_seg[0][iSegment], rh_seg[2][iSegment]);
2465 hXvsAx->Fill(parArr[1][iSegment], -parArr[0][iSegment]);
2467 for (
int k = 0; k < 8; k++) {
2468 if (sizeArr[iSegment] == 6 && rh_seg[k][iSegment] == -999)
2470 if (sizeArr[iSegment] != 6) {
2471 if (rh_seg[k][iSegment] == -999) {
2481 haX2->Fill(-parArr[0][iSegment]);
2482 haY2->Fill(parArr[2][iSegment]);
2483 hx2->Fill(parArr[1][iSegment]);
2484 hy2->Fill(parArr[3][iSegment]);
2485 hlocXY2->Fill(rh_seg[0][iSegment], rh_seg[2][iSegment]);
2487 for (
int k = 0; k < 8; k++) {
2488 if (sizeArr[iSegment] == 6 && rh_seg[k][iSegment] == -999)
2490 if (sizeArr[iSegment] != 6) {
2491 if (rh_seg[k][iSegment] == -999) {
2501 if (dchID == 1 && best_seg1 != -1) {
2511 double vAtu = 4.8 * (-.074) + (0.5 * (rh_seg[6][best_seg1] + rh_seg[7][best_seg1]));
2512 double xAtu = (-9.6) * (-.107) + (0.5 * (rh_seg[0][best_seg1] + rh_seg[1][best_seg1]));
2513 double uEst = vAtu -
sqrt(2.) * xAtu;
2514 double diffU = 0.5 * (rh_seg[4][best_seg1] + rh_seg[5][best_seg1]) - uEst;
2517 double vAty = 9.6 * (-.074) + (0.5 * (rh_seg[6][best_seg1] + rh_seg[7][best_seg1]));
2518 double xAty = (-4.8) * (-.107) + (0.5 * (rh_seg[0][best_seg1] + rh_seg[1][best_seg1]));
2519 double yEst =
sqrt(2.) * vAty - xAty;
2520 double diffY = 0.5 * (rh_seg[2][best_seg1] + rh_seg[3][best_seg1]) - yEst;
2528 hAx1_loc->Fill(parArr[0][best_seg1]);
2529 hAy1_loc->Fill(parArr[2][best_seg1]);
2530 hAu1_loc->Fill(isqrt_2 * (parArr[2][best_seg1] - parArr[0][best_seg1]));
2531 hAv1_loc->Fill(isqrt_2 * (parArr[2][best_seg1] + parArr[0][best_seg1]));
2534 if (dchID == 2 && best_seg1 != -1) {
2543 double vAtu = 4.8 * (-.075) + (0.5 * (rh_seg[6][best_seg1] + rh_seg[7][best_seg1]));
2544 double xAtu = (-9.6) * (-.103) + (0.5 * (rh_seg[0][best_seg1] + rh_seg[1][best_seg1]));
2545 double uEst = vAtu -
sqrt(2.) * xAtu;
2546 double diffU = 0.5 * (rh_seg[4][best_seg1] + rh_seg[5][best_seg1]) - uEst;
2549 double vAty = 9.6 * (-.075) + (0.5 * (rh_seg[6][best_seg1] + rh_seg[7][best_seg1]));
2550 double xAty = (-4.8) * (-.103) + (0.5 * (rh_seg[0][best_seg1] + rh_seg[1][best_seg1]));
2551 double yEst =
sqrt(2.) * vAty - xAty;
2552 double diffY = 0.5 * (rh_seg[2][best_seg1] + rh_seg[3][best_seg1]) - yEst;
2560 hAx2_loc->Fill(parArr[0][best_seg1]);
2561 hAy2_loc->Fill(parArr[2][best_seg1]);
2562 hAu2_loc->Fill(isqrt_2 * (parArr[2][best_seg1] - parArr[0][best_seg1]));
2563 hAv2_loc->Fill(isqrt_2 * (parArr[2][best_seg1] + parArr[0][best_seg1]));
2921 pairs[iChamber][iWire] = 0;
2923 singles[iChamber][iWire][iLayer] = 0;
2928 for (
Int_t iDim1 = 0; iDim1 < 4; iDim1++)
2929 for (
Int_t iDim2 = 0; iDim2 < 75 *
N; iDim2++) {
2930 params[iChamber][iDim1][iDim2] = -999.;
2933 for (
Int_t iDim1 = 0; iDim1 < 75 *
N; iDim1++) {
2935 Chi2[iChamber][iDim1] = 50.;
2936 SegMCId[iChamber][iDim1] = -999;
2941 for (
Int_t iDim1 = 0; iDim1 <
N; iDim1++) {
2942 for (
Int_t iDim2 = 0; iDim2 < 75 *
N; iDim2++) {
2943 v[iChamber][iDim1][iDim2] = -999.;
2944 u[iChamber][iDim1][iDim2] = -999.;
2945 y[iChamber][iDim1][iDim2] = -999.;
2946 x[iChamber][iDim1][iDim2] = -999.;
2947 vId[iChamber][iDim1][iDim2] = -999;
2948 uId[iChamber][iDim1][iDim2] = -999;
2949 yId[iChamber][iDim1][iDim2] = -999;
2950 xId[iChamber][iDim1][iDim2] = -999;
2951 v_time[iChamber][iDim1][iDim2] = -999.;
2952 u_time[iChamber][iDim1][iDim2] = -999.;
2953 y_time[iChamber][iDim1][iDim2] = -999.;
2954 x_time[iChamber][iDim1][iDim2] = -999.;
2955 sigm_v[iChamber][iDim1][iDim2] = 1.;
2956 sigm_u[iChamber][iDim1][iDim2] = 1.;
2957 sigm_y[iChamber][iDim1][iDim2] = 1.;
2958 sigm_x[iChamber][iDim1][iDim2] = 1.;
2960 for (
Int_t iDim3 = 0; iDim3 < 20 *
N; iDim3++) {
2961 v_Single[iChamber][iDim1][iDim3] = -999.;
2962 u_Single[iChamber][iDim1][iDim3] = -999.;
2963 y_Single[iChamber][iDim1][iDim3] = -999.;
2964 x_Single[iChamber][iDim1][iDim3] = -999.;
2975 for (
Int_t iDim1 = 0; iDim1 < 8; iDim1++)
2976 for (
Int_t iDim2 = 0; iDim2 < 75 *
N; iDim2++) {
2985 for (
Int_t iDim = 0; iDim < 25 *
N; iDim++) {
2986 x_mid[iDim] = -999.;
2987 y_mid[iDim] = -999.;
3034 const Int_t arrIdxShift = (dchID == 2) ? 8 : 0;
3035 const Int_t arrIdxStart = (wire ==
"x") ? 0 : (wire ==
"y") ? 2 : (wire ==
"u") ? 4 : 6;
3040 for (
Int_t j = 0; j < it_b; ++j) {
3041 if (pair > 25 *
N - 1)
3043 if ((wirenr_a[
i] != wirenr_b[j] && wirenr_a[
i] != wirenr_b[j] + 1))
3045 Int_t func_nr_a = -1;
3046 Int_t func_nr_b = -1;
3047 for (
Int_t t_it = 0; t_it < 3; t_it++) {
3048 if (time_a[
i] >=
t_dc[t_it][0 + arrIdxStart + arrIdxShift]
3049 && time_a[
i] <
t_dc[t_it + 1][0 + arrIdxStart + arrIdxShift])
3055 if (func_nr_a == -1)
3057 Double_t time = time_a[
i] -
t_dc[0][0 + arrIdxStart + arrIdxShift];
3061 * (
pol_par_dc[func_nr_a][0][0 + arrIdxStart + arrIdxShift]
3062 +
pol_par_dc[func_nr_a][1][0 + arrIdxStart + arrIdxShift] * time
3063 +
pol_par_dc[func_nr_a][2][0 + arrIdxStart + arrIdxShift] *
Power(time, 2)
3064 +
pol_par_dc[func_nr_a][3][0 + arrIdxStart + arrIdxShift] *
Power(time, 3)
3065 +
pol_par_dc[func_nr_a][4][0 + arrIdxStart + arrIdxShift] *
Power(time, 4));
3066 for (
Int_t t_it = 0; t_it < 3; t_it++)
3067 if (time_b[j] >=
t_dc[t_it][1 + arrIdxStart + arrIdxShift]
3068 && time_b[j] <
t_dc[t_it + 1][1 + arrIdxStart + arrIdxShift])
3073 if (func_nr_b == -1)
3075 time = time_b[j] -
t_dc[0][1 + arrIdxStart + arrIdxShift];
3078 * (
pol_par_dc[func_nr_b][0][1 + arrIdxStart + arrIdxShift]
3079 +
pol_par_dc[func_nr_b][1][1 + arrIdxStart + arrIdxShift] * time
3080 +
pol_par_dc[func_nr_b][2][1 + arrIdxStart + arrIdxShift] *
Power(time, 2)
3081 +
pol_par_dc[func_nr_b][3][1 + arrIdxStart + arrIdxShift] *
Power(time, 3)
3082 +
pol_par_dc[func_nr_b][4][1 + arrIdxStart + arrIdxShift] *
Power(time, 4));
3084 a_pm[0] = wirenr_a[
i] - 119 + d_a;
3085 a_pm[1] = wirenr_a[
i] - 119 - d_a;
3086 b_pm[0] = wirenr_b[j] - 118.5 + d_b;
3087 b_pm[1] = wirenr_b[j] - 118.5 - d_b;
3098 for (
Int_t k = 0; k < 2; k++) {
3100 if (k == 0 &&
m == 0)
3102 if (
Abs(a_pm[k] - b_pm[
m]) < dmin1) {
3104 dmin1 =
Abs(a_pm[k] - b_pm[
m]);
3105 a_coord2 = a_coord1;
3106 b_coord2 = b_coord1;
3110 }
else if (
Abs(a_pm[k] - b_pm[
m]) < dmin2 &&
Abs(a_pm[k] - b_pm[
m]) != dmin1) {
3111 dmin2 =
Abs(a_pm[k] - b_pm[
m]);
3118 _ab[0][pair] = a_coord1;
3119 _ab[1][pair] = b_coord1;
3120 _ab[0][pair + 1] = a_coord2;
3121 _ab[1][pair + 1] = b_coord2;
3123 ab_time[0][pair] = time_a[
i];
3124 ab_time[1][pair] = time_b[j];
3126 if (arrIdxStart == 0) {
3127 if (arrIdxShift == 0)
3129 if (arrIdxShift == 8)
3132 if (arrIdxStart == 4) {
3133 if (arrIdxShift == 0)
3135 if (arrIdxShift == 8)
3138 if (arrIdxStart == 6) {
3139 if (arrIdxShift == 0)
3141 if (arrIdxShift == 8)
3145 if (arrIdxStart == 2) {
3146 if (arrIdxShift == 0)
3148 if (arrIdxShift == 8)
3154 if (arrIdxStart == 2 && arrIdxShift == 0) {
3155 _ab[0][pair] -= .461;
3156 _ab[1][pair] -= .461;
3158 if (arrIdxStart == 4 && arrIdxShift == 0) {
3159 _ab[0][pair] -= 1.056;
3160 _ab[1][pair] -= 1.056;
3163 if (arrIdxStart == 2 && arrIdxShift == 8) {
3164 _ab[0][pair] -= .346;
3165 _ab[1][pair] -= .346;
3167 if (arrIdxStart == 4 && arrIdxShift == 8) {
3168 _ab[0][pair] -= .966;
3169 _ab[1][pair] -= .966;
3172 if (arrIdxStart == 2 && arrIdxShift == 0) {
3173 _ab[0][pair + 1] -= .461;
3174 _ab[1][pair + 1] -= .461;
3176 if (arrIdxStart == 4 && arrIdxShift == 0) {
3177 _ab[0][pair + 1] -= 1.056;
3178 _ab[1][pair + 1] -= 1.056;
3181 if (arrIdxStart == 2 && arrIdxShift == 8) {
3182 _ab[0][pair + 1] -= .346;
3183 _ab[1][pair + 1] -= .346;
3185 if (arrIdxStart == 4 && arrIdxShift == 8) {
3186 _ab[0][pair + 1] -= .966;
3187 _ab[1][pair + 1] -= .966;
3215 const Int_t arrIdxStart = (wire ==
"x") ? 0 : (wire ==
"y") ? 2 : (wire ==
"u") ? 4 : 6;
3217 const Int_t arrIdx1 = (lay ==
"a") ? 0 : 1;
3218 const Int_t arrIdx2 = (dchID == 2) ? 8 : 0;
3219 const Double_t coeff = (lay ==
"a") ? 119 : 118.5;
3226 for (
Int_t t_it = 0; t_it < 3; t_it++) {
3227 if (time_[
i] >=
t_dc[t_it][0 + arrIdxStart + arrIdx1 + arrIdx2]
3228 && time_[
i] <
t_dc[t_it + 1][0 + arrIdxStart + arrIdx1 + arrIdx2])
3236 Double_t time = time_[
i] -
t_dc[0][0 + arrIdxStart + arrIdx1 + arrIdx2];
3240 * (
pol_par_dc[func_nr][0][0 + arrIdx1 + arrIdx2] +
pol_par_dc[func_nr][1][0 + arrIdx1 + arrIdx2] * time
3241 +
pol_par_dc[func_nr][2][0 + arrIdxStart + arrIdx1 + arrIdx2] *
Power(time, 2)
3242 +
pol_par_dc[func_nr][3][0 + arrIdxStart + arrIdx1 + arrIdx2] *
Power(time, 3)
3243 +
pol_par_dc[func_nr][4][0 + arrIdxStart + arrIdx1 + arrIdx2] *
Power(time, 4));
3245 _single[0 + arrIdx1][single] = wirenr[
i] - coeff + d;
3246 _single[0 + arrIdx1][single + 1] = wirenr[
i] - coeff - d;
3250 if (arrIdxStart == 2 && arrIdx2 == 0) {
3251 _single[0 + arrIdx1][single] -= .461;
3252 _single[0 + arrIdx1][single + 1] -= .461;
3254 if (arrIdxStart == 4 && arrIdx2 == 0) {
3255 _single[0 + arrIdx1][single] -= 1.056;
3256 _single[0 + arrIdx1][single + 1] -= 1.056;
3259 if (arrIdxStart == 2 && arrIdx2 == 8) {
3260 _single[0 + arrIdx1][single] -= .346;
3261 _single[0 + arrIdx1][single + 1] -= .346;
3263 if (arrIdxStart == 4 && arrIdx2 == 8) {
3264 _single[0 + arrIdx1][single] -= .966;
3265 _single[0 + arrIdx1][single + 1] -= .966;
3268 CompareDaDb(d, sigm_single[0 + arrIdx1][single], sigm_single[0 + arrIdx1][single + 1]);
Int_t BuildUVSegments(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Int_t **, Int_t **, Int_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Int_t **, Double_t **, Double_t **)
Int_t BuildXYSegments(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Int_t **, Int_t **, Int_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Double_t **, Double_t **, Double_t **, Double_t **, Int_t **, Int_t **, Double_t **, Double_t **)