Skip to content

Commit f58d3f6

Browse files
martenoleshahor02
authored andcommitted
Voxel COG in x requires update in case binning is not per pad row
1 parent b78db82 commit f58d3f6

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

Detectors/TPC/calibration/SpacePoints/src/ResidualAggregator.cxx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,24 @@ void ResidualsContainer::fill(const o2::dataformats::TFIDInfo& ti, const gsl::sp
112112
auto& residVecOut = residuals[sec];
113113
auto& statVecOut = stats[sec];
114114
std::array<unsigned char, TrackResiduals::VoxDim> bvox;
115+
float xPos = param::RowX[residIn.row];
115116
float yPos = residIn.y * param::MaxY / 0x7fff;
116117
float zPos = residIn.z * param::MaxZ / 0x7fff;
117-
if (!trackResiduals->findVoxelBin(sec, param::RowX[residIn.row], yPos, zPos, bvox)) {
118+
if (!trackResiduals->findVoxelBin(sec, xPos, yPos, zPos, bvox)) {
118119
// we are not inside any voxel
119-
LOGF(debug, "Dropping residual in sec(%i), x(%f), y(%f), z(%f)", sec, param::RowX[residIn.row], yPos, zPos);
120+
LOGF(debug, "Dropping residual in sec(%i), x(%f), y(%f), z(%f)", sec, xPos, yPos, zPos);
120121
continue;
121122
}
122123
residVecOut.emplace_back(residIn.dy, residIn.dz, residIn.tgSlp, bvox);
123124
auto& stat = statVecOut[trackResiduals->getGlbVoxBin(bvox)];
124125
float& binEntries = stat.nEntries;
125126
float oldEntries = binEntries++;
126127
float norm = 1.f / binEntries;
127-
// update COG for voxel bvox (don't need to update X here, it stays at the pad row radius)
128-
stat.meanPos[TrackResiduals::VoxF] = (stat.meanPos[TrackResiduals::VoxF] * oldEntries + yPos / param::RowX[residIn.row]) * norm;
129-
stat.meanPos[TrackResiduals::VoxZ] = (stat.meanPos[TrackResiduals::VoxZ] * oldEntries + zPos / param::RowX[residIn.row]) * norm;
128+
// update COG for voxel bvox (update for X only needed in case binning is not per pad row)
129+
float xPosInv = 1.f / xPos;
130+
stat.meanPos[TrackResiduals::VoxX] = (stat.meanPos[TrackResiduals::VoxX] * oldEntries + xPos) * norm;
131+
stat.meanPos[TrackResiduals::VoxF] = (stat.meanPos[TrackResiduals::VoxF] * oldEntries + yPos * xPosInv) * norm;
132+
stat.meanPos[TrackResiduals::VoxZ] = (stat.meanPos[TrackResiduals::VoxZ] * oldEntries + zPos * xPosInv) * norm;
130133
++nResidualsTotal;
131134
++nResidualsInTF;
132135
}
@@ -155,6 +158,7 @@ void ResidualsContainer::merge(ResidualsContainer* prev)
155158
// if there is at least a single entry in either of the containers we need the proper norm
156159
norm /= (statPrev.nEntries + stat.nEntries);
157160
}
161+
stat.meanPos[TrackResiduals::VoxX] = (stat.meanPos[TrackResiduals::VoxX] * stat.nEntries + statPrev.meanPos[TrackResiduals::VoxX] * statPrev.nEntries) * norm;
158162
stat.meanPos[TrackResiduals::VoxF] = (stat.meanPos[TrackResiduals::VoxF] * stat.nEntries + statPrev.meanPos[TrackResiduals::VoxF] * statPrev.nEntries) * norm;
159163
stat.meanPos[TrackResiduals::VoxZ] = (stat.meanPos[TrackResiduals::VoxZ] * stat.nEntries + statPrev.meanPos[TrackResiduals::VoxZ] * statPrev.nEntries) * norm;
160164
stat.nEntries += statPrev.nEntries;

0 commit comments

Comments
 (0)