21 const int nclusters = clusters->size();
22 std::vector<resultType> hitData;
24 for (
int icluster = 0; icluster < nclusters; icluster++) {
25 Cluster* cluster = &clusters->at(icluster);
27 if (hit.Address() == -1)
continue;
28 hitData.emplace_back(hit, std::vector<DigiRec>());
36 ROOT::Math::XYZVector hit_posV(0.0, 0.0, 0.0);
40 double totalCharge = 0;
47 for (
auto& digi : *digis) {
51 L_(debug) <<
" no digi " << std::endl;
54 const double digiCharge = digi->GetCharge();
57 errorclass = digi->GetErrorClass();
58 EB = digi->IsFlagged(0);
59 EBP = digi->IsFlagged(1);
61 if (digiCharge <= 0.05) {
66 time += digi->GetTime();
67 totalCharge += digiCharge;
70 int digiRow =
GetPadRowCol(digi->GetAddressChannel(), digiCol);
72 const ROOT::Math::XYZVector& local_pad_posV =
fParams.
rowPar[digiRow].padPar[digiCol].pos;
73 const ROOT::Math::XYZVector& local_pad_dposV =
fParams.
rowPar[digiRow].padPar[digiCol].pos;
75 double xMin = local_pad_posV.X() - local_pad_dposV.X();
76 double xMax = local_pad_posV.X() + local_pad_dposV.X();
77 xVar += (xMax * xMax + xMax * xMin + xMin * xMin) * digiCharge;
79 double yMin = local_pad_posV.Y() - local_pad_dposV.Y();
80 double yMax = local_pad_posV.Y() + local_pad_dposV.Y();
81 yVar += (yMax * yMax + yMax * yMin + yMin * yMin) * digiCharge;
83 hit_posV.SetX(hit_posV.X() + local_pad_posV.X() * digiCharge);
84 hit_posV.SetY(hit_posV.Y() + local_pad_posV.Y() * digiCharge);
85 hit_posV.SetZ(hit_posV.Z() + local_pad_posV.Z() * digiCharge);
87 time /= digis->size() - skipped;
89 if (totalCharge <= 0)
return Hit();
91 hit_posV.SetX(hit_posV.X() / totalCharge);
92 hit_posV.SetY(hit_posV.Y() / totalCharge);
93 hit_posV.SetZ(hit_posV.Z() / totalCharge);
111 global.SetX(global.X() + (0.00214788 + global.X() * 0.000195394));
112 global.SetY(global.Y() + (0.00370566 + global.Y() * 0.000213235));
115 ROOT::Math::XYZVector cluster_pad_dposV(xVar, yVar, 0);
130 return Hit(
fParams.
address, global, cluster_pad_dposV, 0, clusterId, totalCharge / 1e6, time,
150 std::pair<double, double> res[12] = {
151 std::make_pair(0.5, 0.4), std::make_pair(1, 0.35), std::make_pair(2, 0.3), std::make_pair(2.5, 0.3),
152 std::make_pair(3.5, 0.28), std::make_pair(4.5, 0.26), std::make_pair(5.5, 0.26), std::make_pair(6.5, 0.26),
153 std::make_pair(7.5, 0.26), std::make_pair(8.5, 0.26), std::make_pair(8.5, 0.26), std::make_pair(9.5, 0.26)};
157 for (
int n = 0; n < 12; n++) {
158 if (val < res[0].
first) selval = res[0].second;
160 selval = res[11].second;
163 if (val >= res[n].
first && val <= res[n + 1].
first) {
164 double dx = res[n + 1].first - res[n].first;
165 double dy = res[n + 1].second - res[n].second;
166 double slope = dy / dx;
167 selval = (val - res[n].first) * slope + res[n].second;
182 for (
auto& digi : cluster->
GetDigis()) {
184 int digiRow =
GetPadRowCol(digi->GetAddressChannel(), digiCol);
186 if (digiCol < colMin) colMin = digiCol;
187 if (digiRow < rowMin) rowMin = digiRow;
188 if (digiCol > colMax) colMax = digiCol;
189 if (digiRow > rowMax) rowMax = digiRow;
192 const uint16_t nCols = colMax - colMin + 1;
193 const uint16_t nRows = rowMax - rowMin + 1;
196 memset(digiMap, 0,
sizeof(
CbmTrdDigi*) * nCols * nRows);
198 for (
auto& digi : cluster->
GetDigis()) {
200 int digiRow =
GetPadRowCol(digi->GetAddressChannel(), digiCol);
202 if (digiMap[digiRow - rowMin][digiCol - colMin])
205 digiMap[digiRow - rowMin][digiCol - colMin] =
const_cast<CbmTrdDigi*
>(digi);
209 for (
int iRow = 0; iRow < nRows; ++iRow) {
211 while (digiMap[iRow][colStart] ==
nullptr)
216 int colStop = nCols - 1;
217 while (digiMap[iRow][colStop] ==
nullptr)