-
Notifications
You must be signed in to change notification settings - Fork 483
Fill alternative TPC dedx according to dEdxClusterRejectionFlagMaskAlt #14140
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 |
|
Error while checking build/O2/fullCI_slc9 for 4cac3dc at 2025-04-03 02:08: Full log here. |
Suport information: dE/dx Calibration and Encoding PrecisionThe TPC is geometrically calibrated, so the mean ratio of all dE/dx estimators should ideally be 1.0. This implies that the mean of the There is a small deviation from unity due to the transfer function, which I explained on Monday — this deviation is typically within ±10%. The relative resolution of the dE/dx measurement at low interaction rates is:
Encoding a 10% resolution using 1% steps is already acceptable. For the 6% resolution, a 1% encoding step yields:
In conclusion, 1% binning is precise enough to preserve the information content and is well matched to the physical resolution of the measurement. |
Test: Relative Error After DecodingAs expected, the precision of This was validated using debug streamers with the following command: trackQA->Draw("((trackQAHolder.tpcdEdxMax0R * mdEdx.dEdxTotTPC) / mdEdx.dEdxMaxIROC / 100.) - 1 >> his(100, -0.1, 0.1)", "mdEdx.dEdxTotIROC < 1000 && mdEdx.dEdxTotIROC > 1", "", 10000000)The measured σ is slightly above 0.3%, as expected, due to natural fluctuation around the 1.0 mean. ✅ Please keep the data encoding as suggested — Additional Remark (from WP Meeting Discussion): Avoiding Aliasing in AO2D DecodingIn the decoding step, I intentionally apply a small random shift up to ±1% to each value. This serves two purposes:
This technique has been consistently applied in all of my dE/dx calibration workflows and will also be used for track deltas stored in |
|
Hello @shahor02 , @f3sch, and @wiechula We need to ensure that normalization is applied consistently across all components. I assume you already have a version of the code where the dE/dx values are normalized to the reference value stored in If normalization is not handled correctly, it will result in incorrectly encoded values, which will cause major inconsistencies in downstream analysis — this would be a serious issue. @f3sch, I’m not sure how the pull request is scheduled to be merged, but before that happens, I’d strongly prefer to test a new version of the Best regards, |
…skAlt opt. The old TrackTPC::getdEdx() is unchanged, the new info can be accessed as TrackTPC::getdEdxAlt()
The ration is rounded to uint8_t. Note that if the nominal dEdxTPCTot==0, then the dEdxAlt.dEdxTPCTot is used for the extraInfo.TPCSignal instead of dEdx.dEdxTPCTot, i.e. the new member of trackQA table tpcSignalTodEdxNorm will be 100.
|
@miranov25 this is a version storing with aodTPCSignal (value stored in the extraInfo.TPCSignal) overridden to the |
|
Hello @shahor02, Regarding the implementation — after some further discussion, I agree it’s better to use clipping instead of simple casting. In a similar way as for the track delta in the trackQA. For example: trackQAHolder.tpcSignalTodEdxNorm = ((aodTPCSignal * dEdxNorm) > 255) ? 255 : uint8_t(aodTPCSignal * dEdxNorm);This will code overflow while preserving maximum precision. On Switching Between Default and Alt ConfigurationsWe need to know what normalization factor was used during encoding — otherwise, it becomes impossible to decode or compare the original values correctly. Maybe I’m misunderstanding how the new implementation works, and perhaps this is already accounted for — but from what I’ve seen, it still feels like this information is missing. I strongly suggest we meet in person to clarify all the details, to avoid any miscommunication. It will also be critical to include the applied normalization and algorithm information in the streamers, so we can validate things directly at the data level. Best regards, |
|
Closing in favour of #14144 |

Use this TrackTPC::getdEdxAlt() to populate AOD TrackQA tpcdEdx... data while the standard TrackTPC::getdEdx() will be used to fill AOD TPC tracks tpcSignal.
@davidrohr this hack was discussed today at the meeting to provide the "TrackQA" table in the AOD with dedx info calculated with minimal cluster cuts (different from the ones going to AOD TPCsignal). I've checked on 38 kHz run, works fine. Could you confirm that no explicit extra memory allocation is needed to accommodate for this https://github.com/AliceO2Group/AliceO2/compare/dev...shahor02:pr_tpcdedxAlt?expand=1#diff-9d885f1b8b692362a0e978b866b7978ad80636bded126bafacd22e96dd382a45R302 ?
Here how it looks for
GPU_rec_tpc.dEdxClusterRejectionFlagMask=23;GPU_rec_tpc.dEdxClusterRejectionFlagMaskAlt=1: