Commit 71ac21e1 authored by Juergen Reuter's avatar Juergen Reuter
Browse files

6d0ab20 Merge branch '425-fix-sf_factors-if-BornPDF-is-zero' into 'master'

parent dde29b05
......@@ -4,6 +4,9 @@ Use svn log to see detailed changes.
Version 3.0.0+
2021-06-21
Option to keep negative PDF entries or set them zero
2021-05-31
Full LCIO MC production files can be properly recasted
......
......@@ -3,6 +3,8 @@ include("nlo_settings.sin")
alias pr = u:U:d:D:s:S:c:C:b:B:gl
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
beams = p, p => lhapdf
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 13000 GeV
......
......@@ -5,6 +5,8 @@ alias Wpm = Wp:Wm
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
beams = p, p => lhapdf
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 13000 GeV
......
......@@ -4,6 +4,8 @@ alias pr = u:U:d:D:s:S:c:C:b:B:gl
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
beams = p, p => lhapdf
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 13000 GeV
......
......@@ -3,6 +3,8 @@ include("nlo_settings.sin")
alias pr = u:U:d:D:s:S:c:C:b:B:gl
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
alias Wpm = Wp:Wm
beams = p, p => lhapdf
$lhapdf_file = "MSTW2008nlo68cl"
......
......@@ -3,6 +3,8 @@ include("nlo_settings.sin")
alias pr = u:U:d:D:s:S:c:C:b:B:gl
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
beams = p, p => lhapdf
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 13000 GeV
......
......@@ -41,6 +41,7 @@ $rng_method = "rng_stream"
| End of included 'nlo_settings.sin'
[user variable] pr = PDG(2, -2, 1, -1, 3, -3, 4, -4, 5, -5, 21)
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 1.300000000000E+04
alpha_power = 0
......
......@@ -42,6 +42,7 @@ $rng_method = "rng_stream"
[user variable] pr = PDG(2, -2, 1, -1, 3, -3, 4, -4, 5, -5, 21)
[user variable] Wpm = PDG(24, -24)
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 1.300000000000E+04
alpha_power = 1
......
......@@ -41,6 +41,7 @@ $rng_method = "rng_stream"
| End of included 'nlo_settings.sin'
[user variable] pr = PDG(2, -2, 1, -1, 3, -3, 4, -4, 5, -5, 21)
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 1.300000000000E+04
alpha_power = 1
......
......@@ -41,6 +41,7 @@ $rng_method = "rng_stream"
| End of included 'nlo_settings.sin'
[user variable] pr = PDG(2, -2, 1, -1, 3, -3, 4, -4, 5, -5, 21)
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
[user variable] Wpm = PDG(24, -24)
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 1.300000000000E+04
......
......@@ -41,6 +41,7 @@ $rng_method = "rng_stream"
| End of included 'nlo_settings.sin'
[user variable] pr = PDG(2, -2, 1, -1, 3, -3, 4, -4, 5, -5, 21)
$exclude_gauge_splittings = "t"
$negative_sf = "positive"
$lhapdf_file = "MSTW2008nlo68cl"
sqrts = 1.300000000000E+04
alpha_power = 2
......
......@@ -206,6 +206,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging = true
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......
......@@ -113,6 +113,7 @@ $circe1_acc = "SBAND"
[undefined] $circe2_file = [unknown string]
$circe2_design = "*"
[undefined] $beam_events_file = [unknown string]
$negative_sf = "default"
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
$model_name = "QED"
......@@ -405,6 +406,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => true
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......@@ -836,6 +838,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => true
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......
......@@ -261,6 +261,7 @@ $circe1_acc = "SBAND"
[undefined] $circe2_file = [unknown string]
$circe2_design = "*"
[undefined] $beam_events_file = [unknown string]
$negative_sf = "default"
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
$model_name = "SM"
......
......@@ -60,6 +60,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => false
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......
......@@ -74,6 +74,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => false
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......
......@@ -89,6 +89,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => false
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......@@ -607,6 +608,7 @@ gaussian_spread2 = 0.000000000000E+00
[undefined] $beam_events_file = [unknown string]
?beam_events_warn_eof = true
?energy_scan_normalize = false
$negative_sf = "default"
?logging => false
[undefined] $job_id = [unknown string]
[undefined] $compile_workspace = [unknown string]
......
......@@ -9382,10 +9382,11 @@ indicated by the status code.
procedure (sf_int_apply), deferred :: apply
<<SF base: interfaces>>=
abstract interface
subroutine sf_int_apply (sf_int, scale, rescale, i_sub)
subroutine sf_int_apply (sf_int, scale, negative_sf, rescale, i_sub)
import
class(sf_int_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
end subroutine sf_int_apply
......@@ -10655,9 +10656,10 @@ one beam, and keep the other beam as is. We redo it then vice versa having now t
<<SF base: sf chain instance: TBP>>=
procedure :: evaluate => sf_chain_instance_evaluate
<<SF base: procedures>>=
subroutine sf_chain_instance_evaluate (chain, scale, sf_rescale)
subroutine sf_chain_instance_evaluate (chain, scale, negative_sf, sf_rescale)
class(sf_chain_instance_t), intent(inout), target :: chain
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(inout), optional :: sf_rescale
type(interaction_t), pointer :: out_int
real(default) :: sf_sum
......@@ -10679,20 +10681,20 @@ one beam, and keep the other beam as is. We redo it then vice versa having now t
select case (i_sub)
case (0)
if (n_sub == 0) then
call sf%int%apply (scale, sf_rescale, i_sub = i_sub)
call sf%int%apply (scale, negative_sf, sf_rescale, i_sub = i_sub)
else
call sf%int%apply (scale, i_sub = i_sub)
call sf%int%apply (scale, negative_sf, i_sub = i_sub)
end if
case default
if (i_beam == i_sub) then
call sf%int%apply (scale, sf_rescale, i_sub = i_sub)
call sf%int%apply (scale, negative_sf, sf_rescale, i_sub = i_sub)
else
call sf%int%apply (scale, i_sub = i_sub)
call sf%int%apply (scale, negative_sf, i_sub = i_sub)
end if
end select
end do
else
call sf%int%apply (scale, i_sub = n_sub)
call sf%int%apply (scale, negative_sf, i_sub = n_sub)
end if
if (sf%int%status <= SF_FAILED_EVALUATION) then
chain%status = SF_FAILED_EVALUATION
......@@ -11226,9 +11228,10 @@ parameter~$x$.
<<SF base: sf test int: TBP>>=
procedure :: apply => sf_test_apply
<<SF base: test auxiliary>>=
subroutine sf_test_apply (sf_int, scale, rescale, i_sub)
subroutine sf_test_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(sf_test_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
select case (sf_int%data%mode)
......@@ -11531,9 +11534,10 @@ the application always succeeds.
<<SF base: sf test spectrum: TBP>>=
procedure :: apply => sf_test_spectrum_apply
<<SF base: test auxiliary>>=
subroutine sf_test_spectrum_apply (sf_int, scale, rescale, i_sub)
subroutine sf_test_spectrum_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(sf_test_spectrum_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
call sf_int%set_matrix_element &
......@@ -11815,9 +11819,10 @@ the application always succeeds.
<<SF base: sf test generator: TBP>>=
procedure :: apply => sf_test_generator_apply
<<SF base: test auxiliary>>=
subroutine sf_test_generator_apply (sf_int, scale, rescale, i_sub)
subroutine sf_test_generator_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(sf_test_generator_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
call sf_int%set_matrix_element &
......@@ -14616,9 +14621,10 @@ choose to conserve momentum, so energy conservation may be violated.
<<SF isr: isr: TBP>>=
procedure :: apply => isr_apply
<<SF isr: procedures>>=
subroutine isr_apply (sf_int, scale, rescale, i_sub)
subroutine isr_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(isr_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: f, finv, x, xb, eps, rb
......@@ -16028,9 +16034,10 @@ overall cross section.
<<SF epa: epa: TBP>>=
procedure :: apply => epa_apply
<<SF epa: procedures>>=
subroutine epa_apply (sf_int, scale, rescale, i_sub)
subroutine epa_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(epa_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: x, xb, qminsq, qmaxsq, f, E, m2
......@@ -17519,9 +17526,10 @@ generated $x$ values are identical.
<<SF ewa: ewa: TBP>>=
procedure :: apply => ewa_apply
<<SF ewa: procedures>>=
subroutine ewa_apply (sf_int, scale, rescale, i_sub)
subroutine ewa_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(ewa_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: x, xb, pt2, c1, c2
......@@ -18561,9 +18569,10 @@ Here, we insert the predefined norm.
<<SF escan: escan: TBP>>=
procedure :: apply => escan_apply
<<SF escan: procedures>>=
subroutine escan_apply (sf_int, scale, rescale, i_sub)
subroutine escan_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(escan_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: f
......@@ -19172,9 +19181,10 @@ Trivial, just set the unit weight.
<<SF gaussian: gaussian: TBP>>=
procedure :: apply => gaussian_apply
<<SF gaussian: procedures>>=
subroutine gaussian_apply (sf_int, scale, rescale, i_sub)
subroutine gaussian_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(gaussian_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: f
......@@ -19873,9 +19883,10 @@ Trivial, just set the unit weight.
<<SF beam events: beam events: TBP>>=
procedure :: apply => beam_events_apply
<<SF beam events: procedures>>=
subroutine beam_events_apply (sf_int, scale, rescale, i_sub)
subroutine beam_events_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(beam_events_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: f
......@@ -20897,9 +20908,10 @@ The scale is ignored.
<<SF circe1: circe1: TBP>>=
procedure :: apply => circe1_apply
<<SF circe1: procedures>>=
subroutine circe1_apply (sf_int, scale, rescale, i_sub)
subroutine circe1_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(circe1_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default), dimension(2) :: xb
......@@ -21909,9 +21921,10 @@ the interaction has only one entry, and the factor is unity.
<<SF circe2: circe2: TBP>>=
procedure :: apply => circe2_apply
<<SF circe2: procedures>>=
subroutine circe2_apply (sf_int, scale, rescale, i_sub)
subroutine circe2_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(circe2_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
complex(default) :: f
......@@ -22799,14 +22812,16 @@ Once the scale is also known, we can actually call the PDF and
set the values. Contrary to LHAPDF, the wrapper already takes care of
adjusting to the $x$ and $Q$ bounds. Account for the Jacobian.
 
The parameter [[negative_sf]] is necessary to determine if we allow for negative PDF values.
The class [[rescale]] gives rescaling prescription for NLO convolution of the
structure function in combination with [[i_sub]].
<<SF pdf builtin: pdf builtin: TBP>>=
procedure :: apply => pdf_builtin_apply
<<SF pdf builtin: procedures>>=
subroutine pdf_builtin_apply (sf_int, scale, rescale, i_sub)
subroutine pdf_builtin_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(pdf_builtin_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default), dimension(-6:6) :: ff
......@@ -22815,7 +22830,9 @@ structure function in combination with [[i_sub]].
real(double) :: xx, qq
complex(default), dimension(:), allocatable :: fc
integer :: i, j_sub, i_sub_opt
logical :: negative_sf_opt
i_sub_opt = 0; if (present (i_sub)) i_sub_opt = i_sub
negative_sf_opt = .false.; if (present(negative_sf)) negative_sf_opt = negative_sf
associate (data => sf_int%data)
sf_int%q = scale
x = sf_int%x
......@@ -22853,11 +22870,18 @@ structure function in combination with [[i_sub]].
end if
if (data%has_photon) then
allocate (fc (count ([data%mask, data%mask_photon])))
fc = max (pack ([ff, fph], &
[data%mask, data%mask_photon]), 0._default)
if (negative_sf_opt) then
fc = pack ([ff, fph], [data%mask, data%mask_photon])
else
fc = max( pack ([ff, fph], [data%mask, data%mask_photon]), 0._default)
end if
else
allocate (fc (count (data%mask)))
fc = max (pack (ff, data%mask), 0._default)
if (negative_sf_opt) then
fc = pack (ff, data%mask)
else
fc = max( pack (ff, data%mask), 0._default)
end if
end if
end associate
if (debug_active (D_BEAMS)) print *, 'Set pdfs: ', real (fc)
......@@ -24041,15 +24065,18 @@ to the physical particle mass, but keep the radiated mass zero.
@
\subsection{Structure function}
We have to cast the LHAPDF arguments to/from double precision (possibly
from/to extended/quadruple precision), if necessary. Furthermore,
some structure functions can yield negative results (sea quarks close
to $x=1$). We set these unphysical values to zero.
from/to extended/quadruple precision), if necessary.
Some structure functions can yield negative results (sea quarks close
to $x=1$). In an NLO computation, this is perfectly fine and we keep negative values.
Unlike total cross sections, PDFs do not have to be positive definite. For LO however,
negative PDFs would cause negative event weights so we set these values to zero instead.
<<SF lhapdf: lhapdf: TBP>>=
procedure :: apply => lhapdf_apply
<<SF lhapdf: procedures>>=
subroutine lhapdf_apply (sf_int, scale, rescale, i_sub)
subroutine lhapdf_apply (sf_int, scale, negative_sf, rescale, i_sub)
class(lhapdf_t), intent(inout) :: sf_int
real(default), intent(in) :: scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(in), optional :: rescale
integer, intent(in), optional :: i_sub
real(default) :: x, s
......@@ -24058,8 +24085,10 @@ to $x=1$). We set these unphysical values to zero.
double precision :: fphot
complex(default), dimension(:), allocatable :: fc
integer :: i, i_sub_opt, j_sub
logical :: negative_sf_opt
external :: evolvePDFM, evolvePDFpM
i_sub_opt = 0; if (present (i_sub)) i_sub_opt = i_sub
negative_sf_opt = .false.; if (present(negative_sf)) negative_sf_opt = negative_sf
associate (data => sf_int%data)
sf_int%q = scale
x = sf_int%x
......@@ -24126,11 +24155,18 @@ to $x=1$). We set these unphysical values to zero.
end if
if (data%has_photon) then
allocate (fc (count ([data%mask, data%mask_photon])))
fc = max (pack ([ff, fphot] / x, &
[data%mask, data%mask_photon]), 0._default)
if (negative_sf_opt) then
fc = pack ([ff, fphot] / x, [data%mask, data%mask_photon])
else
fc = max( pack ([ff, fphot] / x, [data%mask, data%mask_photon]), 0._default)
end if
else
allocate (fc (count (data%mask)))
fc = max (pack (ff / x, data%mask), 0._default)
if (negative_sf_opt) then
fc = pack (ff / x, data%mask)
else
fc = max( pack (ff / x, data%mask), 0._default)
end if
end if
end associate
if (debug_active (D_BEAMS)) print *, 'Set pdfs: ', real (fc)
......
......@@ -5800,6 +5800,7 @@ The [[md5sum]] is used to verify the integrity of the configuration.
type(process_component_def_t), dimension(:), allocatable :: extra
character(32) :: md5sum = ""
logical :: nlo_process = .false.
logical :: negative_sf = .false.
logical :: requires_resonances = .false.
contains
<<Process libraries: process def: TBP>>
......@@ -5963,7 +5964,7 @@ suffix which we increment for each component.
<<Process libraries: procedures>>=
subroutine process_def_init (def, id, &
model, model_name, n_in, n_components, num_id, &
nlo_process, requires_resonances)
nlo_process, negative_sf, requires_resonances)
class(process_def_t), intent(out) :: def
type(string_t), intent(in), optional :: id
class(model_data_t), intent(in), optional, target :: model
......@@ -5972,6 +5973,7 @@ suffix which we increment for each component.
integer, intent(in), optional :: n_components
integer, intent(in), optional :: num_id
logical, intent(in), optional :: nlo_process
logical, intent(in), optional :: negative_sf
logical, intent(in), optional :: requires_resonances
character(16) :: suffix
integer :: i
......@@ -6002,6 +6004,9 @@ suffix which we increment for each component.
if (present (nlo_process)) then
def%nlo_process = nlo_process
end if
if (present (negative_sf)) then
def%negative_sf = negative_sf
end if
if (present (requires_resonances)) then
def%requires_resonances = requires_resonances
end if
......@@ -6290,6 +6295,17 @@ this process.
end function process_def_get_nlo_type
@ %def process_def_get_nlo_type
@
<<Process libraries: process def: TBP>>=
procedure :: get_negative_sf => process_def_get_negative_sf
<<Process libraries: procedures>>=
elemental function process_def_get_negative_sf (def) result (neg_sf)
logical :: neg_sf
class(process_def_t), intent(in) :: def
neg_sf = def%negative_sf
end function process_def_get_negative_sf
@ %def process_def_get_negative_sf
@ Number of incoming particles, common to all components.
<<Process libraries: process def: TBP>>=
procedure :: get_n_in => process_def_get_n_in
......
......@@ -6345,6 +6345,17 @@ process object.
 
@ %def process_is_nlo_calculation
@
<<Process: process: TBP>>=
procedure :: get_negative_sf => process_get_negative_sf
<<Process: procedures>>=
function process_get_negative_sf (process) result (neg_sf)
logical :: neg_sf
class(process_t), intent(in) :: process
neg_sf = process%config%process_def%get_negative_sf ()
end function process_get_negative_sf
@ %def process_get_negative_sf
@
<<Process: process: TBP>>=
procedure :: is_combined_nlo_integration &
=> process_is_combined_nlo_integration
......@@ -11668,13 +11679,14 @@ evaluating the chain twice via different pointers to the same target.
<<Kinematics: kinematics: TBP>>=
procedure :: evaluate_sf_chain => kinematics_evaluate_sf_chain
<<Kinematics: procedures>>=
subroutine kinematics_evaluate_sf_chain (k, fac_scale, sf_rescale)
subroutine kinematics_evaluate_sf_chain (k, fac_scale, negative_sf, sf_rescale)
class(kinematics_t), intent(inout) :: k
real(default), intent(in) :: fac_scale
logical, intent(in), optional :: negative_sf
class(sf_rescale_t), intent(inout), optional :: sf_rescale
select case (k%sf_chain%get_status ())
case (SF_DONE_KINEMATICS)
call k%sf_chain%evaluate (fac_scale, sf_rescale)
call k%sf_chain%evaluate (fac_scale, negative_sf = negative_sf, sf_rescale = sf_rescale)
end select
end subroutine kinematics_evaluate_sf_chain
 
......@@ -11970,6 +11982,7 @@ to fulfill their signature.
class(pcm_instance_t), pointer :: pcm_instance => null ()
integer :: nlo_type = BORN
integer, dimension(:), allocatable :: same_kinematics
logical :: negative_sf = .false.
contains
<<Instances: term instance: TBP>>
end type term_instance_t
......@@ -12096,6 +12109,7 @@ relevant for a NLO algorithm.
term%config => process%get_term_ptr (i_term)
term%int_hard = term%config%int
core => process%get_core_term (i_term)
term%negative_sf = process%get_negative_sf ()
call core%allocate_workspace (term%core_state)
select type (core)
class is (prc_external_t)
......@@ -13990,7 +14004,7 @@ interaction, then compute the convolution with the initial state.
<<Instances: procedures>>=
subroutine term_instance_evaluate_trace (term)
class(term_instance_t), intent(inout) :: term
call term%k_term%evaluate_sf_chain (term%fac_scale)
call term%k_term%evaluate_sf_chain (term%fac_scale, term%negative_sf)
call term%evaluate_scaled_sf_chains ()
call term%isolated%evaluate_sf_chain (term%fac_scale)
call term%isolated%evaluate_trace ()
......@@ -14022,7 +14036,7 @@ It becomes problematic when handling [[e, p]]-beams.
call sf_rescale%set (pcm%real_kinematics%xi_tilde)
end select
end select
call term%k_term%sf_chain%evaluate (term%fac_scale, sf_rescale)
call term%k_term%sf_chain%evaluate (term%fac_scale, term%negative_sf, sf_rescale)
deallocate (sf_rescale)
else if (term%k_term%emitter >= 0 .and. term%k_term%emitter <= term%k_term%n_in) then
allocate (sf_rescale_real_t :: sf_rescale)
......@@ -14035,10 +14049,10 @@ It becomes problematic when handling [[e, p]]-beams.
pcm%real_kinematics%y (term%k_term%i_phs))
end select
end select
call term%k_term%sf_chain%evaluate (term%fac_scale, sf_rescale)
call term%k_term%sf_chain%evaluate (term%fac_scale, term%negative_sf, sf_rescale)
deallocate (sf_rescale)
else
call term%k_term%sf_chain%evaluate (term%fac_scale)
call term%k_term%sf_chain%evaluate (term%fac_scale, term%negative_sf)
end if
else if (term%nlo_type == NLO_DGLAP) then
allocate (sf_rescale_dglap_t :: sf_rescale)
......@@ -14049,7 +14063,7 @@ It becomes problematic when handling [[e, p]]-beams.
call sf_rescale%set (pcm%isr_kinematics%z)
end select
end select
call term%k_term%sf_chain%evaluate (term%fac_scale, sf_rescale)
call term%k_term%sf_chain%evaluate (term%fac_scale, term%negative_sf, sf_rescale)
deallocate (sf_rescale)
end if
end subroutine term_instance_evaluate_scaled_sf_chains
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment