Merge lp:~maddevelopers/mg5amcnlo/3.3.0 into lp:mg5amcnlo

Proposed by Olivier Mattelaer
Status: Merged
Merged at revision: 969
Proposed branch: lp:~maddevelopers/mg5amcnlo/3.3.0
Merge into: lp:mg5amcnlo
Diff against target: 45665 lines (+19561/-10123)
616 files modified
.bzrignore (+1/-0)
INSTALL (+1/-1)
MadSpin/decay.py (+7/-8)
MadSpin/interface_madspin.py (+2/-2)
MadSpin/madspin (+3/-3)
Template/Common/Source/PDF/pdf.inc (+2/-1)
Template/LO/Cards/run_card.dat (+13/-6)
Template/LO/Source/PDF/ElectroweakFlux.f (+225/-0)
Template/LO/Source/PDF/ElectroweakFluxDriver.f (+561/-0)
Template/LO/Source/PDF/PhotonFlux.f (+10/-5)
Template/LO/Source/PDF/makefile (+3/-3)
Template/LO/Source/PDF/pdfwrap.f (+2/-2)
Template/LO/Source/PDF/pdg2pdf.f (+107/-34)
Template/LO/Source/PDF/pdg2pdf_lhapdf6.f (+105/-24)
Template/LO/Source/cuts.inc (+2/-1)
Template/LO/Source/dsample.f (+4/-3)
Template/LO/Source/readgrid.f (+1/-1)
Template/LO/Source/run.inc (+2/-1)
Template/LO/Source/setrun.f (+32/-8)
Template/LO/SubProcesses/cuts.f (+6/-5)
Template/LO/SubProcesses/genps.f (+2/-1)
Template/LO/SubProcesses/setcuts.f (+1/-1)
Template/LO/SubProcesses/unwgt.f (+2/-2)
Template/MadWeight/Cards/run_card.dat (+3/-2)
Template/MadWeight/src/setrun.f (+8/-0)
Template/NLO/Cards/run_card.dat (+4/-1)
Template/NLO/FixedOrderAnalysis/analysis_HwU_general.f (+290/-19)
Template/NLO/MCatNLO/Scripts/JetMatching.h (+2105/-0)
Template/NLO/MCatNLO/Scripts/MCatNLO_MadFKS_PYTHIA8.Script (+19/-6)
Template/NLO/MCatNLO/srcPythia8/Makefile (+5/-0)
Template/NLO/MCatNLO/srcPythia8/Makefile_hep (+6/-0)
Template/NLO/MCatNLO/srcPythia8/Pythia83.cc (+171/-0)
Template/NLO/MCatNLO/srcPythia8/Pythia83_hep.cc (+121/-0)
Template/NLO/Source/make_opts.inc (+7/-13)
Template/NLO/SubProcesses/BinothLHA.f (+37/-3)
Template/NLO/SubProcesses/add_write_info.f (+72/-89)
Template/NLO/SubProcesses/analysis_lhe.f (+1/-1)
Template/NLO/SubProcesses/chooser_functions.f (+108/-14)
Template/NLO/SubProcesses/cluster.f (+2108/-798)
Template/NLO/SubProcesses/collect_events.f (+1/-1)
Template/NLO/SubProcesses/cuts.f (+585/-280)
Template/NLO/SubProcesses/driver_mintFO.f (+18/-10)
Template/NLO/SubProcesses/driver_mintMC.f (+35/-40)
Template/NLO/SubProcesses/fks_singular.f (+236/-114)
Template/NLO/SubProcesses/genps_fks.f (+21/-23)
Template/NLO/SubProcesses/handling_lhe_events.f (+29/-3)
Template/NLO/SubProcesses/makefile_fks_dir (+5/-3)
Template/NLO/SubProcesses/mint_module.f90 (+59/-30)
Template/NLO/SubProcesses/montecarlocounter.f (+18/-13)
Template/NLO/SubProcesses/pineappl_interface.cc (+1/-0)
Template/NLO/SubProcesses/recmom.f (+64/-8)
Template/NLO/SubProcesses/reweight_xsec_events.f (+1/-1)
Template/NLO/SubProcesses/setscales.f (+10/-8)
Template/NLO/SubProcesses/symmetry_fks_v3.f (+2/-0)
Template/NLO/SubProcesses/test_soft_col_limits.f (+1/-0)
Template/NLO/SubProcesses/timing_variables.inc (+2/-1)
Template/NLO/SubProcesses/weight_lines.f (+7/-1)
Template/NLO/SubProcesses/write_event.f (+1/-1)
Template/NLO/Utilities/check_events.f (+1/-1)
Template/NLO/Utilities/combine_jobs.f (+1/-1)
Template/NLO/Utilities/compare_events.f (+1/-1)
Template/NLO/Utilities/merge_events.f (+1/-1)
Template/NLO/Utilities/plot_events.f (+1/-1)
Template/NLO/Utilities/plot_events_lhef.f (+1/-1)
Template/NLO/Utilities/select_events.f (+1/-1)
Template/NLO/Utilities/split_events.f (+1/-1)
UpdateNotes.txt (+45/-0)
VERSION (+2/-2)
aloha/aloha_writers.py (+3/-1)
madgraph/__init__.py (+5/-1)
madgraph/core/base_objects.py (+16/-5)
madgraph/core/color_algebra.py (+4/-0)
madgraph/core/color_amp.py (+8/-3)
madgraph/core/diagram_generation.py (+55/-7)
madgraph/core/helas_objects.py (+32/-6)
madgraph/fks/fks_base.py (+11/-0)
madgraph/fks/fks_common.py (+15/-4)
madgraph/fks/fks_helas_objects.py (+10/-5)
madgraph/fks/fks_tag.py (+79/-0)
madgraph/interface/amcatnlo_run_interface.py (+41/-18)
madgraph/interface/common_run_interface.py (+43/-14)
madgraph/interface/extended_cmd.py (+1/-1)
madgraph/interface/loop_interface.py (+2/-2)
madgraph/interface/madevent_interface.py (+5/-1)
madgraph/interface/madgraph_interface.py (+64/-18)
madgraph/interface/reweight_interface.py (+2/-0)
madgraph/iolibs/export_cpp.py (+2/-2)
madgraph/iolibs/export_fks.py (+161/-100)
madgraph/iolibs/export_python.py (+4/-4)
madgraph/iolibs/export_v4.py (+108/-6)
madgraph/iolibs/helas_call_writers.py (+3/-0)
madgraph/iolibs/template_files/auto_dsig_v4.inc (+17/-1)
madgraph/iolibs/template_files/fks_info.inc (+7/-0)
madgraph/iolibs/template_files/madevent_electroweakFlux.inc (+116/-0)
madgraph/iolibs/template_files/madevent_symmetry.f (+3/-1)
madgraph/iolibs/template_files/matrix_madevent_group_v4.inc (+2/-14)
madgraph/iolibs/template_files/matrix_madevent_v4.inc (+5/-17)
madgraph/iolibs/template_files/rescale_alpha_tagged.inc (+40/-0)
madgraph/iolibs/template_files/super_auto_dsig_group_v4.inc (+9/-0)
madgraph/iolibs/ufo_expression_parsers.py (+3/-0)
madgraph/loop/loop_diagram_generation.py (+1/-1)
madgraph/loop/loop_exporters.py (+2/-2)
madgraph/loop/loop_helas_objects.py (+5/-5)
madgraph/madevent/sum_html.py (+2/-3)
madgraph/various/banner.py (+564/-177)
madgraph/various/cluster.py (+2/-0)
madgraph/various/misc.py (+70/-0)
madgraph/various/process_checks.py (+20/-17)
madgraph/various/systematics.py (+185/-48)
models/check_param_card.py (+1/-1)
models/import_ufo.py (+3/-0)
tests/acceptance_tests/test_cmd.py (+20/-18)
tests/acceptance_tests/test_cmd_amcatnlo.py (+63/-0)
tests/acceptance_tests/test_cmd_madevent.py (+43/-8)
tests/input_files/DM_pion/CT_couplings.py (+2/-2)
tests/input_files/DM_pion/CT_vertices.py (+8/-4)
tests/input_files/DM_pion/__init__.py (+13/-11)
tests/input_files/DM_pion/coupling_orders.py (+1/-1)
tests/input_files/DM_pion/couplings.py (+1/-2)
tests/input_files/DM_pion/function_library.py (+2/-1)
tests/input_files/DM_pion/lorentz.py (+1/-2)
tests/input_files/DM_pion/parameters.py (+5/-4)
tests/input_files/DM_pion/particles.py (+5/-4)
tests/input_files/DM_pion/propagators.py (+1/-1)
tests/input_files/DM_pion/vertices.py (+4/-4)
tests/input_files/DM_pion/write_param_card.py (+15/-59)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_001.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_002.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_003.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_004.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_005.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_006.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_007.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%b_sf_008.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%born.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%born_conf.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%born_hel.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%fks_info.inc (+8/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%get_color.f (+25/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%parton_lum_0.f (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_gg_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_001.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_002.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_003.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_004.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_005.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_006.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_007.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%b_sf_008.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%born.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%born_conf.inc (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%born_hel.f (+8/-8)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%fks_info.inc (+8/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%parton_lum_0.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uux_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_001.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_002.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_003.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_004.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_005.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_006.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_007.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%b_sf_008.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%born.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%born_conf.inc (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%born_hel.f (+8/-8)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%fks_info.inc (+8/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%parton_lum_0.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fks_loonly/%SubProcesses%P0_uxu_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_001.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_002.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_003.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_004.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_005.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_006.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_007.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%b_sf_008.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%born.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%born_conf.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%born_hel.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%fks_info.inc (+22/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%matrix_1.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%matrix_2.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%matrix_3.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%matrix_4.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%matrix_5.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%parton_lum_1.f (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%parton_lum_2.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%parton_lum_3.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%parton_lum_4.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%parton_lum_5.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_gg_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_001.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_002.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_003.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_004.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_005.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_006.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_007.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%b_sf_008.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%born.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%born_conf.inc (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%born_hel.f (+8/-8)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%fks_info.inc (+18/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%matrix_1.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%matrix_2.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%matrix_3.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%parton_lum_1.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%parton_lum_2.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%parton_lum_3.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uux_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_001.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_002.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_003.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_004.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_005.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_006.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_007.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%b_sf_008.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%born.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%born_conf.inc (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%born_hel.f (+8/-8)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%fks_info.inc (+18/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%matrix_1.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%matrix_2.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%matrix_3.f (+12/-12)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%parton_lum_1.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%parton_lum_2.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%parton_lum_3.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksreal/%SubProcesses%P0_uxu_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%b_sf_001.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%b_sf_002.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%b_sf_003.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%b_sf_004.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%b_sf_005.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%born.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%born_conf.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%born_hel.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%fks_info.inc (+20/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%get_color.f (+52/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%matrix_1.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%parton_lum_1.f (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ag_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_001.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_002.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_003.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_004.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_005.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_006.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_007.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%b_sf_008.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%born.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%born_conf.inc (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%born_hel.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%fks_info.inc (+30/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%get_color.f (+43/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%matrix_6.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%parton_lum_6.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ddx_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_001.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_002.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_003.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_004.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_005.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_006.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_007.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%b_sf_008.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%born.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%born_conf.inc (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%born_hel.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%fks_info.inc (+30/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%get_color.f (+43/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%matrix_6.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%parton_lum_6.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_dxd_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%b_sf_001.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%b_sf_002.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%b_sf_003.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%b_sf_004.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%b_sf_005.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%born.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%born_conf.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%born_hel.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%fks_info.inc (+20/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%get_color.f (+52/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%matrix_1.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%parton_lum_1.f (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_ga_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_001.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_002.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_003.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_004.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_005.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_006.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_007.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%b_sf_008.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%born.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%born_conf.inc (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%born_hel.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%fks_info.inc (+26/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%get_color.f (+55/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_6.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_7.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_8.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%matrix_9.f (+3/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_6.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_7.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_8.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%parton_lum_9.f (+1/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_gg_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_001.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_002.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_003.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_004.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_005.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_006.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_007.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%b_sf_008.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%born.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%born_conf.inc (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%born_hel.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%fks_info.inc (+30/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%get_color.f (+43/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%matrix_6.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%parton_lum_6.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uux_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_001.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_002.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_003.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_004.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_005.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_006.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_007.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%b_sf_008.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%born.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%born_conf.inc (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%born_hel.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%fks_info.inc (+30/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%get_color.f (+43/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_2.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_3.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_4.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_5.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%matrix_6.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_2.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_3.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_4.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_5.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%parton_lum_6.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_pptt_fksrealew/%SubProcesses%P0_uxu_ttx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%polynomial.f (+40/-40)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%fks_info.inc (+14/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%polynomial.f (+40/-40)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%fks_info.inc (+14/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%get_color.f (+49/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_001.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_002.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_003.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_004.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_005.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_006.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_007.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%b_sf_008.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%born.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%born_conf.inc (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%born_hel.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%fks_info.inc (+12/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%get_color.f (+55/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%matrix_1.f (+6/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%V0_dxu_veep%CT_interface.f (+287/-287)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%V0_dxu_veep%polynomial.f (+80/-80)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%fks_info.inc (+16/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%get_color.f (+61/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_dxu_veep%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%V0_udx_veep%CT_interface.f (+287/-287)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%V0_udx_veep%polynomial.f (+80/-80)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%a0Gmuconv.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%fks_info.inc (+16/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%get_color.f (+61/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%maxconfigs.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%maxparticles.inc (+3/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_wprod_fksew/%SubProcesses%P0_udx_veep%rescale_alpha_tagged.f (+43/-0)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_group/auto_dsig.f (+34/-0)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_group/matrix1.f (+8/-4)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_group/super_auto_dsig.f (+10/-0)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_nogroup/auto_dsig.f (+34/-0)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_nogroup/matrix.f (+9/-5)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_gt_0_QEDAmpAndQEDsq_gt_2.f (+2/-2)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QEDsq_le_4.f (+16/-16)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_WGTsq_le_10_QEDAmpAndQEDsq_gt_2.f (+23/-23)
tests/input_files/IOTestsComparison/MECmdShell/check_html_long_process_strings/info.html (+10/-10)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%COLLIER_interface.f (+2/-2)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%CT_interface.f (+433/-433)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%TIR_interface.f (+5/-4)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%coef_construction_1.f (+13/-13)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%helas_calls_uvct_1.f (+13/-13)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%loop_CT_calls_1.f (+13/-7)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%loop_matrix.f (+2/-2)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%loop_num.f (+2/-2)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_coef_construction_1.f (+13/-13)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_compute_loop_coefs.f (+1/-1)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_helas_calls_uvct_1.f (+13/-13)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%polynomial.f (+234/-234)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%CT_interface.f (+288/-288)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%polynomial.f (+120/-120)
tests/input_files/IOTestsComparison/TestMadWeight/modification_to_cuts/cuts.f (+6/-5)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/%..%..%Source%MODEL%input.inc (+4/-4)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/%..%..%Source%MODEL%mp_input.inc (+19/-18)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/CT_interface.f (+108/-108)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/loop_matrix.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/mp_born_amps_and_wfs.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/%..%..%Source%MODEL%input.inc (+4/-4)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/%..%..%Source%MODEL%mp_input.inc (+19/-18)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/CT_interface.f (+416/-416)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/loop_matrix.f (+16/-16)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/mp_born_amps_and_wfs.f (+16/-16)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/%..%..%Source%MODEL%input.inc (+4/-4)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/%..%..%Source%MODEL%mp_input.inc (+19/-18)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/CT_interface.f (+136/-136)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/helas_calls_uvct_1.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/mp_helas_calls_uvct_1.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/polynomial.f (+182/-182)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/%..%..%Source%MODEL%input.inc (+4/-4)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/%..%..%Source%MODEL%mp_input.inc (+19/-18)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/CT_interface.f (+401/-401)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/TIR_interface.f (+10/-4)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/coef_construction_1.f (+136/-136)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/helas_calls_uvct_1.f (+17/-17)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/loop_CT_calls_1.f (+178/-102)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/loop_matrix.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/loop_num.f (+2/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/mp_coef_construction_1.f (+136/-136)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/mp_compute_loop_coefs.f (+1/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/mp_helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/mp_helas_calls_uvct_1.f (+17/-17)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/polynomial.f (+356/-356)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%coupl.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%input.inc (+24/-24)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%mp_coupl.inc (+10/-10)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%mp_coupl_same_name.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%mp_input.inc (+18/-18)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/ddx_ttx/CT_interface.f (+198/-198)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%coupl.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%input.inc (+24/-24)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%mp_coupl.inc (+10/-10)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%mp_coupl_same_name.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%mp_input.inc (+5/-5)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/CT_interface.f (+197/-197)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/loop_matrix.f (+12/-12)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/mp_born_amps_and_wfs.f (+12/-12)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/CT_interface.f (+266/-266)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/polynomial.f (+120/-120)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%coupl.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%input.inc (+24/-24)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%mp_coupl.inc (+10/-10)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%mp_coupl_same_name.inc (+8/-8)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%mp_input.inc (+5/-5)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/%..%..%Source%MODEL%mp_intparam_definition.inc (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/CT_interface.f (+399/-399)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/TIR_interface.f (+5/-4)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/coef_construction_1.f (+13/-13)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/helas_calls_uvct_1.f (+13/-13)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/loop_CT_calls_1.f (+13/-7)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/loop_matrix.f (+2/-2)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/loop_num.f (+2/-2)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/mp_coef_construction_1.f (+13/-13)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/mp_compute_loop_coefs.f (+1/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/mp_helas_calls_ampb_1.f (+1/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/mp_helas_calls_uvct_1.f (+13/-13)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/polynomial.f (+234/-234)
tests/parallel_tests/test_ML5MSSMQCD.py (+2/-1)
tests/parallel_tests/test_aloha.py (+206/-308)
tests/time_db (+240/-239)
tests/unit_tests/core/test_color_amp.py (+1/-1)
tests/unit_tests/fks/test_fks_base.py (+7/-14)
tests/unit_tests/fks/test_fks_taggedphotons.py (+80/-0)
tests/unit_tests/interface/test_cmd.py (+25/-0)
tests/unit_tests/iolibs/test_import_v4.py (+1/-1)
tests/unit_tests/loop/test_import_LoopUFOModel.py (+1/-1)
tests/unit_tests/various/test_banner.py (+127/-4)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/3.3.0
Reviewer Review Type Date Requested Status
Olivier Mattelaer Approve
Review via email: mp+411474@code.launchpad.net

Description of the change

This includes:
 - Bug fixing from 2.9.6
 - EWA branch
 - New_clustering branch
 - tagged photon
 - lepton_from_proton branch
 - Move pythia8 support to pythya8.3

Known Bug:
 - jet veto cross-section (since 3.x.x)
 - issue with heft at NLO (since 3.x.x as well)

To post a comment you must log in.
lp:~maddevelopers/mg5amcnlo/3.3.0 updated
979. By olivier-mattelaer

merge with 2.7.0_gpu version 368->371: fixing randomness in ordering

980. By olivier-mattelaer

update IOTest (now should be reproducible version to version)

981. By olivier-mattelaer

force set to be ordered in debug mode (result more and more reproducible)

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

I have added a bunch of "python hack --applied only to debug mode--" to force set to be ordered and avoid the huge list of false positive in the IOTest.

If they are no objection to this, I will release it Thursday or Friday.

Olivier

lp:~maddevelopers/mg5amcnlo/3.3.0 updated
982. By olivier-mattelaer

fixing some py2 ordering issue, fixing side effect of ordered set, fixing tests

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote :

let's release this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2013-03-17 12:01:13 +0000
+++ .bzrignore 2021-11-12 09:03:34 +0000
@@ -1,3 +1,4 @@
1models/RS/.DS_Store1models/RS/.DS_Store
2help2help
3./tests/input_files/my_smallsm3./tests/input_files/my_smallsm
4
45
=== modified file 'INSTALL'
--- INSTALL 2013-11-15 11:21:46 +0000
+++ INSTALL 2021-11-12 09:03:34 +0000
@@ -24,7 +24,7 @@
2424
25 * MadGraph5_aMC@NLO *25 * MadGraph5_aMC@NLO *
2626
27- Python 2.6 (or higher, but not compatible with 3.X)27- Python 3.7 (or higher, python2.7 is also working for the time being)
2828
29 * MadEvent *29 * MadEvent *
30Package for the LO cross-section computation and generation of events 30Package for the LO cross-section computation and generation of events
3131
=== modified file 'MadSpin/decay.py'
--- MadSpin/decay.py 2021-05-23 14:17:53 +0000
+++ MadSpin/decay.py 2021-11-12 09:03:34 +0000
@@ -178,7 +178,7 @@
178 part=self.event2mg[item]178 part=self.event2mg[item]
179 if part>0:179 if part>0:
180 particle_line=self.get_particle_line(self.particle[part])180 particle_line=self.get_particle_line(self.particle[part])
181 if abs(self.particle[part]["istup"]) == 1:181 if abs(self.particle[part]["istup"]) == 1 or abs(self.particle[part]["istup"]) == 2:
182 if "pt_scale" in self.particle[part]:182 if "pt_scale" in self.particle[part]:
183 scales.append(self.particle[part]["pt_scale"])183 scales.append(self.particle[part]["pt_scale"])
184 else:184 else:
@@ -187,17 +187,16 @@
187 particle_line=self.get_particle_line(self.resonance[part])187 particle_line=self.get_particle_line(self.resonance[part])
188 line+=particle_line 188 line+=particle_line
189 189
190 if self.diese:
191 line += self.diese
192 if self.rwgt:
193 line += self.rwgt
190 if any(scales):194 if any(scales):
191 sqrts = self.particle[1]["pt_scale"]195 sqrts = self.particle[1]["pt_scale"]
192 line += "<scales %s></scales>\n" % ' '.join(['pt_clust_%i=\"%s\"' 196 line += "<scales %s></scales>\n" % ' '.join(['pt_clust_%i=\"%s\"'
193 %(i-1,s if s else sqrts)197 %(i+1,s if s else self.scale)
194 for i,s in enumerate(scales)198 for i,s in enumerate(scales)
195 if i>1])199 if i>1])
196
197 if self.diese:
198 line += self.diese
199 if self.rwgt:
200 line += self.rwgt
201 line+="</event> \n"200 line+="</event> \n"
202 return line201 return line
203202
204203
=== modified file 'MadSpin/interface_madspin.py'
--- MadSpin/interface_madspin.py 2021-05-23 07:47:20 +0000
+++ MadSpin/interface_madspin.py 2021-11-12 09:03:34 +0000
@@ -85,7 +85,7 @@
85 ############################################################################85 ############################################################################
86 ## Special post-processing of the options ## 86 ## Special post-processing of the options ##
87 ############################################################################87 ############################################################################
88 def post_set_ms_dir(self, value, change_userdefine, raiseerror):88 def post_set_ms_dir(self, value, change_userdefine, raiseerror, *opts):
89 """ special handling for set ms_dir """89 """ special handling for set ms_dir """
90 90
91 self.__setitem__('curr_dir', value, change_userdefine=change_userdefine)91 self.__setitem__('curr_dir', value, change_userdefine=change_userdefine)
@@ -97,7 +97,7 @@
97 random.seed(value)97 random.seed(value)
9898
99 ############################################################################ 99 ############################################################################
100 def post_set_run_card(self, value, change_userdefine, raiseerror):100 def post_set_run_card(self, value, change_userdefine, raiseerror, *opts):
101 """ special handling for set run_card """101 """ special handling for set run_card """
102 102
103 if value == 'default':103 if value == 'default':
104104
=== modified file 'MadSpin/madspin'
--- MadSpin/madspin 2021-06-29 19:12:21 +0000
+++ MadSpin/madspin 2021-11-12 09:03:34 +0000
@@ -1,4 +1,4 @@
1#! /usr/bin/env python1#! /usr/bin/env python3
22
3################################################################################3################################################################################
4#4#
@@ -20,8 +20,8 @@
20from __future__ import absolute_import20from __future__ import absolute_import
21from __future__ import print_function21from __future__ import print_function
22import sys22import sys
23if not sys.version_info[0] == 2 or sys.version_info[1] < 6:23if sys.version_info[1] < 6:
24 sys.exit('MadSpin works only with python 2.6 or later (but not python 3.X).\n\24 sys.exit('MadSpin works only with python 2.7 or with python 3.6 (or later).\n\
25 Please upgrate your version of python.')25 Please upgrate your version of python.')
2626
27import os27import os
2828
=== modified file 'Template/Common/Source/PDF/pdf.inc'
--- Template/Common/Source/PDF/pdf.inc 2021-04-16 08:31:20 +0000
+++ Template/Common/Source/PDF/pdf.inc 2021-11-12 09:03:34 +0000
@@ -6,6 +6,7 @@
6c pdlabel= string identifying the pdf 6c pdlabel= string identifying the pdf
7c***********************************************************************7c***********************************************************************
8 character*7 pdlabel,epa_label8 character*7 pdlabel,epa_label
9 character*7 pdsublabel(2)
9 integer lhaid10 integer lhaid
10 common/to_pdf/lhaid,pdlabel,epa_label11 common/to_pdf/lhaid,pdlabel,epa_label,pdsublabel
11 12
1213
=== modified file 'Template/LO/Cards/run_card.dat'
--- Template/LO/Cards/run_card.dat 2021-01-08 16:12:55 +0000
+++ Template/LO/Cards/run_card.dat 2021-11-12 09:03:34 +0000
@@ -27,8 +27,9 @@
27 %(iseed)s = iseed ! rnd seed (0=assigned automatically=default))27 %(iseed)s = iseed ! rnd seed (0=assigned automatically=default))
28#*********************************************************************28#*********************************************************************
29# Collider type and energy *29# Collider type and energy *
30# lpp: 0=No PDF, 1=proton, -1=antiproton, 2=photon from proton, *30# lpp: 0=No PDF, 1=proton, -1=antiproton, 2=elastic photon of proton,*
31# 3=photon from electron, 4=photon from muon *31# +/-3=PDF of electron/positron beam *
32# +/-4=PDF of muon/antimuon beam *
32#*********************************************************************33#*********************************************************************
33 %(lpp1)s = lpp1 ! beam 1 type 34 %(lpp1)s = lpp1 ! beam 1 type
34 %(lpp2)s = lpp2 ! beam 2 type35 %(lpp2)s = lpp2 ! beam 2 type
@@ -37,21 +38,26 @@
37$beam_pol38$beam_pol
38$frame39$frame
39#*********************************************************************40#*********************************************************************
40# PDF CHOICE: this automatically fixes also alpha_s and its evol. *41# PDF CHOICE: this automatically fixes alpha_s and its evol. *
42# pdlabel: lhapdf=LHAPDF (installation needed) [1412.7420] *
43# iww=Improved Weizsaecker-Williams Approx.[hep-ph/9310350] *
44# eva=Effective W/Z/A Approx. [21yy.zzzzz] *
45# none=No PDF, same as lhapdf with lppx=0 *
41#*********************************************************************46#*********************************************************************
42 %(pdlabel)s = pdlabel ! PDF set 47$pdlabel
43 %(lhaid)s = lhaid ! if pdlabel=lhapdf, this is the lhapdf number48 %(lhaid)s = lhaid ! if pdlabel=lhapdf, this is the lhapdf number
44$ion_pdf49$ion_pdf
45#*********************************************************************50#*********************************************************************
46# Renormalization and factorization scales *51# Renormalization and factorization scales *
47#*********************************************************************52#*********************************************************************
48 %(fixed_ren_scale)s = fixed_ren_scale ! if .true. use fixed ren scale53 %(fixed_ren_scale)s = fixed_ren_scale ! if .true. use fixed ren scale
49 %(fixed_fac_scale)s = fixed_fac_scale ! if .true. use fixed fac scale54$fixed_fact_scale
50 %(scale)s = scale ! fixed ren scale55 %(scale)s = scale ! fixed ren scale
51 %(dsqrt_q2fact1)s = dsqrt_q2fact1 ! fixed fact scale for pdf156 %(dsqrt_q2fact1)s = dsqrt_q2fact1 ! fixed fact scale for pdf1
52 %(dsqrt_q2fact2)s = dsqrt_q2fact2 ! fixed fact scale for pdf257 %(dsqrt_q2fact2)s = dsqrt_q2fact2 ! fixed fact scale for pdf2
53 %(dynamical_scale_choice)s = dynamical_scale_choice ! Choose one of the preselected dynamical choices58 %(dynamical_scale_choice)s = dynamical_scale_choice ! Choose one of the preselected dynamical choices
54 %(scalefact)s = scalefact ! scale factor for event-by-event scales59 %(scalefact)s = scalefact ! scale factor for event-by-event scales
60 $eva_scale
55#*********************************************************************61#*********************************************************************
56# Type and output format62# Type and output format
57#*********************************************************************63#*********************************************************************
@@ -80,7 +86,8 @@
80#86#
81#******************************* 87#*******************************
82# Parton level cuts definition *88# Parton level cuts definition *
83#******************************* 89#*******************************
90 %(dsqrt_shat)s = dsqrt_shat ! minimal shat for full process
84# 91#
85#92#
86#*********************************************************************93#*********************************************************************
8794
=== added file 'Template/LO/Source/PDF/ElectroweakFlux.f'
--- Template/LO/Source/PDF/ElectroweakFlux.f 1970-01-01 00:00:00 +0000
+++ Template/LO/Source/PDF/ElectroweakFlux.f 2021-11-12 09:03:34 +0000
@@ -0,0 +1,225 @@
1c /* ********************************************************* *
2c Effective Vector Boson Approximation
3c /* ********************************************************* *
4c File: ElectroweakFlux.f
5c R. Ruiz (2021 February)
6c For details, see companion paper by ..., et al [arXiv:]
7c /* ********************************************************* *
8c /* ********************************************************* *
9c function eva_fX_to_vV(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo):
10c call electroweak PDF for for vector boson (hel=V=0,+,-) from fermion
11c with fractional (0<pol<1) LH (RH) polarization of fLpol (1-fLpol)
12c - fLpol = 0.5d0 = parent fermion is spin-averaged
13c /* ********************************************************* *
14c /* ********************************************************* *
15c function eva_fF_to_vV(gg2,gF2,mv2,x,mu2,ievo):
16c electroweak PDF for vector boson (hel=V=0,+,-) from fermion (hel=F=L/R)
17c - gg2 = (coupling)^2
18c - gF2 = (L/R chiral coupling)^2
19c - mv2 = (mass of boson)^2
20c - x = momentum fraction = (E_V / E_f)
21c - mu2 = (max of evolution scale)^2
22c - ievo = for evolution by virtuality (or !=0 for pT)
23c /* ********************************************************* *
24c /* ********************************************************* *
25c /* ********************************************************* *
26c /* ********************************************************* *
27 double precision function eva_fX_to_vp(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
28 implicit none
29 integer ievo
30 double precision gg2,gL2,gR2,fLpol,mv2,x,mu2
31 double precision eva_fL_to_vp,eva_fR_to_vp
32
33 eva_fX_to_vp = fLpol*eva_fL_to_vp(gg2,gL2,mv2,x,mu2,ievo)
34 & + (1d0-fLpol)*eva_fR_to_vp(gg2,gR2,mv2,x,mu2,ievo)
35 return
36 end
37c /* ********************************************************* *
38 double precision function eva_fX_to_vm(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
39 implicit none
40 integer ievo
41 double precision gg2,gL2,gR2,fLpol,mv2,x,mu2
42 double precision eva_fL_to_vm,eva_fR_to_vm
43
44 eva_fX_to_vm = fLpol*eva_fL_to_vm(gg2,gL2,mv2,x,mu2,ievo)
45 & + (1d0-fLpol)*eva_fR_to_vm(gg2,gR2,mv2,x,mu2,ievo)
46 return
47 end
48c /* ********************************************************* *
49 double precision function eva_fX_to_v0(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
50 implicit none
51 integer ievo
52 double precision gg2,gL2,gR2,fLpol,mv2,x,mu2
53 double precision eva_fL_to_v0,eva_fR_to_v0
54
55 eva_fX_to_v0 = fLpol*eva_fL_to_v0(gg2,gL2,mv2,x,mu2,ievo)
56 & + (1d0-fLpol)*eva_fR_to_v0(gg2,gR2,mv2,x,mu2,ievo)
57 return
58 end
59c /* ********************************************************* *
60 double precision function eva_fX_to_fL(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
61 implicit none
62 integer ievo
63 double precision gg2,gL2,gR2,fLpol,mv2,x,mu2
64 double precision eva_fL_to_fL,eva_fR_to_fL
65
66 eva_fX_to_fL = fLpol*eva_fL_to_fL(gg2,gL2,mv2,x,mu2,ievo)
67 & + (1d0-fLpol)*eva_fR_to_fL(gg2,gR2,mv2,x,mu2,ievo)
68 return
69 end
70c /* ********************************************************* *
71 double precision function eva_fX_to_fR(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
72 implicit none
73 integer ievo
74 double precision gg2,gL2,gR2,fLpol,mv2,x,mu2
75 double precision eva_fL_to_fR,eva_fR_to_fR
76
77 eva_fX_to_fR = fLpol*eva_fL_to_fR(gg2,gL2,mv2,x,mu2,ievo)
78 & + (1d0-fLpol)*eva_fR_to_fR(gg2,gR2,mv2,x,mu2,ievo)
79 return
80 end
81c /* ********************************************************* *
82c EVA (1/6) for f_L > v_+
83 double precision function eva_fL_to_vp(gg2,gL2,mv2,x,mu2,ievo)
84 implicit none
85 integer ievo ! evolution by q2 or pT2
86 double precision gg2,gL2,mv2,x,mu2
87 double precision coup2,split,xxlog,fourPiSq
88 data fourPiSq/39.47841760435743d0/ ! = 4pi**2
89
90c print*,'gg2,gL2,mv2,x,mu2,ievo',gg2 !3,gL2,mv2,x,mu2,ievo
91 coup2 = gg2*gL2/fourPiSq
92 split = (1.d0-x)**2 / 2.d0 / x
93 if(ievo.eq.0) then
94 xxlog = dlog(mu2/mv2)
95 else
96 xxlog = dlog(mu2/mv2/(1.d0-x))
97 endif
98
99 eva_fL_to_vp = coup2*split*xxlog
100 return
101 end
102c /* ********************************************************* *
103c EVA (2/6) for f_L > v_-
104 double precision function eva_fL_to_vm(gg2,gL2,mv2,x,mu2,ievo)
105 implicit none
106 integer ievo ! evolution by q2 or pT2
107 double precision gg2,gL2,mv2,x,mu2
108 double precision coup2,split,xxlog,fourPiSq
109 data fourPiSq/39.47841760435743d0/ ! = 4pi**2
110
111 coup2 = gg2*gL2/fourPiSq
112 split = 1.d0 / 2.d0 / x
113 if(ievo.eq.0) then
114 xxlog = dlog(mu2/mv2)
115 else
116 xxlog = dlog(mu2/mv2/(1.d0-x))
117 endif
118
119 eva_fL_to_vm = coup2*split*xxlog
120 return
121 end
122c /* ********************************************************* *
123c EVA (3/6) for f_L > v_0
124 double precision function eva_fL_to_v0(gg2,gL2,mv2,x,mu2,ievo)
125 implicit none
126 integer ievo ! evolution by q2 or pT2
127 double precision gg2,gL2,mv2,x,mu2
128 double precision coup2,split,xxlog,fourPiSq
129 data fourPiSq/39.47841760435743d0/ ! = 4pi**2
130c
131 coup2 = gg2*gL2/fourPiSq
132 split = (1.d0-x) / x
133 xxlog = 1.d0
134
135 eva_fL_to_v0 = coup2*split*xxlog
136 return
137 end
138c /* ********************************************************* *
139c EVA (4/6) for f_R > v_+
140 double precision function eva_fR_to_vp(gg2,gR2,mv2,x,mu2,ievo)
141 implicit none
142 integer ievo ! evolution by q2 or pT2
143 double precision gg2,gR2,mv2,x,mu2
144 double precision eva_fL_to_vm
145
146 eva_fR_to_vp = eva_fL_to_vm(gg2,gR2,mv2,x,mu2,ievo)
147 return
148 end
149c /* ********************************************************* *
150c EVA (5/6) for f_R > v_-
151 double precision function eva_fR_to_vm(gg2,gR2,mv2,x,mu2,ievo)
152 implicit none
153 integer ievo ! evolution by q2 or pT2
154 double precision gg2,gR2,mv2,x,mu2
155 double precision eva_fL_to_vp
156
157 eva_fR_to_vm = eva_fL_to_vp(gg2,gR2,mv2,x,mu2,ievo)
158 return
159 end
160c /* ********************************************************* *
161c EVA (6/6) for f_R > v_0
162 double precision function eva_fR_to_v0(gg2,gR2,mv2,x,mu2,ievo)
163 implicit none
164 integer ievo ! evolution by q2 or pT2
165 double precision gg2,gR2,mv2,x,mu2
166 double precision eva_fL_to_v0
167
168 eva_fR_to_v0 = eva_fL_to_v0(gg2,gR2,mv2,x,mu2,ievo)
169 return
170 end
171c /* ********************************************************* *
172c EVA () for f_L > f_L
173c fL_to_fL(z) = fL_to_vp(1-z) + fL_to_vm(1-z)
174 double precision function eva_fL_to_fL(gg2,gL2,mv2,x,mu2,ievo)
175 implicit none
176 integer ievo ! evolution by q2 or pT2
177 double precision gg2,gL2,mv2,x,mu2
178 double precision tmpVp,tmpVm,z
179 double precision eva_fL_to_vp,eva_fL_to_vm
180
181 z = 1.d0 - x
182 tmpVp = eva_fL_to_vp(gg2,gL2,mv2,z,mu2,ievo)
183 tmpVm = eva_fL_to_vm(gg2,gL2,mv2,z,mu2,ievo)
184
185 eva_fL_to_fL = tmpVp + tmpVm
186 return
187 end
188c /* ********************************************************* *
189c EVA () for f_R > f_R
190c fR_to_fR(z) = fR_to_vp(1-z) + fR_to_vm(1-z)
191 double precision function eva_fR_to_fR(gg2,gR2,mv2,x,mu2,ievo)
192 implicit none
193 integer ievo ! evolution by q2 or pT2
194 double precision gg2,gR2,mv2,x,mu2
195 double precision tmpVp,tmpVm,z
196 double precision eva_fR_to_vp,eva_fR_to_vm
197
198 z = 1.d0 - x
199 tmpVp = eva_fR_to_vp(gg2,gR2,mv2,z,mu2,ievo)
200 tmpVm = eva_fR_to_vm(gg2,gR2,mv2,z,mu2,ievo)
201
202 eva_fR_to_fR = tmpVp + tmpVm
203 return
204 end
205c /* ********************************************************* *
206c EVA () for f_L > f_R
207 double precision function eva_fL_to_fR(gg2,gL2,mv2,x,mu2,ievo)
208 implicit none
209 integer ievo ! evolution by q2 or pT2
210 double precision gg2,gL2,mv2,x,mu2
211
212 eva_fL_to_fR = 0d0
213 return
214 end
215c /* ********************************************************* *
216c EVA () for f_R > f_L
217 double precision function eva_fR_to_fL(gg2,gR2,mv2,x,mu2,ievo)
218 implicit none
219 integer ievo ! evolution by q2 or pT2
220 double precision gg2,gR2,mv2,x,mu2
221
222 eva_fR_to_fL = 0d0
223 return
224 end
225c /* ********************************************************* *
0\ No newline at end of file226\ No newline at end of file
1227
=== added file 'Template/LO/Source/PDF/ElectroweakFluxDriver.f'
--- Template/LO/Source/PDF/ElectroweakFluxDriver.f 1970-01-01 00:00:00 +0000
+++ Template/LO/Source/PDF/ElectroweakFluxDriver.f 2021-11-12 09:03:34 +0000
@@ -0,0 +1,561 @@
1c /* ********************************************************* *
2c Effective Vector Boson Approximation
3c /* ********************************************************* *
4c File: ElectroweakFluxDriver.f
5c R. Ruiz (2021 February)
6c For details, see companion paper by Costantini, et al [arXiv:]
7c /* ********************************************************* *
8c function eva_get_pdf_by_PID:
9c - wrapper for eva_get_pdf_by_PID_evo
10c function eva_get_pdf_by_PID_evo
11c - set eva PDF couplings by PIDs
12c - call V_+,V_-,V_0 PDF by v polarization (vpol)
13c - call PDF for f_L,f_R by fL polarization (fLpol; fLpol=0.5 = unpolarized)
14c subroutine eva_get_mv2_by_PID
15c - assign mass by vPID
16c subroutine eva_get_mf2_by_PID
17c - assign mass by fPID
18c subroutine eva_get_gg2_by_PID
19c - assign universal coupling strength by vPID
20c subroutine eva_get_gR2_by_PID
21c - assign right couplings of fermion by vPID and fPID
22c subroutine eva_get_gL2_by_PID
23c - assign left couplings of fermion by vPID and fPID
24c /* ********************************************************* *
25 double precision function eva_get_pdf_by_PID(vPID,fPID,vpol,fLpol,x,mu2,ievo)
26 implicit none
27 integer ievo ! =0 for evolution by q^2 (!=0 for evolution by pT^2)
28 integer vPID,fPID,vpol
29 double precision fLpol,x,mu2
30 double precision eva_get_pdf_by_PID_evo
31 double precision eva_get_pdf_photon_evo
32 double precision eva_get_pdf_neutrino_evo
33
34 double precision tiny,mu2min
35 double precision QW,Qf
36
37 include 'ElectroweakFlux.inc'
38
39 tiny = 1d-8
40 mu2min = 1d2 ! (10 GeV)^2 reset mu2min by vPID
41
42
43c do the following checks before calling PDF:
44c 1. momentum fraction, x
45c 2. fermion polarization fraction, fLpol
46c 3. vector boson (or neutrino) polarization by PID, vpol vPID
47c 4. evolution scale, mu2
48c 5. QED conservation check
49c start checks
50c 1. check momentum fraction
51 if(x.lt.tiny.or.x.gt.(1d0-tiny)) then
52 write(*,*) 'eva: x out of range',x
53 eva_get_pdf_by_PID = 0d0
54 return
55 endif
56c 2. check fermion polarization fraction
57 if(fLpol.lt.0d0.or.fLpol.gt.1d0) then
58 write(*,*) 'eva: fLpol out of range',fLpol
59 stop
60 eva_get_pdf_by_PID = 0d0
61 return
62 endif
63c 3. check vector boson (or neutrino) polarization by PID
64c also set lower bound on muf2 scale evolution by PID
65 select case (iabs(vPID))
66 case (12,14) ! ve, ve~, vm, vm~
67 mu2min = eva_mw2 ! scale set by W emission
68 if(iabs(vPol).ne.1) then
69 write(*,*) 'vPol out of range for ve/vm',vPol
70 stop 1214
71 eva_get_pdf_by_PID = 0d0
72 return
73 endif
74 case (23) ! z
75 mu2min = eva_mz2
76 if(iabs(vPol).ne.1.and.vPol.ne.0) then
77 write(*,*) 'vPol out of range for Z',vPol
78 stop 23
79 eva_get_pdf_by_PID = 0d0
80 return
81 endif
82 case (24) ! w
83 mu2min = eva_mw2
84 if(iabs(vPol).ne.1.and.vPol.ne.0) then
85 write(*,*) 'vPol out of range for W',vPol
86 stop 24
87 eva_get_pdf_by_PID = 0d0
88 return
89 endif
90 case (7,22) ! photon (special treatment for mu2min)
91 call eva_get_mf2_by_PID(mu2min,fPID) ! set scale to mass of parent fermion
92 if(iabs(vPol).ne.1) then
93 write(*,*) 'vPol out of range for A',vPol
94 stop 25
95 eva_get_pdf_by_PID = 0d0
96 return
97 endif
98c case (32) (eva for bsm)
99c mu2min = eva_mx2
100c if(iabs(vPol).ne.1.and.vPol.ne.0) then
101c write(*,*) 'vPol out of range',vPol
102c stop 26
103c eva_get_pdf_by_PID = 0d0
104c return
105c endif
106 case default
107 write(*,*) 'vPID out of range',vPID
108 stop 27
109 eva_get_pdf_by_PID = 0d0
110 return
111 end select
112c 4. check evolution scale
113 if(ievo.ne.0) then
114 mu2min = (1.d0-x)*mu2min
115 endif
116 if(mu2.lt.mu2min) then
117 write(*,*) 'muf2 too small. setting muf2 to muf2min:',mu2,mu2min
118 mu2 = mu2min
119 endif
120c 5. QED conservation check
121 if(iabs(vPID).eq.24) then
122 QW = dble(vPID/iabs(vPID))
123 call eva_get_qEM_by_PID(Qf,fPID)
124 if(dabs(Qf-QW).gt.eva_one) then
125 write(*,*) 'Stopping EVA: QED charge violation with emission of vPID=',vPID,' by fPID =',fPID
126 stop 24
127 return
128 endif
129 endif
130 if(iabs(vPID).eq.12.or.iabs(vPID).eq.14) then
131 select case(vPID)
132 case (12)
133 if(fPID.ne.11) then
134 write(*,*) 'Stopping EVA: neutrino mismatch with emission of vPID=',vPID,' by fPID =',fPID
135 stop 1211
136 endif
137 case (-12)
138 if(fPID.ne.-11) then
139 write(*,*) 'Stopping EVA: neutrino mismatch with emission of vPID=',vPID,' by fPID =',fPID
140 stop -1211
141 endif
142 case (14)
143 if(fPID.ne.13) then
144 write(*,*) 'Stopping EVA: neutrino mismatch with emission of vPID=',vPID,' by fPID =',fPID
145 stop 1413
146 endif
147 case (-14)
148 if(fPID.ne.-13) then
149 write(*,*) 'Stopping EVA: neutrino mismatch with emission of vPID=',vPID,' by fPID =',fPID
150 stop -1413
151 endif
152 case default
153 write(*,*) 'Stopping EVA at neutrino check. should not be here with emission of vPID=',vPID,' by fPID =',fPID
154 stop -1412
155 end select
156 endif
157c if(iabs(vPID).eq.22.and.(
158c & iabs(fPID).eq.12.or.
159c & iabs(fPID).eq.14.or.
160c & iabs(fPID).eq.16)) then
161c write(*,*) 'QED charge violation with a emission by neutrino'
162c eva_get_pdf_by_PID = 0d0
163c return
164c endif
165c celebrate by calling the PDF
166c if(vPID.eq.22.or.vPID.eq.7) then
167c eva_get_pdf_by_PID = eva_get_pdf_photon_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
168c else
169c eva_get_pdf_by_PID = eva_get_pdf_by_PID_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
170c endif
171
172 select case (abs(vPID))
173 case (7,22)
174 eva_get_pdf_by_PID = eva_get_pdf_photon_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
175 case (12,14)
176 eva_get_pdf_by_PID = eva_get_pdf_neutrino_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
177 case default
178 eva_get_pdf_by_PID = eva_get_pdf_by_PID_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
179 end select
180 return
181 end
182c /* ********************************************************* *
183c /* ********************************************************* *
184c /* ********************************************************* *
185c /* ********************************************************* *
186 double precision function eva_get_pdf_by_PID_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
187 implicit none
188 integer vPID,fPID,vpol,ievo
189 double precision fLpol,x,mu2
190 double precision eva_fX_to_vm,eva_fX_to_v0,eva_fX_to_vp
191
192 double precision gg2,gL2,gR2,mv2,tmpPDF
193 call eva_get_mv2_by_PID(mv2,vPID)
194 call eva_get_gg2_by_PID(gg2,vPID,fPID)
195 if( fPID/iabs(fPID).gt.0 ) then ! particle
196 call eva_get_gR2_by_PID(gR2,vPID,fPID)
197 call eva_get_gL2_by_PID(gL2,vPID,fPID)
198 else ! antiparticle (invert parity)
199 call eva_get_gR2_by_PID(gL2,vPID,fPID)
200 call eva_get_gL2_by_PID(gR2,vPID,fPID)
201 endif
202 select case (vpol)
203 case (-1)
204 tmpPDF = eva_fX_to_vm(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
205 case (0)
206 tmpPDF = eva_fX_to_v0(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
207 case (+1)
208 tmpPDF = eva_fX_to_vp(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
209 case default
210 write(*,*) 'vPol out of range; should not be here',vPol
211 stop
212 tmpPDF = 0d0
213 end select
214 eva_get_pdf_by_PID_evo = tmpPDF
215 return
216 end
217c /* ********************************************************* *
218 double precision function eva_get_pdf_photon_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
219 implicit none
220 integer vPID,fPID,vpol,ievo
221 double precision fLpol,x,mu2
222 double precision eva_fX_to_vm,eva_fX_to_v0,eva_fX_to_vp
223
224 double precision gg2,gL2,gR2,mf2,tmpPDF
225 call eva_get_mf2_by_PID(mf2,fPID)
226 call eva_get_gg2_by_PID(gg2,vPID,fPID)
227 if( fPID/iabs(fPID).gt.0 ) then ! particle
228 call eva_get_gR2_by_PID(gR2,vPID,fPID)
229 call eva_get_gL2_by_PID(gL2,vPID,fPID)
230 else ! antiparticle (invert parity)
231 call eva_get_gR2_by_PID(gL2,vPID,fPID)
232 call eva_get_gL2_by_PID(gR2,vPID,fPID)
233 endif
234 select case (vpol)
235 case (-1)
236 tmpPDF = eva_fX_to_vm(gg2,gL2,gR2,fLpol,mf2,x,mu2,ievo)
237 case (+1)
238 tmpPDF = eva_fX_to_vp(gg2,gL2,gR2,fLpol,mf2,x,mu2,ievo)
239 case default
240 write(*,*) 'vPol out of range; should not be here',vPol
241 stop
242 tmpPDF = 0d0
243 end select
244 eva_get_pdf_photon_evo = tmpPDF
245 return
246 end
247c /* ********************************************************* *
248c /* ********************************************************* *
249 double precision function eva_get_pdf_neutrino_evo(vPID,fPID,vpol,fLpol,x,mu2,ievo)
250 implicit none
251 integer vPID,fPID,vpol,ievo
252 logical isAntiNu
253 double precision fLpol,x,mu2
254 double precision eva_fX_to_fR,eva_fX_to_fL
255
256 double precision gg2,gL2,gR2,mv2,tmpPDF
257 call eva_get_mv2_by_PID(mv2,vPID)
258 call eva_get_gg2_by_PID(gg2,vPID,fPID)
259 if( fPID/iabs(fPID).gt.0 ) then ! particle
260 isAntiNu = .false.
261 call eva_get_gR2_by_PID(gR2,vPID,fPID)
262 call eva_get_gL2_by_PID(gL2,vPID,fPID)
263 else ! antiparticle (invert parity)
264 isAntiNu = .true.
265 call eva_get_gR2_by_PID(gL2,vPID,fPID)
266 call eva_get_gL2_by_PID(gR2,vPID,fPID)
267 endif
268
269 select case (vpol)
270 case (-1)
271 if(isAntiNu) then ! no LH antineutrinos
272 tmpPDF = 0
273 else
274 tmpPDF = eva_fX_to_fL(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
275 endif
276 case (+1)
277 if(isAntiNu) then ! no RH neutrinos
278 tmpPDF = eva_fX_to_fR(gg2,gL2,gR2,fLpol,mv2,x,mu2,ievo)
279 else
280 tmpPDF = 0
281 endif
282 case default
283 write(*,*) 'vPol out of range; should not be here',vPol
284 stop
285 tmpPDF = 0d0
286 end select
287 eva_get_pdf_neutrino_evo = tmpPDF
288 return
289 end
290c /* ********************************************************* *
291c /* ********************************************************* *
292c /* ********************************************************* *
293c /* ********************************************************* *
294c /* ********************************************************* *
295 subroutine eva_get_mv2_by_PID(mv2,vPID)
296 implicit none
297 integer vPID
298 double precision mv2
299 include 'ElectroweakFlux.inc'
300
301 select case (iabs(vPID))
302 case (7,22)
303 mv2 = eva_zero
304 case (23)
305 mv2 = eva_mz2
306 case (24)
307 mv2 = eva_mw2
308 case (12,14,16) ! l > vl splitting
309 mv2 = eva_mw2
310c case (25)
311c mv2 = eva_mh2
312c case (32)
313c mv2 = eva_mx2
314 case default
315 write(*,*) 'eva: setting m_v to m_w. unknown vPID:', vPID
316 mv2 = eva_mw2
317 end select
318 return
319 end
320c /* ********************************************************* *
321c /* ********************************************************* *
322 subroutine eva_get_mf2_by_PID(mf2,fPID)
323 implicit none
324 integer fPID
325 double precision mf2
326 include 'ElectroweakFlux.inc'
327
328 select case (iabs(fPID))
329 case (1)
330 mf2 = eva_md2
331 case (2)
332 mf2 = eva_mu2
333 case (3)
334 mf2 = eva_ms2
335 case (4)
336 mf2 = eva_mc2
337 case (5)
338 mf2 = eva_mb2
339 case (6)
340 mf2 = eva_mt2
341 case (11)
342 mf2 = eva_me2
343 case (12,14,16)
344 mf2 = eva_zero
345 case (13)
346 mf2 = eva_mm2
347 case (15)
348 mf2 = eva_ml2
349 case default
350 write(*,*) 'eva: asking for mass of unknown fPID: ', fPID
351 stop 25
352 mf2 = eva_zero
353 end select
354 return
355 end
356c /* ********************************************************* *
357c /* ********************************************************* *
358 subroutine eva_get_gg2_by_PID(gg2,vPID,fPID)
359 implicit none
360 integer vPID,fPID
361 double precision gg2
362 include 'ElectroweakFlux.inc'
363
364 select case (iabs(vPID))
365c ******************************
366 case (12,14) ! ve/vm/ve~/vm~
367 gg2 = eva_gw2/2.d0
368c ******************************
369 case (7,22) ! a
370c ******************************
371 select case (iabs(fPID)) ! nested select case
372 case (1) ! down
373 gg2 = eva_ee2*eva_qed2 ! = e^2 * (-1/3)^2
374 case (2) ! up
375 gg2 = eva_ee2*eva_qeu2
376 case (3) ! strange
377 gg2 = eva_ee2*eva_qed2
378 case (4) ! charm
379 gg2 = eva_ee2*eva_qeu2
380 case (5) ! bottom
381 gg2 = eva_ee2*eva_qed2
382 case (6) ! top
383 gg2 = eva_ee2*eva_qeu2
384 case (11,13,15) ! electron/muon/tau
385 gg2 = eva_ee2*eva_qee2
386 case (12,14,16) ! electron/muon/tau-neutrino
387c write(*,*) 'eva: nu has zero QED charge.'
388 gg2 = eva_zero
389 case default
390 write(*,*) 'eva: setting QED coup to (e*Q_e). unknown fPID:', fPID
391 gg2 = eva_ee2*eva_qee2
392 end select
393c ******************************
394 case (23) ! z
395 gg2 = eva_gz2
396c ******************************
397 case (24) ! w+/w-
398 gg2 = eva_gw2/2.d0
399 if(vPID.eq.24) then ! w+
400 select case (fPID)
401 case (-1,2,-3,4,-5,6,-11,12,-13,14,-15,16)
402 gg2 = gg2
403 case default
404 write(*,*) 'eva: violation of QED conservation. setting w+ffbar coup to zero'
405 gg2 = eva_zero
406 end select
407 else ! w-
408 select case (fPID)
409 case (1,-2,3,-4,5,-6,11,-12,13,-14,15,-16)
410 gg2 = gg2
411 case default
412 write(*,*) 'eva: violation of QED conservation. setting w-ffbar coup to zero'
413 gg2 = eva_zero
414 end select
415 endif
416c ******************************
417 case default
418 write(*,*) 'eva: setting coup to zero. unknown vPID:', vPID
419 gg2 = eva_zero
420 end select
421 return
422 end
423c /* ********************************************************* *
424c /* ********************************************************* *
425 subroutine eva_get_qEM_by_PID(qEM,fPID)
426 implicit none
427 integer fPID
428 double precision qEM
429 include 'ElectroweakFlux.inc'
430
431 select case (iabs(fPID)) ! nested select case
432 case (1) ! down
433 qEM = eva_qed * fPID/iabs(fPID)
434 case (2) ! up
435 qEM = eva_qeu * fPID/iabs(fPID)
436 case (3) ! strange
437 qEM = eva_qed * fPID/iabs(fPID)
438 case (4) ! charm
439 qEM = eva_qeu * fPID/iabs(fPID)
440 case (5) ! bottom
441 qEM = eva_qed * fPID/iabs(fPID)
442 case (6) ! top
443 qEM = eva_qeu * fPID/iabs(fPID)
444 case (11) ! electron
445 qEM = eva_qee * fPID/iabs(fPID)
446 case (12) ! electron-neutrino
447 qEM = eva_zero
448 case (13) ! muon
449 qEM = eva_qee * fPID/iabs(fPID)
450 case (14) ! muon-neutrino
451 qEM = eva_zero
452 case (15) ! tau
453 qEM = eva_qee * fPID/iabs(fPID)
454 case (16) ! tau-neutrino
455 qEM = eva_zero
456 case default
457 write(*,*) 'eva: setting QED charge to zero. unknown fPID:', fPID
458 qEM = eva_zero
459 end select
460c ******************************
461 return
462 end
463c /* ********************************************************* *
464c /* ********************************************************* *
465 subroutine eva_get_gR2_by_PID(gR2,vPID,fPID)
466 implicit none
467 integer vPID,fPID
468 double precision gR2
469 include 'ElectroweakFlux.inc'
470
471 select case (iabs(vPID))
472 case (7,22)
473 gR2 = eva_one
474 case (23)
475c ******************************
476 select case (iabs(fPID)) ! nested select case
477 case (1) ! down
478 gR2 = eva_zRd**2
479 case (2) ! up
480 gR2 = eva_zRu**2
481 case (3) ! strange
482 gR2 = eva_zRd**2
483 case (4) ! charm
484 gR2 = eva_zRu**2
485 case (5) ! bottom
486 gR2 = eva_zRd**2
487 case (6) ! top
488 gR2 = eva_zRu**2
489 case (11) ! electron
490 gR2 = eva_zRe**2
491 case (12) ! electron-neutrino
492 gR2 = eva_zRv**2
493 case (13) ! muon
494 gR2 = eva_zRe**2
495 case (14) ! muon-neutrino
496 gR2 = eva_zRv**2
497 case (15) ! tau
498 gR2 = eva_zRe**2
499 case (16) ! tau-neutrino
500 gR2 = eva_zRv**2
501 case default
502 gR2 = eva_one**2
503 end select
504c ******************************
505 case (24)
506 gR2 = eva_zero
507 case default
508 gR2 = eva_one
509 end select
510 return
511 end
512c /* ********************************************************* *
513c /* ********************************************************* *
514 subroutine eva_get_gL2_by_PID(gL2,vPID,fPID)
515 implicit none
516 integer vPID,fPID
517 double precision gL2
518 include 'ElectroweakFlux.inc'
519
520 select case (iabs(vPID))
521 case (7,22)
522 gL2 = eva_one
523 case (23)
524c ******************************
525 select case (iabs(fPID)) ! nested select case
526 case (1) ! down
527 gL2 = eva_zLd**2
528 case (2) ! up
529 gL2 = eva_zLu**2
530 case (3) ! strange
531 gL2 = eva_zLd**2
532 case (4) ! charm
533 gL2 = eva_zLu**2
534 case (5) ! bottom
535 gL2 = eva_zLd**2
536 case (6) ! top
537 gL2 = eva_zLu**2
538 case (11) ! electron
539 gL2 = eva_zLe**2
540 case (12) ! electron-neutrino
541 gL2 = eva_zLv**2
542 case (13) ! muon
543 gL2 = eva_zLe**2
544 case (14) ! muon-neutrino
545 gL2 = eva_zLv**2
546 case (15) ! tau
547 gL2 = eva_zLe**2
548 case (16) ! tau-neutrino
549 gL2 = eva_zLv**2
550 case default
551 gL2 = eva_one**2
552 end select
553c ******************************
554 case (24)
555 gL2 = eva_one
556 case default
557 gL2 = eva_one
558 end select
559 return
560 end
561c /* ********************************************************* *
0562
=== modified file 'Template/LO/Source/PDF/PhotonFlux.f'
--- Template/LO/Source/PDF/PhotonFlux.f 2020-08-07 14:49:25 +0000
+++ Template/LO/Source/PDF/PhotonFlux.f 2021-11-12 09:03:34 +0000
@@ -1,9 +1,14 @@
1c/* ********************************************************* */1c/* ******************************************************** */
2c/* Equivalent photon approximation structure function. * */2c/* Equivalent photon approximation structure function. * */
3c/* V.M.Budnev et al., Phys.Rep. 15C (1975) 181 * */3c/* V.M.Budnev, et al., Phys.Rep. 15C (1975) 181 * */
4c/* Improved Weizsaecker-Williams formula * */4c/* https://inspirehep.net/literature/95445 * */
5c/* http://inspirehep.net/record/359425 * */ 5c/* For photon from proton (elastic limit, no DGLAP evo) * */
6c/* ********************************************************* */6c/* * */
7c/* Improved Weizsaecker-Williams formula * */
8c/* S. Frixione, et al., Phys.Lett.B 319 (1993) 339-345 * */
9c/* http://inspirehep.net/record/359425 * */
10c/* For photon from electron (WW approx) + higher twist * */
11c/* ******************************************************** */
7c provided by Tomasz Pierzchala - UCL12c provided by Tomasz Pierzchala - UCL
813
9 real*8 function epa_lepton(x,q2max, mode)14 real*8 function epa_lepton(x,q2max, mode)
1015
=== modified file 'Template/LO/Source/PDF/makefile'
--- Template/LO/Source/PDF/makefile 2021-04-16 07:24:34 +0000
+++ Template/LO/Source/PDF/makefile 2021-11-12 09:03:34 +0000
@@ -15,14 +15,14 @@
15 $(error Bad lhadpfversion version 6 is now required)15 $(error Bad lhadpfversion version 6 is now required)
16 else16 else
17 ifeq ($(lhapdfsubversion),1) # 6.1.X17 ifeq ($(lhapdfsubversion),1) # 6.1.X
18 PDF = pdfwrap_lhapdf.o pdf_lhapdf6.o pdg2pdf_lhapdf6.o opendata.o PhotonFlux.o18 PDF = pdfwrap_lhapdf.o pdf_lhapdf6.o pdg2pdf_lhapdf6.o opendata.o PhotonFlux.o ElectroweakFluxDriver.o ElectroweakFlux.o
19 else # 6.2.X19 else # 6.2.X
20 CXXFLAGS+=-std=c++1120 CXXFLAGS+=-std=c++11
21 PDF = pdfwrap_lhapdf.o pdf_lhapdf62.o pdg2pdf_lhapdf6.o opendata.o PhotonFlux.o21 PDF = pdfwrap_lhapdf.o pdf_lhapdf62.o pdg2pdf_lhapdf6.o opendata.o PhotonFlux.o ElectroweakFluxDriver.o ElectroweakFlux.o
22 endif 22 endif
23 endif23 endif
24else24else
25 PDF = Ctq6Pdf.o pdfwrap.o opendata.o pdf.o PhotonFlux.o pdg2pdf.o NNPDFDriver.o eepdf.o gridpdfaux.o dfint.o kerset.o25 PDF = Ctq6Pdf.o pdfwrap.o opendata.o pdf.o PhotonFlux.o pdg2pdf.o NNPDFDriver.o eepdf.o gridpdfaux.o dfint.o kerset.o ElectroweakFluxDriver.o ElectroweakFlux.o
26endif26endif
2727
28all: $(LIBDIR)$(LIBRARY)28all: $(LIBDIR)$(LIBRARY)
2929
=== modified file 'Template/LO/Source/PDF/pdfwrap.f'
--- Template/LO/Source/PDF/pdfwrap.f 2021-04-19 12:59:10 +0000
+++ Template/LO/Source/PDF/pdfwrap.f 2021-11-12 09:03:34 +0000
@@ -261,8 +261,8 @@
261261
262c---------------------------------------------------------------262c---------------------------------------------------------------
263c---------------------------------------------------------------263c---------------------------------------------------------------
264264 elseif (pdlabel.eq.'eva'.or.pdlabel.eq.'iww'.or.pdlabel.eq.'none') then
265265 asmz=asmz
266 else266 else
267 asmz=0.118d0267 asmz=0.118d0
268c do not crash anymore since arbitrary PDF can be added for lepton collision268c do not crash anymore since arbitrary PDF can be added for lepton collision
269269
=== modified file 'Template/LO/Source/PDF/pdg2pdf.f'
--- Template/LO/Source/PDF/pdg2pdf.f 2021-04-24 20:53:56 +0000
+++ Template/LO/Source/PDF/pdg2pdf.f 2021-11-12 09:03:34 +0000
@@ -52,12 +52,32 @@
52 data pdlabellast/2*'abcdefg'/52 data pdlabellast/2*'abcdefg'/
53 data ihlast/2*-99/53 data ihlast/2*-99/
5454
55 if (ih.eq.9) then55c effective w/z/a approximation (leading log fixed order, not resummed)
56 double precision eva_get_pdf_by_PID
57 external eva_get_pdf_by_PID
58 integer ppid
59 integer ievo,ievo_eva
60 common/to_eva/ievo_eva
61 integer hel,helMulti,hel_picked
62 double precision hel_jacobian
63 common/hel_picked/hel_picked,hel_jacobian
64 integer get_nhel
65 external get_nhel
66 real*8 pol(2),fLPol
67 common/to_polarization/pol
68
69
70c collider configuration
71 integer lpp(2)
72 double precision ebeam(2),xbk(2),q2fact(2)
73 common/to_collider/ebeam,xbk,q2fact,lpp
74
75 if (iabs(ih).eq.9) then
56 pdg2pdf = 1d076 pdg2pdf = 1d0
57 return77 return
58 endif78 endif
5979
60 nb_hadron = (nb_proton(beamid)+nb_neutron(beamid))80 nb_hadron = (nb_proton(iabs(beamid))+nb_neutron(iabs(beamid)))
61c Make sure we have a reasonable Bjorken x. Note that even though81c Make sure we have a reasonable Bjorken x. Note that even though
62c x=0 is not reasonable, we prefer to simply return pdg2pdf=082c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
63c instead of stopping the code, as this might accidentally happen.83c instead of stopping the code, as this might accidentally happen.
@@ -101,31 +121,48 @@
101 stop 1121 stop 1
102 endif122 endif
103 do i_ee = 1, n_ee123 do i_ee = 1, n_ee
104 ee_components(i_ee) = compute_eepdf(x,omx_ee(beamid),xmu,i_ee,ipart,ih_local)124 ee_components(i_ee) = compute_eepdf(x,omx_ee(iabs(beamid)),xmu,i_ee,ipart,ih_local)
105 enddo125 enddo
106 pdg2pdf = ee_components(1) ! temporary to test pdf load126 pdg2pdf = ee_components(1) ! temporary to test pdf load
107c write(*,*), x, beamid ,omx_ee(beamid),xmu,1,ipart,ih_local,pdg2pdf127c write(*,*), x, beamid ,omx_ee(iabs(beamid)),xmu,1,ipart,ih_local,pdg2pdf
108 return128 return
109 endif129 endif
110 130
111131
112 if (beamid.gt.0) then132c If group_subprocesses is true, then IH=abs(lpp) and ipdg=ipdg*sgn(lpp) in export_v4.
133c For EVA, group_subprocesses is false and IH=LPP and ipdg are passed, instead.
134c If group_subprocesses is false, the following sets ipdg=ipdg*sgn(IH) if not in EVA
135 if(pdlabel.eq.'eva'.or.pdsublabel(iabs(beamid)).eq.'eva') then
136 ipart=ipdg
137 else
113 ipart=sign(1,ih)*ipdg138 ipart=sign(1,ih)*ipdg
114 else139 endif
115 ipart = ipdg
116 endif
117140
118 if(iabs(ipart).eq.21) then141 if(iabs(ipart).eq.21) then ! g
119 ipart=0142 ipart=0
120 else if(iabs(ipart).eq.22) then143c else if(ipart.eq.12) then ! ve
121 ipart=7144c ipart=12
122 else if(iabs(ipart).eq.7) then145c else if(ipart.eq.-12) then ! ve~
123 ipart=7146c ipart=-12
124c This will be called for any PDG code, but we only support up to 7147c else if(ipart.eq.14) then ! vm
148c ipart=14
149c else if(ipart.eq.-14) then ! vm~
150c ipart=-14
151 else if(ipart.eq.24) then ! w+
152 ipart=24
153 else if(ipart.eq.-24) then ! w-
154 ipart=-24
155 else if(iabs(ipart).eq.23) then ! z
156 ipart=23
157 else if(iabs(ipart).eq.22) then ! a
158 ipart=7
159 else if(iabs(ipart).eq.7) then ! a
160 ipart=7
161c This will be called for any PDG code. We only support (for now) 0-7, and 22-24
125 else if(iabs(ipart).gt.7)then162 else if(iabs(ipart).gt.7)then
126 write(*,*) 'PDF not supported for pdg ',ipdg163 write(*,*) 'PDF not supported for pdg ',ipdg
127 write(*,*) 'For lepton colliders, please set the lpp* '//164 write(*,*) 'For lepton colliders, please set the lpp* '//
128 $ 'variables to 0 in the run_card' 165 $ 'variables to 0 in the run_card current is' , ih
129 open(unit=26,file='../../../error',status='unknown')166 open(unit=26,file='../../../error',status='unknown')
130 write(26,*) 'Error: PDF not supported for pdg ',ipdg167 write(26,*) 'Error: PDF not supported for pdg ',ipdg
131 stop 1168 stop 1
@@ -142,10 +179,10 @@
142 enddo179 enddo
143180
144c Reuse previous result, if possible181c Reuse previous result, if possible
145 if (ireuse.gt.0.)then182 if (ireuse.gt.0.and.iabs(iporg).lt.8)then
146 if (pdflast(iporg,ireuse).ne.-99d9) then183 if (pdflast(iporg,ireuse).ne.-99d9) then
147 pdg2pdf = get_ion_pdf(pdflast(-7, ireuse), iporg, nb_proton(beamid),184 pdg2pdf = get_ion_pdf(pdflast(-7, ireuse), iporg, nb_proton(iabs(beamid)),
148 $ nb_neutron(beamid))185 $ nb_neutron(iabs(beamid)))
149 return 186 return
150 endif187 endif
151 endif188 endif
@@ -186,31 +223,67 @@
186 pdlabellast(ireuse)=pdlabel223 pdlabellast(ireuse)=pdlabel
187 ihlast(ireuse)=ih224 ihlast(ireuse)=ih
188225
189 if(iabs(ipart).eq.7.and.ih.gt.1) then226 if(pdlabel.eq.'eva'.or.pdsublabel(iabs(beamid)).eq.'eva') then
190 q2max=xmu*xmu227 if(iabs(ipart).ne.7.and.
191 if(abs(ih).eq.3.or.abs(ih).eq.4) then !from the electron or muonn228c & iabs(ipart).ne.12.and.
192 pdg2pdf=epa_lepton(x,q2max, ih)229c & iabs(ipart).ne.14.and.
193 elseif(ih .eq. 2) then !from a proton without breaking230 & iabs(ipart).ne.23.and.
194 pdg2pdf=epa_proton(x,q2max,beamid)231 & iabs(ipart).ne.24 ) then
195 endif 232 write(*,*) 'ERROR: EVA PDF only supported for A/Z/W, not for pdg = ',ipart
196 pdflast(iporg,ireuse)=pdg2pdf233 stop 1
197 return234 else
235c write(*,*) 'running eva'
236 select case (iabs(ih))
237 case (0:2)
238 write(*,*) 'ERROR: EVA PDF only supported for e+/- and mu+/- beams, not for lpp/ih=',ih
239 stop 24
240 case (3) ! e+/-
241 ppid = 11
242 case (4) ! mu+/-
243 ppid = 13
244 case default
245 write(*,*) 'ERROR: EVA PDF only supported for e+/- and mu+/- beams, not for lpp/ih=',ih
246 stop 24
247 end select
248 ppid = ppid * ih/iabs(ih) ! get sign of parent
249 fLPol = pol(iabs(beamid)) ! see setrun.f for treatment of polbeam*
250 q2max = xmu*xmu
251 ievo = ievo_eva
252 hel = GET_NHEL(HEL_PICKED, beamid) ! helicity of v
253 helMulti = GET_NHEL(0, beamid) ! helicity multiplicity of v to undo spin averaging
254 pdg2pdf = helMulti*eva_get_pdf_by_PID(ipart,ppid,hel,fLpol,x,q2max,ievo)
255 return
256 endif
257 else ! this ensure backwards compatibility
258 if(iabs(ipart).eq.7.and.iabs(ih).gt.1) then
259 q2max=xmu*xmu
260 if(iabs(ih).eq.3.or.iabs(ih).eq.4) then !from the electron or muonn
261 pdg2pdf=epa_lepton(x,q2max, iabs(ih))
262 elseif(iabs(ih) .eq. 2) then !from a proton without breaking
263 pdg2pdf=epa_proton(x,q2max,beamid)
264 endif
265 pdflast(iporg,ireuse)=pdg2pdf
266 return
267 endif
198 endif268 endif
269
270
271
199 272
200 if (pdlabel(1:5) .eq. 'cteq6') then273 if (pdlabel(1:5) .eq. 'cteq6') then
201C Be carefull u and d are flipped inside cteq6274C Be carefull u and d are flipped inside cteq6
202 if (nb_proton(beamid).gt.1.or.nb_neutron(beamid).ne.0)then275 if (nb_proton(iabs(beamid)).gt.1.or.nb_neutron(iabs(beamid)).ne.0)then
203 if (ipart.eq.1.or.ipart.eq.2)then276 if (ipart.eq.1.or.ipart.eq.2)then
204 pdflast(1,ireuse)=Ctq6Pdf(2,x*nb_hadron,xmu) ! remember u/d flipping in cteq277 pdflast(1,ireuse)=Ctq6Pdf(2,x*nb_hadron,xmu) ! remember u/d flipping in cteq
205 pdflast(2,ireuse)=Ctq6Pdf(1,x*nb_hadron,xmu)278 pdflast(2,ireuse)=Ctq6Pdf(1,x*nb_hadron,xmu)
206 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(beamid), nb_neutron(beamid))279 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(iabs(beamid)), nb_neutron(iabs(beamid)))
207 else if (ipart.eq.-1.or.ipart.eq.-2)then280 else if (ipart.eq.-1.or.ipart.eq.-2)then
208 pdflast(-1,ireuse)=Ctq6Pdf(-2,x*nb_hadron,xmu) ! remember u/d flipping in cteq281 pdflast(-1,ireuse)=Ctq6Pdf(-2,x*nb_hadron,xmu) ! remember u/d flipping in cteq
209 pdflast(-2,ireuse)=Ctq6Pdf(-1,x*nb_hadron,xmu)282 pdflast(-2,ireuse)=Ctq6Pdf(-1,x*nb_hadron,xmu)
210 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(beamid), nb_neutron(beamid))283 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(iabs(beamid)), nb_neutron(iabs(beamid)))
211 else284 else
212 pdflast(ipart,ireuse)=Ctq6Pdf(ipart,x*nb_hadron,xmu)285 pdflast(ipart,ireuse)=Ctq6Pdf(ipart,x*nb_hadron,xmu)
213 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(beamid), nb_neutron(beamid))286 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(iabs(beamid)), nb_neutron(iabs(beamid)))
214 endif 287 endif
215 else288 else
216 if(iabs(ipart).ge.1.and.iabs(ipart).le.2)289 if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
@@ -219,9 +292,9 @@
219 pdflast(iporg,ireuse)=pdg2pdf292 pdflast(iporg,ireuse)=pdg2pdf
220 endif293 endif
221 else294 else
222 call pftopdg(ih,x*nb_hadron,xmu,pdflast(-7,ireuse))295 call pftopdg(iabs(ih),x*nb_hadron,xmu,pdflast(-7,ireuse))
223 pdg2pdf = get_ion_pdf(pdflast(-7, ireuse), iporg, nb_proton(beamid),296 pdg2pdf = get_ion_pdf(pdflast(-7, ireuse), iporg, nb_proton(iabs(beamid)),
224 $ nb_neutron(beamid))297 $ nb_neutron(iabs(beamid)))
225 endif 298 endif
226299
227 return300 return
228301
=== modified file 'Template/LO/Source/PDF/pdg2pdf_lhapdf6.f'
--- Template/LO/Source/PDF/pdg2pdf_lhapdf6.f 2021-07-28 14:12:54 +0000
+++ Template/LO/Source/PDF/pdg2pdf_lhapdf6.f 2021-11-12 09:03:34 +0000
@@ -34,7 +34,21 @@
34 data imemlast/20*-99/34 data imemlast/20*-99/
35 data i_replace/20/35 data i_replace/20/
3636
37 nb_hadron = (nb_proton(beamid)+nb_neutron(beamid))37c effective w/z/a approximation (leading log fixed order, not resummed)
38 double precision eva_get_pdf_by_PID
39 external eva_get_pdf_by_PID
40 integer ppid
41 integer ievo,ievo_eva
42 common/to_eva/ievo_eva
43 integer hel,helMulti,hel_picked
44 double precision hel_jacobian
45 common/hel_picked/hel_picked,hel_jacobian
46 integer get_nhel
47 external get_nhel
48 real*8 pol(2),fLPol
49 common/to_polarization/pol
50
51 nb_hadron = (nb_proton(iabs(beamid))+nb_neutron(iabs(beamid)))
38c Make sure we have a reasonable Bjorken x. Note that even though52c Make sure we have a reasonable Bjorken x. Note that even though
39c x=0 is not reasonable, we prefer to simply return pdg2pdf=053c x=0 is not reasonable, we prefer to simply return pdg2pdf=0
40c instead of stopping the code, as this might accidentally happen.54c instead of stopping the code, as this might accidentally happen.
@@ -53,21 +67,85 @@
53 endif67 endif
54 endif68 endif
5569
56 ipart=ipdg70c If group_subprocesses is true, then IH=abs(lpp) and ipdg=ipdg*sgn(lpp) in export_v4.
57 if(iabs(ipart).eq.21) then71c For EVA, group_subprocesses is false and IH=LPP and ipdg are passed, instead.
72c If group_subprocesses is false, the following sets ipdg=ipdg*sgn(IH) if not in EVA
73 if(pdsublabel(iabs(beamid)).eq.'eva') then
74 ipart=ipdg
75 else
76 ipart=ipdg*ih/iabs(ih)
77 endif
78
79 if(iabs(ipart).eq.21) then ! g
58 ipart=080 ipart=0
59 else if(iabs(ipart).eq.22) then 81c else if(ipart.eq.12) then ! ve
60 ipart=782c ipart=12
61 else if (iabs(ipart).eq.7) then83c else if(ipart.eq.-12) then ! ve~
62 ipart=784c ipart=-12
63c This will be called for any PDG code, but we only support up to 785c else if(ipart.eq.14) then ! vm
64 else if(iabs(ipart).gt.7)then86c ipart=14
65 write(*,*) 'PDF not supported for pdg ',ipdg87c else if(ipart.eq.-14) then ! vm~
66 write(*,*) 'For lepton colliders, please set the lpp* '//88c ipart=-14
67 $ 'variables to 0 in the run_card' 89 else if(ipart.eq.24) then ! w+
68 open(unit=26,file='../../../error',status='unknown')90 ipart=24
69 write(26,*) 'Error: PDF not supported for pdg ',ipdg91 else if(ipart.eq.-24) then ! w-
70 stop 192 ipart=-24
93 else if(iabs(ipart).eq.23) then ! z
94 ipart=23
95 else if(iabs(ipart).eq.22) then ! a
96 ipart=7
97 else if(iabs(ipart).eq.7) then ! a
98 ipart=7
99c This will be called for any PDG code. We only support (for now) 0-7, and 22-24
100c else if(iabs(ipart).gt.7)then
101c write(*,*) 'PDF not supported for pdg ',ipdg
102c write(*,*) 'For lepton colliders, please set the lpp* '//
103c $ 'variables to 0 in the run_card'
104c open(unit=26,file='../../../error',status='unknown')
105c write(26,*) 'Error: PDF not supported for pdg ',ipdg
106c stop 1
107 endif
108
109 if(pdsublabel(iabs(beamid)).eq.'eva') then
110 if(iabs(ipart).ne.7.and.
111c & iabs(ipart).ne.12.and.
112c & iabs(ipart).ne.14.and.
113 & iabs(ipart).ne.23.and.
114 & iabs(ipart).ne.24 ) then
115 write(*,*) 'ERROR: EVA PDF only supported for A/Z/W, not for pdg = ',ipart
116 stop 1
117 else
118c write(*,*) 'running eva'
119 select case (iabs(ih))
120 case (0:2)
121 write(*,*) 'ERROR: EVA PDF only supported for e+/- and mu+/- beams, not for lpp/ih=',ih
122 stop 24
123 case (3) ! e+/-
124 ppid = 11
125 case (4) ! mu+/-
126 ppid = 13
127 case default
128 write(*,*) 'ERROR: EVA PDF only supported for e+/- and mu+/- beams, not for lpp/ih=',ih
129 stop 24
130 end select
131 ppid = ppid * ih/iabs(ih) ! get sign of parent
132 fLPol = pol(iabs(beamid)) ! see setrun.f for treatment of polbeam*
133c q2max = xmu*xmu
134 ievo = ievo_eva
135 hel = GET_NHEL(HEL_PICKED, beamid) ! helicity of v
136 helMulti = GET_NHEL(0, beamid) ! helicity multiplicity of v to undo spin averaging
137 pdg2pdf = helMulti*eva_get_pdf_by_PID(ipart,ppid,hel,fLpol,x,xmu*xmu,ievo)
138 return
139 endif
140 else
141 if(iabs(ipart).eq.24.or.iabs(ipart).eq.23) then ! w/z
142 write(*,*) 'LHAPDF not supported for pdg ',ipdg
143 write(*,*) 'For EVA, check if pdlabel and pdsublabel* '//
144 $ 'are set correctly in the run_card'
145 open(unit=26,file='../../../error',status='unknown')
146 write(26,*) 'Error: PDF not supported for pdg ',ipdg
147 stop 1
148 endif
71 endif149 endif
72150
73 iporg=ipart151 iporg=ipart
@@ -86,6 +164,9 @@
86 ireuse = 0164 ireuse = 0
87 ii=i_replace165 ii=i_replace
88 do i=1,20166 do i=1,20
167 if (abs(ipart).gt.7)then
168 exit
169 endif
89c Check if result can be reused since any of last twenty170c Check if result can be reused since any of last twenty
90c calls. Start checking with the last call and move back in time171c calls. Start checking with the last call and move back in time
91 if (ih.eq.ihlast(ii)) then172 if (ih.eq.ihlast(ii)) then
@@ -105,9 +186,9 @@
105 enddo186 enddo
106187
107c Reuse previous result, if possible188c Reuse previous result, if possible
108 if (ireuse.gt.0) then189 if (ireuse.gt.0.and.abs(ipart).le.7) then
109 if (pdflast(ipart,ireuse).ne.-99d9) then190 if (pdflast(ipart,ireuse).ne.-99d9) then
110 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(beamid), nb_neutron(beamid))/x191 pdg2pdf = get_ion_pdf(pdflast(-7,ireuse), ipart, nb_proton(iabs(beamid)), nb_neutron(iabs(beamid)))/x
111 return 192 return
112 endif193 endif
113 endif194 endif
@@ -117,10 +198,10 @@
117198
118c Call lhapdf and give the current values to the arrays that should199c Call lhapdf and give the current values to the arrays that should
119c be saved200c be saved
120 if(ih.eq.1) then201 if(iabs(ih).eq.1) then
121 if (nb_proton(beamid).eq.1.and.nb_neutron(beamid).eq.0) then202 if (nb_proton(iabs(beamid)).eq.1.and.nb_neutron(iabs(beamid)).eq.0) then
122 call evolvepart(ipart,x,xmu,pdg2pdf)203 call evolvepart(ipart,x,xmu,pdg2pdf)
123 pdflast(ipart, i_replace)=pdg2pdf204 if (abs(ipart).le.7) pdflast(ipart, i_replace)=pdg2pdf
124 else205 else
125 if (ipart.eq.1.or.ipart.eq.2) then206 if (ipart.eq.1.or.ipart.eq.2) then
126 call evolvepart(1,x*nb_hadron207 call evolvepart(1,x*nb_hadron
@@ -136,12 +217,12 @@
136 call evolvepart(ipart,x*nb_hadron217 call evolvepart(ipart,x*nb_hadron
137 & ,xmu,pdflast(ipart, i_replace))218 & ,xmu,pdflast(ipart, i_replace))
138 endif 219 endif
139 pdg2pdf = get_ion_pdf(pdflast(-7, i_replace), ipart, nb_proton(beamid), nb_neutron(beamid))220 pdg2pdf = get_ion_pdf(pdflast(-7, i_replace), ipart, nb_proton(iabs(beamid)), nb_neutron(iabs(beamid)))
140 endif221 endif
141 pdg2pdf=pdg2pdf/x222 pdg2pdf=pdg2pdf/x
142 else if(abs(ih).eq.3.or.abs(ih).eq.4) then !from the electron223 else if(iabs(ih).eq.3.or.iabs(ih).eq.4) then !from the electron
143 pdg2pdf=epa_lepton(x,xmu*xmu, ih)224 pdg2pdf=epa_lepton(x,xmu*xmu, iabs(ih))
144 else if(ih.eq.2) then ! photon from a proton without breaking225 else if(iabs(ih).eq.2) then ! photon from a proton without breaking
145 pdg2pdf = epa_proton(x,xmu*xmu, beamid)226 pdg2pdf = epa_proton(x,xmu*xmu, beamid)
146227
147 else228 else
148229
=== modified file 'Template/LO/Source/cuts.inc'
--- Template/LO/Source/cuts.inc 2016-02-04 19:44:31 +0000
+++ Template/LO/Source/cuts.inc 2021-11-12 09:03:34 +0000
@@ -37,6 +37,7 @@
37 REAL*8 misset,missetmax,ptheavy37 REAL*8 misset,missetmax,ptheavy
38 REAL*8 ptllmin,ptllmax38 REAL*8 ptllmin,ptllmax
39 integer maxjetflavor39 integer maxjetflavor
40 REAl*8 dsqrt_shat
40 41
41 COMMON /to_min_max_cuts/42 COMMON /to_min_max_cuts/
42 & PTJmax,PTBmax,PTAmax,PTLmax,43 & PTJmax,PTBmax,PTAmax,PTLmax,
@@ -59,7 +60,7 @@
59 & ht2max,ht3max,ht4max,60 & ht2max,ht3max,ht4max,
60 & htjmin,htjmax,ihtmin,ihtmax,61 & htjmin,htjmax,ihtmin,ihtmax,
61 & misset,missetmax,ptheavy,62 & misset,missetmax,ptheavy,
62 & ptllmin,ptllmax,63 & ptllmin,ptllmax,dsqrt_shat,
63 & maxjetflavor64 & maxjetflavor
6465
65C66C
6667
=== modified file 'Template/LO/Source/dsample.f'
--- Template/LO/Source/dsample.f 2021-05-04 15:12:08 +0000
+++ Template/LO/Source/dsample.f 2021-11-12 09:03:34 +0000
@@ -1459,19 +1459,20 @@
1459 COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED1459 COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
1460 1460
1461 CHARACTER*7 PDLABEL,EPA_LABEL1461 CHARACTER*7 PDLABEL,EPA_LABEL
1462 character*7 pdsublabel(2)
1462 INTEGER LHAID1463 INTEGER LHAID
1463 COMMON/TO_PDF/LHAID,PDLABEL,EPA_LABEL1464 COMMON/TO_PDF/LHAID,PDLABEL,EPA_LABEL,pdsublabel
1464c 1465c
1465c Begin code1466c Begin code
1466c1467c
1467c It is important to divide the wgt stored in the grid by the 1468c It is important to divide the wgt stored in the grid by the
1468c corresponding jacobian otherwise it flattens the sampled1469c corresponding jacobian otherwise it flattens the sampled
1469c distribution.1470c distribution.
1470C Also, if HEL_PICKED is equal to -1, it means that MadEvent1471C Also, if HEL_PICKED is greater than 0, it means that MadEvent
1471C is in the initialization stage where all helicity were probed1472C is in the initialization stage where all helicity were probed
1472c and added individually to the grid directly by matrix<i>.f so1473c and added individually to the grid directly by matrix<i>.f so
1473c that they shouldn't be added here.1474c that they shouldn't be added here.
1474 if(ISUM_HEL.ne.0.and.HEL_PICKED.ne.-1.and.1475 if(ISUM_HEL.ne.0.and.HEL_PICKED.gt.0.and.
1475 & (.NOT.CUTSDONE.or.CUTSPASSED)) then1476 & (.NOT.CUTSDONE.or.CUTSPASSED)) then
1476 call DS_add_entry('Helicity',HEL_PICKED,(wgt/hel_jacobian))1477 call DS_add_entry('Helicity',HEL_PICKED,(wgt/hel_jacobian))
1477 endif1478 endif
14781479
=== removed file 'Template/LO/Source/pdf.inc'
=== modified file 'Template/LO/Source/readgrid.f'
--- Template/LO/Source/readgrid.f 2012-03-22 06:16:35 +0000
+++ Template/LO/Source/readgrid.f 2021-11-12 09:03:34 +0000
@@ -4,7 +4,7 @@
44
5c...global variables5c...global variables
6 include 'sudgrid.inc'6 include 'sudgrid.inc'
7 include 'pdf.inc'7 include 'PDF/pdf.inc'
8 include 'maxparticles.inc'8 include 'maxparticles.inc'
9 include 'run.inc'9 include 'run.inc'
1010
1111
=== modified file 'Template/LO/Source/run.inc'
--- Template/LO/Source/run.inc 2021-07-27 15:27:29 +0000
+++ Template/LO/Source/run.inc 2021-11-12 09:03:34 +0000
@@ -6,10 +6,11 @@
6c6c
7 real*8 scale,scalefact,alpsfact7 real*8 scale,scalefact,alpsfact
8 logical fixed_ren_scale,fixed_fac_scale1,fixed_fac_scale2,fixed_couplings,hmult8 logical fixed_ren_scale,fixed_fac_scale1,fixed_fac_scale2,fixed_couplings,hmult
9 integer ickkw,nhmult,asrwgtflavor, dynamical_scale_choice9 integer ickkw,nhmult,asrwgtflavor,dynamical_scale_choice,ievo_eva
10 common/to_scale/scale,scalefact,alpsfact,fixed_ren_scale,fixed_fac_scale1,fixed_fac_scale2,10 common/to_scale/scale,scalefact,alpsfact,fixed_ren_scale,fixed_fac_scale1,fixed_fac_scale2,
11 $ fixed_couplings,ickkw,nhmult,hmult,asrwgtflavor,11 $ fixed_couplings,ickkw,nhmult,hmult,asrwgtflavor,
12 $ dynamical_scale_choice12 $ dynamical_scale_choice
13 common/to_eva/ievo_eva
13c14c
14c Collider15c Collider
15c16c
1617
=== modified file 'Template/LO/Source/setrun.f'
--- Template/LO/Source/setrun.f 2021-04-24 20:53:56 +0000
+++ Template/LO/Source/setrun.f 2021-11-12 09:03:34 +0000
@@ -106,6 +106,22 @@
106 $ sign((abs(pol(1))-1)*100,pol(1)),106 $ sign((abs(pol(1))-1)*100,pol(1)),
107 $ sign((abs(pol(2))-1)*100,pol(2))107 $ sign((abs(pol(2))-1)*100,pol(2))
108108
109
110 if(pdlabel.eq.'eva') then
111 ! pbX=-100 (pure LH beam) => fLpol=1.0 (in eva)
112 ! pbX=0 (RH + LH beam) => fLpol=0.5 (in eva)
113 ! pbX=+100 (pure RH beam) => fLpol=0.0 (in eva)
114 pol(1) = (-1d0/200d0)*pb1 + 0.5d0
115 pol(2) = (-1d0/200d0)*pb2 + 0.5d0
116 else
117 if(pdsublabel(1).eq.'eva') then
118 pol(1) = (-1d0/200d0)*pb1 + 0.5d0
119 endif
120 if(pdsublabel(2).eq.'eva') then
121 pol(2) = (-1d0/200d0)*pb2 + 0.5d0
122 endif
123 endif
124
109c !!! Default behavior changed (MH, Aug. 07) !!!125c !!! Default behavior changed (MH, Aug. 07) !!!
110c If no pdf, read the param_card and use the value from there and126c If no pdf, read the param_card and use the value from there and
111c order of alfas running = 2127c order of alfas running = 2
@@ -132,10 +148,10 @@
132c In principle this should be always the case since the148c In principle this should be always the case since the
133c banner.py is expected to correct such wrong run_card.149c banner.py is expected to correct such wrong run_card.
134 if(use_syst)then150 if(use_syst)then
135 if(scalefact.ne.1)then151c if(scalefact.ne.1)then
136 write(*,*) 'Warning: use_syst=T, setting scalefact to 1'152c write(*,*) 'Warning: use_syst=T, setting scalefact to 1'
137 scalefact=1153c scalefact=1
138 endif154c endif
139 if(alpsfact.ne.1)then155 if(alpsfact.ne.1)then
140 write(*,*) 'Warning: use_syst=T, setting alpsfact to 1'156 write(*,*) 'Warning: use_syst=T, setting alpsfact to 1'
141 alpsfact=1157 alpsfact=1
@@ -152,6 +168,10 @@
152 idbmup(i)=11168 idbmup(i)=11
153 elseif(lpp(i).eq.-3) then169 elseif(lpp(i).eq.-3) then
154 idbmup(i)=-11170 idbmup(i)=-11
171 elseif(lpp(i).eq.4) then
172 idbmup(i)=13
173 elseif(lpp(i).eq.-4) then
174 idbmup(i)=-13
155 elseif(lpp(i).eq.0) then175 elseif(lpp(i).eq.0) then
156 idbmup(i)=idup(i,1,1)176 idbmup(i)=idup(i,1,1)
157 else177 else
@@ -179,10 +199,12 @@
179 integer mpdf199 integer mpdf
180 integer npdfs,i,pdfgup(2),pdfsup(2),lhaid200 integer npdfs,i,pdfgup(2),pdfsup(2),lhaid
181201
182 parameter (npdfs=17)202 parameter (npdfs=19)
183 character*7 pdflabs(npdfs)203 character*7 pdflabs(npdfs)
184 data pdflabs/204 data pdflabs/
185 $ 'none',205 $ 'none',
206 $ 'eva',
207 $ 'iww',
186 $ 'dressed', 208 $ 'dressed',
187 $ 'mrs02nl',209 $ 'mrs02nl',
188 $ 'mrs02nn',210 $ 'mrs02nn',
@@ -201,8 +223,10 @@
201 $ 'nn23nlo'/223 $ 'nn23nlo'/
202 integer numspdf(npdfs)224 integer numspdf(npdfs)
203 data numspdf/225 data numspdf/
204 $ 00000,226 $ 00000,
205 $ 00000, 227 $ 00000,
228 $ 00000,
229 $ 00000,
206 $ 20250,230 $ 20250,
207 $ 20270,231 $ 20270,
208 $ 19150,232 $ 19150,
209233
=== modified file 'Template/LO/SubProcesses/cuts.f'
--- Template/LO/SubProcesses/cuts.f 2021-07-27 15:27:29 +0000
+++ Template/LO/SubProcesses/cuts.f 2021-11-12 09:03:34 +0000
@@ -299,11 +299,12 @@
299c299c
300c Limit S_hat300c Limit S_hat
301c301c
302c if (x1*x2*stot .gt. 500**2) then302 if (dsqrt_shat.ne.0d0)then
303c passcuts=.false.303 if (nincoming.eq.2.and.sumdot(p(0,1),p(0,2),1d0) .lt. dsqrt_shat**2) then
304c return304 passcuts=.false.
305c endif305 return
306306 endif
307 endif
307C $B$ DESACTIVATE_CUT $E$ !This is a tag for MadWeight308C $B$ DESACTIVATE_CUT $E$ !This is a tag for MadWeight
308309
309 if(debug) write (*,*) '============================='310 if(debug) write (*,*) '============================='
310311
=== modified file 'Template/LO/SubProcesses/genps.f'
--- Template/LO/SubProcesses/genps.f 2021-07-28 14:12:54 +0000
+++ Template/LO/SubProcesses/genps.f 2021-11-12 09:03:34 +0000
@@ -147,7 +147,8 @@
147C Common blocks147C Common blocks
148 CHARACTER*7 PDLABEL,EPA_LABEL148 CHARACTER*7 PDLABEL,EPA_LABEL
149 INTEGER LHAID149 INTEGER LHAID
150 COMMON/TO_PDF/LHAID,PDLABEL,EPA_LABEL150 character*7 pdsublabel(2)
151 COMMON/TO_PDF/LHAID,PDLABEL,EPA_LABEL, pdsublabel
151152
152 153
153 integer lwgt(0:maxconfigs,maxinvar)154 integer lwgt(0:maxconfigs,maxinvar)
154155
=== modified file 'Template/LO/SubProcesses/setcuts.f'
--- Template/LO/SubProcesses/setcuts.f 2021-07-27 15:27:29 +0000
+++ Template/LO/SubProcesses/setcuts.f 2021-11-12 09:03:34 +0000
@@ -679,7 +679,7 @@
679 do i=nincoming+1, nexternal679 do i=nincoming+1, nexternal
680 smin_p = smin_p + pmass(i)680 smin_p = smin_p + pmass(i)
681 enddo681 enddo
682 smin = max(smin, smin_p**2)682 smin = max(smin, smin_p**2, dsqrt_shat**2)
683 write(*,*) "Define smin to", smin683 write(*,*) "Define smin to", smin
684684
685c Check that results are consistent among all the grouped subprocesses685c Check that results are consistent among all the grouped subprocesses
686686
=== modified file 'Template/LO/SubProcesses/unwgt.f'
--- Template/LO/SubProcesses/unwgt.f 2021-03-13 10:03:56 +0000
+++ Template/LO/SubProcesses/unwgt.f 2021-11-12 09:03:34 +0000
@@ -724,7 +724,7 @@
724 beam_number =2724 beam_number =2
725 endif725 endif
726 726
727 if(n_pdfrw(1).gt.0.and.abs(lpp(1)).eq.1)then727 if(n_pdfrw(1).gt.0.and.abs(lpp(1)).ne.2)then
728 if(2*n_pdfrw(1).lt.10) then728 if(2*n_pdfrw(1).lt.10) then
729 write(cfmt,'(a,I1,a,I1,a)') '(a,I1,a,I3,',729 write(cfmt,'(a,I1,a,I1,a)') '(a,I1,a,I3,',
730 $ n_pdfrw(1),'I9,',2*n_pdfrw(1),'E15.8,a)'730 $ n_pdfrw(1),'I9,',2*n_pdfrw(1),'E15.8,a)'
@@ -746,7 +746,7 @@
746 if (flip) then746 if (flip) then
747 beam_number = 1747 beam_number = 1
748 endif748 endif
749 if(n_pdfrw(2).gt.0.and.abs(lpp(2)).eq.1)then749 if(n_pdfrw(2).gt.0.and.abs(lpp(2)).ne.2)then
750 if(2*n_pdfrw(2).lt.10) then750 if(2*n_pdfrw(2).lt.10) then
751 write(cfmt,'(a,I1,a,I1,a)') '(a,I1,a,I3,',751 write(cfmt,'(a,I1,a,I1,a)') '(a,I1,a,I3,',
752 $ n_pdfrw(2),'I9,',2*n_pdfrw(2),'E15.8,a)'752 $ n_pdfrw(2),'I9,',2*n_pdfrw(2),'E15.8,a)'
753753
=== modified file 'Template/MadWeight/Cards/run_card.dat'
--- Template/MadWeight/Cards/run_card.dat 2015-04-05 23:18:48 +0000
+++ Template/MadWeight/Cards/run_card.dat 2021-11-12 09:03:34 +0000
@@ -23,8 +23,9 @@
23 %(iseed)s = iseed ! rnd seed (0=assigned automatically=default))23 %(iseed)s = iseed ! rnd seed (0=assigned automatically=default))
24#*********************************************************************24#*********************************************************************
25# Collider type and energy *25# Collider type and energy *
26# lpp: 0=No PDF, 1=proton, -1=antiproton, 2=photon from proton, *26# lpp: 0=No PDF, 1=proton, -1=antiproton, 2=elastic photon of proton,*
27# 3=photon from electron *27# +/-3=PDF of electron/positron beam *
28# +/-4=PDF of muon/antimuon beam *
28#*********************************************************************29#*********************************************************************
29 %(lpp1)s = lpp1 ! beam 1 type 30 %(lpp1)s = lpp1 ! beam 1 type
30 %(lpp2)s = lpp2 ! beam 2 type31 %(lpp2)s = lpp2 ! beam 2 type
3132
=== modified file 'Template/MadWeight/src/setrun.f'
--- Template/MadWeight/src/setrun.f 2021-08-20 19:53:32 +0000
+++ Template/MadWeight/src/setrun.f 2021-11-12 09:03:34 +0000
@@ -537,3 +537,11 @@
537537
538 return538 return
539 end539 end
540
541 INTEGER FUNCTION GET_NHEL(HEL, IPART)
542 implicit none
543 integer hel
544 integer ipart
545 get_nhel = 99
546 return
547 end
540548
=== modified file 'Template/NLO/Cards/run_card.dat'
--- Template/NLO/Cards/run_card.dat 2021-04-05 16:07:15 +0000
+++ Template/NLO/Cards/run_card.dat 2021-11-12 09:03:34 +0000
@@ -129,7 +129,10 @@
129 %(bwcutoff)s = bwcutoff129 %(bwcutoff)s = bwcutoff
130#***********************************************************************130#***********************************************************************
131# Cuts on the jets. Jet clustering is performed by FastJet. *131# Cuts on the jets. Jet clustering is performed by FastJet. *
132# - If gamma_is_j, photons are also clustered *132# - If gamma_is_j, photons are also clustered with jets. *
133# Otherwise, they will be treated as tagged particles and photon *
134# isolation will be applied. Note that photons in the real emission *
135# will always be clustered with QCD partons. *
133# - When matching to a parton shower, these generation cuts should be *136# - When matching to a parton shower, these generation cuts should be *
134# considerably softer than the analysis cuts. *137# considerably softer than the analysis cuts. *
135# - More specific cuts can be specified in SubProcesses/cuts.f *138# - More specific cuts can be specified in SubProcesses/cuts.f *
136139
=== modified file 'Template/NLO/FixedOrderAnalysis/analysis_HwU_general.f'
--- Template/NLO/FixedOrderAnalysis/analysis_HwU_general.f 2018-10-26 09:55:25 +0000
+++ Template/NLO/FixedOrderAnalysis/analysis_HwU_general.f 2021-11-12 09:03:34 +0000
@@ -5,8 +5,12 @@
5 integer nwgt5 integer nwgt
6 character*(*) weights_info(*)6 character*(*) weights_info(*)
7 integer i,l7 integer i,l
8 character*6 cc(2)8c character*6 cc(2)
9 data cc/'|T@NLO','|T@LO '/9c data cc/'|T@NLO','|T@LO '/
10 character*13 cc(9)
11 data cc/ ' |T@NLO ',' |T@LO ',' |T@LO1 '
12 $ ,' |T@LO2 ',' |T@LO3 ',' |T@NLO1 '
13 $ ,' |T@NLO2 ',' |T@NLO3 ',' |T@NLO4 '/
1014
11c Also specific perturbative orders can be directly plotted, adding for examples15c Also specific perturbative orders can be directly plotted, adding for examples
12c the following further entries in the variable data16c the following further entries in the variable data
@@ -18,8 +22,8 @@
18c 22c
19c See also line 376 in this file 23c See also line 376 in this file
20 call HwU_inithist(nwgt,weights_info)24 call HwU_inithist(nwgt,weights_info)
21 do i=1,225 do i=1,9
22 l=(i-1)*5526 l=(i-1)*59
23c transverse momenta27c transverse momenta
24 call HwU_book(l+ 1,'total rate '//cc(i),1,0.5d0,1.5d0)28 call HwU_book(l+ 1,'total rate '//cc(i),1,0.5d0,1.5d0)
25 call HwU_book(l+ 2,'1st charged lepton log pT '//cc(i),25,-0.2d0,3.8d0)29 call HwU_book(l+ 2,'1st charged lepton log pT '//cc(i),25,-0.2d0,3.8d0)
@@ -76,6 +80,14 @@
76c HT80c HT
77 call HwU_book(l+54,'log HT (partons) '//cc(i),25,-0.2d0,3.8d0)81 call HwU_book(l+54,'log HT (partons) '//cc(i),25,-0.2d0,3.8d0)
78 call HwU_book(l+55,'log HT (reconstructed) '//cc(i),25,-0.2d0,3.8d0)82 call HwU_book(l+55,'log HT (reconstructed) '//cc(i),25,-0.2d0,3.8d0)
83
84
85 call HwU_book(l+56,'1st isolated ph log pT '//cc(i),25,-0.2d0,3.8d0)
86 call HwU_book(l+57,'2nd isolated ph log pT '//cc(i),25,-0.2d0,3.8d0)
87 call HwU_book(l+58,'3rd isolated ph log pT '//cc(i),25,-0.2d0,3.8d0)
88
89 call HwU_book(l+59,'3 isolated ph log M '//cc(i),25,-0.2d0,3.8d0)
90
79 enddo91 enddo
80 return92 return
81 end93 end
@@ -110,7 +122,7 @@
110 $ ,ptmpmm,ptepve,ptmmvm,ptepemmpmm,ptepvemmvm,ptt,ptat,pttt122 $ ,ptmpmm,ptepve,ptmmvm,ptepemmpmm,ptepvemmvm,ptt,ptat,pttt
111 $ ,etmiss,pth(2),pthh,ptv(3),ptjet(3),Mepem,Mmpmm,Mepve,Mmmvm123 $ ,etmiss,pth(2),pthh,ptv(3),ptjet(3),Mepem,Mmpmm,Mepve,Mmmvm
112 $ ,Mepemmpmm,Mepvemmvm,Mtt,Mhh,Mj1j2,Mj1j3,Mj2j3,Mj1j2j3,Mvvv124 $ ,Mepemmpmm,Mepvemmvm,Mtt,Mhh,Mj1j2,Mj1j3,Mj2j3,Mj1j2j3,Mvvv
113 $ ,HTparton,HTreco,p_reco(0:4,nexternal)125 $ ,HTparton,HTreco,p_reco(0:4,nexternal),ptphiso(nexternal),Mphphph
114 integer nQCD,jet(nexternal),njet,itop,iatop,iem,iep,imp,imm,ive126 integer nQCD,jet(nexternal),njet,itop,iatop,iem,iep,imp,imm,ive
115 $ ,ivm,iv1,iv2,iv3,ih1,ih2,il,ipdg_reco(nexternal)127 $ ,ivm,iv1,iv2,iv3,ih1,ih2,il,ipdg_reco(nexternal)
116 double precision getptv4,getptv4_2,getptv4_4,getinvm4_2128 double precision getptv4,getptv4_2,getptv4_4,getinvm4_2
@@ -119,25 +131,47 @@
119 $ ,getinvm4_4,l10131 $ ,getinvm4_4,l10
120 integer orders_tag_plot132 integer orders_tag_plot
121 common /corderstagplot/ orders_tag_plot133 common /corderstagplot/ orders_tag_plot
134
135
136c Photon isolation
137 integer nph,nem,nin,nphiso
138 double precision ptg,chi_gamma_iso,iso_getdrv40
139 double precision Etsum(0:nexternal)
140 real drlist(nexternal)
141 double precision pgamma(0:3,nexternal),pgammaiso(0:3,nexternal),pem(0:3,nexternal)
142 logical alliso,isolated
143c Sort array of results: ismode>0 for real, isway=0 for ascending order
144 integer ismode,isway,izero,isorted(nexternal)
145 parameter (ismode=1)
146 parameter (isway=0)
147 parameter (izero=0)
148 integer get_n_tagged_photons
149
150
151 logical is_a_lp(nexternal),is_a_lm(nexternal),is_a_j(nexternal)
152 $ ,is_a_ph(nexternal)
153 REAL*8 pt,eta
154 external pt,eta,chi_gamma_iso,sortzv
155c integer iph1,iph2,iph3
122c First, try to recombine photons with leptons 156c First, try to recombine photons with leptons
123 if (.not.quarkphreco) then157c if (.not.quarkphreco) then
124 write (*,*) 'quark-photon recombination is turned off. '/158c write (*,*) 'quark-photon recombination is turned off. '/
125 $ /'Do need it'159c $ /'Do need it'
126 stop160c stop
127 endif161c endif
128 if (.not. lepphreco) then162c if (.not. lepphreco) then
129 write (*,*) 'lepton-photon recombination is turned off. '163c write (*,*) 'lepton-photon recombination is turned off. '
130 $ //'Do need it.'164c $ //'Do need it.'
131 stop165c stop
132 endif166c endif
133 call recombine_momenta(rphreco, etaphreco, lepphreco, quarkphreco,167 call recombine_momenta(rphreco, etaphreco, lepphreco, quarkphreco,
134 $ p, iPDG, p_reco, iPDG_reco)168 $ p, iPDG, p_reco, iPDG_reco)
135169
136c Put all (light) QCD partons(+photon) in momentum array for jet clustering.170c Put all (light) QCD partons(+photon) in momentum array for jet clustering.
137 nQCD=0171 nQCD=0
138 do j=nincoming+1,nexternal172 do j=nincoming+1,nexternal
139 if (abs(ipdg_reco(j)).le.5 .or. ipdg_reco(j).eq.21 .or.173 if (abs(ipdg_reco(j)).le.5 .or. ipdg_reco(j).eq.21
140 $ ipdg_reco(j).eq.22)then174 $ .or. (ipdg_reco(j).eq.22.and.gamma_is_j)) then
141 nQCD=nQCD+1175 nQCD=nQCD+1
142 do i=0,3176 do i=0,3
143 pQCD(i,nQCD)=p_reco(i,j)177 pQCD(i,nQCD)=p_reco(i,j)
@@ -173,6 +207,161 @@
173c207c
174c******************************************************************************208c******************************************************************************
175209
210
211c PHOTON (ISOLATION) CUTS
212c
213c find the photons
214 do i=1,nexternal
215 if (istatus(i).eq.1 .and. ipdg(i).eq.22 .and. .not.gamma_is_j) then
216 is_a_ph(i)=.true.
217 else
218 is_a_ph(i)=.false.
219 endif
220 enddo
221 if (ptgmin.ne.0d0) then
222 nph=0
223 do j=nincoming+1,nexternal
224 if (is_a_ph(j)) then
225 nph=nph+1
226 do i=0,3
227 pgamma(i,nph)=p(i,j)
228 enddo
229 endif
230 enddo
231 if(nph.eq.0)goto 444
232c write(*,*) 'ERROR in cuts.f: photon isolation is not working'
233c $ // ' for mixed QED-QCD corrections'
234c stop 1
235
236 if(isoEM)then
237 nem=nph
238 do k=1,nem
239 do i=0,3
240 pem(i,k)=pgamma(i,k)
241 enddo
242 enddo
243 do j=nincoming+1,nexternal
244 if (is_a_lp(j).or.is_a_lm(j)) then
245 nem=nem+1
246 do i=0,3
247 pem(i,nem)=p(i,j)
248 enddo
249 endif
250 enddo
251 endif
252
253c alliso=.true.
254 nphiso=0
255
256 j=0
257c do while(j.lt.nph.and.alliso)
258 do while(j.lt.nph)
259
260c Loop over all photons
261 j=j+1
262
263 ptg=pt(pgamma(0,j))
264 if(ptg.lt.ptgmin)then
265 cycle
266c return
267 endif
268 if (etagamma.gt.0d0) then
269 if (abs(eta(pgamma(0,j))).gt.etagamma) then
270 cycle
271c return
272 endif
273 endif
274
275c Isolate from hadronic energy
276 do i=1,nQCD
277 drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pQCD(0,i)))
278 enddo
279 call sortzv(drlist,isorted,nQCD,ismode,isway,izero)
280 Etsum(0)=0.d0
281 nin=0
282 do i=1,nQCD
283 if(dble(drlist(isorted(i))).le.R0gamma)then
284 nin=nin+1
285 Etsum(nin)=Etsum(nin-1)+pt(pQCD(0,isorted(i)))
286 endif
287 enddo
288 isolated=.True.
289 do i=1,nin
290c alliso=alliso .and.
291c $ Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
292c $ R0gamma,xn,epsgamma,ptg)
293 if(Etsum(i).gt.chi_gamma_iso(dble(drlist(isorted(i))),
294 $ R0gamma,xn,epsgamma,ptg)) then
295 isolated=isolated.and..False.
296 endif
297 enddo
298 if(.not.isolated)cycle
299
300c Isolate from EM energy
301 if(isoEM.and.nem.gt.1)then
302 do i=1,nem
303 drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pem(0,i)))
304 enddo
305 call sortzv(drlist,isorted,nem,ismode,isway,izero)
306c First of list must be the photon: check this, and drop it
307 if(isorted(1).ne.j.or.drlist(isorted(1)).gt.1.e-4)then
308 write(*,*)'Error #1 in photon isolation'
309 write(*,*)j,isorted(1),drlist(isorted(1))
310 stop
311 endif
312 Etsum(0)=0.d0
313 nin=0
314 do i=2,nem
315 if(dble(drlist(isorted(i))).le.R0gamma)then
316 nin=nin+1
317 Etsum(nin)=Etsum(nin-1)+pt(pem(0,isorted(i)))
318 endif
319 enddo
320 isolated=.True.
321 do i=1,nin
322c alliso=alliso .and.
323c $ Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
324c $ R0gamma,xn,epsgamma,ptg)
325 if(Etsum(i).gt.chi_gamma_iso(dble(drlist(isorted(i))),
326 $ R0gamma,xn,epsgamma,ptg)) then
327 isolated=isolated.and..False.
328 endif
329 enddo
330 if(.not.isolated)cycle
331 endif
332c End of loop over photons
333
334 nphiso=nphiso+1
335
336 do i=0,3
337 pgammaiso(i,nphiso)=pgamma(i,j)
338 enddo
339
340
341 enddo
342 if(nphiso.lt.get_n_tagged_photons())then
343 print*,"mismatch with cuts.f"
344 stop
345 endif
346
347
348444 continue
349c End photon isolation
350 endif
351
352
353
354
355
356
357
358
359
360
361
362
363
364
176c Look for the other physics objects365c Look for the other physics objects
177 itop=0366 itop=0
178 iatop=0367 iatop=0
@@ -189,7 +378,14 @@
189 iv3=0378 iv3=0
190 ih1=0379 ih1=0
191 ih2=0380 ih2=0
381c iph1=0
382c iph2=0
383c iph3=0
384c print*,"nell'analisi"
192 do i=1,nexternal385 do i=1,nexternal
386c print*,"idpg di ",i,"=",ipdg(i)
387c print*,"idpg_reco di ",i,"=",ipdg_reco(i)
388
193 if (ipdg_reco(i).eq.6) then389 if (ipdg_reco(i).eq.6) then
194 itop=i390 itop=i
195 elseif(ipdg_reco(i).eq.-6) then391 elseif(ipdg_reco(i).eq.-6) then
@@ -232,8 +428,27 @@
232 stop428 stop
233 endif429 endif
234 endif430 endif
431c elseif(abs(ipdg_reco(i)).eq.22.and.i.gt.nincoming) then
432c if (iph1.eq.0) then
433c iph1=i
434c else
435c if (iph2.eq.0) then
436c iph2=i
437c else
438c if (iph3.eq.0) then
439c iph3=i
440c else
441c write (*,*) 'too many photonss'
442c stop
443c endif
444c endif
445c endif
235 endif446 endif
447
236 enddo448 enddo
449c print*,itop,iatop
450c stop
451
237 if (itop.ne.0) ptt=getptv4(p_reco(0,itop))452 if (itop.ne.0) ptt=getptv4(p_reco(0,itop))
238 if (iatop.ne.0) ptat=getptv4(p_reco(0,iatop))453 if (iatop.ne.0) ptat=getptv4(p_reco(0,iatop))
239 if (itop.ne.0 .and. iatop.ne.0) then454 if (itop.ne.0 .and. iatop.ne.0) then
@@ -318,11 +533,21 @@
318 pth(2)=tmp533 pth(2)=tmp
319 endif534 endif
320 endif535 endif
536
537
321 if (iv1.ne.0) ptv(1)=getptv4(p_reco(0,iv1))538 if (iv1.ne.0) ptv(1)=getptv4(p_reco(0,iv1))
322 if (iv2.ne.0) ptv(2)=getptv4(p_reco(0,iv2))539 if (iv2.ne.0) ptv(2)=getptv4(p_reco(0,iv2))
323 if (iv3.ne.0) ptv(3)=getptv4(p_reco(0,iv3))540 if (iv3.ne.0) ptv(3)=getptv4(p_reco(0,iv3))
324 if (iv1.ne.0 .and. iv2.ne.0 .and. iv3.ne.0) then541 if (iv1.ne.0 .and. iv2.ne.0 .and. iv3.ne.0) then
325 Mvvv=getinvm4_3(p_reco(0,iv1),p_reco(0,iv2),p_reco(0,iv3))542 Mvvv=getinvm4_3(p_reco(0,iv1),p_reco(0,iv2),p_reco(0,iv3))
543 endif
544
545 do i=1,nphiso
546 ptphiso(i)=getptv4(pgammaiso(0,i))
547 enddo
548
549 if (iv1.ne.0 .and. iv2.ne.0 .and. iv3.ne.0) then
550 Mvvv=getinvm4_3(p_reco(0,iv1),p_reco(0,iv2),p_reco(0,iv3))
326c order the vector bosons (if there are 3)551c order the vector bosons (if there are 3)
327 do i=1,2552 do i=1,2
328 do j=1,3-i553 do j=1,3-i
@@ -341,6 +566,31 @@
341 ptv(2)=tmp566 ptv(2)=tmp
342 endif567 endif
343 endif568 endif
569
570
571
572
573 if (nphiso.eq.3) then
574 Mphphph=getinvm4_3(pgammaiso(0,1),pgammaiso(0,2),pgammaiso(0,3))
575c order the isolated photons (if there are 3)
576 do i=1,2
577 do j=1,3-i
578 if (ptphiso(j).lt.ptphiso(j+1)) then
579 tmp=ptphiso(j)
580 ptphiso(j)=ptphiso(j+1)
581 ptphiso(j+1)=tmp
582 endif
583 enddo
584 enddo
585 elseif (nphiso.eq.2) then
586c order the isolated photons (if there are 2)
587 if (ptphiso(1).lt.ptphiso(2)) then
588 tmp=ptphiso(1)
589 ptphiso(1)=ptphiso(2)
590 ptphiso(2)=tmp
591 endif
592 endif
593
344 do i=1,njet594 do i=1,njet
345 ptjet(i)=getptv4(pjet(0,i))595 ptjet(i)=getptv4(pjet(0,i))
346 enddo596 enddo
@@ -369,9 +619,18 @@
369 enddo619 enddo
370 if (ive.ne.0 .or. ivm.ne.0) HTreco=HTreco+etmiss620 if (ive.ne.0 .or. ivm.ne.0) HTreco=HTreco+etmiss
371 621
372 do i=1,2622 do i=1,9
373 l=(i-1)*55623 l=(i-1)*59
374 if (ibody.ne.3 .and.i.eq.2) cycle624 if (ibody.ne.3 .and.i.eq.2) cycle
625 if (i.eq. 3.and.orders_tag_plot.ne.204) cycle
626 if (i.eq. 4.and.orders_tag_plot.ne.402) cycle
627 if (i.eq. 5.and.orders_tag_plot.ne.600) cycle
628 if (i.eq. 6.and.orders_tag_plot.ne.206) cycle
629 if (i.eq. 7.and.orders_tag_plot.ne.404) cycle
630 if (i.eq. 8.and.orders_tag_plot.ne.602) cycle
631 if (i.eq. 9.and.orders_tag_plot.ne.800) cycle
632
633
375634
376c How to tag orders (QCD+QED*100)635c How to tag orders (QCD+QED*100)
377c636c
@@ -493,6 +752,18 @@
493c HT752c HT
494 call HwU_fill(l+54,l10(HTparton),wgts)753 call HwU_fill(l+54,l10(HTparton),wgts)
495 call HwU_fill(l+55,l10(HTreco),wgts)754 call HwU_fill(l+55,l10(HTreco),wgts)
755
756 if (nphiso.ge.1) call HwU_fill(l+56,l10(ptphiso(1)),wgts)
757 if (nphiso.ge.2) call HwU_fill(l+57,l10(ptphiso(2)),wgts)
758 if (nphiso.ge.3) call HwU_fill(l+58,l10(ptphiso(3)),wgts)
759
760 if (nphiso.ge.3) call HwU_fill(l+59,l10(Mphphph),wgts)
761
762
763
764
765
766
496 enddo767 enddo
497768
498 999 return 769 999 return
499770
=== added file 'Template/NLO/MCatNLO/Scripts/JetMatching.h'
--- Template/NLO/MCatNLO/Scripts/JetMatching.h 1970-01-01 00:00:00 +0000
+++ Template/NLO/MCatNLO/Scripts/JetMatching.h 2021-11-12 09:03:34 +0000
@@ -0,0 +1,2105 @@
1// JetMatching.h is a part of the PYTHIA event generator.
2// Copyright (C) 2021 Torbjorn Sjostrand.
3// PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4// Please respect the MCnet Guidelines, see GUIDELINES for details.
5
6// Authors: Richard Corke (implementation of MLM matching as
7// in Alpgen for Alpgen input)
8// and Stephen Mrenna (implementation of MLM-style matching as
9// in Madgraph for Alpgen or Madgraph 5 input.)
10// and Simon de Visscher, Stefan Prestel (implementation of shower-kT
11// MLM-style matching and flavour treatment for Madgraph input)
12// and Stefan Prestel (FxFx NLO jet matching with aMC@NLO.)
13// This file provides the classes to perform MLM matching of
14// Alpgen or MadGraph 5 input.
15// Example usage is shown in main32.cc, and further details
16// can be found in the 'Jet Matching Style' manual page.
17
18#ifndef Pythia8_JetMatching_H
19#define Pythia8_JetMatching_H
20
21// Includes
22#include "Pythia8/Pythia.h"
23#include "Pythia8Plugins/GeneratorInput.h"
24
25namespace Pythia8 {
26
27//==========================================================================
28
29class HJSlowJet: public SlowJet {
30
31 public:
32
33 HJSlowJet(int powerIn, double Rin, double pTjetMinIn = 0.,
34 double etaMaxIn = 25., int selectIn = 1, int massSetIn = 2,
35 SlowJetHook* sjHookPtrIn = 0, bool useFJcoreIn = false,
36 bool useStandardRin = true) :
37 SlowJet(powerIn, Rin, pTjetMinIn, etaMaxIn, selectIn, massSetIn,
38 sjHookPtrIn, useFJcoreIn, useStandardRin) {}
39
40 // Note: The functions below have been made public to ease the generation
41 // of Python bindings.
42 //protected:
43
44 void findNext();
45
46};
47
48//--------------------------------------------------------------------------
49
50// Find next cluster pair to join.
51
52void HJSlowJet::findNext() {
53
54 // Find smallest of diB, dij.
55 if (clSize > 0) {
56 iMin = 0;
57 jMin = -1;
58 dMin = 1.0/TINY;
59 // Remove the possibility of choosing a beam clustering
60 for (int i = 1; i < clSize; ++i) {
61 for (int j = 0; j < i; ++j) {
62 if (dij[i*(i-1)/2 + j] < dMin) {
63 iMin = i;
64 jMin = j;
65 dMin = dij[i*(i-1)/2 + j];
66 }
67 }
68 }
69
70 // If no clusters left then instead default values.
71 } else {
72 iMin = -1;
73 jMin = -1;
74 dMin = 0.;
75 }
76
77}
78
79//==========================================================================
80
81// Declaration of main JetMatching class to perform MLM matching.
82// Note that it is defined with virtual inheritance, so that it can
83// be combined with other UserHooks classes, see e.g. main33.cc.
84
85class JetMatching : virtual public UserHooks {
86
87public:
88
89 // Constructor and destructor
90 JetMatching() : cellJet(NULL), slowJet(NULL), slowJetHard(NULL),
91 hjSlowJet(NULL) {}
92 ~JetMatching() {
93 if (cellJet) delete cellJet;
94 if (slowJet) delete slowJet;
95 if (slowJetHard) delete slowJetHard;
96 if (hjSlowJet) delete hjSlowJet;
97 // Print error statistics before exiting. Printing code
98 // basically copied from Info class.
99 // Header.
100 cout << "\n *------- JetMatching Error and Warning Messages Statistics"
101 << " -----------------------------------------------------* \n"
102 << " | "
103 << " | \n"
104 << " | times message "
105 << " | \n"
106 << " | "
107 << " | \n";
108
109 // Loop over all messages
110 map<string, int>::iterator messageEntry = messages.begin();
111 if (messageEntry == messages.end())
112 cout << " | 0 no errors or warnings to report "
113 << " | \n";
114 while (messageEntry != messages.end()) {
115 // Message printout.
116 string temp = messageEntry->first;
117 int len = temp.length();
118 temp.insert( len, max(0, 102 - len), ' ');
119 cout << " | " << setw(6) << messageEntry->second << " "
120 << temp << " | \n";
121 ++messageEntry;
122 }
123
124 // Done.
125 cout << " | "
126 << " | \n"
127 << " *------- End JetMatching Error and Warning Messages "
128 << "Statistics -------------------------------------------------* "
129 << endl;
130 }
131
132 // Initialisation
133 virtual bool initAfterBeams() = 0;
134
135 // Process level vetos
136 bool canVetoProcessLevel() { return doMerge; }
137 bool doVetoProcessLevel(Event& process) {
138 eventProcessOrig = process;
139 return false;
140 }
141
142 // Parton level vetos (before beam remnants and resonance decays)
143 bool canVetoPartonLevelEarly() { return doMerge; }
144 bool doVetoPartonLevelEarly(const Event& event);
145
146 // Shower step vetoes (after the first emission, for Shower-kT scheme)
147 int numberVetoStep() {return 1;}
148 bool canVetoStep() { return false; }
149 bool doVetoStep(int, int, int, const Event& ) { return false; }
150
151 // Note: The functions below have been made public to ease the generation
152 // of Python bindings.
153 //protected:
154
155 // Different steps of the matching algorithm.
156 virtual void sortIncomingProcess(const Event &)=0;
157 virtual void jetAlgorithmInput(const Event &, int)=0;
158 virtual void runJetAlgorithm()=0;
159 virtual bool matchPartonsToJets(int)=0;
160 virtual int matchPartonsToJetsLight()=0;
161 virtual int matchPartonsToJetsHeavy()=0;
162
163 // Print a message the first few times. Insert in database.
164 void errorMsg(string messageIn) {
165 // Recover number of times message occured. Also inserts new string.
166 int times = messages[messageIn];
167 ++messages[messageIn];
168 // Print message the first few times.
169 if (times < TIMESTOPRINT) cout << " PYTHIA " << messageIn << endl;
170 }
171
172protected:
173
174 // Constants to be changed for debug printout or extra checks.
175 static const bool MATCHINGDEBUG, MATCHINGCHECK;
176
177 enum vetoStatus { NONE, LESS_JETS, MORE_JETS, HARD_JET,
178 UNMATCHED_PARTON, INCLUSIVE_VETO };
179 enum partonTypes { ID_CHARM=4, ID_BOT=5, ID_TOP=6, ID_LEPMIN=11,
180 ID_LEPMAX=16, ID_GLUON=21, ID_PHOTON=22 };
181
182 // Master switch for merging
183 bool doMerge;
184 // Switch for merging in the shower-kT scheme. Needed here because
185 // the scheme uses different UserHooks functionality.
186 bool doShowerKt;
187
188 // Maximum and current number of jets
189 int nJetMax, nJet;
190
191 // Jet algorithm parameters
192 int jetAlgorithm;
193 double eTjetMin, coneRadius, etaJetMax, etaJetMaxAlgo;
194
195 // Internal jet algorithms
196 CellJet* cellJet;
197 SlowJet* slowJet;
198 SlowJet* slowJetHard;
199 HJSlowJet* hjSlowJet;
200
201 // SlowJet specific
202 int slowJetPower;
203
204 // Event records to store original incoming process, final-state of the
205 // incoming process and what will be passed to the jet algorithm.
206 // Not completely necessary to store all steps, but makes tracking the
207 // steps of the algorithm a lot easier.
208 Event eventProcessOrig, eventProcess, workEventJet;
209
210 // Sort final-state of incoming process into light/heavy jets and 'other'
211 vector<int> typeIdx[3];
212 set<int> typeSet[3];
213
214 // Momenta output of jet algorithm (to provide same output regardless of
215 // the selected jet algorithm)
216 vector<Vec4> jetMomenta;
217
218 // CellJet specific
219 int nEta, nPhi;
220 double eTseed, eTthreshold;
221
222 // Merging procedure parameters
223 int jetAllow, jetMatch, exclusiveMode;
224 double coneMatchLight, coneRadiusHeavy, coneMatchHeavy;
225 bool exclusive;
226
227 // Store the minimum eT/pT of matched light jets
228 double eTpTlightMin;
229
230 // Map for all error messages.
231 map<string, int> messages;
232 // Number of times the same error message is repeated, unless overridden.
233 static const int TIMESTOPRINT = 1;
234
235};
236
237//==========================================================================
238
239// Declaration of main UserHooks class to perform Alpgen matching.
240
241class JetMatchingAlpgen : virtual public JetMatching {
242
243public:
244
245 // Constructor and destructor
246 JetMatchingAlpgen() { }
247 ~JetMatchingAlpgen() { }
248
249 // Initialisation
250 bool initAfterBeams();
251
252private:
253
254 // Different steps of the matching algorithm.
255 void sortIncomingProcess(const Event &);
256 void jetAlgorithmInput(const Event &, int);
257 void runJetAlgorithm();
258 bool matchPartonsToJets(int);
259 int matchPartonsToJetsLight();
260 int matchPartonsToJetsHeavy();
261
262 // Sorting utility
263 void sortTypeIdx(vector < int > &vecIn);
264
265 // Constants
266 static const double GHOSTENERGY, ZEROTHRESHOLD;
267
268};
269
270//==========================================================================
271
272// Declaration of main UserHooks class to perform Madgraph matching.
273
274class JetMatchingMadgraph : virtual public JetMatching {
275
276public:
277
278 // Constructor and destructor
279 JetMatchingMadgraph() : slowJetDJR(NULL) { }
280 ~JetMatchingMadgraph() { if (slowJetDJR) delete slowJetDJR; }
281
282 // Initialisation
283 bool initAfterBeams();
284
285 // Process level vetos
286 bool canVetoProcessLevel() { return doMerge; }
287 bool doVetoProcessLevel(Event& process);
288
289 // Shower step vetoes (after the first emission, for Shower-kT scheme)
290 int numberVetoStep() {return 1;}
291 bool canVetoStep() { return doShowerKt; }
292 bool doVetoStep(int, int, int, const Event& );
293
294 // Jet algorithm to access the jet separations in the cleaned event
295 // after showering.
296 SlowJet* slowJetDJR;
297 // Functions to return the jet clustering scales and number of ME partons.
298 // These are useful to investigate the matching systematics.
299 vector<double> getDJR() { return DJR;}
300 pair<int,int> nMEpartons() { return nMEpartonsSave;}
301
302 // For systematic variations of the jet matching parameters, it is helpful
303 // to decouple the jet matching veto from the internal book-keeping. The
304 // veto can then be applied in hindsight by an expert user. The functions
305 // below return all the necessary information to do this.
306 Event getWorkEventJet() { return workEventJetSave; }
307 Event getProcessSubset() { return processSubsetSave; }
308 bool getExclusive() { return exclusive; }
309 double getPTfirst() { return pTfirstSave; }
310
311 // Note: The functions below have been made public to ease the generation
312 // of Python bindings.
313 //protected:
314
315 // Different steps of the matching algorithm.
316 void sortIncomingProcess(const Event &);
317 void jetAlgorithmInput(const Event &, int);
318 void runJetAlgorithm();
319 bool matchPartonsToJets(int);
320 int matchPartonsToJetsLight();
321 int matchPartonsToJetsHeavy();
322 int matchPartonsToJetsOther();
323 bool doShowerKtVeto(double pTfirst);
324
325 // Functions to clear and set the jet clustering scales.
326 void clearDJR() { DJR.resize(0);}
327 void setDJR( const Event& event);
328 // Functions to clear and set the jet clustering scales.
329 void clear_nMEpartons() { nMEpartonsSave.first = nMEpartonsSave.second =-1;}
330 void set_nMEpartons( const int nOrig, const int nMatch) {
331 clear_nMEpartons();
332 nMEpartonsSave.first = nOrig;
333 nMEpartonsSave.second = nMatch;
334 };
335
336 // Function to get the current number of partons in the Born state, as
337 // read from LHE.
338 int npNLO();
339
340private:
341
342 // Stored values of all inputs necessary to perform the jet matching, as
343 // needed when the veto is applied externally.
344 Event processSubsetSave;
345 Event workEventJetSave;
346 double pTfirstSave;
347
348 // Save if code should apply the veto, or simply store the things necessary
349 // to perform the veto externally.
350 bool performVeto;
351
352 // Variables.
353 vector<int> origTypeIdx[3];
354 int nQmatch;
355 double qCut, qCutSq, clFact;
356 bool doFxFx;
357 int nPartonsNow;
358 double qCutME, qCutMESq;
359
360 // Vector to store the jet clustering scales.
361 vector<double> DJR;
362 // Pair of integers giving the number of ME partons read from LHEF and used
363 // in the matching (can be different if some partons should not be matched)
364 pair<int,int> nMEpartonsSave;
365
366};
367
368//==========================================================================
369
370// Main implementation of JetMatching class.
371// This may be split out to a separate C++ file if desired,
372// but currently included here for ease of use.
373
374//--------------------------------------------------------------------------
375
376// Constants to be changed for debug printout or extra checks.
377const bool JetMatching::MATCHINGDEBUG = false;
378const bool JetMatching::MATCHINGCHECK = false;
379
380//--------------------------------------------------------------------------
381
382// Early parton level veto (before beam remnants and resonance showers)
383
384inline bool JetMatching::doVetoPartonLevelEarly(const Event& event) {
385
386 // 1) Sort the original incoming process. After this step is performed,
387 // the following assignments have been made:
388 // eventProcessOrig - the original incoming process
389 // eventProcess - the final-state of the incoming process with
390 // resonance decays removed (and resonances
391 // themselves now with positive status code)
392 // typeIdx[0/1/2] - Indices into 'eventProcess' of
393 // light jets/heavy jets/other
394 // typeSet[0/1/2] - Indices into 'event' of light jets/heavy jets/other
395 // workEvent - partons from the hardest subsystem + ISR + FSR only
396 sortIncomingProcess(event);
397
398 // For the shower-kT scheme, do not perform any veto here, as any vetoing
399 // will already have taken place in doVetoStep.
400 if ( doShowerKt ) return false;
401
402 // Debug printout.
403 if (MATCHINGDEBUG) {
404 // Begin
405 cout << endl << "-------- Begin Madgraph Debug --------" << endl;
406 // Original incoming process
407 cout << endl << "Original incoming process:";
408 eventProcessOrig.list();
409 // Final-state of original incoming process
410 cout << endl << "Final-state incoming process:";
411 eventProcess.list();
412 // List categories of sorted particles
413 for (size_t i = 0; i < typeIdx[0].size(); i++)
414 cout << ((i == 0) ? "Light jets: " : ", ") << setw(3) << typeIdx[0][i];
415 if( typeIdx[0].size()== 0 )
416 cout << "Light jets: None";
417
418 for (size_t i = 0; i < typeIdx[1].size(); i++)
419 cout << ((i == 0) ? "\nHeavy jets: " : ", ") << setw(3) << typeIdx[1][i];
420 for (size_t i = 0; i < typeIdx[2].size(); i++)
421 cout << ((i == 0) ? "\nOther: " : ", ") << setw(3) << typeIdx[2][i];
422 // Full event at this stage
423 cout << endl << endl << "Event:";
424 event.list();
425 // Work event (partons from hardest subsystem + ISR + FSR)
426 cout << endl << "Work event:";
427 workEvent.list();
428 }
429
430 // 2) Light/heavy jets: iType = 0 (light jets), 1 (heavy jets)
431 int iTypeEnd = (typeIdx[2].empty()) ? 2 : 3;
432 for (int iType = 0; iType < iTypeEnd; iType++) {
433
434 // 2a) Find particles which will be passed from the jet algorithm.
435 // Input from 'workEvent' and output in 'workEventJet'.
436 jetAlgorithmInput(event, iType);
437
438 // Debug printout.
439 if (MATCHINGDEBUG) {
440 // Jet algorithm event
441 cout << endl << "Jet algorithm event (iType = " << iType << "):";
442 workEventJet.list();
443 }
444
445 // 2b) Run jet algorithm on 'workEventJet'.
446 // Output is stored in jetMomenta.
447 runJetAlgorithm();
448
449 // 2c) Match partons to jets and decide if veto is necessary
450 if (matchPartonsToJets(iType) == true) {
451 // Debug printout.
452 if (MATCHINGDEBUG) {
453 cout << endl << "Event vetoed" << endl
454 << "---------- End MLM Debug ----------" << endl;
455 }
456 return true;
457 }
458 }
459
460 // Debug printout.
461 if (MATCHINGDEBUG) {
462 cout << endl << "Event accepted" << endl
463 << "---------- End MLM Debug ----------" << endl;
464 }
465
466 // If we reached here, then no veto
467 return false;
468
469}
470
471//==========================================================================
472
473// Main implementation of Alpgen UserHooks class.
474// This may be split out to a separate C++ file if desired,
475// but currently included here for ease of use.
476
477//--------------------------------------------------------------------------
478
479// Constants: could be changed here if desired, but normally should not.
480// These are of technical nature, as described for each.
481
482// The energy of ghost particles. For technical reasons, this cannot be
483// set arbitrarily low, see 'Particle::TINY' in 'Event.cc' for details.
484const double JetMatchingAlpgen::GHOSTENERGY = 1e-15;
485
486// A zero threshold value for double comparisons.
487const double JetMatchingAlpgen::ZEROTHRESHOLD = 1e-10;
488
489//--------------------------------------------------------------------------
490
491// Function to sort typeIdx vectors into descending eT/pT order.
492// Uses a selection sort, as number of partons generally small
493// and so efficiency not a worry.
494
495inline void JetMatchingAlpgen::sortTypeIdx(vector < int > &vecIn) {
496 for (size_t i = 0; i < vecIn.size(); i++) {
497 size_t jMax = i;
498 double vMax = (jetAlgorithm == 1) ?
499 eventProcess[vecIn[i]].eT() :
500 eventProcess[vecIn[i]].pT();
501 for (size_t j = i + 1; j < vecIn.size(); j++) {
502 double vNow = (jetAlgorithm == 1)
503 ? eventProcess[vecIn[j]].eT() : eventProcess[vecIn[j]].pT();
504 if (vNow > vMax) {
505 vMax = vNow;
506 jMax = j;
507 }
508 }
509 if (jMax != i) swap(vecIn[i], vecIn[jMax]);
510 }
511}
512
513//--------------------------------------------------------------------------
514
515// Initialisation routine automatically called from Pythia::init().
516// Setup all parts needed for the merging.
517
518inline bool JetMatchingAlpgen::initAfterBeams() {
519
520 // Read in parameters
521 doMerge = settingsPtr->flag("JetMatching:merge");
522 jetAlgorithm = settingsPtr->mode("JetMatching:jetAlgorithm");
523 nJet = settingsPtr->mode("JetMatching:nJet");
524 nJetMax = settingsPtr->mode("JetMatching:nJetMax");
525 eTjetMin = settingsPtr->parm("JetMatching:eTjetMin");
526 coneRadius = settingsPtr->parm("JetMatching:coneRadius");
527 etaJetMax = settingsPtr->parm("JetMatching:etaJetMax");
528 doShowerKt = settingsPtr->flag("JetMatching:doShowerKt");
529
530 // Use etaJetMax + coneRadius in input to jet algorithms
531 etaJetMaxAlgo = etaJetMax + coneRadius;
532
533 // CellJet specific
534 nEta = settingsPtr->mode("JetMatching:nEta");
535 nPhi = settingsPtr->mode("JetMatching:nPhi");
536 eTseed = settingsPtr->parm("JetMatching:eTseed");
537 eTthreshold = settingsPtr->parm("JetMatching:eTthreshold");
538
539 // SlowJet specific
540 slowJetPower = settingsPtr->mode("JetMatching:slowJetPower");
541 coneMatchLight = settingsPtr->parm("JetMatching:coneMatchLight");
542 coneRadiusHeavy = settingsPtr->parm("JetMatching:coneRadiusHeavy");
543 if (coneRadiusHeavy < 0.) coneRadiusHeavy = coneRadius;
544 coneMatchHeavy = settingsPtr->parm("JetMatching:coneMatchHeavy");
545
546 // Matching procedure
547 jetAllow = settingsPtr->mode("JetMatching:jetAllow");
548 jetMatch = settingsPtr->mode("JetMatching:jetMatch");
549 exclusiveMode = settingsPtr->mode("JetMatching:exclusive");
550
551 // If not merging, then done
552 if (!doMerge) return true;
553
554 // Exclusive mode; if set to 2, then set based on nJet/nJetMax
555 if (exclusiveMode == 2) {
556
557 // No nJet or nJetMax, so default to exclusive mode
558 if (nJet < 0 || nJetMax < 0) {
559 errorMsg("Warning in JetMatchingAlpgen:init: "
560 "missing jet multiplicity information; running in exclusive mode");
561 exclusive = true;
562
563 // Inclusive if nJet == nJetMax, exclusive otherwise
564 } else {
565 exclusive = (nJet == nJetMax) ? false : true;
566 }
567
568 // Otherwise, just set as given
569 } else {
570 exclusive = (exclusiveMode == 0) ? false : true;
571 }
572
573 // Initialise chosen jet algorithm. CellJet.
574 if (jetAlgorithm == 1) {
575
576 // Extra options for CellJet. nSel = 1 means that all final-state
577 // particles are taken and we retain control of what to select.
578 // smear/resolution/upperCut are not used and are set to default values.
579 int nSel = 2, smear = 0;
580 double resolution = 0.5, upperCut = 2.;
581 cellJet = new CellJet(etaJetMaxAlgo, nEta, nPhi, nSel,
582 smear, resolution, upperCut, eTthreshold);
583
584 // SlowJet
585 } else if (jetAlgorithm == 2) {
586 slowJet = new SlowJet(slowJetPower, coneRadius, eTjetMin, etaJetMaxAlgo);
587 }
588
589 // Check the jetMatch parameter; option 2 only works with SlowJet
590 if (jetAlgorithm == 1 && jetMatch == 2) {
591 errorMsg("Warning in JetMatchingAlpgen:init: "
592 "jetMatch = 2 only valid with SlowJet algorithm. "
593 "Reverting to jetMatch = 1");
594 jetMatch = 1;
595 }
596
597 // Setup local event records
598 eventProcessOrig.init("(eventProcessOrig)", particleDataPtr);
599 eventProcess.init("(eventProcess)", particleDataPtr);
600 workEventJet.init("(workEventJet)", particleDataPtr);
601
602 // Print information
603 string jetStr = (jetAlgorithm == 1) ? "CellJet" :
604 (slowJetPower == -1) ? "anti-kT" :
605 (slowJetPower == 0) ? "C/A" :
606 (slowJetPower == 1) ? "kT" : "unknown";
607 string modeStr = (exclusive) ? "exclusive" : "inclusive";
608 stringstream nJetStr, nJetMaxStr;
609 if (nJet >= 0) nJetStr << nJet; else nJetStr << "unknown";
610 if (nJetMax >= 0) nJetMaxStr << nJetMax; else nJetMaxStr << "unknown";
611 cout << endl
612 << " *------- MLM matching parameters -------*" << endl
613 << " | nJet | " << setw(14)
614 << nJetStr.str() << " |" << endl
615 << " | nJetMax | " << setw(14)
616 << nJetMaxStr.str() << " |" << endl
617 << " | Jet algorithm | " << setw(14)
618 << jetStr << " |" << endl
619 << " | eTjetMin | " << setw(14)
620 << eTjetMin << " |" << endl
621 << " | coneRadius | " << setw(14)
622 << coneRadius << " |" << endl
623 << " | etaJetMax | " << setw(14)
624 << etaJetMax << " |" << endl
625 << " | jetAllow | " << setw(14)
626 << jetAllow << " |" << endl
627 << " | jetMatch | " << setw(14)
628 << jetMatch << " |" << endl
629 << " | coneMatchLight | " << setw(14)
630 << coneMatchLight << " |" << endl
631 << " | coneRadiusHeavy | " << setw(14)
632 << coneRadiusHeavy << " |" << endl
633 << " | coneMatchHeavy | " << setw(14)
634 << coneMatchHeavy << " |" << endl
635 << " | Mode | " << setw(14)
636 << modeStr << " |" << endl
637 << " *-----------------------------------------*" << endl;
638
639 return true;
640}
641
642//--------------------------------------------------------------------------
643
644// Step (1): sort the incoming particles
645
646inline void JetMatchingAlpgen::sortIncomingProcess(const Event &event) {
647
648 // Remove resonance decays from original process and keep only final
649 // state. Resonances will have positive status code after this step.
650 omitResonanceDecays(eventProcessOrig, true);
651 eventProcess = workEvent;
652
653 // Sort original process final state into light/heavy jets and 'other'.
654 // Criteria:
655 // 1 <= ID <= 5 and massless, or ID == 21 --> light jet (typeIdx[0])
656 // 4 <= ID <= 6 and massive --> heavy jet (typeIdx[1])
657 // All else --> other (typeIdx[2])
658 // Note that 'typeIdx' stores indices into 'eventProcess' (after resonance
659 // decays are omitted), while 'typeSet' stores indices into the original
660 // process record, 'eventProcessOrig', but these indices are also valid
661 // in 'event'.
662 for (int i = 0; i < 3; i++) {
663 typeIdx[i].clear();
664 typeSet[i].clear();
665 }
666 for (int i = 0; i < eventProcess.size(); i++) {
667 // Ignore nonfinal and default to 'other'
668 if (!eventProcess[i].isFinal()) continue;
669 int idx = 2;
670
671 // Light jets
672 if (eventProcess[i].id() == ID_GLUON
673 || (eventProcess[i].idAbs() <= ID_BOT
674 && abs(eventProcess[i].m()) < ZEROTHRESHOLD)) idx = 0;
675
676 // Heavy jets
677 else if (eventProcess[i].idAbs() >= ID_CHARM
678 && eventProcess[i].idAbs() <= ID_TOP) idx = 1;
679
680 // Store
681 typeIdx[idx].push_back(i);
682 typeSet[idx].insert(eventProcess[i].daughter1());
683 }
684
685 // Extract partons from hardest subsystem + ISR + FSR only into
686 // workEvent. Note no resonance showers or MPIs.
687 subEvent(event);
688}
689
690//--------------------------------------------------------------------------
691
692// Step (2a): pick which particles to pass to the jet algorithm
693
694inline void JetMatchingAlpgen::jetAlgorithmInput(const Event &event,
695 int iType) {
696
697 // Take input from 'workEvent' and put output in 'workEventJet'
698 workEventJet = workEvent;
699
700 // Loop over particles and decide what to pass to the jet algorithm
701 for (int i = 0; i < workEventJet.size(); ++i) {
702 if (!workEventJet[i].isFinal()) continue;
703
704 // jetAllow option to disallow certain particle types
705 if (jetAllow == 1) {
706
707 // Original AG+Py6 algorithm explicitly excludes tops,
708 // leptons and photons.
709 int id = workEventJet[i].idAbs();
710 if ( (id >= ID_LEPMIN && id <= ID_LEPMAX) || id == ID_TOP
711 || id == ID_PHOTON) {
712 workEventJet[i].statusNeg();
713 continue;
714 }
715 }
716
717 // Get the index of this particle in original event
718 int idx = workEventJet[i].daughter1();
719
720 // Start with particle idx, and afterwards track mothers
721 while (true) {
722
723 // Light jets
724 if (iType == 0) {
725
726 // Do not include if originates from heavy jet or 'other'
727 if (typeSet[1].find(idx) != typeSet[1].end() ||
728 typeSet[2].find(idx) != typeSet[2].end()) {
729 workEventJet[i].statusNeg();
730 break;
731 }
732
733 // Made it to start of event record so done
734 if (idx == 0) break;
735 // Otherwise next mother and continue
736 idx = event[idx].mother1();
737
738 // Heavy jets
739 } else if (iType == 1) {
740
741 // Only include if originates from heavy jet
742 if (typeSet[1].find(idx) != typeSet[1].end()) break;
743
744 // Made it to start of event record with no heavy jet mother,
745 // so DO NOT include particle
746 if (idx == 0) {
747 workEventJet[i].statusNeg();
748 break;
749 }
750
751 // Otherwise next mother and continue
752 idx = event[idx].mother1();
753
754 // Other jets
755 } else if (iType == 2) {
756
757 // Only include if originates from other jet
758 if (typeSet[2].find(idx) != typeSet[2].end()) break;
759
760 // Made it to start of event record with no heavy jet mother,
761 // so DO NOT include particle
762 if (idx == 0) {
763 workEventJet[i].statusNeg();
764 break;
765 }
766
767 // Otherwise next mother and continue
768 idx = event[idx].mother1();
769
770 } // if (iType)
771 } // while (true)
772 } // for (i)
773
774 // For jetMatch = 2, insert ghost particles corresponding to
775 // each hard parton in the original process
776 if (jetMatch == 2) {
777 for (int i = 0; i < int(typeIdx[iType].size()); i++) {
778 // Get y/phi of the parton
779 Vec4 pIn = eventProcess[typeIdx[iType][i]].p();
780 double y = pIn.rap();
781 double phi = pIn.phi();
782
783 // Create a ghost particle and add to the workEventJet
784 double e = GHOSTENERGY;
785 double e2y = exp(2. * y);
786 double pz = e * (e2y - 1.) / (e2y + 1.);
787 double pt = sqrt(e*e - pz*pz);
788 double px = pt * cos(phi);
789 double py = pt * sin(phi);
790 workEventJet.append( ID_GLUON, 99, 0, 0, 0, 0, 0, 0, px, py, pz, e);
791
792 // Extra check on reconstructed y/phi values. If many warnings
793 // of this type, GHOSTENERGY may be set too low.
794 if (MATCHINGCHECK) {
795 int lastIdx = workEventJet.size() - 1;
796 if (abs(y - workEventJet[lastIdx].y()) > ZEROTHRESHOLD ||
797 abs(phi - workEventJet[lastIdx].phi()) > ZEROTHRESHOLD)
798 errorMsg("Warning in JetMatchingAlpgen:jetAlgorithmInput: "
799 "ghost particle y/phi mismatch");
800 }
801
802 } // for (i)
803 } // if (jetMatch == 2)
804}
805
806//--------------------------------------------------------------------------
807
808// Step (2b): run jet algorithm and provide common output
809
810inline void JetMatchingAlpgen::runJetAlgorithm() {
811
812 // Run the jet clustering algorithm
813 if (jetAlgorithm == 1)
814 cellJet->analyze(workEventJet, eTjetMin, coneRadius, eTseed);
815 else
816 slowJet->analyze(workEventJet);
817
818 // Extract four-momenta of jets with |eta| < etaJetMax and
819 // put into jetMomenta. Note that this is done backwards as
820 // jets are removed with SlowJet.
821 jetMomenta.clear();
822 int iJet = (jetAlgorithm == 1) ? cellJet->size() - 1:
823 slowJet->sizeJet() - 1;
824 for (int i = iJet; i > -1; i--) {
825 Vec4 jetMom = (jetAlgorithm == 1) ? cellJet->pMassive(i) :
826 slowJet->p(i);
827 double eta = jetMom.eta();
828
829 if (abs(eta) > etaJetMax) {
830 if (jetAlgorithm == 2) slowJet->removeJet(i);
831 continue;
832 }
833 jetMomenta.push_back(jetMom);
834 }
835
836 // Reverse jetMomenta to restore eT/pT ordering
837 reverse(jetMomenta.begin(), jetMomenta.end());
838}
839
840//--------------------------------------------------------------------------
841
842// Step (2c): veto decision (returning true vetoes the event)
843
844inline bool JetMatchingAlpgen::matchPartonsToJets(int iType) {
845
846 // Use two different routines for light/heavy jets as
847 // different veto conditions and for clarity
848 if (iType == 0) return (matchPartonsToJetsLight() > 0);
849 else if (iType == 1) return (matchPartonsToJetsHeavy() > 0);
850 else if (iType == 2) return false;
851 return true;
852}
853
854//--------------------------------------------------------------------------
855
856// Step(2c): light jets
857// Return codes are given indicating the reason for a veto.
858// Although not currently used, they are a useful debugging tool:
859// 0 = no veto
860// 1 = veto as number of jets less than number of partons
861// 2 = veto as exclusive mode and number of jets greater than
862// number of partons
863// 3 = veto as inclusive mode and there would be an extra jet
864// that is harder than any matched soft jet
865// 4 = veto as there is a parton which does not match a jet
866
867inline int JetMatchingAlpgen::matchPartonsToJetsLight() {
868
869 // Always veto if number of jets is less than original number of jets
870 if (jetMomenta.size() < typeIdx[0].size()) return LESS_JETS;
871 // Veto if in exclusive mode and number of jets bigger than original
872 if (exclusive && jetMomenta.size() > typeIdx[0].size()) return MORE_JETS;
873
874 // Sort partons by eT/pT
875 sortTypeIdx(typeIdx[0]);
876
877 // Number of hard partons
878 int nParton = typeIdx[0].size();
879
880 // Keep track of which jets have been assigned a hard parton
881 vector < bool > jetAssigned;
882 jetAssigned.assign(jetMomenta.size(), false);
883
884 // Jet matching procedure: (1) deltaR between partons and jets
885 if (jetMatch == 1) {
886
887 // Loop over light hard partons and get 4-momentum
888 for (int i = 0; i < nParton; i++) {
889 Vec4 p1 = eventProcess[typeIdx[0][i]].p();
890
891 // Track which jet has the minimal dR measure with this parton
892 int jMin = -1;
893 double dRmin = 0.;
894
895 // Loop over all jets (skipping those already assigned).
896 for (int j = 0; j < int(jetMomenta.size()); j++) {
897 if (jetAssigned[j]) continue;
898
899 // DeltaR between parton/jet and store if minimum
900 double dR = (jetAlgorithm == 1)
901 ? REtaPhi(p1, jetMomenta[j]) : RRapPhi(p1, jetMomenta[j]);
902 if (jMin < 0 || dR < dRmin) {
903 dRmin = dR;
904 jMin = j;
905 }
906 } // for (j)
907
908 // Check for jet-parton match
909 if (jMin >= 0 && dRmin < coneRadius * coneMatchLight) {
910
911 // If the matched jet is not one of the nParton hardest jets,
912 // the extra left over jet would be harder than some of the
913 // matched jets. This is disallowed, so veto.
914 if (jMin >= nParton) return HARD_JET;
915
916 // Mark jet as assigned.
917 jetAssigned[jMin] = true;
918
919 // If no match, then event will be vetoed in all cases
920 } else return UNMATCHED_PARTON;
921
922 } // for (i)
923
924 // Jet matching procedure: (2) ghost particles in SlowJet
925 } else {
926
927 // Loop over added 'ghost' particles and find if assigned to a jet
928 for (int i = workEventJet.size() - nParton;
929 i < workEventJet.size(); i++) {
930 int jMin = slowJet->jetAssignment(i);
931
932 // Veto if:
933 // 1) not one of nParton hardest jets
934 // 2) not assigned to a jet
935 // 3) jet has already been assigned
936 if (jMin >= nParton) return HARD_JET;
937 if (jMin < 0 || jetAssigned[jMin]) return UNMATCHED_PARTON;
938
939 // Mark jet as assigned
940 jetAssigned[jMin] = true;
941
942 } // for (i)
943 } // if (jetMatch)
944
945 // Minimal eT/pT (CellJet/SlowJet) of matched light jets. Needed
946 // later for heavy jet vetos in inclusive mode.
947 if (nParton > 0)
948 eTpTlightMin = (jetAlgorithm == 1) ? jetMomenta[nParton - 1].eT()
949 : jetMomenta[nParton - 1].pT();
950 else
951 eTpTlightMin = -1.;
952
953 // No veto
954 return NONE;
955}
956
957//--------------------------------------------------------------------------
958
959// Step(2c): heavy jets
960// Return codes are given indicating the reason for a veto.
961// Although not currently used, they are a useful debugging tool:
962// 0 = no veto as there are no extra jets present
963// 1 = veto as in exclusive mode and extra jets present
964// 2 = veto as in inclusive mode and extra jets were harder
965// than any matched light jet
966
967inline int JetMatchingAlpgen::matchPartonsToJetsHeavy() {
968
969 // If there are no extra jets, then accept
970 if (jetMomenta.empty()) return NONE;
971
972 // Number of hard partons
973 int nParton = typeIdx[1].size();
974
975 // Remove jets that are close to heavy quarks
976 set < int > removeJets;
977
978 // Jet matching procedure: (1) deltaR between partons and jets
979 if (jetMatch == 1) {
980
981 // Loop over heavy hard partons and get 4-momentum
982 for (int i = 0; i < nParton; i++) {
983 Vec4 p1 = eventProcess[typeIdx[1][i]].p();
984
985 // Loop over all jets, find dR and mark for removal if match
986 for (int j = 0; j < int(jetMomenta.size()); j++) {
987 double dR = (jetAlgorithm == 1) ?
988 REtaPhi(p1, jetMomenta[j]) : RRapPhi(p1, jetMomenta[j]);
989 if (dR < coneRadiusHeavy * coneMatchHeavy)
990 removeJets.insert(j);
991
992 } // for (j)
993 } // for (i)
994
995 // Jet matching procedure: (2) ghost particles in SlowJet
996 } else {
997
998 // Loop over added 'ghost' particles and if assigned to a jet
999 // then mark this jet for removal
1000 for (int i = workEventJet.size() - nParton;
1001 i < workEventJet.size(); i++) {
1002 int jMin = slowJet->jetAssignment(i);
1003 if (jMin >= 0) removeJets.insert(jMin);
1004 }
1005
1006 }
1007
1008 // Remove jets (backwards order to not disturb indices)
1009 for (set < int >::reverse_iterator it = removeJets.rbegin();
1010 it != removeJets.rend(); it++)
1011 jetMomenta.erase(jetMomenta.begin() + *it);
1012
1013 // Handle case if there are still extra jets
1014 if (!jetMomenta.empty()) {
1015
1016 // Exclusive mode, so immediate veto
1017 if (exclusive) return MORE_JETS;
1018
1019 // Inclusive mode; extra jets must be softer than any matched light jet
1020 else if (eTpTlightMin >= 0.)
1021 for (size_t j = 0; j < jetMomenta.size(); j++) {
1022 // CellJet uses eT, SlowJet uses pT
1023 if ( (jetAlgorithm == 1 && jetMomenta[j].eT() > eTpTlightMin) ||
1024 (jetAlgorithm == 2 && jetMomenta[j].pT() > eTpTlightMin) )
1025 return HARD_JET;
1026 }
1027
1028 } // if (!jetMomenta.empty())
1029
1030 // No extra jets were present so no veto
1031 return NONE;
1032}
1033
1034//==========================================================================
1035
1036// Main implementation of Madgraph UserHooks class.
1037// This may be split out to a separate C++ file if desired,
1038// but currently included here for ease of use.
1039
1040//--------------------------------------------------------------------------
1041
1042// Initialisation routine automatically called from Pythia::init().
1043// Setup all parts needed for the merging.
1044
1045inline bool JetMatchingMadgraph::initAfterBeams() {
1046
1047 // Initialise values for stored jet matching veto inputs.
1048 pTfirstSave = -1.;
1049 processSubsetSave.init("(eventProcess)", particleDataPtr);
1050 workEventJetSave.init("(workEventJet)", particleDataPtr);
1051
1052 // Read in Madgraph specific configuration variables
1053 bool setMad = settingsPtr->flag("JetMatching:setMad");
1054
1055 // If Madgraph parameters are present, then parse in MadgraphPar object
1056 MadgraphPar par;
1057 string parStr = infoPtr->header("MGRunCard");
1058 if (!parStr.empty()) {
1059 par.parse(parStr);
1060 par.printParams();
1061 }
1062
1063 // Set Madgraph merging parameters from the file if requested
1064 if (setMad) {
1065 if ( par.haveParam("xqcut") && par.haveParam("maxjetflavor")
1066 && par.haveParam("alpsfact") && par.haveParam("ickkw") ) {
1067 settingsPtr->flag("JetMatching:merge", par.getParam("ickkw"));
1068 settingsPtr->parm("JetMatching:qCut", par.getParam("xqcut"));
1069 settingsPtr->mode("JetMatching:nQmatch",
1070 par.getParamAsInt("maxjetflavor"));
1071 settingsPtr->parm("JetMatching:clFact",
1072 clFact = par.getParam("alpsfact"));
1073 if (par.getParamAsInt("ickkw") == 0)
1074 errorMsg("Error in JetMatchingMadgraph:init: "
1075 "Madgraph file parameters are not set for merging");
1076
1077 // Warn if setMad requested, but one or more parameters not present
1078 } else {
1079 errorMsg("Warning in JetMatchingMadgraph:init: "
1080 "Madgraph merging parameters not found");
1081 if (!par.haveParam("xqcut")) errorMsg("Warning in "
1082 "JetMatchingMadgraph:init: No xqcut");
1083 if (!par.haveParam("ickkw")) errorMsg("Warning in "
1084 "JetMatchingMadgraph:init: No ickkw");
1085 if (!par.haveParam("maxjetflavor")) errorMsg("Warning in "
1086 "JetMatchingMadgraph:init: No maxjetflavor");
1087 if (!par.haveParam("alpsfact")) errorMsg("Warning in "
1088 "JetMatchingMadgraph:init: No alpsfact");
1089 }
1090 }
1091
1092 // Read in FxFx matching parameters
1093 doFxFx = settingsPtr->flag("JetMatching:doFxFx");
1094 nPartonsNow = settingsPtr->mode("JetMatching:nPartonsNow");
1095 qCutME = settingsPtr->parm("JetMatching:qCutME");
1096 qCutMESq = pow(qCutME,2);
1097
1098 // Read in Madgraph merging parameters
1099 doMerge = settingsPtr->flag("JetMatching:merge");
1100 doShowerKt = settingsPtr->flag("JetMatching:doShowerKt");
1101 qCut = settingsPtr->parm("JetMatching:qCut");
1102 nQmatch = settingsPtr->mode("JetMatching:nQmatch");
1103 clFact = settingsPtr->parm("JetMatching:clFact");
1104
1105 // Read in jet algorithm parameters
1106 jetAlgorithm = settingsPtr->mode("JetMatching:jetAlgorithm");
1107 nJetMax = settingsPtr->mode("JetMatching:nJetMax");
1108 eTjetMin = settingsPtr->parm("JetMatching:eTjetMin");
1109 coneRadius = settingsPtr->parm("JetMatching:coneRadius");
1110 etaJetMax = settingsPtr->parm("JetMatching:etaJetMax");
1111 slowJetPower = settingsPtr->mode("JetMatching:slowJetPower");
1112
1113 // Matching procedure
1114 jetAllow = settingsPtr->mode("JetMatching:jetAllow");
1115 exclusiveMode = settingsPtr->mode("JetMatching:exclusive");
1116 qCutSq = pow(qCut,2);
1117 etaJetMaxAlgo = etaJetMax;
1118
1119 // Read if veto should be performed internally.
1120 performVeto = settingsPtr->flag("JetMatching:doVeto");
1121
1122 // If not merging, then done
1123 if (!doMerge) return true;
1124
1125 // Exclusive mode; if set to 2, then set based on nJet/nJetMax
1126 if (exclusiveMode == 2) {
1127
1128 // No nJet or nJetMax, so default to exclusive mode
1129 if (nJetMax < 0) {
1130 errorMsg("Warning in JetMatchingMadgraph:init: "
1131 "missing jet multiplicity information; running in exclusive mode");
1132 exclusiveMode = 1;
1133 }
1134 }
1135
1136 // Initialise chosen jet algorithm.
1137 // Currently, this only supports the kT-algorithm in SlowJet.
1138 // Use the QCD distance measure by default.
1139 jetAlgorithm = 2;
1140 slowJetPower = 1;
1141 slowJet = new SlowJet(slowJetPower, coneRadius, eTjetMin,
1142 etaJetMaxAlgo, 2, 2, NULL, false);
1143
1144 // For FxFx, also initialise jet algorithm to define matrix element jets.
1145 // Currently, this only supports the kT-algorithm in SlowJet.
1146 // Use the QCD distance measure by default.
1147 slowJetHard = new SlowJet(slowJetPower, coneRadius, qCutME,
1148 etaJetMaxAlgo, 2, 2, NULL, false);
1149
1150 // To access the DJR's
1151 slowJetDJR = new SlowJet(slowJetPower, coneRadius, qCutME,
1152 etaJetMaxAlgo, 2, 2, NULL, false);
1153
1154 // A special version of SlowJet to handle heavy and other partons
1155 hjSlowJet = new HJSlowJet(slowJetPower, coneRadius, 0.0,
1156 100.0, 1, 2, NULL, false, true);
1157
1158 // Setup local event records
1159 eventProcessOrig.init("(eventProcessOrig)", particleDataPtr);
1160 eventProcess.init("(eventProcess)", particleDataPtr);
1161 workEventJet.init("(workEventJet)", particleDataPtr);
1162
1163 // Print information
1164 string jetStr = (jetAlgorithm == 1) ? "CellJet" :
1165 (slowJetPower == -1) ? "anti-kT" :
1166 (slowJetPower == 0) ? "C/A" :
1167 (slowJetPower == 1) ? "kT" : "unknown";
1168 string modeStr = (exclusiveMode) ? "exclusive" : "inclusive";
1169 cout << endl
1170 << " *----- Madgraph matching parameters -----*" << endl
1171 << " | qCut | " << setw(14)
1172 << qCut << " |" << endl
1173 << " | nQmatch | " << setw(14)
1174 << nQmatch << " |" << endl
1175 << " | clFact | " << setw(14)
1176 << clFact << " |" << endl
1177 << " | Jet algorithm | " << setw(14)
1178 << jetStr << " |" << endl
1179 << " | eTjetMin | " << setw(14)
1180 << eTjetMin << " |" << endl
1181 << " | etaJetMax | " << setw(14)
1182 << etaJetMax << " |" << endl
1183 << " | jetAllow | " << setw(14)
1184 << jetAllow << " |" << endl
1185 << " | Mode | " << setw(14)
1186 << modeStr << " |" << endl
1187 << " *-----------------------------------------*" << endl;
1188
1189 return true;
1190}
1191
1192//--------------------------------------------------------------------------
1193
1194// Process level vetos
1195
1196inline bool JetMatchingMadgraph::doVetoProcessLevel(Event& process) {
1197
1198 eventProcessOrig = process;
1199
1200 // Setup for veto if hard ME has too many partons.
1201 // This is done to achieve consistency with the Pythia6 implementation.
1202
1203 // Clear the event of MPI systems and resonace decay products. Store trimmed
1204 // event in workEvent.
1205 sortIncomingProcess(process);
1206
1207 // Veto in case the hard input matrix element already has too many partons.
1208 if ( !doFxFx && int(typeIdx[0].size()) > nJetMax )
1209 return true;
1210 if ( doFxFx && npNLO() < nJetMax && int(typeIdx[0].size()) > nJetMax )
1211 return true;
1212
1213 // Done
1214 return false;
1215
1216}
1217
1218//--------------------------------------------------------------------------
1219
1220inline bool JetMatchingMadgraph::doVetoStep(int iPos, int nISR, int nFSR,
1221 const Event& event) {
1222
1223 // Do not perform any veto if not in the Shower-kT scheme.
1224 if ( !doShowerKt ) return false;
1225
1226 // Do nothing for emissions after the first one.
1227 if ( nISR + nFSR > 1 ) return false;
1228
1229 // Do nothing in resonance decay showers.
1230 if (iPos == 5) return false;
1231
1232 // Clear the event of MPI systems and resonace decay products. Store trimmed
1233 // event in workEvent.
1234 sortIncomingProcess(event);
1235
1236 // Get (kinematical) pT of first emission
1237 double pTfirst = 0.;
1238
1239 // Get weak bosons, for later checks if the emission is a "QCD emission".
1240 vector<int> weakBosons;
1241 for (int i = 0; i < event.size(); i++) {
1242 if ( event[i].id() == 22
1243 && event[i].id() == 23
1244 && event[i].idAbs() == 24)
1245 weakBosons.push_back(i);
1246 }
1247
1248 for (int i = workEvent.size()-1; i > 0; --i) {
1249 if ( workEvent[i].isFinal() && workEvent[i].colType() != 0
1250 && (workEvent[i].statusAbs() == 43 || workEvent[i].statusAbs() == 51)) {
1251 // Check if any of the EW bosons are ancestors of this parton. This
1252 // should never happen for the first non-resonance shower emission.
1253 // Check just to be sure.
1254 bool QCDemission = true;
1255 // Get position of this parton in the actual event (workEvent does
1256 // not contain right mother-daughter relations). Stored in daughters.
1257 int iPosOld = workEvent[i].daughter1();
1258 for (int j = 0; i < int(weakBosons.size()); ++i)
1259 if ( event[iPosOld].isAncestor(j)) {
1260 QCDemission = false;
1261 break;
1262 }
1263 // Done for a QCD emission.
1264 if (QCDemission){
1265 pTfirst = workEvent[i].pT();
1266 break;
1267 }
1268 }
1269 }
1270
1271 // Store things that are necessary to perform the shower-kT veto externally.
1272 pTfirstSave = pTfirst;
1273 // Done if only inputs for an external vetoing procedure should be stored.
1274 if (!performVeto) return false;
1275
1276 // Check veto.
1277 if ( doShowerKtVeto(pTfirst) ) return true;
1278
1279 // No veto if come this far.
1280 return false;
1281
1282}
1283
1284//--------------------------------------------------------------------------
1285
1286inline bool JetMatchingMadgraph::doShowerKtVeto(double pTfirst) {
1287
1288 // Only check veto in the shower-kT scheme.
1289 if ( !doShowerKt ) return false;
1290
1291 // Reset veto code
1292 bool doVeto = false;
1293
1294 // Find the (kinematical) pT of the softest (light) parton in the hard
1295 // process.
1296 int nParton = typeIdx[0].size();
1297 double pTminME=1e10;
1298 for ( int i = 0; i < nParton; ++i)
1299 pTminME = min(pTminME,eventProcess[typeIdx[0][i]].pT());
1300
1301 // Veto if the softest hard process parton is below Qcut.
1302 if ( nParton > 0 && pow(pTminME,2) < qCutSq ) doVeto = true;
1303
1304 // For non-highest multiplicity, veto if the hardest emission is harder
1305 // than Qcut.
1306 if ( exclusive && pow(pTfirst,2) > qCutSq ) {
1307 doVeto = true;
1308 // For highest multiplicity sample, veto if the hardest emission is harder
1309 // than the hard process parton.
1310 } else if ( !exclusive && nParton > 0 && pTfirst > pTminME ) {
1311 doVeto = true;
1312 }
1313
1314 // Return veto
1315 return doVeto;
1316
1317}
1318
1319//--------------------------------------------------------------------------
1320
1321// Function to set the jet clustering scales (to be used as output)
1322
1323inline void JetMatchingMadgraph::setDJR( const Event& event) {
1324
1325 // Clear members.
1326 clearDJR();
1327 vector<double> result;
1328
1329 // Initialize SlowJetDJR jet algorithm with event
1330 if (!slowJetDJR->setup(event) ) {
1331 errorMsg("Warning in JetMatchingMadgraph:setDJR"
1332 ": the SlowJet algorithm failed on setup");
1333 return;
1334 }
1335
1336 // Cluster in steps to find all hadronic jets
1337 while ( slowJetDJR->sizeAll() - slowJetDJR->sizeJet() > 0 ) {
1338 // Save the next clustering scale.
1339 result.push_back(sqrt(slowJetDJR->dNext()));
1340 // Perform step.
1341 slowJetDJR->doStep();
1342 }
1343
1344 // Save clustering scales in reserve order.
1345 for (int i=int(result.size())-1; i >= 0; --i)
1346 DJR.push_back(result[i]);
1347
1348}
1349
1350//--------------------------------------------------------------------------
1351
1352// Function to get the current number of partons in the Born state, as
1353// read from LHE.
1354
1355inline int JetMatchingMadgraph::npNLO(){
1356 string npIn = infoPtr->getEventAttribute("npNLO",true);
1357 int np = (npIn != "") ? atoi((char*)npIn.c_str()) : -1;
1358 if ( np < 0 ) { ; }
1359 else return np;
1360 return nPartonsNow;
1361}
1362
1363//--------------------------------------------------------------------------
1364
1365// Step (1): sort the incoming particles
1366
1367inline void JetMatchingMadgraph::sortIncomingProcess(const Event &event) {
1368
1369 // Remove resonance decays from original process and keep only final
1370 // state. Resonances will have positive status code after this step.
1371 omitResonanceDecays(eventProcessOrig, true);
1372 clearDJR();
1373 clear_nMEpartons();
1374
1375 // Step-FxFx-1: remove preclustering from FxFx
1376
1377 /*
1378
1379 // For FxFx, pre-cluster partons in the event into jets.
1380 if (doFxFx) {
1381
1382 // Get final state partons
1383 eventProcess.clear();
1384 workEventJet.clear();
1385 for( int i=0; i < workEvent.size(); ++i) {
1386 // Original AG+Py6 algorithm explicitly excludes tops,
1387 // leptons and photons.
1388 int id = workEvent[i].idAbs();
1389 if ((id >= ID_LEPMIN && id <= ID_LEPMAX) || id == ID_TOP
1390 || id == ID_PHOTON || id == 23 || id == 24 || id == 25) {
1391 eventProcess.append(workEvent[i]);
1392 } else {
1393 workEventJet.append(workEvent[i]);
1394 }
1395 }
1396
1397 // Initialize SlowJetHard jet algorithm with current working event
1398 if (!slowJetHard->setup(workEventJet) ) {
1399 errorMsg("Warning in JetMatchingMadgraph:sortIncomingProcess"
1400 ": the SlowJet algorithm failed on setup");
1401 return;
1402 }
1403
1404 // Get matrix element cut scale.
1405 double localQcutSq = qCutMESq;
1406 // Cluster in steps to find all hadronic jets at the scale qCutME
1407 while ( slowJetHard->sizeAll() - slowJetHard->sizeJet() > 0 ) {
1408 // Done if next step is above qCut
1409 if( slowJetHard->dNext() > localQcutSq ) break;
1410 // Done if we're at or below the number of partons in the Born state.
1411 if( slowJetHard->sizeAll()-slowJetHard->sizeJet() <= npNLO()) break;
1412 slowJetHard->doStep();
1413 }
1414
1415 // Construct a master copy of the event containing only the
1416 // hardest nPartonsNow hadronic clusters. While constructing the event,
1417 // the parton type (ID_GLUON) and status (98,99) are arbitrary.
1418 int nJets = slowJetHard->sizeJet();
1419 int nClus = slowJetHard->sizeAll();
1420 int nNow = 0;
1421 for (int i = nJets; i < nClus; ++i) {
1422 vector<int> parts;
1423 if (i < nClus-nJets) parts = slowJetHard->clusConstituents(i);
1424 else parts = slowJetHard->constituents(nClus-nJets-i);
1425 int flavour = ID_GLUON;
1426 for(int j=0; j < int(parts.size()); ++j)
1427 if (workEventJet[parts[j]].id() == ID_BOT)
1428 flavour = ID_BOT;
1429 eventProcess.append( flavour, 98,
1430 workEventJet[parts.back()].mother1(),
1431 workEventJet[parts.back()].mother2(),
1432 workEventJet[parts.back()].daughter1(),
1433 workEventJet[parts.back()].daughter2(),
1434 0, 0, slowJetHard->p(i).px(), slowJetHard->p(i).py(),
1435 slowJetHard->p(i).pz(), slowJetHard->p(i).e() );
1436 nNow++;
1437 }
1438
1439 // Done. Clean-up
1440 workEventJet.clear();
1441
1442 */
1443
1444 // Step-FxFx-2: : set the same eventProcess for both MLM and FxFx. This was only for MLM
1445 // Add the type 2 selection also for FxFx
1446
1447 // For MLM matching, simply take hard process state from workEvent,
1448 // without any preclustering.
1449 //} else {
1450 eventProcess = workEvent;
1451 //}
1452
1453 // Sort original process final state into light/heavy jets and 'other'.
1454 // Criteria:
1455 // 1 <= ID <= nQmatch, or ID == 21 --> light jet (typeIdx[0])
1456 // nQMatch < ID --> heavy jet (typeIdx[1])
1457 // All else that is colored --> other (typeIdx[2])
1458 // Note that 'typeIdx' stores indices into 'eventProcess' (after resonance
1459 // decays are omitted), while 'typeSet' stores indices into the original
1460 // process record, 'eventProcessOrig', but these indices are also valid
1461 // in 'event'.
1462 for (int i = 0; i < 3; i++) {
1463 typeIdx[i].clear();
1464 typeSet[i].clear();
1465 origTypeIdx[i].clear();
1466 }
1467 for (int i = 0; i < eventProcess.size(); i++) {
1468 // Ignore non-final state and default to 'other'
1469 if (!eventProcess[i].isFinal()) continue;
1470 int idx = -1;
1471 int orig_idx = -1;
1472
1473 // Light jets: all gluons and quarks with id less than or equal to nQmatch
1474 if (eventProcess[i].isGluon()
1475 || (eventProcess[i].idAbs() <= nQmatch) ) {
1476 orig_idx = 0;
1477 if (doFxFx) {
1478 // Crucial point FxFx: MG5 puts the scale of a not-to-be-matched quark 1 MeV lower than scalup. For
1479 // such particles, we should keep the default "2"
1480 idx = ( trunc(1000. * eventProcess[i].scale()) == trunc(1000. * infoPtr->scalup()) ) ? 0 : 2;
1481
1482 }
1483 else {
1484 // Crucial point: MG puts the scale of a non-QCD particle to eCM. For
1485 // such particles, we should keep the default "2"
1486 idx = ( eventProcess[i].scale() < 1.999 * sqrt(infoPtr->eA()
1487 * infoPtr->eB()) ) ? 0 : 2;
1488 }
1489 }
1490
1491 // Heavy jets: all quarks with id greater than nQmatch
1492 else if (eventProcess[i].idAbs() > nQmatch
1493 && eventProcess[i].idAbs() <= ID_TOP) {
1494 idx = 1;
1495 orig_idx = 1;
1496 // Update to include non-SM colored particles
1497 } else if (eventProcess[i].colType() != 0
1498 && eventProcess[i].idAbs() > ID_TOP) {
1499 idx = 1;
1500 orig_idx = 1;
1501 }
1502 if( idx < 0 ) continue;
1503 // Store
1504 typeIdx[idx].push_back(i);
1505 typeSet[idx].insert(eventProcess[i].daughter1());
1506 origTypeIdx[orig_idx].push_back(i);
1507 }
1508
1509 // Exclusive mode; if set to 2, then set based on nJet/nJetMax
1510 if (exclusiveMode == 2) {
1511
1512 // Inclusive if nJet == nJetMax, exclusive otherwise
1513 int nParton = origTypeIdx[0].size();
1514 exclusive = (nParton == nJetMax) ? false : true;
1515
1516 // Otherwise, just set as given
1517 } else {
1518 exclusive = (exclusiveMode == 0) ? false : true;
1519 }
1520
1521 // Extract partons from hardest subsystem + ISR + FSR only into
1522 // workEvent. Note no resonance showers or MPIs.
1523 subEvent(event);
1524
1525 // Store things that are necessary to perform the kT-MLM veto externally.
1526 int nParton = typeIdx[0].size();
1527 processSubsetSave.clear();
1528 for ( int i = 0; i < nParton; ++i)
1529 processSubsetSave.append( eventProcess[typeIdx[0][i]] );
1530
1531}
1532
1533//--------------------------------------------------------------------------
1534
1535// Step (2a): pick which particles to pass to the jet algorithm
1536
1537inline void JetMatchingMadgraph::jetAlgorithmInput(const Event &event,
1538 int iType) {
1539
1540 // Take input from 'workEvent' and put output in 'workEventJet'
1541 workEventJet = workEvent;
1542
1543 // Loop over particles and decide what to pass to the jet algorithm
1544 for (int i = 0; i < workEventJet.size(); ++i) {
1545 if (!workEventJet[i].isFinal()) continue;
1546
1547 // jetAllow option to disallow certain particle types
1548 if (jetAllow == 1) {
1549 // Remove all non-QCD partons from veto list
1550 if( workEventJet[i].colType() == 0 ) {
1551 workEventJet[i].statusNeg();
1552 continue;
1553 }
1554 }
1555
1556 // Get the index of this particle in original event
1557 int idx = workEventJet[i].daughter1();
1558
1559 // Start with particle idx, and afterwards track mothers
1560 while (true) {
1561
1562 // Light jets
1563 if (iType == 0) {
1564
1565 // Do not include if originates from heavy jet or 'other'
1566 if (typeSet[1].find(idx) != typeSet[1].end() ||
1567 typeSet[2].find(idx) != typeSet[2].end()) {
1568 workEventJet[i].statusNeg();
1569 break;
1570 }
1571
1572 // Made it to start of event record so done
1573 if (idx == 0) break;
1574 // Otherwise next mother and continue
1575 idx = event[idx].mother1();
1576
1577 // Heavy jets
1578 } else if (iType == 1) {
1579
1580 // Only include if originates from heavy jet
1581 if (typeSet[1].find(idx) != typeSet[1].end()) break;
1582
1583 // Made it to start of event record with no heavy jet mother,
1584 // so DO NOT include particle
1585 if (idx == 0) {
1586 workEventJet[i].statusNeg();
1587 break;
1588 }
1589
1590 // Otherwise next mother and continue
1591 idx = event[idx].mother1();
1592
1593 // Other jets
1594 } else if (iType == 2) {
1595
1596 // Only include if originates from other jet
1597 if (typeSet[2].find(idx) != typeSet[2].end()) break;
1598
1599 // Made it to start of event record with no heavy jet mother,
1600 // so DO NOT include particle
1601 if (idx == 0) {
1602 workEventJet[i].statusNeg();
1603 break;
1604 }
1605
1606 // Otherwise next mother and continue
1607 idx = event[idx].mother1();
1608
1609 } // if (iType)
1610 } // while (true)
1611 } // for (i)
1612}
1613
1614//--------------------------------------------------------------------------
1615
1616// Step (2b): run jet algorithm and provide common output
1617// This does nothing, because the jet algorithm is run several times
1618// in the matching algorithm.
1619
1620inline void JetMatchingMadgraph::runJetAlgorithm() {; }
1621
1622//--------------------------------------------------------------------------
1623
1624// Step (2c): veto decision (returning true vetoes the event)
1625
1626inline bool JetMatchingMadgraph::matchPartonsToJets(int iType) {
1627
1628 // Use different routines for light/heavy/other jets as
1629 // different veto conditions and for clarity
1630 if (iType == 0) {
1631 // Record the jet separations here, also if matchPartonsToJetsLight
1632 // returns preemptively.
1633 setDJR(workEventJet);
1634 set_nMEpartons(origTypeIdx[0].size(), typeIdx[0].size());
1635 // Perform jet matching.
1636 return (matchPartonsToJetsLight() > 0);
1637 } else if (iType == 1) {
1638 return (matchPartonsToJetsHeavy() > 0);
1639 } else {
1640 return (matchPartonsToJetsOther() > 0);
1641 }
1642
1643}
1644
1645//--------------------------------------------------------------------------
1646
1647// Step(2c): light jets
1648// Return codes are given indicating the reason for a veto.
1649// Although not currently used, they are a useful debugging tool:
1650// 0 = no veto
1651// 1 = veto as number of jets less than number of partons
1652// 2 = veto as exclusive mode and number of jets greater than
1653// number of partons
1654// 3 = veto as inclusive mode and there would be an extra jet
1655// that is harder than any matched soft jet
1656// 4 = veto as there is a parton which does not match a jet
1657
1658inline int JetMatchingMadgraph::matchPartonsToJetsLight() {
1659
1660 // Store things that are necessary to perform the kT-MLM veto externally.
1661 workEventJetSave = workEventJet;
1662 // Done if only inputs for an external vetoing procedure should be stored.
1663 if (!performVeto) return false;
1664
1665 // Count the number of hard partons
1666 int nParton = typeIdx[0].size();
1667
1668 // Initialize SlowJet with current working event
1669 if (!slowJet->setup(workEventJet) ) {
1670 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
1671 "Light: the SlowJet algorithm failed on setup");
1672 return NONE;
1673 }
1674 double localQcutSq = qCutSq;
1675 double dOld = 0.0;
1676 // Cluster in steps to find all hadronic jets at the scale qCut
1677 while ( slowJet->sizeAll() - slowJet->sizeJet() > 0 ) {
1678 if( slowJet->dNext() > localQcutSq ) break;
1679 dOld = slowJet->dNext();
1680 slowJet->doStep();
1681 }
1682 int nJets = slowJet->sizeJet();
1683 int nClus = slowJet->sizeAll();
1684
1685 // Debug printout.
1686 if (MATCHINGDEBUG) slowJet->list(true);
1687
1688 // Count of the number of hadronic jets in SlowJet accounting
1689 int nCLjets = nClus - nJets;
1690 // Get number of partons. Different for MLM and FxFx schemes.
1691 //int nRequested = (doFxFx) ? npNLO() : nParton;
1692 //Step-FxFx-3: Change nRequested subtracting the typeIdx[2] partons
1693 //Exclude the highest multiplicity sample in the case of real emissions and all typeIdx[2]
1694 //npNLO=multiplicity,nJetMax=njmax(shower_card),typeIdx[2]="Weak" jets
1695 int nRequested = (doFxFx && !(npNLO()==nJetMax && npNLO()==(typeIdx[2].size()-1) )) ? npNLO()-typeIdx[2].size() : nParton;
1696
1697 //Step-FxFx-4:For FxFx veto the real emissions that have only typeIdx=2 partons
1698 //From Step-FxFx-3 they already have negative nRequested, so this step may not be necessary
1699 //Exclude the highest multiplicity sample
1700 if (doFxFx && npNLO()<nJetMax && typeIdx[2].size()>0 && npNLO()==(typeIdx[2].size()-1)) {
1701 return MORE_JETS;
1702 }
1703//----------------
1704 //Exclude all Weak Jets for matching
1705 //if (doFxFx && typeIdx[2].size()>0) {
1706 // return MORE_JETS;
1707 //} // 2A
1708 //keep only Weak Jets for matching
1709 //if (doFxFx && typeIdx[2].size()==0) {
1710 // return MORE_JETS;
1711 //} // 2B
1712 //keep only lowest multiplicity sample @0
1713 //if (doFxFx && npNLO()==1) {
1714 // return MORE_JETS;
1715 //} // 2C
1716 //keep only highest multiplicity sample @1
1717 //if (doFxFx && npNLO()==0) {
1718 // return MORE_JETS;
1719 //} // 2D
1720//--------------
1721 // Veto event if too few hadronic jets
1722 if ( nCLjets < nRequested ) return LESS_JETS;
1723
1724 // In exclusive mode, do not allow more hadronic jets than partons
1725 if ( exclusive && !doFxFx ) {
1726 if ( nCLjets > nRequested ) return MORE_JETS;
1727 } else {
1728
1729 // For FxFx, in the non-highest multipicity, all jets need to matched to
1730 // partons. For nCLjets > nRequested, this is not possible. Hence, we can
1731 // veto here already.
1732 // if ( doFxFx && nRequested < nJetMax && nCLjets > nRequested )
1733 //Step-FxFx-5:Change the nRequested to npNLO() in the first condition
1734 //Before in Step-FxFx-3 it was nRequested=npNLO() for FxFx
1735 //This way we correctly select the non-highest multipicity regardless the nRequested
1736 if ( doFxFx && npNLO() < nJetMax && nCLjets > nRequested )
1737 return MORE_JETS;
1738
1739 // Now continue in inclusive mode.
1740 // In inclusive mode, there can be more hadronic jets than partons,
1741 // provided that all partons are properly matched to hadronic jets.
1742 // Start by setting up the jet algorithm.
1743 if (!slowJet->setup(workEventJet) ) {
1744 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
1745 "Light: the SlowJet algorithm failed on setup");
1746 return NONE;
1747 }
1748
1749 // For FxFx, continue clustering as long as the jet separation is above
1750 // qCut.
1751 if (doFxFx) {
1752 while ( slowJet->sizeAll() - slowJet->sizeJet() > 0 ) {
1753 if( slowJet->dNext() > localQcutSq ) break;
1754 slowJet->doStep();
1755 }
1756 // For MLM, cluster into hadronic jets until there are the same number as
1757 // partons.
1758 } else {
1759 while ( slowJet->sizeAll() - slowJet->sizeJet() > nParton )
1760 slowJet->doStep();
1761 }
1762
1763 // Sort partons in pT. Update local qCut value.
1764 // Hadronic jets are already sorted in pT.
1765 localQcutSq = dOld;
1766 if ( clFact >= 0. && nParton > 0 ) {
1767 vector<double> partonPt;
1768 for (int i = 0; i < nParton; ++i)
1769 partonPt.push_back( eventProcess[typeIdx[0][i]].pT2() );
1770 sort( partonPt.begin(), partonPt.end());
1771 localQcutSq = max( qCutSq, partonPt[0]);
1772 }
1773 nJets = slowJet->sizeJet();
1774 nClus = slowJet->sizeAll();
1775 }
1776 // Update scale if clustering factor is non-zero
1777 if ( clFact != 0. ) localQcutSq *= pow2(clFact);
1778
1779 Event tempEvent;
1780 tempEvent.init( "(tempEvent)", particleDataPtr);
1781 int nPass = 0;
1782 double pTminEstimate = -1.;
1783 // Construct a master copy of the event containing only the
1784 // hardest nParton hadronic clusters. While constructing the event,
1785 // the parton type (ID_GLUON) and status (98,99) are arbitrary.
1786 for (int i = nJets; i < nClus; ++i) {
1787 tempEvent.append( ID_GLUON, 98, 0, 0, 0, 0, 0, 0, slowJet->p(i).px(),
1788 slowJet->p(i).py(), slowJet->p(i).pz(), slowJet->p(i).e() );
1789 ++nPass;
1790 pTminEstimate = max( pTminEstimate, slowJet->pT(i));
1791 if(nPass == nRequested) break;
1792 }
1793
1794 int tempSize = tempEvent.size();
1795 // This keeps track of which hadronic jets are matched to parton
1796 vector<bool> jetAssigned;
1797 jetAssigned.assign( tempSize, false);
1798
1799 // This keeps track of which partons are matched to which hadronic
1800 // jets.
1801 vector< vector<bool> > partonMatchesJet;
1802 for (int i=0; i < nParton; ++i )
1803 partonMatchesJet.push_back( vector<bool>(tempEvent.size(),false) );
1804
1805 // Begin matching.
1806 // Do jet matching for FxFx.
1807 // Make sure that the nPartonsNow hardest hadronic jets are matched to any
1808 // of the nPartonsNow (+1) partons. This matching is done by attaching a jet
1809 // from the list of unmatched hadronic jets, and appending a jet from the
1810 // list of partonic jets, one at a time. The partonic jet will be clustered
1811 // with the hadronic jet or the beam if the distance measure is below the
1812 // cut. The hadronic jet is matched once this happens. Otherwise, another
1813 // partonic jet is tried. When a hadronic jet is matched to a partonic jet,
1814 // it is removed from the list of unmatched hadronic jets. This process
1815 // continues until the nPartonsNow hardest hadronic jets are matched to
1816 // partonic jets, or it is not possible to make a match for a hadronic jet.
1817 int iNow = 0;
1818 int nMatched = 0;
1819 while ( doFxFx && iNow < tempSize ) {
1820
1821 // Check if this shower jet matches any partonic jet.
1822 Event tempEventJet;
1823 tempEventJet.init("(tempEventJet)", particleDataPtr);
1824 for (int i=0; i < nParton; ++i ) {
1825
1826 //// Only assign a parton once.
1827 //for (int j=0; j < tempSize; ++j )
1828 // if ( partonMatchesJet[i][j]) continue;
1829
1830 // Attach a single hadronic jet.
1831 tempEventJet.clear();
1832 tempEventJet.append( ID_GLUON, 98, 0, 0, 0, 0, 0, 0,
1833 tempEvent[iNow].px(), tempEvent[iNow].py(),
1834 tempEvent[iNow].pz(), tempEvent[iNow].e() );
1835 // Attach the current parton.
1836 Vec4 pIn = eventProcess[typeIdx[0][i]].p();
1837 tempEventJet.append( ID_GLUON, 99, 0, 0, 0, 0, 0, 0,
1838 pIn.px(), pIn.py(), pIn.pz(), pIn.e() );
1839
1840 // Setup jet algorithm.
1841 if ( !slowJet->setup(tempEventJet) ) {
1842 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
1843 "Light: the SlowJet algorithm failed on setup");
1844 return NONE;
1845 }
1846
1847 // These are the conditions for the hadronic jet to match the parton
1848 // at the local qCut scale
1849 if ( slowJet->iNext() == tempEventJet.size() - 1
1850 && slowJet->jNext() > -1 && slowJet->dNext() < localQcutSq ) {
1851 jetAssigned[iNow] = true;
1852 partonMatchesJet[i][iNow] = true;
1853 }
1854
1855 } // End loop over hard partons.
1856
1857 // Veto if the jet could not be assigned to any parton.
1858 if ( jetAssigned[iNow] ) nMatched++;
1859
1860 // Continue;
1861 ++iNow;
1862 }
1863
1864 // Jet matching veto for FxFx
1865 if (doFxFx) {
1866// if ( nRequested < nJetMax && nMatched != nRequested )
1867// return UNMATCHED_PARTON;
1868// if ( nRequested == nJetMax && nMatched < nRequested )
1869// return UNMATCHED_PARTON;
1870 //Step-FxFx-6:Change the nRequested to npNLO() in the first condition (like in Step-FxFx-5)
1871 //Before in Step-FxFx-3 it was nRequested=npNLO() for FxFx
1872 //This way we correctly select the non-highest multipicity regardless the nRequested
1873 if ( npNLO() < nJetMax && nMatched != nRequested )
1874 return UNMATCHED_PARTON;
1875 if ( npNLO() == nJetMax && nMatched < nRequested )
1876 return UNMATCHED_PARTON;
1877 }
1878
1879 // Do jet matching for MLM.
1880 // Take the list of unmatched hadronic jets and append a parton, one at
1881 // a time. The parton will be clustered with the "closest" hadronic jet
1882 // or the beam if the distance measure is below the cut. When a hadronic
1883 // jet is matched to a parton, it is removed from the list of unmatched
1884 // hadronic jets. This process continues until all hadronic jets are
1885 // matched to partons or it is not possible to make a match.
1886 iNow = 0;
1887 while (!doFxFx && iNow < nParton ) {
1888 Event tempEventJet;
1889 tempEventJet.init("(tempEventJet)", particleDataPtr);
1890 for (int i = 0; i < tempSize; ++i) {
1891 if (jetAssigned[i]) continue;
1892 Vec4 pIn = tempEvent[i].p();
1893 // Append unmatched hadronic jets
1894 tempEventJet.append( ID_GLUON, 98, 0, 0, 0, 0, 0, 0,
1895 pIn.px(), pIn.py(), pIn.pz(), pIn.e() );
1896 }
1897
1898 Vec4 pIn = eventProcess[typeIdx[0][iNow]].p();
1899 // Append the current parton
1900 tempEventJet.append( ID_GLUON, 99, 0, 0, 0, 0, 0, 0,
1901 pIn.px(), pIn.py(), pIn.pz(), pIn.e() );
1902 if ( !slowJet->setup(tempEventJet) ) {
1903 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
1904 "Light: the SlowJet algorithm failed on setup");
1905 return NONE;
1906 }
1907 // These are the conditions for the hadronic jet to match the parton
1908 // at the local qCut scale
1909 if ( slowJet->iNext() == tempEventJet.size() - 1
1910 && slowJet->jNext() > -1 && slowJet->dNext() < localQcutSq ) {
1911 int iKnt = -1;
1912 for (int i = 0; i != tempSize; ++i) {
1913 if (jetAssigned[i]) continue;
1914 ++iKnt;
1915 // Identify the hadronic jet that matches the parton
1916 if (iKnt == slowJet->jNext() ) jetAssigned[i] = true;
1917 }
1918 } else {
1919 return UNMATCHED_PARTON;
1920 }
1921 ++iNow;
1922 }
1923
1924 // Minimal eT/pT (CellJet/SlowJet) of matched light jets.
1925 // Needed later for heavy jet vetos in inclusive mode.
1926 // This information is not used currently.
1927 if (nParton > 0 && pTminEstimate > 0) eTpTlightMin = pTminEstimate;
1928 else eTpTlightMin = -1.;
1929
1930 // Record the jet separations.
1931 setDJR(workEventJet);
1932
1933 // No veto
1934 return NONE;
1935}
1936
1937//--------------------------------------------------------------------------
1938
1939// Step(2c): heavy jets
1940// Return codes are given indicating the reason for a veto.
1941// Although not currently used, they are a useful debugging tool:
1942// 0 = no veto as there are no extra jets present
1943// 1 = veto as in exclusive mode and extra jets present
1944// 2 = veto as in inclusive mode and extra jets were harder
1945// than any matched light jet
1946
1947inline int JetMatchingMadgraph::matchPartonsToJetsHeavy() {
1948
1949 // Currently, heavy jets are unmatched
1950 // If there are no extra jets, then accept
1951 // jetMomenta is NEVER used by MadGraph and is always empty.
1952 // This check does nothing.
1953 // Rather, if there is any heavy flavor that is harder than
1954 // what is present at the LHE level, then the event should
1955 // be vetoed.
1956
1957 // if (jetMomenta.empty()) return NONE;
1958 // Count the number of hard partons
1959 int nParton = typeIdx[1].size();
1960
1961 Event tempEventJet(workEventJet);
1962
1963 double scaleF(1.0);
1964 // Rescale the heavy partons that are from the hard process to
1965 // have pT=collider energy. Soft/collinear gluons will cluster
1966 // onto them, leaving a remnant of hard emissions.
1967 for( int i=0; i<nParton; ++i) {
1968 scaleF = eventProcessOrig[0].e()/workEventJet[typeIdx[1][i]].pT();
1969 tempEventJet[typeIdx[1][i]].rescale5(scaleF);
1970 }
1971
1972 if (!hjSlowJet->setup(tempEventJet) ) {
1973 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
1974 "Heavy: the SlowJet algorithm failed on setup");
1975 return NONE;
1976 }
1977
1978
1979 while ( hjSlowJet->sizeAll() - hjSlowJet->sizeJet() > 0 ) {
1980 if( hjSlowJet->dNext() > qCutSq ) break;
1981 hjSlowJet->doStep();
1982 }
1983
1984 int nCLjets(0);
1985 // Count the number of clusters with pT>qCut. This includes the
1986 // original hard partons plus any hard emissions.
1987 for(int idx=0 ; idx< hjSlowJet->sizeAll(); ++idx) {
1988 if( hjSlowJet->pT(idx) > sqrt(qCutSq) ) nCLjets++;
1989 }
1990
1991 // Debug printout.
1992 if (MATCHINGDEBUG) hjSlowJet->list(true);
1993
1994 // Count of the number of hadronic jets in SlowJet accounting
1995 // int nCLjets = nClus - nJets;
1996 // Get number of partons. Different for MLM and FxFx schemes.
1997 int nRequested = nParton;
1998
1999 // Veto event if too few hadronic jets
2000 if ( nCLjets < nRequested ) {
2001 if (MATCHINGDEBUG) cout << "veto : hvy LESS_JETS " << endl;
2002 if (MATCHINGDEBUG) cout << "nCLjets = " << nCLjets << "; nRequest = "
2003 << nRequested << endl;
2004 return LESS_JETS;
2005 }
2006
2007 // In exclusive mode, do not allow more hadronic jets than partons
2008 if ( exclusive ) {
2009 if ( nCLjets > nRequested ) {
2010 if (MATCHINGDEBUG) cout << "veto : excl hvy MORE_JETS " << endl;
2011 return MORE_JETS;
2012 }
2013 }
2014
2015 // No extra jets were present so no veto
2016 return NONE;
2017}
2018
2019//--------------------------------------------------------------------------
2020
2021// Step(2c): other jets
2022// Return codes are given indicating the reason for a veto.
2023// Although not currently used, they are a useful debugging tool:
2024// 0 = no veto as there are no extra jets present
2025// 1 = veto as in exclusive mode and extra jets present
2026// 2 = veto as in inclusive mode and extra jets were harder
2027// than any matched light jet
2028
2029inline int JetMatchingMadgraph::matchPartonsToJetsOther() {
2030
2031 // Currently, heavy jets are unmatched
2032 // If there are no extra jets, then accept
2033 // jetMomenta is NEVER used by MadGraph and is always empty.
2034 // This check does nothing.
2035 // Rather, if there is any heavy flavor that is harder than
2036 // what is present at the LHE level, then the event should
2037 // be vetoed.
2038
2039 // if (jetMomenta.empty()) return NONE;
2040 // Count the number of hard partons
2041 int nParton = typeIdx[2].size();
2042
2043 Event tempEventJet(workEventJet);
2044
2045 double scaleF(1.0);
2046 // Rescale the heavy partons that are from the hard process to
2047 // have pT=collider energy. Soft/collinear gluons will cluster
2048 // onto them, leaving a remnant of hard emissions.
2049 for( int i=0; i<nParton; ++i) {
2050 scaleF = eventProcessOrig[0].e()/workEventJet[typeIdx[2][i]].pT();
2051 tempEventJet[typeIdx[2][i]].rescale5(scaleF);
2052 }
2053
2054 if (!hjSlowJet->setup(tempEventJet) ) {
2055 errorMsg("Warning in JetMatchingMadgraph:matchPartonsToJets"
2056 "Heavy: the SlowJet algorithm failed on setup");
2057 return NONE;
2058 }
2059
2060
2061 while ( hjSlowJet->sizeAll() - hjSlowJet->sizeJet() > 0 ) {
2062 if( hjSlowJet->dNext() > qCutSq ) break;
2063 hjSlowJet->doStep();
2064 }
2065
2066 int nCLjets(0);
2067 // Count the number of clusters with pT>qCut. This includes the
2068 // original hard partons plus any hard emissions.
2069 for(int idx=0 ; idx< hjSlowJet->sizeAll(); ++idx) {
2070 if( hjSlowJet->pT(idx) > sqrt(qCutSq) ) nCLjets++;
2071 }
2072
2073 // Debug printout.
2074 if (MATCHINGDEBUG) hjSlowJet->list(true);
2075
2076 // Count of the number of hadronic jets in SlowJet accounting
2077 // int nCLjets = nClus - nJets;
2078 // Get number of partons. Different for MLM and FxFx schemes.
2079 int nRequested = nParton;
2080
2081 // Veto event if too few hadronic jets
2082 if ( nCLjets < nRequested ) {
2083 if (MATCHINGDEBUG) cout << "veto : other LESS_JETS " << endl;
2084 if (MATCHINGDEBUG) cout << "nCLjets = " << nCLjets << "; nRequest = "
2085 << nRequested << endl;
2086 return LESS_JETS;
2087 }
2088
2089 // In exclusive mode, do not allow more hadronic jets than partons
2090 if ( exclusive ) {
2091 if ( nCLjets > nRequested ) {
2092 if (MATCHINGDEBUG) cout << "veto : excl other MORE_JETS" << endl;
2093 return MORE_JETS;
2094 }
2095 }
2096
2097 // No extra jets were present so no veto
2098 return NONE;
2099}
2100
2101//==========================================================================
2102
2103} // end namespace Pythia8
2104
2105#endif // end Pythia8_JetMatching_H
02106
=== modified file 'Template/NLO/MCatNLO/Scripts/MCatNLO_MadFKS_PYTHIA8.Script'
--- Template/NLO/MCatNLO/Scripts/MCatNLO_MadFKS_PYTHIA8.Script 2021-04-15 15:17:31 +0000
+++ Template/NLO/MCatNLO/Scripts/MCatNLO_MadFKS_PYTHIA8.Script 2021-11-12 09:03:34 +0000
@@ -230,23 +230,33 @@
230230
231if [ ! -d $PYTHIA8LOCATION/xmldoc ]231if [ ! -d $PYTHIA8LOCATION/xmldoc ]
232then232then
233 PY8VER="8.2"233 if [ -f $PYTHIA8LOCATION/share/Pythia8/xmldoc/Version.xml ]
234 echo ' USING PYTHIA 8, version >= 8.200'234 then
235 chmod +x $PYTHIA8LOCATION/bin/pythia8-config235 while read line; do
236 read HEPMCINCLIB <<< $($PYTHIA8LOCATION/bin/pythia8-config --hepmc2)236 if [[ $line == *"Pythia:versionNumber"*"8.2"* ]]; then PY8VER="8.2" ; echo ' USING PYTHIA 8.2xy' ; fi
237 if [[ $line == *"Pythia:versionNumber"*"8.3"* ]]; then PY8VER="8.3" ; echo ' USING PYTHIA 8.3xy' ; fi
238 done < $PYTHIA8LOCATION/share/Pythia8/xmldoc/Version.xml
239 else
240 echo "Cannot determine Pythia8 version, stopping run"
241 exit -1
242 fi
243 chmod +x $PYTHIA8LOCATION/bin/pythia8-config
244 read HEPMCINCLIB <<< $($PYTHIA8LOCATION/bin/pythia8-config --hepmc2)
237else245else
238 PY8VER="8.1"246 PY8VER="8.1"
239 echo ' USING PYTHIA 8, version < 8.200'247 echo ' USING PYTHIA 8.1xy'
240fi248fi
241249
242if [ "$PY8UTI" != "" ]250if [ "$PY8UTI" != "" ]
243then251then
244 if [ $PY8VER == "8.1" ]; then cp -rf $thisdir/srcPythia8/Pythia8.cc $thisdir/Pythia8.cc; fi252 if [ $PY8VER == "8.1" ]; then cp -rf $thisdir/srcPythia8/Pythia8.cc $thisdir/Pythia8.cc; fi
245 if [ $PY8VER == "8.2" ]; then cp -rf $thisdir/srcPythia8/Pythia82.cc $thisdir/Pythia82.cc; fi253 if [ $PY8VER == "8.2" ]; then cp -rf $thisdir/srcPythia8/Pythia82.cc $thisdir/Pythia82.cc; fi
254 if [ $PY8VER == "8.3" ]; then cp -rf $thisdir/srcPythia8/Pythia83.cc $thisdir/Pythia83.cc; fi
246 cp -rf $thisdir/srcPythia8/Makefile $thisdir/Makefile255 cp -rf $thisdir/srcPythia8/Makefile $thisdir/Makefile
247else256else
248 if [ $PY8VER == "8.1" ]; then cp -rf $thisdir/srcPythia8/Pythia8_hep.cc $thisdir/Pythia8.cc; fi257 if [ $PY8VER == "8.1" ]; then cp -rf $thisdir/srcPythia8/Pythia8_hep.cc $thisdir/Pythia8.cc; fi
249 if [ $PY8VER == "8.2" ]; then cp -rf $thisdir/srcPythia8/Pythia82_hep.cc $thisdir/Pythia82.cc; fi258 if [ $PY8VER == "8.2" ]; then cp -rf $thisdir/srcPythia8/Pythia82_hep.cc $thisdir/Pythia82.cc; fi
259 if [ $PY8VER == "8.3" ]; then cp -rf $thisdir/srcPythia8/Pythia83_hep.cc $thisdir/Pythia83.cc; fi
250 cp -rf $thisdir/srcPythia8/Makefile_hep $thisdir/Makefile260 cp -rf $thisdir/srcPythia8/Makefile_hep $thisdir/Makefile
251fi261fi
252if [ -f $thisdir/Pythia8.exe ]262if [ -f $thisdir/Pythia8.exe ]
@@ -256,6 +266,7 @@
256266
257if [ $PY8VER == "8.1" ]; then cp -rf $PYTHIA8LOCATION/xmldoc $thisdir; fi267if [ $PY8VER == "8.1" ]; then cp -rf $PYTHIA8LOCATION/xmldoc $thisdir; fi
258if [ $PY8VER == "8.2" ]; then cp -rf $PYTHIA8LOCATION/share/Pythia8/xmldoc $thisdir; fi268if [ $PY8VER == "8.2" ]; then cp -rf $PYTHIA8LOCATION/share/Pythia8/xmldoc $thisdir; fi
269if [ $PY8VER == "8.3" ]; then cp -rf $PYTHIA8LOCATION/share/Pythia8/xmldoc $thisdir; fi
259PY8UTIMAKE="PY8UTI="$PY8UTI270PY8UTIMAKE="PY8UTI="$PY8UTI
260FORFILEMAKE="FORFILE="$PY8UTI271FORFILEMAKE="FORFILE="$PY8UTI
261HEPMCMAKE="HEPMCINCLIB="$HEPMCINCLIB272HEPMCMAKE="HEPMCINCLIB="$HEPMCINCLIB
@@ -263,6 +274,7 @@
263274
264if [ $PY8VER == "8.1" ]; then make Pythia8 "$PY8UTIMAKE" "$FORFILEMAKE" "$LGFORTRANMAKE" "$LIBSMAKE" "$LIBSMAKEP" "$INCLMAKE"; fi275if [ $PY8VER == "8.1" ]; then make Pythia8 "$PY8UTIMAKE" "$FORFILEMAKE" "$LGFORTRANMAKE" "$LIBSMAKE" "$LIBSMAKEP" "$INCLMAKE"; fi
265if [ $PY8VER == "8.2" ]; then make Pythia82 "$PY8UTIMAKE" "$FORFILEMAKE" "$LGFORTRANMAKE" "$LIBSMAKE" "$LIBSMAKEP" "$INCLMAKE" "$HEPMCMAKE"; fi276if [ $PY8VER == "8.2" ]; then make Pythia82 "$PY8UTIMAKE" "$FORFILEMAKE" "$LGFORTRANMAKE" "$LIBSMAKE" "$LIBSMAKEP" "$INCLMAKE" "$HEPMCMAKE"; fi
277if [ $PY8VER == "8.3" ]; then make Pythia83 "$PY8UTIMAKE" "$FORFILEMAKE" "$LGFORTRANMAKE" "$LIBSMAKE" "$LIBSMAKEP" "$INCLMAKE" "$HEPMCMAKE"; fi
266278
267cd $thisdir279cd $thisdir
268if [ ! -f $thisdir/Pythia8.exe ]280if [ ! -f $thisdir/Pythia8.exe ]
@@ -366,6 +378,7 @@
366! 3) Beam-parameter settings.378! 3) Beam-parameter settings.
367Beams:frameType = 4 ! LHE initialization379Beams:frameType = 4 ! LHE initialization
368Beams:LHEF = events.lhe ! Input LHE file380Beams:LHEF = events.lhe ! Input LHE file
381Beams:setProductionScalesFromLHEF=on ! Identify the Weak Jets
369382
370! 4) Switch on/off the key event-generation steps.383! 4) Switch on/off the key event-generation steps.
371EOF384EOF
372385
=== modified file 'Template/NLO/MCatNLO/srcPythia8/Makefile'
--- Template/NLO/MCatNLO/srcPythia8/Makefile 2015-12-04 17:56:46 +0000
+++ Template/NLO/MCatNLO/srcPythia8/Makefile 2021-11-12 09:03:34 +0000
@@ -51,6 +51,11 @@
51 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \51 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \
52 -lHepMCfio $(LIBGFORTRAN) $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \52 -lHepMCfio $(LIBGFORTRAN) $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \
5353
54Pythia83: $(FORFILE) $(PYTHIA8LOCATION)/$(LIBDIR)/libpythia8.a
55 $(CXX) $(CXXFLAGS) -I$(PYTHIA8LOCATION)/$(INCDIR) \
56 -I$(TOPDIR)/$(INCDIR) $(INCLOPTION) $@.cc -o Pythia8.exe $(FORFILE) \
57 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \
58 -lHepMCfio $(LIBGFORTRAN) $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \
5459
55.PHONY: clean60.PHONY: clean
56clean:61clean:
5762
=== modified file 'Template/NLO/MCatNLO/srcPythia8/Makefile_hep'
--- Template/NLO/MCatNLO/srcPythia8/Makefile_hep 2015-12-04 17:56:46 +0000
+++ Template/NLO/MCatNLO/srcPythia8/Makefile_hep 2021-11-12 09:03:34 +0000
@@ -51,6 +51,12 @@
51 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \51 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \
52 $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \52 $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \
5353
54Pythia83: $(FORFILE) $(PYTHIA8LOCATION)/$(LIBDIR)/libpythia8.a
55 $(CXX) $(CXXFLAGS) -I$(PYTHIA8LOCATION)/$(INCDIR) \
56 -I$(TOPDIR)/$(INCDIR) $(INCLOPTION) $@.cc -o Pythia8.exe $(FORFILE) \
57 -L$(PYTHIA8LOCATION)/$(LIBDIR) -lpythia8 $(LIBGZIP) \
58 $(HEPMCINCLIB) $(EXTRAPATHS) $(EXTRALIBS) \
59
54.PHONY: clean60.PHONY: clean
55clean:61clean:
56 rm -rf *.exe62 rm -rf *.exe
5763
=== added file 'Template/NLO/MCatNLO/srcPythia8/Pythia83.cc'
--- Template/NLO/MCatNLO/srcPythia8/Pythia83.cc 1970-01-01 00:00:00 +0000
+++ Template/NLO/MCatNLO/srcPythia8/Pythia83.cc 2021-11-12 09:03:34 +0000
@@ -0,0 +1,171 @@
1// Driver for Pythia 8. Reads an input file dynamically created on
2// the basis of the inputs specified in MCatNLO_MadFKS_PY8.Script
3#include "Pythia8/Pythia.h"
4#include "Pythia8Plugins/HepMC2.h"
5#include "Pythia8Plugins/aMCatNLOHooks.h"
6#include "Pythia8Plugins/CombineMatchingInput.h"
7#include "HepMC/GenEvent.h"
8#include "HepMC/IO_GenEvent.h"
9#include "HepMC/IO_BaseClass.h"
10#include "HepMC/IO_HEPEVT.h"
11#include "HepMC/HEPEVT_Wrapper.h"
12#include "fstream"
13#include "LHEFRead.h"
14
15using namespace Pythia8;
16
17extern "C" {
18 extern struct {
19 double EVWGT;
20 } cevwgt_;
21}
22#define cevwgt cevwgt_
23
24extern "C" {
25 void pyabeg_(int&,char(*)[50]);
26 void pyaend_(double&);
27 void pyanal_(int&,double(*));
28}
29
30int main() {
31 Pythia pythia;
32
33 int cwgtinfo_nn;
34 char cwgtinfo_weights_info[1024][50];
35 double cwgt_ww[1024];
36
37 string inputname="Pythia8.cmd",outputname="Pythia8.hep";
38
39 pythia.readFile(inputname.c_str());
40
41 //Create UserHooks pointer for the FxFX matching. Stop if it failed. Pass pointer to Pythia.
42 CombineMatchingInput combined;
43 //UserHooks* matching = NULL;
44
45 string filename = pythia.word("Beams:LHEF");
46
47 MyReader read(filename);
48 read.lhef_read_wgtsinfo_(cwgtinfo_nn,cwgtinfo_weights_info);
49 pyabeg_(cwgtinfo_nn,cwgtinfo_weights_info);
50
51 int nAbort=10;
52 int nPrintLHA=1;
53 int iAbort=0;
54 int iPrintLHA=0;
55 int nstep=5000;
56 int iEventtot=pythia.mode("Main:numberOfEvents");
57 int iEventshower=pythia.mode("Main:spareMode1");
58 string evt_norm=pythia.word("Main:spareWord1");
59 int iEventtot_norm=iEventtot;
60 if (evt_norm != "sum"){
61 iEventtot_norm=1;
62 }
63
64 //FxFx merging
65 bool isFxFx=pythia.flag("JetMatching:doFxFx");
66 if (isFxFx) {
67 combined.setHook(pythia);
68 //matching = combined->getHook(pythia);
69 //if (!matching) {
70 // std::cout << " Failed to initialise jet matching structures.\n"
71 // << " Program stopped.";
72 // return 1;
73 //}
74 //pythia.setUserHooksPtr(matching);
75 int nJmax=pythia.mode("JetMatching:nJetMax");
76 double Qcut=pythia.parm("JetMatching:qCut");
77 double PTcut=pythia.parm("JetMatching:qCutME");
78 if (Qcut <= PTcut || Qcut <= 0.) {
79 std::cout << " \n";
80 std::cout << "Merging scale (shower_card.dat) smaller than pTcut (run_card.dat)"
81 << Qcut << " " << PTcut << "\n";
82 return 0;
83 }
84 }
85
86 // Initialise Pythia.
87 if (!pythia.init()) {
88 cout << "Error: could not initialise Pythia" << endl;
89 return 0;
90 };
91
92 HepMC::IO_BaseClass *_hepevtio;
93 HepMC::Pythia8ToHepMC ToHepMC;
94 HepMC::IO_GenEvent ascii_io(outputname.c_str(), std::ios::out);
95 double nSelected;
96 int nTry;
97 double norm;
98
99 // Cross section
100 double sigmaTotal = 0.;
101 int iLHEFread=0;
102
103 for (int iEvent = 0; ; ++iEvent) {
104 if (!pythia.next()) {
105 if (++iAbort < nAbort) continue;
106 break;
107 }
108 // the number of events read by Pythia so far
109 nSelected=double(pythia.info.nSelected());
110 // normalisation factor for the default analyses defined in pyanal_
111 norm=iEventtot_norm*iEvent/nSelected;
112
113 if (nSelected >= iEventshower) break;
114 if (pythia.info.isLHA() && iPrintLHA < nPrintLHA) {
115 pythia.LHAeventList();
116 pythia.info.list();
117 pythia.process.list();
118 pythia.event.list();
119 ++iPrintLHA;
120 }
121
122 double evtweight = pythia.info.weight();
123 double normhepmc;
124 // Add the weight of the current event to the cross section.
125 normhepmc = 1. / double(iEventshower);
126 if (evt_norm != "sum") {
127 sigmaTotal += evtweight*normhepmc;
128 } else {
129 sigmaTotal += evtweight*normhepmc*iEventtot;
130 }
131
132 HepMC::GenEvent* hepmcevt = new HepMC::GenEvent();
133 ToHepMC.fill_next_event( pythia, hepmcevt );
134
135 //define the IO_HEPEVT
136 _hepevtio = new HepMC::IO_HEPEVT;
137 _hepevtio->write_event(hepmcevt);
138
139 //event weight
140 cevwgt.EVWGT=hepmcevt->weights()[0];
141
142 //call the FORTRAN analysis for this event. First, make sure to
143 //re-synchronize the reading of the weights with the reading of
144 //the event. (They get desynchronised if an event was rejected).
145 nTry=pythia.info.nTried();
146 for (; iLHEFread<nTry ; ++iLHEFread) {
147 read.lhef_read_wgts_(cwgt_ww);
148 }
149 cwgt_ww[0]=cevwgt.EVWGT;
150 pyanal_(cwgtinfo_nn,cwgt_ww);
151
152 if (iEvent % nstep == 0 && iEvent >= 100){
153 pyaend_(norm);
154 }
155 delete hepmcevt;
156 }
157 pyaend_(norm);
158
159 pythia.stat();
160 if (isFxFx){
161 std::cout << " \n";
162 std::cout << "*********************************************************************** \n";
163 std::cout << "*********************************************************************** \n";
164 std::cout << "Cross section, including FxFx merging is: "
165 << sigmaTotal << "\n";
166 std::cout << "*********************************************************************** \n";
167 std::cout << "*********************************************************************** \n";
168 }
169
170 return 0;
171}
0172
=== added file 'Template/NLO/MCatNLO/srcPythia8/Pythia83_hep.cc'
--- Template/NLO/MCatNLO/srcPythia8/Pythia83_hep.cc 1970-01-01 00:00:00 +0000
+++ Template/NLO/MCatNLO/srcPythia8/Pythia83_hep.cc 2021-11-12 09:03:34 +0000
@@ -0,0 +1,121 @@
1// Driver for Pythia 8. Reads an input file dynamically created on
2// the basis of the inputs specified in MCatNLO_MadFKS_PY8.Script
3#include "Pythia8/Pythia.h"
4#include "Pythia8Plugins/HepMC2.h"
5#include "Pythia8Plugins/aMCatNLOHooks.h"
6#include "Pythia8Plugins/CombineMatchingInput.h"
7#include "HepMC/GenEvent.h"
8#include "HepMC/IO_GenEvent.h"
9
10using namespace Pythia8;
11
12int main() {
13 Pythia pythia;
14
15 string inputname="Pythia8.cmd",outputname="Pythia8.hep";
16
17 pythia.readFile(inputname.c_str());
18
19 //Create UserHooks pointer for the FxFX matching. Stop if it failed. Pass pointer to Pythia.
20 CombineMatchingInput combined;
21 //UserHooks* matching = NULL;
22
23 int nAbort=10;
24 int nPrintLHA=1;
25 int iAbort=0;
26 int iPrintLHA=0;
27 int iEventtot=pythia.mode("Main:numberOfEvents");
28 int iEventshower=pythia.mode("Main:spareMode1");
29 string evt_norm=pythia.word("Main:spareWord1");
30
31 //FxFx merging
32 bool isFxFx=pythia.flag("JetMatching:doFxFx");
33 if (isFxFx) {
34 combined.setHook(pythia);
35 //matching = combined->getHook(pythia);
36 //if (!matching) {
37 // std::cout << " Failed to initialise jet matching structures.\n"
38 // << " Program stopped.";
39 // return 1;
40 //}
41 //pythia.setUserHooksPtr(matching);
42 int nJmax=pythia.mode("JetMatching:nJetMax");
43 double Qcut=pythia.parm("JetMatching:qCut");
44 double PTcut=pythia.parm("JetMatching:qCutME");
45 if (Qcut <= PTcut || Qcut <= 0.) {
46 std::cout << " \n";
47 std::cout << "Merging scale (shower_card.dat) smaller than pTcut (run_card.dat)"
48 << Qcut << " " << PTcut << "\n";
49 return 0;
50 }
51 }
52
53 // Initialise Pythia.
54 if (!pythia.init()) {
55 cout << "Error: could not initialise Pythia" << endl;
56 return 0;
57 };
58
59 HepMC::Pythia8ToHepMC ToHepMC;
60 HepMC::IO_GenEvent ascii_io(outputname.c_str(), std::ios::out);
61 // Do not store cross section information, as this will be done manually.
62 ToHepMC.set_store_pdf(false);
63 ToHepMC.set_store_proc(false);
64 ToHepMC.set_store_xsec(false);
65
66 // Cross section an error.
67 double sigmaTotal = 0.;
68 double errorTotal = 0.;
69
70 for (int iEvent = 0; ; ++iEvent) {
71 if (!pythia.next()) {
72 if (++iAbort < nAbort) continue;
73 break;
74 }
75 // the number of events read by Pythia so far
76 int nSelected=pythia.info.nSelected();
77
78 if (nSelected > iEventshower) break;
79 if (pythia.info.isLHA() && iPrintLHA < nPrintLHA) {
80 pythia.LHAeventList();
81 pythia.info.list();
82 pythia.process.list();
83 pythia.event.list();
84 ++iPrintLHA;
85 }
86
87 HepMC::GenEvent* hepmcevt = new HepMC::GenEvent();
88 double evtweight = pythia.info.weight();
89 double normhepmc;
90 // ALWAYS NORMALISE HEPMC WEIGHTS TO SUM TO THE CROSS SECTION
91 if (evt_norm != "sum") {
92 normhepmc = 1. / double(iEventshower);
93 } else {
94 normhepmc = double(iEventtot) / double(iEventshower);
95 }
96 sigmaTotal += evtweight*normhepmc;
97 hepmcevt->weights().push_back(evtweight*normhepmc);
98 ToHepMC.fill_next_event( pythia, hepmcevt );
99 // Add the weight of the current event to the cross section.
100 // Report cross section to hepmc
101 HepMC::GenCrossSection xsec;
102 xsec.set_cross_section( sigmaTotal, pythia.info.sigmaErr() );
103 hepmcevt->set_cross_section( xsec );
104 // Write the HepMC event to file. Done with it.
105 ascii_io << hepmcevt;
106 delete hepmcevt;
107 }
108
109 pythia.stat();
110 if (isFxFx){
111 std::cout << " \n";
112 std::cout << "*********************************************************************** \n";
113 std::cout << "*********************************************************************** \n";
114 std::cout << "Cross section, including FxFx merging is: "
115 << sigmaTotal << "\n";
116 std::cout << "*********************************************************************** \n";
117 std::cout << "*********************************************************************** \n";
118 }
119
120 return 0;
121}
0122
=== removed file 'Template/NLO/Source/genps.inc'
=== modified file 'Template/NLO/Source/make_opts.inc'
--- Template/NLO/Source/make_opts.inc 2020-09-16 12:13:39 +0000
+++ Template/NLO/Source/make_opts.inc 2021-11-12 09:03:34 +0000
@@ -93,23 +93,17 @@
93 endif93 endif
94 llhapdf = $(shell $(lhapdf) --libs)94 llhapdf = $(shell $(lhapdf) --libs)
95 reweight_xsec_events_pdf_dummy=95 reweight_xsec_events_pdf_dummy=
96 # check if we need to activate c++11 (for lhapdf6.2)
97 ifeq ($(origin CXX),default)
98 ifeq ($lhapdfversion$lhapdfsubversion,62)
99 CXX=$(DEFAULT_CPP_COMPILER) -std=c++11
100 else
101 CXX=$(DEFAULT_CPP_COMPILER)
102 endif
103 endif
104else96else
105 alfas_functions=alfas_functions97 alfas_functions=alfas_functions
106 llhapdf=98 llhapdf=
107 reweight_xsec_events_pdf_dummy=reweight_xsec_events_pdf_dummy.o99 reweight_xsec_events_pdf_dummy=reweight_xsec_events_pdf_dummy.o
108 # Set CXX unless it's defined by an environment variable100endif
109 ifeq ($(origin CXX),default)101
110 CXX=$(DEFAULT_CPP_COMPILER)102# Set CXX unless it's defined by an environment variable
111 endif103ifeq ($(origin CXX),default)
112endif104 CXX=$(DEFAULT_CPP_COMPILER) -std=c++11
105endif
106
113107
114# Option PineAPPL108# Option PineAPPL
115ifneq ($(pineappl),)109ifneq ($(pineappl),)
116110
=== removed file 'Template/NLO/Source/maxconfigs.inc'
=== removed file 'Template/NLO/Source/maxparticles.inc'
=== modified file 'Template/NLO/SubProcesses/BinothLHA.f'
--- Template/NLO/SubProcesses/BinothLHA.f 2020-06-26 09:54:58 +0000
+++ Template/NLO/SubProcesses/BinothLHA.f 2021-11-12 09:03:34 +0000
@@ -8,6 +8,7 @@
8 implicit none8 implicit none
9 include "nexternal.inc"9 include "nexternal.inc"
10 include "coupl.inc"10 include "coupl.inc"
11 include "../../Source/MODEL/input.inc"
11 include 'born_nhel.inc'12 include 'born_nhel.inc'
12 double precision pi, zero,mone13 double precision pi, zero,mone
13 parameter (pi=3.1415926535897932385d0)14 parameter (pi=3.1415926535897932385d0)
@@ -57,6 +58,7 @@
57 integer getordpowfromindex_ml558 integer getordpowfromindex_ml5
58 integer orders_to_amp_split_pos59 integer orders_to_amp_split_pos
59 logical, allocatable, save :: keep_order(:)60 logical, allocatable, save :: keep_order(:)
61 include 'a0Gmuconv.inc'
60 include 'orders.inc'62 include 'orders.inc'
61 integer amp_orders(nsplitorders)63 integer amp_orders(nsplitorders)
62 integer split_amp_orders(nsplitorders), iamp64 integer split_amp_orders(nsplitorders), iamp
@@ -74,10 +76,17 @@
7476
75 logical updateloop77 logical updateloop
76 common /to_updateloop/updateloop78 common /to_updateloop/updateloop
79
80 integer get_n_tagged_photons
81 external get_n_tagged_photons
82 double precision get_virtual_a0Gmu_conv
83 external get_virtual_a0Gmu_conv
84 integer ntagph, qed_pow_b
77c masses85c masses
78 include 'pmass.inc'86 include 'pmass.inc'
79 data nbad / 0 /87 data nbad / 0 /
8088
89
81 IOErrCounter = 090 IOErrCounter = 0
82c update the ren_scale for MadLoop and the couplings (should be the91c update the ren_scale for MadLoop and the couplings (should be the
83c Ellis-Sexton scale)92c Ellis-Sexton scale)
@@ -93,8 +102,7 @@
93 single = 0d0102 single = 0d0
94 double = 0d0103 double = 0d0
95 born_hel_from_virt = 0d0104 born_hel_from_virt = 0d0
96C reset the amp_split array105C reset the various arrays
97 amp_split(1:amp_split_size) = 0d0
98 amp_split_finite_ML(1:amp_split_size) = 0d0106 amp_split_finite_ML(1:amp_split_size) = 0d0
99 amp_split_poles_ML(1:amp_split_size,1) = 0d0107 amp_split_poles_ML(1:amp_split_size,1) = 0d0
100 amp_split_poles_ML(1:amp_split_size,2) = 0d0108 amp_split_poles_ML(1:amp_split_size,2) = 0d0
@@ -256,6 +264,32 @@
256c endif264c endif
257c virt_wgt=virt_wgt+conversion*born_wgt*ao2pi265c virt_wgt=virt_wgt+conversion*born_wgt*ao2pi
258c======================================================================266c======================================================================
267
268c======================================================================
269c If there are tagged photon and other particles in the process,
270C one must use a mixed Gmu-alpha0 renormalisation.
271 ntagph = get_n_tagged_photons()
272 if (ntagph.ne.0) then
273 do i = 1, AMP_SPLIT_SIZE_BORN
274 call amp_split_pos_to_orders(i, amp_orders)
275 born_wgt = amp_split(i)
276 ! this is the number of powers of 'e' in the born
277 qed_pow_b = amp_orders(qed_pos)
278 amp_orders(qed_pos) = amp_orders(qed_pos) + 2
279 if (amp_orders(qed_pos).gt.NLO_ORDERS(qed_pos)) cycle
280
281 amp_split_poles_ML(orders_to_amp_split_pos(amp_orders),1) =
282 $ amp_split_poles_ML(orders_to_amp_split_pos(amp_orders),1) +
283 $ get_virtual_a0Gmu_conv(qed_pow_b,ntagph,1,born_wgt)
284
285 amp_split_finite_ML(orders_to_amp_split_pos(amp_orders)) =
286 $ amp_split_finite_ML(orders_to_amp_split_pos(amp_orders)) +
287 $ get_virtual_a0Gmu_conv(qed_pow_b,ntagph,0,born_wgt)
288
289 enddo
290 endif
291c======================================================================
292
259c293c
260c Check poles for the first PS points when doing MC over helicities, and294c Check poles for the first PS points when doing MC over helicities, and
261c for all phase-space points when not doing MC over helicities. Skip295c for all phase-space points when not doing MC over helicities. Skip
@@ -268,7 +302,7 @@
268 polecheck_passed = .true.302 polecheck_passed = .true.
269 ! loop over the full result and each of the amp_split303 ! loop over the full result and each of the amp_split
270 ! contribution304 ! contribution
271 do iamp=0,amp_split_size305 do iamp=1,amp_split_size
272 ! skip 0 contributions in the amp_split array306 ! skip 0 contributions in the amp_split array
273 if (iamp.ne.0) then307 if (iamp.ne.0) then
274 if (amp_split_poles_FKS(iamp,1).eq.0d0.and.308 if (amp_split_poles_FKS(iamp,1).eq.0d0.and.
275309
=== modified file 'Template/NLO/SubProcesses/add_write_info.f'
--- Template/NLO/SubProcesses/add_write_info.f 2018-05-01 13:46:54 +0000
+++ Template/NLO/SubProcesses/add_write_info.f 2021-11-12 09:03:34 +0000
@@ -92,8 +92,8 @@
92 data (xdir(i),i=1,3) /0,0,1/92 data (xdir(i),i=1,3) /0,0,1/
9393
94c For (n+1)-body this is the configuration mapping94c For (n+1)-body this is the configuration mapping
95 integer mapconfig(0:lmaxconfigs), this_config95 integer this_config
96 common/to_mconfigs/mapconfig, this_config96 common/to_mconfigs/this_config
9797
98c For shifting QCD partons from zero to their mass-shell98c For shifting QCD partons from zero to their mass-shell
99 double precision x(99),p(0:3,99)99 double precision x(99),p(0:3,99)
@@ -119,6 +119,14 @@
119 & ,fksfather_lhe(fks_configs) ,ipartner_lhe(fks_configs)119 & ,fksfather_lhe(fks_configs) ,ipartner_lhe(fks_configs)
120 common/cto_LHE1/iSorH_lhe,ifks_lhe,jfks_lhe,120 common/cto_LHE1/iSorH_lhe,ifks_lhe,jfks_lhe,
121 # fksfather_lhe,ipartner_lhe121 # fksfather_lhe,ipartner_lhe
122c pt_clust string
123 integer need_matching(nexternal)
124 common /c_need_matching_to_write/ need_matching
125 double precision ptclus
126 CHARACTER temp*600,temp0*7,integ*1,float*18
127 CHARACTER integfour*4
128 CHARACTER(LEN=1000) ptclusstring
129 common /c_ptclusstring/ ptclusstring
122 include 'orders.inc'130 include 'orders.inc'
123 logical is_aorg(nexternal)131 logical is_aorg(nexternal)
124 common /c_is_aorg/is_aorg132 common /c_is_aorg/is_aorg
@@ -581,6 +589,38 @@
581 pb(j,ito(i))=pb(j,i)589 pb(j,ito(i))=pb(j,i)
582 enddo590 enddo
583 enddo591 enddo
592
593
594! write the ptclusstring that knows about which partons should be
595! considered in the MLM-like matching
596 if (ickkw.eq.3) then
597 if (nincoming.ne.2) then
598 write (*,*) 'Need to incoming particles with ickkw=3 '/
599 $ /'(add_write_info.f)'
600 stop
601 endif
602 temp0='<scales '
603 temp=''
604 do i=nincoming+1,nexpart
605 integfour=''
606 float=''
607 if (need_matching(i).ne.-1) then
608 ptclus=shower_scale
609 else
610 if (nincoming.ne.2) then
611 write (*,*) 'need two incoming particles '/
612 $ /'in add_write_info.f'
613 stop 1
614 endif
615 ptclus=shower_scale-0.001d0
616 endif
617 Write(float,'(f16.5)') ptclus
618 write(integfour,'(i4)') ito(i)
619 temp=trim(temp)//' pt_clust_'//trim(adjustl(integfour))/
620 $ /'="'//trim(adjustl(float))//'"'
621 enddo
622 ptclusstring=trim(adjustl(temp0//trim(temp)//'></scales>'))
623 endif
584c624c
585c Set the number of particles that needs to be written in event file625c Set the number of particles that needs to be written in event file
586c626c
@@ -593,108 +633,51 @@
593 subroutine set_itree(iconfig,Hevents,itree,sprop_tree,pmass_tree633 subroutine set_itree(iconfig,Hevents,itree,sprop_tree,pmass_tree
594 & ,pwidth_tree)634 & ,pwidth_tree)
595 implicit none635 implicit none
596 integer iconfig636 integer iconfig,iconf
597 logical Hevents637 logical Hevents
598 include "genps.inc"638 include "genps.inc"
599 include 'nexternal.inc'639 include 'nexternal.inc'
600 include "coupl.inc"640 include "coupl.inc"
601 double precision ZERO641 include 'nFKSconfigs.inc'
602 parameter (ZERO=0d0)642 include 'real_from_born_configs.inc'
643 double precision pmass(-nexternal:0,lmaxconfigs,0:fks_configs)
644 double precision pwidth(-nexternal:0,lmaxconfigs,0:fks_configs)
645 integer iforest(2,-max_branch:-1,lmaxconfigs,0:fks_configs)
646 integer sprop(-max_branch:-1,lmaxconfigs,0:fks_configs)
647 integer tprid(-max_branch:-1,lmaxconfigs,0:fks_configs)
648 integer mapconfig(0:lmaxconfigs,0:fks_configs)
649 common /c_configurations/pmass,pwidth,iforest,sprop,tprid
650 $ ,mapconfig
603 integer itree(2,-max_branch:-1)651 integer itree(2,-max_branch:-1)
604 integer sprop_tree(-max_branch:-1)652 integer sprop_tree(-max_branch:-1)
605 include "born_conf.inc"653 integer i,j
606 integer i,j,jj
607 double precision pmass(-nexternal:0,lmaxconfigs)
608 double precision pwidth(-nexternal:0,lmaxconfigs)
609 integer pow(-nexternal:0,lmaxconfigs)
610 double precision pmass_tree(-nexternal:0)654 double precision pmass_tree(-nexternal:0)
611 double precision pwidth_tree(-nexternal:0)655 double precision pwidth_tree(-nexternal:0)
612 integer i_fks,j_fks656 INTEGER NFKSPROCESS
613 common/fks_indices/i_fks,j_fks657 COMMON/C_NFKSPROCESS/NFKSPROCESS
614 include "born_props.inc"
615c
616c Do not really care about t-channels: loop should just go to658c Do not really care about t-channels: loop should just go to
617c nexternal-4, even though there is one more when there are t-channels659c nexternal-3 (or 4), even though there is one more when there are
618c around660c t-channels around
619 do j=-(nexternal-4),-1
620 do i=1,2
621 itree(i,j)=iforest(i,j,iconfig)
622 enddo
623 sprop_tree(j)=sprop(j,iconfig)
624 pmass_tree(j)=pmass(j,iconfig)
625 pwidth_tree(j)=pwidth(j,iconfig)
626 enddo
627c
628c When we are doing H-events, we need to add --when j_fks is final
629c state-- the s-channel branching fks_mother -> j_fks + i_fks. When
630c j_fks is initial state, we need to add a 'bogus' t-channel splitting
631c to make sure that all the loops stop properly
632c
633 if (Hevents) then661 if (Hevents) then
634c must re-label the external particles to get the correct daughters662 iconf=real_from_born_conf(iconfig,nFKSprocess)
635 if (i_fks.le.j_fks) then663 do j=-(nexternal-3),-1
636 write (*,*) 'ERROR: i_fks should be greater than j_fks'664 do i=1,2
637 stop665 itree(i,j)=iforest(i,j,iconf,nFKSprocess)
638 endif666 enddo
667 sprop_tree(j)=sprop(j,iconf,nFKSprocess)
668 pmass_tree(j)=pmass(j,iconf,nFKSprocess)
669 pwidth_tree(j)=pwidth(j,iconf,nFKSprocess)
670 enddo
671 else
639 do j=-(nexternal-4),-1672 do j=-(nexternal-4),-1
640 do i=1,2673 do i=1,2
641 if ( itree(i,j).ge.i_fks ) then674 itree(i,j)=iforest(i,j,iconfig,0)
642 itree(i,j)=itree(i,j)+1
643 endif
644 enddo675 enddo
676 sprop_tree(j)=sprop(j,iconfig,0)
677 pmass_tree(j)=pmass(j,iconfig,0)
678 pwidth_tree(j)=pwidth(j,iconfig,0)
645 enddo679 enddo
646c
647 if (j_fks.gt.nincoming) then
648c we must add an extra s-channel. Easiest is to add it all the way at
649c the beginning. Therefore, relabel everything else first. Use the
650c original ones to make sure we are doing it correctly (and not
651c accidentally overwriting something).
652 do j=-(nexternal-4),-1
653 sprop_tree(j-1)=sprop(j,iconfig)
654 pmass_tree(j-1)=pmass(j,iconfig)
655 pwidth_tree(j-1)=pwidth(j,iconfig)
656 do i=1,2
657 itree(i,j-1)=iforest(i,j,iconfig)
658c Also update the internal references
659 if ( itree(i,j-1).lt. 0 ) then
660 itree(i,j-1)=itree(i,j-1)-1
661 endif
662 enddo
663 enddo
664c
665c Add the new s-channel
666c
667 itree(1,-1)=i_fks
668 itree(2,-1)=j_fks
669c This will never be an on-shell s-channel. Hence, give it some bogus values:
670 sprop_tree(-1)=0
671 pmass_tree(-1)=0d0
672 pwidth_tree(-1)=0d0
673c
674c We have to make sure that the fks_mother (which is equal to the j_fks
675c label of the Born) is replaced by the new s-channel
676c
677 do j=-(nexternal-3),-2 ! do not include the new s-channel
678 do i=1,2
679 if ( itree(i,j).eq. j_fks ) then
680 itree(i,j)=-1 ! reference to the new s-channel
681 endif
682 enddo
683 enddo
684
685 else
686c j_fks is initial state
687 jj=-(nexternal-3) ! Just add it at the end
688c setting itree to 1 (or 2) makes sure that the loops over s-channel
689c propagators will exit
690 itree(1,jj)=1
691 itree(2,jj)=1
692 sprop_tree(jj)=0
693 pmass_tree(jj)=0d0
694 pwidth_tree(jj)=0d0
695 endif
696 endif680 endif
697
698 return681 return
699 end682 end
700683
701684
=== modified file 'Template/NLO/SubProcesses/analysis_lhe.f'
--- Template/NLO/SubProcesses/analysis_lhe.f 2018-06-04 16:53:37 +0000
+++ Template/NLO/SubProcesses/analysis_lhe.f 2021-11-12 09:03:34 +0000
@@ -87,7 +87,7 @@
87c Auxiliary quantities used when writing events87c Auxiliary quantities used when writing events
88 integer kwgtinfo88 integer kwgtinfo
89 integer i_wgt, kk, ii, jj, n, nn89 integer i_wgt, kk, ii, jj, n, nn
90 character*140 buff90 character*1000 buff
91 INTEGER MAXNUP91 INTEGER MAXNUP
92 PARAMETER (MAXNUP=500)92 PARAMETER (MAXNUP=500)
93 INTEGER NUP,IDPRUP,IDUP(MAXNUP),ISTUP(MAXNUP),93 INTEGER NUP,IDPRUP,IDUP(MAXNUP),ISTUP(MAXNUP),
9494
=== removed file 'Template/NLO/SubProcesses/c_weight.inc.THIS'
=== modified file 'Template/NLO/SubProcesses/chooser_functions.f'
--- Template/NLO/SubProcesses/chooser_functions.f 2018-04-05 17:59:21 +0000
+++ Template/NLO/SubProcesses/chooser_functions.f 2021-11-12 09:03:34 +0000
@@ -8,25 +8,24 @@
8 double precision ZERO8 double precision ZERO
9 parameter (ZERO=0d0)9 parameter (ZERO=0d0)
10 include 'maxparticles.inc'10 include 'maxparticles.inc'
11 include 'ngraphs.inc'11 include 'maxconfigs.inc'
12 integer i,j,k12 integer i,j,k
13 INTEGER NFKSPROCESS13 INTEGER NFKSPROCESS
14 COMMON/C_NFKSPROCESS/NFKSPROCESS14 COMMON/C_NFKSPROCESS/NFKSPROCESS
15 integer iforest(2,-max_branch:-1,n_max_cg)15 integer iforest(2,-max_branch:-1,lmaxconfigs)
16 integer sprop(-max_branch:-1,n_max_cg)16 integer sprop(-max_branch:-1,lmaxconfigs)
17 integer tprid(-max_branch:-1,n_max_cg)17 integer tprid(-max_branch:-1,lmaxconfigs)
18 integer mapconfig(0:n_max_cg)18 integer mapconfig(0:lmaxconfigs)
19 common/c_configs_inc/iforest,sprop,tprid,mapconfig19 common/c_configs_inc/iforest,sprop,tprid,mapconfig
20 double precision prmass(-max_branch:nexternal,n_max_cg)20 double precision prmass(-max_branch:nexternal,lmaxconfigs)
21 double precision prwidth(-max_branch:-1,n_max_cg)21 double precision prwidth(-max_branch:-1,lmaxconfigs)
22 integer prow(-max_branch:-1,n_max_cg)
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: