Skip to content

rusticol-core: refresh derived particle masses with the model parameters - #29

Open
lsimon125 wants to merge 1 commit into
MadGraphTeam:loopfrom
lsimon125:derived-particle-masses
Open

lsimon125 wants to merge 1 commit into
MadGraphTeam:loopfrom
lsimon125:derived-particle-masses

Conversation

@lsimon125

Copy link
Copy Markdown

Summary

NativeRuntime::set_model_parameters did not refresh particle masses that are derived model parameters.

In a G_μ-scheme UFO (the serialized sm), MW is derived from aEWM1, Gf and MZ, so it has no runtime slot. The loop
over particle_mass_parameter_names only read masses through model_parameter_runtime_slots. A derived mass
therefore kept the value derived from the artifact defaults:

  • model_parameter_value("MW") reported the refreshed value, e.g. 80.3692 GeV for aEWM1 = 132.1001485837534 and
    Gf = 1.1663788e-5;
  • the W wavefunctions and propagators still used MW = 80.419 GeV.

The polarisation sum was then taken on a different mass shell from the external momenta. As a result, |M|² of
u d~ > W+ H was not Lorentz invariant: it changed by 5.0e-5 under a z-boost at √s = 500 GeV.

The fix applies to masses without a runtime slot. It takes the refreshed real component of the corresponding
derived_parameter_component, which is the value the derived-parameter evaluator has just written. Settable masses
are unchanged.

Test

New test: rust/crates/rusticol-core/tests/derived_particle_masses.rs. It runs only when
RUSTICOL_DERIVED_MASS_ARTIFACT points to an artifact generated with
pyamplicol generate 'u d~ > W+ H' DIR --model models/json/sm/sm.json --restriction no_b_mass --execution-mode compiled
(QED = 2).

The test:

  1. sets aEWM1 and Gf;
  2. checks that MW moved;
  3. evaluates the process at an on-shell point (built from the refreshed MW and MH) and at the same point boosted
    along z with rapidities 0.5 and −1;
  4. requires the relative change to be below 1e-12.
before after
boost with y = 0.5 5.03e-5 (fails) < 1e-12 (passes)

Both runs used the same generator and artifact. The "before" run is loop at bae3b9e plus #26; the "after" run adds
this commit.

On loop at 36f4325 plus this commit (the PR branch):

  • the new test passes;
  • cargo test --release --features symbolica-runtime --lib gives 1132 passed, 0 failed, 1 ignored (with
    PYAMPLICOL_TEST_PYTHON set).

Downstream, ROULETTE's pp → W±H LO cross section against MG5_aMC with the same G_μ inputs moved from −0.06 % to
+0.001 % (0.09σ) with this fix.

🤖 Generated with Claude Code

A particle whose mass is a derived model parameter (MW from aEWM1, Gf and MZ in a G_mu-scheme
UFO) has no runtime slot, so set_model_parameters left its entry in particle_masses at the value
derived from the artifact defaults. Wavefunctions and propagators then used, e.g., MW = 80.419
while model_parameter_value("MW") reported the refreshed 80.369: the W polarisation sum was taken
on another mass shell than the momenta, and |M|^2 of u d~ > W+ H changed under a boost (by 5e-5 at
sqrt(s) = 500 GeV). Take the refreshed real component of the derived parameter instead.

The test needs a u d~ > W+ H artifact from the serialized sm UFO (RUSTICOL_DERIVED_MASS_ARTIFACT).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant