Skip to content

Commit 6963217

Browse files
committed
Fix for TPC edge clusters in CTF decoding
1 parent 233a4e4 commit 6963217

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

GPU/GPUTracking/DataCompression/GPUTPCDecompressionKernels.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ GPUdii() void GPUTPCDecompressionKernels::Thread<GPUTPCDecompressionKernels::ste
5757
ClusterNative* clout = buffer + decompressor.mNativeClustersIndex[linearIndex];
5858
uint32_t end = offsets[linearIndex] + ((linearIndex >= decompressor.mInputGPU.nSliceRows) ? 0 : decompressor.mInputGPU.nSliceRowClusters[linearIndex]);
5959
TPCClusterDecompressionCore::decompressHits(cmprClusters, offsets[linearIndex], end, clout);
60+
if (processors.param.rec.tpc.clustersEdgeFixDistance > 0.f) {
61+
constexpr GPUTPCGeometry geo;
62+
for (uint32_t k = 0; k < outputAccess->nClusters[iSector][iRow]; k++) {
63+
auto& cluster = buffer[k];
64+
if (cluster.getFlags() & ClusterNative::flagEdge) {
65+
auto padF = cluster.getPad();
66+
float distEdge = padF < geo.NPads(iRow) / 2 ? padF : geo.NPads(iRow) - 1 - padF;
67+
if (distEdge > processors.param.rec.tpc.clustersEdgeFixDistance) {
68+
cluster.setFlags(cluster.getFlags() ^ ClusterNative::flagEdge);
69+
}
70+
}
71+
}
72+
}
6073
if (processors.param.rec.tpc.clustersShiftTimebins != 0.f) {
6174
for (uint32_t k = 0; k < outputAccess->nClusters[iSector][iRow]; k++) {
6275
auto& cl = buffer[k];

GPU/GPUTracking/DataCompression/TPCClusterDecompressor.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,19 @@ int32_t TPCClusterDecompressor::decompress(const CompressedClusters* clustersCom
9494
ClusterNative* clout = buffer + clusters[i][j].size();
9595
uint32_t end = offsets[i][j] + ((i * GPUCA_ROW_COUNT + j >= clustersCompressed->nSliceRows) ? 0 : clustersCompressed->nSliceRowClusters[i * GPUCA_ROW_COUNT + j]);
9696
TPCClusterDecompressionCore::decompressHits(*clustersCompressed, offsets[i][j], end, clout);
97+
if (param.rec.tpc.clustersEdgeFixDistance > 0.f) {
98+
constexpr GPUTPCGeometry geo;
99+
for (uint32_t k = 0; k < clustersNative.nClusters[i][j]; k++) {
100+
auto& cluster = buffer[k];
101+
if (cluster.getFlags() & ClusterNative::flagEdge) {
102+
auto padF = cluster.getPad();
103+
float distEdge = padF < geo.NPads(j) / 2 ? padF : geo.NPads(j) - 1 - padF;
104+
if (distEdge > param.rec.tpc.clustersEdgeFixDistance) {
105+
cluster.setFlags(cluster.getFlags() ^ ClusterNative::flagEdge);
106+
}
107+
}
108+
}
109+
}
97110
if (param.rec.tpc.clustersShiftTimebins != 0.f) {
98111
for (uint32_t k = 0; k < clustersNative.nClusters[i][j]; k++) {
99112
auto& cl = buffer[k];

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ AddOptionRTC(tubeChi2, float, 5.f * 5.f, "", 0, "Max chi2 to mark cluster adjace
7272
AddOptionRTC(tubeMaxSize2, float, 2.5f * 2.5f, "", 0, "Square of max tube size (normally derrived from tpcTubeChi2)")
7373
AddOptionRTC(clustersShiftTimebins, float, 0, "", 0, "Shift of TPC clusters (applied during CTF cluster decoding)")
7474
AddOptionRTC(clustersShiftTimebinsClusterizer, float, 0, "", 0, "Shift of TPC clusters (applied during CTF clusterization)")
75+
AddOptionRTC(clustersEdgeFixDistance, float, 0.f, "", 0, "If >0, revert cluster.flag edge bit distance to edge exceeds this parameter (fixed during CTF decoding)")
7576
AddOptionRTC(defaultZOffsetOverR, float, 0.5210953f, "", 0, "Shift of TPC clusters (applied during CTF cluster decoding)")
7677
AddOptionRTC(PID_EKrangeMin, float, 0.47f, "", 0, "min P of electron/K BB bands crossing")
7778
AddOptionRTC(PID_EKrangeMax, float, 0.57f, "", 0, "max P of electron/K BB bands crossing")

0 commit comments

Comments
 (0)