Merge lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/2.5.0
- COLLIER
- Merge into 2.5.0
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 |
Related bugs: |
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.
Commit message
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:/
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://
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) COLLIERUseInter
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) UseQPIntegrandF
For complicated processes where a lot of points need stability rescuing
with Ninja, it turns out that quad. prec. in the integrand can
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
Olivier Mattelaer (olivier-mattelaer) wrote : Posted in a previous version of this proposal | # |
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_
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 "UseQPIntegrand
> 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:/
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.4.1.
>
--
Valentin
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/
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
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,
- 433. By Valentin Hirschi
-
1. Changed the default value of the ML reduction order to 6|7|1.
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Hi,
No the tests are not working...
So you can not merge.
Cheers,
Olivier
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/
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:/
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.5.0.
>
--
Valentin
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/
> 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:/
>> Your team MadDevelopers is subscribed to branch
>> lp:~maddevelopers/mg5amcnlo/2.5.0.
>>
>
>
>
> --
> Valentin
>
> https:/
> You are reviewing the proposed merge of lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/2.5.0.
Valentin Hirschi (valentin-hirschi) wrote : | # |
I stressed "from a structural/
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/
> > 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:/
> >> Your team MadDevelopers is subscribed to branch
> >> lp:~maddevelopers/mg5amcnlo/2.5.0.
> >>
> >
> >
> >
> > --
> > Valentin
> >
> >
> https:/
> > You are reviewing the proposed merge of
> lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/
> 2.5.0.
>
>
> --
> https:/
> Your team MadDevelopers is subscribed to branch
> lp:~maddevelopers/mg5amcnlo/2.5.0.
>
--
Valentin
- 434. By Valentin Hirschi
-
1. Fixed IOTests and default config tests.
Valentin Hirschi (valentin-hirschi) wrote : | # |
Hi Olivier,
So I fixed the usual default_
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_
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/
> 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/
> > > 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:/
> > >> Your team MadDevelopers is subscribed to branch
> > >> lp:~maddevelopers/mg5amcnlo/2.5.0.
> > >>
> > >
> > >
> > >
> > > --
> > > Valentin
> > >
> > >
> >
> https:/
> > > You are reviewing the proposed merge of
> > lp:~maddevelopers/mg5amcnlo/COLLIER into lp:~maddevelopers/mg5amcnlo/
> > 2.5.0.
> >
> >
> > --
> >
> https:/
> > Your team MadDevelopers is subscribed to branch
> > lp:~maddevelopers/mg5amcnlo/2.5.0.
> >
>
>
>
> --
> Valentin
>
> https:/
> Your team MadDeve...
- 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
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', |
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 "UseQPIntegrand ForNinja 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