Skip to content

Commit 81779eb

Browse files
committed
Add fallbacks when accessing properties of saturated clusters
1 parent fe2c039 commit 81779eb

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

DataFormats/Detectors/TPC/include/DataFormatsTPC/ClusterNative.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,15 @@ struct ClusterNative {
8585
}
8686

8787
GPUd() uint16_t getQmax() const { return qMax; }
88-
GPUd() uint16_t getQtot() const { return qTot; }
88+
GPUd() uint16_t getQtot() const
89+
{
90+
if (isSaturated()) [[unlikely]] {
91+
// Check for overflow, so return type can stay uint16
92+
auto sqtot = getSaturatedQtot();
93+
return sqtot <= UINT16_MAX ? sqtot : UINT16_MAX;
94+
}
95+
return qTot;
96+
}
8997
GPUd() uint8_t getFlags() const { return timeFlagsPacked >> 24; }
9098
GPUd() uint32_t getTimePacked() const { return timeFlagsPacked & 0xFFFFFF; }
9199
GPUd() void setTimePackedFlags(uint32_t timePacked, uint8_t flags)
@@ -121,7 +129,13 @@ struct ClusterNative {
121129
/// Y = (12.4 - 0.5 * (66 - 1)) * 4.16mm = -83.616mm
122130
GPUd() float getPad() const { return unpackPad(padPacked); }
123131
GPUd() void setPad(float pad) { padPacked = packPad(pad); }
124-
GPUd() float getSigmaTime() const { return float(sigmaTimePacked) * (1.f / scaleSigmaTimePacked); }
132+
GPUd() float getSigmaTime() const
133+
{
134+
if (isSaturated()) [[unlikely]] {
135+
return 0;
136+
}
137+
return float(sigmaTimePacked) * (1.f / scaleSigmaTimePacked);
138+
}
125139
GPUd() void setSigmaTime(float sigmaTime)
126140
{
127141
uint32_t tmp = sigmaTime * scaleSigmaTimePacked + 0.5;
@@ -147,7 +161,7 @@ struct ClusterNative {
147161
if (qtot > maxSaturatedQTot) {
148162
qtot = maxSaturatedQTot;
149163
}
150-
this->qTot = qtot / scaleSaturatedQTot;
164+
this->qTot = (qtot + scaleSaturatedQTot / 2) / scaleSaturatedQTot;
151165
}
152166

153167
GPUd() uint32_t getSaturatedQtot() const

GPU/GPUTracking/TPCClusterFinder/GPUTPCClusterFinderDump.cxx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@ void GPUTPCClusterFinder::DumpClusters(std::ostream& out)
166166

167167
out << "Row: " << i << ": " << N << "\n";
168168
for (const auto& cl : sortedCluster) {
169-
out << std::hex << cl.timeFlagsPacked << std::dec << " " << cl.padPacked << " " << int32_t{cl.sigmaTimePacked} << " " << int32_t{cl.sigmaPadPacked} << " " << cl.qMax << " " << cl.qTot << "\n";
169+
uint32_t qTot = cl.qTot;
170+
uint32_t sigmaTime = cl.sigmaTimePacked;
171+
if (cl.isSaturated()) {
172+
qTot = cl.getSaturatedQtot();
173+
sigmaTime = cl.getSaturatedTailLength();
174+
}
175+
out << std::hex << cl.timeFlagsPacked << std::dec << " " << cl.padPacked << " " << sigmaTime << " " << int32_t{cl.sigmaPadPacked} << " " << cl.qMax << " " << qTot << "\n";
170176
}
171177
}
172178
}

0 commit comments

Comments
 (0)