INTT hit duplication implementation#4290
Conversation
|
Warning Review limit reached
More reviews will be available in 8 minutes and 37 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds optional INTT hit duplication to ChangesINTT Hit Duplication Feature
Micromegas FillPool Argument Removal
Possibly related PRs
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Build & test reportReport for commit 4af70f2dd2331b3748d4234ede69e0eed835b096:
Automatically generated by sPHENIX Jenkins continuous integration |
osbornjd
left a comment
There was a problem hiding this comment.
This seems like a reasonable implementation to me, we should test it out and see if it improves the cluster/hit drop off towards the end of the strobe width
…usively. This fixes that
Build & test reportReport for commit 6ce8662791365c156efa10702d1cc6026ee8d39b:
Automatically generated by sPHENIX Jenkins continuous integration |
Build & test reportReport for commit 88b10946a50a324a94399ffc39c04f1b0f1c5cf6:
Automatically generated by sPHENIX Jenkins continuous integration |
Build & test reportReport for commit 418247ecb2937d0d99002613f8439419c9ef3cca:
Automatically generated by sPHENIX Jenkins continuous integration |
Build & test reportReport for commit 3844e7c18dfce80a3527e09a12014bf248beb0b5:
Automatically generated by sPHENIX Jenkins continuous integration |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 97c8f8ac-55d4-4a5b-90d8-b7450e113e47
📒 Files selected for processing (2)
offline/framework/fun4allraw/Fun4AllStreamingInputManager.ccoffline/framework/fun4allraw/Fun4AllStreamingInputManager.h
Build & test reportReport for commit 176ba1d92556b64985d3bdc373df9c7a33d1c479:
Automatically generated by sPHENIX Jenkins continuous integration |
Build & test reportReport for commit cbf93806fb70d149f66ba55bc4285dce35cb6779:
Automatically generated by sPHENIX Jenkins continuous integration |




Types of changes
What kind of change does this PR introduce? (Bug fix, feature, ...)
This PR introduces an optional INTT hit-duplication implementation in
Fun4AllStreamingInputManageras a possible mitigation for the hit carry-over issue. When enabled, raw hits found at a later BCO, (N + M * 120), are copied into the raw-hit container with their BCO reassigned to N.The duplication is disabled by default. The maximum shift multiple, controlled by the variable
m_InttHitCarryOverShiftMaxMultiple, is configurable, while the carry-over shift is currently fixed at 120.[Update 2026.06.11] The idea is to introduce an additional "second" duplication pass, in which hits in the next (or subsequent) strobes with FPHX BCO = 0 are also duplicated. I suspect this is necessary in addition to the "first" duplication pass because your previous slides indicate a non-negligible population of hits whose FPHX BCO is reset, particularly near the end of a strobe (two spikes appear in the subsequent strobe: one at FPHX BCO = 0 and another at the nominal +120 shift)
To avoid duplicating the same hits twice, the "second" pass is skipped whenever the target BCO (i.e. the BCO to which hits are being duplicated) corresponds to FPHX BCO = 0. In that case, the first duplication has already recovered all possible carried-over hits
(This strategy still requires careful study and discussion, so the PR is currently marked as a draft)
TODOs (if applicable)
Links to other PRs in macros and calibration repositories (if applicable)
INTT Hit Carry-Over Mitigation via Optional Hit Duplication
Motivation / Context
This PR introduces an optional hit duplication mechanism in
Fun4AllStreamingInputManagerto mitigate hit carry-over issues in the INTT (Inner Nuclear Tracking Telescope). The INTT detector exhibits a known issue where hits detected at later BCO (Bunch Crossing) values can carry over from previous strobe periods due to FPHX (Front-end Physics-to-Host neXus) BCO resets. This duplication strategy recovers such hits by copying them into earlier BCO windows where they originated.Key Changes
INTT Hit Duplication Implementation
Configuration interface: Two new public methods enable feature control:
EnableInttHitDuplication(bool): Enable/disable the mitigation (defaults to disabled)InttHitCarryOverShiftMaxMultiple(int): Configure maximum shift multiple (defaults to 4)Fixed parameters:
Two-pass duplication strategy:
Pre-reading mechanism: Extends the INTT hit pool until the highest stashed BCO reaches the duplication threshold (select_crossings + max_shift), with guards to prevent infinite loops when no new data appears
Micromegas Pool Filling Change
FillMicromegasPool()now callsiter->FillPool()with no arguments instead ofiter->FillPool(ref_bco_minus_range)Minor Formatting
Potential Risk Areas
AI Note: AI-assisted analysis may contain errors; human review of the following concerns is strongly recommended.
Reconstruction Behavior Changes: Hit duplication fundamentally alters INTT reconstruction by creating additional copies of hits with modified BCO values. This will increase hit multiplicities and could affect downstream reconstruction algorithms, trigger efficiency studies, and physics analyses.
Complex Duplication Logic: The two-pass duplication scheme, particularly the condition
target_refbco == 0for skipping the second pass, introduces complex state-dependent behavior that could harbor subtle bugs. The logic for determining which hits qualify for reset-shift duplication (filtering on FPHX_BCO and relative BCO values) needs careful verification.Micromegas Impact: The change to
FillMicromegasPool()removes theref_bco_minus_rangeparameter, fundamentally altering how the BCO range is applied. The implications for Micromegas hit selection are not clearly documented.Memory Usage: Duplication increases the number of hits stored in the container, potentially increasing memory consumption during reconstruction.
Performance: Pre-reading the INTT pool to reach the duplication threshold may introduce additional latency, though the infinite-loop guard should prevent runaway behavior.
Feature Disabled by Default: The feature must be explicitly enabled, which may lead to inconsistent reconstruction practices if not properly documented in analysis guides.
Possible Future Improvements