-
Notifications
You must be signed in to change notification settings - Fork 483
Fix for TPC edge clusters in CTF decoding #14161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
REQUEST FOR PRODUCTION RELEASES: This will add The following labels are available |
| } | ||
| const auto cluster = decompressTrackStore(cmprClusters, clusterOffset, slice, row, pad, time, args...); | ||
| auto cluster = decompressTrackStore(cmprClusters, clusterOffset, slice, row, pad, time, args...); | ||
| if ((cluster.getFlags() & ClusterNative::flagEdge) && param.rec.tpc.clustersShiftTimebins != 0.f) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume this is wrong, instead of param.rec.tpc.clustersShiftTimebins you'd need to use param.rec.tpc.clustersEdgeFixDistance.
But then, why do you need this change in the TPCClusterDecompressionCore.inc at all, if you fix the clusters later in GPUTPCDecompressionKernels and TPCClusterDecompressor? I'd actually remove this part here, I believe it is not needed, and it adds an additional branch on the GPU if clustersEdgeFixDistance is not set.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought this decompressTrack( is called for attached clusters, in https://github.com/AliceO2Group/AliceO2/blob/dev/GPU/GPUTracking/DataCompression/GPUTPCDecompressionKernels.cxx#L36, while the previous step1unattached is called for unattached clusters in GPU/GPUTracking/Global/GPUChainTrackingCompression.cxx
Please confirm that this is not used.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, this is a bit more convoluted than I thought and when checking again at first I thought you were right and took me one hour to understand...
So, the decompressTrack( is of course used as you say, but the clusters are copied and touched again in the step for unattached clusters here
| if (param.rec.tpc.clustersShiftTimebins != 0.f) { |
| if (processors.param.rec.tpc.clustersShiftTimebins != 0.f) { |
Note that the loop in these places runs from 0 to nClusters, not only over the unattached ones, so these 2 loops apply the corrections for all clusters.
The
TPCClusterDecompressor is for the tpcUseOldCPUDecoding, while the GPUTPCDecompressionKernels is for Gabriele`s new GPU-capable decoding (which runs on both CPU and GPU).So fixing these 2 places is enough as I wrote initially.
In your case, you are fixing the edge pad during the attached decoding, and fixing it afterwards again.
Also, your approach is bogus, since decompressTrackStore is not guaranteed to return a reference (it does in some of the overloads). I.e., you might be fixing a temporary object. For your approach, you'd need to fix the edge flag before line 140 here
| const auto cluster = decompressTrackStore(cmprClusters, clusterOffset, slice, row, pad, time, args...); |
That said, I am not sure if Gabriele or we ever tested the clustersShiftTimebins parameter for the new decoding. Perhaps we should double-check before we rely on it, and try with tpcUseOldCPUDecoding=1 on CPU and with tpcUseOldCPUDecoding=0 on CPU and GPU.
|
Error while checking build/O2/fullCI_slc9 for 2fad56c at 2025-04-10 06:38: Full log here. |
|
@davidrohr ok, removed (1) Both timeshift and edge bit fix work: |
|
great, thx for doing these checks! |
|
Error while checking build/O2/fullCI_slc9 for 29796fd at 2025-04-10 16:24: Full log here. |

Edge clusters before and after the fix with
GPU_rec_tpc.clustersEdgeFixDistance=0.5Default
GPU_rec_tpc.clustersEdgeFixDistanceis 0 (no fix).