Add optional protonabsorber.zStartInMu2e: absolute IPA position - #1913
Add optional protonabsorber.zStartInMu2e: absolute IPA position#1913oksuzian wants to merge 1 commit into
Conversation
The MECO-style inner proton absorber is placed relative to the stopping target (targetEnd), but it is fixed hardware -- the geometry file itself documents 'mu2e z positions are 6901-7901 mm'. Studies that vary the stopping-target geometry silently drag the absorber (and its support-wire rings) with it. When the new key is set, the maker derives its reference plane from the given absolute z instead of the live target; unset, the code path is untouched and output is bit-identical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R5HnfdYMwXXrJGAkYVE48c
|
☔ The build is failing at a894d5d.
N.B. These results were obtained from a build of this Pull Request at a894d5d after being merged into the base branch at e9b2fbd. For more information, please check the job page here. |
|
📝 The HEAD of |
|
@FNALbuild run build test |
|
⌛ The following tests have been triggered for a894d5d: build (Build queue - API unavailable) |
|
☀️ The build tests passed at a894d5d.
N.B. These results were obtained from a build of this Pull Request at a894d5d after being merged into the base branch at ed58b12. For more information, please check the job page here. |
AndrewEdmonds11
left a comment
There was a problem hiding this comment.
This is OK with me as a patch. I think ideally we would number a new version and then have new code that would not refer to the target position at all but I appreciate that that would be a lot of effort
| // stopping target; distFromTargetEnd then only anchors the cone-radius | ||
| // interpolation. Unset (default): stock target-relative behavior. | ||
| if ( _config.hasName("protonabsorber.zStartInMu2e") ) { | ||
| targetEnd = _config.getDouble("protonabsorber.zStartInMu2e") - distFromTargetEnd; |
There was a problem hiding this comment.
Does the distFromTargetEnd parameter still need to be set correctly? By default it is zero and so here the targetEnd would be the starting position of the IPA...
Motivation
The MECO-style inner proton absorber is placed relative to the stopping
target:
MECOStyleProtonAbsorberMakercomputestargetEndfrom the liveStoppingTargetand derives everything from it — body placement, DS2/DS3segmentation, the cone-radius interpolation anchor, and the IPA
support-wire ring positions. But the IPA is fixed hardware;
protonAbsorber_cylindrical_v04.txtitself documentsdistFromTargetEnd = 625.; //mu2e z positions are 6901-7901 mm.Anyone varying stopping-target geometry gets a silently displaced
absorber. In our stopping-target optimization study a longer foil stack
dragged the IPA 133.33 mm downstream as a rigid body (measured with
protonabsorber.verbosityLevel = 1: 7034.35–8034.35 vs the design6901.02–7901.02) through 414 grid evaluations before it was noticed. For
a cylindrical IPA this is exactly compensable by adjusting
distFromTargetEnd; for the conical variant it is not (the taper anchormoves with the target) — hence a first-class option.
Change
New optional key
protonabsorber.zStartInMu2e. When present, the makerderives its reference plane from the given absolute z
(
targetEnd = zStartInMu2e - distFromTargetEnd), so the absorber'supstream end lands exactly at the given z and its full geometry (length,
DS2/DS3 split, cone radii, support wires) is independent of the stopping
target. When absent — the default everywhere — the new branch never
executes and output is bit-identical to today. One commented example
added to
protonAbsorber_cylindrical_v04.txt.Validation (Offline v13_32_10 + SimJob/Run1Bap backing)
Six single-event G4 runs with full surface check
(
protonabsorber.verbosityLevel = 1), stopping-target stack extents400 / 800 / 1100 mm, each extent probed twice — config-compensated
distFromTargetEnd(no new key) vs stock 625 +zStartInMu2e = 6901.02:All six print the identical absorber extent 6901.02–7901.02 with zero
overlaps. With the key unset, a golden-parity harness (real G4 preflight
replay) reproduces baseline output unchanged.
🤖 Generated with Claude Code