Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
f782da0
NLO polarisation M0: me_frame plumbing for the FKS output
oliviermattelaer Aug 12, 2026
6c021d5
NLO polarisation M1: boost the Born for [LOonly=QCD]
oliviermattelaer Aug 12, 2026
d618837
NLO polarisation M2 step 0: carry the ISR emission azimuth covariantly
oliviermattelaer Aug 12, 2026
f0590b3
NLO polarisation M2 step 0: same for FSR, and resolve B4
oliviermattelaer Aug 12, 2026
8e7aa36
NLO polarisation M2 step 1: route every ME call through a frame wrapper
oliviermattelaer Aug 12, 2026
1d0e057
NLO polarisation: skip the identity boost, and refuse initial-state f…
oliviermattelaer Aug 12, 2026
017d44a
NLO polarisation M2 step 2: azimuthal wiring, gate not yet passing
oliviermattelaer Aug 12, 2026
aec843e
NLO polarisation: record p p > z z as the next diagnostic
oliviermattelaer Aug 12, 2026
b52b44e
NLO polarisation M2: fix the rest-frame quantisation axis; enable [re…
oliviermattelaer Aug 12, 2026
62ad713
NLO polarisation M3: boost the virtual, gate not yet passing
oliviermattelaer Aug 12, 2026
e883fc7
NLO polarisation M3: evaluate the virtual in the me_frame in check_poles
oliviermattelaer Aug 13, 2026
7931474
keep the polarization when expanding multiparticles for MadLoop
oliviermattelaer Aug 13, 2026
ed921d7
allow a polarised massive particle at NLO where a frame is defined
oliviermattelaer Aug 13, 2026
60117c3
NLO polarisation: record M3 as done, with the diagnosis and the gate …
oliviermattelaer Aug 13, 2026
4ab17d9
keep the polarization of a ProcessDefinition when building a single p…
oliviermattelaer Aug 13, 2026
a124ead
fix FD-gauge routine naming for cross-base amplitudes, restate the fl…
oliviermattelaer Aug 13, 2026
a09a5d6
NLO polarisation M4: document the NLO frame, add the acceptance test
oliviermattelaer Aug 13, 2026
198d637
tests: record frame_info.inc in the FKS/EW IO reference files
oliviermattelaer Aug 13, 2026
6691574
NLO polarisation M4: state the QCD-only limit, put the test in CI
oliviermattelaer Aug 13, 2026
f8fdd2e
tests: frame_info.inc references for the FKS IO tests CI runs but we …
oliviermattelaer Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/workflows/acceptancetest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1389,3 +1389,24 @@ jobs:
cd $GITHUB_WORKSPACE
./tests/test_manager.py test_density_mode_vs_standalone_LI1 -pA -t0 -l INFO



acceptancetest_105:
# The type of runner that the job will run on
runs-on: ubuntu-24.04
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork == true

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4
- uses: ./.github/actions/checkout_mg5
- uses: ./.github/actions/restore_all

# Polarised fixed-order NLO evaluated in a chosen rest frame. Asserts on
# check_poles, which is the only check sensitive to the frame handling of
# the Born against the virtual.
- name: test one of the test test_polarised_nlo_me_frame
run: |
cd $GITHUB_WORKSPACE
./tests/test_manager.py test_polarised_nlo_me_frame -pA -t0 -l INFO
38 changes: 34 additions & 4 deletions Template/LO/SubProcesses/genps.f
Original file line number Diff line number Diff line change
Expand Up @@ -1771,7 +1771,8 @@ subroutine boost_to_frame(P1, frame_id, P2)

integer ids(nexternal)
integer i,j
logical trivial_boost
integer nsel, isel
logical trivial_boost

c uncompress
call mapid(frame_id, ids)
Expand Down Expand Up @@ -1807,12 +1808,41 @@ subroutine boost_to_frame(P1, frame_id, P2)
enddo
endif
enddo
do j=1,3
do j=1,3
Pboost(j) = -1 * Pboost(j)
enddo
enddo
do i=1, nexternal
call boostx(p1(0,i), pboost, p2(0,i))
enddo
enddo

c A frame built from a single leg puts that leg at rest, and there the
c boost has to be exactly right rather than right to rounding. HELAS
c changes convention at exactly zero: vxxxxx builds the polarisation
c vectors of a massive vector along the z axis when pp.eq.0d0 and along
c the momentum direction otherwise. boostx only reaches p=0 up to the
c rounding of lf (it forms p(i)+q(i)*lf with lf=1 up to the rounding of
c (q(0)-m)+p(0)), so the residual is a few 1d-14 with a noise direction,
c and whether it rounds to zero varies event by event. Every event that
c misses zero gets its longitudinal polarisation vector pointed along
c rounding noise instead of along z.
c This was found through the NLO port, where it breaks the FKS
c subtraction outright: see docs/nlo_polarisation_boost_plan.md, M2, and
c the same fix in Template/NLO/SubProcesses/boost_to_frame.f.
c Only a one-leg selection needs this: with two or more selected legs it
c is their sum that is at rest, no single leg sits on the branch point.
nsel = 0
isel = 0
do i=1, nexternal
if (ids(i).eq.1) then
nsel = nsel + 1
isel = i
endif
enddo
if (nsel.eq.1) then
p2(1,isel) = 0d0
p2(2,isel) = 0d0
p2(3,isel) = 0d0
endif
return
end

Expand Down
1 change: 1 addition & 0 deletions Template/NLO/Cards/run_card.dat
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
%(lpp2)s = lpp2 ! beam 2 type (0 = no PDF)
%(ebeam1)s = ebeam1 ! beam 1 energy in GeV
%(ebeam2)s = ebeam2 ! beam 2 energy in GeV
$frame
#***********************************************************************
# PDF choice: this automatically fixes also alpha_s(MZ) and its evol. *
# pdlabel: lhapdf = LHAPDF (installation needed) [1412.7420] *
Expand Down
10 changes: 9 additions & 1 deletion Template/NLO/Source/run.inc
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,16 @@ c
double precision ebeam(2), xbk(2),q2fact(2)
common/to_collider/ ebeam , xbk ,q2fact, lpp
c
c Rest frame in which the matrix-elements are evaluated (polarization).
c Bit n of frame_id is set for each leg n listed in me_frame; see
c mapid() and boost_to_me_frame() in boost_to_frame.f. The default
c me_frame=[1,2] gives frame_id=6, which means "no boost".
c
integer frame_id
common/to_frame_me/frame_id
c
c BW treatment
c
c
double precision bwcutoff
common/to_bwcutoff/ bwcutoff
c
Expand Down
2 changes: 1 addition & 1 deletion Template/NLO/SubProcesses/add_write_info.f
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ subroutine add_write_info(p_born,pp,ybst_til_tolab,iconfig,Hevents
if (colour_connections(1,1).lt.0) then
! colour not yet set: Get color flow that is consistent with
! iconfig from Born
call sborn(p_born,wgt1)
call sborn_frame(p_born,wgt1)
sumborn=0.d0
do i=1,max_bcol
if (icolamp(i,iBornGraph,1)) then
Expand Down
Loading
Loading