Merge lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/2.5.0

Proposed by Valentin Hirschi
Status: Superseded
Proposed branch: lp:~maddevelopers/mg5amcnlo/COLLIER
Merge into: lp:~maddevelopers/mg5amcnlo/2.5.0
Diff against target: 131455 lines (+70384/-53935)
201 files modified
MadSpin/decay.py (+14/-7)
MadSpin/interface_madspin.py (+6/-0)
Template/LO/Source/make_opts (+4/-4)
Template/NLO/Source/make_opts.inc (+2/-2)
Template/NLO/Source/setrun.f (+4/-0)
Template/NLO/SubProcesses/BinothLHA.f (+8/-4)
Template/NLO/SubProcesses/check_poles.f (+2/-0)
Template/NLO/SubProcesses/madfks_plot.f (+4/-0)
Template/NLO/SubProcesses/makefile_fks_dir (+2/-2)
Template/NLO/SubProcesses/makefile_loop.inc (+1/-0)
Template/NLO/SubProcesses/reweight0.inc (+1/-1)
Template/NLO/SubProcesses/reweight_xsec_events.f (+4/-0)
Template/loop_material/StandAlone/Cards/MadLoopParams.dat (+81/-12)
Template/loop_material/StandAlone/SubProcesses/MadLoopCommons.inc (+151/-6)
Template/loop_material/StandAlone/SubProcesses/MadLoopParamReader.f (+64/-7)
Template/loop_material/StandAlone/SubProcesses/MadLoopParams.inc (+12/-5)
Template/loop_material/StandAlone/SubProcesses/makefile (+2/-0)
UpdateNotes.txt (+2/-0)
input/.mg5_configuration_default.txt (+7/-2)
madgraph/core/base_objects.py (+6/-1)
madgraph/interface/amcatnlo_run_interface.py (+7/-6)
madgraph/interface/common_run_interface.py (+4/-4)
madgraph/interface/loop_interface.py (+4/-2)
madgraph/interface/madevent_interface.py (+8/-6)
madgraph/interface/madgraph_interface.py (+44/-10)
madgraph/iolibs/export_fks.py (+42/-12)
madgraph/iolibs/export_v4.py (+58/-18)
madgraph/iolibs/template_files/loop/check_sa.inc (+1/-0)
madgraph/iolibs/template_files/loop/check_sa_loop_induced.inc (+1/-0)
madgraph/iolibs/template_files/loop_optimized/COLLIER_interface.inc (+646/-0)
madgraph/iolibs/template_files/loop_optimized/CT_interface.inc (+8/-8)
madgraph/iolibs/template_files/loop_optimized/GOLEM_interface.inc (+2/-2)
madgraph/iolibs/template_files/loop_optimized/TIR_interface.inc (+36/-13)
madgraph/iolibs/template_files/loop_optimized/loop_matrix_standalone.inc (+102/-16)
madgraph/iolibs/template_files/matrix_loop_induced_madevent.inc (+4/-1)
madgraph/iolibs/template_files/matrix_loop_induced_madevent_group.inc (+4/-1)
madgraph/loop/loop_exporters.py (+129/-26)
madgraph/madevent/sum_html.py (+6/-2)
madgraph/various/banner.py (+21/-7)
madgraph/various/lhe_parser.py (+30/-8)
madgraph/various/misc.py (+8/-1)
madgraph/various/process_checks.py (+53/-13)
madgraph/various/q_polynomial.py (+14/-0)
models/loop_MSSM/.restrict_parallel_test.dat (+0/-532)
models/loop_MSSM/.restrict_parallel_test_gogo.dat (+0/-532)
models/loop_MSSM/CT_couplings.py (+0/-22863)
models/loop_MSSM/CT_vertices.py (+0/-7619)
models/loop_MSSM/MSSM_NLO.log (+0/-87)
models/loop_MSSM/__init__.py (+0/-48)
models/loop_MSSM/coupling_orders.py (+0/-17)
models/loop_MSSM/couplings.py (+0/-6439)
models/loop_MSSM/function_library.py (+0/-71)
models/loop_MSSM/lorentz.py (+0/-198)
models/loop_MSSM/object_library.py (+0/-377)
models/loop_MSSM/parameters.py (+0/-1756)
models/loop_MSSM/particles.py (+0/-814)
models/loop_MSSM/propagators.py (+0/-35)
models/loop_MSSM/restrict_default.dat (+0/-526)
models/loop_MSSM/restrict_test.dat (+0/-532)
models/loop_MSSM/vertices.py (+0/-9119)
models/loop_MSSM/write_param_card.py (+0/-207)
tests/IOTests.py (+1/-1)
tests/acceptance_tests/test_cmd.py (+1/-0)
tests/acceptance_tests/test_cmd_madevent.py (+7/-4)
tests/acceptance_tests/test_histograms.py (+0/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%COLLIER_interface.f (+732/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%CT_interface.f (+11/-265)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%GOLEM_interface.f (+2/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%TIR_interface.f (+25/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%loop_matrix.f (+117/-11)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%mp_compute_loop_coefs.f (+13/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%COLLIER_interface.f (+732/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%CT_interface.f (+11/-265)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%GOLEM_interface.f (+2/-1)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%TIR_interface.f (+25/-6)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%loop_matrix.f (+117/-11)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%mp_compute_loop_coefs.f (+13/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_eq_4.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_gt_0_QEDAmpAndQEDsq_gt_2.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_gt_4.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QEDsq_le_4.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_WGTsq_le_10_QEDAmpAndQEDsq_gt_2.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_default.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDpert_default.f (+116/-10)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QEDpert_default.f (+116/-10)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%MadLoopCommons.f (+143/-11)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%MadLoopParamReader.f (+64/-7)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%COLLIER_interface.f (+740/-0)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%CT_interface.f (+27/-280)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%GOLEM_interface.f (+2/-1)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%TIR_interface.f (+25/-6)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%loop_matrix.f (+117/-11)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_compute_loop_coefs.f (+13/-3)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%COLLIER_interface.f (+732/-0)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%CT_interface.f (+19/-274)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%GOLEM_interface.f (+2/-1)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%TIR_interface.f (+25/-6)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%loop_matrix.f (+117/-11)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%mp_compute_loop_coefs.f (+13/-3)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/CT_interface.f (+2/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/TIR_interface.f (+13/-5)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/loop_matrix.f (+111/-10)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/CT_interface.f (+2/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/TIR_interface.f (+13/-5)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/loop_matrix.f (+111/-10)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/ddx_ttx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/ddx_ttx/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/CT_interface.f (+2/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/TIR_interface.f (+13/-5)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/loop_matrix.f (+111/-10)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/CT_interface.f (+2/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/TIR_interface.f (+13/-5)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/check_sa.f (+2/-0)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/loop_matrix.f (+111/-10)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/unique_id.inc (+2/-0)
tests/input_files/loop_MSSM/CT_couplings.py (+22863/-0)
tests/input_files/loop_MSSM/CT_vertices.py (+7619/-0)
tests/input_files/loop_MSSM/MSSM_NLO.log (+87/-0)
tests/input_files/loop_MSSM/README.txt (+7/-0)
tests/input_files/loop_MSSM/__init__.py (+48/-0)
tests/input_files/loop_MSSM/coupling_orders.py (+17/-0)
tests/input_files/loop_MSSM/couplings.py (+6439/-0)
tests/input_files/loop_MSSM/function_library.py (+71/-0)
tests/input_files/loop_MSSM/lorentz.py (+198/-0)
tests/input_files/loop_MSSM/object_library.py (+377/-0)
tests/input_files/loop_MSSM/parameters.py (+1756/-0)
tests/input_files/loop_MSSM/particles.py (+814/-0)
tests/input_files/loop_MSSM/propagators.py (+35/-0)
tests/input_files/loop_MSSM/restrict_default.dat (+526/-0)
tests/input_files/loop_MSSM/restrict_parallel_test.dat (+532/-0)
tests/input_files/loop_MSSM/restrict_parallel_test_gogo.dat (+532/-0)
tests/input_files/loop_MSSM/restrict_test.dat (+532/-0)
tests/input_files/loop_MSSM/vertices.py (+9119/-0)
tests/input_files/loop_MSSM/write_param_card.py (+207/-0)
tests/parallel_tests/test_ML5.py (+1/-2)
tests/parallel_tests/test_ML5MSSMQCD.py (+5/-10)
vendor/CutTools/src/avh/avh_olo.f90 (+425/-425)
vendor/CutTools/src/cts/cts_cutroutines.f90 (+1/-1)
vendor/CutTools/src/cts/cts_cuttools.f90 (+2/-2)
vendor/CutTools/src/cts/cts_loopfunctions.f90 (+2/-2)
vendor/IREGI/src/makefile_ML5_lib (+11/-8)
vendor/IREGI/src/mis_warp.f90 (+1/-1)
vendor/IREGI/src/oneloop/ONI/example/example.f (+4/-4)
vendor/IREGI/src/oneloop/avh_olo_foriregi.f90 (+11045/-0)
vendor/IREGI/src/oneloop/example/example.f (+4/-4)
vendor/IREGI/src/oneloop/example_arprec/f_test.f (+4/-4)
vendor/IREGI/src/oneloop/example_ddfun90/example.f (+4/-4)
vendor/IREGI/src/oneloop/example_mpfun90/example.f (+4/-4)
vendor/IREGI/src/oneloop/example_qdcpp/f_test.f (+4/-4)
vendor/IREGI/src/oneloop/src/avh_olo_a0.h90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_an.h90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_arprec.f90 (+3/-3)
vendor/IREGI/src/oneloop/src/avh_olo_arrays.f90 (+3/-3)
vendor/IREGI/src/oneloop/src/avh_olo_auxfun.f90 (+3/-3)
vendor/IREGI/src/oneloop/src/avh_olo_b0.h90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_b11.h90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_bn.h90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_bnlog.f90 (+7/-7)
vendor/IREGI/src/oneloop/src/avh_olo_box.f90 (+7/-7)
vendor/IREGI/src/oneloop/src/avh_olo_boxc.f90 (+6/-6)
vendor/IREGI/src/oneloop/src/avh_olo_bub.f90 (+6/-6)
vendor/IREGI/src/oneloop/src/avh_olo_c0.h90 (+2/-2)
vendor/IREGI/src/oneloop/src/avh_olo_comb.f90 (+25/-25)
vendor/IREGI/src/oneloop/src/avh_olo_d0.h90 (+2/-2)
vendor/IREGI/src/oneloop/src/avh_olo_ddfun90.f90 (+2/-2)
vendor/IREGI/src/oneloop/src/avh_olo_dilog.f90 (+8/-8)
vendor/IREGI/src/oneloop/src/avh_olo_intrinsic.f90 (+3/-3)
vendor/IREGI/src/oneloop/src/avh_olo_kinds.f90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_main.f90 (+9/-9)
vendor/IREGI/src/oneloop/src/avh_olo_mpfun90.f90 (+3/-3)
vendor/IREGI/src/oneloop/src/avh_olo_olog.f90 (+6/-6)
vendor/IREGI/src/oneloop/src/avh_olo_print.f90 (+2/-2)
vendor/IREGI/src/oneloop/src/avh_olo_qdcpp.f90 (+2/-2)
vendor/IREGI/src/oneloop/src/avh_olo_qmplx.f90 (+6/-6)
vendor/IREGI/src/oneloop/src/avh_olo_tri.f90 (+6/-6)
vendor/IREGI/src/oneloop/src/avh_olo_units.f90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_version.f90 (+1/-1)
vendor/IREGI/src/oneloop/src/avh_olo_wrp01.f90 (+14/-14)
vendor/SMWidth/makefile_MW5 (+15/-9)
vendor/SMWidth/mis_warp.f90 (+1/-1)
To merge this branch: bzr merge lp:~maddevelopers/mg5amcnlo/COLLIER
Reviewer Review Type Date Requested Status
Olivier Mattelaer Disapprove
Rikkert Frederix Pending
marco zaro Pending
davide.pagani.85 Pending
Hua-Sheng Shao Pending
Review via email: mp+298349@code.launchpad.net

This proposal supersedes a proposal from 2016-05-26.

This proposal has been superseded by a proposal from 2016-07-02.

Description of the change

This branch introduces the longed-for interface to COLLIER!

All tests pass (incl. the comparison with the multitude of benchmark processes) and MG5aMC user can now effortlessly use COLLIER for all the applications that can involve MadLoop.

So please give it a try simply by running a couple of loop processes with different setup, and after having installed COLLIER with

MG5_aMC> install collier

Regarding performances, COLLIER holds up to its promises (when properly using its global caching system). I compiled a tex document that summarizes the profiling I did so far:

https://drive.google.com/open?id=0By4qXx23HZGESkU2c0RMQ0J1RGs

In summary, we observe that:

a) COLLIER is faster than CutTools but slower than Ninja, although one must keep in mind that Ninja's timings must be doubled in practice for the stability test.

b) COLLIER scales worse than integrand reduction with the rank of the loop *and its multiplicity* (and significantly so, something I had not appreciated before). This is striking when looking at the timings of the 2 > 6 process. But it is nice that the COLI branch of COLLIER has no hard limitation in rank or multiplicity.

c) COLLIER's stability is indeed astonishing! The numerical stability plots speak for themselves... And this was not even for the most difficult processes we can generate with MadLoop (see http://arxiv.org/pdf/1604.01363.pdf). However, COLLIER's internal stability assessment is quite a bit over-conservative.

Finally, there are a number of new COLLIER-related parameters that you can find at the end of the MadLoopParams.dat card (please have a look). Speaking of which, notice that I decided to change the default value of the following three existing MadLoop parameters starting from this version:

    a) NRotationsDP 1-> 0
       We have been using that for quite some time and it doubles
       MadLoop runtime. I think we now have enough confidence in the
       loop direction stability test to drop it.

    b) COLLIERUseInternalStabilityTest False -> True
       Even though for complicated processes this test seems to
       overshoot the actual stability by up to 5 digits, it seems to never
       undershoots it, so it is safe to rely on it and it comes in at no
       additional computational time.
       So we can use it and if at some point too many unstable PS point show
       (but that should almost never occur) with COLLIER, then we can turn this off
       and fall back on the loop-direction stability test instead.

    c) UseQPIntegrandForNinja False -> True
       For complicated processes where a lot of points need stability rescuing
       with Ninja, it turns out that quad. prec. in the integrand can
       significantly increases the accuracy (up to 4-5 digits), so it
       is actually better to leave this on, especially since we
       now have COLLIER first.

Let me know your comments/questions on the above, the interface and the code if you want to look at it.

Cheers

To post a comment you must log in.
Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote : Posted in a previous version of this proposal

Hi Valentin,

This is so cool.
I did not have the time to check yet but this is some first comment:

1) I would refrain to include this in 2.4.1, mainly because I want to have that version as bug fix only and be released very very soon (in max two weeks).

2) I do not understand the reason "UseQPIntegrandForNinja False -> True". You said "especially since we now have COLLIER first." This is actually not really True 99% of the user will not install collier and your option should reflect that scenario (or you update your option according to the tool available which can be really interesting.

Cheers,

Olivier

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote : Posted in a previous version of this proposal

Hi Olivier,

On Thu, May 26, 2016 at 2:03 AM, Olivier Mattelaer <
<email address hidden>> wrote:

> Hi Valentin,
>
> This is so cool.
> I did not have the time to check yet but this is some first comment:
>
> 1) I would refrain to include this in 2.4.1, mainly because I want to have
> that version as bug fix only and be released very very soon (in max two
> weeks).
>

I understand. But I think that this implementation is fairly robust as it
doesn't modify anything else except MadLoop's output (to the exception of
the 'unique_id' additional option to generate_subrpocess_v4).
But still, I understand if you would rather delay it, just for safety; I'm
ok with this.

> 2) I do not understand the reason "UseQPIntegrandForNinja False -> True".
> You said "especially since we now have COLLIER first." This is actually not
> really True 99% of the user will not install collier and your option should
> reflect that scenario (or you update your option according to the tool
> available which can be really interesting.
>

I will have COLLIER installed by default from a local copy that can then be
updated at any point by the user from the online tarball using the command
'install collier'. (I'll ask D&D for their consent on this first, event
though the tool is public, just to be politically correct). Basically, the
same strategy as I used for Ninja.
And COLLIER has *no dependence*, is in plain fortran90 and only needs a
minute or so to install. So yes, everybody will have it :).

Regarding the order, I think I want to still keep Ninja first, then
followed by COLLIER and finally CutTools (though it should almost never get
there anymore).

Cheers,

>
> Cheers,
>
> Olivier
>
>
> --
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/295787
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.4.1.
>

--
Valentin

Revision history for this message
Olivier Mattelaer (olivier-mattelaer) wrote : Posted in a previous version of this proposal

Hi Valentin,

I wanted to start this review today. But I was stop quickly:

Enter COLLIER directory and installing COLLIER
/Users/omatt/Documents/eclipse/COLLIER/HEPTools/HEPToolsInstallers/installCOLLIER.sh: line 14: cmake: command not found
make: *** No targets specified and no makefile found. Stop.
Copying the static library and modules generated to target directory
cp: libcollier.a: No such file or directory
cp: modules/*.mod: No such file or directory
Finished installing COLLIER

Cheers,

Olivier

review: Needs Fixing
Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

Dear reviewers,

The points raised by Olivier and Rikkert (offline) have been resolved.
This branch is mature and I plan on merging it early next week, so please have a quick look/trial by then if you can.

Cheers,

lp:~maddevelopers/mg5amcnlo/COLLIER updated
433. By Valentin Hirschi

1. Changed the default value of the ML reduction order to 6|7|1.

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

Hi,

No the tests are not working...
So you can not merge.

Cheers,

Olivier

review: Disapprove
Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

Hi Olivier,

On Mon, Jun 27, 2016 at 7:36 AM, Olivier Mattelaer <
<email address hidden>> wrote:

> Review: Disapprove
>
> Hi,
>
> No the tests are not working...
> So you can not merge.
>

It goes without saying that I'll run and fix the tests before actually
performing the merge...
I like to do it at the very end when I'm really about to merge, and not
preemptively before each merging proposal (at least for these "simple"
branches; it avoids having to run the tests each time when you implement
something the reviewer asked for).

So can I take this as your green light from a structural/functional
standpoint?
I can also send you the test-fixed version for you to try just before I
merge if you want.

Cheers,

>
> Cheers,
>
>
> Olivier
> --
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.5.0.
>

--
Valentin

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

Hi Valentin,

It is always important that at least two people runs the test to be sure that all file are include correctly
and that you do not have test which are machine dependent (which means useless test).
So clearly you do not have a green light.

Cheers,

Olivier

> On Jun 27, 2016, at 17:30, Valentin Hirschi <email address hidden> wrote:
>
> Hi Olivier,
>
> On Mon, Jun 27, 2016 at 7:36 AM, Olivier Mattelaer <
> <email address hidden>> wrote:
>
>> Review: Disapprove
>>
>> Hi,
>>
>> No the tests are not working...
>> So you can not merge.
>>
>
> It goes without saying that I'll run and fix the tests before actually
> performing the merge...
> I like to do it at the very end when I'm really about to merge, and not
> preemptively before each merging proposal (at least for these "simple"
> branches; it avoids having to run the tests each time when you implement
> something the reviewer asked for).
>
> So can I take this as your green light from a structural/functional
> standpoint?
> I can also send you the test-fixed version for you to try just before I
> merge if you want.
>
> Cheers,
>
>
>>
>> Cheers,
>>
>>
>> Olivier
>> --
>> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
>> Your team MadDevelopers is subscribed to branch
>> lp:~maddevelopers/mg5amcnlo/2.5.0.
>>
>
>
>
> --
> Valentin
>
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> You are reviewing the proposed merge of lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/2.5.0.

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :

I stressed "from a structural/functional standpoint" and also that I would
tell you to run the tests once I will have run/fix them myself.
So I'll let you know.

On Mon, Jun 27, 2016 at 1:00 PM, Olivier Mattelaer <
<email address hidden>> wrote:

> Hi Valentin,
>
> It is always important that at least two people runs the test to be sure
> that all file are include correctly
> and that you do not have test which are machine dependent (which means
> useless test).
> So clearly you do not have a green light.
>
> Cheers,
>
> Olivier
>
> > On Jun 27, 2016, at 17:30, Valentin Hirschi <email address hidden>
> wrote:
> >
> > Hi Olivier,
> >
> > On Mon, Jun 27, 2016 at 7:36 AM, Olivier Mattelaer <
> > <email address hidden>> wrote:
> >
> >> Review: Disapprove
> >>
> >> Hi,
> >>
> >> No the tests are not working...
> >> So you can not merge.
> >>
> >
> > It goes without saying that I'll run and fix the tests before actually
> > performing the merge...
> > I like to do it at the very end when I'm really about to merge, and not
> > preemptively before each merging proposal (at least for these "simple"
> > branches; it avoids having to run the tests each time when you implement
> > something the reviewer asked for).
> >
> > So can I take this as your green light from a structural/functional
> > standpoint?
> > I can also send you the test-fixed version for you to try just before I
> > merge if you want.
> >
> > Cheers,
> >
> >
> >>
> >> Cheers,
> >>
> >>
> >> Olivier
> >> --
> >>
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> >> Your team MadDevelopers is subscribed to branch
> >> lp:~maddevelopers/mg5amcnlo/2.5.0.
> >>
> >
> >
> >
> > --
> > Valentin
> >
> >
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> > You are reviewing the proposed merge of
> lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/
> 2.5.0.
>
>
> --
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.5.0.
>

--
Valentin

lp:~maddevelopers/mg5amcnlo/COLLIER updated
434. By Valentin Hirschi

1. Fixed IOTests and default config tests.

Revision history for this message
Valentin Hirschi (valentin-hirschi) wrote :
Download full text (3.2 KiB)

Hi Olivier,

So I fixed the usual default_configuration test and the IOTests. All the
others are passing except three acceptance tests, which are also failing in
2.4.3, and which are related to the fact that the command 'compute_width'
is broken when resorting to a numerical madevent integration.

This is made clear by the fact that 'test_width_computation' fails in
2.4.3. I suspected that it was related to the fact that your removed the
files 'results.dat' which is used by 'compute_width' and indeed the test
passes in rev.274 but not in rev.275 of 2.4.3, so could you fix this?
Once this is fixed, I expect all tests to pass in COLLIER branch. Can you
run them and confirm that you are ok to merge it in 2.5.0?

Cheers

On Mon, Jun 27, 2016 at 1:24 PM, Valentin Hirschi <
<email address hidden>> wrote:

> I stressed "from a structural/functional standpoint" and also that I would
> tell you to run the tests once I will have run/fix them myself.
> So I'll let you know.
>
> On Mon, Jun 27, 2016 at 1:00 PM, Olivier Mattelaer <
> <email address hidden>> wrote:
>
> > Hi Valentin,
> >
> > It is always important that at least two people runs the test to be sure
> > that all file are include correctly
> > and that you do not have test which are machine dependent (which means
> > useless test).
> > So clearly you do not have a green light.
> >
> > Cheers,
> >
> > Olivier
> >
> > > On Jun 27, 2016, at 17:30, Valentin Hirschi <
> <email address hidden>>
> > wrote:
> > >
> > > Hi Olivier,
> > >
> > > On Mon, Jun 27, 2016 at 7:36 AM, Olivier Mattelaer <
> > > <email address hidden>> wrote:
> > >
> > >> Review: Disapprove
> > >>
> > >> Hi,
> > >>
> > >> No the tests are not working...
> > >> So you can not merge.
> > >>
> > >
> > > It goes without saying that I'll run and fix the tests before actually
> > > performing the merge...
> > > I like to do it at the very end when I'm really about to merge, and not
> > > preemptively before each merging proposal (at least for these "simple"
> > > branches; it avoids having to run the tests each time when you
> implement
> > > something the reviewer asked for).
> > >
> > > So can I take this as your green light from a structural/functional
> > > standpoint?
> > > I can also send you the test-fixed version for you to try just before I
> > > merge if you want.
> > >
> > > Cheers,
> > >
> > >
> > >>
> > >> Cheers,
> > >>
> > >>
> > >> Olivier
> > >> --
> > >>
> >
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> > >> Your team MadDevelopers is subscribed to branch
> > >> lp:~maddevelopers/mg5amcnlo/2.5.0.
> > >>
> > >
> > >
> > >
> > > --
> > > Valentin
> > >
> > >
> >
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> > > You are reviewing the proposed merge of
> > lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/
> > 2.5.0.
> >
> >
> > --
> >
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> > Your team MadDevelopers is subscribed to branch
> > lp:~maddevelopers/mg5amcnlo/2.5.0.
> >
>
>
>
> --
> Valentin
>
> https://code.launchpad.net/~maddevelopers/mg5amcnlo/COLLIER/+merge/298349
> Your team MadDeve...

Read more...

lp:~maddevelopers/mg5amcnlo/COLLIER updated
435. By Valentin Hirschi

1. Merged with latest 2.4.3

436. By Valentin Hirschi

1. Fixed an issue in the compilation of SMWidth
2. Updated all IOTest to correspond to a setup without Ninja Quad prec. We will do so until clang releases a version supporting __float128 (and quadmath in general).

437. By Valentin Hirschi

1. Reinstated the 'wrong' loop_MSSM for parallel tests, but only in the input_files.
2. Merged with latest version of 2.4.3.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'MadSpin/decay.py'
2--- MadSpin/decay.py 2016-06-22 14:11:47 +0000
3+++ MadSpin/decay.py 2016-07-02 20:36:33 +0000
4@@ -2116,6 +2116,7 @@
5 # launch the decay and reweighting
6 self.mscmd.update_status('MadSpin: Decaying Events')
7 efficiency = self.decaying_events(self.inverted_decay_mapping)
8+ self.efficiency = efficiency
9 if efficiency != 1 and any(v==-1 for v in self.br_per_id.values()):
10 # need to change the banner information [nb_event/cross section]
11 files.cp(self.outputfile.name, '%s_tmp' % self.outputfile.name)
12@@ -2652,13 +2653,12 @@
13 if re.search('^\s*add\s+process', line)]
14
15 mgcmd = self.mgcmd
16- modelpath = self.model.get('modelpath')
17- if os.path.basename(modelpath) != mgcmd._curr_model['name']:
18- name, restrict = mgcmd._curr_model['name'].rsplit('-',1)
19- if os.path.exists(pjoin(os.path.dirname(modelpath),name, 'restrict_%s.dat' % restrict)):
20- modelpath = pjoin(os.path.dirname(modelpath), mgcmd._curr_model['name'])
21+ modelpath = self.model.get('modelpath+restriction')
22+
23+ commandline="import model %s" % modelpath
24+ if not self.model.mg5_name:
25+ commandline += ' --modelname'
26
27- commandline="import model %s " % modelpath
28 mgcmd.exec_cmd(commandline)
29 # Handle the multiparticle of the banner
30 #for name, definition in self.mscmd.multiparticles:
31@@ -3933,7 +3933,8 @@
32 mg_info[i] = '%s : %s' % (info, value * self.branching_ratio)
33 self.banner['mggenerationinfo'] = '\n'.join(mg_info)
34
35-
36+ self.cross = 0
37+ self.error = 0
38 if 'init' in self.banner and (eff!=1 or not any(v==-1 for v in self.br_per_id.values())):
39 new_init =''
40 curr_proc = 0
41@@ -3951,7 +3952,13 @@
42 data[:3] = [ data[i] * self.branching_ratio for i in range(3)]
43 has_missing=True
44 new_init += ' %.12E %.12E %.12E %i\n' % tuple(data)
45+ cross, error = [float(d) for d in data[:2]]
46+ self.cross += cross
47+ self.error += error**2
48+
49+
50 self.banner['init'] = new_init
51+ self.error = math.sqrt(self.error)
52 if has_missing and curr_proc not in [0,1]:
53 logger.warning('''The partial cross section for each subprocess can not be determine. due
54 Reason: multiple final state in the same subprocess (and the presence of multiple BR)
55
56=== modified file 'MadSpin/interface_madspin.py'
57--- MadSpin/interface_madspin.py 2016-06-26 09:25:25 +0000
58+++ MadSpin/interface_madspin.py 2016-07-02 20:36:33 +0000
59@@ -568,6 +568,9 @@
60 generate_all.run()
61
62 self.branching_ratio = generate_all.branching_ratio
63+ self.cross = generate_all.cross
64+ self.error = generate_all.error
65+ self.efficiency = generate_all.efficiency
66 try:
67 self.err_branching_ratio = generate_all.err_branching_ratio
68 except Exception:
69@@ -670,6 +673,9 @@
70
71 generate_all.ending_run()
72 self.branching_ratio = generate_all.branching_ratio
73+ self.cross = generate_all.cross
74+ self.error = generate_all.error
75+ self.efficiency = generate_all.efficiency
76 try:
77 self.err_branching_ratio = generate_all.err_branching_ratio
78 except Exception:
79
80=== modified file 'Template/LO/Source/make_opts'
81--- Template/LO/Source/make_opts 2016-06-10 16:31:39 +0000
82+++ Template/LO/Source/make_opts 2016-07-02 20:36:33 +0000
83@@ -1,9 +1,9 @@
84 DEFAULT_F2PY_COMPILER=f2py
85 DEFAULT_F_COMPILER=gfortran
86-MACFLAG=-mmacosx-version-min=10.7
87-DEFAULT_CPP_COMPILER=clang
88-STDLIB=-lc++
89-STDLIB_FLAG=-stdlib=libc++
90+MACFLAG=
91+DEFAULT_CPP_COMPILER=g++
92+STDLIB=-lstdc++
93+STDLIB_FLAG=
94 #end_of_make_opts_variables
95 # Rest of the makefile
96
97
98=== modified file 'Template/NLO/Source/make_opts.inc'
99--- Template/NLO/Source/make_opts.inc 2016-05-23 10:58:06 +0000
100+++ Template/NLO/Source/make_opts.inc 2016-07-02 20:36:33 +0000
101@@ -55,7 +55,7 @@
102
103 UNAME := $(shell uname -s)
104 ifeq ($(origin LDFLAGS), undefined)
105- LDFLAGS=$(STDLIB)
106+ LDFLAGS=$(STDLIB) $(MACFLAG)
107 endif
108 # Options: dynamic, lhapdf
109
110@@ -92,7 +92,7 @@
111 ifneq ($(lhapdf),)
112 CXXFLAGS += $(shell $(lhapdf) --cppflags)
113 alfas_functions=alfas_functions_lhapdf
114- llhapdf+=-lLHAPDF
115+ llhapdf = $(shell $(lhapdf) --libs)
116 reweight_xsec_events_pdf_dummy=
117 else
118 alfas_functions=alfas_functions
119
120=== modified file 'Template/NLO/Source/setrun.f'
121--- Template/NLO/Source/setrun.f 2016-03-21 08:45:42 +0000
122+++ Template/NLO/Source/setrun.f 2016-07-02 20:36:33 +0000
123@@ -204,6 +204,10 @@
124 c fill the nmemPDF(i) array with the number of PDF error set. This we
125 c get from LHAPDF.
126 call numberPDFm(1,nmemPDF(1))
127+ if (nmemPDF(1).eq.1) then
128+ nmemPDF(1)=0
129+ lpdfvar(1)=0
130+ endif
131 else
132 nmemPDF(1)=0
133 endif
134
135=== modified file 'Template/NLO/SubProcesses/BinothLHA.f'
136--- Template/NLO/SubProcesses/BinothLHA.f 2016-03-02 09:31:23 +0000
137+++ Template/NLO/SubProcesses/BinothLHA.f 2016-07-02 20:36:33 +0000
138@@ -85,6 +85,8 @@
139 c itself again to perform stability check to make sure no unstable EPS
140 c splips unnoticed.
141 CALL FORCE_STABILITY_CHECK(.TRUE.)
142+ CALL COLLIER_COMPUTE_UV_POLES(.FALSE.)
143+ CALL COLLIER_COMPUTE_IR_POLES(.FALSE.)
144 firsttime_run = .false.
145 endif
146 if (firsttime) then
147@@ -102,6 +104,7 @@
148 c Just set the accuracy found to a positive value as it is not specified
149 c once the initial pole check is performed.
150 if (mc_hel.eq.0) then
151+
152 call sloopmatrix_thres(p,virt_wgts,tolerance,accuracies
153 $ ,ret_code)
154 prec_found = accuracies(0)
155@@ -164,18 +167,19 @@
156 c MadLoop initialization PS points.
157 cpol=.false.
158 if ((firsttime .or. mc_hel.eq.0) .and. mod(ret_code,100)/10.ne.3
159- $ .and. mod(ret_code,100)/10.ne.4) then
160+ $ .and. mod(ret_code,100)/10.ne.4) then
161 call getpoles(p,QES2,madfks_double,madfks_single,fksprefact)
162 avgPoleRes(1)=(single+madfks_single)/2.0d0
163 avgPoleRes(2)=(double+madfks_double)/2.0d0
164 PoleDiff(1)=dabs(single - madfks_single)
165 PoleDiff(2)=dabs(double - madfks_double)
166 if ((dabs(avgPoleRes(1))+dabs(avgPoleRes(2))).ne.0d0) then
167- cpol = .not. (((PoleDiff(1)+PoleDiff(2))/
168+ cpol = .not. ((((PoleDiff(1)+PoleDiff(2))/
169 $ (dabs(avgPoleRes(1))+dabs(avgPoleRes(2)))) .lt.
170- $ tolerance*10d0)
171+ $ tolerance*10d0).or.(mod(ret_code,10).eq.7))
172 else
173- cpol = .not.(PoleDiff(1)+PoleDiff(2).lt.tolerance*10d0)
174+ cpol = .not.((PoleDiff(1)+PoleDiff(2).lt.tolerance*10d0).or.
175+ $ (mod(ret_code,10).eq.7))
176 endif
177 if (tolerance.lt.0.0d0) then
178 cpol = .false.
179
180=== modified file 'Template/NLO/SubProcesses/check_poles.f'
181--- Template/NLO/SubProcesses/check_poles.f 2016-03-02 09:31:23 +0000
182+++ Template/NLO/SubProcesses/check_poles.f 2016-07-02 20:36:33 +0000
183@@ -116,6 +116,8 @@
184 c Make sure that stability checks are always used by MadLoop, even for
185 c initialization
186 CALL FORCE_STABILITY_CHECK(.TRUE.)
187+ CALL COLLIER_COMPUTE_UV_POLES(.TRUE.)
188+ CALL COLLIER_COMPUTE_IR_POLES(.TRUE.)
189
190 200 continue
191 calculatedborn = .false.
192
193=== modified file 'Template/NLO/SubProcesses/madfks_plot.f'
194--- Template/NLO/SubProcesses/madfks_plot.f 2016-02-25 08:21:12 +0000
195+++ Template/NLO/SubProcesses/madfks_plot.f 2016-07-02 20:36:33 +0000
196@@ -66,6 +66,10 @@
197 call initpdfsetbynamem(nn,lhaPDFsetname(nn))
198 if (lpdfvar(nn)) then
199 call numberPDFm(nn,nmemPDF(nn))
200+ if (nmemPDF(nn).eq.1) then
201+ nmemPDF(nn)=0
202+ lpdfvar(nn)=.false.
203+ endif
204 else
205 nmemPDF(nn)=0
206 endif
207
208=== modified file 'Template/NLO/SubProcesses/makefile_fks_dir'
209--- Template/NLO/SubProcesses/makefile_fks_dir 2016-05-26 23:36:59 +0000
210+++ Template/NLO/SubProcesses/makefile_fks_dir 2016-07-02 20:36:33 +0000
211@@ -9,11 +9,11 @@
212 ifdef fastjet_config
213 FASTJET_CONFIG = $(fastjet_config)
214 CXXFLAGS += $(shell $(FASTJET_CONFIG) --cxxflags)
215- FJLIBS += $(shell $(FASTJET_CONFIG) --libs --plugins ) -lstdc++
216+ FJLIBS += $(shell $(FASTJET_CONFIG) --libs --plugins ) $(STDLIB)
217 fastjetfortran_madfks=fastjetfortran_madfks_full.o fastjet_wrapper.o
218 else
219 fastjetfortran_madfks=fastjetfortran_madfks_core.o fjcore.o fastjet_wrapper.o
220- FJLIBS += -lstdc++
221+ FJLIBS += $(STDLIB)
222 endif
223
224 NLOLIBS=-L$(LIBDIR) $(libmadloop) $(libcuttools) $(libOLP)
225
226=== modified file 'Template/NLO/SubProcesses/makefile_loop.inc'
227--- Template/NLO/SubProcesses/makefile_loop.inc 2016-03-02 03:03:20 +0000
228+++ Template/NLO/SubProcesses/makefile_loop.inc 2016-07-02 20:36:33 +0000
229@@ -24,6 +24,7 @@
230 $(patsubst %(dotf)s,%(doto)s,$(wildcard mp_coef_construction_*.f)) \
231 $(patsubst %(dotf)s,%(doto)s,$(wildcard TIR_interface.f)) \
232 $(patsubst %(dotf)s,%(doto)s,$(wildcard GOLEM_interface.f)) \
233+ $(patsubst %(dotf)s,%(doto)s,$(wildcard COLLIER_interface.f)) \
234 $(patsubst %(dotf)s,%(doto)s,$(wildcard compute_color_flows.f))
235
236 # This is the core of madloop computationally wise, so make sure to turn optimizations on and bound checks off.
237
238=== modified file 'Template/NLO/SubProcesses/reweight0.inc'
239--- Template/NLO/SubProcesses/reweight0.inc 2016-02-23 10:48:46 +0000
240+++ Template/NLO/SubProcesses/reweight0.inc 2016-07-02 20:36:33 +0000
241@@ -71,7 +71,7 @@
242 c New format to allow for multiple PDF sets and scales (both functional form
243 c and normal)
244 integer maxPDFsets, maxdynscales
245- parameter (maxPDFsets=10,maxdynscales=10)
246+ parameter (maxPDFsets=25,maxdynscales=10)
247 integer lhaPDFid(0:maxPDFsets),nmemPDF(maxPDFsets)
248 $ ,dyn_scale(0:maxdynscales)
249 logical lscalevar(maxdynscales),lpdfvar(maxPDFsets)
250
251=== modified file 'Template/NLO/SubProcesses/reweight_xsec_events.f'
252--- Template/NLO/SubProcesses/reweight_xsec_events.f 2016-03-30 23:53:52 +0000
253+++ Template/NLO/SubProcesses/reweight_xsec_events.f 2016-07-02 20:36:33 +0000
254@@ -87,6 +87,10 @@
255 call initpdfsetbynamem(nn,lhaPDFsetname(nn))
256 if (lpdfvar(nn)) then
257 call numberPDFm(nn,nmemPDF(nn))
258+ if (nmemPDF(nn).eq.1) then
259+ nmemPDF(nn)=0
260+ lpdfvar(nn)=.false.
261+ endif
262 else
263 nmemPDF(nn)=0
264 endif
265
266=== modified file 'Template/loop_material/StandAlone/Cards/MadLoopParams.dat'
267--- Template/loop_material/StandAlone/Cards/MadLoopParams.dat 2016-04-06 10:19:13 +0000
268+++ Template/loop_material/StandAlone/Cards/MadLoopParams.dat 2016-07-02 20:36:33 +0000
269@@ -4,8 +4,8 @@
270
271 !
272 #MLReductionLib
273-!6|1|2
274-! Default :: 6|1|2
275+!6|7|1
276+! Default :: 6|7|1
277 ! The tensor integral reduction library.The current choices are:
278 ! 1 | CutTools
279 ! 2 | PJFry++
280@@ -13,6 +13,7 @@
281 ! 4 | Golem95
282 ! 5 | Samurai
283 ! 6 | Ninja
284+! 7 | COLLIER
285 ! One can use the combinations to reduce integral,e.g.
286 ! 1|2|3 means first use CutTools, if it is not stable, use PJFry++,
287 ! if it is still unstable, use IREGI. If it failed, use QP of CutTools.
288@@ -22,15 +23,15 @@
289 ! When using quadruple precision with Ninja or CutTools, the reduction will
290 ! always be done in quadruple precision, but the parameters below allow you to
291 ! chose if you want to also recompute the *integrand* in quadruple precision.
292-! Doing so is slow and typically does not improve the accuracy for Ninja, so it
293-! is disabled by default in this case.
294+! Doing so is slow but might improve the accuracy in some situation.
295 #UseQPIntegrandForCutTools
296 !.TRUE.
297 ! Default :: .TRUE.
298 #UseQPIntegrandForNinja
299-!.FALSE.
300-! Default :: .FALSE.
301+!.TRUE.
302+! Default :: .TRUE.
303 !
304+
305 ! =================================================================================
306 ! The parameters below set the parameters for IREGI
307 ! =================================================================================
308@@ -38,9 +39,9 @@
309 #IREGIMODE
310 !2
311 ! Default :: 2
312-! IMODE=0, IBP reduction
313-! IMODE=1, PaVe reduction
314-! IMODE=2, PaVe reduction with stablility improved by IBP reduction
315+! IREGIMODE=0, IBP reduction
316+! IREGIMODE=1, PaVe reduction
317+! IREGIMODE=2, PaVe reduction with stablility improved by IBP reduction
318
319 #IREGIRECY
320 !.TRUE.
321@@ -59,7 +60,7 @@
322 ! 2 | Double precision, loops reduced with propagator with reversed order
323 ! 4 | Quadruple precision, loops reduced with propagator in original order
324 ! 5 | Quadruple precision, loops reduced with propagator with reversed order
325-! -1 |  Exhaustive automated numerical stability checks. See below for details.
326+! -1 | Exhaustive automated numerical stability checks. See below for details.
327 !
328 ! Due to the architecture of the program, you are better off
329 ! rerunning the full PS point in quadruple precision than just a single loop
330@@ -84,8 +85,8 @@
331 ! Below you can chose if you want to use zero, one or two rotations of the PS point
332 ! in QP.
333 #NRotations_DP
334-!1
335-! Default :: 1
336+!0
337+! Default :: 0
338 #NRotations_QP
339 !0
340 ! Default :: 0
341@@ -114,6 +115,7 @@
342 #ImprovePSPoint
343 !2
344 ! Default :: 2
345+
346 ! =================================================================================
347 ! The parameters below set two CutTools internal parameters accessible to the user.
348 ! =================================================================================
349@@ -226,4 +228,71 @@
350 !.FALSE.
351 ! Default :: .FALSE.
352
353+! =================================================================================
354+! The parameters below set the main parameters for COLLIER
355+! To edit more specific technical COLLIER parameters, modify directly the content
356+! of the subroutine 'INITCOLLIER' in the file 'MadLoopCommons.f'
357+! =================================================================================
358+
359+! Decide if COLLIER must be computed multiple times to evaluate the UV pole residues
360+! (Withing a Monte-Carlo performed in MG5aMC, this is automatically disabled internally)
361+#COLLIERComputeUVpoles
362+!.TRUE.
363+! Default :: .TRUE.
364+
365+! Decide if COLLIER must be computed multiple times to evaluate the IR pole residues
366+! (Withing a Monte-Carlo performed in MG5aMC, this is automatically disabled internally)
367+#COLLIERComputeIRpoles
368+!.TRUE.
369+! Default :: .TRUE.
370+
371+! Decide if COLLIER must be computed multiple times to evaluate the IR pole residues
372+#COLLIERRequiredAccuracy
373+!1.0d-8
374+! Default :: 1.0d-8
375+! A value of -1.0d0 means that it will be automatically set from MLStabThres.
376+! The default value of 1.0d-8 corresponds to the value for which COLLIER's authors
377+! have optimized the library.
378+
379+! Decide whether to use COLLIER's internal stability test or the loop-direction
380+! switch test instead.
381+#COLLIERUseInternalStabilityTest
382+!.TRUE.
383+! Default :: .TRUE.
384+! COLLIER's internal stability test is at no extra cost but not as reliable
385+! as the loop-direction switch test, which however doubles the reduction time.
386+! This parameter is only relevant when running MadLoop with CTModeRun=-1.
387+! If you find a large number of unstable points with COLLIER for complicated
388+! processes, set this parameter to .FALSE. to make sure the PS points flagged
389+! as unstable with COLLIER really are so.
390+
391+! Set up to which N-loop to use the COLLIER global caching system.
392+#COLLIERGlobalCache
393+!-1
394+! Default :: -1
395+! -1 : Enable the global cache for all loops
396+! 0 : Disable the global cache alltogether
397+! N : Enable the global cache but only for up to N-loops
398+
399+! Use the global cache when evaluating the poles as well (more memory consuming)
400+! During a Monte-Carlo it is typically not useful anyway, because the pole
401+! computation is automatically disabled for COLLIER, irrespectively of the value
402+! of the parameters COLLIERCompute<UV/IR>poles specified above.
403+#COLLIERUseCacheForPoles
404+!.FALSE.
405+! Default :: .FALSE.
406+
407+! Choose which branch(es) of COLLIER have to be used
408+#COLLIERMode
409+!1
410+! Default :: 1
411+! COLLIERMode=1 : COLI branch
412+! COLLIERMode=2 : DD branch
413+! COLLIERMode=3 : Both DD and COLI branch compared
414+
415+! Decide if COLLIER can output its information in a log directory.
416+#COLLIERCanOutput
417+!.FALSE.
418+! Default :: .FALSE.
419+
420 /* End of param file */
421
422=== modified file 'Template/loop_material/StandAlone/SubProcesses/MadLoopCommons.inc'
423--- Template/loop_material/StandAlone/SubProcesses/MadLoopCommons.inc 2016-02-08 23:58:00 +0000
424+++ Template/loop_material/StandAlone/SubProcesses/MadLoopCommons.inc 2016-07-02 20:36:33 +0000
425@@ -30,6 +30,86 @@
426
427 end
428
429+
430+## if(collier_available){
431+ SUBROUTINE INITCOLLIER()
432+C
433+C INITIALISATION OF COLLIER
434+C
435+C
436+C MODULE
437+C
438+ USE COLLIER
439+C
440+C CONSTANTS
441+C
442+ character(len=*) no_folder
443+ parameter (no_folder='')
444+ character(len=*) folderOutput
445+ parameter (folderOutput='COLLIER_output')
446+
447+C Force COLLIER to completely reset from scratch
448+ logical noreset
449+ parameter (noreset=.FALSE.)
450+C
451+C LOCAL VARIABLES
452+C
453+ INTEGER N_CACHES
454+C
455+C GLOBAL VARIABLES
456+C
457+ include 'MadLoopParams.inc'
458+C Now obtain the overall maximum rank, maximum external lines
459+C and maximal number of processes.
460+ include 'global_specs.inc'
461+
462+C ----------
463+C BEGIN CODE
464+C ----------
465+
466+C Initialize Collier
467+ IF (.NOT.COLLIERCanOutput) THEN
468+ CALL Init_cll(MAXNEXTERNAL,OVERALLMAXRANK,no_folder,noreset)
469+ ELSE
470+ CALL Init_cll(MAXNEXTERNAL,OVERALLMAXRANK,folderOutput,noreset)
471+ ENDIF
472+
473+C Set target accuracy, be conservative w.r.t user request
474+C Keep in mind that COLLIER has been optimized for 1d-8.
475+ IF (COLLIERRequiredAccuracy.eq.-1.0d0) THEN
476+ CALL SetReqAcc_cll(MLStabThres*1.0d-3)
477+ ELSE
478+ CALL SetReqAcc_cll(COLLIERRequiredAccuracy)
479+ ENDIF
480+
481+C Set COLLIER mode
482+ CALL SetMode_cll(COLLIERMode)
483+
484+C Set the global cache strategy
485+C If we use the caches for the poles as well, then it is a total of
486+C 4 caches per process.
487+ IF (COLLIERUseCacheForPoles) THEN
488+ N_CACHES =4*NPROCS
489+ ELSE
490+ N_CACHES =NPROCS
491+ ENDIF
492+ IF (COLLIERGlobalCache.eq.-1) THEN
493+ CALL InitCacheSystem_cll(N_CACHES,MAXNEXTERNAL)
494+ ELSEIF(COLLIERGlobalCache.gt.0) THEN
495+ CALL InitCacheSystem_cll(N_CACHES,COLLIERGlobalCache)
496+ ENDIF
497+
498+C Make sure to start by first switching off all cache
499+ IF (COLLIERGlobalCache.ne.0) THEN
500+ call SwitchOffCacheSystem_cll()
501+ ENDIF
502+
503+C Specify below your other custom COLLIER parameter settings
504+C [user_specific_COLLIER_settings]
505+
506+ END
507+## }
508+
509 SUBROUTINE SET_FORBID_HEL_DOUBLECHECK(ONOFF)
510 C
511 C Give the possibility to overwrite the value of MadLoopParams.dat
512@@ -67,9 +147,10 @@
513 DATA ML_INIT/.TRUE./
514 common/ML_INIT/ML_INIT
515
516- LOGICAL CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
517- DATA CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT/.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE./
518- COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
519+ LOGICAL CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
520+ DATA CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT/.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE./
521+ COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT, COLLIERINIT
522+
523
524 character(512) MLPath
525 data MLPath/'[[NA]]'/
526@@ -163,6 +244,8 @@
527 C Stable with Samurai.
528 C U == 6
529 C Stable with Ninja in double precision.
530+C U == 7
531+C Stable with COLLIER.
532 C U == 8
533 C Stable with Ninja in quadruple precision.
534 C U == 9
535@@ -201,10 +284,10 @@
536 STOP 'Only CutTools and Ninja can use quardruple precision'
537 ENDIF
538 ENDIF
539- IF(MLRed.GE.1.AND.MLRed.LE.6)THEN
540+ IF(MLRed.GE.1.AND.MLRed.LE.7)THEN
541 SET_RET_CODE_U=MLRed
542 ELSE
543- STOP 'Only CutTools, PJFry++, IREGI, Golem95, Samurai and Ninja are available'
544+ STOP 'Only CutTools, PJFry++, IREGI, Golem95, Samurai, Ninja and COLLIER are available'
545 ENDIF
546 END
547
548@@ -249,8 +332,11 @@
549 ELSEIF(LIBNUM.EQ.6)THEN
550 C Ninja
551 CALL DETECT_NINJA(NLOOPLINE,RANK,complex_mass,LPASS)
552+ ELSEIF(LIBNUM.EQ.7)THEN
553+C Collier
554+ CALL DETECT_COLLIER(NLOOPLINE,RANK,complex_mass,LPASS)
555 ELSE
556- STOP 'ONLY CUTTOOLS,PJFry++,IREGI,Golem95 and Samurai are available'
557+ STOP 'Only CutTools, PJFry++, IREGI, Golem95, Samurai, Ninja and COLLIER are available'
558 ENDIF
559 RETURN
560 END
561@@ -358,6 +444,65 @@
562 RETURN
563 END
564
565+## if(collier_available){
566+ SUBROUTINE DETECT_COLLIER(NLOOPLINE,RANK,complex_mass,LPASS)
567+C
568+C Detect whether Collier can be used or not
569+C
570+ USE COLLIER
571+ IMPLICIT NONE
572+C
573+C CONSTANTS
574+C
575+C
576+C ARGUMENTS
577+C
578+ INTEGER NLOOPLINE,RANK
579+ LOGICAL complex_mass,LPASS
580+C
581+C LOCAL VARIABLES
582+C
583+ INTEGER CURRENT_COLLIERMODE
584+C
585+C GLOBAL VARIABLES
586+C
587+ LOGICAL CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
588+ COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT, COLLIERINIT
589+ include 'MadLoopParams.inc'
590+C ----------
591+C BEGIN CODE
592+C ----------
593+ if (.NOT.COLLIERINIT) THEN
594+ CALL GETMODE_CLL(CURRENT_COLLIERMODE)
595+ ELSE
596+ CURRENT_COLLIERMODE = COLLIERMODE
597+ ENDIF
598+ LPASS=.TRUE.
599+ IF (CURRENT_COLLIERMODE.NE.1) THEN
600+C The DD branch is used and it has limitations
601+ IF((NLOOPLINE.GT.6).OR.(RANK.GT.NLOOPLINE)) then
602+ LPASS=.FALSE.
603+ endif
604+ ELSE
605+C Limitations of the COLI branch are academic.
606+ LPASS=.TRUE.
607+ ENDIF
608+ RETURN
609+ END
610+## }else{
611+ SUBROUTINE DETECT_COLLIER(NLOOPLINE,RANK,complex_mass,LPASS)
612+C
613+C ARGUMENTS
614+C
615+ INTEGER NLOOPLINE,RANK
616+ LOGICAL complex_mass,LPASS
617+C
618+C COLLIER is not available in this output. This subroutine is dummy.
619+C
620+ LPASS=.True.
621+ END
622+## }
623+
624 SUBROUTINE DETECT_PJFRY(NLOOPLINE,RANK,complex_mass,LPASS)
625 C
626 C DETECT whether PJFRY++ CAN BE USED OR NOT
627
628=== modified file 'Template/loop_material/StandAlone/SubProcesses/MadLoopParamReader.f'
629--- Template/loop_material/StandAlone/SubProcesses/MadLoopParamReader.f 2016-02-18 11:42:56 +0000
630+++ Template/loop_material/StandAlone/SubProcesses/MadLoopParamReader.f 2016-07-02 20:36:33 +0000
631@@ -33,6 +33,12 @@
632 stop 'CTModeRun must be >= -1 and <=6.'
633 endif
634
635+ else if (buff .eq. '#COLLIERGlobalCache') then
636+ read(666,*,end=999) COLLIERGlobalCache
637+ if (COLLIERGlobalCache .lt. -1) then
638+ stop 'COLLIERGlobalCache must be >= -1'
639+ endif
640+
641 else if (buff .eq. '#NRotations_DP') then
642 read(666,*,end=999) NRotations_DP
643 if (NRotations_DP .lt. 0 .or.
644@@ -52,7 +58,14 @@
645 if (MLStabThres.lt.0.0d0) then
646 stop 'MLStabThres must be >= 0'
647 endif
648-
649+
650+ else if (buff .eq. '#COLLIERRequiredAccuracy') then
651+ read(666,*,end=999) COLLIERRequiredAccuracy
652+ if (COLLIERRequiredAccuracy.le.0.0d0.and.
653+ & COLLIERRequiredAccuracy.ne.-1.0d0) then
654+ stop 'COLLIERRequiredAccuracy must be > 0 or = -1.0'
655+ endif
656+
657 else if (buff .eq. '#CTLoopLibrary') then
658 read(666,*,end=999) CTLoopLibrary
659 if (CTLoopLibrary.lt.2 .or.
660@@ -90,6 +103,21 @@
661 stop 'MaxAttempts must be >= 1'
662 endif
663
664+ else if (buff .eq. '#COLLIERComputeUVpoles') then
665+ read(666,*,end=999) COLLIERComputeUVpoles
666+
667+ else if (buff .eq. '#COLLIERComputeIRpoles') then
668+ read(666,*,end=999) COLLIERComputeIRpoles
669+
670+ else if (buff .eq. '#COLLIERUseInternalStabilityTest') then
671+ read(666,*,end=999) COLLIERUseInternalStabilityTest
672+
673+ else if (buff .eq. '#COLLIERUseCacheForPoles') then
674+ read(666,*,end=999) COLLIERUseCacheForPoles
675+
676+ else if (buff .eq. '#COLLIERCanOutput') then
677+ read(666,*,end=999) COLLIERCanOutput
678+
679 else if (buff .eq. '#UseLoopFilter') then
680 read(666,*,end=999) UseLoopFilter
681
682@@ -127,7 +155,7 @@
683
684 else if (buff .eq. '#MLReductionLib') then
685 read(666,*,end=999) MLReductionLib_str
686- MLReductionLib(1:6)=0
687+ MLReductionLib(1:7)=0
688 MLReductionLib_str_save=MLReductionLib_str
689 j=0
690 DO
691@@ -149,6 +177,8 @@
692 MLRed=5
693 ELSEIF(MLReductionLib_char.EQ.'6 ')THEN
694 MLRed=6
695+ ELSEIF(MLReductionLib_char.EQ.'7 ')THEN
696+ MLRed=7
697 ELSE
698 PRINT *, 'MLReductionLib is wrong: '//
699 $ TRIM(MLReductionLib_str_save)
700@@ -171,6 +201,12 @@
701 MLReductionLib_str=MLReductionLib_str(i+1:)
702 ENDIF
703 ENDDO
704+ else if (buff .eq. '#COLLIERMode') then
705+ read(666,*,end=999) COLLIERMode
706+ if (COLLIERMode .lt. 1 .or.
707+ & COLLIERMode .gt.3) then
708+ stop 'COLLIERMode must be >=1 and <=3.'
709+ endif
710 else if (buff .eq. '#IREGIRECY') then
711 read(666,*,end=999) IREGIRECY
712 else if (buff .eq. '#IREGIMODE') then
713@@ -218,8 +254,6 @@
714 & '==============================================================='
715 write(*,*) ' > MLReductionLib = '
716 $ //TRIM(MLReductionLib_str_save)
717- write(*,*) ' > IREGIMODE = ',IREGIMODE
718- write(*,*) ' > IREGIRECY = ',IREGIRECY
719 write(*,*) ' > CTModeRun = ',CTModeRun
720 write(*,*) ' > MLStabThres = ',MLStabThres
721 write(*,*) ' > NRotations_DP = ',NRotations_DP
722@@ -243,6 +277,19 @@
723 &UseQPIntegrandForNinja
724 write(*,*) ' > UseQPIntegrandForCutTools = ',
725 &UseQPIntegrandForCutTools
726+ write(*,*) ' > IREGIMODE = ',IREGIMODE
727+ write(*,*) ' > IREGIRECY = ',IREGIRECY
728+ write(*,*) ' > COLLIERMode = ',COLLIERMode
729+ write(*,*) ' > COLLIERRequiredAccuracy = ',
730+ $COLLIERRequiredAccuracy
731+ write(*,*) ' > COLLIERCanOutput = ',COLLIERCanOutput
732+ write(*,*) ' > COLLIERComputeUVpoles = ',COLLIERComputeUVpoles
733+ write(*,*) ' > COLLIERComputeIRpoles = ',COLLIERComputeIRpoles
734+ write(*,*) ' > COLLIERGlobalCache = ',COLLIERGlobalCache
735+ write(*,*) ' > COLLIERUseCacheForPoles = ',
736+ &COLLIERUseCacheForPoles
737+ write(*,*) ' > COLLIERUseInternalStabilityTest = ',
738+ &COLLIERUseInternalStabilityTest
739 write(*,*)
740 & '==============================================================='
741 paramPrinted=.TRUE.
742@@ -259,12 +306,22 @@
743 include "MadLoopParams.inc"
744
745 MLReductionLib(1)=6
746- MLReductionLib(2:6)=0
747+ MLReductionLib(2)=7
748+ MLReductionLib(3)=1
749+ MLReductionLib(4:7)=0
750 IREGIMODE=2
751 IREGIRECY=.TRUE.
752+ COLLIERComputeIRpoles = .TRUE.
753+ COLLIERComputeUVpoles = .TRUE.
754+ COLLIERUseCacheForPoles = .FALSE.
755+ COLLIERCanOutput = .FALSE.
756+ COLLIERGlobalCache = -1
757+ COLLIERMode=1
758+ COLLIERRequiredAccuracy=1.0d-8
759+ COLLIERUseInternalStabilityTest = .TRUE.
760 CTModeInit=0
761 CTModeRun=-1
762- NRotations_DP=1
763+ NRotations_DP=0
764 NRotations_QP=0
765 MLStabThres=1.0d-3
766 CTStabThres=1.0d-2
767@@ -281,6 +338,6 @@
768 OSThres=1.0d-13
769 ImprovePSPoint=2
770 UseQPIntegrandForCutTools=.True.
771- UseQPIntegrandForNinja=.False.
772+ UseQPIntegrandForNinja=.True.
773
774 end
775
776=== modified file 'Template/loop_material/StandAlone/SubProcesses/MadLoopParams.inc'
777--- Template/loop_material/StandAlone/SubProcesses/MadLoopParams.inc 2016-02-18 11:42:56 +0000
778+++ Template/loop_material/StandAlone/SubProcesses/MadLoopParams.inc 2016-07-02 20:36:33 +0000
779@@ -7,17 +7,24 @@
780 !
781 integer CTModeInit,CTModeRun,CheckCycle,MaxAttempts,
782 &CTLoopLibrary,NRotations_DP,NRotations_QP,ImprovePSPoint,
783- &MLReductionLib(7),IREGIMODE,HelicityFilterLevel
784-
785- real*8 MLStabThres,CTStabThres,ZeroThres,OSThres
786-
787- logical UseLoopFilter,LoopInitStartOver,DoubleCheckHelicityFilter
788+ &MLReductionLib(8),IREGIMODE,HelicityFilterLevel,COLLIERMode,
789+ &COLLIERGlobalCache
790+
791+ real*8 MLStabThres,CTStabThres,ZeroThres,OSThres,COLLIERRequiredAccuracy
792+
793+ logical UseLoopFilter,LoopInitStartOver,DoubleCheckHelicityFilter,
794+ &COLLIERComputeIRpoles,COLLIERComputeUVpoles,COLLIERCanOutput
795 logical HelInitStartOver,IREGIRECY,WriteOutFilters
796 logical UseQPIntegrandForNinja, UseQPIntegrandForCutTools
797+ logical COLLIERUseCacheForPoles,COLLIERUseInternalStabilityTest
798
799 common /MADLOOP/CTModeInit,CTModeRun,NRotations_DP,NRotations_QP,
800+ &COLLIERMode,COLLIERGlobalCache,
801 &ImprovePSPoint,CheckCycle, MaxAttempts,UseLoopFilter,MLStabThres,
802+ &COLLIERRequiredAccuracy,
803 &CTStabThres,CTLoopLibrary,LoopInitStartOver,
804+ &COLLIERComputeIRpoles,COLLIERComputeUVpoles,COLLIERCanOutput,
805+ &COLLIERUseCacheForPoles,COLLIERUseInternalStabilityTest,
806 &DoubleCheckHelicityFilter,ZeroThres,OSThres,HelInitStartOver,
807 &MLReductionLib,IREGIMODE,HelicityFilterLevel,IREGIRECY,
808 &WriteOutFilters,UseQPIntegrandForNinja,UseQPIntegrandForCutTools
809
810=== modified file 'Template/loop_material/StandAlone/SubProcesses/makefile'
811--- Template/loop_material/StandAlone/SubProcesses/makefile 2016-05-26 23:36:59 +0000
812+++ Template/loop_material/StandAlone/SubProcesses/makefile 2016-07-02 20:36:33 +0000
813@@ -45,6 +45,7 @@
814 $(patsubst $(DOTF),$(DOTO),$(wildcard mp_coef_construction_*.f)) \
815 $(patsubst $(DOTF),$(DOTO),$(wildcard TIR_interface.f)) \
816 $(patsubst $(DOTF),$(DOTO),$(wildcard GOLEM_interface.f)) \
817+ $(patsubst $(DOTF),$(DOTO),$(wildcard COLLIER_interface.f)) \
818 $(patsubst $(DOTF),$(DOTO),$(wildcard compute_color_flows.f))
819
820 OLP_PROCESS= MadLoopParamReader.o MadLoopCommons.o \
821@@ -64,6 +65,7 @@
822 $(patsubst $(DOTF),$(DOTO),$(wildcard $(LOOP_PREFIX)*/mp_coef_construction_*.f)) \
823 $(patsubst $(DOTF),$(DOTO),$(wildcard $(LOOP_PREFIX)*/TIR_interface.f)) \
824 $(patsubst $(DOTF),$(DOTO),$(wildcard $(LOOP_PREFIX)*/GOLEM_interface.f)) \
825+ $(patsubst $(DOTF),$(DOTO),$(wildcard $(LOOP_PREFIX)*/COLLIER_interface.f)) \
826 $(patsubst $(DOTF),$(DOTO),$(wildcard $(LOOP_PREFIX)*/compute_color_flows.f))
827
828 $(PROG): check_sa.o $(PROCESS) makefile $(LIBS)
829
830=== modified file 'UpdateNotes.txt'
831--- UpdateNotes.txt 2016-06-26 09:25:25 +0000
832+++ UpdateNotes.txt 2016-07-02 20:36:33 +0000
833@@ -10,6 +10,8 @@
834 OM: Fix a bug in MadSpin where the cross-section reported in the <init> block of the LHEF
835 was wrongly assigned when multiple process were present in the LHEF and that different Brancing ratio
836 were associated to each of those processes.
837+ RF: For NLO process generation, fix a problem with turning on PDF reweighting with sets that have only a
838+ single member. Also, allow for reweighting with up to 25 PDF sets (and their error members) for a single run.
839
840
841 2.4.2 (10/06/16)
842
843=== modified file 'input/.mg5_configuration_default.txt'
844--- input/.mg5_configuration_default.txt 2016-04-28 19:07:40 +0000
845+++ input/.mg5_configuration_default.txt 2016-07-02 20:36:33 +0000
846@@ -180,12 +180,17 @@
847 #! if samurai=/PATH/TO/samurai/lib: use that specific installation path for samurai
848 # samurai = None
849
850-#! Set the samurai directory containing ninja's library
851-#! if auto: try to find it automatically on the system (default)
852+#! Set the Ninja directory containing ninja's library
853 #! if '' or None: disabling ninja
854 #! if ninja=/PATH/TO/ninja/lib: use that specific installation path for ninja
855 # ninja = ./HEPTools/lib
856
857+#! Set the COLLIER directory containing COLLIER's library
858+#! if '' or None: disabling COLLIER
859+#! if ninja=/PATH/TO/ninja/lib: use that specific installation path for COLLIER
860+# Note that it is necessary that you have generated a static library for COLLIER
861+# collier = ./HEPTools/lib
862+
863 #! Set how MadLoop dependencies (such as CutTools) should be handled
864 #! > external : ML5 places a link to the MG5_aMC-wide libraries
865 #! > internal : ML5 copies all dependencies in the output so that it is independent
866
867=== modified file 'madgraph/core/base_objects.py'
868--- madgraph/core/base_objects.py 2016-02-19 13:28:49 +0000
869+++ madgraph/core/base_objects.py 2016-07-02 20:36:33 +0000
870@@ -1021,6 +1021,8 @@
871 class Model(PhysicsObject):
872 """A class to store all the model information."""
873
874+ mg5_name = False #store if particle name follow mg5 convention
875+
876 def default_setup(self):
877
878 self['name'] = ""
879@@ -1045,6 +1047,7 @@
880 # attribute which might be define if needed
881 #self['name2pdg'] = {'name': pdg}
882
883+
884
885 def filter(self, name, value):
886 """Filter for model property values"""
887@@ -1429,7 +1432,9 @@
888 def pass_particles_name_in_mg_default(self):
889 """Change the name of the particles such that all SM and MSSM particles
890 follows the MG convention"""
891-
892+
893+ self.mg5_name = True
894+
895 # Check that default name/antiname is not already use
896 def check_name_free(self, name):
897 """ check if name is not use for a particle in the model if it is
898
899=== modified file 'madgraph/interface/amcatnlo_run_interface.py'
900--- madgraph/interface/amcatnlo_run_interface.py 2016-06-20 10:26:01 +0000
901+++ madgraph/interface/amcatnlo_run_interface.py 2016-07-02 20:36:33 +0000
902@@ -1932,7 +1932,8 @@
903
904 def combine_plots_FO(self,folder_name,jobs):
905 """combines the plots and puts then in the Events/run* directory"""
906- devnull = os.open(os.devnull, os.O_RDWR)
907+ devnull = open(os.devnull, 'w')
908+
909 if self.analyse_card['fo_analysis_format'].lower() == 'topdrawer':
910 misc.call(['./combine_plots_FO.sh'] + folder_name, \
911 stdout=devnull,
912@@ -1963,7 +1964,6 @@
913 else:
914 logger.info('The results of this run' + \
915 ' have been saved in %s' % pjoin(self.me_dir, 'Events', self.run_name))
916- devnull.close()
917
918 def combine_plots_HwU(self,jobs,out,normalisation=None):
919 """Sums all the plots in the HwU format."""
920@@ -2401,6 +2401,7 @@
921 4 : 'Golem95',
922 5 : 'Samurai',
923 6 : 'Ninja (double precision)',
924+ 7 : 'COLLIER',
925 8 : 'Ninja (quadruple precision)',
926 9 : 'CutTools (quadruple precision)'}
927 RetUnit_finder =re.compile(
928@@ -3626,20 +3627,20 @@
929 with open(pjoin(self.me_dir, 'SubProcesses', path, 'scale_pdf_dependence.dat'),'r') as f:
930 data_line=f.readline()
931 if "scale variations:" in data_line:
932- for i,scale in enumerate(self.run_card['dynamical_scale_choice']):
933+ for j,scale in enumerate(self.run_card['dynamical_scale_choice']):
934 data_line = f.readline().split()
935 scales_this = [float(val)*evt_wghts[i] for val in f.readline().replace("D", "E").split()]
936 try:
937- scales[i] = [a + b for a, b in zip(scales[i], scales_this)]
938+ scales[j] = [a + b for a, b in zip(scales[j], scales_this)]
939 except IndexError:
940 scales+=[scales_this]
941 data_line=f.readline()
942 if "pdf variations:" in data_line:
943- for i,pdf in enumerate(self.run_card['lhaid']):
944+ for j,pdf in enumerate(self.run_card['lhaid']):
945 data_line = f.readline().split()
946 pdfs_this = [float(val)*evt_wghts[i] for val in f.readline().replace("D", "E").split()]
947 try:
948- pdfs[i] = [a + b for a, b in zip(pdfs[i], pdfs_this)]
949+ pdfs[j] = [a + b for a, b in zip(pdfs[j], pdfs_this)]
950 except IndexError:
951 pdfs+=[pdfs_this]
952
953
954=== modified file 'madgraph/interface/common_run_interface.py'
955--- madgraph/interface/common_run_interface.py 2016-06-20 10:26:01 +0000
956+++ madgraph/interface/common_run_interface.py 2016-07-02 20:36:33 +0000
957@@ -516,7 +516,7 @@
958 options_madevent = {'automatic_html_opening':True,
959 'notification_center':True,
960 'run_mode':2,
961- 'cluster_queue':'madgraph',
962+ 'cluster_queue':None,
963 'cluster_time':None,
964 'cluster_size':100,
965 'cluster_memory':None,
966@@ -2036,9 +2036,9 @@
967 cross = current['cross']
968 error = current['error']
969 self.results.add_run( new_run, self.run_card)
970- self.results.add_detail('nb_event', nb_event)
971- self.results.add_detail('cross', cross * madspin_cmd.branching_ratio)
972- self.results.add_detail('error', error * madspin_cmd.branching_ratio + cross * madspin_cmd.err_branching_ratio)
973+ self.results.add_detail('nb_event', int(nb_event*madspin_cmd.efficiency))
974+ self.results.add_detail('cross', madspin_cmd.cross)#cross * madspin_cmd.branching_ratio)
975+ self.results.add_detail('error', madspin_cmd.error+ cross * madspin_cmd.err_branching_ratio)
976 self.results.add_detail('run_mode', current['run_mode'])
977
978 self.run_name = new_run
979
980=== modified file 'madgraph/interface/loop_interface.py'
981--- madgraph/interface/loop_interface.py 2016-05-24 09:52:16 +0000
982+++ madgraph/interface/loop_interface.py 2016-07-02 20:36:33 +0000
983@@ -538,10 +538,11 @@
984
985 # Fortran MadGraph5_aMC@NLO Standalone
986 if self._export_format in self.supported_ML_format:
987- for me in matrix_elements:
988+ for unique_id, me in enumerate(matrix_elements):
989 calls = calls + \
990 self._curr_exporter.generate_subprocess_directory_v4(\
991- me, self._curr_fortran_model)
992+ me, self._curr_fortran_model, (unique_id+1))
993+ self._curr_exporter.write_global_specs(matrix_elements)
994 # If all ME's do not share the same maximum loop vertex rank and the
995 # same loop maximum wavefunction size, we need to set the maximum
996 # in coef_specs.inc of the HELAS Source. The SubProcesses/P* directory
997@@ -554,6 +555,7 @@
998 if len(set(max_lwfspins))>1 or len(set(max_loop_vert_ranks))>1:
999 self._curr_exporter.fix_coef_specs(max(max_lwfspins),\
1000 max(max_loop_vert_ranks))
1001+ self._curr_exporter.write_global_specs(matrix_elements)
1002
1003 # Just the matrix.f files
1004 if self._export_format == 'matrix':
1005
1006=== modified file 'madgraph/interface/madevent_interface.py'
1007--- madgraph/interface/madevent_interface.py 2016-06-19 12:45:10 +0000
1008+++ madgraph/interface/madevent_interface.py 2016-07-02 20:36:33 +0000
1009@@ -2540,7 +2540,7 @@
1010 # helicity filters.
1011 self.MadLoopparam.set('CheckCycle',4, ifnotdefault=False)
1012
1013- # For now it is tricky to have eahc channel performing the helicity
1014+ # For now it is tricky to have each channel performing the helicity
1015 # double check. What we will end up doing is probably some kind
1016 # of new initialization round at the beginning of each launch
1017 # command, to reset the filters.
1018@@ -2548,7 +2548,7 @@
1019 ifnotdefault=False)
1020
1021 # Thanks to TIR recycling, TIR is typically much faster for Loop-induced
1022- # processes, so that we place OPP last.
1023+ # processes when not doing MC over helicities, so that we place OPP last.
1024 if not hasattr(self, 'run_card'):
1025 run_card = banner_mod.RunCard(opt['run_card'])
1026 else:
1027@@ -2561,7 +2561,7 @@
1028 """You chose to set the preferred reduction technique in MadLoop to be OPP (see parameter MLReductionLib).
1029 Beware that this can bring significant slowdown; the optimal choice --when not MC over helicity-- being to first start with TIR reduction.""")
1030 # We do not include GOLEM for now since it cannot recycle TIR coefs yet.
1031- self.MadLoopparam.set('MLReductionLib','2|6|1', ifnotdefault=False)
1032+ self.MadLoopparam.set('MLReductionLib','7|6|1', ifnotdefault=False)
1033 else:
1034 if 'MLReductionLib' in self.MadLoopparam.user_set and \
1035 not (self.MadLoopparam.get('MLReductionLib').startswith('1') or
1036@@ -2569,7 +2569,7 @@
1037 logger.warning(
1038 """You chose to set the preferred reduction technique in MadLoop to be different than OPP (see parameter MLReductionLib).
1039 Beware that this can bring significant slowdown; the optimal choice --when MC over helicity-- being to first start with OPP reduction.""")
1040- self.MadLoopparam.set('MLReductionLib','6|1|2', ifnotdefault=False)
1041+ self.MadLoopparam.set('MLReductionLib','6|7|1', ifnotdefault=False)
1042
1043 # Also TIR cache will only work when NRotations_DP=0 (but only matters
1044 # when not MC-ing over helicities) so it will be hard-reset by MadLoop
1045@@ -2992,16 +2992,18 @@
1046 sum_xsec += result.get('xsec')
1047 sum_xerru.append(result.get('xerru'))
1048 sum_axsec += result.get('axsec')
1049+
1050 if len(AllEvent) >= 80: #perform a partial unweighting
1051 AllEvent.unweight(pjoin(self.me_dir, "Events", self.run_name, "partials%s.lhe.gz" % partials),
1052- get_wgt, log_level=logging.DEBUG)
1053+ get_wgt, log_level=logging.DEBUG, write_init=True)
1054 AllEvent = lhe_parser.MultiEventFile()
1055+ AllEvent.banner = self.banner
1056 AllEvent.add(pjoin(self.me_dir, "Events", self.run_name, "partials%s.lhe.gz" % partials),
1057 sum_xsec,
1058 math.sqrt(sum(x**2 for x in sum_xerru)),
1059 sum_axsec)
1060 partials +=1
1061-
1062+
1063 nb_event = AllEvent.unweight(pjoin(self.me_dir, "Events", self.run_name, "unweighted_events.lhe.gz"),
1064 get_wgt, trunc_error=1e-2, event_target=self.run_card['nevents'],
1065 log_level=logging.DEBUG)
1066
1067=== modified file 'madgraph/interface/madgraph_interface.py'
1068--- madgraph/interface/madgraph_interface.py 2016-06-26 09:25:25 +0000
1069+++ madgraph/interface/madgraph_interface.py 2016-07-02 20:36:33 +0000
1070@@ -910,8 +910,11 @@
1071
1072 user_options = {'--energy':'1000','--split_orders':'-1',
1073 '--reduction':'1|2|3|4|5|6','--CTModeRun':'-1',
1074- '--helicity':'-1','--seed':'-1'}
1075-
1076+ '--helicity':'-1','--seed':'-1','--collier_cache':'-1',
1077+ '--collier_req_acc':'auto',
1078+ '--collier_internal_stability_test':'False',
1079+ '--collier_mode':'1'}
1080+
1081 if args[0] in ['cms'] or args[0].lower()=='cmsoptions':
1082 # increase the default energy to 5000
1083 user_options['--energy']='5000'
1084@@ -1890,7 +1893,7 @@
1085 if len(args) > 0 and args[-1] != '>' and n_part_entered > 0:
1086 syntax.append('>')
1087 if '>' in args and args.index('>') < len(args) - 1:
1088- couplings.extend(sum([[c+"=",c+'^2'] for c in \
1089+ couplings.extend(sum([[c+"<=", c+"==", c+">",c+'^2<=',c+'^2==',c+'^2>' ] for c in \
1090 self._couplings+['WEIGHTED']],[]))
1091 syntax.extend(['@','$','/','>',','])
1092 if '[' not in line and ',' not in line and len(pert_couplings_allowed)>0:
1093@@ -2451,7 +2454,10 @@
1094 all_name = self.find_restrict_card(path, no_restrict=False)
1095 all_name += self.find_restrict_card(path, no_restrict=False,
1096 base_dir=pjoin(MG5DIR,'models'))
1097-
1098+ if os.environ['PYTHONPATH']:
1099+ for modeldir in os.environ['PYTHONPATH'].split(':'):
1100+ all_name += self.find_restrict_card(path, no_restrict=False,
1101+ base_dir=modeldir)
1102 # select the possibility according to the current line
1103 all_name = [name+' ' for name in all_name if name.startswith(text)
1104 and name.strip() != text]
1105@@ -2524,6 +2530,13 @@
1106 pjoin(MG5DIR,'models'),
1107 only_dirs = True) \
1108 if file_cond(name)]
1109+ if mode == 'model' and 'PYTHONPATH' in os.environ:
1110+ for modeldir in os.environ['PYTHONPATH'].split(':'):
1111+ model_list += [name for name in self.path_completion(text,
1112+ modeldir, only_dirs=True)
1113+ if os.path.exists(pjoin(modeldir,name, 'particles.py'))]
1114+
1115+
1116
1117 if mode == 'model_v4':
1118 completion_categories['model name'] = model_list
1119@@ -2561,8 +2574,6 @@
1120 else:
1121 #this means this function is called as a subgroup of another completion
1122 return completion_categories
1123-
1124-
1125 def find_restrict_card(self, model_name, base_dir='./', no_restrict=True):
1126 """find the restriction file associate to a given model"""
1127
1128@@ -2630,7 +2641,7 @@
1129 'update', 'Delphes2', 'SysCalc', 'Golem95', 'PJFry',
1130 'QCDLoop']
1131 # The targets below are installed using the HEPToolsInstaller.py script
1132- _advanced_install_opts = ['ninja']
1133+ _advanced_install_opts = ['ninja','collier']
1134
1135 # The options below are commented for now but already available
1136 # _advanced_install_opts += ['pythia8','zlib','boost','lhapdf6','lhapdf5','hepmc','mg5amc_py8_interface','oneloop']
1137@@ -2685,6 +2696,7 @@
1138 'golem':'auto',
1139 'samurai':None,
1140 'ninja':'./HEPTools/lib',
1141+ 'collier':'./HEPTools/lib',
1142 'lhapdf':'lhapdf-config',
1143 'applgrid':'applgrid-config',
1144 'amcfast':'amcfast-config',
1145@@ -3527,6 +3539,15 @@
1146 " must be an integer, not %s."%option[1])
1147 elif option[0]=='--reduction':
1148 MLoptions['MLReductionLib']=[int(ir) for ir in option[1].split('|')]
1149+ elif option[0]=='--collier_mode':
1150+ MLoptions['COLLIERMode']=int(option[1])
1151+ elif option[0]=='--collier_cache':
1152+ MLoptions['COLLIERGlobalCache']=int(option[1])
1153+ elif option[0]=='--collier_req_acc':
1154+ if option[1]!='auto':
1155+ MLoptions['COLLIERRequiredAccuracy']=float(option[1])
1156+ elif option[0]=='--collier_internal_stability_test':
1157+ MLoptions['COLLIERUseInternalStabilityTest']=eval(option[1])
1158 elif option[0]=='--CTModeRun':
1159 try:
1160 MLoptions['CTModeRun']=int(option[1])
1161@@ -3891,6 +3912,14 @@
1162 logger_check.warning('Samurai not available on your system; it will be skipped.')
1163 MLoptions["MLReductionLib"].remove(5)
1164
1165+ if 'collier' in self.options and isinstance(self.options['collier'],str):
1166+ TIR_dir['collier_dir']=self.options['collier']
1167+ else:
1168+ if "MLReductionLib" in MLoptions:
1169+ if 7 in MLoptions["MLReductionLib"]:
1170+ logger_check.warning('Collier not available on your system; it will be skipped.')
1171+ MLoptions["MLReductionLib"].remove(7)
1172+
1173 if 'ninja' in self.options and isinstance(self.options['ninja'],str):
1174 TIR_dir['ninja_dir']=self.options['ninja']
1175 else:
1176@@ -5390,7 +5419,9 @@
1177 self.options['mg5amc_py8_interface_path'] = \
1178 pjoin(MG5DIR,'HEPTools','MG5aMC_PY8_interface')
1179 self.exec_cmd('save options')
1180-
1181+ elif tool == 'collier':
1182+ self.options['collier'] = pjoin(os.curdir,'HEPTools','lib')
1183+ self.exec_cmd('save options')
1184 elif tool == 'ninja':
1185 if not misc.get_ninja_quad_prec_support(pjoin(
1186 MG5DIR,'HEPTools','ninja','lib')):
1187@@ -5489,6 +5520,7 @@
1188 'hepmc':['CPC 134 (2001) 41-46'],
1189 'mg5amc_py8_interface':['arXiv:1410.3012','arXiv:XXXX.YYYYY'],
1190 'ninja':['arXiv:1203.0291','arXiv:1403.1229','arXiv:1604.01363'],
1191+ 'collier':['arXiv:1604.06792'],
1192 'oneloop':['arXiv:1007.4716']}
1193
1194 if args[0] in advertisements:
1195@@ -6859,8 +6891,8 @@
1196 logger.info('set fastjet to %s' % args[1])
1197 self.options[args[0]] = args[1]
1198
1199- elif args[0] in ['pjfry','golem','samurai','ninja'] and \
1200- not (args[0]=='ninja' and args[1]=='./HEPTools/lib'):
1201+ elif args[0] in ['pjfry','golem','samurai','ninja','collier'] and \
1202+ not (args[0] in ['ninja','collier'] and args[1]=='./HEPTools/lib'):
1203 if args[1] in ['None',"''",'""']:
1204 self.options[args[0]] = None
1205 else:
1206@@ -7260,6 +7292,8 @@
1207 if self._export_format == 'madevent':
1208 calls += self._curr_exporter.export_processes(self._curr_matrix_elements,
1209 self._curr_fortran_model)
1210+ self._curr_exporter.write_global_specs(
1211+ self._curr_matrix_elements.get_matrix_elements())
1212
1213 # Write the procdef_mg5.dat file with process info
1214 card_path = pjoin(path, os.path.pardir, 'SubProcesses', \
1215
1216=== modified file 'madgraph/iolibs/export_fks.py'
1217--- madgraph/iolibs/export_fks.py 2016-05-12 10:46:19 +0000
1218+++ madgraph/iolibs/export_fks.py 2016-07-02 20:36:33 +0000
1219@@ -187,7 +187,8 @@
1220 writer = writers.FortranWriter(os.path.join(self.dir_path,
1221 "SubProcesses","MadLoopCommons.f"))
1222 writer.writelines(MadLoopCommon%{
1223- 'print_banner_commands':self.MadLoop_banner})
1224+ 'print_banner_commands':self.MadLoop_banner},
1225+ context={'collier_available':False})
1226 writer.close()
1227
1228 # Write the cts_mpc.h and cts_mprec.h files imported from CutTools
1229@@ -1573,12 +1574,19 @@
1230 matrix_element.get('processes')[0].nice_string(print_weighted=False))
1231 plot.draw()
1232
1233+ # We also need to write the overall maximum quantities for this group
1234+ # of processes in 'global_specs.inc'. In aMCatNLO, there is always
1235+ # only one process, so this is trivial
1236+ self.write_global_specs(matrix_element)
1237+ open('unique_id.inc','w').write(
1238+""" integer UNIQUE_ID
1239+ parameter(UNIQUE_ID=1)""")
1240+
1241 linkfiles = ['coupl.inc', 'mp_coupl.inc', 'mp_coupl_same_name.inc',
1242 'cts_mprec.h', 'cts_mpc.h', 'MadLoopParamReader.f',
1243- 'MadLoopCommons.f','MadLoopParams.inc']
1244+ 'MadLoopCommons.f','MadLoopParams.inc','global_specs.inc']
1245
1246 # We should move to MadLoop5_resources directory from the SubProcesses
1247-
1248 ln(pjoin(os.path.pardir,os.path.pardir,'MadLoopParams.dat'),
1249 pjoin('..','MadLoop5_resources'))
1250
1251@@ -3090,17 +3098,31 @@
1252 libpath,"lib%s.a"%tir,tir_name=tir)
1253 setattr(self,tir_dir,libpath)
1254 if libpath != "":
1255- if tir in ['pjfry','ninja','golem', 'samurai']:
1256+ if tir in ['pjfry','ninja','golem', 'samurai','collier']:
1257 # We should link dynamically when possible, so we use the original
1258 # location of these libraries.
1259 link_tir_libs.append('-L%s/ -l%s'%(libpath,tir))
1260 tir_libs.append('%s/lib%s.$(libext)'%(libpath,tir))
1261- # We must add the corresponding includes for golem, samurai
1262- # and ninja
1263- if tir in ['golem','samurai','ninja']:
1264+ # For Ninja, we must also link against OneLoop.
1265+ if tir in ['ninja']:
1266+ if not any(os.path.isfile(pjoin(libpath,'libavh_olo.%s'%ext))
1267+ for ext in ['a','dylib','so']):
1268+ raise MadGraph5Error(
1269+"The OneLOop library 'libavh_olo.(a|dylib|so)' could no be found in path '%s'. Please place a symlink to it there."%libpath)
1270+ link_tir_libs.append('-L%s/ -l%s'%(libpath,'avh_olo'))
1271+ tir_libs.append('%s/lib%s.$(libext)'%(libpath,'avh_olo'))
1272+ # We must add the corresponding includes for these TIR
1273+ if tir in ['golem','samurai','ninja','collier']:
1274 trg_path = pjoin(os.path.dirname(libpath),'include')
1275- to_include = misc.find_includes_path(trg_path,
1276+ if os.path.isdir(trg_path):
1277+ to_include = misc.find_includes_path(trg_path,
1278 self.include_names[tir])
1279+ else:
1280+ to_include = None
1281+ # Special possible location for collier
1282+ if to_include is None and tir=='collier':
1283+ to_include = misc.find_includes_path(
1284+ pjoin(libpath,'modules'),self.include_names[tir])
1285 if to_include is None:
1286 logger.error(
1287 'Could not find the include directory for %s, looking in %s.\n' % (tir ,str(trg_path))+
1288@@ -3170,7 +3192,8 @@
1289 writer = writers.FortranWriter(os.path.join(self.dir_path,
1290 "SubProcesses","MadLoopCommons.f"))
1291 writer.writelines(MadLoopCommon%{
1292- 'print_banner_commands':self.MadLoop_banner})
1293+ 'print_banner_commands':self.MadLoop_banner},
1294+ context={'collier_available':self.tir_available_dict['collier']})
1295 writer.close()
1296
1297 # link the files from the MODEL
1298@@ -3280,14 +3303,21 @@
1299 print_weighted=False))
1300 plot.draw()
1301
1302+ # We also need to write the overall maximum quantities for this group
1303+ # of processes in 'global_specs.inc'. In aMCatNLO, there is always
1304+ # only one process, so this is trivial
1305+ self.write_global_specs(matrix_element)
1306+ open('unique_id.inc','w').write(
1307+""" integer UNIQUE_ID
1308+ parameter(UNIQUE_ID=1)""")
1309+
1310 linkfiles = ['coupl.inc', 'mp_coupl.inc', 'mp_coupl_same_name.inc',
1311 'cts_mprec.h', 'cts_mpc.h', 'MadLoopParamReader.f',
1312- 'MadLoopParams.inc','MadLoopCommons.f']
1313+ 'MadLoopParams.inc','MadLoopCommons.f','global_specs.inc']
1314
1315 for file in linkfiles:
1316 ln('../../%s' % file)
1317-
1318-
1319+
1320 os.system("ln -s ../../makefile_loop makefile")
1321
1322 # We should move to MadLoop5_resources directory from the SubProcesses
1323
1324=== modified file 'madgraph/iolibs/export_v4.py'
1325--- madgraph/iolibs/export_v4.py 2016-04-16 23:51:09 +0000
1326+++ madgraph/iolibs/export_v4.py 2016-07-02 20:36:33 +0000
1327@@ -102,9 +102,11 @@
1328
1329 calls = 0
1330 if isinstance(matrix_elements, group_subprocs.SubProcessGroupList):
1331+ unique_id=1
1332 for (group_number, me_group) in enumerate(matrix_elements):
1333 calls = calls + self.generate_subprocess_directory_v4(\
1334- me_group, fortran_model, group_number)
1335+ me_group, fortran_model, group_number, unique_id=unique_id)
1336+ unique_id += len(me_group.get('matrix_elements'))
1337 else:
1338 for me_number, me in enumerate(matrix_elements.get_matrix_elements()):
1339 calls = calls + self.generate_subprocess_directory_v4(\
1340@@ -112,7 +114,16 @@
1341
1342 return calls
1343
1344-
1345+ #===========================================================================
1346+ # Generate an include file with global quantities about all ME's output.
1347+ #===========================================================================
1348+ def write_global_specs(self, matrix_elements):
1349+ """ Writes the file global_specs.inc which contains general information
1350+ about *all* the ME's output in this directory."""
1351+
1352+ # Do nothing here, but daughter classes such as LoopOptimizedExporterFortran
1353+ # overwrites this.
1354+ pass
1355
1356 #===========================================================================
1357 # create the run_card
1358@@ -4462,10 +4473,12 @@
1359 #===========================================================================
1360 def generate_subprocess_directory_v4(self, subproc_group,
1361 fortran_model,
1362- group_number):
1363+ group_number,
1364+ unique_id=None):
1365 """Generate the Pn directory for a subprocess group in MadEvent,
1366 including the necessary matrix_N.f files, configs.inc and various
1367- other helper files"""
1368+ other helper files. Unique_id is dummy here, but not in
1369+ LoopInducedExporterMEGroup, so it must be kept."""
1370
1371 assert isinstance(subproc_group, group_subprocs.SubProcessGroup), \
1372 "subproc_group object not SubProcessGroup"
1373@@ -6261,34 +6274,58 @@
1374 else:
1375 curr_proc = None
1376
1377- requires_ninja = opt['loop_optimized_output'] and (not curr_proc is None) and \
1378- (curr_proc.get('perturbation_couplings') != [] and \
1379- not curr_proc.get('NLO_mode') in [None,'real','tree','LO','LOonly'])
1380+ requires_reduction_tool = opt['loop_optimized_output'] and \
1381+ (not curr_proc is None) and \
1382+ (curr_proc.get('perturbation_couplings') != [] and \
1383+ not curr_proc.get('NLO_mode') in [None,'real','tree','LO','LOonly'])
1384 # An installation is required then, but only if the specified path is the
1385 # default local one and that the Ninja library appears missing.
1386- if requires_ninja and (not opt['ninja'] is None) and\
1387+ if requires_reduction_tool:
1388+ if (not opt['ninja'] is None) and\
1389 os.path.abspath(opt['ninja'])==pjoin(MG5DIR,'HEPTools','lib') and\
1390 not os.path.isfile(pjoin(MG5DIR,'HEPTools','lib','libninja.a')):
1391- # Then install Ninja here from the tarballs in the vendor
1392- # directory so that it would work offline too.
1393- logger.info(
1394+ # Then install Ninja here from the tarballs in the vendor
1395+ # directory so that it would work offline too.
1396+ logger.info(
1397 """MG5aMC will now install the loop reduction tool 'Ninja' from the local offline installer.
1398 Use the command 'install ninja' if you want to update to the latest online version.
1399 This installation can take some time but only needs to be performed once.""",'$MG:color:GREEN')
1400- try:
1401- cmd.do_install('ninja',paths={'HEPToolsInstaller':
1402+ try:
1403+ cmd.do_install('ninja',paths={'HEPToolsInstaller':
1404 pjoin(MG5DIR,'vendor','OfflineHEPToolsInstaller.tar.gz')},
1405- additional_options=[
1406+ additional_options=[
1407 '--ninja_tarball=%s'%pjoin(MG5DIR,'vendor','ninja.tar.gz'),
1408 '--oneloop_tarball=%s'%pjoin(MG5DIR,'vendor','oneloop.tar.gz')])
1409- except InvalidCmd:
1410+ except InvalidCmd:
1411 logger.warning(
1412 """The offline installation of Ninja was unsuccessful, and MG5aMC disabled it.
1413 In the future, if you want to reactivate Ninja, you can do so by re-attempting
1414 its online installation with the command 'install ninja' or install it on your
1415 own and set the path to its library in the MG5aMC option 'ninja'.""")
1416 cmd.exec_cmd("set ninja ''")
1417- cmd.exec_cmd('save options')
1418+ cmd.exec_cmd('save options')
1419+ if (not opt['collier'] is None) and\
1420+ os.path.abspath(opt['collier'])==pjoin(MG5DIR,'HEPTools','lib') and\
1421+ not os.path.isfile(pjoin(MG5DIR,'HEPTools','lib','libcollier.a')):
1422+ # Then install Collier here from the tarballs in the vendor
1423+ # directory so that it would work offline too.
1424+ logger.info(
1425+"""MG5aMC will now install the loop reduction tool 'COLLIER' from the local offline installer.
1426+Use the command 'install collier' if you want to update to the latest online version.
1427+This installation can take some time but only needs to be performed once.""",'$MG:color:GREEN')
1428+ try:
1429+ cmd.do_install('collier',paths={'HEPToolsInstaller':
1430+ pjoin(MG5DIR,'vendor','OfflineHEPToolsInstaller.tar.gz')},
1431+ additional_options=[
1432+ '--collier_tarball=%s'%pjoin(MG5DIR,'vendor','collier.tar.gz')])
1433+ except InvalidCmd:
1434+ logger.warning(
1435+"""The offline installation of COLLIER was unsuccessful, and MG5aMC disabled it.
1436+In the future, if you want to reactivate COLLIER, you can do so by re-attempting
1437+its online installation with the command 'install collier' or install it on your
1438+own and set the path to its library in the MG5aMC option 'collier'.""")
1439+ cmd.exec_cmd("set collier ''")
1440+ cmd.exec_cmd('save options')
1441
1442
1443 # ==========================================================================
1444@@ -6304,6 +6341,7 @@
1445 'golem_dir':cmd.options['golem'],
1446 'samurai_dir':cmd.options['samurai'],
1447 'ninja_dir':cmd.options['ninja'],
1448+ 'collier_dir':cmd.options['collier'],
1449 'fortran_compiler':cmd.options['fortran_compiler'],
1450 'f2py_compiler':cmd.options['f2py_compiler'],
1451 'output_dependencies':cmd.options['output_dependencies'],
1452@@ -6431,10 +6469,12 @@
1453 #===========================================================================
1454 def generate_subprocess_directory_v4(self, subproc_group,
1455 fortran_model,
1456- group_number):
1457+ group_number,
1458+ unique_id=None):
1459 """Generate the Pn directory for a subprocess group in MadEvent,
1460 including the necessary matrix_N.f files, configs.inc and various
1461- other helper files"""
1462+ other helper files. Unique_id is dummy here, but not in
1463+ LoopInducedExporterMEGroup, so it must be kept."""
1464
1465 if not isinstance(subproc_group, group_subprocs.SubProcessGroup):
1466 raise base_objects.PhysicsObject.PhysicsObjectError,\
1467
1468=== modified file 'madgraph/iolibs/template_files/loop/check_sa.inc'
1469--- madgraph/iolibs/template_files/loop/check_sa.inc 2016-02-17 21:24:01 +0000
1470+++ madgraph/iolibs/template_files/loop/check_sa.inc 2016-07-02 20:36:33 +0000
1471@@ -262,6 +262,7 @@
1472 write(*,*) 'Estimated accuracy could not be computed for an unknown reason.'
1473 endif
1474 endif
1475+ Write (*,'(1x,a23,3x,i3)') 'MadLoop return code =',RETURNCODE
1476 write (*,*) "---------------------------------"
1477 IF (NBORNCHOSEN.EQ.0) THEN
1478 write (*,*) "No Born contribution satisfied the squared order constraints."
1479
1480=== modified file 'madgraph/iolibs/template_files/loop/check_sa_loop_induced.inc'
1481--- madgraph/iolibs/template_files/loop/check_sa_loop_induced.inc 2016-02-17 21:24:01 +0000
1482+++ madgraph/iolibs/template_files/loop/check_sa_loop_induced.inc 2016-07-02 20:36:33 +0000
1483@@ -241,6 +241,7 @@
1484 write(*,*) 'Estimated accuracy could not be computed for an unknown reason.'
1485 endif
1486 endif
1487+ Write (*,'(1x,a23,3x,i3)') 'MadLoop return code =',RETURNCODE
1488 write (*,*) "---------------------------------"
1489 IF (NLOOPCHOSEN.ne.NSQUAREDSO) THEN
1490 write (*,*) "Selected squared coupling orders combination for the loop summed result below:"
1491
1492=== added file 'madgraph/iolibs/template_files/loop_optimized/COLLIER_interface.inc'
1493--- madgraph/iolibs/template_files/loop_optimized/COLLIER_interface.inc 1970-01-01 00:00:00 +0000
1494+++ madgraph/iolibs/template_files/loop_optimized/COLLIER_interface.inc 2016-07-02 20:36:33 +0000
1495@@ -0,0 +1,646 @@
1496+ SUBROUTINE %(proc_prefix)sCOLLIERLOOP(CTMODE, NLOOPLINE,RANK,PL,PDEN,M2L,TIRCOEFS,TIRCOEFSERRORS)
1497+C
1498+%(info_lines)s
1499+C
1500+C Interface between MG5 and COLLIER.
1501+C It supports any rank when 1 < NLOOPLINE < 7.
1502+C
1503+%(process_lines)s
1504+C
1505+C
1506+C MODULES
1507+C
1508+ USE COLLIER
1509+ IMPLICIT NONE
1510+C
1511+C CONSTANTS
1512+C
1513+ LOGICAL checkPConservation
1514+ PARAMETER (checkPConservation=.TRUE.)
1515+ %(real_dp_format)s PIVALUE
1516+ PARAMETER(PIVALUE=3.14159265358979323846D0)
1517+ integer MAXRANK
1518+ parameter (MAXRANK=%(maxrank)d)
1519+ INTEGER NLOOPGROUPS
1520+ PARAMETER (NLOOPGROUPS=%(nloop_groups)d)
1521+ include 'loop_max_coefs.inc'
1522+C
1523+C ARGUMENTS
1524+C
1525+ INTEGER NLOOPLINE, RANK, CTMODE
1526+ %(real_dp_format)s PL(0:3,NLOOPLINE)
1527+ %(real_dp_format)s PDEN(0:3,NLOOPLINE-1)
1528+ %(mass_dp_format)s M2L(NLOOPLINE)
1529+ %(complex_dp_format)s RES(3)
1530+ %(complex_dp_format)s TIRCOEFS(0:LOOPMAXCOEFS-1,3)
1531+ %(complex_dp_format)s TIRCOEFSERRORS(0:LOOPMAXCOEFS-1,3)
1532+
1533+C
1534+C LOCAL VARIABLES
1535+C
1536+ INTEGER N, I, J, K, L
1537+ INTEGER C0,C1,C2,C3
1538+ INTEGER N_CACHES
1539+ INTEGER CURR_RANK, SGN
1540+ INTEGER CURR_INDEX
1541+ INTEGER CURR_MAXCOEF
1542+ %(real_dp_format)s RBUFF(0:3)
1543+
1544+ INTEGER COEFMAP_ZERO(0:LOOPMAXCOEFS-1)
1545+ INTEGER COEFMAP_ONE(0:LOOPMAXCOEFS-1)
1546+ INTEGER COEFMAP_TWO(0:LOOPMAXCOEFS-1)
1547+ INTEGER COEFMAP_THREE(0:LOOPMAXCOEFS-1)
1548+ %(collier_coefmap)s
1549+
1550+ %(real_dp_format)s REF_NORMALIZATION
1551+
1552+ double complex M2LCOLLIER(0:NLOOPLINE-1)
1553+ double complex MomVec(0:3,NLOOPLINE-1)
1554+ double complex MomInv((NLOOPLINE*(NLOOPLINE-1))/2)
1555+
1556+ double complex TNten(0:RANK,0:RANK,0:RANK,0:RANK)
1557+ double complex TNtenuv(0:RANK,0:RANK,0:RANK,0:RANK)
1558+ double precision TNtenerr(0:RANK)
1559+
1560+ %(real_dp_format)s MaxCoefForRank(0:RANK)
1561+
1562+C These quantities are for the pole evaluation
1563+ double complex TNten_UV(0:RANK,0:RANK,0:RANK,0:RANK)
1564+ double complex TNtenuv_UV(0:RANK,0:RANK,0:RANK,0:RANK)
1565+ double precision TNtenerr_UV(0:RANK)
1566+ double complex TNten_IR1(0:RANK,0:RANK,0:RANK,0:RANK)
1567+ double complex TNtenuv_IR1(0:RANK,0:RANK,0:RANK,0:RANK)
1568+ double precision TNtenerr_IR1(0:RANK)
1569+ double complex TNten_IR2(0:RANK,0:RANK,0:RANK,0:RANK)
1570+ double complex TNtenuv_IR2(0:RANK,0:RANK,0:RANK,0:RANK)
1571+ double precision TNtenerr_IR2(0:RANK)
1572+C
1573+C GLOBAL VARIABLES
1574+C
1575+ include 'coupl.inc'
1576+ include 'MadLoopParams.inc'
1577+ include 'unique_id.inc'
1578+ include 'global_specs.inc'
1579+
1580+## if(not AmplitudeReduction) {
1581+ INTEGER ID,SQSOINDEX,R
1582+ common/%(proc_prefix)sLOOP/ID,SQSOINDEX,R
1583+## }else{
1584+ INTEGER ID,R
1585+ common/%(proc_prefix)sLOOP/ID,R
1586+## }
1587+
1588+C
1589+C These global variables cache the coefficients already computed by COLLIER
1590+C so that they can be reused. In particular, in CTMODE 2, the cached ERROR
1591+C quantities for eahc rank will be used to make use of COLLIER's internal
1592+C assessment of the numerical accuracy.
1593+C
1594+ logical LOOP_ID_DONE(NLOOPGROUPS)
1595+ DATA LOOP_ID_DONE/NLOOPGROUPS*.FALSE./
1596+ %(complex_dp_format)s TIR_COEFS_DIRECT_MODE(0:LOOPMAXCOEFS-1,3,NLOOPGROUPS)
1597+ %(real_dp_format)s TIR_COEFS_ERROR(0:MAXRANK,NLOOPGROUPS)
1598+ common/%(proc_prefix)sCOLLIER_TIR_COEFS/TIR_COEFS_DIRECT_MODE,TIR_COEFS_ERROR,LOOP_ID_DONE
1599+
1600+ INTEGER COLLIER_CACHE_ACTIVE, NCALLS_IN_CACHE(4), NCOLLIERCALLS(4)
1601+ LOGICAL MUST_INIT_EVENT
1602+ COMMON/%(proc_prefix)sCOLLIER_CACHE_STATUS/COLLIER_CACHE_ACTIVE,NCALLS_IN_CACHE, NCOLLIERCALLS,MUST_INIT_EVENT
1603+
1604+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT, COLLIERINIT
1605+ COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT, COLLIERINIT
1606+
1607+C ----------
1608+C BEGIN CODE
1609+C ----------
1610+
1611+ IF (COLLIERUseCacheForPoles) THEN
1612+ N_CACHES = 4
1613+ ELSE
1614+ N_CACHES =1
1615+ ENDIF
1616+
1617+C Initialize COLLIER if needed
1618+ IF (COLLIERINIT) THEN
1619+ COLLIERINIT=.FALSE.
1620+ CALL INITCOLLIER()
1621+ ENDIF
1622+
1623+C Initialize the event if it is the first time collier is called on this PS point
1624+ IF(MUST_INIT_EVENT) THEN
1625+ MUST_INIT_EVENT = .False.
1626+ IF (COLLIERGlobalCache.eq.0) THEN
1627+ CALL InitEvent_cll()
1628+ ELSE
1629+ DO I=1,N_CACHES
1630+C Record how many events where put in the cache. On the first PS point.
1631+ IF (NCALLS_IN_CACHE(I).eq.-1.AND.NCOLLIERCALLS(I).gt.0) THEN
1632+ NCALLS_IN_CACHE(I) = NCOLLIERCALLS(I)
1633+ ENDIF
1634+ ENDDO
1635+ DO I=1,N_CACHES
1636+C Now apply a safety check that our last event had as many calls as the cache is setup for.
1637+C The only case for now when it can be half of the calls when we are doing the true loop-direction test with also the computation of a rotated PS point (which is computed for one mode only).
1638+ IF (NCALLS_IN_CACHE(I).ne.-1.and..NOT. ( NCOLLIERCALLS(I).eq.NCALLS_IN_CACHE(I).or. ( CTModeRun.eq.-1.and..not.COLLIERUseInternalStabilityTest.and.NRotations_DP.gt.0.and.MOD(NCALLS_IN_CACHE(I),2).eq.0.and.(NCALLS_IN_CACHE(I)/2).eq.NCOLLIERCALLS(I) ) ) ) then
1639+ WRITE(*,*) 'WARNING: A consistency check in MadLoop failed and, for safety, forced MadLoop to reinitialize the global cache of COLLIER. Report this to MadLoop authors. The problematic cache was number ',I
1640+ IF (COLLIERGLOBALCACHE.EQ.-1) THEN
1641+ CALL INITCACHESYSTEM_CLL(N_CACHES*NPROCS,MAXNEXTERNAL)
1642+ ELSE
1643+ CALL INITCACHESYSTEM_CLL(N_CACHES*NPROCS,COLLIERGLOBALCACHE)
1644+ ENDIF
1645+C Make sure all caches are switched off at first.
1646+ call SwitchOffCacheSystem_cll()
1647+C Reset the cache design property
1648+ NCALLS_IN_CACHE(:) = -1
1649+ NCOLLIERCALLS(:) = 0
1650+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
1651+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+1)
1652+ ENDIF
1653+C No need to check the other caches since we already had to reset here.
1654+ EXIT
1655+ ENDIF
1656+ ENDDO
1657+ CALL InitEvent_cll((UNIQUE_ID-1)*N_CACHES+1)
1658+ NCOLLIERCALLS(1) = 0
1659+ IF(COLLIERComputeUVpoles.and.COLLIERUseCacheForPoles) THEN
1660+ CALL InitEvent_cll((UNIQUE_ID-1)*N_CACHES+2)
1661+ NCOLLIERCALLS(2) = 0
1662+ ENDIF
1663+ IF(COLLIERComputeIRpoles.and.COLLIERUseCacheForPoles) THEN
1664+ CALL InitEvent_cll((UNIQUE_ID-1)*N_CACHES+3)
1665+ NCOLLIERCALLS(3) = 0
1666+ CALL InitEvent_cll((UNIQUE_ID-1)*N_CACHES+4)
1667+ NCOLLIERCALLS(4) = 0
1668+ ENDIF
1669+ ENDIF
1670+ CALL SetDeltaIR_cll(0.0d0,(PIVALUE**2)/6.0d0)
1671+ CALL SetDeltaUV_cll(0.0d0)
1672+ CALL SetMuIR2_cll(mu_r**2)
1673+ CALL SetMuUV2_cll(mu_r**2)
1674+ ENDIF
1675+
1676+C Now really start the reduction with COLLIER
1677+
1678+C Number of coefficients for the current rank
1679+ CURR_MAXCOEF = 0
1680+ DO I=0,RANK
1681+ CURR_MAXCOEF=CURR_MAXCOEF+(3+I)*(2+I)*(1+I)/6
1682+ ENDDO
1683+
1684+ IF (CTMODE.ne.1.and.CTMODE.ne.2) THEN
1685+ WRITE(*,*) 'ERROR: COLLIER only support the computational mode CTMODE equal to 1 or 2, not',CTMODE
1686+ stop 'Incorrect computational mode specified to the COLLIER MG5aMC interface.'
1687+ ENDIF
1688+
1689+ DO I=0,CURR_MAXCOEF-1
1690+ DO K=1,3
1691+ TIRCOEFSERRORS(I,K)=DCMPLX(0.0d0,0.0d0)
1692+ ENDDO
1693+ ENDDO
1694+
1695+ IF (COLLIERUseInternalStabilityTest) THEN
1696+C Use MADLOOP internal cache dedicated to COLLIER that emulates the CTMODE 2
1697+ IF (LOOP_ID_DONE(ID)) THEN
1698+ DO I=0,CURR_MAXCOEF-1
1699+ DO K=1,3
1700+ TIRCOEFS(I,K)=TIR_COEFS_DIRECT_MODE(I,K,ID)
1701+ ENDDO
1702+ ENDDO
1703+ DO I=0,RANK
1704+ MaxCoefForRank(I) = 0.0d0
1705+ ENDDO
1706+ DO I=0,CURR_MAXCOEF-1
1707+ CURR_RANK = COEFMAP_ZERO(I)+COEFMAP_ONE(I)+COEFMAP_TWO(I)+COEFMAP_THREE(I)
1708+ MaxCoefForRank(CURR_RANK)=max(MaxCoefForRank(CURR_RANK),abs(TIR_COEFS_DIRECT_MODE(I,1,ID)))
1709+ ENDDO
1710+ DO I=0,CURR_MAXCOEF-1
1711+ CURR_RANK = COEFMAP_ZERO(I)+COEFMAP_ONE(I)+COEFMAP_TWO(I)+COEFMAP_THREE(I)
1712+ IF (MaxCoefForRank(CURR_RANK).ne.0.0d0) THEN
1713+ DO K=1,3
1714+C The expression below is like taking the absolute value when summing errors linearly
1715+C TIRCOEFSERRORS(I,K)=(TIR_COEFS_ERROR(CURR_RANK,ID)/MaxCoefForRank(CURR_RANK))*DCMPLX( ABS(DBLE(TIRCOEFS(I,K))),ABS(DIMAG(TIRCOEFS(I,K))) )
1716+C But empirically, I observed that retaining the original complex phase leads to slightly more accurate estimates
1717+ TIRCOEFSERRORS(I,K)=(TIR_COEFS_ERROR(CURR_RANK,ID)/MaxCoefForRank(CURR_RANK))*TIRCOEFS(I,K)
1718+ ENDDO
1719+ ENDIF
1720+ ENDDO
1721+ RETURN
1722+ ENDIF
1723+ ELSE
1724+C Apply the loop-direction switching here.
1725+ CALL %(proc_prefix)sSWITCH_ORDER(CTMODE,NLOOPLINE,PL,PDEN,M2L)
1726+ ENDIF
1727+
1728+C Make sure masses are complex
1729+ do I=1,NLOOPLINE
1730+ M2LCOLLIER(I-1)=DCMPLX(M2L(I))
1731+ ENDDO
1732+
1733+C Now convert the loop offset momenta to COLLIER conventions
1734+ DO i=0,3
1735+ DO j=1,NLOOPLINE-1
1736+ MomVec(i,j)=DCMPLX(PDEN(i,j),0.0d0)
1737+ ENDDO
1738+ ENDDO
1739+
1740+C This first do loop spans over 'N' in '\foreach_N \foreach_i(k_i+k_{i+1}+..+k_{i+N})^2'
1741+ CURR_INDEX = 0
1742+ DO N=0,NLOOPLINE-1
1743+C We stop whenever we reached the target number of invariants
1744+ IF (CURR_INDEX.GE.((NLOOPLINE*(NLOOPLINE-1))/2)) THEN
1745+ EXIT
1746+ ENDIF
1747+C This do loop spans over 'i' in the expression above.
1748+ DO I=1,NLOOPLINE
1749+ IF (CURR_INDEX.GE.((NLOOPLINE*(NLOOPLINE-1))/2)) THEN
1750+ EXIT
1751+ ENDIF
1752+
1753+ CURR_INDEX = CURR_INDEX+1
1754+ RBUFF(:) = 0.0D0
1755+ DO J=I,I+N
1756+ RBUFF(:) = RBUFF(:) + PL(:,MOD(J-1,NLOOPLINE)+1)
1757+ ENDDO
1758+ MomInv(CURR_INDEX) = DCMPLX(RBUFF(0)**2-RBUFF(1)**2-RBUFF(2)**2-RBUFF(3)**2,0.0d0)
1759+
1760+C Now regularize the onshell behavior of the kinematic invarients
1761+C All loop masses are tested, but that might be a bit too inclusive.
1762+ DO K=1,NLOOPLINE
1763+ IF(ABS(M2L(K)).NE.0.0d0) THEN
1764+ IF(ABS((MomInv(CURR_INDEX)-M2L(K))/M2L(K)).LT.OSTHRES) THEN
1765+ MomInv(CURR_INDEX)=DCMPLX(M2L(K))
1766+ ENDIF
1767+ ENDIF
1768+ ENDDO
1769+C For the massless onshell-case, we base the threshold only on the energy component
1770+ REF_NORMALIZATION=0.0D0
1771+ DO L=0,0
1772+ REF_NORMALIZATION = REF_NORMALIZATION + ABS(RBUFF(L))
1773+ ENDDO
1774+ REF_NORMALIZATION = (REF_NORMALIZATION/(N+1))**2
1775+ IF(REF_NORMALIZATION.NE.0.0D0)THEN
1776+ IF(ABS(MomInv(CURR_INDEX)/REF_NORMALIZATION).LT.OSTHRES)THEN
1777+ MomInv(CURR_INDEX)=DCMPLX(0.0d0,0.0d0)
1778+ ENDIF
1779+ ENDIF
1780+
1781+ ENDDO
1782+ ENDDO
1783+
1784+C We can now call COLLIER
1785+ IF (NLOOPLINE.ne.1) THEN
1786+ CALL TNten_cll(TNten, TNtenuv, MomVec, MomInv, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr)
1787+ ELSE
1788+ CALL TNten_cll(TNten, TNtenuv, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr)
1789+ ENDIF
1790+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
1791+ NCOLLIERCALLS(1) = NCOLLIERCALLS(1)+1
1792+ ENDIF
1793+
1794+C Now compute the UV poles if asked for
1795+ IF (COLLIERComputeUVpoles) THEN
1796+ IF(COLLIER_CACHE_ACTIVE.eq.1) THEN
1797+ CALL SwitchOffCache_cll((unique_id-1)*N_CACHES+1)
1798+ IF(COLLIERUseCacheForPoles) THEN
1799+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+2)
1800+ ENDIF
1801+ ENDIF
1802+ CALL SetDeltaUV_cll(1.0d0)
1803+ IF (NLOOPLINE.ne.1) THEN
1804+ CALL TNten_cll(TNten_UV, TNtenuv_UV, MomVec, MomInv, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_UV)
1805+ ELSE
1806+ CALL TNten_cll(TNten_UV, TNtenuv_UV, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_UV)
1807+ ENDIF
1808+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
1809+ NCOLLIERCALLS(2) = NCOLLIERCALLS(2)+1
1810+ ENDIF
1811+ IF(COLLIER_CACHE_ACTIVE.eq.1) THEN
1812+ IF(COLLIERUseCacheForPoles) THEN
1813+ CALL SwitchOffCache_cll((unique_id-1)*N_CACHES+2)
1814+ ENDIF
1815+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+1)
1816+ ENDIF
1817+ CALL SetDeltaUV_cll(0.0d0)
1818+ ENDIF
1819+
1820+C Now compute the IR poles if asked for
1821+ IF (COLLIERComputeIRpoles) THEN
1822+ IF(COLLIER_CACHE_ACTIVE.eq.1) THEN
1823+ CALL SwitchOffCache_cll((unique_id-1)*N_CACHES+1)
1824+ IF(COLLIERUseCacheForPoles) THEN
1825+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+3)
1826+ ENDIF
1827+ ENDIF
1828+ CALL SetDeltaIR_cll(1.0d0,(PIVALUE**2)/6.0d0)
1829+ IF (NLOOPLINE.ne.1) THEN
1830+ CALL TNten_cll(TNten_IR1, TNtenuv_IR1, MomVec, MomInv, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_IR1)
1831+ ELSE
1832+ CALL TNten_cll(TNten_IR1, TNtenuv_IR1, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_IR1)
1833+ ENDIF
1834+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
1835+ NCOLLIERCALLS(3) = NCOLLIERCALLS(3)+1
1836+ ENDIF
1837+ IF(COLLIER_CACHE_ACTIVE.eq.1.AND.COLLIERUseCacheForPoles) THEN
1838+ CALL SwitchOffCache_cll((unique_id-1)*N_CACHES+3)
1839+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+4)
1840+ ENDIF
1841+ CALL SetDeltaIR_cll(0.0d0,1.0d0+(PIVALUE**2)/6.0d0)
1842+ IF (NLOOPLINE.ne.1) THEN
1843+ CALL TNten_cll(TNten_IR2, TNtenuv_IR2, MomVec, MomInv, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_IR2)
1844+ ELSE
1845+ CALL TNten_cll(TNten_IR2, TNtenuv_IR2, M2LCOLLIER, NLOOPLINE, RANK, TNtenerr_IR2)
1846+ ENDIF
1847+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
1848+ NCOLLIERCALLS(4) = NCOLLIERCALLS(4)+1
1849+ ENDIF
1850+ IF(COLLIER_CACHE_ACTIVE.eq.1) THEN
1851+ IF(COLLIERUseCacheForPoles) THEN
1852+ CALL SwitchOffCache_cll((unique_id-1)*N_CACHES+4)
1853+ ENDIF
1854+ CALL SwitchOnCache_cll((unique_id-1)*N_CACHES+1)
1855+ ENDIF
1856+ CALL SetDeltaIR_cll(0.0d0,(PIVALUE**2)/6.0d0)
1857+ ENDIF
1858+
1859+ DO I=0,(CURR_MAXCOEF-1)
1860+ C0 = COEFMAP_ZERO(I)
1861+ C1 = COEFMAP_ONE(I)
1862+ C2 = COEFMAP_TWO(I)
1863+ C3 = COEFMAP_THREE(I)
1864+ CURR_RANK = C0+C1+C2+C3
1865+C Because we must set q -> -q, we apply a minus sign to coefs of odd rank
1866+ IF (MOD(CURR_RANK,2).eq.1) THEN
1867+ SGN = -1
1868+ ELSE
1869+ SGN = 1
1870+ ENDIF
1871+ TIRCOEFS(I,1) = SGN*TNten(C0,C1,C2,C3)
1872+ IF (COLLIERComputeUVpoles) THEN
1873+ TIRCOEFS(I,2) = SGN*( TNten_UV(C0,C1,C2,C3)-TNten(C0,C1,C2,C3) )
1874+ ELSE
1875+ TIRCOEFS(I,2) = DCMPLX(0.0d0,0.0d0)
1876+ ENDIF
1877+ IF (COLLIERComputeIRpoles) THEN
1878+ TIRCOEFS(I,2) = TIRCOEFS(I,2) + SGN*( TNten_IR1(C0,C1,C2,C3)-TNten(C0,C1,C2,C3) )
1879+ TIRCOEFS(I,3) = SGN*( TNten_IR2(C0,C1,C2,C3)-TNten(C0,C1,C2,C3) )
1880+ ELSE
1881+ TIRCOEFS(I,3) = DCMPLX(0.0d0,0.0d0)
1882+ ENDIF
1883+ ENDDO
1884+
1885+ IF (COLLIERUseInternalStabilityTest) THEN
1886+c Finish by caching the coefficients and error just computed
1887+ LOOP_ID_DONE(ID) = .TRUE.
1888+ DO J=0,CURR_MAXCOEF-1
1889+ DO K=1,3
1890+ TIR_COEFS_DIRECT_MODE(J,K,ID) = TIRCOEFS(J,K)
1891+ ENDDO
1892+ ENDDO
1893+ DO J=0,RANK
1894+ TIR_COEFS_ERROR(J,ID)=TNtenerr(J)
1895+ ENDDO
1896+
1897+C Now compute the errors on each coefficient
1898+ DO I=0,RANK
1899+ MaxCoefForRank(I) = 0.0d0
1900+ ENDDO
1901+ DO I=0,CURR_MAXCOEF-1
1902+ CURR_RANK = COEFMAP_ZERO(I)+COEFMAP_ONE(I)+COEFMAP_TWO(I)+COEFMAP_THREE(I)
1903+ MaxCoefForRank(CURR_RANK)=max(MaxCoefForRank(CURR_RANK),abs(TIRCOEFS(I,1)))
1904+ ENDDO
1905+ DO I=0,CURR_MAXCOEF-1
1906+ CURR_RANK = COEFMAP_ZERO(I)+COEFMAP_ONE(I)+COEFMAP_TWO(I)+COEFMAP_THREE(I)
1907+ IF (MaxCoefForRank(CURR_RANK).ne.0.0d0) THEN
1908+ DO K=1,3
1909+C The expression below is like taking the absolute value when summing errors linearly
1910+C TIRCOEFSERRORS(I,K)=(TNtenerr(CURR_RANK)/MaxCoefForRank(CURR_RANK))*DCMPLX( ABS(DBLE(TIRCOEFS(I,K))),ABS(DIMAG(TIRCOEFS(I,K))) )
1911+C But empirically, I observed that retaining the original complex phase leads to slightly more accurate estimates
1912+ TIRCOEFSERRORS(I,K)=(TNtenerr(CURR_RANK)/MaxCoefForRank(CURR_RANK))*TIRCOEFS(I,K)
1913+ ENDDO
1914+ ENDIF
1915+ ENDDO
1916+
1917+ ENDIF
1918+
1919+ END SUBROUTINE %(proc_prefix)sCOLLIERLOOP
1920+
1921+ SUBROUTINE %(proc_prefix)sCLEAR_COLLIER_CACHE()
1922+
1923+ USE COLLIER
1924+
1925+ include 'loop_max_coefs.inc'
1926+ INTEGER NLOOPGROUPS
1927+ PARAMETER (NLOOPGROUPS=%(nloop_groups)d)
1928+ integer MAXRANK
1929+ parameter (MAXRANK=%(maxrank)d)
1930+
1931+ integer I,J,K
1932+
1933+ include 'MadLoopParams.inc'
1934+
1935+ logical LOOP_ID_DONE(NLOOPGROUPS)
1936+ %(complex_dp_format)s TIR_COEFS_DIRECT_MODE(0:LOOPMAXCOEFS-1,3,NLOOPGROUPS)
1937+ %(complex_dp_format)s TIR_COEFS_ERROR(0:MAXRANK,NLOOPGROUPS)
1938+ common/%(proc_prefix)sCOLLIER_TIR_COEFS/TIR_COEFS_DIRECT_MODE,TIR_COEFS_ERROR,LOOP_ID_DONE
1939+
1940+ INTEGER COLLIER_CACHE_ACTIVE, NCALLS_IN_CACHE(4), NCOLLIERCALLS(4)
1941+ LOGICAL MUST_INIT_EVENT
1942+ COMMON/%(proc_prefix)sCOLLIER_CACHE_STATUS/COLLIER_CACHE_ACTIVE,NCALLS_IN_CACHE, NCOLLIERCALLS,MUST_INIT_EVENT
1943+
1944+C Make sure that next time the COLLIER Subroutine is called it will call the subroutine initEvent of Collier.
1945+ MUST_INIT_EVENT = .True.
1946+
1947+C Reinitialize the ML cache for COLLIER
1948+ DO I=1,NLOOPGROUPS
1949+ LOOP_ID_DONE(I) = .FALSE.
1950+ DO J=0,LOOPMAXCOEFS-1
1951+ DO K=1,3
1952+ TIR_COEFS_DIRECT_MODE(J,K,I) = DCMPLX(0.0d0,0.0d0)
1953+ ENDDO
1954+ ENDDO
1955+ DO J=0,MAXRANK
1956+ TIR_COEFS_ERROR(J,I)=0.0d0
1957+ ENDDO
1958+ ENDDO
1959+
1960+ END
1961+
1962+ SUBROUTINE %(proc_prefix)sSET_COLLIER_GLOBAL_CACHE(ONOFF)
1963+C
1964+C This routine is used by loop_matrix.f to turn on the global
1965+C cache of COLLIER when it the main SLOOP subroutine starts and
1966+C turn it off when it ends.
1967+C However several checks are performed to verify that it is safe
1968+C to turn it on and to reinitialize it if necessary.
1969+C
1970+C MODULES
1971+C
1972+ USE COLLIER
1973+ implicit none
1974+C
1975+C ARGUMENTS
1976+C
1977+ LOGICAL ONOFF
1978+C
1979+C LOCAL VARIABLES
1980+C
1981+ LOGICAL NEED_REINITIALIZATION
1982+ INTEGER N_CACHES
1983+C
1984+C GLOBAL VARIABLES
1985+C
1986+C
1987+C This common blocks saves the relevant ML parameters when activating the
1988+C global cache of COLLIER so that we know when we must reinitialize it.
1989+C COLLIER_CACHE_ACTIVE is set to -1 when it has never been turned on yet and
1990+C to 1 for 'Active' and 0 for 'Inactive'.
1991+C The integer NCALLS_IN_CACHE saves how many calls the cache is setup for, for each of the up to four caches.
1992+C When it is the first PS points, it is set to -1.
1993+ INTEGER COLLIER_CACHE_ACTIVE, NCALLS_IN_CACHE(4), NCOLLIERCALLS(4)
1994+ DATA COLLIER_CACHE_ACTIVE/-1/
1995+ DATA NCALLS_IN_CACHE/-1,-1,-1,-1/
1996+ DATA NCOLLIERCALLS/0,0,0,0/
1997+C This is a flag to tell the COLLIER subroutine that it must init the event when called.
1998+ LOGICAL MUST_INIT_EVENT
1999+ DATA MUST_INIT_EVENT/.TRUE./
2000+ COMMON/%(proc_prefix)sCOLLIER_CACHE_STATUS/COLLIER_CACHE_ACTIVE, NCALLS_IN_CACHE, NCOLLIERCALLS,MUST_INIT_EVENT
2001+
2002+ LOGICAL COLLIERUseInternalStabilityTest_BU
2003+ INTEGER USERHEL_BU, SQSO_TARGET_BU, COLLIERMode_BU,CTModeRun_BU
2004+ COMMON/%(proc_prefix)sCOLLIER_CACHE_RELEVANT_PARAMS/USERHEL_BU,SQSO_TARGET_BU,COLLIERMode_BU,CTModeRun_BU,COLLIERUseInternalStabilityTest_BU
2005+
2006+C The common blocks below are to retrieve the necessary information about
2007+C MadLoop running mode and store it in the sCOLLIER_CACHE_RELEVANT_PARAMS common block.
2008+
2009+ include 'MadLoopParams.inc'
2010+ include 'unique_id.inc'
2011+ include 'global_specs.inc'
2012+
2013+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT, COLLIERINIT
2014+ COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT, COLLIERINIT
2015+
2016+ LOGICAL CHECKPHASE
2017+ LOGICAL HELDOUBLECHECKED
2018+ common/%(proc_prefix)sINIT/CHECKPHASE, HELDOUBLECHECKED
2019+
2020+ INTEGER USERHEL
2021+ common/%(proc_prefix)sUSERCHOICE/USERHEL
2022+
2023+ INTEGER SQSO_TARGET
2024+ common/%(proc_prefix)sSOCHOICE/SQSO_TARGET
2025+
2026+C
2027+C BEGIN CODE
2028+C
2029+
2030+ IF (COLLIERUseCacheForPoles) THEN
2031+ N_CACHES = 4
2032+ ELSE
2033+ N_CACHES =1
2034+ ENDIF
2035+
2036+C Do nothing if COLLIER still has to be initialized or if global caches are disabled
2037+ IF(COLLIERINIT.OR.COLLIERGlobalCache.eq.0) THEN
2038+ RETURN
2039+ ENDIF
2040+
2041+C Never activate anything in the checkphase
2042+ IF (ONOFF.AND.CHECKPHASE) THEN
2043+ RETURN
2044+ ENDIF
2045+
2046+C Handle the request of turning off the caching
2047+ IF (.NOT.ONOFF) THEN
2048+ IF (COLLIER_CACHE_ACTIVE.eq.1) THEN
2049+ CALL SwitchOffCache_cll((unique_id-1)*4+1)
2050+ COLLIER_CACHE_ACTIVE = 0
2051+ ENDIF
2052+C If we were asked to turn the cache off but it was already so, then do nothing
2053+ RETURN
2054+ ENDIF
2055+
2056+C Handle the request of turning on the caching
2057+
2058+C If asked to activate it but already active, then do nothing
2059+ IF (ONOFF.AND.COLLIER_CACHE_ACTIVE.eq.1) THEN
2060+ RETURN
2061+ ENDIF
2062+
2063+C We are now in the position where we are asked to activate the global cache but it was *not* already active.
2064+
2065+C If we activate it for the first time, make sure to store the value of the relevant parameters, activate and return.
2066+ IF (COLLIER_CACHE_ACTIVE.eq.-1) THEN
2067+ USERHEL_BU = USERHEL
2068+ SQSO_TARGET_BU = SQSO_TARGET
2069+ COLLIERMode_BU = COLLIERMode
2070+ COLLIERUseInternalStabilityTest_BU = COLLIERUseInternalStabilityTest
2071+ CTModeRun_BU = CTModeRun
2072+ CALL SwitchOnCache_cll((unique_id-1)*4+1)
2073+ COLLIER_CACHE_ACTIVE = 1
2074+ RETURN
2075+ ENDIF
2076+
2077+C Now perform sanity check before the activation to decide if we need to reinitialize the cache system first.
2078+ NEED_REINITIALIZATION = .FALSE.
2079+
2080+ IF (SQSO_TARGET.NE.SQSO_TARGET_BU) THEN
2081+ NEED_REINITIALIZATION = .TRUE.
2082+ ENDIF
2083+
2084+ IF (COLLIERMode.NE.COLLIERMode_BU) THEN
2085+ NEED_REINITIALIZATION = .TRUE.
2086+ ENDIF
2087+
2088+ IF (COLLIERUseInternalStabilityTest.NEQV.COLLIERUseInternalStabilityTest_BU) THEN
2089+ NEED_REINITIALIZATION = .TRUE.
2090+ ENDIF
2091+
2092+ IF (CTModeRun_BU.ne.CTModeRun.and.(.not.COLLIERUseInternalStabilityTest)) THEN
2093+ NEED_REINITIALIZATION = .TRUE.
2094+ ENDIF
2095+
2096+## if(AmplitudeReduction){
2097+C When doing amplitude reduction, the parameter USERHEL impacts the number of COLLIER calls/order if
2098+C it involves a different number of helicity configurations or always if the Loop filter is on, which
2099+C it should almost never be by now.
2100+ IF(UseLoopFilter.and.(USERHEL.ne.USERHEL_BU)) THEN
2101+ NEED_REINITIALIZATION = .TRUE.
2102+ ENDIF
2103+ IF((USERHEL.eq.-1).and.(USERHEL_BU.ne.-1)) THEN
2104+ NEED_REINITIALIZATION = .TRUE.
2105+ ENDIF
2106+ IF((USERHEL.ne.-1).and.(USERHEL_BU.eq.-1)) THEN
2107+ NEED_REINITIALIZATION = .TRUE.
2108+ ENDIF
2109+## }else{
2110+C When doing amplitude reduction the parameter USERHEL does not impact the number/order of COLLIER calls
2111+C except if the LoopFilter is ON which really shouldn't be the case anymore.
2112+ IF(UseLoopFilter.and.(USERHEL.ne.USERHEL_BU)) THEN
2113+ NEED_REINITIALIZATION = .TRUE.
2114+ ENDIF
2115+## }
2116+
2117+ IF(NEED_REINITIALIZATION) THEN
2118+C Log the event because if it happens a lot of time and floods the screen, the user must see it
2119+C and either change its usage of MadLoop or turnoff COLLIER cache
2120+ WRITE(*,*) 'INFO: MadLoop detected that the global cache of COLLIER had to be reset because of a change in your use of MadLoop. This should not happend for each event.'
2121+ USERHEL_BU = USERHEL
2122+ SQSO_TARGET_BU = SQSO_TARGET
2123+ COLLIERMode_BU = COLLIERMode
2124+ COLLIERUseInternalStabilityTest_BU = COLLIERUseInternalStabilityTest
2125+ CTModeRun_BU = CTModeRun
2126+ IF (COLLIERGLOBALCACHE.EQ.-1) THEN
2127+ CALL INITCACHESYSTEM_CLL(N_CACHES*NPROCS,MAXNEXTERNAL)
2128+ ELSE
2129+ CALL INITCACHESYSTEM_CLL(N_CACHES*NPROCS,COLLIERGLOBALCACHE)
2130+ ENDIF
2131+ NCOLLIERCALLS(:) = 0
2132+ NCALLS_IN_CACHE(:) = -1
2133+C Make sure all caches are switched off at first.
2134+ call SwitchOffCacheSystem_cll()
2135+ ENDIF
2136+
2137+C Now we can finally activate the cache
2138+ CALL SwitchOnCache_cll((unique_id-1)*4+1)
2139+ COLLIER_CACHE_ACTIVE = 1
2140+
2141+ END
2142
2143=== modified file 'madgraph/iolibs/template_files/loop_optimized/CT_interface.inc'
2144--- madgraph/iolibs/template_files/loop_optimized/CT_interface.inc 2016-04-28 23:52:58 +0000
2145+++ madgraph/iolibs/template_files/loop_optimized/CT_interface.inc 2016-07-02 20:36:33 +0000
2146@@ -34,8 +34,8 @@
2147 C
2148 %(complex_dp_format)s R1, ACC
2149 INTEGER I, J, K
2150- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2151- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2152+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2153+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2154 C
2155 C EXTERNAL FUNCTIONS
2156 C
2157@@ -351,8 +351,8 @@
2158 %(complex_dp_format)s R1, ACC
2159 INTEGER I, J, K
2160 %(real_dp_format)s PDEN_DUMMY(0:3,NLOOPLINE-1)
2161- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2162- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2163+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2164+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2165 C
2166 C EXTERNAL FUNCTIONS
2167 C
2168@@ -649,8 +649,8 @@
2169 C
2170 include 'coupl.inc'
2171
2172- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2173- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2174+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2175+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2176
2177 %(real_dp_format)s LSCALE
2178 INTEGER CTMODE
2179@@ -875,8 +875,8 @@
2180 C
2181 include 'coupl.inc'
2182
2183- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2184- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2185+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2186+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2187
2188 %(real_dp_format)s LSCALE
2189 INTEGER CTMODE
2190
2191=== modified file 'madgraph/iolibs/template_files/loop_optimized/GOLEM_interface.inc'
2192--- madgraph/iolibs/template_files/loop_optimized/GOLEM_interface.inc 2016-03-10 00:23:21 +0000
2193+++ madgraph/iolibs/template_files/loop_optimized/GOLEM_interface.inc 2016-07-02 20:36:33 +0000
2194@@ -103,8 +103,8 @@
2195 common/%(proc_prefix)sLOOP/ID,R
2196 ## }
2197
2198- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2199- COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2200+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2201+ COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2202
2203 INTEGER NLOOPGROUPS
2204 PARAMETER (NLOOPGROUPS=%(nloop_groups)d)
2205
2206=== modified file 'madgraph/iolibs/template_files/loop_optimized/TIR_interface.inc'
2207--- madgraph/iolibs/template_files/loop_optimized/TIR_interface.inc 2016-03-10 00:23:21 +0000
2208+++ madgraph/iolibs/template_files/loop_optimized/TIR_interface.inc 2016-07-02 20:36:33 +0000
2209@@ -43,14 +43,14 @@
2210 C
2211 INTEGER I, J, K
2212 INTEGER NLOOPCOEFS
2213- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2214- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2215+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2216+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2217
2218 c This variable will be used to detect changes in the TIR library used so as to force the reset of the TIR filter.
2219 INTEGER LAST_LIB_USED
2220 DATA LAST_LIB_USED/-1/
2221
2222- %(complex_dp_format)s TIRCOEFS(0:LOOPMAXCOEFS-1,3)
2223+ %(complex_dp_format)s TIRCOEFS(0:LOOPMAXCOEFS-1,3),TIRCOEFSERRORS(0:LOOPMAXCOEFS-1,3)
2224 %(complex_dp_format)s PJCOEFS(0:LOOPMAXCOEFS-1,3)
2225 ## if(TIRCaching){
2226 integer TIR_CACHE_INDEX
2227@@ -72,9 +72,13 @@
2228 %(real_dp_format)s LSCALE
2229 common/%(proc_prefix)sCT/LSCALE,CTMODE
2230
2231-C The variables below are just for monitoring purposes.
2232+## if(not AmplitudeReduction) {
2233 INTEGER ID,SQSOINDEX,R
2234- COMMON/%(proc_prefix)sLOOP/ID,SQSOINDEX,R
2235+ common/%(proc_prefix)sLOOP/ID,SQSOINDEX,R
2236+## }else{
2237+ INTEGER ID,R
2238+ common/%(proc_prefix)sLOOP/ID,R
2239+## }
2240
2241 c The argument ILIB is the TIR library to be used for that specific library.
2242 INTEGER LIBINDEX
2243@@ -178,9 +182,9 @@
2244 enddo
2245
2246 do I=0,3
2247- do J=1,(NLOOPLINE-1)
2248- PDEN(I,J)=PCT(I,J)
2249- enddo
2250+ do J=1,(NLOOPLINE-1)
2251+ PDEN(I,J)=PCT(I,J)
2252+ enddo
2253 enddo
2254 C NUMBER OF INDEPEDENT LOOPCOEFS FOR RANK=RANK
2255 NLOOPCOEFS=0
2256@@ -220,6 +224,23 @@
2257 WRITE(*,*) 'ERROR:: IREGI is not interfaced.'
2258 STOP
2259 ## }
2260+ CASE(7)
2261+C COLLIER
2262+## if(collier_available){
2263+ CALL %(proc_prefix)sCOLLIERLOOP(CTMODE,NLOOPLINE,RANK,PL,PDEN,M2L,TIRCOEFS,TIRCOEFSERRORS)
2264+C Shift the TIR coefficients by the corresponding COLLIER error if in CTMODE 2.
2265+ if (COLLIERUseInternalStabilityTest.and.CTMODE.eq.2) THEN
2266+C We add here the numerical inaccuracies linearly to be conservative
2267+ DO I=1,3
2268+ DO J=0,NLOOPCOEFS-1
2269+ TIRCOEFS(J,I)=TIRCOEFS(J,I)+TIRCOEFSERRORS(J,I)
2270+ ENDDO
2271+ ENDDO
2272+ ENDIF
2273+## } else {
2274+ WRITE(*,*) 'ERROR:: COLLIER is not interfaced.'
2275+ STOP
2276+## }
2277 END SELECT
2278 ## if(TIRCaching){
2279 C The zero index is dummy and means no caching at all since TIR_CACHE_SIZE=0.
2280@@ -262,6 +283,8 @@
2281 C WRITE(*,*) 'PJFry: Loop ID',ID,' =',RES(1),RES(2),RES(3)
2282 C ELSEIF(MLReductionLib(I_LIB).EQ.3) THEN
2283 C WRITE(*,*) 'Iregi: Loop ID',ID,' =',RES(1),RES(2),RES(3)
2284+C ELSEIF(MLReductionLib(I_LIB).EQ.7) THEN
2285+C WRITE(*,*) 'COLLIER: Loop ID',ID,' =',RES(1),RES(2),RES(3)
2286 C ENDIF
2287 END
2288
2289@@ -385,8 +408,8 @@
2290 C GLOBAL VARIABLES
2291 C
2292 include 'MadLoopParams.inc'
2293- LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
2294- COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT
2295+ LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT,COLLIERINIT
2296+ COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT,NINJAINIT,COLLIERINIT
2297
2298 C ----------
2299 C BEGIN CODE
2300@@ -428,7 +451,7 @@
2301 C CONSTANTS
2302 C
2303 INTEGER NLOOPLIB
2304- PARAMETER (NLOOPLIB=4)
2305+ PARAMETER (NLOOPLIB=7)
2306 INTEGER QP_NLOOPLIB
2307 ## if(ninja_supports_quad_prec) {
2308 PARAMETER (QP_NLOOPLIB=2)
2309@@ -479,8 +502,8 @@
2310 ENDIF
2311 ENDDO
2312 IF(J_LIB.EQ.0)THEN
2313- SELECT_LIBINDEX=SELECT_LIBINDEX+1
2314- IF(SELECT_LIBINDEX.GT.NLOOPLIB.OR.MLReductionLib(SELECT_LIBINDEX).EQ.0)SELECT_LIBINDEX=1
2315+ SELECT_LIBINDEX=SELECT_LIBINDEX+1
2316+ IF(SELECT_LIBINDEX.GT.NLOOPLIB.OR.MLReductionLib(SELECT_LIBINDEX).EQ.0)SELECT_LIBINDEX=1
2317 ENDIF
2318 ENDDO
2319 I=J_LIB
2320
2321=== modified file 'madgraph/iolibs/template_files/loop_optimized/loop_matrix_standalone.inc'
2322--- madgraph/iolibs/template_files/loop_optimized/loop_matrix_standalone.inc 2016-04-05 23:57:17 +0000
2323+++ madgraph/iolibs/template_files/loop_optimized/loop_matrix_standalone.inc 2016-07-02 20:36:33 +0000
2324@@ -97,9 +97,9 @@
2325 INTEGER NSQUAREDSOP1
2326 PARAMETER (NSQUAREDSOP1=NSQUAREDSO+1)
2327 C The total number of loop reduction libraries
2328-C At present, there are only CutTools,PJFry++,IREGI,Golem95,Samurai and Ninja
2329+C At present, there are only CutTools,PJFry++,IREGI,Golem95,Samurai, Ninja and COLLIER
2330 INTEGER NLOOPLIB
2331- PARAMETER (NLOOPLIB=6)
2332+ PARAMETER (NLOOPLIB=7)
2333 C Only CutTools or possibly Ninja (if installed with qp support) provide QP
2334 INTEGER QP_NLOOPLIB
2335 ## if(ninja_supports_quad_prec) {
2336@@ -235,6 +235,7 @@
2337 C GLOBAL VARIABLES
2338 C
2339 include 'process_info.inc'
2340+ include 'unique_id.inc'
2341 include 'coupl.inc'
2342 include 'mp_coupl.inc'
2343 include 'MadLoopParams.inc'
2344@@ -267,20 +268,20 @@
2345 DATA MP_DONE/.FALSE./
2346 common/%(proc_prefix)sMP_DONE/MP_DONE
2347 C A FLAG TO DENOTE WHETHER THE CORRESPONDING LOOPLIBS ARE AVAILABLE OR NOT
2348- LOGICAL LOOPLIBS_AVAILABLE(6)
2349+ LOGICAL LOOPLIBS_AVAILABLE(NLOOPLIB)
2350 DATA LOOPLIBS_AVAILABLE/%(data_looplibs_av)s/
2351 common/%(proc_prefix)sLOOPLIBS_AV/ LOOPLIBS_AVAILABLE
2352 C A FLAG TO DENOTE WHETHER THE CORRESPONDING DIRECTION TESTS AVAILABLE OR NOT IN THE LOOPLIBS
2353- LOGICAL LOOPLIBS_DIRECTEST(6)
2354- DATA LOOPLIBS_DIRECTEST /.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE./
2355+ LOGICAL LOOPLIBS_DIRECTEST(NLOOPLIB)
2356+ DATA LOOPLIBS_DIRECTEST /.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE./
2357 C Specifying for which reduction tool quadruple precision is available.
2358 C The index 0 is dummy and simply means that the corresponding loop_library is not available
2359 C in which case neither is its quadruple precision version.
2360- LOGICAL LOOPLIBS_QPAVAILABLE(0:6)
2361+ LOGICAL LOOPLIBS_QPAVAILABLE(0:7)
2362 ## if(ninja_supports_quad_prec) {
2363- DATA LOOPLIBS_QPAVAILABLE /.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE./
2364+ DATA LOOPLIBS_QPAVAILABLE /.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE./
2365 ## } else {
2366- DATA LOOPLIBS_QPAVAILABLE /.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE./
2367+ DATA LOOPLIBS_QPAVAILABLE /.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE./
2368 ## }
2369 C PS CAN POSSIBILY BE PASSED THROUGH IMPROVE_PS BUT IS NOT MODIFIED FOR THE PURPOSE OF THE STABILITY TEST
2370 C EVEN THOUGH THEY ARE PUT IN COMMON BLOCK, FOR NOW THEY ARE NOT USED ANYWHERE ELSE
2371@@ -329,7 +330,7 @@
2372 DATA CT_REQ_SO_DONE/.FALSE./
2373 DATA MP_CT_REQ_SO_DONE/.FALSE./
2374 DATA LOOP_REQ_SO_DONE/.FALSE./
2375- DATA MP_LOOP_REQ_SO_DONE/.FALSE./
2376+ DATA MP_LOOP_REQ_SO_DONE/.FALSE./
2377 DATA CTCALL_REQ_SO_DONE/.FALSE./
2378 DATA FILTER_SO/.FALSE./
2379 common/%(proc_prefix)sSO_REQS/UVCT_REQ_SO_DONE,MP_UVCT_REQ_SO_DONE,CT_REQ_SO_DONE,MP_CT_REQ_SO_DONE,LOOP_REQ_SO_DONE,MP_LOOP_REQ_SO_DONE,CTCALL_REQ_SO_DONE,FILTER_SO
2380@@ -345,11 +346,10 @@
2381 integer I_LIB
2382 DATA I_LIB/1/
2383 common/%(proc_prefix)sI_LIB/I_LIB
2384-C UTIL NOW, ONLY CUTTOOLS PROVIDE QP
2385- LOGICAL QP_TOOLS_AVAILABLE
2386- DATA QP_TOOLS_AVAILABLE/.FALSE./
2387- INTEGER INDEX_QP_TOOLS(QP_NLOOPLIB+1)
2388- common/%(proc_prefix)sLOOP_TOOLS/QP_TOOLS_AVAILABLE,INDEX_QP_TOOLS
2389+ LOGICAL QP_TOOLS_AVAILABLE
2390+ DATA QP_TOOLS_AVAILABLE/.FALSE./
2391+ INTEGER INDEX_QP_TOOLS(QP_NLOOPLIB+1)
2392+ common/%(proc_prefix)sLOOP_TOOLS/QP_TOOLS_AVAILABLE,INDEX_QP_TOOLS
2393
2394 ## if(not LoopInduced) {
2395 %(complex_dp_format)s AMP(NBORNAMPS)
2396@@ -420,9 +420,16 @@
2397 DATA MP_DONE_ONCE/.FALSE./
2398 common/%(proc_prefix)sMP_DONE_ONCE/MP_DONE_ONCE
2399
2400- character(512) MLPath
2401+ character(512) MLPath
2402 common/MLPATH/MLPath
2403
2404+C This is just so that if the user disabled the computation of poles by COLLIER
2405+C using the MadLoop subroutine, we don't overwrite his choice when reading the parameters
2406+ LOGICAL FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION
2407+ LOGICAL COLLIER_UV_POLE_COMPUTATION_CHOICE, COLLIER_IR_POLE_COMPUTATION_CHOICE
2408+ DATA FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION,FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION/.FALSE.,.FALSE./
2409+ COMMON/%(proc_prefix)sCOLLIERPOLESFORCEDCHOICE/FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION,COLLIER_UV_POLE_COMPUTATION_CHOICE,COLLIER_IR_POLE_COMPUTATION_CHOICE
2410+
2411 C This variable controls the general initialization which is *common* between all MadLoop SubProcesses.
2412 C For example setting the MadLoopPath or reading the ML runtime parameters.
2413 LOGICAL ML_INIT
2414@@ -440,6 +447,7 @@
2415 LOGICAL FPE_IN_DP_REDUCTION, FPE_IN_QP_REDUCTION
2416 data FPE_IN_DP_REDUCTION, FPE_IN_QP_REDUCTION/.FALSE.,.FALSE./
2417 COMMON/%(proc_prefix)sFPE_IN_REDUCTION/FPE_IN_DP_REDUCTION, FPE_IN_QP_REDUCTION
2418+
2419 C ----------
2420 C BEGIN CODE
2421 C ----------
2422@@ -451,6 +459,12 @@
2423 CALL setMadLoopPath(TMP)
2424 CALL JOINPATH(MLPATH,PARAMFNAME,PARAMFN)
2425 CALL MADLOOPPARAMREADER(PARAMFN,.TRUE.)
2426+ IF (FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION) THEN
2427+ COLLIERComputeUVpoles = COLLIER_UV_POLE_COMPUTATION_CHOICE
2428+ ENDIF
2429+ IF (FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION) THEN
2430+ COLLIERComputeIRpoles = COLLIER_IR_POLE_COMPUTATION_CHOICE
2431+ ENDIF
2432 IF (FORBID_HEL_DOUBLECHECK) THEN
2433 DoubleCheckHelicityFilter = .False.
2434 ENDIF
2435@@ -801,6 +815,11 @@
2436 CALL %(proc_prefix)sCLEAR_CACHES()
2437 ENDIF
2438
2439+## if(collier_available){
2440+C Now make sure to turn on the global COLLIER cache if applicable
2441+CALL %(proc_prefix)sSET_COLLIER_GLOBAL_CACHE(.TRUE.)
2442+## }
2443+
2444 IF (ImprovePSPoint.ge.0) THEN
2445 C Make the input PS more precise (exact onshell and energy-momentum conservation)
2446 CALL %(proc_prefix)sIMPROVE_PS_POINT_PRECISION(PS)
2447@@ -1812,14 +1831,27 @@
2448 IF (AUTOMATIC_CACHE_CLEARING) THEN
2449 CALL %(proc_prefix)sCLEAR_CACHES()
2450 ENDIF
2451+
2452+## if(collier_available){
2453+C Now make sure to turn off the global COLLIER cache if applicable
2454+CALL %(proc_prefix)sSET_COLLIER_GLOBAL_CACHE(.FALSE.)
2455+## }
2456+
2457 END
2458
2459 SUBROUTINE %(proc_prefix)sCLEAR_CACHES()
2460-C Clears all the caches used at some point in MadLoop
2461+C
2462+C This routine can be called directly from the user if
2463+C AUTOMATIC_CACHE_CLEARING is set to False. It must then be called after
2464+C ech event
2465+C
2466 CALL %(proc_prefix)sCLEAR_TIR_CACHE()
2467 ## if(ninja_available){
2468 call ninja_clear_integral_cache()
2469 ## }
2470+## if(collier_available){
2471+ call %(proc_prefix)sCLEAR_COLLIER_CACHE()
2472+## }
2473 END
2474
2475 C --=========================================--
2476@@ -1952,6 +1984,13 @@
2477 real*8 accuracies(3)
2478 real*8 list(maxstabilitylength)
2479
2480+C
2481+C GLOBAL VARIABLES
2482+C
2483+ integer I_LIB
2484+ common/%(proc_prefix)sI_LIB/I_LIB
2485+ include 'MadLoopParams.inc'
2486+
2487 C ----------
2488 C BEGIN CODE
2489 C ----------
2490@@ -1998,6 +2037,13 @@
2491 if (avg.ne.0.0d0) then
2492 acc(k) = acc(k) / ( ABS(AVG) / 3.0d0)
2493 endif
2494+
2495+C When using COLLIER with the internal stability test, the first evaluation is typically more reliable so we do not want to use the average but rather the first evaluation.
2496+ IF (MLREDUCTIONLIB(I_LIB).eq.7.and.COLLIERUseInternalStabilityTest) THEN
2497+ DO I=1,3
2498+ estimate(i,k) = fulllist(i,k,1)
2499+ ENDDO
2500+ ENDIF
2501
2502 enddo
2503
2504@@ -2326,6 +2372,46 @@
2505 C Definition of additional access routines
2506 C --=========================================--
2507
2508+ SUBROUTINE %(proc_prefix)sCOLLIER_COMPUTE_UV_POLES(ONOFF)
2509+C
2510+C This function can be called by the MadLoop user so as to chose to have COLLIER
2511+C compute the UV pole or not (it costs more time).
2512+C
2513+ LOGICAL ONOFF
2514+
2515+ include 'MadLoopParams.inc'
2516+
2517+ LOGICAL FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION
2518+ LOGICAL COLLIER_UV_POLE_COMPUTATION_CHOICE, COLLIER_IR_POLE_COMPUTATION_CHOICE
2519+ COMMON/%(proc_prefix)sCOLLIERPOLESFORCEDCHOICE/FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION,COLLIER_UV_POLE_COMPUTATION_CHOICE,COLLIER_IR_POLE_COMPUTATION_CHOICE
2520+
2521+ COLLIERComputeUVpoles = ONOFF
2522+C This is just so that if we read the param again, we don't overwrite the choice made here
2523+ FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION = .TRUE.
2524+ COLLIER_UV_POLE_COMPUTATION_CHOICE = ONOFF
2525+
2526+ END SUBROUTINE
2527+
2528+ SUBROUTINE %(proc_prefix)sCOLLIER_COMPUTE_IR_POLES(ONOFF)
2529+C
2530+C This function can be called by the MadLoop user so as to chose to have COLLIER
2531+C compute the IR pole or not (it costs more time).
2532+C
2533+ LOGICAL ONOFF
2534+
2535+ include 'MadLoopParams.inc'
2536+
2537+ LOGICAL FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION
2538+ LOGICAL COLLIER_UV_POLE_COMPUTATION_CHOICE, COLLIER_IR_POLE_COMPUTATION_CHOICE
2539+ COMMON/%(proc_prefix)sCOLLIERPOLESFORCEDCHOICE/FORCED_CHOICE_OF_COLLIER_UV_POLE_COMPUTATION, FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION,COLLIER_UV_POLE_COMPUTATION_CHOICE,COLLIER_IR_POLE_COMPUTATION_CHOICE
2540+
2541+ COLLIERComputeIRpoles = ONOFF
2542+C This is just so that if we read the param again, we don't overwrite the choice made here
2543+ FORCED_CHOICE_OF_COLLIER_IR_POLE_COMPUTATION = .TRUE.
2544+ COLLIER_IR_POLE_COMPUTATION_CHOICE = ONOFF
2545+
2546+ END SUBROUTINE
2547+
2548 SUBROUTINE %(proc_prefix)sFORCE_STABILITY_CHECK(ONOFF)
2549 C
2550 C This function can be called by the MadLoop user so as to always have stability
2551
2552=== modified file 'madgraph/iolibs/template_files/matrix_loop_induced_madevent.inc'
2553--- madgraph/iolibs/template_files/matrix_loop_induced_madevent.inc 2016-02-18 03:09:50 +0000
2554+++ madgraph/iolibs/template_files/matrix_loop_induced_madevent.inc 2016-07-02 20:36:33 +0000
2555@@ -125,6 +125,9 @@
2556
2557 IF(.NOT.INIT_MADLOOP) THEN
2558 INIT_MADLOOP = .TRUE.
2559+C We don't use the poles, so let's not compute them with COLLIER
2560+ CALL %(ml_prefix)sCOLLIER_COMPUTE_UV_POLES(.False.)
2561+ CALL %(ml_prefix)sCOLLIER_COMPUTE_IR_POLES(.False.)
2562 C Unless this is the first iteration, make sure to never double check the helicity filter again
2563 IF (read_grid_file) THEN
2564 CALL SET_FORBID_HEL_DOUBLECHECK(.True.)
2565@@ -392,7 +395,7 @@
2566 return
2567 endif
2568
2569- IF (((OneEps+TwoEps)/finite).gt.(1000d0*PREC).AND.(((OneEps+TwoEps)/finite).gt.1.0d-5)) THEN
2570+ IF (U.NE.7.AND.((OneEps+TwoEps)/finite).gt.(1000d0*PREC).AND.(((OneEps+TwoEps)/finite).gt.1.0d-5)) THEN
2571 WARNING_COUNTERS(2) = WARNING_COUNTERS(2) + 1
2572 IF (WARNING_COUNTERS(2).le.10) THEN
2573 WRITE(*,*) "WARNING : The residue of the single and double pole of the loop matrix element being integrated does not seem to vanish."
2574
2575=== modified file 'madgraph/iolibs/template_files/matrix_loop_induced_madevent_group.inc'
2576--- madgraph/iolibs/template_files/matrix_loop_induced_madevent_group.inc 2016-02-18 03:09:50 +0000
2577+++ madgraph/iolibs/template_files/matrix_loop_induced_madevent_group.inc 2016-07-02 20:36:33 +0000
2578@@ -133,6 +133,9 @@
2579
2580 IF(.NOT.INIT_MADLOOP) THEN
2581 INIT_MADLOOP = .TRUE.
2582+C We don't use the poles, so let's not compute them with COLLIER
2583+ CALL %(ml_prefix)sCOLLIER_COMPUTE_UV_POLES(.False.)
2584+ CALL %(ml_prefix)sCOLLIER_COMPUTE_IR_POLES(.False.)
2585 C Unless this is the first iteration, make sure to never double check the helicity filter again
2586 IF (read_grid_file) THEN
2587 CALL SET_FORBID_HEL_DOUBLECHECK(.True.)
2588@@ -405,7 +408,7 @@
2589 return
2590 endif
2591
2592- IF (((OneEps+TwoEps)/finite).gt.(1000d0*PREC).AND.(((OneEps+TwoEps)/finite).gt.1.0d-5)) THEN
2593+ IF (U.NE.7.and.((OneEps+TwoEps)/finite).gt.(1000d0*PREC).AND.(((OneEps+TwoEps)/finite).gt.1.0d-5)) THEN
2594 WARNING_COUNTERS(2) = WARNING_COUNTERS(2) + 1
2595 IF (WARNING_COUNTERS(2).le.10) THEN
2596 WRITE(*,*) "WARNING : The residue of the single and double pole of the loop matrix element being integrated does not seem to vanish."
2597
2598=== modified file 'madgraph/loop/loop_exporters.py'
2599--- madgraph/loop/loop_exporters.py 2016-06-27 19:29:19 +0000
2600+++ madgraph/loop/loop_exporters.py 2016-07-02 20:36:33 +0000
2601@@ -90,7 +90,8 @@
2602
2603 include_names = {'ninja' : 'mninja.mod',
2604 'golem' : 'generic_function_1p.mod',
2605- 'samurai':'msamurai.mod'}
2606+ 'samurai':'msamurai.mod',
2607+ 'collier': 'collier.mod'}
2608
2609 def __init__(self, mgme_dir="", dir_path = "", opt=None):
2610 """Initiate the LoopExporterFortran with directory information on where
2611@@ -263,17 +264,18 @@
2612 calls = self.write_loop_makefile_definitions(
2613 writers.MakefileWriter(filePath),link_tir_libs,tir_libs)
2614
2615-
2616 # We need minimal editing of MadLoopCommons.f
2617+ # For the optimized output, this file will be overwritten once the
2618+ # availability of COLLIER has been determined.
2619 MadLoopCommon = open(os.path.join(self.loop_dir,'StandAlone',
2620 "SubProcesses","MadLoopCommons.inc")).read()
2621 writer = writers.FortranWriter(os.path.join(self.dir_path,
2622 "SubProcesses","MadLoopCommons.f"))
2623 writer.writelines(MadLoopCommon%{
2624- 'print_banner_commands':self.MadLoop_banner})
2625+ 'print_banner_commands':self.MadLoop_banner}, context={
2626+ 'collier_available':False})
2627 writer.close()
2628
2629-
2630 # Copy the whole MadLoop5_resources directory (empty at this stage)
2631 if not os.path.exists(pjoin(self.dir_path,'SubProcesses',
2632 'MadLoop5_resources')):
2633@@ -678,7 +680,7 @@
2634 # generate_subprocess_directory_v4
2635 #===========================================================================
2636 def generate_loop_subprocess(self, matrix_element, fortran_model,
2637- group_number = None, proc_id = None, config_map=None):
2638+ group_number = None, proc_id = None, config_map=None, unique_id=None):
2639 """Generate the Pxxxxx directory for a loop subprocess in MG4 standalone,
2640 including the necessary loop_matrix.f, born_matrix.f and include files.
2641 Notice that this is too different from generate_subprocess_directory_v4
2642@@ -705,6 +707,14 @@
2643
2644 logger.info('Creating files in directory %s' % dirpath)
2645
2646+ if unique_id is None:
2647+ raise MadGraph5Error, 'A unique id must be provided to the function'+\
2648+ 'generate_loop_subprocess of LoopProcessExporterFortranSA.'
2649+ # Create an include with the unique consecutive ID assigned
2650+ open('unique_id.inc','w').write(
2651+""" integer UNIQUE_ID
2652+ parameter(UNIQUE_ID=%d)"""%unique_id)
2653+
2654 # Extract number of external particles
2655 (nexternal, ninitial) = matrix_element.get_nexternal_ninitial()
2656
2657@@ -778,7 +788,7 @@
2658 'cts_mprec.h', 'cts_mpc.h', 'mp_coupl.inc',
2659 'mp_coupl_same_name.inc',
2660 'MadLoopParamReader.f','MadLoopCommons.f',
2661- 'MadLoopParams.inc']
2662+ 'MadLoopParams.inc','global_specs.inc']
2663
2664 for file in linkfiles:
2665 ln('../%s' % file)
2666@@ -1014,11 +1024,13 @@
2667
2668 writer.writelines(proc_include)
2669
2670- def generate_subprocess_directory_v4(self, matrix_element, fortran_model):
2671+ def generate_subprocess_directory_v4(self, matrix_element, fortran_model,
2672+ unique_id):
2673 """ To overload the default name for this function such that the correct
2674 function is used when called from the command interface """
2675
2676- return self.generate_loop_subprocess(matrix_element,fortran_model)
2677+ return self.generate_loop_subprocess(matrix_element,fortran_model,
2678+ unique_id=unique_id)
2679
2680 def write_check_sa(self, writer, matrix_element):
2681 """Writes out the steering code check_sa. In the optimized output mode,
2682@@ -1576,7 +1588,7 @@
2683 # make sure that ninja appears first in the list of -L because
2684 # it is the tool for which the user is most susceptible of
2685 # using a standalone verison independent of gosam_contrib
2686- all_tir=['pjfry','iregi','ninja','golem','samurai']
2687+ all_tir=['pjfry','iregi','ninja','golem','samurai','collier']
2688
2689 def __init__(self, mgme_dir="", dir_path = "", opt=None):
2690 """Initiate the LoopProcessOptimizedExporterFortranSA with directory
2691@@ -1588,7 +1600,7 @@
2692
2693 # TIR available ones
2694 self.tir_available_dict={'pjfry':True,'iregi':True,'golem':True,
2695- 'samurai':True,'ninja':True}
2696+ 'samurai':True,'ninja':True,'collier':True}
2697
2698 for tir in self.all_tir:
2699 tir_dir="%s_dir"%tir
2700@@ -1627,7 +1639,7 @@
2701 for tir in self.all_tir:
2702 context['%s_available'%tir]=self.tir_available_dict[tir]
2703 # safety check
2704- if tir not in ['golem','pjfry','iregi','samurai','ninja']:
2705+ if tir not in ['golem','pjfry','iregi','samurai','ninja','collier']:
2706 raise MadGraph5Error,"%s was not a TIR currently interfaced."%tir_name
2707
2708 return context
2709@@ -1648,16 +1660,30 @@
2710 tir_name=tir
2711 libpath = self.link_TIR(os.path.join(self.dir_path, 'lib'),
2712 libpath,libname,tir_name=tir_name)
2713- setattr(self,tir_dir,libpath)
2714 if libpath != "":
2715- if tir in ['ninja','pjfry','golem','samurai']:
2716+ if tir in ['ninja','pjfry','golem','samurai','collier']:
2717 # It is cleaner to use the original location of the libraries
2718 link_tir_libs.append('-L%s/ -l%s'%(libpath,tir))
2719 tir_libs.append('%s/lib%s.$(libext)'%(libpath,tir))
2720- if tir in ['ninja','golem', 'samurai']:
2721+ # For Ninja, we must also link against OneLoop.
2722+ if tir in ['ninja']:
2723+ if not any(os.path.isfile(pjoin(libpath,'libavh_olo.%s'%ext))
2724+ for ext in ['a','dylib','so']):
2725+ raise MadGraph5Error(
2726+"The OneLOop library 'libavh_olo.(a|dylib|so)' could no be found in path '%s'. Please place a symlink to it there."%libpath)
2727+ link_tir_libs.append('-L%s/ -l%s'%(libpath,'avh_olo'))
2728+ tir_libs.append('%s/lib%s.$(libext)'%(libpath,'avh_olo'))
2729+ if tir in ['ninja','golem', 'samurai','collier']:
2730 trgt_path = pjoin(os.path.dirname(libpath),'include')
2731- to_include = misc.find_includes_path(trgt_path,
2732+ if os.path.isdir(trgt_path):
2733+ to_include = misc.find_includes_path(trgt_path,
2734 self.include_names[tir])
2735+ else:
2736+ to_include = None
2737+ # Special possible location for collier
2738+ if to_include is None and tir=='collier':
2739+ to_include = misc.find_includes_path(
2740+ pjoin(libpath,'modules'),self.include_names[tir])
2741 if to_include is None:
2742 logger.error(
2743 'Could not find the include directory for %s, looking in %s.\n' % (tir, str(trgt_path))+
2744@@ -1669,7 +1695,7 @@
2745 # (such as what is done with the Sherpa interface), we
2746 # place here an easy handle on the golem includes
2747 name_map = {'golem':'golem95','samurai':'samurai',
2748- 'ninja':'ninja'}
2749+ 'ninja':'ninja','collier':'collier'}
2750 ln(to_include, starting_dir=pjoin(self.dir_path,'lib'),
2751 name='%s_include'%name_map[tir],abspath=True)
2752 ln(libpath, starting_dir=pjoin(self.dir_path,'lib'),
2753@@ -1687,6 +1713,17 @@
2754 writers.MakefileWriter(MadLoop_makefile_definitions),
2755 link_tir_libs,tir_libs, tir_include=tir_include)
2756
2757+ # Finally overwrite MadLoopCommons.f now that we know the availibility of
2758+ # COLLIER.
2759+ MadLoopCommon = open(os.path.join(self.loop_dir,'StandAlone',
2760+ "SubProcesses","MadLoopCommons.inc")).read()
2761+ writer = writers.FortranWriter(os.path.join(self.dir_path,
2762+ "SubProcesses","MadLoopCommons.f"))
2763+ writer.writelines(MadLoopCommon%{
2764+ 'print_banner_commands':self.MadLoop_banner}, context={
2765+ 'collier_available':self.tir_available_dict['collier']})
2766+ writer.close()
2767+
2768 def link_files_from_Subprocesses(self,proc_name):
2769 """ Does the same as the mother routine except that it also links
2770 coef_specs.inc in the HELAS folder."""
2771@@ -1704,7 +1741,7 @@
2772 """Link the TIR source directory inside the target path given
2773 in argument"""
2774
2775- if tir_name in ['pjfry','golem','samurai','ninja']:
2776+ if tir_name in ['pjfry','golem','samurai','ninja','collier']:
2777 # not self-contained libraries
2778 if (not isinstance(libpath,str)) or (not os.path.exists(libpath)) \
2779 or (not os.path.isfile(pjoin(libpath,libname))):
2780@@ -1742,7 +1779,7 @@
2781 return ""
2782
2783 if self.dependencies=='internal':
2784- if tir_name in ['pjfry','golem','samurai','ninja']:
2785+ if tir_name in ['pjfry','golem','samurai','ninja','collier']:
2786 self.tir_available_dict[tir_name]=False
2787 logger.info("When using the 'output_dependencies=internal' "+\
2788 " MG5_aMC option, the (optional) reduction library %s cannot be employed because"%tir_name+\
2789@@ -1793,7 +1830,7 @@
2790 self.tir_available_dict[tir_name]=False
2791 return ""
2792 # We link the tools below directly to the lib directory of the output
2793- if not tir_name in ['pjfry','golem','samurai','ninja']:
2794+ if not tir_name in ['pjfry','golem','samurai','ninja','collier']:
2795 ln(os.path.join(libpath,libname),targetPath,abspath=True)
2796
2797 elif self.dependencies=='environment_paths':
2798@@ -1804,7 +1841,7 @@
2799 logger.info('MG5_aMC is using %s installation found at %s.'%\
2800 (tir_name,newlibpath))
2801 # We link the tools below directly to directly where the library is detected
2802- if not tir_name in ['pjfry','golem','samurai','ninja']:
2803+ if not tir_name in ['pjfry','golem','samurai','ninja','collier']:
2804 ln(newlibpath,targetPath,abspath=True)
2805 self.tir_available_dict[tir_name]=True
2806 return os.path.dirname(newlibpath)
2807@@ -1911,6 +1948,11 @@
2808 self.write_GOLEM_interface(writers.FortranWriter(filename),
2809 matrix_element)
2810
2811+ if 'collier' in self.tir_available_dict and self.tir_available_dict['collier']:
2812+ filename = 'COLLIER_interface.f'
2813+ self.write_COLLIER_interface(writers.FortranWriter(filename),
2814+ matrix_element)
2815+
2816 filename = 'loop_num.f'
2817 self.write_loop_num(writers.FortranWriter(filename),\
2818 matrix_element,OptimizedFortranModel)
2819@@ -2042,6 +2084,40 @@
2820 else:
2821 return file
2822
2823+ def write_COLLIER_interface(self, writer, matrix_element):
2824+ """ Create the file COLLIER_interface.f"""
2825+
2826+ # First write GOLEM_interface which interfaces MG5 with TIR.
2827+ replace_dict=copy.copy(matrix_element.rep_dict)
2828+
2829+ file = open(os.path.join(self.template_dir,'COLLIER_interface.inc')).read()
2830+
2831+ FPR = q_polynomial.FortranPolynomialRoutines(replace_dict['maxrank'],\
2832+ coef_format=replace_dict['complex_dp_format'],\
2833+ sub_prefix=replace_dict['proc_prefix'])
2834+ map_definition = []
2835+ collier_map = FPR.get_COLLIER_mapping()
2836+
2837+ chunk_size = 10
2838+ for map_name, indices_list in \
2839+ [('COEFMAP_ZERO',[c[0] for c in collier_map]),
2840+ ('COEFMAP_ONE',[c[1] for c in collier_map]),
2841+ ('COEFMAP_TWO',[c[2] for c in collier_map]),
2842+ ('COEFMAP_THREE',[c[3] for c in collier_map])]:
2843+ for k in xrange(0, len(indices_list), chunk_size):
2844+ map_definition.append("DATA (%s(I),I=%3r,%3r) /%s/" % \
2845+ (map_name,k, min(k + chunk_size, len(indices_list))-1,
2846+ ','.join('%2r'%ind for ind in indices_list[k:k + chunk_size])))
2847+
2848+ replace_dict['collier_coefmap'] = '\n'.join(map_definition)
2849+
2850+ file = file % replace_dict
2851+
2852+ if writer:
2853+ writer.writelines(file,context=self.get_context(matrix_element))
2854+ else:
2855+ return file
2856+
2857 def write_GOLEM_interface(self, writer, matrix_element):
2858 """ Create the file GOLEM_interface.f which does NOT contain the subroutine
2859 defining the loop HELAS-like calls along with the general interfacing
2860@@ -2371,6 +2447,27 @@
2861
2862 writer.writelines(file,context=self.get_context(matrix_element))
2863
2864+ def write_global_specs(self, matrix_element_list):
2865+ """ From the list of matrix element, or the single matrix element, derive
2866+ the global quantities to write in global_coef_specs.inc"""
2867+
2868+ if isinstance(matrix_element_list, list):
2869+ me_list = matrix_element_list
2870+ else:
2871+ me_list = [matrix_element_list]
2872+
2873+ open(pjoin(self.dir_path,'SubProcesses','global_specs.inc'),'w').write(
2874+""" integer MAXNEXTERNAL
2875+ parameter(MAXNEXTERNAL=%d)
2876+ integer OVERALLMAXRANK
2877+ parameter(OVERALLMAXRANK=%d)
2878+ integer NPROCS
2879+ parameter(NPROCS=%d)"""%(
2880+ max(me.get_nexternal_ninitial()[0] for me in me_list),
2881+ max(me.get_max_loop_rank() for me in me_list),
2882+ len(me_list)))
2883+
2884+
2885 def fix_coef_specs(self, overall_max_lwf_spin, overall_max_loop_vert_rank):
2886 """ If processes with different maximum loop wavefunction size or
2887 different maximum loop vertex rank have to be output together, then
2888@@ -2572,7 +2669,7 @@
2889 looplibs_av=['.TRUE.']
2890 # one should be careful about the order in the following as it must match
2891 # the ordering in MadLoopParamsCard.
2892- for tir_lib in ['pjfry','iregi','golem','samurai','ninja']:
2893+ for tir_lib in ['pjfry','iregi','golem','samurai','ninja','collier']:
2894 looplibs_av.append('.TRUE.' if tir_lib in self.all_tir and \
2895 self.tir_available_dict[tir_lib] else '.FALSE.')
2896 replace_dict['data_looplibs_av']=','.join(looplibs_av)
2897@@ -2944,11 +3041,15 @@
2898 LoopInducedExporterME.finalize_v4_directory(self,*args,**opts)
2899
2900 def generate_subprocess_directory_v4(self, subproc_group,
2901- fortran_model,group_number):
2902+ fortran_model,group_number, unique_id=None):
2903 """Generate the Pn directory for a subprocess group in MadEvent,
2904 including the necessary matrix_N.f files, configs.inc and various
2905 other helper files"""
2906-
2907+
2908+ if unique_id is None:
2909+ raise MadGraph5Error, 'A unique_id must be provided to '+\
2910+ 'generate_subprocess_directory_v4 in LoopInducedExporterMEGroup.'
2911+
2912 # Generate the MadLoop files
2913 calls = 0
2914 matrix_elements = subproc_group.get('matrix_elements')
2915@@ -2956,7 +3057,8 @@
2916 calls += self.generate_loop_subprocess(matrix_element,fortran_model,
2917 group_number = group_number, proc_id = str(ime+1),
2918 # group_number = str(subproc_group.get('number')), proc_id = str(ime+1),
2919- config_map = subproc_group.get('diagram_maps')[ime])
2920+ config_map = subproc_group.get('diagram_maps')[ime],
2921+ unique_id=unique_id+ime)
2922
2923 # Then generate the MadEvent files
2924 export_v4.ProcessExporterFortranMEGroup.generate_subprocess_directory_v4(
2925@@ -3110,14 +3212,15 @@
2926 # care of MadLoop virtuals initialization
2927 LoopInducedExporterME.finalize_v4_directory(self,*args,**opts)
2928
2929- def generate_subprocess_directory_v4(self, matrix_element, fortran_model, me_number):
2930+ def generate_subprocess_directory_v4(self, matrix_element, fortran_model,
2931+ me_number):
2932 """Generate the Pn directory for a subprocess group in MadEvent,
2933 including the necessary matrix_N.f files, configs.inc and various
2934 other helper files"""
2935
2936 # Then generate the MadLoop files
2937 calls = self.generate_loop_subprocess(matrix_element,fortran_model,
2938- group_number = me_number)
2939+ group_number = me_number, unique_id=me_number)
2940
2941
2942 # First generate the MadEvent files
2943
2944=== modified file 'madgraph/madevent/sum_html.py'
2945--- madgraph/madevent/sum_html.py 2016-06-19 12:45:10 +0000
2946+++ madgraph/madevent/sum_html.py 2016-07-02 20:36:33 +0000
2947@@ -57,6 +57,7 @@
2948 'Samurai_usage' : 0,
2949 'Ninja_usage' : 0,
2950 'Ninja_QP_usage' : 0,
2951+ 'COLLIER_usage' : 0,
2952 'max_precision' : 1.0e99,
2953 'min_precision' : 0.0,
2954 'averaged_timing' : 0.0,
2955@@ -119,6 +120,7 @@
2956 self['Golem_usage'] = u_codes[4]
2957 self['Samurai_usage'] = u_codes[5]
2958 self['Ninja_usage'] = u_codes[6]
2959+ self['COLLIER_usage'] = u_codes[7]
2960 self['Ninja_QP_usage'] = u_codes[8]
2961 self['CutTools_QP_usage'] = u_codes[9]
2962 t_return_code = xml_node.getElementsByTagName('t_return_code')
2963@@ -177,6 +179,7 @@
2964 ('Golem',float(self['Golem_usage'])/self['n_madloop_calls']),
2965 ('IREGI',float(self['IREGI_usage'])/self['n_madloop_calls']),
2966 ('Samurai',float(self['Samurai_usage'])/self['n_madloop_calls']),
2967+ ('COLLIER',float(self['COLLIER_usage'])/self['n_madloop_calls']),
2968 ('Ninja_DP',float(self['Ninja_usage'])/self['n_madloop_calls']),
2969 ('Ninja_QP',float(self['Ninja_QP_usage'])/self['n_madloop_calls'])]
2970
2971@@ -714,8 +717,9 @@
2972 for P_comb in Presults:
2973 P_text += P_comb.get_html(run, unit, cmd.me_dir)
2974 P_comb.compute_values()
2975- #P_comb.write_results_dat(pjoin(cmd.me_dir, 'SubProcesses', P_comb.name,
2976- # '%s_results.dat' % run))
2977+ if cmd.proc_characteristics['ninitial'] == 1:
2978+ P_comb.write_results_dat(pjoin(cmd.me_dir, 'SubProcesses', P_comb.name,
2979+ '%s_results.dat' % run))
2980
2981
2982 Presults.write_results_dat(pjoin(cmd.me_dir,'SubProcesses', 'results.dat'))
2983
2984=== modified file 'madgraph/various/banner.py'
2985--- madgraph/various/banner.py 2016-06-18 17:02:19 +0000
2986+++ madgraph/various/banner.py 2016-07-02 20:36:33 +0000
2987@@ -2112,8 +2112,8 @@
2988 raise InvalidRunCard, "'reweight_scale' and 'dynamical_scale_choice' lists should have the same length"
2989 if len(self['dynamical_scale_choice']) > 10 :
2990 raise InvalidRunCard, "Length of list for 'dynamical_scale_choice' too long: max is 10."
2991- if len(self['lhaid']) > 10 :
2992- raise InvalidRunCard, "Length of list for 'lhaid' too long: max is 10."
2993+ if len(self['lhaid']) > 25 :
2994+ raise InvalidRunCard, "Length of list for 'lhaid' too long: max is 25."
2995 if len(self['rw_rscale']) > 9 :
2996 raise InvalidRunCard, "Length of list for 'rw_rscale' too long: max is 9."
2997 if len(self['rw_fscale']) > 9 :
2998@@ -2189,17 +2189,23 @@
2999 contains a parser to read it, facilities to write a new file,...
3000 """
3001
3002-
3003-
3004+ _ID_reduction_tool_map = {1:'CutTools',
3005+ 2:'PJFry++',
3006+ 3:'IREGI',
3007+ 4:'Golem95',
3008+ 5:'Samurai',
3009+ 6:'Ninja',
3010+ 7:'COLLIER'}
3011+
3012 def default_setup(self):
3013 """initialize the directory to the default value"""
3014
3015- self.add_param("MLReductionLib", "6|1|2")
3016+ self.add_param("MLReductionLib", "6|7|1")
3017 self.add_param("IREGIMODE", 2)
3018 self.add_param("IREGIRECY", True)
3019 self.add_param("CTModeRun", -1)
3020 self.add_param("MLStabThres", 1e-3)
3021- self.add_param("NRotations_DP", 1)
3022+ self.add_param("NRotations_DP", 0)
3023 self.add_param("NRotations_QP", 0)
3024 self.add_param("ImprovePSPoint", 2)
3025 self.add_param("CTLoopLibrary", 2)
3026@@ -2215,8 +2221,16 @@
3027 self.add_param("HelicityFilterLevel", 2)
3028 self.add_param("LoopInitStartOver", False)
3029 self.add_param("HelInitStartOver", False)
3030- self.add_param("UseQPIntegrandForNinja", False)
3031+ self.add_param("UseQPIntegrandForNinja", True)
3032 self.add_param("UseQPIntegrandForCutTools", True)
3033+ self.add_param("COLLIERMode", 1)
3034+ self.add_param("COLLIERComputeUVpoles", True)
3035+ self.add_param("COLLIERComputeIRpoles", True)
3036+ self.add_param("COLLIERRequiredAccuracy", 1.0e-8)
3037+ self.add_param("COLLIERCanOutput",False)
3038+ self.add_param("COLLIERGlobalCache",-1)
3039+ self.add_param("COLLIERUseCacheForPoles",False)
3040+ self.add_param("COLLIERUseInternalStabilityTest",True)
3041
3042 def read(self, finput):
3043 """Read the input file, this can be a path to a file,
3044
3045=== modified file 'madgraph/various/lhe_parser.py'
3046--- madgraph/various/lhe_parser.py 2016-06-18 17:02:19 +0000
3047+++ madgraph/various/lhe_parser.py 2016-07-02 20:36:33 +0000
3048@@ -16,6 +16,7 @@
3049 import misc
3050 import logging
3051 import gzip
3052+import banner as banner_mod
3053 logger = logging.getLogger("madgraph.lhe_parser")
3054
3055 class Particle(object):
3056@@ -696,14 +697,32 @@
3057 grouped_error = {}
3058 for i,ff in enumerate(self.files):
3059 filename = ff.name
3060- Pdir = [P for P in filename.split(os.path.sep) if P.startswith('P')][-1]
3061- group = Pdir.split("_")[0][1:]
3062- if group in grouped_cross:
3063- grouped_cross[group] += self.allcross[i]
3064- grouped_error[group] += self.error[i]**2
3065- else:
3066- grouped_cross[group] = self.allcross[i]
3067- grouped_error[group] = self.error[i]**2
3068+ from_init = False
3069+ Pdir = [P for P in filename.split(os.path.sep) if P.startswith('P')]
3070+ if Pdir:
3071+ Pdir = Pdir[-1]
3072+ group = Pdir.split("_")[0][1:]
3073+ if not group.isdigit():
3074+ from_init = True
3075+ else:
3076+ from_init = True
3077+
3078+ if not from_init:
3079+ if group in grouped_cross:
3080+ grouped_cross[group] += self.allcross[i]
3081+ grouped_error[group] += self.error[i]**2
3082+ else:
3083+ grouped_cross[group] = self.allcross[i]
3084+ grouped_error[group] = self.error[i]**2
3085+ else:
3086+ ban = banner_mod.Banner(ff.banner)
3087+ for line in ban['init']:
3088+ splitline = line.split()
3089+ if len(splitline)==4:
3090+ cross, error, wgt, group = splitline
3091+ grouped_cross[int(group)] += cross
3092+ grouped_error[int(group)] += error**2
3093+
3094
3095 nb_group = len(grouped_cross)
3096
3097@@ -856,6 +875,9 @@
3098 new_wgt = sum(self.across)/opts['event_target']
3099 self.define_init_banner(new_wgt)
3100 self.written_weight = new_wgt
3101+ elif 'write_init' in opts and opts['write_init']:
3102+ self.define_init_banner(0)
3103+ del opts['write_init']
3104
3105 return super(MultiEventFile, self).unweight(outputpath, get_wgt_multi, **opts)
3106
3107
3108=== modified file 'madgraph/various/misc.py'
3109--- madgraph/various/misc.py 2016-05-18 14:36:57 +0000
3110+++ madgraph/various/misc.py 2016-07-02 20:36:33 +0000
3111@@ -308,7 +308,7 @@
3112 log(msg)
3113
3114
3115- if dependency in ['pjfry','golem','samurai','ninja']:
3116+ if dependency in ['pjfry','golem','samurai','ninja','collier']:
3117 if cmd.options[dependency] not in ['None',None,'']:
3118 tell("Deactivating MG5_aMC dependency '%s'"%dependency)
3119 cmd.options[dependency] = None
3120@@ -350,6 +350,13 @@
3121 tell("Installing ninja...")
3122 cmd.do_install('ninja')
3123
3124+ if dependency=='collier':
3125+ if cmd.options['collier'] in ['None',None,''] or\
3126+ (cmd.options['collier'] == 'auto' and which_lib('libcollier.a') is None) or\
3127+ which_lib(pjoin(cmd.options['collier'],'libcollier.a')) is None:
3128+ tell("Installing COLLIER...")
3129+ cmd.do_install('collier')
3130+
3131 #===============================================================================
3132 # find a library
3133 #===============================================================================
3134
3135=== modified file 'madgraph/various/process_checks.py'
3136--- madgraph/various/process_checks.py 2016-04-15 11:14:25 +0000
3137+++ madgraph/various/process_checks.py 2016-07-02 20:36:33 +0000
3138@@ -613,7 +613,8 @@
3139 self.mg_root, export_dir, MLoptions)
3140 FortranModel = helas_call_writers.FortranUFOHelasCallWriter(model)
3141 FortranExporter.copy_v4template(modelname=model.get('name'))
3142- FortranExporter.generate_subprocess_directory_v4(matrix_element, FortranModel)
3143+ FortranExporter.generate_subprocess_directory_v4(matrix_element, FortranModel, 1)
3144+ FortranExporter.write_global_specs(matrix_element)
3145 wanted_lorentz = list(set(matrix_element.get_used_lorentz()))
3146 wanted_couplings = list(set([c for l in matrix_element.get_used_couplings() \
3147 for c in l]))
3148@@ -1155,7 +1156,8 @@
3149 FortranExporter = exporter_class(self.mg_root, export_dir, MLoptions)
3150 FortranModel = helas_call_writers.FortranUFOHelasCallWriter(model)
3151 FortranExporter.copy_v4template(modelname=model.get('name'))
3152- FortranExporter.generate_subprocess_directory_v4(matrix_element, FortranModel)
3153+ FortranExporter.generate_subprocess_directory_v4(matrix_element, FortranModel, 1)
3154+ FortranExporter.write_global_specs(matrix_element)
3155 wanted_lorentz = list(set(matrix_element.get_used_lorentz()))
3156 wanted_couplings = list(set([c for l in matrix_element.get_used_couplings() \
3157 for c in l]))
3158@@ -1470,8 +1472,8 @@
3159 tools=list(set(tools)) # remove the duplication ones
3160
3161 # not self-contained tir libraries
3162- tool_var={'pjfry':2,'golem':4,'samurai':5,'ninja':6}
3163- for tool in ['pjfry','golem','samurai','ninja']:
3164+ tool_var={'pjfry':2,'golem':4,'samurai':5,'ninja':6,'collier':7}
3165+ for tool in ['pjfry','golem','samurai','ninja','collier']:
3166 tool_dir='%s_dir'%tool
3167 if not tool_dir in self.tir_dir:
3168 continue
3169@@ -1493,8 +1495,8 @@
3170 export_dir=pjoin(self.mg_root,("SAVED" if keep_folder else "")+\
3171 temp_dir_prefix+"_%s"%proc_name)
3172
3173- tools_name={1:'CutTools',2:'PJFry++',3:'IREGI',4:'Golem95',5:'Samurai',
3174- 6:'Ninja'}
3175+ tools_name=bannermod.MadLoopParam._ID_reduction_tool_map
3176+
3177 return_dict={}
3178 return_dict['Stability']={}
3179 infos_save={'Process_output': None,
3180@@ -1517,7 +1519,7 @@
3181 # The exceptional PS points are those which stay unstable in quad prec.
3182 Exceptional_PS_points = []
3183
3184- MLoptions={}
3185+ MLoptions=MLOptions
3186 MLoptions["MLReductionLib"]=tool
3187 clean = (tool==tools[0]) and not nPoints==0
3188 if infos_IN==None or (tool_name not in infos_IN):
3189@@ -1606,7 +1608,7 @@
3190 str(datetime.timedelta(seconds=sec_needed)),\
3191 datetime.datetime.now().strftime("%d-%m-%Y %H:%M")))
3192 if logger.getEffectiveLevel()<logging.WARNING and \
3193- (sec_needed>5 or (reusing and infos['Initialization'] == None)):
3194+ (sec_needed>5 or infos['Initialization'] == None):
3195 widgets = ['Stability check:', pbar.Percentage(), ' ',
3196 pbar.Bar(),' ', pbar.ETA(), ' ']
3197 progress_bar = pbar.ProgressBar(widgets=widgets, maxval=nPoints,
3198@@ -2125,8 +2127,10 @@
3199
3200 timing2 = myProfiler.time_matrix_element(matrix_element, reusing,
3201 param_card, keep_folder=keep_folder,options=options,
3202- MLOptions = MLoptions)
3203+ MLOptions = MLoptions)
3204
3205+ timing2['reduction_tool'] = MLoptions['MLReductionLib'][0]
3206+
3207 if timing2 == None:
3208 return None, None
3209
3210@@ -2172,6 +2176,22 @@
3211 MLoptions = {}
3212 else:
3213 MLoptions = MLOptions
3214+ # Make sure that the poles computation is disabled for COLLIER
3215+ if 'COLLIERComputeUVpoles' not in MLoptions:
3216+ MLoptions['COLLIERComputeUVpoles']=False
3217+ if 'COLLIERComputeIRpoles' not in MLoptions:
3218+ MLoptions['COLLIERComputeIRpoles']=False
3219+ # Use high required accuracy in COLLIER's requirement if not specified
3220+ if 'COLLIERRequiredAccuracy' not in MLoptions:
3221+ MLoptions['COLLIERRequiredAccuracy']=1e-13
3222+ # Use loop-direction switching as stability test if not specifed (more reliable)
3223+ if 'COLLIERUseInternalStabilityTest' not in MLoptions:
3224+ MLoptions['COLLIERUseInternalStabilityTest']=False
3225+ # Finally we *must* forbid the use of COLLIER global cache here, because it
3226+ # does not work with the way we call independently CTMODERun 1 and 2
3227+ # with the StabilityChecker.
3228+ MLoptions['COLLIERGlobalCache'] = 0
3229+
3230 if "MLReductionLib" not in MLOptions:
3231 MLoptions["MLReductionLib"] = []
3232 if cuttools:
3233@@ -2186,6 +2206,8 @@
3234 MLoptions["MLReductionLib"].extend([5])
3235 if "ninja_dir" in tir:
3236 MLoptions["MLReductionLib"].extend([6])
3237+ if "collier_dir" in tir:
3238+ MLoptions["MLReductionLib"].extend([7])
3239
3240 stability = myStabilityChecker.check_matrix_element_stability(matrix_element,
3241 options=options,param_card=param_card,
3242@@ -2223,6 +2245,19 @@
3243 MLoptions = {}
3244 else:
3245 MLoptions = MLOptions
3246+ # Make sure that the poles computation is disabled for COLLIER
3247+ if 'COLLIERComputeUVpoles' not in MLoptions:
3248+ MLoptions['COLLIERComputeUVpoles']=False
3249+ if 'COLLIERComputeIRpoles' not in MLoptions:
3250+ MLoptions['COLLIERComputeIRpoles']=False
3251+ # And the COLLIER global cache is active, if not specified
3252+ if 'COLLIERGlobalCache' not in MLoptions:
3253+ MLoptions['COLLIERGlobalCache']=-1
3254+ # And time NINJA by default if not specified:
3255+ if 'MLReductionLib' not in MLoptions or \
3256+ len(MLoptions['MLReductionLib'])==0:
3257+ MLoptions['MLReductionLib'] = [6]
3258+
3259 timing2 = myTimer.time_matrix_element(matrix_element, reusing, param_card,
3260 keep_folder = keep_folder, options=options,
3261 MLOptions = MLoptions)
3262@@ -2233,6 +2268,7 @@
3263 # Return the merged two dictionaries
3264 res = dict(timing1.items()+timing2.items())
3265 res['loop_optimized_output']=myTimer.loop_optimized_output
3266+ res['reduction_tool'] = MLoptions['MLReductionLib'][0]
3267 return res
3268
3269 #===============================================================================
3270@@ -2678,7 +2714,8 @@
3271 # Use nicer name for the XML tag in the log file
3272 xml_toolname = {'GOLEM95':'GOLEM','IREGI':'IREGI',
3273 'CUTTOOLS':'CUTTOOLS','PJFRY++':'PJFRY',
3274- 'NINJA':'NINJA','SAMURAI':'SAMURAI'}[toolname.upper()]
3275+ 'NINJA':'NINJA','SAMURAI':'SAMURAI',
3276+ 'COLLIER':'COLLIER'}[toolname.upper()]
3277 if len(UPS)>0:
3278 res_str_i = "\nDetails of the %d/%d UPS encountered by %s\n"\
3279 %(len(UPS),nPS,toolname)
3280@@ -2819,7 +2856,7 @@
3281
3282 try:
3283 import matplotlib.pyplot as plt
3284- colorlist=['b','r','g','y','m','c']
3285+ colorlist=['b','r','g','y','m','c','k']
3286 for i,key in enumerate(data_plot_dict.keys()):
3287 color=colorlist[i]
3288 data_plot=data_plot_dict[key]
3289@@ -2860,6 +2897,8 @@
3290 # Define shortcut
3291 f = format_output
3292 loop_optimized_output = timings['loop_optimized_output']
3293+ reduction_tool = bannermod.MadLoopParam._ID_reduction_tool_map[
3294+ timings['reduction_tool']]
3295
3296 res_str = "%s \n"%process.nice_string()
3297 try:
3298@@ -2885,6 +2924,7 @@
3299 res_str += "|= Initialization............ %s\n"\
3300 %f(timings['Initialization'],'%.3gs')
3301
3302+ res_str += "\n= Reduction tool tested...... %s\n"%reduction_tool
3303 res_str += "\n= Helicity sum time / PSpoint ========== %.3gms\n"\
3304 %(timings['run_unpolarized_total']*1000.0)
3305 if loop_optimized_output:
3306@@ -2894,7 +2934,7 @@
3307 total=coef_time+loop_time
3308 res_str += "|= Coefs. computation time... %.3gms (%d%%)\n"\
3309 %(coef_time,int(round(100.0*coef_time/total)))
3310- res_str += "|= Loop evaluation (OPP) time %.3gms (%d%%)\n"\
3311+ res_str += "|= Loop evaluation time...... %.3gms (%d%%)\n"\
3312 %(loop_time,int(round(100.0*loop_time/total)))
3313 res_str += "\n= One helicity time / PSpoint ========== %.3gms\n"\
3314 %(timings['run_polarized_total']*1000.0)
3315@@ -2905,7 +2945,7 @@
3316 total=coef_time+loop_time
3317 res_str += "|= Coefs. computation time... %.3gms (%d%%)\n"\
3318 %(coef_time,int(round(100.0*coef_time/total)))
3319- res_str += "|= Loop evaluation (OPP) time %.3gms (%d%%)\n"\
3320+ res_str += "|= Loop evaluation time...... %.3gms (%d%%)\n"\
3321 %(loop_time,int(round(100.0*loop_time/total)))
3322 res_str += "\n= Miscellaneous ========================\n"
3323 res_str += "|= Number of hel. computed... %s/%s\n"\
3324
3325=== modified file 'madgraph/various/q_polynomial.py'
3326--- madgraph/various/q_polynomial.py 2016-06-09 00:59:23 +0000
3327+++ madgraph/various/q_polynomial.py 2016-07-02 20:36:33 +0000
3328@@ -362,6 +362,20 @@
3329
3330 return '\n'.join(lines)
3331
3332+ def get_COLLIER_mapping(self):
3333+ """ Returns a list of tuples of the form:
3334+ [ (COLLIER_ind0, COLLIER_ind1, COLLIER_ind2, COLLIER_ind3), ]
3335+ where the position in the list is the coef_ID in MadLoop ordering.
3336+ """
3337+ res = []
3338+ for coef_pos in range(0,get_number_of_coefs_for_rank(self.pq.rank)):
3339+ indices_list = self.pq.get_coef_at_position(coef_pos)
3340+ res.append((indices_list.count(0),
3341+ indices_list.count(1),
3342+ indices_list.count(2),
3343+ indices_list.count(3)))
3344+ return res
3345+
3346 def write_golem95_mapping(self):
3347 """ Returns a fortran subroutine which fills in the array of tensorial
3348 coefficients following golem95 standards using MadLoop coefficients."""
3349
3350=== removed directory 'models/loop_MSSM'
3351=== removed file 'models/loop_MSSM/.restrict_parallel_test.dat'
3352--- models/loop_MSSM/.restrict_parallel_test.dat 2014-06-16 13:13:43 +0000
3353+++ models/loop_MSSM/.restrict_parallel_test.dat 1970-01-01 00:00:00 +0000
3354@@ -1,532 +0,0 @@
3355-######################################################################
3356-## PARAM_CARD AUTOMATICALY GENERATED BY THE UFO #####################
3357-######################################################################
3358-
3359-###################################
3360-## INFORMATION FOR SMINPUTS
3361-###################################
3362-Block SMINPUTS
3363- 1 1.3250698e+02 # aEWM1
3364- 3 1.180000e-01 # aS
3365-
3366-###################################
3367-## INFORMATION FOR MASS
3368-###################################
3369-Block MASS
3370- 5 4.750000e+00 # MB
3371- 6 1.750000e+02 # MT
3372- 15 0.000000e+00 # Mta
3373- 23 9.118760e+01 # MZ
3374- 24 7.982901e+01 # MW
3375- 25 1.108991e+02 # MH01
3376- 35 3.999601e+02 # MH02
3377- 36 3.995839e+02 # MA0
3378- 37 4.078790e+02 # MH
3379- 1000001 5.684411e+02 # Msd1
3380- 1000002 5.611190e+02 # Msu1
3381- 1000003 5.684411e+02 # Msd2
3382- 1000004 5.611190e+02 # Msu2
3383- 1000005 5.130652e+02 # Msd3
3384- 1000006 3.996685e+02 # Msu3
3385- 1000011 2.029157e+02 # Msl1
3386- 1000012 1.852583e+02 # Msn1
3387- 1000013 2.029157e+02 # Msl2
3388- 1000014 1.852583e+02 # Msn2
3389- 1000015 1.344909e+02 # Msl3
3390- 1000016 1.847085e+02 # Msn3
3391- 1000021 6.077137e+02 # Mgo
3392- 1000022 9.668807e+01 # Mneu1
3393- 1000023 1.810882e+02 # Mneu2
3394- 1000024 1.816965e+02 # Mch1
3395- 1000025 3.637560e+02 # Mneu3
3396- 1000035 3.817294e+02 # Mneu4
3397- 1000037 3.799393e+02 # Mch2
3398- 2000001 5.452285e+02 # Msd4
3399- 2000002 5.492593e+02 # Msu4
3400- 2000003 5.452285e+02 # Msd5
3401- 2000004 5.492593e+02 # Msu5
3402- 2000005 5.437267e+02 # Msd6
3403- 2000006 5.857858e+02 # Msu6
3404- 2000011 1.441028e+02 # Msl4
3405- 2000013 1.441028e+02 # Msl5
3406- 2000015 2.068678e+02 # Msl6
3407-## Not dependent paramater.
3408-## Those values should be edited following analytical the
3409-## analytical expression. Some generator could simply ignore
3410-## those values and use the analytical expression
3411- 22 0.000000 # a : 0.0
3412- 21 0.000000 # g : 0.0
3413- 12 0.000000 # ve : 0.0
3414- 14 0.000000 # vm : 0.0
3415- 16 0.000000 # vt : 0.0
3416- 11 0.000000 # e- : 0.0
3417- 13 0.000000 # mu- : 0.0
3418- 2 0.000000 # u : 0.0
3419- 4 0.000000 # c : 0.0
3420- 1 0.000000 # d : 0.0
3421- 3 0.000000 # s : 0.0
3422- 9000001 0.000000 # ghG : 0.0
3423- 9000002 0.000000 # ghA : 0.0
3424- 250 91.187600 # G0 : MZ
3425- 251 79.829013 # G+ : MW
3426- 9000003 91.187600 # ghZ : MZ
3427- 9000004 79.829013 # ghWp : MW
3428- 9000005 79.829013 # ghWm : MW
3429-
3430-###################################
3431-## INFORMATION FOR DECAY
3432-###################################
3433-DECAY 6 0.000000e+00
3434-DECAY 23 0.000000e+00
3435-DECAY 24 0.000000e+00
3436-DECAY 25 0.000000e+00
3437-DECAY 35 0.000000e+00
3438-DECAY 36 0.000000e+00
3439-DECAY 37 0.000000e+00
3440-DECAY 1000001 0.000000e+00
3441-DECAY 1000002 0.000000e+00
3442-DECAY 1000003 0.000000e+00
3443-DECAY 1000004 0.000000e+00
3444-DECAY 1000005 0.000000e+00
3445-DECAY 1000006 0.000000e+00
3446-DECAY 1000011 0.000000e+00
3447-DECAY 1000012 0.000000e+00
3448-DECAY 1000013 0.000000e+00
3449-DECAY 1000014 0.000000e+00
3450-DECAY 1000015 0.000000e+00
3451-DECAY 1000016 0.000000e+00
3452-DECAY 1000021 0.000000e+00
3453-DECAY 1000023 0.000000e+00
3454-DECAY 1000024 0.000000e+00
3455-DECAY 1000025 0.000000e+00
3456-DECAY 1000035 0.000000e+00
3457-DECAY 1000037 0.000000e+00
3458-DECAY 2000001 0.000000e+00
3459-DECAY 2000002 0.000000e+00
3460-DECAY 2000003 0.000000e+00
3461-DECAY 2000004 0.000000e+00
3462-DECAY 2000005 0.000000e+00
3463-DECAY 2000006 0.000000e+00
3464-DECAY 2000011 0.000000e+00
3465-DECAY 2000013 0.000000e+00
3466-DECAY 2000015 0.000000e+00
3467-## Not dependent paramater.
3468-## Those values should be edited following analytical the
3469-## analytical expression. Some generator could simply ignore
3470-## those values and use the analytical expression
3471-DECAY 22 0.000000 # a : 0.0
3472-DECAY 21 0.000000 # g : 0.0
3473-DECAY 1000022 0.000000 # n1 : 0.0
3474-DECAY 250 0.000000 # G0 : 0.0
3475-DECAY 251 0.000000 # G+ : 0.0
3476-DECAY 12 0.000000 # ve : 0.0
3477-DECAY 14 0.000000 # vm : 0.0
3478-DECAY 16 0.000000 # vt : 0.0
3479-DECAY 11 0.000000 # e- : 0.0
3480-DECAY 13 0.000000 # mu- : 0.0
3481-DECAY 15 0.000000 # tau- : 0.0
3482-DECAY 2 0.000000 # u : 0.0
3483-DECAY 4 0.000000 # c : 0.0
3484-DECAY 1 0.000000 # d : 0.0
3485-DECAY 3 0.000000 # s : 0.0
3486-DECAY 5 0.000000 # b : 0.0
3487-DECAY 9000001 0.000000 # ghG : 0.0
3488-DECAY 9000002 0.000000 # ghA : 0.0
3489-DECAY 9000003 0.000000 # ghZ : WZ
3490-DECAY 9000004 0.000000 # ghWp : WW
3491-DECAY 9000005 0.000000 # ghWm : WW
3492-
3493-###################################
3494-## INFORMATION FOR DSQMIX
3495-###################################
3496-Block DSQMIX
3497- 1 1 1.000000e+00 # RRd1x1
3498- 2 2 1.000000e+00 # RRd2x2
3499- 3 3 1.000000e+00 # RRd3x3
3500- 4 4 1.000000e+00 # RRd4x4
3501- 5 5 1.000000e+00 # RRd5x5
3502- 6 6 1.000000e+00 # RRd6x6
3503-
3504-###################################
3505-## INFORMATION FOR FRALPHA
3506-###################################
3507-Block FRALPHA
3508- 1 -1.138252e-01 # alp
3509-
3510-###################################
3511-## INFORMATION FOR HMIX
3512-###################################
3513-Block HMIX
3514- 1 3.576810e+02 # RMUH
3515- 2 9.748624e+00 # tb
3516-
3517-###################################
3518-## INFORMATION FOR LOOP
3519-###################################
3520-Block LOOP
3521- 1 1.000000000e+03 # MU_R
3522-
3523-###################################
3524-## INFORMATION FOR MSD2
3525-###################################
3526-Block MSD2
3527- 1 1 2.736847e+05 # RmD21x1
3528- 2 2 2.736847e+05 # RmD22x2
3529- 3 3 2.702620e+05 # RmD23x3
3530-
3531-###################################
3532-## INFORMATION FOR MSE2
3533-###################################
3534-Block MSE2
3535- 1 1 1.863063e+04 # RmE21x1
3536- 2 2 1.863063e+04 # RmE22x2
3537- 3 3 1.796764e+04 # RmE23x3
3538-
3539-###################################
3540-## INFORMATION FOR MSL2
3541-###################################
3542-Block MSL2
3543- 1 1 3.815567e+04 # RmL21x1
3544- 2 2 3.815567e+04 # RmL22x2
3545- 3 3 3.782868e+04 # RmL23x3
3546-
3547-###################################
3548-## INFORMATION FOR MSOFT
3549-###################################
3550-Block MSOFT
3551- 1 1.013965e+02 # RMx1
3552- 2 1.915042e+02 # RMx2
3553- 3 5.882630e+02 # RMx3
3554- 21 3.233749e+04 # mHd2
3555- 22 -1.288001e+05 # mHu2
3556-
3557-###################################
3558-## INFORMATION FOR MSQ2
3559-###################################
3560-Block MSQ2
3561- 1 1 2.998367e+05 # RmQ21x1
3562- 2 2 2.998367e+05 # RmQ22x2
3563- 3 3 2.487654e+05 # RmQ23x3
3564-
3565-###################################
3566-## INFORMATION FOR MSU2
3567-###################################
3568-Block MSU2
3569- 1 1 2.803821e+05 # RmU21x1
3570- 2 2 2.803821e+05 # RmU22x2
3571- 3 3 1.791371e+05 # RmU23x3
3572-
3573-###################################
3574-## INFORMATION FOR NMIX
3575-###################################
3576-Block NMIX
3577- 1 1 1.0000000e+00 # RNN1x1
3578- 1 2 0.0000000e+00 # RNN1x2
3579- 1 3 0.0000000e+00 # RNN1x3
3580- 1 4 0.0000000e+00 # RNN1x4
3581- 2 1 0.0000000e+00 # RNN2x1
3582- 2 2 1.0000000e+00 # RNN2x2
3583- 2 3 0.0000000e+00 # RNN2x3
3584- 2 4 0.0000000e+00 # RNN2x4
3585- 3 1 0.0000000e+00 # RNN3x1
3586- 3 2 0.0000000e+00 # RNN3x2
3587- 3 3 1.0000000e+00 # RNN3x3
3588- 3 4 0.0000000e+00 # RNN3x4
3589- 4 1 0.0000000e+00 # RNN4x1
3590- 4 2 0.0000000e+00 # RNN4x2
3591- 4 3 0.0000000e+00 # RNN4x3
3592- 4 4 1.0000000e+00 # RNN4x4
3593-
3594-###################################
3595-## INFORMATION FOR SELMIX
3596-###################################
3597-Block SELMIX
3598- 1 1 1.000000e+00 # RRl1x1
3599- 2 2 1.000000e+00 # RRl2x2
3600- 3 3 1.000000e+00 # RRl3x3
3601- 4 4 1.000000e+00 # RRl4x4
3602- 5 5 1.000000e+00 # RRl5x5
3603- 6 6 1.000000e+00 # RRl6x6
3604-
3605-###################################
3606-## INFORMATION FOR SNUMIX
3607-###################################
3608-Block SNUMIX
3609- 1 1 1.000000e+00 # RRn1x1
3610- 2 2 1.000000e+00 # RRn2x2
3611- 3 3 1.000000e+00 # RRn3x3
3612-
3613-###################################
3614-## INFORMATION FOR TD
3615-###################################
3616-Block TD
3617- 3 3 0.0000000e+00 # Rtd3x3
3618-
3619-###################################
3620-## INFORMATION FOR TE
3621-###################################
3622-Block TE
3623- 3 3 0.00000000e+00 # Rte3x3
3624-
3625-###################################
3626-## INFORMATION FOR TU
3627-###################################
3628-Block TU
3629- 3 3 -4.447525e+02 # Rtu3x3
3630-
3631-###################################
3632-## INFORMATION FOR UMIX
3633-###################################
3634-Block UMIX
3635- 1 1 1.0000000e+00 # RUU1x1
3636- 1 2 0.0000000e+00 # RUU1x2
3637- 2 1 0.0000000e+00 # RUU2x1
3638- 2 2 1.0000000e+00 # RUU2x2
3639-
3640-###################################
3641-## INFORMATION FOR UPMNS
3642-###################################
3643-Block UPMNS
3644- 1 1 1.000000e+00 # RMNS1x1
3645- 2 2 1.000000e+00 # RMNS2x2
3646- 3 3 1.000000e+00 # RMNS3x3
3647-
3648-###################################
3649-## INFORMATION FOR USQMIX
3650-###################################
3651-Block USQMIX
3652- 1 1 1.000000e+00 # RRu1x1
3653- 2 2 1.000000e+00 # RRu2x2
3654- 3 3 1.000000e+00 # RRu3x3
3655- 4 4 1.000000e+00 # RRu4x4
3656- 5 5 1.000000e+00 # RRu5x5
3657- 6 6 1.000000e+00 # RRu6x6
3658-
3659-###################################
3660-## INFORMATION FOR VCKM
3661-###################################
3662-Block VCKM
3663- 1 1 1.000000e+00 # RCKM1x1
3664- 2 2 1.000000e+00 # RCKM2x2
3665- 3 3 1.000000e+00 # RCKM3x3
3666-
3667-###################################
3668-## INFORMATION FOR VMIX
3669-###################################
3670-Block VMIX
3671- 1 1 1.0000000e+00 # RVV1x1
3672- 1 2 0.0000000e+00 # RVV1x2
3673- 2 1 0.0000000e+00 # RVV2x1
3674- 2 2 1.0000000e+00 # RVV2x2
3675-
3676-###################################
3677-## INFORMATION FOR YD
3678-###################################
3679-Block YD
3680- 3 3 0.00000000e+00 # Ryd3x3
3681-
3682-###################################
3683-## INFORMATION FOR YE
3684-###################################
3685-Block YE
3686- 3 3 0.00000000e+00 # Rye3x3
3687-
3688-###################################
3689-## INFORMATION FOR YU
3690-###################################
3691-Block YU
3692- 3 3 8.928445e-01 # Ryu3x3
3693-#===========================================================
3694-# QUANTUM NUMBERS OF NEW STATE(S) (NON SM PDG CODE)
3695-#===========================================================
3696-
3697-Block QNUMBERS 1000022 # n1
3698- 1 0 # 3 times electric charge
3699- 2 2 # number of spin states (2S+1)
3700- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3701- 4 0 # Particle/Antiparticle distinction (0=own anti)
3702-Block QNUMBERS 1000023 # n2
3703- 1 0 # 3 times electric charge
3704- 2 2 # number of spin states (2S+1)
3705- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3706- 4 0 # Particle/Antiparticle distinction (0=own anti)
3707-Block QNUMBERS 1000025 # n3
3708- 1 0 # 3 times electric charge
3709- 2 2 # number of spin states (2S+1)
3710- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3711- 4 0 # Particle/Antiparticle distinction (0=own anti)
3712-Block QNUMBERS 1000035 # n4
3713- 1 0 # 3 times electric charge
3714- 2 2 # number of spin states (2S+1)
3715- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3716- 4 0 # Particle/Antiparticle distinction (0=own anti)
3717-Block QNUMBERS 1000024 # x1+
3718- 1 3 # 3 times electric charge
3719- 2 2 # number of spin states (2S+1)
3720- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3721- 4 1 # Particle/Antiparticle distinction (0=own anti)
3722-Block QNUMBERS 1000037 # x2+
3723- 1 3 # 3 times electric charge
3724- 2 2 # number of spin states (2S+1)
3725- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3726- 4 1 # Particle/Antiparticle distinction (0=own anti)
3727-Block QNUMBERS 1000021 # go
3728- 1 0 # 3 times electric charge
3729- 2 2 # number of spin states (2S+1)
3730- 3 8 # colour rep (1: singlet, 3: triplet, 8: octet)
3731- 4 0 # Particle/Antiparticle distinction (0=own anti)
3732-Block QNUMBERS 35 # h02
3733- 1 0 # 3 times electric charge
3734- 2 1 # number of spin states (2S+1)
3735- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3736- 4 0 # Particle/Antiparticle distinction (0=own anti)
3737-Block QNUMBERS 36 # A0
3738- 1 0 # 3 times electric charge
3739- 2 1 # number of spin states (2S+1)
3740- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3741- 4 0 # Particle/Antiparticle distinction (0=own anti)
3742-Block QNUMBERS 37 # H+
3743- 1 3 # 3 times electric charge
3744- 2 1 # number of spin states (2S+1)
3745- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3746- 4 1 # Particle/Antiparticle distinction (0=own anti)
3747-Block QNUMBERS 250 # G0
3748- 1 0 # 3 times electric charge
3749- 2 1 # number of spin states (2S+1)
3750- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3751- 4 0 # Particle/Antiparticle distinction (0=own anti)
3752-Block QNUMBERS 251 # G+
3753- 1 3 # 3 times electric charge
3754- 2 1 # number of spin states (2S+1)
3755- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3756- 4 1 # Particle/Antiparticle distinction (0=own anti)
3757-Block QNUMBERS 1000012 # sv1
3758- 1 0 # 3 times electric charge
3759- 2 1 # number of spin states (2S+1)
3760- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3761- 4 1 # Particle/Antiparticle distinction (0=own anti)
3762-Block QNUMBERS 1000014 # sv2
3763- 1 0 # 3 times electric charge
3764- 2 1 # number of spin states (2S+1)
3765- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3766- 4 1 # Particle/Antiparticle distinction (0=own anti)
3767-Block QNUMBERS 1000016 # sv3
3768- 1 0 # 3 times electric charge
3769- 2 1 # number of spin states (2S+1)
3770- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3771- 4 1 # Particle/Antiparticle distinction (0=own anti)
3772-Block QNUMBERS 1000011 # sl1-
3773- 1 -3 # 3 times electric charge
3774- 2 1 # number of spin states (2S+1)
3775- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3776- 4 1 # Particle/Antiparticle distinction (0=own anti)
3777-Block QNUMBERS 1000013 # sl2-
3778- 1 -3 # 3 times electric charge
3779- 2 1 # number of spin states (2S+1)
3780- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3781- 4 1 # Particle/Antiparticle distinction (0=own anti)
3782-Block QNUMBERS 1000015 # sl3-
3783- 1 -3 # 3 times electric charge
3784- 2 1 # number of spin states (2S+1)
3785- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3786- 4 1 # Particle/Antiparticle distinction (0=own anti)
3787-Block QNUMBERS 2000011 # sl4-
3788- 1 -3 # 3 times electric charge
3789- 2 1 # number of spin states (2S+1)
3790- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3791- 4 1 # Particle/Antiparticle distinction (0=own anti)
3792-Block QNUMBERS 2000013 # sl5-
3793- 1 -3 # 3 times electric charge
3794- 2 1 # number of spin states (2S+1)
3795- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3796- 4 1 # Particle/Antiparticle distinction (0=own anti)
3797-Block QNUMBERS 2000015 # sl6-
3798- 1 -3 # 3 times electric charge
3799- 2 1 # number of spin states (2S+1)
3800- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3801- 4 1 # Particle/Antiparticle distinction (0=own anti)
3802-Block QNUMBERS 1000002 # su1
3803- 1 2 # 3 times electric charge
3804- 2 1 # number of spin states (2S+1)
3805- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3806- 4 1 # Particle/Antiparticle distinction (0=own anti)
3807-Block QNUMBERS 1000004 # su2
3808- 1 2 # 3 times electric charge
3809- 2 1 # number of spin states (2S+1)
3810- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3811- 4 1 # Particle/Antiparticle distinction (0=own anti)
3812-Block QNUMBERS 1000006 # su3
3813- 1 2 # 3 times electric charge
3814- 2 1 # number of spin states (2S+1)
3815- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3816- 4 1 # Particle/Antiparticle distinction (0=own anti)
3817-Block QNUMBERS 2000002 # su4
3818- 1 2 # 3 times electric charge
3819- 2 1 # number of spin states (2S+1)
3820- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3821- 4 1 # Particle/Antiparticle distinction (0=own anti)
3822-Block QNUMBERS 2000004 # su5
3823- 1 2 # 3 times electric charge
3824- 2 1 # number of spin states (2S+1)
3825- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3826- 4 1 # Particle/Antiparticle distinction (0=own anti)
3827-Block QNUMBERS 2000006 # su6
3828- 1 2 # 3 times electric charge
3829- 2 1 # number of spin states (2S+1)
3830- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3831- 4 1 # Particle/Antiparticle distinction (0=own anti)
3832-Block QNUMBERS 1000001 # sd1
3833- 1 -1 # 3 times electric charge
3834- 2 1 # number of spin states (2S+1)
3835- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3836- 4 1 # Particle/Antiparticle distinction (0=own anti)
3837-Block QNUMBERS 1000003 # sd2
3838- 1 -1 # 3 times electric charge
3839- 2 1 # number of spin states (2S+1)
3840- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3841- 4 1 # Particle/Antiparticle distinction (0=own anti)
3842-Block QNUMBERS 1000005 # sd3
3843- 1 -1 # 3 times electric charge
3844- 2 1 # number of spin states (2S+1)
3845- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3846- 4 1 # Particle/Antiparticle distinction (0=own anti)
3847-Block QNUMBERS 2000001 # sd4
3848- 1 -1 # 3 times electric charge
3849- 2 1 # number of spin states (2S+1)
3850- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3851- 4 1 # Particle/Antiparticle distinction (0=own anti)
3852-Block QNUMBERS 2000003 # sd5
3853- 1 -1 # 3 times electric charge
3854- 2 1 # number of spin states (2S+1)
3855- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3856- 4 1 # Particle/Antiparticle distinction (0=own anti)
3857-Block QNUMBERS 2000005 # sd6
3858- 1 -1 # 3 times electric charge
3859- 2 1 # number of spin states (2S+1)
3860- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
3861- 4 1 # Particle/Antiparticle distinction (0=own anti)
3862-Block QNUMBERS 9000001 # ghG
3863- 1 0 # 3 times electric charge
3864- 2 -1 # number of spin states (2S+1)
3865- 3 8 # colour rep (1: singlet, 3: triplet, 8: octet)
3866- 4 1 # Particle/Antiparticle distinction (0=own anti)
3867-Block QNUMBERS 9000002 # ghA
3868- 1 0 # 3 times electric charge
3869- 2 -1 # number of spin states (2S+1)
3870- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3871- 4 1 # Particle/Antiparticle distinction (0=own anti)
3872-Block QNUMBERS 9000003 # ghZ
3873- 1 0 # 3 times electric charge
3874- 2 -1 # number of spin states (2S+1)
3875- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3876- 4 1 # Particle/Antiparticle distinction (0=own anti)
3877-Block QNUMBERS 9000004 # ghWp
3878- 1 3 # 3 times electric charge
3879- 2 -1 # number of spin states (2S+1)
3880- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3881- 4 1 # Particle/Antiparticle distinction (0=own anti)
3882-Block QNUMBERS 9000005 # ghWm
3883- 1 -3 # 3 times electric charge
3884- 2 -1 # number of spin states (2S+1)
3885- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
3886- 4 1 # Particle/Antiparticle distinction (0=own anti)
3887
3888=== removed file 'models/loop_MSSM/.restrict_parallel_test_gogo.dat'
3889--- models/loop_MSSM/.restrict_parallel_test_gogo.dat 2014-06-16 15:13:08 +0000
3890+++ models/loop_MSSM/.restrict_parallel_test_gogo.dat 1970-01-01 00:00:00 +0000
3891@@ -1,532 +0,0 @@
3892-######################################################################
3893-## PARAM_CARD AUTOMATICALY GENERATED BY THE UFO #####################
3894-######################################################################
3895-
3896-###################################
3897-## INFORMATION FOR SMINPUTS
3898-###################################
3899-Block SMINPUTS
3900- 1 1.3250698e+02 # aEWM1
3901- 3 1.180000e-01 # aS
3902-
3903-###################################
3904-## INFORMATION FOR MASS
3905-###################################
3906-Block MASS
3907- 5 4.750000e+00 # MB
3908- 6 1.750000e+02 # MT
3909- 15 0.000000e+00 # Mta
3910- 23 9.118760e+01 # MZ
3911- 24 7.982901e+01 # MW
3912- 25 1.108991e+02 # MH01
3913- 35 3.999601e+02 # MH02
3914- 36 3.995839e+02 # MA0
3915- 37 4.078790e+02 # MH
3916- 1000001 5.684411e+02 # Msd1
3917- 1000002 5.611190e+02 # Msu1
3918- 1000003 5.684411e+02 # Msd2
3919- 1000004 5.611190e+02 # Msu2
3920- 1000005 5.130652e+02 # Msd3
3921- 1000006 3.996685e+02 # Msu3
3922- 1000011 2.029157e+02 # Msl1
3923- 1000012 1.852583e+02 # Msn1
3924- 1000013 2.029157e+02 # Msl2
3925- 1000014 1.852583e+02 # Msn2
3926- 1000015 1.344909e+02 # Msl3
3927- 1000016 1.847085e+02 # Msn3
3928- 1000021 1.077137e+02 # Mgo
3929- 1000022 9.668807e+01 # Mneu1
3930- 1000023 1.810882e+02 # Mneu2
3931- 1000024 1.816965e+02 # Mch1
3932- 1000025 3.637560e+02 # Mneu3
3933- 1000035 3.817294e+02 # Mneu4
3934- 1000037 3.799393e+02 # Mch2
3935- 2000001 5.452285e+02 # Msd4
3936- 2000002 5.492593e+02 # Msu4
3937- 2000003 5.452285e+02 # Msd5
3938- 2000004 5.492593e+02 # Msu5
3939- 2000005 5.437267e+02 # Msd6
3940- 2000006 5.857858e+02 # Msu6
3941- 2000011 1.441028e+02 # Msl4
3942- 2000013 1.441028e+02 # Msl5
3943- 2000015 2.068678e+02 # Msl6
3944-## Not dependent paramater.
3945-## Those values should be edited following analytical the
3946-## analytical expression. Some generator could simply ignore
3947-## those values and use the analytical expression
3948- 22 0.000000 # a : 0.0
3949- 21 0.000000 # g : 0.0
3950- 12 0.000000 # ve : 0.0
3951- 14 0.000000 # vm : 0.0
3952- 16 0.000000 # vt : 0.0
3953- 11 0.000000 # e- : 0.0
3954- 13 0.000000 # mu- : 0.0
3955- 2 0.000000 # u : 0.0
3956- 4 0.000000 # c : 0.0
3957- 1 0.000000 # d : 0.0
3958- 3 0.000000 # s : 0.0
3959- 9000001 0.000000 # ghG : 0.0
3960- 9000002 0.000000 # ghA : 0.0
3961- 250 91.187600 # G0 : MZ
3962- 251 79.829013 # G+ : MW
3963- 9000003 91.187600 # ghZ : MZ
3964- 9000004 79.829013 # ghWp : MW
3965- 9000005 79.829013 # ghWm : MW
3966-
3967-###################################
3968-## INFORMATION FOR DECAY
3969-###################################
3970-DECAY 6 0.000000e+00
3971-DECAY 23 0.000000e+00
3972-DECAY 24 0.000000e+00
3973-DECAY 25 0.000000e+00
3974-DECAY 35 0.000000e+00
3975-DECAY 36 0.000000e+00
3976-DECAY 37 0.000000e+00
3977-DECAY 1000001 0.000000e+00
3978-DECAY 1000002 0.000000e+00
3979-DECAY 1000003 0.000000e+00
3980-DECAY 1000004 0.000000e+00
3981-DECAY 1000005 0.000000e+00
3982-DECAY 1000006 0.000000e+00
3983-DECAY 1000011 0.000000e+00
3984-DECAY 1000012 0.000000e+00
3985-DECAY 1000013 0.000000e+00
3986-DECAY 1000014 0.000000e+00
3987-DECAY 1000015 0.000000e+00
3988-DECAY 1000016 0.000000e+00
3989-DECAY 1000021 0.000000e+00
3990-DECAY 1000023 0.000000e+00
3991-DECAY 1000024 0.000000e+00
3992-DECAY 1000025 0.000000e+00
3993-DECAY 1000035 0.000000e+00
3994-DECAY 1000037 0.000000e+00
3995-DECAY 2000001 0.000000e+00
3996-DECAY 2000002 0.000000e+00
3997-DECAY 2000003 0.000000e+00
3998-DECAY 2000004 0.000000e+00
3999-DECAY 2000005 0.000000e+00
4000-DECAY 2000006 0.000000e+00
4001-DECAY 2000011 0.000000e+00
4002-DECAY 2000013 0.000000e+00
4003-DECAY 2000015 0.000000e+00
4004-## Not dependent paramater.
4005-## Those values should be edited following analytical the
4006-## analytical expression. Some generator could simply ignore
4007-## those values and use the analytical expression
4008-DECAY 22 0.000000 # a : 0.0
4009-DECAY 21 0.000000 # g : 0.0
4010-DECAY 1000022 0.000000 # n1 : 0.0
4011-DECAY 250 0.000000 # G0 : 0.0
4012-DECAY 251 0.000000 # G+ : 0.0
4013-DECAY 12 0.000000 # ve : 0.0
4014-DECAY 14 0.000000 # vm : 0.0
4015-DECAY 16 0.000000 # vt : 0.0
4016-DECAY 11 0.000000 # e- : 0.0
4017-DECAY 13 0.000000 # mu- : 0.0
4018-DECAY 15 0.000000 # tau- : 0.0
4019-DECAY 2 0.000000 # u : 0.0
4020-DECAY 4 0.000000 # c : 0.0
4021-DECAY 1 0.000000 # d : 0.0
4022-DECAY 3 0.000000 # s : 0.0
4023-DECAY 5 0.000000 # b : 0.0
4024-DECAY 9000001 0.000000 # ghG : 0.0
4025-DECAY 9000002 0.000000 # ghA : 0.0
4026-DECAY 9000003 0.000000 # ghZ : WZ
4027-DECAY 9000004 0.000000 # ghWp : WW
4028-DECAY 9000005 0.000000 # ghWm : WW
4029-
4030-###################################
4031-## INFORMATION FOR DSQMIX
4032-###################################
4033-Block DSQMIX
4034- 1 1 1.000000e+00 # RRd1x1
4035- 2 2 1.000000e+00 # RRd2x2
4036- 3 3 1.000000e+00 # RRd3x3
4037- 4 4 1.000000e+00 # RRd4x4
4038- 5 5 1.000000e+00 # RRd5x5
4039- 6 6 1.000000e+00 # RRd6x6
4040-
4041-###################################
4042-## INFORMATION FOR FRALPHA
4043-###################################
4044-Block FRALPHA
4045- 1 -1.138252e-01 # alp
4046-
4047-###################################
4048-## INFORMATION FOR HMIX
4049-###################################
4050-Block HMIX
4051- 1 3.576810e+02 # RMUH
4052- 2 9.748624e+00 # tb
4053-
4054-###################################
4055-## INFORMATION FOR LOOP
4056-###################################
4057-Block LOOP
4058- 1 1.000000000e+03 # MU_R
4059-
4060-###################################
4061-## INFORMATION FOR MSD2
4062-###################################
4063-Block MSD2
4064- 1 1 2.736847e+05 # RmD21x1
4065- 2 2 2.736847e+05 # RmD22x2
4066- 3 3 2.702620e+05 # RmD23x3
4067-
4068-###################################
4069-## INFORMATION FOR MSE2
4070-###################################
4071-Block MSE2
4072- 1 1 1.863063e+04 # RmE21x1
4073- 2 2 1.863063e+04 # RmE22x2
4074- 3 3 1.796764e+04 # RmE23x3
4075-
4076-###################################
4077-## INFORMATION FOR MSL2
4078-###################################
4079-Block MSL2
4080- 1 1 3.815567e+04 # RmL21x1
4081- 2 2 3.815567e+04 # RmL22x2
4082- 3 3 3.782868e+04 # RmL23x3
4083-
4084-###################################
4085-## INFORMATION FOR MSOFT
4086-###################################
4087-Block MSOFT
4088- 1 1.013965e+02 # RMx1
4089- 2 1.915042e+02 # RMx2
4090- 3 5.882630e+02 # RMx3
4091- 21 3.233749e+04 # mHd2
4092- 22 -1.288001e+05 # mHu2
4093-
4094-###################################
4095-## INFORMATION FOR MSQ2
4096-###################################
4097-Block MSQ2
4098- 1 1 2.998367e+05 # RmQ21x1
4099- 2 2 2.998367e+05 # RmQ22x2
4100- 3 3 2.487654e+05 # RmQ23x3
4101-
4102-###################################
4103-## INFORMATION FOR MSU2
4104-###################################
4105-Block MSU2
4106- 1 1 2.803821e+05 # RmU21x1
4107- 2 2 2.803821e+05 # RmU22x2
4108- 3 3 1.791371e+05 # RmU23x3
4109-
4110-###################################
4111-## INFORMATION FOR NMIX
4112-###################################
4113-Block NMIX
4114- 1 1 1.0000000e+00 # RNN1x1
4115- 1 2 0.0000000e+00 # RNN1x2
4116- 1 3 0.0000000e+00 # RNN1x3
4117- 1 4 0.0000000e+00 # RNN1x4
4118- 2 1 0.0000000e+00 # RNN2x1
4119- 2 2 1.0000000e+00 # RNN2x2
4120- 2 3 0.0000000e+00 # RNN2x3
4121- 2 4 0.0000000e+00 # RNN2x4
4122- 3 1 0.0000000e+00 # RNN3x1
4123- 3 2 0.0000000e+00 # RNN3x2
4124- 3 3 1.0000000e+00 # RNN3x3
4125- 3 4 0.0000000e+00 # RNN3x4
4126- 4 1 0.0000000e+00 # RNN4x1
4127- 4 2 0.0000000e+00 # RNN4x2
4128- 4 3 0.0000000e+00 # RNN4x3
4129- 4 4 1.0000000e+00 # RNN4x4
4130-
4131-###################################
4132-## INFORMATION FOR SELMIX
4133-###################################
4134-Block SELMIX
4135- 1 1 1.000000e+00 # RRl1x1
4136- 2 2 1.000000e+00 # RRl2x2
4137- 3 3 1.000000e+00 # RRl3x3
4138- 4 4 1.000000e+00 # RRl4x4
4139- 5 5 1.000000e+00 # RRl5x5
4140- 6 6 1.000000e+00 # RRl6x6
4141-
4142-###################################
4143-## INFORMATION FOR SNUMIX
4144-###################################
4145-Block SNUMIX
4146- 1 1 1.000000e+00 # RRn1x1
4147- 2 2 1.000000e+00 # RRn2x2
4148- 3 3 1.000000e+00 # RRn3x3
4149-
4150-###################################
4151-## INFORMATION FOR TD
4152-###################################
4153-Block TD
4154- 3 3 0.0000000e+00 # Rtd3x3
4155-
4156-###################################
4157-## INFORMATION FOR TE
4158-###################################
4159-Block TE
4160- 3 3 0.00000000e+00 # Rte3x3
4161-
4162-###################################
4163-## INFORMATION FOR TU
4164-###################################
4165-Block TU
4166- 3 3 -4.447525e+02 # Rtu3x3
4167-
4168-###################################
4169-## INFORMATION FOR UMIX
4170-###################################
4171-Block UMIX
4172- 1 1 1.0000000e+00 # RUU1x1
4173- 1 2 0.0000000e+00 # RUU1x2
4174- 2 1 0.0000000e+00 # RUU2x1
4175- 2 2 1.0000000e+00 # RUU2x2
4176-
4177-###################################
4178-## INFORMATION FOR UPMNS
4179-###################################
4180-Block UPMNS
4181- 1 1 1.000000e+00 # RMNS1x1
4182- 2 2 1.000000e+00 # RMNS2x2
4183- 3 3 1.000000e+00 # RMNS3x3
4184-
4185-###################################
4186-## INFORMATION FOR USQMIX
4187-###################################
4188-Block USQMIX
4189- 1 1 1.000000e+00 # RRu1x1
4190- 2 2 1.000000e+00 # RRu2x2
4191- 3 3 1.000000e+00 # RRu3x3
4192- 4 4 1.000000e+00 # RRu4x4
4193- 5 5 1.000000e+00 # RRu5x5
4194- 6 6 1.000000e+00 # RRu6x6
4195-
4196-###################################
4197-## INFORMATION FOR VCKM
4198-###################################
4199-Block VCKM
4200- 1 1 1.000000e+00 # RCKM1x1
4201- 2 2 1.000000e+00 # RCKM2x2
4202- 3 3 1.000000e+00 # RCKM3x3
4203-
4204-###################################
4205-## INFORMATION FOR VMIX
4206-###################################
4207-Block VMIX
4208- 1 1 1.0000000e+00 # RVV1x1
4209- 1 2 0.0000000e+00 # RVV1x2
4210- 2 1 0.0000000e+00 # RVV2x1
4211- 2 2 1.0000000e+00 # RVV2x2
4212-
4213-###################################
4214-## INFORMATION FOR YD
4215-###################################
4216-Block YD
4217- 3 3 0.00000000e+00 # Ryd3x3
4218-
4219-###################################
4220-## INFORMATION FOR YE
4221-###################################
4222-Block YE
4223- 3 3 0.00000000e+00 # Rye3x3
4224-
4225-###################################
4226-## INFORMATION FOR YU
4227-###################################
4228-Block YU
4229- 3 3 8.928445e-01 # Ryu3x3
4230-#===========================================================
4231-# QUANTUM NUMBERS OF NEW STATE(S) (NON SM PDG CODE)
4232-#===========================================================
4233-
4234-Block QNUMBERS 1000022 # n1
4235- 1 0 # 3 times electric charge
4236- 2 2 # number of spin states (2S+1)
4237- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4238- 4 0 # Particle/Antiparticle distinction (0=own anti)
4239-Block QNUMBERS 1000023 # n2
4240- 1 0 # 3 times electric charge
4241- 2 2 # number of spin states (2S+1)
4242- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4243- 4 0 # Particle/Antiparticle distinction (0=own anti)
4244-Block QNUMBERS 1000025 # n3
4245- 1 0 # 3 times electric charge
4246- 2 2 # number of spin states (2S+1)
4247- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4248- 4 0 # Particle/Antiparticle distinction (0=own anti)
4249-Block QNUMBERS 1000035 # n4
4250- 1 0 # 3 times electric charge
4251- 2 2 # number of spin states (2S+1)
4252- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4253- 4 0 # Particle/Antiparticle distinction (0=own anti)
4254-Block QNUMBERS 1000024 # x1+
4255- 1 3 # 3 times electric charge
4256- 2 2 # number of spin states (2S+1)
4257- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4258- 4 1 # Particle/Antiparticle distinction (0=own anti)
4259-Block QNUMBERS 1000037 # x2+
4260- 1 3 # 3 times electric charge
4261- 2 2 # number of spin states (2S+1)
4262- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4263- 4 1 # Particle/Antiparticle distinction (0=own anti)
4264-Block QNUMBERS 1000021 # go
4265- 1 0 # 3 times electric charge
4266- 2 2 # number of spin states (2S+1)
4267- 3 8 # colour rep (1: singlet, 3: triplet, 8: octet)
4268- 4 0 # Particle/Antiparticle distinction (0=own anti)
4269-Block QNUMBERS 35 # h02
4270- 1 0 # 3 times electric charge
4271- 2 1 # number of spin states (2S+1)
4272- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4273- 4 0 # Particle/Antiparticle distinction (0=own anti)
4274-Block QNUMBERS 36 # A0
4275- 1 0 # 3 times electric charge
4276- 2 1 # number of spin states (2S+1)
4277- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4278- 4 0 # Particle/Antiparticle distinction (0=own anti)
4279-Block QNUMBERS 37 # H+
4280- 1 3 # 3 times electric charge
4281- 2 1 # number of spin states (2S+1)
4282- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4283- 4 1 # Particle/Antiparticle distinction (0=own anti)
4284-Block QNUMBERS 250 # G0
4285- 1 0 # 3 times electric charge
4286- 2 1 # number of spin states (2S+1)
4287- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4288- 4 0 # Particle/Antiparticle distinction (0=own anti)
4289-Block QNUMBERS 251 # G+
4290- 1 3 # 3 times electric charge
4291- 2 1 # number of spin states (2S+1)
4292- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4293- 4 1 # Particle/Antiparticle distinction (0=own anti)
4294-Block QNUMBERS 1000012 # sv1
4295- 1 0 # 3 times electric charge
4296- 2 1 # number of spin states (2S+1)
4297- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4298- 4 1 # Particle/Antiparticle distinction (0=own anti)
4299-Block QNUMBERS 1000014 # sv2
4300- 1 0 # 3 times electric charge
4301- 2 1 # number of spin states (2S+1)
4302- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4303- 4 1 # Particle/Antiparticle distinction (0=own anti)
4304-Block QNUMBERS 1000016 # sv3
4305- 1 0 # 3 times electric charge
4306- 2 1 # number of spin states (2S+1)
4307- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4308- 4 1 # Particle/Antiparticle distinction (0=own anti)
4309-Block QNUMBERS 1000011 # sl1-
4310- 1 -3 # 3 times electric charge
4311- 2 1 # number of spin states (2S+1)
4312- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4313- 4 1 # Particle/Antiparticle distinction (0=own anti)
4314-Block QNUMBERS 1000013 # sl2-
4315- 1 -3 # 3 times electric charge
4316- 2 1 # number of spin states (2S+1)
4317- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4318- 4 1 # Particle/Antiparticle distinction (0=own anti)
4319-Block QNUMBERS 1000015 # sl3-
4320- 1 -3 # 3 times electric charge
4321- 2 1 # number of spin states (2S+1)
4322- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4323- 4 1 # Particle/Antiparticle distinction (0=own anti)
4324-Block QNUMBERS 2000011 # sl4-
4325- 1 -3 # 3 times electric charge
4326- 2 1 # number of spin states (2S+1)
4327- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4328- 4 1 # Particle/Antiparticle distinction (0=own anti)
4329-Block QNUMBERS 2000013 # sl5-
4330- 1 -3 # 3 times electric charge
4331- 2 1 # number of spin states (2S+1)
4332- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4333- 4 1 # Particle/Antiparticle distinction (0=own anti)
4334-Block QNUMBERS 2000015 # sl6-
4335- 1 -3 # 3 times electric charge
4336- 2 1 # number of spin states (2S+1)
4337- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4338- 4 1 # Particle/Antiparticle distinction (0=own anti)
4339-Block QNUMBERS 1000002 # su1
4340- 1 2 # 3 times electric charge
4341- 2 1 # number of spin states (2S+1)
4342- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4343- 4 1 # Particle/Antiparticle distinction (0=own anti)
4344-Block QNUMBERS 1000004 # su2
4345- 1 2 # 3 times electric charge
4346- 2 1 # number of spin states (2S+1)
4347- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4348- 4 1 # Particle/Antiparticle distinction (0=own anti)
4349-Block QNUMBERS 1000006 # su3
4350- 1 2 # 3 times electric charge
4351- 2 1 # number of spin states (2S+1)
4352- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4353- 4 1 # Particle/Antiparticle distinction (0=own anti)
4354-Block QNUMBERS 2000002 # su4
4355- 1 2 # 3 times electric charge
4356- 2 1 # number of spin states (2S+1)
4357- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4358- 4 1 # Particle/Antiparticle distinction (0=own anti)
4359-Block QNUMBERS 2000004 # su5
4360- 1 2 # 3 times electric charge
4361- 2 1 # number of spin states (2S+1)
4362- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4363- 4 1 # Particle/Antiparticle distinction (0=own anti)
4364-Block QNUMBERS 2000006 # su6
4365- 1 2 # 3 times electric charge
4366- 2 1 # number of spin states (2S+1)
4367- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4368- 4 1 # Particle/Antiparticle distinction (0=own anti)
4369-Block QNUMBERS 1000001 # sd1
4370- 1 -1 # 3 times electric charge
4371- 2 1 # number of spin states (2S+1)
4372- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4373- 4 1 # Particle/Antiparticle distinction (0=own anti)
4374-Block QNUMBERS 1000003 # sd2
4375- 1 -1 # 3 times electric charge
4376- 2 1 # number of spin states (2S+1)
4377- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4378- 4 1 # Particle/Antiparticle distinction (0=own anti)
4379-Block QNUMBERS 1000005 # sd3
4380- 1 -1 # 3 times electric charge
4381- 2 1 # number of spin states (2S+1)
4382- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4383- 4 1 # Particle/Antiparticle distinction (0=own anti)
4384-Block QNUMBERS 2000001 # sd4
4385- 1 -1 # 3 times electric charge
4386- 2 1 # number of spin states (2S+1)
4387- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4388- 4 1 # Particle/Antiparticle distinction (0=own anti)
4389-Block QNUMBERS 2000003 # sd5
4390- 1 -1 # 3 times electric charge
4391- 2 1 # number of spin states (2S+1)
4392- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4393- 4 1 # Particle/Antiparticle distinction (0=own anti)
4394-Block QNUMBERS 2000005 # sd6
4395- 1 -1 # 3 times electric charge
4396- 2 1 # number of spin states (2S+1)
4397- 3 3 # colour rep (1: singlet, 3: triplet, 8: octet)
4398- 4 1 # Particle/Antiparticle distinction (0=own anti)
4399-Block QNUMBERS 9000001 # ghG
4400- 1 0 # 3 times electric charge
4401- 2 -1 # number of spin states (2S+1)
4402- 3 8 # colour rep (1: singlet, 3: triplet, 8: octet)
4403- 4 1 # Particle/Antiparticle distinction (0=own anti)
4404-Block QNUMBERS 9000002 # ghA
4405- 1 0 # 3 times electric charge
4406- 2 -1 # number of spin states (2S+1)
4407- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4408- 4 1 # Particle/Antiparticle distinction (0=own anti)
4409-Block QNUMBERS 9000003 # ghZ
4410- 1 0 # 3 times electric charge
4411- 2 -1 # number of spin states (2S+1)
4412- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4413- 4 1 # Particle/Antiparticle distinction (0=own anti)
4414-Block QNUMBERS 9000004 # ghWp
4415- 1 3 # 3 times electric charge
4416- 2 -1 # number of spin states (2S+1)
4417- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4418- 4 1 # Particle/Antiparticle distinction (0=own anti)
4419-Block QNUMBERS 9000005 # ghWm
4420- 1 -3 # 3 times electric charge
4421- 2 -1 # number of spin states (2S+1)
4422- 3 1 # colour rep (1: singlet, 3: triplet, 8: octet)
4423- 4 1 # Particle/Antiparticle distinction (0=own anti)
4424
4425=== removed file 'models/loop_MSSM/CT_couplings.py'
4426--- models/loop_MSSM/CT_couplings.py 2015-10-01 16:00:08 +0000
4427+++ models/loop_MSSM/CT_couplings.py 1970-01-01 00:00:00 +0000
4428@@ -1,22863 +0,0 @@
4429-# This file was automatically created by FeynRules 2.1.46
4430-# Mathematica version: 8.0 for Mac OS X x86 (64-bit) (November 6, 2010)
4431-# Date: Wed 19 Mar 2014 10:12:37
4432-
4433-
4434-from object_library import all_couplings, Coupling
4435-
4436-from function_library import complexconjugate, re, im, csc, sec, acsc, asec, cot
4437-
4438-
4439-
4440-R2GC_1171_1 = Coupling(name = 'R2GC_1171_1',
4441- value = '(3*cw*ee*complex(0,1)*G**3)/(64.*cmath.pi**2*sw*(-1 + sw**2))',
4442- order = {'QCD':3,'QED':1})
4443-
4444-R2GC_1171_2 = Coupling(name = 'R2GC_1171_2',
4445- value = '(-3*cw*ee*complex(0,1)*G**3)/(64.*cmath.pi**2*sw*(-1 + sw**2))',
4446- order = {'QCD':3,'QED':1})
4447-
4448-R2GC_1176_3 = Coupling(name = 'R2GC_1176_3',
4449- value = '-(complex(0,1)*G**4)/(48.*cmath.pi**2)',
4450- order = {'QCD':4})
4451-
4452-R2GC_1176_4 = Coupling(name = 'R2GC_1176_4',
4453- value = '(complex(0,1)*G**4)/(48.*cmath.pi**2)',
4454- order = {'QCD':4})
4455-
4456-R2GC_1177_5 = Coupling(name = 'R2GC_1177_5',
4457- value = '-(complex(0,1)*G**2*MB**2)/(8.*cmath.pi**2)',
4458- order = {'QCD':2})
4459-
4460-R2GC_1177_6 = Coupling(name = 'R2GC_1177_6',
4461- value = '(-3*complex(0,1)*G**2*Mgo**2)/(8.*cmath.pi**2)',
4462- order = {'QCD':2})
4463-
4464-R2GC_1177_7 = Coupling(name = 'R2GC_1177_7',
4465- value = '-(complex(0,1)*G**2*MT**2)/(8.*cmath.pi**2)',
4466- order = {'QCD':2})
4467-
4468-R2GC_1186_8 = Coupling(name = 'R2GC_1186_8',
4469- value = '(ee**2*complex(0,1)*G**2)/(216.*cmath.pi**2)',
4470- order = {'QCD':2,'QED':2})
4471-
4472-R2GC_1186_9 = Coupling(name = 'R2GC_1186_9',
4473- value = '(ee**2*complex(0,1)*G**2)/(54.*cmath.pi**2)',
4474- order = {'QCD':2,'QED':2})
4475-
4476-R2GC_1187_10 = Coupling(name = 'R2GC_1187_10',
4477- value = '-(ee*complex(0,1)*G**3)/(144.*cmath.pi**2)',
4478- order = {'QCD':3,'QED':1})
4479-
4480-R2GC_1187_11 = Coupling(name = 'R2GC_1187_11',
4481- value = '(ee*complex(0,1)*G**3)/(72.*cmath.pi**2)',
4482- order = {'QCD':3,'QED':1})
4483-
4484-R2GC_1188_12 = Coupling(name = 'R2GC_1188_12',
4485- value = '(complex(0,1)*G**4)/(288.*cmath.pi**2)',
4486- order = {'QCD':4})
4487-
4488-R2GC_1188_13 = Coupling(name = 'R2GC_1188_13',
4489- value = '-(complex(0,1)*G**4)/(32.*cmath.pi**2)',
4490- order = {'QCD':4})
4491-
4492-R2GC_1188_14 = Coupling(name = 'R2GC_1188_14',
4493- value = '(complex(0,1)*G**4)/(32.*cmath.pi**2)',
4494- order = {'QCD':4})
4495-
4496-R2GC_1189_15 = Coupling(name = 'R2GC_1189_15',
4497- value = '(complex(0,1)*G**4)/(192.*cmath.pi**2)',
4498- order = {'QCD':4})
4499-
4500-R2GC_1189_16 = Coupling(name = 'R2GC_1189_16',
4501- value = '-(complex(0,1)*G**4)/(64.*cmath.pi**2)',
4502- order = {'QCD':4})
4503-
4504-R2GC_1189_17 = Coupling(name = 'R2GC_1189_17',
4505- value = '(complex(0,1)*G**4)/(64.*cmath.pi**2)',
4506- order = {'QCD':4})
4507-
4508-R2GC_1190_18 = Coupling(name = 'R2GC_1190_18',
4509- value = '-(complex(0,1)*G**4)/(192.*cmath.pi**2)',
4510- order = {'QCD':4})
4511-
4512-R2GC_1191_19 = Coupling(name = 'R2GC_1191_19',
4513- value = '-G**4/(192.*cmath.pi**2)',
4514- order = {'QCD':4})
4515-
4516-R2GC_1191_20 = Coupling(name = 'R2GC_1191_20',
4517- value = 'G**4/(64.*cmath.pi**2)',
4518- order = {'QCD':4})
4519-
4520-R2GC_1191_21 = Coupling(name = 'R2GC_1191_21',
4521- value = '-G**4/(64.*cmath.pi**2)',
4522- order = {'QCD':4})
4523-
4524-R2GC_1192_22 = Coupling(name = 'R2GC_1192_22',
4525- value = '-(cw**2*ee**2*complex(0,1)*G**2)/(144.*cmath.pi**2*(-1 + sw**2)**2) + (cw**2*ee**2*complex(0,1)*G**2)/(192.*cmath.pi**2*sw**2*(-1 + sw**2)**2) + (cw**2*ee**2*complex(0,1)*G**2*sw**2)/(216.*cmath.pi**2*(-1 + sw**2)**2)',
4526- order = {'QCD':2,'QED':2})
4527-
4528-R2GC_1192_23 = Coupling(name = 'R2GC_1192_23',
4529- value = '-(cw**2*ee**2*complex(0,1)*G**2)/(72.*cmath.pi**2*(-1 + sw**2)**2) + (cw**2*ee**2*complex(0,1)*G**2)/(192.*cmath.pi**2*sw**2*(-1 + sw**2)**2) + (cw**2*ee**2*complex(0,1)*G**2*sw**2)/(54.*cmath.pi**2*(-1 + sw**2)**2)',
4530- order = {'QCD':2,'QED':2})
4531-
4532-R2GC_1194_24 = Coupling(name = 'R2GC_1194_24',
4533- value = '-(cw*ee**2*complex(0,1)*G**2)/(288.*cmath.pi**2*sw*(-1 + sw**2)) + (cw*ee**2*complex(0,1)*G**2*sw)/(216.*cmath.pi**2*(-1 + sw**2))',
4534- order = {'QCD':2,'QED':2})
4535-
4536-R2GC_1194_25 = Coupling(name = 'R2GC_1194_25',
4537- value = '-(cw*ee**2*complex(0,1)*G**2)/(144.*cmath.pi**2*sw*(-1 + sw**2)) + (cw*ee**2*complex(0,1)*G**2*sw)/(54.*cmath.pi**2*(-1 + sw**2))',
4538- order = {'QCD':2,'QED':2})
4539-
4540-R2GC_1195_26 = Coupling(name = 'R2GC_1195_26',
4541- value = '(cw*ee*complex(0,1)*G**3)/(192.*cmath.pi**2*sw*(-1 + sw**2)) - (cw*ee*complex(0,1)*G**3*sw)/(144.*cmath.pi**2*(-1 + sw**2))',
4542- order = {'QCD':3,'QED':1})
4543-
4544-R2GC_1195_27 = Coupling(name = 'R2GC_1195_27',
4545- value = '-(cw*ee*complex(0,1)*G**3)/(192.*cmath.pi**2*sw*(-1 + sw**2)) + (cw*ee*complex(0,1)*G**3*sw)/(72.*cmath.pi**2*(-1 + sw**2))',
4546- order = {'QCD':3,'QED':1})
4547-
4548-R2GC_1196_28 = Coupling(name = 'R2GC_1196_28',
4549- value = '-(complex(0,1)*G**4)/(16.*cmath.pi**2)',
4550- order = {'QCD':4})
4551-
4552-R2GC_1196_29 = Coupling(name = 'R2GC_1196_29',
4553- value = '(complex(0,1)*G**4)/(4.*cmath.pi**2)',
4554- order = {'QCD':4})
4555-
4556-R2GC_1196_30 = Coupling(name = 'R2GC_1196_30',
4557- value = '(-3*complex(0,1)*G**4)/(16.*cmath.pi**2)',
4558- order = {'QCD':4})
4559-
4560-R2GC_1197_31 = Coupling(name = 'R2GC_1197_31',
4561- value = '(-3*complex(0,1)*G**4)/(64.*cmath.pi**2)',
4562- order = {'QCD':4})
4563-
4564-R2GC_1197_32 = Coupling(name = 'R2GC_1197_32',
4565- value = '(-23*complex(0,1)*G**4)/(64.*cmath.pi**2)',
4566- order = {'QCD':4})
4567-
4568-R2GC_1197_33 = Coupling(name = 'R2GC_1197_33',
4569- value = '(-9*complex(0,1)*G**4)/(64.*cmath.pi**2)',
4570- order = {'QCD':4})
4571-
4572-R2GC_1198_34 = Coupling(name = 'R2GC_1198_34',
4573- value = '(ee*complex(0,1)*G**2)/(18.*cmath.pi**2)',
4574- order = {'QCD':2,'QED':1})
4575-
4576-R2GC_1199_35 = Coupling(name = 'R2GC_1199_35',
4577- value = '-(complex(0,1)*G**3)/(6.*cmath.pi**2)',
4578- order = {'QCD':3})
4579-
4580-R2GC_1200_36 = Coupling(name = 'R2GC_1200_36',
4581- value = '(complex(0,1)*G**2)/(12.*cmath.pi**2)',
4582- order = {'QCD':2})
4583-
4584-R2GC_1201_37 = Coupling(name = 'R2GC_1201_37',
4585- value = '-(ee*complex(0,1)*G**2)/(9.*cmath.pi**2)',
4586- order = {'QCD':2,'QED':1})
4587-
4588-R2GC_1206_38 = Coupling(name = 'R2GC_1206_38',
4589- value = '-(complex(0,1)*G**4*Rd1x1*complexconjugate(Rd1x1))/(32.*cmath.pi**2)',
4590- order = {'QCD':4})
4591-
4592-R2GC_1206_39 = Coupling(name = 'R2GC_1206_39',
4593- value = '-(complex(0,1)*G**4*Rd1x1*complexconjugate(Rd1x1))/(16.*cmath.pi**2)',
4594- order = {'QCD':4})
4595-
4596-R2GC_1206_40 = Coupling(name = 'R2GC_1206_40',
4597- value = '(5*complex(0,1)*G**4*Rd1x1**2*complexconjugate(Rd1x1)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd1x1**3*complexconjugate(Rd1x1)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd1x1**4*complexconjugate(Rd1x1)**4)/(96.*cmath.pi**2)',
4598- order = {'QCD':4})
4599-
4600-R2GC_1207_41 = Coupling(name = 'R2GC_1207_41',
4601- value = '-(complex(0,1)*G**4*Rd2x2*complexconjugate(Rd2x2))/(32.*cmath.pi**2)',
4602- order = {'QCD':4})
4603-
4604-R2GC_1207_42 = Coupling(name = 'R2GC_1207_42',
4605- value = '(5*complex(0,1)*G**4*Rd2x2**2*complexconjugate(Rd2x2)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd2x2**3*complexconjugate(Rd2x2)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd2x2**4*complexconjugate(Rd2x2)**4)/(96.*cmath.pi**2)',
4606- order = {'QCD':4})
4607-
4608-R2GC_1207_43 = Coupling(name = 'R2GC_1207_43',
4609- value = '-(complex(0,1)*G**4*Rd2x2*complexconjugate(Rd2x2))/(16.*cmath.pi**2)',
4610- order = {'QCD':4})
4611-
4612-R2GC_1208_44 = Coupling(name = 'R2GC_1208_44',
4613- value = '-(complex(0,1)*G**4*Rd3x3*complexconjugate(Rd3x3))/(32.*cmath.pi**2)',
4614- order = {'QCD':4})
4615-
4616-R2GC_1208_45 = Coupling(name = 'R2GC_1208_45',
4617- value = '-(complex(0,1)*G**4*Rd3x3*complexconjugate(Rd3x3))/(16.*cmath.pi**2)',
4618- order = {'QCD':4})
4619-
4620-R2GC_1208_46 = Coupling(name = 'R2GC_1208_46',
4621- value = '(5*complex(0,1)*G**4*Rd3x3**2*complexconjugate(Rd3x3)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd3x3**3*complexconjugate(Rd3x3)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd3x3**4*complexconjugate(Rd3x3)**4)/(96.*cmath.pi**2)',
4622- order = {'QCD':4})
4623-
4624-R2GC_1209_47 = Coupling(name = 'R2GC_1209_47',
4625- value = '-(complex(0,1)*G**4*Rd4x4*complexconjugate(Rd4x4))/(32.*cmath.pi**2)',
4626- order = {'QCD':4})
4627-
4628-R2GC_1209_48 = Coupling(name = 'R2GC_1209_48',
4629- value = '-(complex(0,1)*G**4*Rd4x4*complexconjugate(Rd4x4))/(16.*cmath.pi**2)',
4630- order = {'QCD':4})
4631-
4632-R2GC_1209_49 = Coupling(name = 'R2GC_1209_49',
4633- value = '(5*complex(0,1)*G**4*Rd4x4**2*complexconjugate(Rd4x4)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd4x4**3*complexconjugate(Rd4x4)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd4x4**4*complexconjugate(Rd4x4)**4)/(96.*cmath.pi**2)',
4634- order = {'QCD':4})
4635-
4636-R2GC_1210_50 = Coupling(name = 'R2GC_1210_50',
4637- value = '-(complex(0,1)*G**4*Rd5x5*complexconjugate(Rd5x5))/(32.*cmath.pi**2)',
4638- order = {'QCD':4})
4639-
4640-R2GC_1210_51 = Coupling(name = 'R2GC_1210_51',
4641- value = '(5*complex(0,1)*G**4*Rd5x5**2*complexconjugate(Rd5x5)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd5x5**3*complexconjugate(Rd5x5)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd5x5**4*complexconjugate(Rd5x5)**4)/(96.*cmath.pi**2)',
4642- order = {'QCD':4})
4643-
4644-R2GC_1210_52 = Coupling(name = 'R2GC_1210_52',
4645- value = '-(complex(0,1)*G**4*Rd5x5*complexconjugate(Rd5x5))/(16.*cmath.pi**2)',
4646- order = {'QCD':4})
4647-
4648-R2GC_1211_53 = Coupling(name = 'R2GC_1211_53',
4649- value = '-(complex(0,1)*G**4*Rd6x6*complexconjugate(Rd6x6))/(32.*cmath.pi**2)',
4650- order = {'QCD':4})
4651-
4652-R2GC_1211_54 = Coupling(name = 'R2GC_1211_54',
4653- value = '-(complex(0,1)*G**4*Rd6x6*complexconjugate(Rd6x6))/(16.*cmath.pi**2)',
4654- order = {'QCD':4})
4655-
4656-R2GC_1211_55 = Coupling(name = 'R2GC_1211_55',
4657- value = '(5*complex(0,1)*G**4*Rd6x6**2*complexconjugate(Rd6x6)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Rd6x6**3*complexconjugate(Rd6x6)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Rd6x6**4*complexconjugate(Rd6x6)**4)/(96.*cmath.pi**2)',
4658- order = {'QCD':4})
4659-
4660-R2GC_1212_56 = Coupling(name = 'R2GC_1212_56',
4661- value = '-(complex(0,1)*G**4*Ru1x1*complexconjugate(Ru1x1))/(32.*cmath.pi**2)',
4662- order = {'QCD':4})
4663-
4664-R2GC_1212_57 = Coupling(name = 'R2GC_1212_57',
4665- value = '(5*complex(0,1)*G**4*Ru1x1**2*complexconjugate(Ru1x1)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru1x1**3*complexconjugate(Ru1x1)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru1x1**4*complexconjugate(Ru1x1)**4)/(96.*cmath.pi**2)',
4666- order = {'QCD':4})
4667-
4668-R2GC_1212_58 = Coupling(name = 'R2GC_1212_58',
4669- value = '-(complex(0,1)*G**4*Ru1x1*complexconjugate(Ru1x1))/(16.*cmath.pi**2)',
4670- order = {'QCD':4})
4671-
4672-R2GC_1213_59 = Coupling(name = 'R2GC_1213_59',
4673- value = '-(complex(0,1)*G**4*Ru2x2*complexconjugate(Ru2x2))/(32.*cmath.pi**2)',
4674- order = {'QCD':4})
4675-
4676-R2GC_1213_60 = Coupling(name = 'R2GC_1213_60',
4677- value = '-(complex(0,1)*G**4*Ru2x2*complexconjugate(Ru2x2))/(16.*cmath.pi**2)',
4678- order = {'QCD':4})
4679-
4680-R2GC_1213_61 = Coupling(name = 'R2GC_1213_61',
4681- value = '(5*complex(0,1)*G**4*Ru2x2**2*complexconjugate(Ru2x2)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru2x2**3*complexconjugate(Ru2x2)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru2x2**4*complexconjugate(Ru2x2)**4)/(96.*cmath.pi**2)',
4682- order = {'QCD':4})
4683-
4684-R2GC_1214_62 = Coupling(name = 'R2GC_1214_62',
4685- value = '-(complex(0,1)*G**4*Ru3x3*complexconjugate(Ru3x3))/(32.*cmath.pi**2)',
4686- order = {'QCD':4})
4687-
4688-R2GC_1214_63 = Coupling(name = 'R2GC_1214_63',
4689- value = '(5*complex(0,1)*G**4*Ru3x3**2*complexconjugate(Ru3x3)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru3x3**3*complexconjugate(Ru3x3)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru3x3**4*complexconjugate(Ru3x3)**4)/(96.*cmath.pi**2)',
4690- order = {'QCD':4})
4691-
4692-R2GC_1214_64 = Coupling(name = 'R2GC_1214_64',
4693- value = '-(complex(0,1)*G**4*Ru3x3*complexconjugate(Ru3x3))/(16.*cmath.pi**2)',
4694- order = {'QCD':4})
4695-
4696-R2GC_1215_65 = Coupling(name = 'R2GC_1215_65',
4697- value = '-(complex(0,1)*G**4*Ru4x4*complexconjugate(Ru4x4))/(32.*cmath.pi**2)',
4698- order = {'QCD':4})
4699-
4700-R2GC_1215_66 = Coupling(name = 'R2GC_1215_66',
4701- value = '(5*complex(0,1)*G**4*Ru4x4**2*complexconjugate(Ru4x4)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru4x4**3*complexconjugate(Ru4x4)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru4x4**4*complexconjugate(Ru4x4)**4)/(96.*cmath.pi**2)',
4702- order = {'QCD':4})
4703-
4704-R2GC_1215_67 = Coupling(name = 'R2GC_1215_67',
4705- value = '-(complex(0,1)*G**4*Ru4x4*complexconjugate(Ru4x4))/(16.*cmath.pi**2)',
4706- order = {'QCD':4})
4707-
4708-R2GC_1216_68 = Coupling(name = 'R2GC_1216_68',
4709- value = '-(complex(0,1)*G**4*Ru5x5*complexconjugate(Ru5x5))/(32.*cmath.pi**2)',
4710- order = {'QCD':4})
4711-
4712-R2GC_1216_69 = Coupling(name = 'R2GC_1216_69',
4713- value = '-(complex(0,1)*G**4*Ru5x5*complexconjugate(Ru5x5))/(16.*cmath.pi**2)',
4714- order = {'QCD':4})
4715-
4716-R2GC_1216_70 = Coupling(name = 'R2GC_1216_70',
4717- value = '(5*complex(0,1)*G**4*Ru5x5**2*complexconjugate(Ru5x5)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru5x5**3*complexconjugate(Ru5x5)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru5x5**4*complexconjugate(Ru5x5)**4)/(96.*cmath.pi**2)',
4718- order = {'QCD':4})
4719-
4720-R2GC_1217_71 = Coupling(name = 'R2GC_1217_71',
4721- value = '-(complex(0,1)*G**4*Ru6x6*complexconjugate(Ru6x6))/(32.*cmath.pi**2)',
4722- order = {'QCD':4})
4723-
4724-R2GC_1217_72 = Coupling(name = 'R2GC_1217_72',
4725- value = '(5*complex(0,1)*G**4*Ru6x6**2*complexconjugate(Ru6x6)**2)/(128.*cmath.pi**2) - (complex(0,1)*G**4*Ru6x6**3*complexconjugate(Ru6x6)**3)/(64.*cmath.pi**2) + (complex(0,1)*G**4*Ru6x6**4*complexconjugate(Ru6x6)**4)/(96.*cmath.pi**2)',
4726- order = {'QCD':4})
4727-
4728-R2GC_1217_73 = Coupling(name = 'R2GC_1217_73',
4729- value = '-(complex(0,1)*G**4*Ru6x6*complexconjugate(Ru6x6))/(16.*cmath.pi**2)',
4730- order = {'QCD':4})
4731-
4732-R2GC_1221_74 = Coupling(name = 'R2GC_1221_74',
4733- value = '(CKM3x3*ee**2*complex(0,1)*G**2*complexconjugate(CKM3x3))/(96.*cmath.pi**2*sw**2)',
4734- order = {'QCD':2,'QED':2})
4735-
4736-R2GC_1221_75 = Coupling(name = 'R2GC_1221_75',
4737- value = '(CKM2x2*ee**2*complex(0,1)*G**2*complexconjugate(CKM2x2))/(96.*cmath.pi**2*sw**2)',
4738- order = {'QCD':2,'QED':2})
4739-
4740-R2GC_1221_76 = Coupling(name = 'R2GC_1221_76',
4741- value = '(CKM1x1*ee**2*complex(0,1)*G**2*complexconjugate(CKM1x1))/(96.*cmath.pi**2*sw**2)',
4742- order = {'QCD':2,'QED':2})
4743-
4744-R2GC_1228_77 = Coupling(name = 'R2GC_1228_77',
4745- value = '-(G**3*Ru4x4*complexconjugate(Ru4x4))/(64.*cmath.pi**2)',
4746- order = {'QCD':3})
4747-
4748-R2GC_1229_78 = Coupling(name = 'R2GC_1229_78',
4749- value = '(complex(0,1)*G**3*Ru4x4*complexconjugate(Ru4x4))/(64.*cmath.pi**2)',
4750- order = {'QCD':3})
4751-
4752-R2GC_1231_79 = Coupling(name = 'R2GC_1231_79',
4753- value = '(ee*complex(0,1)*G**2*Rd3x3*complexconjugate(Rd3x3))/(96.*cmath.pi**2)',
4754- order = {'QCD':2,'QED':1})
4755-
4756-R2GC_1231_80 = Coupling(name = 'R2GC_1231_80',
4757- value = '-(ee*complex(0,1)*G**2*Rd6x6*complexconjugate(Rd6x6))/(96.*cmath.pi**2)',
4758- order = {'QCD':2,'QED':1})
4759-
4760-R2GC_1231_81 = Coupling(name = 'R2GC_1231_81',
4761- value = '-(ee*complex(0,1)*G**2*Ru2x2*complexconjugate(Ru2x2))/(48.*cmath.pi**2)',
4762- order = {'QCD':2,'QED':1})
4763-
4764-R2GC_1231_82 = Coupling(name = 'R2GC_1231_82',
4765- value = '(ee*complex(0,1)*G**2*Ru5x5*complexconjugate(Ru5x5))/(48.*cmath.pi**2)',
4766- order = {'QCD':2,'QED':1})
4767-
4768-R2GC_1231_83 = Coupling(name = 'R2GC_1231_83',
4769- value = '(ee*complex(0,1)*G**2*Rd1x1*complexconjugate(Rd1x1))/(96.*cmath.pi**2)',
4770- order = {'QCD':2,'QED':1})
4771-
4772-R2GC_1231_84 = Coupling(name = 'R2GC_1231_84',
4773- value = '-(ee*complex(0,1)*G**2*Rd4x4*complexconjugate(Rd4x4))/(96.*cmath.pi**2)',
4774- order = {'QCD':2,'QED':1})
4775-
4776-R2GC_1231_85 = Coupling(name = 'R2GC_1231_85',
4777- value = '(ee*complex(0,1)*G**2*Rd2x2*complexconjugate(Rd2x2))/(96.*cmath.pi**2)',
4778- order = {'QCD':2,'QED':1})
4779-
4780-R2GC_1231_86 = Coupling(name = 'R2GC_1231_86',
4781- value = '-(ee*complex(0,1)*G**2*Rd5x5*complexconjugate(Rd5x5))/(96.*cmath.pi**2)',
4782- order = {'QCD':2,'QED':1})
4783-
4784-R2GC_1231_87 = Coupling(name = 'R2GC_1231_87',
4785- value = '-(ee*complex(0,1)*G**2*Ru1x1*complexconjugate(Ru1x1))/(48.*cmath.pi**2)',
4786- order = {'QCD':2,'QED':1})
4787-
4788-R2GC_1231_88 = Coupling(name = 'R2GC_1231_88',
4789- value = '-(ee*complex(0,1)*G**2*Ru3x3*complexconjugate(Ru3x3))/(48.*cmath.pi**2)',
4790- order = {'QCD':2,'QED':1})
4791-
4792-R2GC_1231_89 = Coupling(name = 'R2GC_1231_89',
4793- value = '(ee*complex(0,1)*G**2*Ru4x4*complexconjugate(Ru4x4))/(48.*cmath.pi**2)',
4794- order = {'QCD':2,'QED':1})
4795-
4796-R2GC_1231_90 = Coupling(name = 'R2GC_1231_90',
4797- value = '(ee*complex(0,1)*G**2*Ru6x6*complexconjugate(Ru6x6))/(48.*cmath.pi**2)',
4798- order = {'QCD':2,'QED':1})
4799-
4800-R2GC_1232_91 = Coupling(name = 'R2GC_1232_91',
4801- value = '-(G**3*Rd3x3*complexconjugate(Rd3x3))/(64.*cmath.pi**2)',
4802- order = {'QCD':3})
4803-
4804-R2GC_1232_92 = Coupling(name = 'R2GC_1232_92',
4805- value = '-(G**3*Rd6x6*complexconjugate(Rd6x6))/(64.*cmath.pi**2)',
4806- order = {'QCD':3})
4807-
4808-R2GC_1232_93 = Coupling(name = 'R2GC_1232_93',
4809- value = '-(G**3*Ru2x2*complexconjugate(Ru2x2))/(64.*cmath.pi**2)',
4810- order = {'QCD':3})
4811-
4812-R2GC_1232_94 = Coupling(name = 'R2GC_1232_94',
4813- value = '-(G**3*Ru5x5*complexconjugate(Ru5x5))/(64.*cmath.pi**2)',
4814- order = {'QCD':3})
4815-
4816-R2GC_1232_95 = Coupling(name = 'R2GC_1232_95',
4817- value = '-(G**3*Rd1x1*complexconjugate(Rd1x1))/(64.*cmath.pi**2)',
4818- order = {'QCD':3})
4819-
4820-R2GC_1232_96 = Coupling(name = 'R2GC_1232_96',
4821- value = '-(G**3*Rd4x4*complexconjugate(Rd4x4))/(64.*cmath.pi**2)',
4822- order = {'QCD':3})
4823-
4824-R2GC_1232_97 = Coupling(name = 'R2GC_1232_97',
4825- value = '-(G**3*Rd2x2*complexconjugate(Rd2x2))/(64.*cmath.pi**2)',
4826- order = {'QCD':3})
4827-
4828-R2GC_1232_98 = Coupling(name = 'R2GC_1232_98',
4829- value = '-(G**3*Rd5x5*complexconjugate(Rd5x5))/(64.*cmath.pi**2)',
4830- order = {'QCD':3})
4831-
4832-R2GC_1232_99 = Coupling(name = 'R2GC_1232_99',
4833- value = '-(G**3*Ru1x1*complexconjugate(Ru1x1))/(64.*cmath.pi**2)',
4834- order = {'QCD':3})
4835-
4836-R2GC_1232_100 = Coupling(name = 'R2GC_1232_100',
4837- value = '-(G**3*Ru3x3*complexconjugate(Ru3x3))/(64.*cmath.pi**2)',
4838- order = {'QCD':3})
4839-
4840-R2GC_1232_101 = Coupling(name = 'R2GC_1232_101',
4841- value = '-(G**3*Ru6x6*complexconjugate(Ru6x6))/(64.*cmath.pi**2)',
4842- order = {'QCD':3})
4843-
4844-R2GC_1233_102 = Coupling(name = 'R2GC_1233_102',
4845- value = '-(G**3*Ru4x4*complexconjugate(Ru4x4))/(32.*cmath.pi**2)',
4846- order = {'QCD':3})
4847-
4848-R2GC_1234_103 = Coupling(name = 'R2GC_1234_103',
4849- value = '-(complex(0,1)*G**3*Rd3x3*complexconjugate(Rd3x3))/(64.*cmath.pi**2)',
4850- order = {'QCD':3})
4851-
4852-R2GC_1234_104 = Coupling(name = 'R2GC_1234_104',
4853- value = '(complex(0,1)*G**3*Rd6x6*complexconjugate(Rd6x6))/(64.*cmath.pi**2)',
4854- order = {'QCD':3})
4855-
4856-R2GC_1234_105 = Coupling(name = 'R2GC_1234_105',
4857- value = '-(complex(0,1)*G**3*Ru2x2*complexconjugate(Ru2x2))/(64.*cmath.pi**2)',
4858- order = {'QCD':3})
4859-
4860-R2GC_1234_106 = Coupling(name = 'R2GC_1234_106',
4861- value = '(complex(0,1)*G**3*Ru5x5*complexconjugate(Ru5x5))/(64.*cmath.pi**2)',
4862- order = {'QCD':3})
4863-
4864-R2GC_1234_107 = Coupling(name = 'R2GC_1234_107',
4865- value = '-(complex(0,1)*G**3*Rd1x1*complexconjugate(Rd1x1))/(64.*cmath.pi**2)',
4866- order = {'QCD':3})
4867-
4868-R2GC_1234_108 = Coupling(name = 'R2GC_1234_108',
4869- value = '(complex(0,1)*G**3*Rd4x4*complexconjugate(Rd4x4))/(64.*cmath.pi**2)',
4870- order = {'QCD':3})
4871-
4872-R2GC_1234_109 = Coupling(name = 'R2GC_1234_109',
4873- value = '-(complex(0,1)*G**3*Rd2x2*complexconjugate(Rd2x2))/(64.*cmath.pi**2)',
4874- order = {'QCD':3})
4875-
4876-R2GC_1234_110 = Coupling(name = 'R2GC_1234_110',
4877- value = '(complex(0,1)*G**3*Rd5x5*complexconjugate(Rd5x5))/(64.*cmath.pi**2)',
4878- order = {'QCD':3})
4879-
4880-R2GC_1234_111 = Coupling(name = 'R2GC_1234_111',
4881- value = '-(complex(0,1)*G**3*Ru1x1*complexconjugate(Ru1x1))/(64.*cmath.pi**2)',
4882- order = {'QCD':3})
4883-
4884-R2GC_1234_112 = Coupling(name = 'R2GC_1234_112',
4885- value = '-(complex(0,1)*G**3*Ru3x3*complexconjugate(Ru3x3))/(64.*cmath.pi**2)',
4886- order = {'QCD':3})
4887-
4888-R2GC_1234_113 = Coupling(name = 'R2GC_1234_113',
4889- value = '(complex(0,1)*G**3*Ru6x6*complexconjugate(Ru6x6))/(64.*cmath.pi**2)',
4890- order = {'QCD':3})
4891-
4892-R2GC_1235_114 = Coupling(name = 'R2GC_1235_114',
4893- value = '(complex(0,1)*G**3*Rd3x3*complexconjugate(Rd3x3))/(64.*cmath.pi**2)',
4894- order = {'QCD':3})
4895-
4896-R2GC_1235_115 = Coupling(name = 'R2GC_1235_115',
4897- value = '-(complex(0,1)*G**3*Rd6x6*complexconjugate(Rd6x6))/(64.*cmath.pi**2)',
4898- order = {'QCD':3})
4899-
4900-R2GC_1235_116 = Coupling(name = 'R2GC_1235_116',
4901- value = '(complex(0,1)*G**3*Ru2x2*complexconjugate(Ru2x2))/(64.*cmath.pi**2)',
4902- order = {'QCD':3})
4903-
4904-R2GC_1235_117 = Coupling(name = 'R2GC_1235_117',
4905- value = '-(complex(0,1)*G**3*Ru5x5*complexconjugate(Ru5x5))/(64.*cmath.pi**2)',
4906- order = {'QCD':3})
4907-
4908-R2GC_1235_118 = Coupling(name = 'R2GC_1235_118',
4909- value = '(complex(0,1)*G**3*Rd1x1*complexconjugate(Rd1x1))/(64.*cmath.pi**2)',
4910- order = {'QCD':3})
4911-
4912-R2GC_1235_119 = Coupling(name = 'R2GC_1235_119',
4913- value = '-(complex(0,1)*G**3*Rd4x4*complexconjugate(Rd4x4))/(64.*cmath.pi**2)',
4914- order = {'QCD':3})
4915-
4916-R2GC_1235_120 = Coupling(name = 'R2GC_1235_120',
4917- value = '(complex(0,1)*G**3*Rd2x2*complexconjugate(Rd2x2))/(64.*cmath.pi**2)',
4918- order = {'QCD':3})
4919-
4920-R2GC_1235_121 = Coupling(name = 'R2GC_1235_121',
4921- value = '-(complex(0,1)*G**3*Rd5x5*complexconjugate(Rd5x5))/(64.*cmath.pi**2)',
4922- order = {'QCD':3})
4923-
4924-R2GC_1235_122 = Coupling(name = 'R2GC_1235_122',
4925- value = '(complex(0,1)*G**3*Ru1x1*complexconjugate(Ru1x1))/(64.*cmath.pi**2)',
4926- order = {'QCD':3})
4927-
4928-R2GC_1235_123 = Coupling(name = 'R2GC_1235_123',
4929- value = '(complex(0,1)*G**3*Ru3x3*complexconjugate(Ru3x3))/(64.*cmath.pi**2)',
4930- order = {'QCD':3})
4931-
4932-R2GC_1235_124 = Coupling(name = 'R2GC_1235_124',
4933- value = '-(complex(0,1)*G**3*Ru6x6*complexconjugate(Ru6x6))/(64.*cmath.pi**2)',
4934- order = {'QCD':3})
4935-
4936-R2GC_1236_125 = Coupling(name = 'R2GC_1236_125',
4937- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd3x3*complexconjugate(Rd3x3))/(192.*cmath.pi**2*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Rd3x3*complexconjugate(Rd3x3))/(64.*cmath.pi**2*sw*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Rd3x3*sw*complexconjugate(Rd3x3))/(64.*cmath.pi**2*(-1 + sw**2))',
4938- order = {'QCD':2,'QED':1})
4939-
4940-R2GC_1236_126 = Coupling(name = 'R2GC_1236_126',
4941- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd6x6*complexconjugate(Rd6x6))/(96.*cmath.pi**2*(-1 + sw**2))',
4942- order = {'QCD':2,'QED':1})
4943-
4944-R2GC_1236_127 = Coupling(name = 'R2GC_1236_127',
4945- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Ru2x2*complexconjugate(Ru2x2))/(192.*cmath.pi**2*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Ru2x2*complexconjugate(Ru2x2))/(64.*cmath.pi**2*sw*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Ru2x2*sw*complexconjugate(Ru2x2))/(64.*cmath.pi**2*(-1 + sw**2))',
4946- order = {'QCD':2,'QED':1})
4947-
4948-R2GC_1236_128 = Coupling(name = 'R2GC_1236_128',
4949- value = '(cw*ee*complex(0,1)*G**2*NN1x1*Ru5x5*complexconjugate(Ru5x5))/(48.*cmath.pi**2*(-1 + sw**2))',
4950- order = {'QCD':2,'QED':1})
4951-
4952-R2GC_1236_129 = Coupling(name = 'R2GC_1236_129',
4953- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd1x1*complexconjugate(Rd1x1))/(192.*cmath.pi**2*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Rd1x1*complexconjugate(Rd1x1))/(64.*cmath.pi**2*sw*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Rd1x1*sw*complexconjugate(Rd1x1))/(64.*cmath.pi**2*(-1 + sw**2))',
4954- order = {'QCD':2,'QED':1})
4955-
4956-R2GC_1236_130 = Coupling(name = 'R2GC_1236_130',
4957- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd4x4*complexconjugate(Rd4x4))/(96.*cmath.pi**2*(-1 + sw**2))',
4958- order = {'QCD':2,'QED':1})
4959-
4960-R2GC_1236_131 = Coupling(name = 'R2GC_1236_131',
4961- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd2x2*complexconjugate(Rd2x2))/(192.*cmath.pi**2*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Rd2x2*complexconjugate(Rd2x2))/(64.*cmath.pi**2*sw*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Rd2x2*sw*complexconjugate(Rd2x2))/(64.*cmath.pi**2*(-1 + sw**2))',
4962- order = {'QCD':2,'QED':1})
4963-
4964-R2GC_1236_132 = Coupling(name = 'R2GC_1236_132',
4965- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Rd5x5*complexconjugate(Rd5x5))/(96.*cmath.pi**2*(-1 + sw**2))',
4966- order = {'QCD':2,'QED':1})
4967-
4968-R2GC_1236_133 = Coupling(name = 'R2GC_1236_133',
4969- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Ru1x1*complexconjugate(Ru1x1))/(192.*cmath.pi**2*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Ru1x1*complexconjugate(Ru1x1))/(64.*cmath.pi**2*sw*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Ru1x1*sw*complexconjugate(Ru1x1))/(64.*cmath.pi**2*(-1 + sw**2))',
4970- order = {'QCD':2,'QED':1})
4971-
4972-R2GC_1236_134 = Coupling(name = 'R2GC_1236_134',
4973- value = '-(cw*ee*complex(0,1)*G**2*NN1x1*Ru3x3*complexconjugate(Ru3x3))/(192.*cmath.pi**2*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN1x2*Ru3x3*complexconjugate(Ru3x3))/(64.*cmath.pi**2*sw*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN1x2*Ru3x3*sw*complexconjugate(Ru3x3))/(64.*cmath.pi**2*(-1 + sw**2))',
4974- order = {'QCD':2,'QED':1})
4975-
4976-R2GC_1236_135 = Coupling(name = 'R2GC_1236_135',
4977- value = '(cw*ee*complex(0,1)*G**2*NN1x1*Ru4x4*complexconjugate(Ru4x4))/(48.*cmath.pi**2*(-1 + sw**2))',
4978- order = {'QCD':2,'QED':1})
4979-
4980-R2GC_1236_136 = Coupling(name = 'R2GC_1236_136',
4981- value = '(cw*ee*complex(0,1)*G**2*NN1x1*Ru6x6*complexconjugate(Ru6x6))/(48.*cmath.pi**2*(-1 + sw**2))',
4982- order = {'QCD':2,'QED':1})
4983-
4984-R2GC_1237_137 = Coupling(name = 'R2GC_1237_137',
4985- value = '-(cw*ee*complex(0,1)*G**2*NN2x1*Rd3x3*complexconjugate(Rd3x3))/(192.*cmath.pi**2*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN2x2*Rd3x3*complexconjugate(Rd3x3))/(64.*cmath.pi**2*sw*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN2x2*Rd3x3*sw*complexconjugate(Rd3x3))/(64.*cmath.pi**2*(-1 + sw**2))',
4986- order = {'QCD':2,'QED':1})
4987-
4988-R2GC_1237_138 = Coupling(name = 'R2GC_1237_138',
4989- value = '-(cw*ee*complex(0,1)*G**2*NN2x1*Rd6x6*complexconjugate(Rd6x6))/(96.*cmath.pi**2*(-1 + sw**2))',
4990- order = {'QCD':2,'QED':1})
4991-
4992-R2GC_1237_139 = Coupling(name = 'R2GC_1237_139',
4993- value = '-(cw*ee*complex(0,1)*G**2*NN2x1*Ru2x2*complexconjugate(Ru2x2))/(192.*cmath.pi**2*(-1 + sw**2)) - (ee*complex(0,1)*G**2*NN2x2*Ru2x2*complexconjugate(Ru2x2))/(64.*cmath.pi**2*sw*(-1 + sw**2)) + (ee*complex(0,1)*G**2*NN2x2*Ru2x2*sw*complexconjugate(Ru2x2))/(64.*cmath.pi**2*(-1 + sw**2))',
4994- order = {'QCD':2,'QED':1})
4995-
4996-R2GC_1237_140 = Coupling(name = 'R2GC_1237_140',
4997- value = '(cw*ee*complex(0,1)*G**2*NN2x1*Ru5x5*complexconjugate(Ru5x5))/(48.*cmath.pi**2*(-1 + sw**2))',
4998- order = {'QCD':2,'QED':1})
4999-
5000-R2GC_1237_141 = Coupling(name = 'R2GC_1237_141',
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: