Merge lp:~maddevelopers/mg5amcnlo/2.5.1 into lp:mg5amcnlo/lts

Proposed by Olivier Mattelaer
Status: Merged
Merged at revision: 268
Proposed branch: lp:~maddevelopers/mg5amcnlo/2.5.1
Merge into: lp:mg5amcnlo/lts
Diff against target: 167943 lines (+120089/-27056)
387 files modified
MadSpin/decay.py (+2/-2)
Template/Common/Cards/delphes_card_ATLAS.dat (+49/-21)
Template/Common/Cards/delphes_card_CMS.dat (+32/-15)
Template/Common/Cards/delphes_card_default.dat (+32/-15)
Template/Common/bin/internal/run_pythia (+0/-23)
Template/LO/Cards/madanalysis5_hadron_card_default.dat (+3/-0)
Template/LO/Cards/madanalysis5_parton_card_default.dat (+3/-0)
Template/LO/Cards/pythia8_card_default.dat (+77/-0)
Template/LO/Cards/run_card.dat (+52/-54)
Template/LO/Source/BIAS/dummy/dummy.f (+44/-0)
Template/LO/Source/BIAS/dummy/makefile (+21/-0)
Template/LO/Source/BIAS/ptj_bias/makefile (+27/-0)
Template/LO/Source/BIAS/ptj_bias/ptj_bias.f (+101/-0)
Template/LO/Source/cuts.inc (+7/-3)
Template/LO/Source/lhe_event_infos.inc (+16/-0)
Template/LO/Source/make_opts (+12/-2)
Template/LO/Source/run.inc (+8/-0)
Template/LO/Source/rw_events.f (+125/-3)
Template/LO/SubProcesses/cuts.f (+1750/-1319)
Template/LO/SubProcesses/genps.f (+2/-2)
Template/LO/SubProcesses/makefile (+10/-3)
Template/LO/SubProcesses/myamp.f (+2/-1)
Template/LO/SubProcesses/reweight.f (+52/-6)
Template/LO/SubProcesses/setcuts.f (+16/-49)
Template/LO/SubProcesses/unwgt.f (+70/-60)
Template/LO/bin/internal/run_delphes3 (+31/-12)
Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran.h (+0/-154)
Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran2.h (+154/-0)
Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran7.h (+154/-0)
Template/NLO/MCatNLO/HWPPAnalyzer/Makefile (+18/-40)
Template/NLO/MCatNLO/Scripts/MCatNLO_MadFKS_HERWIGPP.Script (+56/-34)
Template/NLO/MCatNLO/shower_template.sh (+1/-1)
Template/NLO/SubProcesses/BinothLHA.f (+8/-4)
Template/NLO/SubProcesses/check_poles.f (+2/-0)
Template/NLO/SubProcesses/fks_singular.f (+2/-1)
Template/NLO/SubProcesses/genps_fks.f (+359/-276)
Template/NLO/SubProcesses/handling_lhe_events.f (+1/-1)
Template/NLO/SubProcesses/madfks_plot.f (+1/-0)
Template/NLO/SubProcesses/makefile_loop.inc (+1/-0)
Template/NLO/SubProcesses/mint-integrator2.f (+49/-24)
Template/NLO/SubProcesses/mint.inc (+2/-2)
Template/NLO/SubProcesses/montecarlocounter.f (+14/-10)
Template/NLO/SubProcesses/setcuts.f (+101/-34)
Template/NLO/SubProcesses/symmetry_fks_test_MC.f (+10/-1)
Template/NLO/SubProcesses/symmetry_fks_test_ME.f (+8/-0)
Template/NLO/SubProcesses/symmetry_fks_v3.f (+4/-0)
Template/NLO/Utilities/VetoPrefactors/virt_reweighter.py (+2/-2)
Template/RWGTNLO/setrun.f (+1/-1)
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 (+82/-23)
VERSION (+3/-2)
aloha/aloha_writers.py (+15/-16)
aloha/template_files/ixxxxx.cc (+7/-7)
aloha/template_files/oxxxxx.cc (+12/-12)
aloha/template_files/txxxxx.cc (+5/-5)
aloha/template_files/vxxxxx.cc (+7/-7)
bin/create_release.py (+32/-85)
bin/mg5_aMC (+21/-4)
input/.mg5_configuration_default.txt (+27/-8)
madgraph/core/base_objects.py (+18/-14)
madgraph/core/diagram_generation.py (+47/-5)
madgraph/core/drawing.py (+10/-3)
madgraph/core/helas_objects.py (+17/-0)
madgraph/fks/fks_common.py (+28/-11)
madgraph/interface/amcatnlo_interface.py (+17/-6)
madgraph/interface/amcatnlo_run_interface.py (+105/-37)
madgraph/interface/common_run_interface.py (+2527/-280)
madgraph/interface/extended_cmd.py (+519/-42)
madgraph/interface/launch_ext_program.py (+2/-3)
madgraph/interface/loop_interface.py (+332/-16)
madgraph/interface/madevent_interface.py (+1670/-263)
madgraph/interface/madgraph_interface.py (+630/-397)
madgraph/interface/master_interface.py (+7/-4)
madgraph/interface/reweight_interface.py (+115/-44)
madgraph/iolibs/drawing_eps.py (+2/-2)
madgraph/iolibs/export_cpp.py (+462/-364)
madgraph/iolibs/export_fks.py (+132/-23)
madgraph/iolibs/export_v4.py (+495/-309)
madgraph/iolibs/file_writers.py (+2/-1)
madgraph/iolibs/group_subprocs.py (+2/-3)
madgraph/iolibs/template_files/addmothers.f (+5/-4)
madgraph/iolibs/template_files/auto_dsig_v4.inc (+10/-3)
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/loop_matrix_standalone.inc (+191/-0)
madgraph/iolibs/template_files/loop/mp_born_amps_and_wfs.inc (+13/-1)
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 (+336/-34)
madgraph/iolibs/template_files/loop_optimized/mp_compute_loop_coefs.inc (+25/-7)
madgraph/iolibs/template_files/madevent_makefile_source (+6/-2)
madgraph/iolibs/template_files/madevent_run_config.inc (+4/-0)
madgraph/iolibs/template_files/madevent_symmetry.f (+2/-2)
madgraph/iolibs/template_files/matrix_loop_induced_madevent.inc (+4/-1)
madgraph/iolibs/template_files/matrix_loop_induced_madevent_group.inc (+4/-1)
madgraph/iolibs/template_files/matrix_standalone_splitOrders_v4.inc (+98/-12)
madgraph/iolibs/template_files/matrix_standalone_v4.inc (+87/-5)
madgraph/iolibs/template_files/pythia8/pythia8.2_main_makefile.inc (+1/-1)
madgraph/iolibs/template_files/read_slha.cc (+24/-26)
madgraph/iolibs/template_files/read_slha.h (+20/-18)
madgraph/iolibs/ufo_expression_parsers.py (+12/-1)
madgraph/loop/MadLoopBannerStyles.py (+0/-1)
madgraph/loop/loop_diagram_generation.py (+10/-6)
madgraph/loop/loop_exporters.py (+220/-74)
madgraph/madevent/combine_runs.py (+11/-9)
madgraph/madevent/gen_crossxhtml.py (+358/-158)
madgraph/madevent/sum_html.py (+3/-0)
madgraph/various/banner.py (+1492/-152)
madgraph/various/cluster.py (+3/-1)
madgraph/various/diagram_symmetry.py (+1/-1)
madgraph/various/histograms.py (+207/-45)
madgraph/various/lhe_parser.py (+351/-98)
madgraph/various/misc.py (+227/-83)
madgraph/various/plot_djrs.py (+163/-0)
madgraph/various/process_checks.py (+78/-39)
madgraph/various/q_polynomial.py (+14/-0)
madgraph/various/systematics.py (+792/-0)
models/MSSM_SLHA2/MSSM_UFO.log (+81/-0)
models/MSSM_SLHA2/__init__.py (+37/-0)
models/MSSM_SLHA2/build_restrict.py (+66/-0)
models/MSSM_SLHA2/coupling_orders.py (+16/-0)
models/MSSM_SLHA2/couplings.py (+3815/-0)
models/MSSM_SLHA2/decays.py (+942/-0)
models/MSSM_SLHA2/function_library.py (+54/-0)
models/MSSM_SLHA2/lorentz.py (+79/-0)
models/MSSM_SLHA2/object_library.py (+259/-0)
models/MSSM_SLHA2/parameters.py (+4059/-0)
models/MSSM_SLHA2/particles.py (+812/-0)
models/MSSM_SLHA2/restrict_default.dat (+524/-0)
models/MSSM_SLHA2/restrict_no_b_mass.dat (+524/-0)
models/MSSM_SLHA2/restrict_no_masses.dat (+524/-0)
models/MSSM_SLHA2/restrict_no_tau_mass.dat (+524/-0)
models/MSSM_SLHA2/vertices.py (+4943/-0)
models/MSSM_SLHA2/write_param_card.py (+181/-0)
models/__init__.py (+2/-2)
models/check_param_card.py (+214/-35)
models/import_ufo.py (+19/-5)
models/model_reader.py (+32/-8)
models/mssm/MSSM_UFO.log (+0/-81)
models/mssm/__init__.py (+0/-37)
models/mssm/build_restrict.py (+0/-66)
models/mssm/coupling_orders.py (+0/-16)
models/mssm/couplings.py (+0/-3815)
models/mssm/decays.py (+0/-942)
models/mssm/function_library.py (+0/-54)
models/mssm/lorentz.py (+0/-79)
models/mssm/object_library.py (+0/-259)
models/mssm/parameters.py (+0/-4059)
models/mssm/particles.py (+0/-812)
models/mssm/restrict_default.dat (+0/-524)
models/mssm/restrict_no_b_mass.dat (+0/-524)
models/mssm/restrict_no_masses.dat (+0/-524)
models/mssm/restrict_no_tau_mass.dat (+0/-524)
models/mssm/vertices.py (+0/-4943)
models/mssm/write_param_card.py (+0/-181)
models/usermod.py (+33/-8)
models/write_param_card.py (+1/-1)
tests/IOTests.py (+35/-3)
tests/acceptance_tests/test_cmd.py (+15/-7)
tests/acceptance_tests/test_cmd_amcatnlo.py (+4/-434)
tests/acceptance_tests/test_cmd_madevent.py (+159/-21)
tests/acceptance_tests/test_cmd_madloop.py (+12/-0)
tests/acceptance_tests/test_export_fks.py (+23/-0)
tests/acceptance_tests/test_histograms.py (+0/-1)
tests/acceptance_tests/test_model_equivalence.py (+3/-2)
tests/acceptance_tests/test_output_files.py (+2/-2)
tests/input_files/CKKWL_djrs.dat (+1304/-0)
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 (+15/-269)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%GOLEM_interface.f (+4/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%TIR_interface.f (+29/-56)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%born_matrix.f (+101/-13)
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 (+342/-22)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%mp_compute_loop_coefs.f (+30/-5)
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 (+15/-269)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%GOLEM_interface.f (+4/-3)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%TIR_interface.f (+29/-56)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%born_matrix.f (+101/-13)
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 (+342/-22)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%mp_compute_loop_coefs.f (+30/-5)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_udx_wp%V0_udx_wp%unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%matrix_1.f (+4/-4)
tests/input_files/IOTestsComparison/IOExportFKSTest/test_tdecay_fksreal/%SubProcesses%P0_t_budx%parton_lum_1.f (+2/-2)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_group/auto_dsig.f (+10/-2)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_madevent_nogroup/auto_dsig.f (+11/-2)
tests/input_files/IOTestsComparison/IOExportV4IOTest/export_matrix_element_v4_standalone/matrix.f (+86/-2)
tests/input_files/IOTestsComparison/IOHistogramTest/DJR_histograms/CKKWL_djrs_output.HwU (+1665/-0)
tests/input_files/IOTestsComparison/IOHistogramTest/DJR_histograms/CKKWL_djrs_output.gnuplot (+392/-0)
tests/input_files/IOTestsComparison/IOHistogramTest/DJR_histograms/MLM_djrs_output.HwU (+1665/-0)
tests/input_files/IOTestsComparison/IOHistogramTest/DJR_histograms/MLM_djrs_output.gnuplot (+392/-0)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_eq_4.f (+338/-18)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_gt_0_QEDAmpAndQEDsq_gt_2.f (+339/-19)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QCDsq_gt_4.f (+338/-18)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_QEDsq_le_4.f (+338/-18)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_WGTsq_le_10_QEDAmpAndQEDsq_gt_2.f (+339/-19)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDQEDpert_default.f (+338/-18)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDpert_default.f (+338/-18)
tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QEDpert_default.f (+338/-18)
tests/input_files/IOTestsComparison/MECmdShell/check_html_long_process_strings/info.html (+2/-2)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%MadLoopCommons.f (+140/-70)
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%born_matrix.f (+97/-9)
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 (+339/-19)
tests/input_files/IOTestsComparison/MadLoop_output_from_the_interface/TIR_output/%ggttx_IOTest%SubProcesses%P0_gg_ttx%mp_compute_loop_coefs.f (+28/-3)
tests/input_files/IOTestsComparison/SquaredOrder_IOTest/sqso_uux_uuxuuxx/matrix_NoSQSO.f (+86/-2)
tests/input_files/IOTestsComparison/SquaredOrder_IOTest/sqso_uux_uuxuuxx/matrix_QCDsq_le_6.f (+97/-9)
tests/input_files/IOTestsComparison/SquaredOrder_IOTest/sqso_uux_uuxuuxx/matrix_ampOrderQED2_eq_2_WGTsq_le_14_QCDsq_gt_4.f (+99/-11)
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 (+339/-19)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%mp_compute_loop_coefs.f (+28/-3)
tests/input_files/IOTestsComparison/TestCmdMatchBox/MatchBoxOutput/%TEST%SubProcesses%P1_uux_uux%unique_id.inc (+2/-0)
tests/input_files/IOTestsComparison/TestMadWeight/modification_to_cuts/cuts.f (+1728/-1297)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/CT_interface.f (+1/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/born_matrix.f (+88/-4)
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/loop_matrix.f (+197/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/dux_mumvmxg/mp_born_amps_and_wfs.f (+17/-2)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/CT_interface.f (+1/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/born_matrix.f (+88/-4)
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/loop_matrix.f (+197/-1)
tests/input_files/IOTestsComparison/long_ML_SMQCD_default/gg_wmtbx/mp_born_amps_and_wfs.f (+17/-2)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/CT_interface.f (+3/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/TIR_interface.f (+14/-6)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/born_matrix.f (+88/-4)
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 (+334/-19)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/mp_compute_loop_coefs.f (+16/-1)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/CT_interface.f (+3/-2)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/TIR_interface.f (+14/-6)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/born_matrix.f (+88/-4)
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 (+334/-19)
tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/mp_compute_loop_coefs.f (+16/-1)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/CT_interface.f (+1/-1)
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/loop_matrix.f (+197/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_LoopInduced/gg_hh/mp_born_amps_and_wfs.f (+17/-2)
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/CT_interface.f (+1/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/ddx_ttx/born_matrix.f (+88/-4)
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/loop_matrix.f (+197/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/ddx_ttx/mp_born_amps_and_wfs.f (+17/-2)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/CT_interface.f (+1/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/born_matrix.f (+88/-4)
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/loop_matrix.f (+197/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_default/gg_ttx/mp_born_amps_and_wfs.f (+17/-2)
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 (+3/-2)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/TIR_interface.f (+14/-6)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/born_matrix.f (+88/-4)
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 (+334/-19)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/mp_compute_loop_coefs.f (+16/-1)
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/%..%..%Source%MODEL%couplings.f (+3/-3)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/CT_interface.f (+3/-2)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/TIR_interface.f (+14/-6)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/born_matrix.f (+88/-4)
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 (+334/-19)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/mp_compute_loop_coefs.f (+16/-1)
tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/unique_id.inc (+2/-0)
tests/input_files/MLM_djrs.dat (+1665/-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/input_files/madanalysis5_hadron_card.dat (+90/-0)
tests/input_files/madanalysis5_parton_card.dat (+29/-0)
tests/input_files/run_card_matching.dat (+3/-3)
tests/parallel_tests/compare_with_old_mg5_version.py (+18/-14)
tests/parallel_tests/decay_comparator.py (+24/-12)
tests/parallel_tests/input_files/run_card_decay.dat (+1/-1)
tests/parallel_tests/madevent_comparator.py (+28/-4)
tests/parallel_tests/test_MG5aMC_distribution.py (+113/-0)
tests/parallel_tests/test_ML5.py (+1/-2)
tests/parallel_tests/test_ML5MSSMQCD.py (+5/-10)
tests/parallel_tests/test_aloha.py (+55/-89)
tests/parallel_tests/test_cmd_amcatnlo.py (+600/-0)
tests/test_manager.py (+4/-3)
tests/time_db (+113/-85)
tests/unit_tests/core/test_base_objects.py (+1/-1)
tests/unit_tests/fks/test_fks_common.py (+2/-2)
tests/unit_tests/interface/test_madevent.py (+18/-2)
tests/unit_tests/iolibs/test_export_cpp.py (+22/-22)
tests/unit_tests/iolibs/test_export_fks.py (+16/-11)
tests/unit_tests/iolibs/test_export_v4.py (+0/-2)
tests/unit_tests/iolibs/test_histograms.py (+88/-0)
tests/unit_tests/iolibs/test_link_to_ufo.py (+1/-1)
tests/unit_tests/loop/test_loop_exporters.py (+3/-3)
tests/unit_tests/madevent/test_combine_runs.py (+39/-0)
tests/unit_tests/madweight/test_export_v4.py (+2/-2)
tests/unit_tests/various/test_banner.py (+292/-52)
tests/unit_tests/various/test_decay.py (+124/-52)
tests/unit_tests/various/test_process_checks.py (+1/-1)
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/2.5.1
Reviewer Review Type Date Requested Status
Rikkert Frederix Approve
Review via email: mp+309108@code.launchpad.net

Description of the change

Hi,

I think that it is now time to release this branch.
Any objections? Know bugs that need to be fixed? Any important merge that we have to wait for?

Cheers,

Olivier

To post a comment you must log in.
lp:~maddevelopers/mg5amcnlo/2.5.1 updated
330. By Olivier Mattelaer

allow PYTHONPATH to not have valid path inside it

331. By Olivier Mattelaer

fix problem with plugin for ./bin/generate_events script

332. By Olivier Mattelaer

avoid problem with xml in the run_card

333. By Paolo Torrielli

Merging with 2.3.4_new_HWPP: interface to HW7 available from this merge

Revision history for this message
Rikkert Frederix (frederix) wrote :

Hi Olivier,

Go ahead!

Cheers,
Rik

review: Approve
lp:~maddevelopers/mg5amcnlo/2.5.1 updated
334. By Olivier Mattelaer

include antiname in name2part

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

I'm waiting the green light of Valentin.
He asked me to wait for one bug in the PY8 interface to be fixed before releasing this.
In principle, this should be fixed in less than 24h

Cheers,

Olivier

lp:~maddevelopers/mg5amcnlo/2.5.1 updated
335. By Olivier Mattelaer

fix systematics for e+ e- initial state + change web adress for uiuc

336. By Olivier Mattelaer

1) allow py8 to run in single core
2) add MA5 card to the detect_card_type algorithm (to allow to specify a path to a file)

337. By Valentin Hirschi

1. Fixed the presence of 'Merging:Process' when there is no merging.
2. Fixed an issue of nJetMax = -1 because of the new behaviour of user_set.
3. added the new hidden parameter HEPMCOutput:scaling, automatically set to 1.0e9 so as to have it in picobarn.

338. By Valentin Hirschi

1. Fixed an issue of HEPMC weight normalization when using PY8 parallelization.

339. By Olivier Mattelaer

1) Fix a problem with plugin directory specified via PYTHONPATH
2) add two hidden paramereter in the run_card (both LO and NLO)
systematics_program [none, syscalc, systematics, auto]
systematics_arguments
to allow to run systematics on the flight

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

Ok I'm starting the process of merging the branch.
The release should be done by tomorrow.

Cheers,

Olivier

lp:~maddevelopers/mg5amcnlo/2.5.1 updated
340. By Olivier Mattelaer

put systematics to OFF for LO interference processes

341. By Valentin Hirschi

1. Fixed parallelization of PY8 when enforcing a number of events to be processed while keeping the excessive events so that they can be used if they are skipped.

342. By Olivier Mattelaer

VERSION/UpdateNotes + small fix from Valentin

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'MadSpin/decay.py'
2--- MadSpin/decay.py 2016-07-06 08:54:04 +0000
3+++ MadSpin/decay.py 2016-11-04 09:43:15 +0000
4@@ -64,7 +64,7 @@
5 from madgraph import MG5DIR, MadGraph5Error
6 import madgraph.various.misc as misc
7 #import time
8-import tests.parallel_tests.test_aloha as test_aloha
9+
10
11 class MadSpinError(MadGraph5Error):
12 pass
13@@ -2615,7 +2615,7 @@
14
15
16 @misc.mute_logger()
17- @test_aloha.set_global()
18+ @misc.set_global()
19 def generate_all_matrix_element(self):
20 """generate the full series of matrix element needed by Madspin.
21 i.e. the undecayed and the decay one. And associate those to the
22
23=== added directory 'PLUGIN'
24=== added file 'PLUGIN/__init__.py'
25=== modified file 'Template/Common/Cards/delphes_card_ATLAS.dat'
26--- Template/Common/Cards/delphes_card_ATLAS.dat 2015-11-10 11:23:55 +0000
27+++ Template/Common/Cards/delphes_card_ATLAS.dat 2016-11-04 09:43:15 +0000
28@@ -31,6 +31,8 @@
29
30 NeutrinoFilter
31 GenJetFinder
32+ GenMissingET
33+
34 FastJetFinder
35
36 JetEnergyScale
37@@ -138,9 +140,9 @@
38 # set ResolutionFormula {resolution formula as a function of eta and pt}
39
40 # resolution formula for charged hadrons
41- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
42- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
43- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
44+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) +
45+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) +
46+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)}
47 }
48
49 ###################################
50@@ -154,9 +156,9 @@
51 # set ResolutionFormula {resolution formula as a function of eta and energy}
52
53 # resolution formula for electrons
54- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
55- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
56- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
57+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.03^2 + pt^2*1.3e-3^2) +
58+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*1.7e-3^2) +
59+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.15^2 + pt^2*3.1e-3^2)}
60 }
61
62 ###############################
63@@ -168,11 +170,10 @@
64 set OutputArray muons
65
66 # set ResolutionFormula {resolution formula as a function of eta and pt}
67-
68 # resolution formula for muons
69- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.02^2 + pt^2*2.0e-4^2) +
70- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.03^2 + pt^2*3.0e-4^2) +
71- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*6.0e-4^2)}
72+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.0e-4^2) +
73+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*1.5e-4^2) +
74+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*3.5e-4^2)}
75 }
76
77 ##############
78@@ -312,7 +313,7 @@
79
80 set PTMin 0.5
81
82- set PTRatioMax 0.1
83+ set PTRatioMax 0.12
84 }
85
86 #################
87@@ -358,7 +359,7 @@
88
89 set PTMin 0.5
90
91- set PTRatioMax 0.1
92+ set PTRatioMax 0.12
93 }
94
95 #################
96@@ -392,7 +393,7 @@
97
98 set PTMin 0.5
99
100- set PTRatioMax 0.1
101+ set PTRatioMax 0.25
102 }
103
104 ###################
105@@ -456,6 +457,18 @@
106 }
107
108
109+#########################
110+# Gen Missing ET merger
111+########################
112+
113+module Merger GenMissingET {
114+# add InputArray InputArray
115+ add InputArray NeutrinoFilter/filteredParticles
116+ set MomentumOutputArray momentum
117+}
118+
119+
120+
121 ############
122 # Jet finder
123 ############
124@@ -530,23 +543,36 @@
125 # tau-tagging
126 #############
127
128-module TauTagging TauTagging {
129+module TrackCountingTauTagging TauTagging {
130+
131 set ParticleInputArray Delphes/allParticles
132 set PartonInputArray Delphes/partons
133+ set TrackInputArray TrackMerger/tracks
134 set JetInputArray JetEnergyScale/jets
135
136- set DeltaR 0.5
137+ set DeltaR 0.2
138+ set DeltaRTrack 0.2
139
140+ set TrackPTMin 1.0
141+
142 set TauPTMin 1.0
143-
144 set TauEtaMax 2.5
145
146- # add EfficiencyFormula {abs(PDG code)} {efficiency formula as a function of eta and pt}
147+ # instructions: {n-prongs} {eff}
148+
149+ # 1 - one prong efficiency
150+ # 2 - two or more efficiency
151+ # -1 - one prong mistag rate
152+ # -2 - two or more mistag rate
153+
154+ set BitNumber 0
155+
156+ # taken from ATL-PHYS-PUB-2015-045 (medium working point)
157+ add EfficiencyFormula {1} {0.70}
158+ add EfficiencyFormula {2} {0.60}
159+ add EfficiencyFormula {-1} {0.02}
160+ add EfficiencyFormula {-2} {0.01}
161
162- # default efficiency formula (misidentification rate)
163- add EfficiencyFormula {0} {0.01}
164- # efficiency formula for tau-jets
165- add EfficiencyFormula {15} {0.6}
166 }
167
168 #####################################################
169@@ -582,6 +608,8 @@
170 add Branch Calorimeter/eflowNeutralHadrons EFlowNeutralHadron Tower
171
172 add Branch GenJetFinder/jets GenJet Jet
173+ add Branch GenMissingET/momentum GenMissingET MissingET
174+
175 add Branch UniqueObjectFinder/jets Jet Jet
176 add Branch UniqueObjectFinder/electrons Electron Electron
177 add Branch UniqueObjectFinder/photons Photon Photon
178
179=== modified file 'Template/Common/Cards/delphes_card_CMS.dat'
180--- Template/Common/Cards/delphes_card_CMS.dat 2015-11-10 11:23:55 +0000
181+++ Template/Common/Cards/delphes_card_CMS.dat 2016-11-04 09:43:15 +0000
182@@ -31,6 +31,8 @@
183
184 NeutrinoFilter
185 GenJetFinder
186+ GenMissingET
187+
188 FastJetFinder
189
190 JetEnergyScale
191@@ -139,9 +141,9 @@
192
193 # resolution formula for charged hadrons
194 # based on arXiv:1405.6569
195- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
196- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
197- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
198+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) +
199+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) +
200+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)}
201 }
202
203 ###################################
204@@ -156,9 +158,9 @@
205
206 # resolution formula for electrons
207 # based on arXiv:1405.6569
208- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
209- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
210- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
211+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.03^2 + pt^2*1.3e-3^2) +
212+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*1.7e-3^2) +
213+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.15^2 + pt^2*3.1e-3^2)}
214 }
215
216 ###############################
217@@ -172,9 +174,9 @@
218 # set ResolutionFormula {resolution formula as a function of eta and pt}
219
220 # resolution formula for muons
221- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*2.0e-4^2) +
222- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.02^2 + pt^2*3.0e-4^2) +
223- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*6.0e-4^2)}
224+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.0e-4^2) +
225+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*1.5e-4^2) +
226+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*3.5e-4^2)}
227 }
228
229 ##############
230@@ -266,8 +268,10 @@
231 add EnergyFraction {3122} {0.3 0.7}
232
233 # set ECalResolutionFormula {resolution formula as a function of eta and energy}
234- set ECalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.007^2 + energy*0.07^2 + 0.35^2) +
235- (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
236+ # Eta shape from arXiv:1306.2016, Energy shape from arXiv:1502.02701
237+ set ECalResolutionFormula { (abs(eta) <= 1.5) * (1+0.64*eta^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) +
238+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (2.16 + 5.6*(abs(eta)-2)^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) +
239+ (abs(eta) > 2.5 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
240
241 # set HCalResolutionFormula {resolution formula as a function of eta and energy}
242 set HCalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) +
243@@ -317,7 +321,7 @@
244
245 set PTMin 0.5
246
247- set PTRatioMax 0.1
248+ set PTRatioMax 0.12
249 }
250
251 #################
252@@ -363,7 +367,7 @@
253
254 set PTMin 0.5
255
256- set PTRatioMax 0.1
257+ set PTRatioMax 0.12
258 }
259
260 #################
261@@ -399,7 +403,7 @@
262
263 set PTMin 0.5
264
265- set PTRatioMax 0.1
266+ set PTRatioMax 0.25
267 }
268
269 ###################
270@@ -463,6 +467,17 @@
271 set JetPTMin 20.0
272 }
273
274+#########################
275+# Gen Missing ET merger
276+########################
277+
278+module Merger GenMissingET {
279+# add InputArray InputArray
280+ add InputArray NeutrinoFilter/filteredParticles
281+ set MomentumOutputArray momentum
282+}
283+
284+
285
286 ############
287 # Jet finder
288@@ -526,7 +541,7 @@
289 # based on arXiv:1211.4462
290
291 # default efficiency formula (misidentification rate)
292- add EfficiencyFormula {0} {0.01+0.00038*pt}
293+ add EfficiencyFormula {0} {0.01+0.000038*pt}
294
295 # efficiency formula for c-jets (misidentification rate)
296 add EfficiencyFormula {4} {0.25*tanh(0.018*pt)*(1/(1+ 0.0013*pt))}
297@@ -591,6 +606,8 @@
298 add Branch Calorimeter/eflowNeutralHadrons EFlowNeutralHadron Tower
299
300 add Branch GenJetFinder/jets GenJet Jet
301+ add Branch GenMissingET/momentum GenMissingET MissingET
302+
303 add Branch UniqueObjectFinder/jets Jet Jet
304 add Branch UniqueObjectFinder/electrons Electron Electron
305 add Branch UniqueObjectFinder/photons Photon Photon
306
307=== modified file 'Template/Common/Cards/delphes_card_default.dat'
308--- Template/Common/Cards/delphes_card_default.dat 2015-11-10 11:23:55 +0000
309+++ Template/Common/Cards/delphes_card_default.dat 2016-11-04 09:43:15 +0000
310@@ -31,6 +31,8 @@
311
312 NeutrinoFilter
313 GenJetFinder
314+ GenMissingET
315+
316 FastJetFinder
317
318 JetEnergyScale
319@@ -139,9 +141,9 @@
320
321 # resolution formula for charged hadrons
322 # based on arXiv:1405.6569
323- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
324- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
325- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
326+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.5e-4^2) +
327+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*2.5e-4^2) +
328+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*5.5e-4^2)}
329 }
330
331 ###################################
332@@ -156,9 +158,9 @@
333
334 # resolution formula for electrons
335 # based on arXiv:1405.6569
336- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.06^2 + pt^2*1.3e-3^2) +
337- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.10^2 + pt^2*1.7e-3^2) +
338- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.25^2 + pt^2*3.1e-3^2)}
339+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.03^2 + pt^2*1.3e-3^2) +
340+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*1.7e-3^2) +
341+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.15^2 + pt^2*3.1e-3^2)}
342 }
343
344 ###############################
345@@ -172,9 +174,9 @@
346 # set ResolutionFormula {resolution formula as a function of eta and pt}
347
348 # resolution formula for muons
349- set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*2.0e-4^2) +
350- (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.02^2 + pt^2*3.0e-4^2) +
351- (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.05^2 + pt^2*6.0e-4^2)}
352+ set ResolutionFormula { (abs(eta) <= 0.5) * (pt > 0.1) * sqrt(0.01^2 + pt^2*1.0e-4^2) +
353+ (abs(eta) > 0.5 && abs(eta) <= 1.5) * (pt > 0.1) * sqrt(0.015^2 + pt^2*1.5e-4^2) +
354+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (pt > 0.1) * sqrt(0.025^2 + pt^2*3.5e-4^2)}
355 }
356
357 ##############
358@@ -266,8 +268,10 @@
359 add EnergyFraction {3122} {0.3 0.7}
360
361 # set ECalResolutionFormula {resolution formula as a function of eta and energy}
362- set ECalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.007^2 + energy*0.07^2 + 0.35^2) +
363- (abs(eta) > 3.0 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
364+ # Eta shape from arXiv:1306.2016, Energy shape from arXiv:1502.02701
365+ set ECalResolutionFormula { (abs(eta) <= 1.5) * (1+0.64*eta^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) +
366+ (abs(eta) > 1.5 && abs(eta) <= 2.5) * (2.16 + 5.6*(abs(eta)-2)^2) * sqrt(energy^2*0.008^2 + energy*0.11^2 + 0.40^2) +
367+ (abs(eta) > 2.5 && abs(eta) <= 5.0) * sqrt(energy^2*0.107^2 + energy*2.08^2)}
368
369 # set HCalResolutionFormula {resolution formula as a function of eta and energy}
370 set HCalResolutionFormula { (abs(eta) <= 3.0) * sqrt(energy^2*0.050^2 + energy*1.50^2) +
371@@ -317,7 +321,7 @@
372
373 set PTMin 0.5
374
375- set PTRatioMax 0.1
376+ set PTRatioMax 0.12
377 }
378
379 #################
380@@ -363,7 +367,7 @@
381
382 set PTMin 0.5
383
384- set PTRatioMax 0.1
385+ set PTRatioMax 0.12
386 }
387
388 #################
389@@ -399,7 +403,7 @@
390
391 set PTMin 0.5
392
393- set PTRatioMax 0.1
394+ set PTRatioMax 0.25
395 }
396
397 ###################
398@@ -463,6 +467,17 @@
399 set JetPTMin 20.0
400 }
401
402+#########################
403+# Gen Missing ET merger
404+########################
405+
406+module Merger GenMissingET {
407+# add InputArray InputArray
408+ add InputArray NeutrinoFilter/filteredParticles
409+ set MomentumOutputArray momentum
410+}
411+
412+
413
414 ############
415 # Jet finder
416@@ -526,7 +541,7 @@
417 # based on arXiv:1211.4462
418
419 # default efficiency formula (misidentification rate)
420- add EfficiencyFormula {0} {0.01+0.00038*pt}
421+ add EfficiencyFormula {0} {0.01+0.000038*pt}
422
423 # efficiency formula for c-jets (misidentification rate)
424 add EfficiencyFormula {4} {0.25*tanh(0.018*pt)*(1/(1+ 0.0013*pt))}
425@@ -591,6 +606,8 @@
426 add Branch Calorimeter/eflowNeutralHadrons EFlowNeutralHadron Tower
427
428 add Branch GenJetFinder/jets GenJet Jet
429+ add Branch GenMissingET/momentum GenMissingET MissingET
430+
431 add Branch UniqueObjectFinder/jets Jet Jet
432 add Branch UniqueObjectFinder/electrons Electron Electron
433 add Branch UniqueObjectFinder/photons Photon Photon
434
435=== removed file 'Template/Common/bin/internal/run_pythia'
436--- Template/Common/bin/internal/run_pythia 2015-10-26 10:18:49 +0000
437+++ Template/Common/bin/internal/run_pythia 1970-01-01 00:00:00 +0000
438@@ -1,23 +0,0 @@
439-#!/bin/bash
440-#
441-# This runs pythia on the unweighted_events.dat
442-#
443-# Usage: run_pythia [pydir]
444-# where pydir is the path to the pythia executable
445-
446-pydir=$1
447-main=`pwd`
448-
449-if [ ! -e ../Cards/pythia_card.dat ]; then
450- echo "No pythia_card.dat found. Quitting..."
451- exit
452-fi
453-
454-echo $$ >> ../myprocid
455-# shower and hadronize event through Pythia
456-#echo "" >> ../Cards/pythia_card.dat
457-#echo " LHAPATH=$pydir/PDFsets" >> ../Cards/pythia_card.dat
458-export PDG_MASS_TBL=$pydir/mass_width_2004.mc
459-rm -rf Events/hepmv_event.hepmc &> /dev/null
460-$pydir/pythia && touch pythia.done
461-
462
463=== added file 'Template/LO/Cards/madanalysis5_hadron_card_default.dat'
464--- Template/LO/Cards/madanalysis5_hadron_card_default.dat 1970-01-01 00:00:00 +0000
465+++ Template/LO/Cards/madanalysis5_hadron_card_default.dat 2016-11-04 09:43:15 +0000
466@@ -0,0 +1,3 @@
467+# This card is used only if MA5 failed to create a default for this run
468+# We therefore use as default: do nothing
469+@MG5aMC skip_analysis
470\ No newline at end of file
471
472=== added file 'Template/LO/Cards/madanalysis5_parton_card_default.dat'
473--- Template/LO/Cards/madanalysis5_parton_card_default.dat 1970-01-01 00:00:00 +0000
474+++ Template/LO/Cards/madanalysis5_parton_card_default.dat 2016-11-04 09:43:15 +0000
475@@ -0,0 +1,3 @@
476+# This card is used only if MA5 failed to create a default for this run
477+# We therefore use as default: do nothing
478+@MG5aMC skip_analysis
479\ No newline at end of file
480
481=== added file 'Template/LO/Cards/pythia8_card_default.dat'
482--- Template/LO/Cards/pythia8_card_default.dat 1970-01-01 00:00:00 +0000
483+++ Template/LO/Cards/pythia8_card_default.dat 2016-11-04 09:43:15 +0000
484@@ -0,0 +1,77 @@
485+!
486+! Pythia8 cmd card automatically generated by MadGraph5_aMC@NLO
487+! For more information on the use of the MG5aMC / Pythia8 interface, visit
488+! https://cp3.irmp.ucl.ac.be/projects/madgraph/wiki/LOPY8Merging
489+!
490+! ==================
491+! General parameters
492+! ==================
493+!
494+Main:numberOfEvents = -1
495+!
496+! -------------------------------------------------------------------
497+! Specify the HEPMC output of the Pythia8 shower. You can set it to:
498+! auto : MG5aMC will automatically place it the run_<i> directory
499+! /dev/null : to turn off the HEPMC output.
500+! <path> : to select where the HEPMC file must written. It will
501+! therefore not be placed in the run_<i> directory. The
502+! specified path, if not absolute, will be relative to
503+! the Event/run_<i> directory of the process output.
504+! fifo : to have MG5aMC setup the piping of the PY8 output to
505+! analysis tools such as MadAnalysis5.
506+! fifo@<fifo_path> :
507+! Same as 'fifo', but selecting a custom path to create the
508+! fifo pipe. (useful to select a mounted drive that supports
509+! fifo). Note that the fifo file extension *must* be '.hepmc.fifo'.
510+! -------------------------------------------------------------------
511+!
512+HEPMCoutput:file = auto
513+!
514+! --------------------------------------------------------------------
515+! Parameters relevant only when performing MLM merging, which can be
516+! turned on by setting ickkw to '1' in the run_card and chosing a
517+! positive value for the parameter xqcut.
518+! For details, see section 'Jet Matching' on the left-hand menu of
519+! http://home.thep.lu.se/~torbjorn/pythia81html/Welcome.html
520+! --------------------------------------------------------------------
521+! If equal to -1.0, MadGraph5_aMC@NLO will set it automatically based
522+! on the parameter 'xqcut' of the run_card.dat
523+JetMatching:qCut = -1.0
524+! Use default kt-MLM to match parton level jets to those produced by the
525+! shower. But the other Shower-kt scheme is available too with this option.
526+JetMatching:doShowerKt = off
527+! A value of -1 means that it is automatically guessed by MadGraph.
528+! It is however always safer to explicitly set it.
529+JetMatching:nJetMax = -1
530+!
531+! --------------------------------------------------------------------
532+! Parameters relevant only when performing CKKW-L merging, which can
533+! be turned on by setting the parameter 'ptlund' *or* 'ktdurham' to
534+! a positive value.
535+! For details, see section 'CKKW-L Merging' on the left-hand menu of
536+! http://home.thep.lu.se/~torbjorn/pythia81html/Welcome.html
537+! --------------------------------------------------------------------
538+! Central merging scale values you want to be used.
539+! If equal to -1.0, then MadGraph5_aMC@NLO will set this automatically
540+! based on the parameter 'ktdurham' of the run_card.dat
541+Merging:TMS = -1.0
542+! This must be set manually, according to Pythia8 directives.
543+! An example of possible value is 'pp>LEPTONS,NEUTRINOS'
544+Merging:Process = <set_by_user>
545+! A value of -1 means that it is automatically guessed by MadGraph.
546+! It is however always safer to explicitly set it.
547+Merging:nJetMax = -1
548+!
549+! For all merging schemes, decide wehter you want the merging scale
550+! variation computed for only the central weights or all other
551+! PDF and scale variation weights as well
552+SysCalc:fullCutVariation = off
553+!
554+! ==========================
555+! User customized parameters
556+! ==========================
557+!
558+! By default, Pythia8 generates multi-parton interaction events. This is
559+! often irrelevant for phenomenology and very slow. You can turn this
560+! feature off by uncommenting the line below if so desired.
561+!partonlevel:mpi = off
562
563=== modified file 'Template/LO/Cards/run_card.dat'
564--- Template/LO/Cards/run_card.dat 2015-08-11 00:35:53 +0000
565+++ Template/LO/Cards/run_card.dat 2016-11-04 09:43:15 +0000
566@@ -21,10 +21,6 @@
567 #*********************************************************************
568 %(run_tag)s = run_tag ! name of the run
569 #*********************************************************************
570-# Run to generate the grid pack *
571-#*********************************************************************
572- %(gridpack)s = gridpack !True = setting up the grid pack
573-#*********************************************************************
574 # Number of events and rnd seed *
575 # Warning: Do not generate more than 1M events in a single run *
576 # If you want to run Pythia, avoid more than 50k events in a run. *
577@@ -61,51 +57,55 @@
578 %(dynamical_scale_choice)s = dynamical_scale_choice ! Choose one of the preselected dynamical choices
579 %(scalefact)s = scalefact ! scale factor for event-by-event scales
580 #*********************************************************************
581-# Time of flight information. (-1 means not run)
582-#*********************************************************************
583- %(time_of_flight)s = time_of_flight ! threshold below which info is not written
584-#*********************************************************************
585-# Matching - Warning! ickkw > 1 is still beta
586-#*********************************************************************
587- %(ickkw)s = ickkw ! 0 no matching, 1 MLM, 2 CKKW matching
588- %(highestmult)s = highestmult ! for ickkw=2, highest mult group
589- %(ktscheme)s = ktscheme ! for ickkw=1, 1 Durham kT, 2 Pythia pTE
590+# Type and output format
591+#*********************************************************************
592+ %(gridpack)s = gridpack !True = setting up the grid pack
593+ %(time_of_flight)s = time_of_flight ! threshold (in mm) below which the invariant livetime is not written (-1 means not written)
594+ %(lhe_version)s = lhe_version ! Change the way clustering information pass to shower.
595+ %(clusinfo)s = clusinfo ! include clustering tag in output
596+ %(event_norm)s = event_norm ! average/sum. Normalization of the weight in the LHEF
597+
598+#*********************************************************************
599+# Matching parameter (MLM only)
600+#*********************************************************************
601+ %(ickkw)s = ickkw ! 0 no matching, 1 MLM
602 %(alpsfact)s = alpsfact ! scale factor for QCD emission vx
603 %(chcluster)s = chcluster ! cluster only according to channel diag
604- %(pdfwgt)s = pdfwgt ! for ickkw=1, perform pdf reweighting
605 %(asrwgtflavor)s = asrwgtflavor ! highest quark flavor for a_s reweight
606- %(clusinfo)s = clusinfo ! include clustering tag in output
607- %(lhe_version)s = lhe_version ! Change the way clustering information pass to shower.
608-#*********************************************************************
609-#**********************************************************
610-#
611-#**********************************************************
612-# Automatic ptj and mjj cuts if xqcut > 0
613-# (turn off for VBF and single top processes)
614-#**********************************************************
615- %(auto_ptj_mjj)s = auto_ptj_mjj ! Automatic setting of ptj and mjj
616-#**********************************************************
617+ %(auto_ptj_mjj)s = auto_ptj_mjj ! Automatic setting of ptj and mjj if xqcut >0
618+ ! (turn off for VBF and single top processes)
619+ %(xqcut)s = xqcut ! minimum kt jet measure between partons
620+#*********************************************************************
621+#
622+#*********************************************************************
623+# handling of the helicities:
624+# 0: sum over all helicities
625+# 1: importance sampling over helicities
626+#*********************************************************************
627+ %(nhel)s = nhel ! using helicities importance sampling or not.
628+#*********************************************************************
629+# Generation bias, check the wiki page below for more information: *
630+# 'cp3.irmp.ucl.ac.be/projects/madgraph/wiki/LOEventGenerationBias' *
631+#*********************************************************************
632+ %(bias_module)s = bias_module ! Bias type of bias, [None, ptj_bias, -custom_folder-]
633+ %(bias_parameters)s = bias_parameters ! Specifies the parameters of the module.
634+#
635+#*******************************
636+# Parton level cuts definition *
637+#*******************************
638 #
639-#**********************************
640-# BW cutoff (M+/-bwcutoff*Gamma)
641-#**********************************
642+#
643+#*********************************************************************
644+# BW cutoff (M+/-bwcutoff*Gamma) ! Define on/off-shell for "$" and decay
645+#*********************************************************************
646 %(bwcutoff)s = bwcutoff ! (M+/-bwcutoff*Gamma)
647-#**********************************************************
648+#*********************************************************************
649 # Apply pt/E/eta/dr/mij/kt_durham cuts on decay products or not
650 # (note that etmiss/ptll/ptheavy/ht/sorted cuts always apply)
651-#*************************************************************
652+#*********************************************************************
653 %(cut_decays)s = cut_decays ! Cut decay products
654-#*************************************************************
655-# Number of helicities to sum per event (0 = all helicities)
656-# 0 gives more stable result, but longer run time (needed for
657-# long decay chains e.g.).
658-# Use >=2 if most helicities contribute, e.g. pure QCD.
659-#*************************************************************
660- %(nhel)s = nhel ! Number of helicities used per event
661-#*******************
662-# Standard Cuts
663-#*******************
664-#
665+#*********************************************************************
666+# Standard Cuts *
667 #*********************************************************************
668 # Minimum and maximum pt's (for max, -1 means no cut) *
669 #*********************************************************************
670@@ -246,27 +246,24 @@
671 #*********************************************************************
672 %(xetamin)s = xetamin ! minimum rapidity for two jets in the WBF case
673 %(deltaeta)s = deltaeta ! minimum rapidity for two jets in the WBF case
674-#*********************************************************************
675-# KT DURHAM CUT *
676-#*********************************************************************
677- %(ktdurham)s = ktdurham
678- %(dparameter)s = dparameter
679+#***********************************************************************
680+# Turn on either the ktdurham or ptlund cut to activate *
681+# CKKW(L) merging with Pythia8 [arXiv:1410.3012, arXiv:1109.4829] *
682+#***********************************************************************
683+ %(ktdurham)s = ktdurham
684+ %(dparameter)s = dparameter
685+ %(ptlund)s = ptlund
686+ %(pdgs_for_merging_cut)s = pdgs_for_merging_cut ! PDGs for two cuts above
687 #*********************************************************************
688 # maximal pdg code for quark to be considered as a light jet *
689 # (otherwise b cuts are applied) *
690 #*********************************************************************
691 %(maxjetflavor)s = maxjetflavor ! Maximum jet pdg code
692 #*********************************************************************
693-# Jet measure cuts *
694-#*********************************************************************
695- %(xqcut)s = xqcut ! minimum kt jet measure between partons
696-#*********************************************************************
697 #
698 #*********************************************************************
699 # Store info for systematics studies *
700-# WARNING: If use_syst is T, matched Pythia output is *
701-# meaningful ONLY if plotted taking matchscale *
702-# reweighting into account! *
703+# WARNING: Do not use for interference type of computation *
704 #*********************************************************************
705 %(use_syst)s = use_syst ! Enable systematics studies
706 #
707@@ -279,5 +276,6 @@
708 %(sys_alpsfact)s = sys_alpsfact # \alpha_s emission scale factors
709 %(sys_matchscale)s = sys_matchscale # variation of merging scale
710 # PDF sets and number of members (0 or none for all members).
711-%(sys_pdf)s = sys_pdf # matching scales
712+%(sys_pdf)s = sys_pdf # separate by && if more than one set.
713 # MSTW2008nlo68cl.LHgrid 1 = sys_pdf
714+#
715
716=== added directory 'Template/LO/Source/BIAS'
717=== added directory 'Template/LO/Source/BIAS/dummy'
718=== added file 'Template/LO/Source/BIAS/dummy/dummy.f'
719--- Template/LO/Source/BIAS/dummy/dummy.f 1970-01-01 00:00:00 +0000
720+++ Template/LO/Source/BIAS/dummy/dummy.f 2016-11-04 09:43:15 +0000
721@@ -0,0 +1,44 @@
722+C ************************************************************
723+C Source for the library implementing a dummt bias function
724+C always returns one
725+C ************************************************************
726+
727+ subroutine bias_wgt(p, original_weight, bias_weight)
728+ implicit none
729+C
730+C Parameters
731+C
732+ include '../../nexternal.inc'
733+C
734+C Arguments
735+C
736+ double precision p(0:3,nexternal)
737+ double precision original_weight, bias_weight
738+C
739+C local variables
740+C
741+C
742+C Global variables
743+C
744+C Mandatory common block to be defined in bias modules
745+C
746+ double precision stored_bias_weight
747+ data stored_bias_weight/1.0d0/
748+ logical impact_xsec, requires_full_event_info
749+C Not impacting the xsec since the bias is 1.0. Therefore
750+C bias_wgt will not be written in the lhe event file.
751+C Setting it to .True. makes sure that it will not be written.
752+ data impact_xsec/.True./
753+C Of course this module does not require the full event
754+C information (color, resonances, helicities, etc..)
755+ data requires_full_event_info/.False./
756+ common/bias/stored_bias_weight,impact_xsec,
757+ & requires_full_event_info
758+
759+C --------------------
760+C BEGIN IMPLEMENTATION
761+C --------------------
762+
763+ bias_weight = 1.0d0
764+
765+ end subroutine bias_wgt
766
767=== added file 'Template/LO/Source/BIAS/dummy/makefile'
768--- Template/LO/Source/BIAS/dummy/makefile 1970-01-01 00:00:00 +0000
769+++ Template/LO/Source/BIAS/dummy/makefile 2016-11-04 09:43:15 +0000
770@@ -0,0 +1,21 @@
771+
772+include ../../make_opts
773+
774+all: dummy
775+
776+clean:
777+ $(RM) *.o $(BIASLIBDIR)$(BIASLIBRARY)
778+
779+#
780+# Compilation of the module dummy
781+#
782+
783+dummy: dummy.o
784+ $(call CREATELIB, $(BIASLIBDIR)$(BIASLIBRARY), $^)
785+
786+#
787+# List of the requirements for this module.
788+# 'VALID' is the keyword that *must* be returned if everything is in order.
789+#
790+requirements:
791+ @echo "VALID"
792
793=== added directory 'Template/LO/Source/BIAS/ptj_bias'
794=== added file 'Template/LO/Source/BIAS/ptj_bias/makefile'
795--- Template/LO/Source/BIAS/ptj_bias/makefile 1970-01-01 00:00:00 +0000
796+++ Template/LO/Source/BIAS/ptj_bias/makefile 2016-11-04 09:43:15 +0000
797@@ -0,0 +1,27 @@
798+include ../../make_opts
799+
800+all: ptj_bias
801+
802+clean:
803+ $(RM) *.o $(BIASLIBDIR)$(BIASLIBRARY)
804+
805+#
806+# Compilation of the module ptj_bias
807+#
808+ptj_bias.o: ptj_bias.f ../bias.inc
809+ $(FC) $(FFLAGS) $(LDFLAGS) -c -o ptj_bias.o ptj_bias.f
810+
811+ptj_bias: ptj_bias.o
812+ $(call CREATELIB, $(BIASLIBDIR)$(BIASLIBRARY), $^)
813+
814+#
815+# List of the requirements for this module.
816+# 'VALID' is the keyword that *must* be returned if everything is in order.
817+#
818+requirements:
819+ifeq ($(shell $(call CHECK_MG5AMC_VERSION,2.4.2)),True)
820+ @echo "VALID"
821+else
822+ @echo "Error:: MG5aMC is not recent enough (found "$(MG5AMC_VERSION)")"
823+ @echo "FAIL"
824+endif
825
826=== added file 'Template/LO/Source/BIAS/ptj_bias/ptj_bias.f'
827--- Template/LO/Source/BIAS/ptj_bias/ptj_bias.f 1970-01-01 00:00:00 +0000
828+++ Template/LO/Source/BIAS/ptj_bias/ptj_bias.f 2016-11-04 09:43:15 +0000
829@@ -0,0 +1,101 @@
830+C ************************************************************
831+C Source for the library implementing a bias function that
832+C populates the large pt tale of the leading jet.
833+C
834+C The two options of this subroutine, that can be set in
835+C the run card are:
836+C > (double precision) ptj_bias_target_ptj : target ptj value
837+C > (double precision) ptj_bias_enhancement_power : exponent
838+C
839+C Schematically, the functional form of the enhancement is
840+C bias_wgt = [ptj(evt)/mean_ptj]^enhancement_power
841+C ************************************************************
842+C
843+C The following lines are read by MG5aMC to set what are the
844+C relevant parameters for this bias module.
845+C
846+C parameters = {'ptj_bias_target_ptj': 1000.0,
847+C 'ptj_bias_enhancement_power': 4.0}
848+C
849+
850+ subroutine bias_wgt(p, original_weight, bias_weight)
851+ implicit none
852+C
853+C Parameters
854+C
855+ include '../../maxparticles.inc'
856+ include '../../nexternal.inc'
857+
858+C
859+C Arguments
860+C
861+ double precision p(0:3,nexternal)
862+ double precision original_weight, bias_weight
863+C
864+C local variables
865+C
866+ integer i
867+ double precision ptj(nexternal)
868+ double precision max_ptj
869+c
870+c local variables defined in the run_card
871+c
872+ double precision ptj_bias_target_ptj
873+ double precision ptj_bias_enhancement_power
874+C
875+C Global variables
876+C
877+C
878+C Mandatory common block to be defined in bias modules
879+C
880+ double precision stored_bias_weight
881+ data stored_bias_weight/1.0d0/
882+ logical impact_xsec, requires_full_event_info
883+C We only want to bias distributions, but not impact the xsec.
884+ data impact_xsec/.False./
885+C Of course this module does not require the full event
886+C information (color, resonances, helicities, etc..)
887+ data requires_full_event_info/.False./
888+ common/bias/stored_bias_weight,impact_xsec,
889+ & requires_full_event_info
890+C
891+C Accessingt the details of the event
892+C
893+ logical is_a_j(nexternal),is_a_l(nexternal),
894+ & is_a_b(nexternal),is_a_a(nexternal),
895+ & is_a_onium(nexternal),is_a_nu(nexternal),
896+ & is_heavy(nexternal),do_cuts(nexternal)
897+ common/to_specisa/is_a_j,is_a_a,is_a_l,is_a_b,is_a_nu,
898+ & is_heavy,is_a_onium,do_cuts
899+
900+C
901+C Setup the value of the parameters from the run_card
902+C
903+ include '../bias.inc'
904+
905+C --------------------
906+C BEGIN IMPLEMENTATION
907+C --------------------
908+
909+ do i=1,nexternal
910+ ptj(i)=-1.0d0
911+ if (is_a_j(i)) then
912+ ptj(i)=sqrt(p(1,i)**2+p(2,i)**2)
913+ endif
914+ enddo
915+
916+ max_ptj=-1.0d0
917+ do i=1,nexternal
918+ max_ptj = max(max_ptj,ptj(i))
919+ enddo
920+ if (max_ptj.lt.0.0d0) then
921+ bias_weight = 1.0d0
922+ return
923+ endif
924+
925+ bias_weight = (max_ptj/ptj_bias_target_ptj)
926+ & **ptj_bias_enhancement_power
927+
928+ return
929+
930+ end subroutine bias_wgt
931
932=== modified file 'Template/LO/Source/cuts.inc'
933--- Template/LO/Source/cuts.inc 2015-04-09 01:31:09 +0000
934+++ Template/LO/Source/cuts.inc 2016-11-04 09:43:15 +0000
935@@ -88,6 +88,10 @@
936 REAL*8 KT_DURHAM, D_PARAMETER
937 LOGICAL DO_KT_DURHAM
938 COMMON /JET_MEASURE_CUTS/ KT_DURHAM, D_PARAMETER
939-
940-
941-
942\ No newline at end of file
943+
944+C COMMON BLOCK FOR PYTHIA JET MEASURE CUT
945+ REAL*8 PT_LUND
946+ COMMON /PYTHIA_MEASURE_CUTS/ PT_LUND
947+
948+
949+
950
951=== added file 'Template/LO/Source/lhe_event_infos.inc'
952--- Template/LO/Source/lhe_event_infos.inc 1970-01-01 00:00:00 +0000
953+++ Template/LO/Source/lhe_event_infos.inc 2016-11-04 09:43:15 +0000
954@@ -0,0 +1,16 @@
955+ integer jpart(7,-nexternal+3:2*nexternal-3)
956+ double precision pb(0:4,-nexternal+3:2*nexternal-3)
957+ integer isym(nexternal,99),jsym, npart
958+ double precision sscale,aaqcd,aaqed
959+ character*1000 buff
960+ character*(s_bufflen) s_buff(7)
961+ integer nclus
962+ character*(clus_bufflen) buffclus(nexternal)
963+ character*(maxEventLength) event_record
964+ logical AlreadySetInBiasModule
965+
966+ common/to_lhe_event_info/jpart,pb,s_buff,buff,nclus,buffclus,event_record,
967+ & sscale,aaqcd,aaqed,isym,jsym,npart,AlreadySetInBiasModule
968+
969+ integer ngroup
970+ common/to_group/ngroup
971
972=== modified file 'Template/LO/Source/make_opts'
973--- Template/LO/Source/make_opts 2016-07-01 22:45:47 +0000
974+++ Template/LO/Source/make_opts 2016-11-04 09:43:15 +0000
975@@ -2,11 +2,16 @@
976 DEFAULT_F_COMPILER=gfortran
977 MACFLAG=-mmacosx-version-min=10.7
978 DEFAULT_CPP_COMPILER=clang
979+MG5AMC_VERSION=SpecifiedByMG5aMCAtRunTime
980 STDLIB=-lc++
981+PYTHIA8_PATH=NotInstalled
982 STDLIB_FLAG=-stdlib=libc++
983 #end_of_make_opts_variables
984+
985+BIASLIBDIR=../../../lib/
986+BIASLIBRARY=libbias.$(libext)
987+
988 # Rest of the makefile
989-
990 ifeq ($(origin FFLAGS),undefined)
991 FFLAGS= -O -w -fbounds-check -fPIC
992 #FFLAGS+= -g -fbounds-check -ffpe-trap=invalid,zero,overflow,underflow,denormal -Wall
993@@ -90,4 +95,9 @@
994 else
995 alfas_functions=alfas_functions
996 llhapdf=
997-endif
998\ No newline at end of file
999+endif
1000+
1001+# Helper function to check MG5 version
1002+define CHECK_MG5AMC_VERSION
1003+python -c 'import re; from distutils.version import StrictVersion; print StrictVersion("$(MG5AMC_VERSION)") >= StrictVersion("$(1)") if re.match("^[\d\.]+$$","$(MG5AMC_VERSION)") else True;'
1004+endef
1005\ No newline at end of file
1006
1007=== modified file 'Template/LO/Source/run.inc'
1008--- Template/LO/Source/run.inc 2015-04-02 22:56:24 +0000
1009+++ Template/LO/Source/run.inc 2016-11-04 09:43:15 +0000
1010@@ -63,3 +63,11 @@
1011 C
1012 logical MC_grouped_subproc
1013 common/to_MC_grouped_subproc/MC_grouped_subproc
1014+
1015+C
1016+C Controls what are the PDGs included in the CKKWl merging procedure, i.e. what
1017+C are the PDGs subject to the ktdurham cut
1018+C
1019+ integer pdgs_for_merging_cut(0:1000)
1020+ common/TO_MERGE/pdgs_for_merging_cut
1021+
1022
1023=== modified file 'Template/LO/Source/rw_events.f'
1024--- Template/LO/Source/rw_events.f 2014-10-07 13:31:57 +0000
1025+++ Template/LO/Source/rw_events.f 2016-11-04 09:43:15 +0000
1026@@ -30,7 +30,6 @@
1027 character*(s_bufflen) s_buff(*)
1028 integer nclus
1029 character*(clus_bufflen) buffclus(*)
1030-
1031 c
1032 c Local
1033 c
1034@@ -46,6 +45,10 @@
1035
1036 data lun_ban/37/
1037 data banner_open/.false./
1038+
1039+ double precision bias_weight
1040+ logical impact_xsec
1041+ common/bias/bias_weight,impact_xsec
1042 c-----
1043 c Begin Code
1044 c-----
1045@@ -80,6 +83,21 @@
1046 buff=''
1047 endif
1048 endif
1049+
1050+c Reading the bias weight (if present)
1051+ read(lun,'(a300)',end=99,err=99) buftmp
1052+ if(buftmp(1:6).ne.'<rwgt>') then
1053+ backspace(lun)
1054+ bias_weight = 1.0d0
1055+ else
1056+ do while(buftmp(1:7).ne.'</rwgt>')
1057+ read(lun,'(a300)',end=99,err=99) buftmp
1058+ if (buftmp(1:16).eq."<wgt id='bias'> ") then
1059+ read(buftmp(17:31),'(1e15.7)') bias_weight
1060+ endif
1061+ enddo
1062+ endif
1063+
1064 c Systematics info
1065 read(lun,'(a)',end=99,err=99) s_buff(1)
1066 if(s_buff(1).ne.'<mgrwt>') then
1067@@ -114,9 +132,103 @@
1068 55 format(i3,5e19.11)
1069 end
1070
1071+ subroutine write_event_to_stream(evt_record,P,wgt,nexternal,ic,
1072+ & ievent,scale,aqcd, aqed,buff,u_syst,s_buff,nclus,buffclus)
1073+c********************************************************************
1074+C This an *exact* copy of write_event, except that it writes it
1075+C to a character array argument as opposed to an I/O stream.
1076+c********************************************************************
1077+ implicit none
1078+
1079+ include 'maxparticles.inc'
1080+ include 'run_config.inc'
1081+c
1082+c parameters
1083+c
1084+ double precision pi
1085+ parameter (pi = 3.1415926d0)
1086+c
1087+c Arguments
1088+c
1089+ character*(maxEventLength) evt_record
1090+ integer ievent
1091+ integer nexternal, ic(7,*)
1092+ double precision P(0:4,*),wgt
1093+ double precision aqcd, aqed, scale
1094+ character*1000 buff
1095+ logical u_syst
1096+ character*(s_bufflen) s_buff(*)
1097+ integer nclus
1098+ character*(clus_bufflen) buffclus(*)
1099+c
1100+c Local
1101+c
1102+ integer i,j,k
1103+ character*(maxEventLength) largeBuff
1104+c
1105+c Global
1106+c
1107+ double precision bias_weight
1108+ logical impact_xsec
1109+ common/bias/bias_weight,impact_xsec
1110+
1111+c-----
1112+c Begin Code
1113+c-----
1114+c aqed= gal(1)*gal(1)/4d0/pi
1115+c aqcd = g*g/4d0/pi
1116+ write(largeBuff,'(a)') '<event>'
1117+ evt_record=trim(evt_record)//trim(largeBuff)
1118+ write(largeBuff,'(i2,i4,e16.7e3,3e15.7)') nexternal,ievent,wgt,scale,
1119+ $ aqed,aqcd
1120+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1121+ do i=1,nexternal
1122+ write(largeBuff,51) ic(1,i),ic(6,i),(ic(j,i),j=2,5),
1123+ $ (p(j,i),j=1,3),p(0,i),p(4,i),0.,real(ic(7,i))
1124+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1125+ enddo
1126+ if(buff(1:7).eq.'<scales') then
1127+ write(largeBuff,'(a)') buff(1:len_trim(buff))
1128+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1129+ endif
1130+ if(buff(1:1).eq.'#') then
1131+ write(largeBuff,'(a)') buff(1:len_trim(buff))
1132+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1133+ endif
1134+ if(.not.impact_xsec) then
1135+ write(largeBuff,'(a)') '<rwgt>'
1136+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1137+ write(largeBuff,'(a16,1e15.7,a6)') "<wgt id='bias'> ",
1138+ $ bias_weight,"</wgt>"
1139+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1140+ write(largeBuff,'(a)') '</rwgt>'
1141+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1142+ endif
1143+ if(u_syst)then
1144+ do i=1,7
1145+ write(largeBuff,'(a)') s_buff(i)(1:len_trim(s_buff(i)))
1146+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1147+ enddo
1148+ endif
1149+ do i=1,nclus
1150+ write(largeBuff,'(a)') buffclus(i)(1:len_trim(buffclus(i)))
1151+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1152+ enddo
1153+ write(largeBuff,'(a)') '</event>'
1154+ evt_record=trim(evt_record)//CHAR(13)//CHAR(10)//trim(largeBuff)
1155+ return
1156+ 51 format(i9,5i5,5e19.11,f3.0,f4.0)
1157+ end
1158+
1159+
1160 subroutine write_event(lun,P,wgt,nexternal,ic,ievent,scale,aqcd,
1161 $ aqed,buff,u_syst,s_buff,nclus,buffclus)
1162 c********************************************************************
1163+c
1164+c /!\ When making changes to this subroutine, make sure to accordingly
1165+c update write_event_to_stream
1166+c
1167+c********************************************************************
1168 c Writes one event from data file #lun according to LesHouches
1169 c ic(1,*) = Particle ID
1170 c ic(2.*) = Mothup(1)
1171@@ -154,6 +266,9 @@
1172 c
1173 c Global
1174 c
1175+ double precision bias_weight
1176+ logical impact_xsec
1177+ common/bias/bias_weight,impact_xsec
1178
1179 c-----
1180 c Begin Code
1181@@ -162,13 +277,20 @@
1182 c aqcd = g*g/4d0/pi
1183
1184 write(lun,'(a)') '<event>'
1185- write(lun,'(i2,i4,4e15.7)') nexternal,ievent,wgt,scale,aqed,aqcd
1186+ write(lun,'(i2,i4,e16.7e3,3e15.7)') nexternal,ievent,wgt,scale,aqed,aqcd
1187+ write(*,'(i2,i4,e15.7e3,3e15.7)') nexternal,ievent,wgt,scale,aqed,aqcd
1188 do i=1,nexternal
1189 write(lun,51) ic(1,i),ic(6,i),(ic(j,i),j=2,5),
1190 $ (p(j,i),j=1,3),p(0,i),p(4,i),0.,real(ic(7,i))
1191 enddo
1192 if(buff(1:7).eq.'<scales') write(lun,'(a)') buff(1:len_trim(buff))
1193- if(buff(1:1).eq.'#') write(lun,'(a)') buff(1:len_trim(buff))
1194+ if(buff(1:1).eq.'#') write(lun,'(a)') buff(1:len_trim(buff))
1195+ if(.not.impact_xsec) then
1196+ write(lun,'(a)') '<rwgt>'
1197+ write(lun,'(a16,1e15.7,a6)') "<wgt id='bias'> ",bias_weight,
1198+ $ "</wgt>"
1199+ write(lun,'(a)') '</rwgt>'
1200+ endif
1201 if(u_syst)then
1202 do i=1,7
1203 write(lun,'(a)') s_buff(i)(1:len_trim(s_buff(i)))
1204
1205=== modified file 'Template/LO/SubProcesses/cuts.f'
1206--- Template/LO/SubProcesses/cuts.f 2016-06-07 09:33:55 +0000
1207+++ Template/LO/SubProcesses/cuts.f 2016-11-04 09:43:15 +0000
1208@@ -1,1319 +1,1750 @@
1209- logical function pass_point(p)
1210-c************************************************************************
1211-c This function is called from sample to see if it needs to
1212-c bother calculating the weight from all the different conficurations
1213-c You can either just return true, or have it call passcuts
1214-c************************************************************************
1215- implicit none
1216-c
1217-c Arguments
1218-c
1219- double precision p
1220-c
1221-c External
1222-c
1223- logical passcuts
1224- external passcuts
1225-c-----
1226-c Begin Code
1227-c-----
1228- pass_point = .true.
1229-c pass_point = passcuts(p)
1230- end
1231-C
1232- LOGICAL FUNCTION PASSCUTS(P)
1233-C**************************************************************************
1234-C INPUT:
1235-C P(0:3,1) MOMENTUM OF INCOMING PARTON
1236-C P(0:3,2) MOMENTUM OF INCOMING PARTON
1237-C P(0:3,3) MOMENTUM OF ...
1238-C ALL MOMENTA ARE IN THE REST FRAME!!
1239-C COMMON/JETCUTS/ CUTS ON JETS
1240-C OUTPUT:
1241-C TRUE IF EVENTS PASSES ALL CUTS LISTED
1242-C**************************************************************************
1243- IMPLICIT NONE
1244-c
1245-c Constants
1246-c
1247- include 'genps.inc'
1248- include 'nexternal.inc'
1249-C
1250-C ARGUMENTS
1251-C
1252- REAL*8 P(0:3,nexternal)
1253-
1254-C
1255-C LOCAL
1256-C
1257- LOGICAL FIRSTTIME,FIRSTTIME2,pass_bw,notgood,good,foundheavy
1258- LOGICAL DEBUG
1259- integer i,j,njets,nheavyjets,nleptons,hardj1,hardj2
1260- REAL*8 XVAR,ptmax1,ptmax2,htj,tmp,inclht
1261- real*8 ptemp(0:3), ptemp2(0:3)
1262- character*20 formstr
1263-C
1264-C PARAMETERS
1265-C
1266- real*8 PI
1267- parameter( PI = 3.14159265358979323846d0 )
1268-C
1269-C EXTERNAL
1270-C
1271- REAL*8 R2,DOT,ET,RAP,DJ,SumDot,pt,ALPHAS,PtDot
1272- logical cut_bw,setclscales
1273- external R2,DOT,ET,RAP,DJ,SumDot,pt,ALPHAS,cut_bw,setclscales,PtDot
1274-C
1275-C GLOBAL
1276-C
1277- include 'run.inc'
1278- include 'cuts.inc'
1279-
1280- double precision ptjet(nexternal)
1281- double precision ptheavyjet(nexternal)
1282- double precision ptlepton(nexternal)
1283- double precision temp
1284-
1285-C VARIABLES TO SPECIFY JETS
1286- DOUBLE PRECISION PJET(NEXTERNAL,0:3)
1287- DOUBLE PRECISION PTMIN
1288- DOUBLE PRECISION PT1,PT2
1289- INTEGER K,J1,J2
1290-
1291-C VARIABLES FOR KT CUT
1292- DOUBLE PRECISION PTNOW,COSTH,PABS1,PABS2
1293- DOUBLE PRECISION ETA1,ETA2,COSH_DETA,COS_DPHI,KT1SQ,KT2SQ, DPHI
1294-
1295- double precision etmin(nincoming+1:nexternal),etamax(nincoming+1:nexternal)
1296- double precision emin(nincoming+1:nexternal)
1297- double precision r2min(nincoming+1:nexternal,nincoming+1:nexternal)
1298- double precision s_min(nexternal,nexternal)
1299- double precision etmax(nincoming+1:nexternal),etamin(nincoming+1:nexternal)
1300- double precision emax(nincoming+1:nexternal)
1301- double precision r2max(nincoming+1:nexternal,nincoming+1:nexternal)
1302- double precision s_max(nexternal,nexternal)
1303- double precision ptll_min(nexternal,nexternal),ptll_max(nexternal,nexternal)
1304- double precision inclHtmin,inclHtmax
1305- common/to_cuts/ etmin, emin, etamax, r2min, s_min,
1306- $ etmax, emax, etamin, r2max, s_max, ptll_min, ptll_max, inclHtmin,inclHtmax
1307-
1308- double precision ptjmin4(4),ptjmax4(4),htjmin4(2:4),htjmax4(2:4)
1309- logical jetor
1310- common/to_jet_cuts/ ptjmin4,ptjmax4,htjmin4,htjmax4,jetor
1311-
1312- double precision ptlmin4(4),ptlmax4(4)
1313- common/to_lepton_cuts/ ptlmin4,ptlmax4
1314-
1315-c
1316-c Special cuts
1317-c
1318-
1319- integer lbw(0:nexternal) !Use of B.W.
1320- common /to_BW/ lbw
1321-C
1322-C SPECIAL CUTS
1323-C
1324- LOGICAL IS_A_J(NEXTERNAL),IS_A_L(NEXTERNAL)
1325- LOGICAL IS_A_B(NEXTERNAL),IS_A_A(NEXTERNAL),IS_A_ONIUM(NEXTERNAL)
1326- LOGICAL IS_A_NU(NEXTERNAL),IS_HEAVY(NEXTERNAL)
1327- logical do_cuts(nexternal)
1328- COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
1329- . IS_A_ONIUM, do_cuts
1330-C
1331-C Keep track of whether cuts already calculated for this event
1332-C
1333- LOGICAL CUTSDONE,CUTSPASSED
1334- COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
1335- DATA CUTSDONE,CUTSPASSED/.FALSE.,.FALSE./
1336-
1337-C $B$ MW_NEW_DEF $E$ !this is a tag for MadWeight
1338-
1339- double precision xqcutij(nexternal,nexternal),xqcuti(nexternal)
1340- common/to_xqcuts/xqcutij,xqcuti
1341-
1342-c jet cluster algorithm
1343- integer nQCD !,NJET,JET(nexternal)
1344-c double precision plab(0:3, nexternal)
1345- double precision pQCD(0:3,nexternal)!,PJET(0:3,nexternal)
1346-c double precision rfj,sycut,palg,fastjetdmerge
1347-c integer njet_eta
1348-c Photon isolation
1349- integer nph,nem,nin
1350- double precision ptg,chi_gamma_iso,iso_getdrv40
1351- double precision Etsum(0:nexternal)
1352- real drlist(nexternal)
1353- double precision pgamma(0:3,nexternal),pem(0:3,nexternal)
1354- logical alliso
1355-C Sort array of results: ismode>0 for real, isway=0 for ascending order
1356- integer ismode,isway,izero,isorted(nexternal)
1357- parameter (ismode=1)
1358- parameter (isway=0)
1359- parameter (izero=0)
1360-
1361- include 'coupl.inc'
1362-C
1363-C
1364-c
1365- DATA FIRSTTIME,FIRSTTIME2/.TRUE.,.TRUE./
1366-
1367-c put momenta in common block for couplings.f
1368- double precision pp(0:3,max_particles)
1369- common /momenta_pp/pp
1370-
1371- DATA DEBUG/.FALSE./
1372-
1373-C-----
1374-C BEGIN CODE
1375-C-----
1376-
1377-
1378-
1379- PASSCUTS=.TRUE. !EVENT IS OK UNLESS OTHERWISE CHANGED
1380- IF (FIRSTTIME) THEN
1381- FIRSTTIME=.FALSE.
1382-c Preparation for reweighting by setting up clustering by diagrams
1383- call initcluster()
1384-c
1385-c
1386- write(formstr,'(a,i2.2,a)')'(a10,',nexternal,'i8)'
1387- write(*,formstr) 'Particle',(i,i=nincoming+1,nexternal)
1388- write(formstr,'(a,i2.2,a)')'(a10,',nexternal,'f8.1)'
1389- write(*,formstr) 'Et >',(etmin(i),i=nincoming+1,nexternal)
1390- write(*,formstr) 'E >',(emin(i),i=nincoming+1,nexternal)
1391- write(*,formstr) 'Eta <',(etamax(i),i=nincoming+1,nexternal)
1392- write(*,formstr) 'xqcut: ',(xqcuti(i),i=nincoming+1,nexternal)
1393- write(formstr,'(a,i2.2,a)')'(a,i2,a,',nexternal,'f8.1)'
1394- do j=nincoming+1,nexternal-1
1395- write(*,formstr) 'd R #',j,' >',(-0.0,i=nincoming+1,j),
1396- & (r2min(i,j),i=j+1,nexternal)
1397- do i=j+1,nexternal
1398- r2min(i,j)=r2min(i,j)*dabs(r2min(i,j)) !Since r2 returns distance squared
1399- r2max(i,j)=r2max(i,j)*dabs(r2max(i,j))
1400- enddo
1401- enddo
1402- do j=nincoming+1,nexternal-1
1403- write(*,formstr) 's min #',j,'>',
1404- & (s_min(i,j),i=nincoming+1,nexternal)
1405- enddo
1406- do j=nincoming+1,nexternal-1
1407- write(*,formstr) 'xqcutij #',j,'>',
1408- & (xqcutij(i,j),i=nincoming+1,nexternal)
1409- enddo
1410-
1411-cc
1412-cc Set the strong coupling
1413-cc
1414-c call set_ren_scale(P,scale)
1415-c
1416-cc Check that the user funtions for setting the scales
1417-cc have been edited if the choice of an event-by-event
1418-cc scale choice has been made
1419-c
1420-c if(.not.fixed_ren_scale) then
1421-c if(scale.eq.0d0) then
1422-c write(6,*)
1423-c write(6,*) '* >>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<*'
1424-c write(6,*) ' Dynamical renormalization scale choice '
1425-c write(6,*) ' selected but user subroutine'
1426-c write(6,*) ' set_ren_scale not edited in file:setpara.f'
1427-c write(6,*) ' Switching to a fixed_ren_scale choice'
1428-c write(6,*) ' with scale=zmass'
1429-c scale=91.2d0
1430-c write(6,*) 'scale=',scale
1431-c fixed_ren_scale=.true.
1432-c call set_ren_scale(P,scale)
1433-c endif
1434-c endif
1435-
1436-c if(.not.fixed_fac_scale) then
1437-c call set_fac_scale(P,q2fact)
1438-c if(q2fact(1).eq.0d0.or.q2fact(2).eq.0d0) then
1439-c write(6,*)
1440-c write(6,*) '* >>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<*'
1441-c write(6,*) ' Dynamical renormalization scale choice '
1442-c write(6,*) ' selected but user subroutine'
1443-c write(6,*) ' set_fac_scale not edited in file:setpara.f'
1444-c write(6,*) ' Switching to a fixed_fac_scale choice'
1445-c write(6,*) ' with q2fact(i)=zmass**2'
1446-c fixed_fac_scale=.true.
1447-c q2fact(1)=91.2d0**2
1448-c q2fact(2)=91.2d0**2
1449-c write(6,*) 'scales=',q2fact(1),q2fact(2)
1450-c endif
1451-c endif
1452-
1453- if(fixed_ren_scale) then
1454- G = SQRT(4d0*PI*ALPHAS(scale))
1455- call update_as_param()
1456- endif
1457-
1458-c Put momenta in the common block to zero to start
1459- do i=0,3
1460- do j=1,max_particles
1461- pp(i,j) = 0d0
1462- enddo
1463- enddo
1464-
1465- ENDIF ! IF FIRSTTIME
1466-
1467- IF (CUTSDONE) THEN
1468- PASSCUTS=CUTSPASSED
1469- RETURN
1470- ENDIF
1471- CUTSDONE=.TRUE.
1472-c CUTSPASSED=.FALSE.
1473-
1474-c
1475-c Make sure have reasonable 4-momenta
1476-c
1477- if (p(0,1) .le. 0d0) then
1478- passcuts=.false.
1479- return
1480- endif
1481-
1482-c Also make sure there's no INF or NAN
1483- do i=1,nexternal
1484- do j=0,3
1485- if(p(j,i).gt.1d32.or.p(j,i).ne.p(j,i))then
1486- passcuts=.false.
1487- return
1488- endif
1489- enddo
1490- enddo
1491-
1492-c
1493-c Limit S_hat
1494-c
1495-c if (x1*x2*stot .gt. 500**2) then
1496-c passcuts=.false.
1497-c return
1498-c endif
1499-
1500-C $B$ DESACTIVATE_CUT $E$ !This is a tag for MadWeight
1501-
1502- if(debug) write (*,*) '============================='
1503- if(debug) write (*,*) ' EVENT STARTS TO BE CHECKED '
1504- if(debug) write (*,*) '============================='
1505-c
1506-c p_t min & max cuts
1507-c
1508- do i=nincoming+1,nexternal
1509- if(debug) write (*,*) 'pt(',i,')=',pt(p(0,i)),' ',etmin(i),
1510- $ ':',etmax(i)
1511- notgood=(pt(p(0,i)) .lt. etmin(i)).or.
1512- & (etmax(i).ge.0d0.and.pt(p(0,i)) .gt. etmax(i))
1513- if (notgood) then
1514- if(debug) write (*,*) i,' -> fails'
1515- passcuts=.false.
1516- return
1517- endif
1518- enddo
1519-c
1520-c missing ET min & max cut + Invariant mass of leptons and neutrino
1521-c nb: missing Et defined as the vector sum over the neutrino's pt
1522-c
1523-c-- reset ptemp(0:3)
1524- do j=0,3
1525- ptemp(j)=0 ! for the neutrino
1526- ptemp2(j)=0 ! for the leptons
1527- enddo
1528-c- sum over the momenta
1529- do i=nincoming+1,nexternal
1530- if(is_a_nu(i)) then
1531- if(debug) write (*,*) i,' -> neutrino '
1532- do j=0,3
1533- ptemp(j)=ptemp(j)+p(j,i)
1534- enddo
1535- elseif(is_a_l(i)) then
1536- if(debug) write (*,*) i,' -> lepton '
1537- do j=0,3
1538- ptemp2(j)=ptemp2(j)+p(j,i)
1539- enddo
1540- endif
1541-
1542- enddo
1543-c- check the et
1544- if(debug.and.ptemp(0).eq.0d0) write (*,*) 'No et miss in event'
1545- if(debug.and.ptemp(0).gt.0d0) write (*,*) 'Et miss =',pt(ptemp(0)),' ',misset,':',missetmax
1546- if(debug.and.ptemp2(0).eq.0d0) write (*,*) 'No leptons in event'
1547- if(debug.and.ptemp(0).gt.0d0) write (*,*) 'Energy of leptons =',pt(ptemp2(0))
1548- if(ptemp(0).gt.0d0) then
1549- notgood=(pt(ptemp(0)) .lt. misset).or.
1550- & (missetmax.ge.0d0.and.pt(ptemp(0)) .gt. missetmax)
1551- if (notgood) then
1552- if(debug) write (*,*) ' missing et cut -> fails'
1553- passcuts=.false.
1554- return
1555- endif
1556- endif
1557- if (mmnl.gt.0d0.or.mmnlmax.ge.0d0)then
1558- if(dsqrt(SumDot(ptemp,ptemp2,1d0)).lt.mmnl.or.mmnlmax.ge.0d0.and.dsqrt(SumDot(ptemp, ptemp2,1d0)).gt.mmnlmax) then
1559- if(debug) write (*,*) 'lepton invariant mass -> fails'
1560- passcuts=.false.
1561- return
1562- endif
1563- endif
1564-c
1565-c pt cut on heavy particles
1566-c gives min(pt) for (at least) one heavy particle
1567-c
1568- if(ptheavy.gt.0d0)then
1569- passcuts=.false.
1570- foundheavy=.false.
1571- do i=nincoming+1,nexternal
1572- if(is_heavy(i)) then
1573- if(debug) write (*,*) i,' -> heavy '
1574- foundheavy=.true.
1575- if(pt(p(0,i)).gt.ptheavy) passcuts=.true.
1576- endif
1577- enddo
1578-
1579- if(.not.passcuts.and.foundheavy)then
1580- if(debug) write (*,*) ' heavy particle cut -> fails'
1581- return
1582- else
1583- passcuts=.true.
1584- endif
1585- endif
1586-c
1587-c E min & max cuts
1588-c
1589- do i=nincoming+1,nexternal
1590- if(debug) write (*,*) 'p(0,',i,')=',p(0,i),' ',emin(i),':',emax(i)
1591- notgood=(p(0,i) .le. emin(i)).or.
1592- & (emax(i).ge.0d0 .and. p(0,i) .gt. emax(i))
1593- if (notgood) then
1594- if(debug) write (*,*) i,' -> fails'
1595- passcuts=.false.
1596- return
1597- endif
1598- enddo
1599-c
1600-c Rapidity min & max cuts
1601-c
1602- do i=nincoming+1,nexternal
1603- if(debug) write (*,*) 'abs(rap(',i,'))=',abs(rap(p(0,i))),' ',etamin(i),':',etamax(i)
1604- notgood=(etamax(i).ge.0.and.abs(rap(p(0,i))) .gt. etamax(i)).or.
1605- & (abs(rap(p(0,i))) .lt. etamin(i))
1606- if (notgood) then
1607- if(debug) write (*,*) i,' -> fails'
1608- passcuts=.false.
1609- return
1610- endif
1611- enddo
1612-c
1613-c DeltaR min & max cuts
1614-c
1615- do i=nincoming+1,nexternal-1
1616- do j=i+1,nexternal
1617- if(debug) write (*,*) 'r2(',i, ',' ,j,')=',dsqrt(r2(p(0,i),p(0,j)))
1618- if(debug) write (*,*) dsqrt(r2min(j,i)),dsqrt(r2max(j,i))
1619- if(r2min(j,i).gt.0.or.r2max(j,i).ge.0d0) then
1620- tmp=r2(p(0,i),p(0,j))
1621- notgood=(tmp .lt. r2min(j,i)).or.
1622- $ (r2max(j,i).ge.0d0 .and. tmp .gt. r2max(j,i))
1623- if (notgood) then
1624- if(debug) write (*,*) i,j,' -> fails'
1625- passcuts=.false.
1626- return
1627- endif
1628- endif
1629- enddo
1630- enddo
1631-
1632-
1633-c s-channel min & max pt of sum of 4-momenta
1634-c
1635- do i=nincoming+1,nexternal-1
1636- do j=i+1,nexternal
1637- if(debug)write (*,*) 'ptll(',i,',',j,')=',PtDot(p(0,i),p(0,j))
1638- if(debug)write (*,*) ptll_min(j,i),ptll_max(j,i)
1639- if(ptll_min(j,i).gt.0.or.ptll_max(j,i).ge.0d0) then
1640- tmp=PtDot(p(0,i),p(0,j))
1641- notgood=(tmp .lt. ptll_min(j,i).or.
1642- $ ptll_max(j,i).ge.0d0 .and. tmp.gt.ptll_max(j,i))
1643- if (notgood) then
1644- if(debug) write (*,*) i,j,' -> fails'
1645- passcuts=.false.
1646- return
1647- endif
1648- endif
1649- enddo
1650- enddo
1651-
1652-
1653-
1654-
1655-c
1656-c s-channel min & max invariant mass cuts
1657-c
1658- do i=nincoming+1,nexternal-1
1659- do j=i+1,nexternal
1660- if(debug) write (*,*) 's(',i,',',j,')=',Sumdot(p(0,i),p(0,j),+1d0)
1661- if(debug) write (*,*) s_min(j,i),s_max(j,i)
1662- if(s_min(j,i).gt.0.or.s_max(j,i).ge.0d0) then
1663- tmp=SumDot(p(0,i),p(0,j),+1d0)
1664- if(s_min(j,i).le.s_max(j,i) .or. s_max(j,i).lt.0d0)then
1665- notgood=(tmp .lt. s_min(j,i).or.
1666- $ s_max(j,i).ge.0d0 .and. tmp .gt. s_max(j,i))
1667- if (notgood) then
1668- if(debug) write (*,*) i,j,' -> fails'
1669- passcuts=.false.
1670- return
1671- endif
1672- else
1673- notgood=(tmp .lt. s_min(j,i).and.tmp .gt. s_max(j,i))
1674- if (notgood) then
1675- if(debug) write (*,*) i,j,' -> fails'
1676- passcuts=.false.
1677- return
1678- endif
1679- endif
1680- endif
1681- enddo
1682- enddo
1683-C $B$DESACTIVATE_BW_CUT$B$ This is a Tag for MadWeight
1684-c
1685-c B.W. phase space cuts
1686-c
1687- pass_bw=cut_bw(p)
1688-c JA 4/8/11 always check pass_bw
1689- if ( pass_bw.and..not.CUTSPASSED) then
1690- passcuts=.false.
1691- if(debug) write (*,*) ' pass_bw -> fails'
1692- return
1693- endif
1694-C $E$DESACTIVATE_BW_CUT$E$ This is a Tag for MadWeight
1695- CUTSPASSED=.FALSE.
1696-C
1697-C maximal and minimal pt of the jets sorted by pt
1698-c
1699- njets=0
1700- nheavyjets=0
1701-
1702-c- fill ptjet with the pt's of the jets.
1703- do i=nincoming+1,nexternal
1704- if(is_a_j(i)) then
1705- njets=njets+1
1706- ptjet(njets)=pt(p(0,i))
1707- endif
1708- if(is_a_b(i)) then
1709- nheavyjets=nheavyjets+1
1710- ptheavyjet(nheavyjets)=pt(p(0,i))
1711- endif
1712-
1713- enddo
1714- if(debug) write (*,*) 'not yet ordered ',njets,' ',ptjet
1715-
1716-C----------------------------------------------------------------------------
1717-C DURHAM_KT CUT
1718-C----------------------------------------------------------------------------
1719- IF(NJETS.GT.0 .AND.KT_DURHAM.GT.0D0) THEN
1720-C RESET JET MOMENTA
1721- njets=0
1722- DO I=1,NEXTERNAL
1723- DO J=0,3
1724- PJET(I,J) = 0E0
1725- ENDDO
1726- ENDDO
1727-
1728- do i=nincoming+1,nexternal
1729- if(is_a_j(i).and.do_cuts(i)) then
1730- njets=njets+1
1731- DO J=0,3
1732- PJET(NJETS,J) = P(J,I)
1733- ENDDO
1734- endif
1735- enddo
1736-
1737-C DURHAM KT SEPARATION CUT
1738-
1739-
1740- PTMIN = EBEAM(1) + EBEAM(2)
1741-
1742- DO I=1,NJETS
1743-
1744-C PT WITH RESPECT TO Z AXIS FOR HADRONIC COLLISIONS
1745- IF ( (LPP(1).NE.0) .OR. (LPP(2).NE.0)) THEN
1746- PT1 = DSQRT(PJET(I,1)**2 + PJET(I,2)**2)
1747- PTMIN = MIN( PTMIN, PT1 )
1748- ENDIF
1749-
1750- DO J=I+1,NJETS
1751-C GET ANGLE BETWEEN JETS
1752- PABS1 = DSQRT(PJET(I,1)**2 + PJET(I,2)**2 + PJET(I,3)**2)
1753- PABS2 = DSQRT(PJET(J,1)**2 + PJET(J,2)**2 + PJET(J,3)**2)
1754-C CHECK IF 3-MOMENTA DO NOT VANISH
1755- IF(PABS1*PABS2 .NE. 0D0) THEN
1756- COSTH = ( PJET(I,1)*PJET(J,1) + PJET(I,2)*PJET(J,2) + PJET(I,3)*PJET(J,3) )/(PABS1*PABS2)
1757- ELSE
1758-C IF 3-MOMENTA VANISH, MAKE JET COSTH = 1D0 SO THAT JET MEASURE VANISHES
1759- COSTH = 1D0
1760- ENDIF
1761-C GET PT AND ETA OF JETS
1762- PT2 = DSQRT(PJET(J,1)**2 + PJET(J,2)**2)
1763- ETA1 = 0.5D0*LOG( (PJET(I,0) + PJET(I,3)) / (PJET(I,0) - PJET(I,3)) )
1764- ETA2 = 0.5D0*LOG( (PJET(J,0) + PJET(J,3)) / (PJET(J,0) - PJET(J,3)) )
1765-C GET COSH OF DELTA ETA, COS OF DELTA PHI
1766- COSH_DETA = DCOSH( ETA1 - ETA2 )
1767- COS_DPHI = ( PJET(I,1)*PJET(J,1) + PJET(I,2)*PJET(J,2) ) / (PT1*PT2)
1768- DPHI = DACOS( COS_DPHI )
1769- IF ( (LPP(1).EQ.0) .AND. (LPP(2).EQ.0)) THEN
1770-C KT FOR E+E- COLLISION
1771- PTNOW = DSQRT( 2D0*MIN(PJET(I,0)**2,PJET(J,0)**2)*( 1D0-COSTH ) )
1772- ELSE
1773-C HADRONIC KT, FASTJET DEFINITION
1774- PTNOW = DSQRT( MIN(PT1**2,PT2**2)*( (ETA1 - ETA2 )**2 + DPHI**2 )/(D_PARAMETER**2) )
1775- ENDIF
1776-
1777- PTMIN = MIN( PTMIN, PTNOW )
1778-
1779- ENDDO ! LOOP OVER NJET
1780-
1781- ENDDO ! LOOP OVER NJET
1782-
1783-C CHECK COMPATIBILITY WITH CUT
1784- IF( (PTMIN .LT. KT_DURHAM)) THEN
1785- PASSCUTS = .FALSE.
1786- RETURN
1787- ENDIF
1788- ENDIF ! IF NJETS.GT. 0 .AND. DO_KT_DURHAM
1789-
1790-C----------------------------------------------------------------------------
1791-C----------------------------------------------------------------------------
1792-
1793-
1794-
1795-c- check existance of jets if jet cuts are on
1796- if(njets.lt.1.and.(htjmin.gt.0.or.ptj1min.gt.0).or.
1797- $ njets.lt.2.and.ptj2min.gt.0.or.
1798- $ njets.lt.3.and.ptj3min.gt.0.or.
1799- $ njets.lt.4.and.ptj4min.gt.0)then
1800- if(debug) write (*,*) i, ' too few jets -> fails'
1801- passcuts=.false.
1802- return
1803- endif
1804-
1805-c - sort jet pts
1806- do i=1,njets-1
1807- do j=i+1,njets
1808- if(ptjet(j).gt.ptjet(i)) then
1809- temp=ptjet(i)
1810- ptjet(i)=ptjet(j)
1811- ptjet(j)=temp
1812- endif
1813- enddo
1814- enddo
1815- if(debug) write (*,*) 'ordered ',njets,' ',ptjet
1816-c
1817-c Use "and" or "or" prescriptions
1818-c
1819- inclht=0
1820-
1821- if(njets.gt.0) then
1822-
1823- notgood=.not.jetor
1824- if(debug) write (*,*) 'jetor :',jetor
1825- if(debug) write (*,*) '0',notgood
1826-
1827- do i=1,min(njets,4)
1828- if(debug) write (*,*) i,ptjet(i), ' ',ptjmin4(i),
1829- $ ':',ptjmax4(i)
1830- if(jetor) then
1831-c--- if one of the jets does not pass, the event is rejected
1832- notgood=notgood.or.(ptjmax4(i).ge.0d0 .and.
1833- $ ptjet(i).gt.ptjmax4(i)) .or.
1834- $ (ptjet(i).lt.ptjmin4(i))
1835- if(debug) write (*,*) i,' notgood total:', notgood
1836- else
1837-c--- all cuts must fail to reject the event
1838- notgood=notgood.and.(ptjmax4(i).ge.0d0 .and.
1839- $ ptjet(i).gt.ptjmax4(i) .or.
1840- $ (ptjet(i).lt.ptjmin4(i)))
1841- if(debug) write (*,*) i,' notgood total:', notgood
1842- endif
1843- enddo
1844-
1845-
1846- if (notgood) then
1847- if(debug) write (*,*) i, ' multiple pt -> fails'
1848- passcuts=.false.
1849- return
1850- endif
1851-
1852-c---------------------------
1853-c Ht cuts
1854-C---------------------------
1855- htj=ptjet(1)
1856-
1857- do i=2,njets
1858- htj=htj+ptjet(i)
1859- if(debug) write (*,*) i, 'htj ',htj
1860- if(debug.and.i.le.4) write (*,*) 'htmin ',i,' ', htjmin4(i),':',htjmax4(i)
1861- if(i.le.4)then
1862- if(htj.lt.htjmin4(i) .or.
1863- $ htjmax4(i).ge.0d0.and.htj.gt.htjmax4(i)) then
1864- if(debug) write (*,*) i, ' ht -> fails'
1865- passcuts=.false.
1866- return
1867- endif
1868- endif
1869- enddo
1870-
1871- if(htj.lt.htjmin.or.htjmax.ge.0d0.and.htj.gt.htjmax)then
1872- if(debug) write (*,*) i, ' htj -> fails'
1873- passcuts=.false.
1874- return
1875- endif
1876-
1877- inclht=htj
1878-
1879- endif !if there are jets
1880-
1881- if(nheavyjets.gt.0) then
1882- do i=1,nheavyjets
1883- inclht=inclht+ptheavyjet(i)
1884- enddo
1885- endif !if there are heavyjets
1886-
1887- if(inclht.lt.inclHtmin.or.
1888- $ inclHtmax.ge.0d0.and.inclht.gt.inclHtmax)then
1889- if(debug) write (*,*) ' inclhtmin=',inclHtmin,' -> fails'
1890- passcuts=.false.
1891- return
1892- endif
1893-
1894-C
1895-C maximal and minimal pt of the leptons sorted by pt
1896-c
1897- nleptons=0
1898-
1899- if(ptl1min.gt.0.or.ptl2min.gt.0.or.ptl3min.gt.0.or.ptl4min.gt.0.or.
1900- $ ptl1max.ge.0d0.or.ptl2max.ge.0d0.or.
1901- $ ptl3max.ge.0d0.or.ptl4max.ge.0d0) then
1902-
1903-c - fill ptlepton with the pt's of the leptons.
1904- do i=nincoming+1,nexternal
1905- if(is_a_l(i)) then
1906- nleptons=nleptons+1
1907- ptlepton(nleptons)=pt(p(0,i))
1908- endif
1909- enddo
1910- if(debug) write (*,*) 'not yet ordered ',njets,' ',ptjet
1911-
1912-c - check existance of leptons if lepton cuts are on
1913- if(nleptons.lt.1.and.ptl1min.gt.0.or.
1914- $ nleptons.lt.2.and.ptl2min.gt.0.or.
1915- $ nleptons.lt.3.and.ptl3min.gt.0.or.
1916- $ nleptons.lt.4.and.ptl4min.gt.0)then
1917- if(debug) write (*,*) i, ' too few leptons -> fails'
1918- passcuts=.false.
1919- return
1920- endif
1921-
1922-c - sort lepton pts
1923- do i=1,nleptons-1
1924- do j=i+1,nleptons
1925- if(ptlepton(j).gt.ptlepton(i)) then
1926- temp=ptlepton(i)
1927- ptlepton(i)=ptlepton(j)
1928- ptlepton(j)=temp
1929- endif
1930- enddo
1931- enddo
1932- if(debug) write (*,*) 'ordered ',nleptons,' ',ptlepton
1933-
1934- if(nleptons.gt.0) then
1935-
1936- notgood = .false.
1937- do i=1,min(nleptons,4)
1938- if(debug) write (*,*) i,ptlepton(i), ' ',ptlmin4(i),':',ptlmax4(i)
1939-c--- if one of the leptons does not pass, the event is rejected
1940- notgood=notgood.or.
1941- $ (ptlmax4(i).ge.0d0.and.ptlepton(i).gt.ptlmax4(i)).or.
1942- $ (ptlepton(i).lt.ptlmin4(i))
1943- if(debug) write (*,*) i,' notgood total:', notgood
1944- enddo
1945-
1946-
1947- if (notgood) then
1948- if(debug) write (*,*) i, ' multiple pt -> fails'
1949- passcuts=.false.
1950- return
1951- endif
1952- endif
1953- endif
1954-C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1955-C SPECIAL CUTS
1956-C<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1957-
1958-C REQUIRE AT LEAST ONE JET WITH PT>XPTJ
1959-
1960- IF(xptj.gt.0d0) THEN
1961- xvar=0
1962- do i=nincoming+1,nexternal
1963- if(is_a_j(i)) xvar=max(xvar,pt(p(0,i)))
1964- enddo
1965- if (xvar .lt. xptj) then
1966- passcuts=.false.
1967- return
1968- endif
1969- ENDIF
1970-
1971-C REQUIRE AT LEAST ONE PHOTON WITH PT>XPTA
1972-
1973- IF(xpta.gt.0d0) THEN
1974- xvar=0
1975- do i=nincoming+1,nexternal
1976- if(is_a_a(i)) xvar=max(xvar,pt(p(0,i)))
1977- enddo
1978- if (xvar .lt. xpta) then
1979- passcuts=.false.
1980- return
1981- endif
1982- ENDIF
1983-
1984-C REQUIRE AT LEAST ONE B WITH PT>XPTB
1985-
1986- IF(xptb.gt.0d0) THEN
1987- xvar=0
1988- do i=nincoming+1,nexternal
1989- if(is_a_b(i)) xvar=max(xvar,pt(p(0,i)))
1990- enddo
1991- if (xvar .lt. xptb) then
1992- passcuts=.false.
1993- return
1994- endif
1995- ENDIF
1996-
1997-C REQUIRE AT LEAST ONE LEPTON WITH PT>XPTL
1998-
1999- IF(xptl.gt.0d0) THEN
2000- xvar=0
2001- do i=nincoming+1,nexternal
2002- if(is_a_l(i)) xvar=max(xvar,pt(p(0,i)))
2003- enddo
2004- if (xvar .lt. xptl) then
2005- passcuts=.false.
2006- if(debug) write (*,*) ' xptl -> fails'
2007- return
2008- endif
2009- ENDIF
2010-C
2011-C WBF CUTS: TWO TYPES
2012-C
2013-C FIRST TYPE: implemented by FM
2014-C
2015-C 1. FIND THE 2 HARDEST JETS
2016-C 2. REQUIRE |RAP(J)|>XETAMIN
2017-C 3. REQUIRE RAP(J1)*ETA(J2)<0
2018-C
2019-C SECOND TYPE : added by Simon de Visscher 1-08-2007
2020-C
2021-C 1. FIND THE 2 HARDEST JETS
2022-C 2. REQUIRE |RAP(J1)-RAP(J2)|>DELTAETA
2023-C 3. REQUIRE RAP(J1)*RAP(J2)<0
2024-C
2025-C
2026- hardj1=0
2027- hardj2=0
2028- ptmax1=0d0
2029- ptmax2=0d0
2030-
2031-C-- START IF AT LEAST ONE OF THE CUTS IS ACTIVATED
2032-
2033- IF(XETAMIN.GT.0D0.OR.DELTAETA.GT.0D0) THEN
2034-
2035-C-- FIND THE HARDEST JETS
2036-
2037- do i=nincoming+1,nexternal
2038- if(is_a_j(i)) then
2039-c write (*,*) i,pt(p(0,i))
2040- if(pt(p(0,i)).gt.ptmax1) then
2041- hardj2=hardj1
2042- ptmax2=ptmax1
2043- hardj1=i
2044- ptmax1=pt(p(0,i))
2045- elseif(pt(p(0,i)).gt.ptmax2) then
2046- hardj2=i
2047- ptmax2=pt(p(0,i))
2048- endif
2049-c write (*,*) hardj1,hardj2,ptmax1,ptmax2
2050- endif
2051- enddo
2052-
2053- if (hardj2.eq.0) goto 21 ! bypass vbf cut since not enough jets
2054-
2055-C-- NOW APPLY THE CUT I
2056-
2057- if (abs(rap(p(0,hardj1))) .lt. xetamin
2058- & .or.abs(rap(p(0,hardj2))) .lt. xetamin
2059- & .or.rap(p(0,hardj1))*rap(p(0,hardj2)) .gt.0d0) then
2060- passcuts=.false.
2061- return
2062- endif
2063-
2064-
2065-C-- NOW APPLY THE CUT II
2066-
2067- if (abs(rap(p(0,hardj1))-rap(p(0,hardj2))) .lt. deltaeta) then
2068- passcuts=.false.
2069- return
2070- endif
2071-
2072-c write (*,*) hardj1,hardj2,rap(p(0,hardj1)),rap(p(0,hardj2))
2073-
2074- ENDIF
2075-
2076-c Begin photon isolation
2077-c NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
2078-c Use is made of parton cm frame momenta. If this must be
2079-c changed, pQCD used below must be redefined
2080-c NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
2081-c If we do not require a mimimum jet energy, there's no need to apply
2082-c jet clustering and all that.
2083- if (ptgmin.ne.0d0) then
2084-
2085-c Put all (light) QCD partons in momentum array for jet clustering.
2086-c From the run_card.dat, maxjetflavor defines if b quark should be
2087-c considered here (via the logical variable 'is_a_jet'). nQCD becomes
2088-c the number of (light) QCD partons at the real-emission level (i.e. one
2089-c more than the Born).
2090-
2091- nQCD=0
2092- do j=nincoming+1,nexternal
2093- if (is_a_j(j)) then
2094- nQCD=nQCD+1
2095- do i=0,3
2096- pQCD(i,nQCD)=p(i,j) ! Use C.o.M. frame momenta
2097- enddo
2098- endif
2099- enddo
2100-
2101- nph=0
2102- do j=nincoming+1,nexternal
2103- if (is_a_a(j)) then
2104- nph=nph+1
2105- do i=0,3
2106- pgamma(i,nph)=p(i,j) ! Use C.o.M. frame momenta
2107- enddo
2108- endif
2109- enddo
2110- if(nph.eq.0) goto 444
2111-
2112- if(isoEM)then
2113- nem=nph
2114- do k=1,nem
2115- do i=0,3
2116- pem(i,k)=pgamma(i,k)
2117- enddo
2118- enddo
2119- do j=nincoming+1,nexternal
2120- if (is_a_l(j)) then
2121- nem=nem+1
2122- do i=0,3
2123- pem(i,nem)=p(i,j) ! Use C.o.M. frame momenta
2124- enddo
2125- endif
2126- enddo
2127- endif
2128-
2129- alliso=.true.
2130-
2131- j=0
2132- dowhile(j.lt.nph.and.alliso)
2133-c Loop over all photons
2134- j=j+1
2135-
2136- ptg=pt(pgamma(0,j))
2137- if(ptg.lt.ptgmin)then
2138- passcuts=.false.
2139- return
2140- endif
2141-
2142-c Isolate from hadronic energy
2143- do i=1,nQCD
2144- drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pQCD(0,i)))
2145- enddo
2146- call sortzv(drlist,isorted,nQCD,ismode,isway,izero)
2147- Etsum(0)=0.d0
2148- nin=0
2149- do i=1,nQCD
2150- if(dble(drlist(isorted(i))).le.R0gamma)then
2151- nin=nin+1
2152- Etsum(nin)=Etsum(nin-1)+pt(pQCD(0,isorted(i)))
2153- endif
2154- enddo
2155- do i=1,nin
2156- alliso=alliso .and.
2157- # Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
2158- # R0gamma,xn,epsgamma,ptg)
2159- enddo
2160-
2161-c Isolate from EM energy
2162- if(isoEM.and.nem.gt.1)then
2163- do i=1,nem
2164- drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pem(0,i)))
2165- enddo
2166- call sortzv(drlist,isorted,nem,ismode,isway,izero)
2167-c First of list must be the photon: check this, and drop it
2168- if(isorted(1).ne.j.or.drlist(isorted(1)).gt.1.e-4)then
2169- write(*,*)'Error #1 in photon isolation'
2170- write(*,*)j,isorted(1),drlist(isorted(1))
2171- stop
2172- endif
2173- Etsum(0)=0.d0
2174- nin=0
2175- do i=2,nem
2176- if(dble(drlist(isorted(i))).le.R0gamma)then
2177- nin=nin+1
2178- Etsum(nin)=Etsum(nin-1)+pt(pem(0,isorted(i)))
2179- endif
2180- enddo
2181- do i=1,nin
2182- alliso=alliso .and.
2183- # Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
2184- # R0gamma,xn,epsgamma,ptg)
2185- enddo
2186-
2187- endif
2188-
2189-c End of loop over photons
2190- enddo
2191-
2192- if(.not.alliso)then
2193- passcuts=.false.
2194- return
2195- endif
2196- endif
2197-
2198- 444 continue
2199-c End photon isolation
2200-
2201-
2202-C...Set couplings if event passed cuts
2203-
2204- 21 if(.not.fixed_ren_scale) then
2205- call set_ren_scale(P,scale)
2206- if(scale.gt.0) G = SQRT(4d0*PI*ALPHAS(scale))
2207- endif
2208-
2209- if(.not.fixed_fac_scale) then
2210- call set_fac_scale(P,q2fact)
2211- endif
2212-
2213-c
2214-c Here we cluster event and reset factorization and renormalization
2215-c scales on an event-by-event basis, as well as check xqcut for jets
2216-c
2217-c Note the following condition is the first line of setclscales
2218-c if(xqcut.gt.0d0.or.ickkw.gt.0.or.scale.eq.0.or.q2fact(1).eq.0)then
2219-c Do not duplicate it since some variable are set for syscalc in the fct
2220- if(.not.setclscales(p))then
2221- cutsdone=.false.
2222- cutspassed=.false.
2223- passcuts = .false.
2224- if(debug) write (*,*) 'setclscales -> fails'
2225- return
2226- endif
2227-c endif
2228-
2229-c Set couplings in model files
2230- if(.not.fixed_ren_scale.or..not.fixed_couplings) then
2231- if (.not.fixed_couplings)then
2232- do i=0,3
2233- do j=1,nexternal
2234- pp(i,j)=p(i,j)
2235- enddo
2236- enddo
2237- endif
2238- call update_as_param()
2239- endif
2240-
2241- IF (FIRSTTIME2) THEN
2242- FIRSTTIME2=.FALSE.
2243- write(6,*) 'alpha_s for scale ',scale,' is ', G**2/(16d0*atan(1d0))
2244- ENDIF
2245-
2246- if(debug) write (*,*) '============================='
2247- if(debug) write (*,*) ' EVENT PASSED THE CUTS '
2248- if(debug) write (*,*) '============================='
2249-
2250- CUTSPASSED=.TRUE.
2251-
2252- RETURN
2253- END
2254-
2255-
2256-C
2257-C FUNCTION FOR ISOLATION
2258-C
2259-
2260- function iso_getdrv40(p1,p2)
2261- implicit none
2262- real*8 iso_getdrv40,p1(0:3),p2(0:3)
2263- real*8 iso_getdr
2264-c
2265- iso_getdrv40=iso_getdr(p1(0),p1(1),p1(2),p1(3),
2266- # p2(0),p2(1),p2(2),p2(3))
2267- return
2268- end
2269-
2270-
2271- function iso_getdr(en1,ptx1,pty1,pl1,en2,ptx2,pty2,pl2)
2272- implicit none
2273- real*8 iso_getdr,en1,ptx1,pty1,pl1,en2,ptx2,pty2,pl2,deta,dphi,
2274- # iso_getpseudorap,iso_getdelphi
2275-c
2276- deta=iso_getpseudorap(en1,ptx1,pty1,pl1)-
2277- # iso_getpseudorap(en2,ptx2,pty2,pl2)
2278- dphi=iso_getdelphi(ptx1,pty1,ptx2,pty2)
2279- iso_getdr=sqrt(dphi**2+deta**2)
2280- return
2281- end
2282-
2283-
2284- function iso_getpseudorap(en,ptx,pty,pl)
2285- implicit none
2286- real*8 iso_getpseudorap,en,ptx,pty,pl,tiny,pt,eta,th
2287- parameter (tiny=1.d-5)
2288-c
2289- pt=sqrt(ptx**2+pty**2)
2290- if(pt.lt.tiny.and.abs(pl).lt.tiny)then
2291- eta=sign(1.d0,pl)*1.d8
2292- else
2293- th=atan2(pt,pl)
2294- eta=-log(tan(th/2.d0))
2295- endif
2296- iso_getpseudorap=eta
2297- return
2298- end
2299-
2300-
2301- function iso_getdelphi(ptx1,pty1,ptx2,pty2)
2302- implicit none
2303- real*8 iso_getdelphi,ptx1,pty1,ptx2,pty2,tiny,pt1,pt2,tmp
2304- parameter (tiny=1.d-5)
2305-c
2306- pt1=sqrt(ptx1**2+pty1**2)
2307- pt2=sqrt(ptx2**2+pty2**2)
2308- if(pt1.ne.0.d0.and.pt2.ne.0.d0)then
2309- tmp=ptx1*ptx2+pty1*pty2
2310- tmp=tmp/(pt1*pt2)
2311- if(abs(tmp).gt.1.d0+tiny)then
2312- write(*,*)'Cosine larger than 1'
2313- stop
2314- elseif(abs(tmp).ge.1.d0)then
2315- tmp=sign(1.d0,tmp)
2316- endif
2317- tmp=acos(tmp)
2318- else
2319- tmp=1.d8
2320- endif
2321- iso_getdelphi=tmp
2322- return
2323- end
2324-
2325- function chi_gamma_iso(dr,R0,xn,epsgamma,pTgamma)
2326-c Eq.(3.4) of Phys.Lett. B429 (1998) 369-374 [hep-ph/9801442]
2327- implicit none
2328- real*8 chi_gamma_iso,dr,R0,xn,epsgamma,pTgamma
2329- real*8 tmp,axn
2330-c
2331- axn=abs(xn)
2332- tmp=epsgamma*pTgamma
2333- if(axn.ne.0.d0)then
2334- tmp=tmp*( (1-cos(dr))/(1-cos(R0)) )**axn
2335- endif
2336- chi_gamma_iso=tmp
2337- return
2338- end
2339-
2340-
2341-*
2342-* $Id: sortzv.F,v 1.1.1.1 1996/02/15 17:49:50 mclareni Exp $
2343-*
2344-* $Log: sortzv.F,v $
2345-* Revision 1.1.1.1 1996/02/15 17:49:50 mclareni
2346-* Kernlib
2347-*
2348-*
2349-c$$$#include "kerngen/pilot.h"
2350- SUBROUTINE SORTZV (A,INDEX,N1,MODE,NWAY,NSORT)
2351-C
2352-C CERN PROGLIB# M101 SORTZV .VERSION KERNFOR 3.15 820113
2353-C ORIG. 02/10/75
2354-C
2355- DIMENSION A(N1),INDEX(N1)
2356-C
2357-C
2358- N = N1
2359- IF (N.LE.0) RETURN
2360- IF (NSORT.NE.0) GO TO 2
2361- DO 1 I=1,N
2362- 1 INDEX(I)=I
2363-C
2364- 2 IF (N.EQ.1) RETURN
2365- IF (MODE) 10,20,30
2366- 10 CALL SORTTI (A,INDEX,N)
2367- GO TO 40
2368-C
2369- 20 CALL SORTTC(A,INDEX,N)
2370- GO TO 40
2371-C
2372- 30 CALL SORTTF (A,INDEX,N)
2373-C
2374- 40 IF (NWAY.EQ.0) GO TO 50
2375- N2 = N/2
2376- DO 41 I=1,N2
2377- ISWAP = INDEX(I)
2378- K = N+1-I
2379- INDEX(I) = INDEX(K)
2380- 41 INDEX(K) = ISWAP
2381- 50 RETURN
2382- END
2383-* ========================================
2384- SUBROUTINE SORTTF (A,INDEX,N1)
2385-C
2386- DIMENSION A(N1),INDEX(N1)
2387-C
2388- N = N1
2389- DO 3 I1=2,N
2390- I3 = I1
2391- I33 = INDEX(I3)
2392- AI = A(I33)
2393- 1 I2 = I3/2
2394- IF (I2) 3,3,2
2395- 2 I22 = INDEX(I2)
2396- IF (AI.LE.A (I22)) GO TO 3
2397- INDEX (I3) = I22
2398- I3 = I2
2399- GO TO 1
2400- 3 INDEX (I3) = I33
2401- 4 I3 = INDEX (N)
2402- INDEX (N) = INDEX (1)
2403- AI = A(I3)
2404- N = N-1
2405- IF (N-1) 12,12,5
2406- 5 I1 = 1
2407- 6 I2 = I1 + I1
2408- IF (I2.LE.N) I22= INDEX(I2)
2409- IF (I2-N) 7,9,11
2410- 7 I222 = INDEX (I2+1)
2411- IF (A(I22)-A(I222)) 8,9,9
2412- 8 I2 = I2+1
2413- I22 = I222
2414- 9 IF (AI-A(I22)) 10,11,11
2415- 10 INDEX(I1) = I22
2416- I1 = I2
2417- GO TO 6
2418- 11 INDEX (I1) = I3
2419- GO TO 4
2420- 12 INDEX (1) = I3
2421- RETURN
2422- END
2423-* ========================================
2424- SUBROUTINE SORTTI (A,INDEX,N1)
2425-C
2426- INTEGER A,AI
2427- DIMENSION A(N1),INDEX(N1)
2428-C
2429- N = N1
2430- DO 3 I1=2,N
2431- I3 = I1
2432- I33 = INDEX(I3)
2433- AI = A(I33)
2434- 1 I2 = I3/2
2435- IF (I2) 3,3,2
2436- 2 I22 = INDEX(I2)
2437- IF (AI.LE.A (I22)) GO TO 3
2438- INDEX (I3) = I22
2439- I3 = I2
2440- GO TO 1
2441- 3 INDEX (I3) = I33
2442- 4 I3 = INDEX (N)
2443- INDEX (N) = INDEX (1)
2444- AI = A(I3)
2445- N = N-1
2446- IF (N-1) 12,12,5
2447- 5 I1 = 1
2448- 6 I2 = I1 + I1
2449- IF (I2.LE.N) I22= INDEX(I2)
2450- IF (I2-N) 7,9,11
2451- 7 I222 = INDEX (I2+1)
2452- IF (A(I22)-A(I222)) 8,9,9
2453- 8 I2 = I2+1
2454- I22 = I222
2455- 9 IF (AI-A(I22)) 10,11,11
2456- 10 INDEX(I1) = I22
2457- I1 = I2
2458- GO TO 6
2459- 11 INDEX (I1) = I3
2460- GO TO 4
2461- 12 INDEX (1) = I3
2462- RETURN
2463- END
2464-* ========================================
2465- SUBROUTINE SORTTC (A,INDEX,N1)
2466-C
2467- INTEGER A,AI
2468- DIMENSION A(N1),INDEX(N1)
2469-C
2470- N = N1
2471- DO 3 I1=2,N
2472- I3 = I1
2473- I33 = INDEX(I3)
2474- AI = A(I33)
2475- 1 I2 = I3/2
2476- IF (I2) 3,3,2
2477- 2 I22 = INDEX(I2)
2478- IF(ICMPCH(AI,A(I22)))3,3,21
2479- 21 INDEX (I3) = I22
2480- I3 = I2
2481- GO TO 1
2482- 3 INDEX (I3) = I33
2483- 4 I3 = INDEX (N)
2484- INDEX (N) = INDEX (1)
2485- AI = A(I3)
2486- N = N-1
2487- IF (N-1) 12,12,5
2488- 5 I1 = 1
2489- 6 I2 = I1 + I1
2490- IF (I2.LE.N) I22= INDEX(I2)
2491- IF (I2-N) 7,9,11
2492- 7 I222 = INDEX (I2+1)
2493- IF (ICMPCH(A(I22),A(I222))) 8,9,9
2494- 8 I2 = I2+1
2495- I22 = I222
2496- 9 IF (ICMPCH(AI,A(I22))) 10,11,11
2497- 10 INDEX(I1) = I22
2498- I1 = I2
2499- GO TO 6
2500- 11 INDEX (I1) = I3
2501- GO TO 4
2502- 12 INDEX (1) = I3
2503- RETURN
2504- END
2505-* ========================================
2506- FUNCTION ICMPCH(IC1,IC2)
2507-C FUNCTION TO COMPARE TWO 4 CHARACTER EBCDIC STRINGS - IC1,IC2
2508-C ICMPCH=-1 IF HEX VALUE OF IC1 IS LESS THAN IC2
2509-C ICMPCH=0 IF HEX VALUES OF IC1 AND IC2 ARE THE SAME
2510-C ICMPCH=+1 IF HEX VALUES OF IC1 IS GREATER THAN IC2
2511- I1=IC1
2512- I2=IC2
2513- IF(I1.GE.0.AND.I2.GE.0)GOTO 40
2514- IF(I1.GE.0)GOTO 60
2515- IF(I2.GE.0)GOTO 80
2516- I1=-I1
2517- I2=-I2
2518- IF(I1-I2)80,70,60
2519- 40 IF(I1-I2)60,70,80
2520- 60 ICMPCH=-1
2521- RETURN
2522- 70 ICMPCH=0
2523- RETURN
2524- 80 ICMPCH=1
2525- RETURN
2526- END
2527-
2528+ logical function pass_point(p)
2529+c************************************************************************
2530+c This function is called from sample to see if it needs to
2531+c bother calculating the weight from all the different conficurations
2532+c You can either just return true, or have it call passcuts
2533+c************************************************************************
2534+ implicit none
2535+c
2536+c Arguments
2537+c
2538+ double precision p
2539+c
2540+c External
2541+c
2542+ logical passcuts
2543+ external passcuts
2544+c-----
2545+c Begin Code
2546+c-----
2547+ pass_point = .true.
2548+c pass_point = passcuts(p)
2549+ end
2550+C
2551+ LOGICAL FUNCTION PASSCUTS(P)
2552+C**************************************************************************
2553+C INPUT:
2554+C P(0:3,1) MOMENTUM OF INCOMING PARTON
2555+C P(0:3,2) MOMENTUM OF INCOMING PARTON
2556+C P(0:3,3) MOMENTUM OF ...
2557+C ALL MOMENTA ARE IN THE REST FRAME!!
2558+C COMMON/JETCUTS/ CUTS ON JETS
2559+C OUTPUT:
2560+C TRUE IF EVENTS PASSES ALL CUTS LISTED
2561+C**************************************************************************
2562+ IMPLICIT NONE
2563+c
2564+c Constants
2565+c
2566+ include 'genps.inc'
2567+ include 'nexternal.inc'
2568+C
2569+C ARGUMENTS
2570+C
2571+ REAL*8 P(0:3,nexternal)
2572+
2573+C
2574+C LOCAL
2575+C
2576+ LOGICAL FIRSTTIME,FIRSTTIME2,pass_bw,notgood,good,foundheavy
2577+ LOGICAL DEBUG
2578+ integer i,j,njets,nheavyjets,nleptons,hardj1,hardj2
2579+ REAL*8 XVAR,ptmax1,ptmax2,htj,tmp,inclht
2580+ real*8 ptemp(0:3), ptemp2(0:3)
2581+ character*20 formstr
2582+C
2583+C PARAMETERS
2584+C
2585+ real*8 PI
2586+ parameter( PI = 3.14159265358979323846d0 )
2587+C
2588+C EXTERNAL
2589+C
2590+ REAL*8 R2,DOT,ET,RAP,DJ,SumDot,pt,ALPHAS,PtDot
2591+ logical cut_bw,setclscales
2592+ external R2,DOT,ET,RAP,DJ,SumDot,pt,ALPHAS,cut_bw,setclscales,PtDot
2593+C
2594+C GLOBAL
2595+C
2596+ include 'run.inc'
2597+ include 'cuts.inc'
2598+
2599+ double precision ptjet(nexternal)
2600+ double precision ptheavyjet(nexternal)
2601+ double precision ptlepton(nexternal)
2602+ double precision temp
2603+
2604+C VARIABLES TO SPECIFY JETS
2605+ DOUBLE PRECISION PJET(NEXTERNAL,0:3)
2606+ DOUBLE PRECISION PTMIN
2607+ DOUBLE PRECISION PT1,PT2
2608+
2609+C INTEGERS FOR COUNTING.
2610+ INTEGER K,L,J1,J2
2611+
2612+C VARIABLES FOR KT CUT
2613+ DOUBLE PRECISION PTNOW,COSTH,PABS1,PABS2
2614+ DOUBLE PRECISION ETA1,ETA2,COSH_DETA,COS_DPHI,KT1SQ,KT2SQ, DPHI
2615+
2616+ double precision etmin(nincoming+1:nexternal),etamax(nincoming+1:nexternal)
2617+ double precision emin(nincoming+1:nexternal)
2618+ double precision r2min(nincoming+1:nexternal,nincoming+1:nexternal)
2619+ double precision s_min(nexternal,nexternal)
2620+ double precision etmax(nincoming+1:nexternal),etamin(nincoming+1:nexternal)
2621+ double precision emax(nincoming+1:nexternal)
2622+ double precision r2max(nincoming+1:nexternal,nincoming+1:nexternal)
2623+ double precision s_max(nexternal,nexternal)
2624+ double precision ptll_min(nexternal,nexternal),ptll_max(nexternal,nexternal)
2625+ double precision inclHtmin,inclHtmax
2626+ common/to_cuts/ etmin, emin, etamax, r2min, s_min,
2627+ $ etmax, emax, etamin, r2max, s_max, ptll_min, ptll_max, inclHtmin,inclHtmax
2628+
2629+ double precision ptjmin4(4),ptjmax4(4),htjmin4(2:4),htjmax4(2:4)
2630+ logical jetor
2631+ common/to_jet_cuts/ ptjmin4,ptjmax4,htjmin4,htjmax4,jetor
2632+
2633+ double precision ptlmin4(4),ptlmax4(4)
2634+ common/to_lepton_cuts/ ptlmin4,ptlmax4
2635+
2636+c
2637+c Special cuts
2638+c
2639+
2640+ integer lbw(0:nexternal) !Use of B.W.
2641+ common /to_BW/ lbw
2642+C
2643+C SPECIAL CUTS
2644+C
2645+ LOGICAL IS_A_J(NEXTERNAL),IS_A_L(NEXTERNAL)
2646+ LOGICAL IS_A_B(NEXTERNAL),IS_A_A(NEXTERNAL),IS_A_ONIUM(NEXTERNAL)
2647+ LOGICAL IS_A_NU(NEXTERNAL),IS_HEAVY(NEXTERNAL)
2648+ logical do_cuts(nexternal)
2649+ COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
2650+ . IS_A_ONIUM, do_cuts
2651+
2652+C
2653+C MERGING SCALE CUT
2654+C
2655+C Retrieve which external particles undergo the ktdurham and ptlund cuts.
2656+ LOGICAL is_pdg_for_merging_cut(NEXTERNAL)
2657+ logical from_decay(-(nexternal+3):nexternal)
2658+ COMMON /TO_MERGE_CUTS/is_pdg_for_merging_cut, from_decay
2659+
2660+C
2661+C ADDITIONAL VARIABLES FOR PTLUND CUT
2662+C
2663+ INTEGER NMASSLESS
2664+ DOUBLE PRECISION PINC(NINCOMING,0:3)
2665+ DOUBLE PRECISION PRADTEMP(0:3), PRECTEMP(0:3), PEMTTEMP(0:3)
2666+ DOUBLE PRECISION PTMINSAVE, RHOPYTHIA
2667+ EXTERNAL RHOPYTHIA
2668+C
2669+C FLAVOUR INFORMATION NECESSARY TO RECONSTRUCT PTLUND
2670+C
2671+ INTEGER JETFLAVOUR(NEXTERNAL), INCFLAVOUR(NINCOMING)
2672+ include 'maxamps.inc'
2673+ integer idup(nexternal,maxproc,maxsproc)
2674+ integer mothup(2,nexternal)
2675+ integer icolup(2,nexternal,maxflow,maxsproc)
2676+ include 'leshouche.inc'
2677+
2678+C
2679+C Keep track of whether cuts already calculated for this event
2680+C
2681+ LOGICAL CUTSDONE,CUTSPASSED
2682+ COMMON/TO_CUTSDONE/CUTSDONE,CUTSPASSED
2683+ DATA CUTSDONE,CUTSPASSED/.FALSE.,.FALSE./
2684+
2685+C $B$ MW_NEW_DEF $E$ !this is a tag for MadWeight
2686+
2687+ double precision xqcutij(nexternal,nexternal),xqcuti(nexternal)
2688+ common/to_xqcuts/xqcutij,xqcuti
2689+
2690+c jet cluster algorithm
2691+ integer nQCD !,NJET,JET(nexternal)
2692+c double precision plab(0:3, nexternal)
2693+ double precision pQCD(0:3,nexternal)!,PJET(0:3,nexternal)
2694+c double precision rfj,sycut,palg,fastjetdmerge
2695+c integer njet_eta
2696+c Photon isolation
2697+ integer nph,nem,nin
2698+ double precision ptg,chi_gamma_iso,iso_getdrv40
2699+ double precision Etsum(0:nexternal)
2700+ real drlist(nexternal)
2701+ double precision pgamma(0:3,nexternal),pem(0:3,nexternal)
2702+ logical alliso
2703+C Sort array of results: ismode>0 for real, isway=0 for ascending order
2704+ integer ismode,isway,izero,isorted(nexternal)
2705+ parameter (ismode=1)
2706+ parameter (isway=0)
2707+ parameter (izero=0)
2708+
2709+ include 'coupl.inc'
2710+
2711+C
2712+C
2713+c
2714+ DATA FIRSTTIME,FIRSTTIME2/.TRUE.,.TRUE./
2715+
2716+c put momenta in common block for couplings.f
2717+ double precision pp(0:3,max_particles)
2718+ common /momenta_pp/pp
2719+
2720+ DATA DEBUG/.FALSE./
2721+
2722+C-----
2723+C BEGIN CODE
2724+C-----
2725+
2726+
2727+
2728+ PASSCUTS=.TRUE. !EVENT IS OK UNLESS OTHERWISE CHANGED
2729+ IF (FIRSTTIME) THEN
2730+ FIRSTTIME=.FALSE.
2731+c Preparation for reweighting by setting up clustering by diagrams
2732+ call initcluster()
2733+c
2734+c
2735+ write(formstr,'(a,i2.2,a)')'(a10,',nexternal,'i8)'
2736+ write(*,formstr) 'Particle',(i,i=nincoming+1,nexternal)
2737+ write(formstr,'(a,i2.2,a)')'(a10,',nexternal,'f8.1)'
2738+ write(*,formstr) 'Et >',(etmin(i),i=nincoming+1,nexternal)
2739+ write(*,formstr) 'E >',(emin(i),i=nincoming+1,nexternal)
2740+ write(*,formstr) 'Eta <',(etamax(i),i=nincoming+1,nexternal)
2741+ write(*,formstr) 'xqcut: ',(xqcuti(i),i=nincoming+1,nexternal)
2742+ write(formstr,'(a,i2.2,a)')'(a,i2,a,',nexternal,'f8.1)'
2743+ do j=nincoming+1,nexternal-1
2744+ write(*,formstr) 'd R #',j,' >',(-0.0,i=nincoming+1,j),
2745+ & (r2min(i,j),i=j+1,nexternal)
2746+ do i=j+1,nexternal
2747+ r2min(i,j)=r2min(i,j)*dabs(r2min(i,j)) !Since r2 returns distance squared
2748+ r2max(i,j)=r2max(i,j)*dabs(r2max(i,j))
2749+ enddo
2750+ enddo
2751+ do j=nincoming+1,nexternal-1
2752+ write(*,formstr) 's min #',j,'>',
2753+ & (s_min(i,j),i=nincoming+1,nexternal)
2754+ enddo
2755+ do j=nincoming+1,nexternal-1
2756+ write(*,formstr) 'xqcutij #',j,'>',
2757+ & (xqcutij(i,j),i=nincoming+1,nexternal)
2758+ enddo
2759+
2760+cc
2761+cc Set the strong coupling
2762+cc
2763+c call set_ren_scale(P,scale)
2764+c
2765+cc Check that the user funtions for setting the scales
2766+cc have been edited if the choice of an event-by-event
2767+cc scale choice has been made
2768+c
2769+c if(.not.fixed_ren_scale) then
2770+c if(scale.eq.0d0) then
2771+c write(6,*)
2772+c write(6,*) '* >>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<*'
2773+c write(6,*) ' Dynamical renormalization scale choice '
2774+c write(6,*) ' selected but user subroutine'
2775+c write(6,*) ' set_ren_scale not edited in file:setpara.f'
2776+c write(6,*) ' Switching to a fixed_ren_scale choice'
2777+c write(6,*) ' with scale=zmass'
2778+c scale=91.2d0
2779+c write(6,*) 'scale=',scale
2780+c fixed_ren_scale=.true.
2781+c call set_ren_scale(P,scale)
2782+c endif
2783+c endif
2784+
2785+c if(.not.fixed_fac_scale) then
2786+c call set_fac_scale(P,q2fact)
2787+c if(q2fact(1).eq.0d0.or.q2fact(2).eq.0d0) then
2788+c write(6,*)
2789+c write(6,*) '* >>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<*'
2790+c write(6,*) ' Dynamical renormalization scale choice '
2791+c write(6,*) ' selected but user subroutine'
2792+c write(6,*) ' set_fac_scale not edited in file:setpara.f'
2793+c write(6,*) ' Switching to a fixed_fac_scale choice'
2794+c write(6,*) ' with q2fact(i)=zmass**2'
2795+c fixed_fac_scale=.true.
2796+c q2fact(1)=91.2d0**2
2797+c q2fact(2)=91.2d0**2
2798+c write(6,*) 'scales=',q2fact(1),q2fact(2)
2799+c endif
2800+c endif
2801+
2802+ if(fixed_ren_scale) then
2803+ G = SQRT(4d0*PI*ALPHAS(scale))
2804+ call update_as_param()
2805+ endif
2806+
2807+c Put momenta in the common block to zero to start
2808+ do i=0,3
2809+ do j=1,max_particles
2810+ pp(i,j) = 0d0
2811+ enddo
2812+ enddo
2813+
2814+ ENDIF ! IF FIRSTTIME
2815+
2816+ IF (CUTSDONE) THEN
2817+ PASSCUTS=CUTSPASSED
2818+ RETURN
2819+ ENDIF
2820+ CUTSDONE=.TRUE.
2821+c CUTSPASSED=.FALSE.
2822+
2823+c
2824+c Make sure have reasonable 4-momenta
2825+c
2826+ if (p(0,1) .le. 0d0) then
2827+ passcuts=.false.
2828+ return
2829+ endif
2830+
2831+c Also make sure there's no INF or NAN
2832+ do i=1,nexternal
2833+ do j=0,3
2834+ if(p(j,i).gt.1d32.or.p(j,i).ne.p(j,i))then
2835+ passcuts=.false.
2836+ return
2837+ endif
2838+ enddo
2839+ enddo
2840+
2841+c
2842+c Limit S_hat
2843+c
2844+c if (x1*x2*stot .gt. 500**2) then
2845+c passcuts=.false.
2846+c return
2847+c endif
2848+
2849+C $B$ DESACTIVATE_CUT $E$ !This is a tag for MadWeight
2850+
2851+ if(debug) write (*,*) '============================='
2852+ if(debug) write (*,*) ' EVENT STARTS TO BE CHECKED '
2853+ if(debug) write (*,*) '============================='
2854+c
2855+c p_t min & max cuts
2856+c
2857+ do i=nincoming+1,nexternal
2858+ if(debug) write (*,*) 'pt(',i,')=',pt(p(0,i)),' ',etmin(i),
2859+ $ ':',etmax(i)
2860+ notgood=(pt(p(0,i)) .lt. etmin(i)).or.
2861+ & (etmax(i).ge.0d0.and.pt(p(0,i)) .gt. etmax(i))
2862+ if (notgood) then
2863+ if(debug) write (*,*) i,' -> fails'
2864+ passcuts=.false.
2865+ return
2866+ endif
2867+ enddo
2868+c
2869+c missing ET min & max cut + Invariant mass of leptons and neutrino
2870+c nb: missing Et defined as the vector sum over the neutrino's pt
2871+c
2872+c-- reset ptemp(0:3)
2873+ do j=0,3
2874+ ptemp(j)=0 ! for the neutrino
2875+ ptemp2(j)=0 ! for the leptons
2876+ enddo
2877+c- sum over the momenta
2878+ do i=nincoming+1,nexternal
2879+ if(is_a_nu(i)) then
2880+ if(debug) write (*,*) i,' -> neutrino '
2881+ do j=0,3
2882+ ptemp(j)=ptemp(j)+p(j,i)
2883+ enddo
2884+ elseif(is_a_l(i)) then
2885+ if(debug) write (*,*) i,' -> lepton '
2886+ do j=0,3
2887+ ptemp2(j)=ptemp2(j)+p(j,i)
2888+ enddo
2889+ endif
2890+
2891+ enddo
2892+c- check the et
2893+ if(debug.and.ptemp(0).eq.0d0) write (*,*) 'No et miss in event'
2894+ if(debug.and.ptemp(0).gt.0d0) write (*,*) 'Et miss =',pt(ptemp(0)),' ',misset,':',missetmax
2895+ if(debug.and.ptemp2(0).eq.0d0) write (*,*) 'No leptons in event'
2896+ if(debug.and.ptemp(0).gt.0d0) write (*,*) 'Energy of leptons =',pt(ptemp2(0))
2897+ if(ptemp(0).gt.0d0) then
2898+ notgood=(pt(ptemp(0)) .lt. misset).or.
2899+ & (missetmax.ge.0d0.and.pt(ptemp(0)) .gt. missetmax)
2900+ if (notgood) then
2901+ if(debug) write (*,*) ' missing et cut -> fails'
2902+ passcuts=.false.
2903+ return
2904+ endif
2905+ endif
2906+ if (mmnl.gt.0d0.or.mmnlmax.ge.0d0)then
2907+ if(dsqrt(SumDot(ptemp,ptemp2,1d0)).lt.mmnl.or.mmnlmax.ge.0d0.and.dsqrt(SumDot(ptemp, ptemp2,1d0)).gt.mmnlmax) then
2908+ if(debug) write (*,*) 'lepton invariant mass -> fails'
2909+ passcuts=.false.
2910+ return
2911+ endif
2912+ endif
2913+c
2914+c pt cut on heavy particles
2915+c gives min(pt) for (at least) one heavy particle
2916+c
2917+ if(ptheavy.gt.0d0)then
2918+ passcuts=.false.
2919+ foundheavy=.false.
2920+ do i=nincoming+1,nexternal
2921+ if(is_heavy(i)) then
2922+ if(debug) write (*,*) i,' -> heavy '
2923+ foundheavy=.true.
2924+ if(pt(p(0,i)).gt.ptheavy) passcuts=.true.
2925+ endif
2926+ enddo
2927+
2928+ if(.not.passcuts.and.foundheavy)then
2929+ if(debug) write (*,*) ' heavy particle cut -> fails'
2930+ return
2931+ else
2932+ passcuts=.true.
2933+ endif
2934+ endif
2935+c
2936+c E min & max cuts
2937+c
2938+ do i=nincoming+1,nexternal
2939+ if(debug) write (*,*) 'p(0,',i,')=',p(0,i),' ',emin(i),':',emax(i)
2940+ notgood=(p(0,i) .le. emin(i)).or.
2941+ & (emax(i).ge.0d0 .and. p(0,i) .gt. emax(i))
2942+ if (notgood) then
2943+ if(debug) write (*,*) i,' -> fails'
2944+ passcuts=.false.
2945+ return
2946+ endif
2947+ enddo
2948+c
2949+c Rapidity min & max cuts
2950+c
2951+ do i=nincoming+1,nexternal
2952+ if(debug) write (*,*) 'abs(rap(',i,'))=',abs(rap(p(0,i))),' ',etamin(i),':',etamax(i)
2953+ notgood=(etamax(i).ge.0.and.abs(rap(p(0,i))) .gt. etamax(i)).or.
2954+ & (abs(rap(p(0,i))) .lt. etamin(i))
2955+ if (notgood) then
2956+ if(debug) write (*,*) i,' -> fails'
2957+ passcuts=.false.
2958+ return
2959+ endif
2960+ enddo
2961+c
2962+c DeltaR min & max cuts
2963+c
2964+ do i=nincoming+1,nexternal-1
2965+ do j=i+1,nexternal
2966+ if(debug) write (*,*) 'r2(',i, ',' ,j,')=',dsqrt(r2(p(0,i),p(0,j)))
2967+ if(debug) write (*,*) dsqrt(r2min(j,i)),dsqrt(r2max(j,i))
2968+ if(r2min(j,i).gt.0.or.r2max(j,i).ge.0d0) then
2969+ tmp=r2(p(0,i),p(0,j))
2970+ notgood=(tmp .lt. r2min(j,i)).or.
2971+ $ (r2max(j,i).ge.0d0 .and. tmp .gt. r2max(j,i))
2972+ if (notgood) then
2973+ if(debug) write (*,*) i,j,' -> fails'
2974+ passcuts=.false.
2975+ return
2976+ endif
2977+ endif
2978+ enddo
2979+ enddo
2980+
2981+
2982+c s-channel min & max pt of sum of 4-momenta
2983+c
2984+ do i=nincoming+1,nexternal-1
2985+ do j=i+1,nexternal
2986+ if(debug)write (*,*) 'ptll(',i,',',j,')=',PtDot(p(0,i),p(0,j))
2987+ if(debug)write (*,*) ptll_min(j,i),ptll_max(j,i)
2988+ if(ptll_min(j,i).gt.0.or.ptll_max(j,i).ge.0d0) then
2989+ tmp=PtDot(p(0,i),p(0,j))
2990+ notgood=(tmp .lt. ptll_min(j,i).or.
2991+ $ ptll_max(j,i).ge.0d0 .and. tmp.gt.ptll_max(j,i))
2992+ if (notgood) then
2993+ if(debug) write (*,*) i,j,' -> fails'
2994+ passcuts=.false.
2995+ return
2996+ endif
2997+ endif
2998+ enddo
2999+ enddo
3000+
3001+
3002+
3003+
3004+c
3005+c s-channel min & max invariant mass cuts
3006+c
3007+ do i=nincoming+1,nexternal-1
3008+ do j=i+1,nexternal
3009+ if(debug) write (*,*) 's(',i,',',j,')=',Sumdot(p(0,i),p(0,j),+1d0)
3010+ if(debug) write (*,*) s_min(j,i),s_max(j,i)
3011+ if(s_min(j,i).gt.0.or.s_max(j,i).ge.0d0) then
3012+ tmp=SumDot(p(0,i),p(0,j),+1d0)
3013+ if(s_min(j,i).le.s_max(j,i) .or. s_max(j,i).lt.0d0)then
3014+ notgood=(tmp .lt. s_min(j,i).or.
3015+ $ s_max(j,i).ge.0d0 .and. tmp .gt. s_max(j,i))
3016+ if (notgood) then
3017+ if(debug) write (*,*) i,j,' -> fails'
3018+ passcuts=.false.
3019+ return
3020+ endif
3021+ else
3022+ notgood=(tmp .lt. s_min(j,i).and.tmp .gt. s_max(j,i))
3023+ if (notgood) then
3024+ if(debug) write (*,*) i,j,' -> fails'
3025+ passcuts=.false.
3026+ return
3027+ endif
3028+ endif
3029+ endif
3030+ enddo
3031+ enddo
3032+C $B$DESACTIVATE_BW_CUT$B$ This is a Tag for MadWeight
3033+c
3034+c B.W. phase space cuts
3035+c
3036+ pass_bw=cut_bw(p)
3037+c JA 4/8/11 always check pass_bw
3038+ if ( pass_bw.and..not.CUTSPASSED) then
3039+ passcuts=.false.
3040+ if(debug) write (*,*) ' pass_bw -> fails'
3041+ return
3042+ endif
3043+C $E$DESACTIVATE_BW_CUT$E$ This is a Tag for MadWeight
3044+ CUTSPASSED=.FALSE.
3045+C
3046+C maximal and minimal pt of the jets sorted by pt
3047+c
3048+ njets=0
3049+ nheavyjets=0
3050+
3051+c- fill ptjet with the pt's of the jets.
3052+ do i=nincoming+1,nexternal
3053+ if(is_a_j(i)) then
3054+ njets=njets+1
3055+ ptjet(njets)=pt(p(0,i))
3056+ endif
3057+ if(is_a_b(i)) then
3058+ nheavyjets=nheavyjets+1
3059+ ptheavyjet(nheavyjets)=pt(p(0,i))
3060+ endif
3061+
3062+ enddo
3063+ if(debug) write (*,*) 'not yet ordered ',njets,' ',ptjet
3064+
3065+C----------------------------------------------------------------------------
3066+C DURHAM_KT CUT
3067+C----------------------------------------------------------------------------
3068+
3069+ IF ( KT_DURHAM .GT. 0D0) THEN
3070+
3071+C RESET JET MOMENTA
3072+ njets=0
3073+ DO I=1,NEXTERNAL
3074+ DO J=0,3
3075+ PJET(I,J) = 0D0
3076+ ENDDO
3077+ ENDDO
3078+
3079+ do i=nincoming+1,nexternal
3080+ if(is_pdg_for_merging_cut(i) .and. .not. from_decay(I) ) then
3081+ njets=njets+1
3082+ DO J=0,3
3083+ PJET(NJETS,J) = P(J,I)
3084+ ENDDO
3085+ endif
3086+ enddo
3087+
3088+C COUNT NUMBER OF MASSLESS OUTGOING PARTICLES, SINCE WE DO NOT WANT
3089+C TO APPLY A CUT FOR JUST A SINGLE MASSIVE PARTICLE IN THE FINAL STATE.
3090+ NMASSLESS = 0
3091+ DO I=NINCOMING+1,NEXTERNAL
3092+ if(is_pdg_for_merging_cut(i) .and. .not. from_decay(I) .and.
3093+ & is_a_j(i).or.is_a_b(i)) then
3094+ NMASSLESS = NMASSLESS + 1
3095+ ENDIF
3096+ ENDDO
3097+
3098+C DURHAM KT SEPARATION CUT
3099+ IF(NJETS.GT.0 .AND. NMASSLESS .GT. 0) THEN
3100+
3101+ PTMIN = EBEAM(1) + EBEAM(2)
3102+
3103+ DO I=1,NJETS
3104+
3105+C PT WITH RESPECT TO Z AXIS FOR HADRONIC COLLISIONS
3106+ IF ( (LPP(1).NE.0) .OR. (LPP(2).NE.0)) THEN
3107+ PT1 = DSQRT(PJET(I,1)**2 + PJET(I,2)**2)
3108+ PTMIN = MIN( PTMIN, PT1 )
3109+ ENDIF
3110+
3111+ DO J=I+1,NJETS
3112+C GET ANGLE BETWEEN JETS
3113+ PABS1 = DSQRT(PJET(I,1)**2 + PJET(I,2)**2 + PJET(I,3)**2)
3114+ PABS2 = DSQRT(PJET(J,1)**2 + PJET(J,2)**2 + PJET(J,3)**2)
3115+C CHECK IF 3-MOMENTA DO NOT VANISH
3116+ IF(PABS1*PABS2 .NE. 0D0) THEN
3117+ COSTH = ( PJET(I,1)*PJET(J,1) + PJET(I,2)*PJET(J,2) + PJET(I,3)*PJET(J,3) )/(PABS1*PABS2)
3118+ ELSE
3119+C IF 3-MOMENTA VANISH, MAKE JET COSTH = 1D0 SO THAT JET MEASURE VANISHES
3120+ COSTH = 1D0
3121+ ENDIF
3122+C GET PT AND ETA OF JETS
3123+ PT2 = DSQRT(PJET(J,1)**2 + PJET(J,2)**2)
3124+ ETA1 = 0.5D0*LOG( (PJET(I,0) + PJET(I,3)) / (PJET(I,0) - PJET(I,3)) )
3125+ ETA2 = 0.5D0*LOG( (PJET(J,0) + PJET(J,3)) / (PJET(J,0) - PJET(J,3)) )
3126+C GET COSH OF DELTA ETA, COS OF DELTA PHI
3127+ COSH_DETA = DCOSH( ETA1 - ETA2 )
3128+ COS_DPHI = ( PJET(I,1)*PJET(J,1) + PJET(I,2)*PJET(J,2) ) / (PT1*PT2)
3129+ DPHI = DACOS( COS_DPHI )
3130+ IF ( (LPP(1).EQ.0) .AND. (LPP(2).EQ.0)) THEN
3131+C KT FOR E+E- COLLISION
3132+ PTNOW = DSQRT( 2D0*MIN(PJET(I,0)**2,PJET(J,0)**2)*( 1D0-COSTH ) )
3133+ ELSE
3134+C HADRONIC KT, FASTJET DEFINITION
3135+ PTNOW = DSQRT( MIN(PT1**2,PT2**2)*( (ETA1 - ETA2 )**2 + DPHI**2 )/(D_PARAMETER**2) )
3136+ ENDIF
3137+
3138+ PTMIN = MIN( PTMIN, PTNOW )
3139+
3140+ ENDDO ! LOOP OVER NJET
3141+
3142+ ENDDO ! LOOP OVER NJET
3143+
3144+C CHECK COMPATIBILITY WITH CUT
3145+ IF( (PTMIN .LT. KT_DURHAM)) THEN
3146+ PASSCUTS = .FALSE.
3147+ RETURN
3148+ ENDIF
3149+
3150+ ENDIF ! IF NJETS.GT. 0
3151+
3152+ ENDIF ! KT_DURHAM .GT. 0D0
3153+
3154+C----------------------------------------------------------------------------
3155+C PTLUND CUT
3156+C----------------------------------------------------------------------------
3157+
3158+ IF(PT_LUND .GT. 0D0 ) THEN
3159+
3160+C Reset jet momenta
3161+ NJETS=0
3162+ DO I=1,NEXTERNAL
3163+ JETFLAVOUR(I) = 0
3164+ DO J=0,3
3165+ PJET(I,J) = 0D0
3166+ ENDDO
3167+ ENDDO
3168+
3169+C Fill incoming particle momenta
3170+ DO I=1,NINCOMING
3171+ INCFLAVOUR(I) = IDUP(I,1,1)
3172+ DO J=0,3
3173+ PINC(I,J) = P(J,I)
3174+ ENDDO
3175+ ENDDO
3176+
3177+C Fill final jet momenta
3178+ DO I=NINCOMING+1,NEXTERNAL
3179+ if(is_pdg_for_merging_cut(i) .and. .not. from_decay(I) ) then
3180+ NJETS=NJETS+1
3181+ JETFLAVOUR(NJETS) = IDUP(I,1,1)
3182+ DO J=0,3
3183+ PJET(NJETS,J) = P(J,I)
3184+ ENDDO
3185+ ENDIF
3186+ ENDDO
3187+
3188+C PROCESS WITH EXACTLY TWO MASSLESS OUTGOING PARTICLES IS SPECIAL
3189+C BECAUSE AN ENERGY-SHARING VARIABLE LIKE "Z" DOES NOT MAKE SENSE.
3190+C IN THIS CASE, ONLY APPLY MINIMAL pT W.R.T BEAM CUT.
3191+C THIS CUT WILL ONLY APPLY TO THE TWO-MASSLESS PARTICLE STATE.
3192+ NMASSLESS = 0
3193+ DO I=NINCOMING+1,NEXTERNAL
3194+ if(is_pdg_for_merging_cut(i) .and. .not. from_decay(I) .and.
3195+ & is_a_j(i).or.is_a_b(i)) THEN
3196+ NMASSLESS = NMASSLESS + 1
3197+ ENDIF
3198+ ENDDO
3199+ IF (NMASSLESS .EQ. 2 .AND. NJETS .EQ. 2 .AND.
3200+ & NEXTERNAL-NINCOMING .EQ. 2) THEN
3201+ PTMINSAVE = EBEAM(1) + EBEAM(2)
3202+ DO I=NINCOMING+1,NEXTERNAL
3203+ if( .not. from_decay(I) ) then
3204+ PTMINSAVE = MIN(PTMINSAVE, PT(p(0,i)))
3205+ ENDIF
3206+ ENDDO
3207+C CHECK COMPATIBILITY WITH CUT
3208+ IF ( ((LPP(1).NE.0) .OR. (LPP(2).NE.0)) .AND.
3209+ & PTMINSAVE .LT. PT_LUND) THEN
3210+ PASSCUTS = .FALSE.
3211+ RETURN
3212+ ENDIF
3213+C RESET NJETS TO AVOID FURTHER MERGING SCALE CUT.
3214+ NJETS=0
3215+ ENDIF
3216+
3217+C PYTHIA PT SEPARATION CUT
3218+ IF(NJETS.GT.0 .AND. NMASSLESS .GT. 0) THEN
3219+
3220+ PTMINSAVE = EBEAM(1) + EBEAM(2)
3221+
3222+ DO I=1,NJETS
3223+
3224+ PTMIN = EBEAM(1) + EBEAM(2)
3225+ PTMINSAVE = MIN(PTMIN,PTMINSAVE)
3226+
3227+C Compute pythia ISR separation between i-jet and incoming.
3228+C Only SM-like emissions off the beam are possible.
3229+ IF ( ( (LPP(1).NE.0) .OR. (LPP(2).NE.0)) .AND.
3230+ & ABS(JETFLAVOUR(I)) .LT. 30 ) THEN
3231+C Check separation to first incoming particle
3232+ DO L=0,3
3233+ PRADTEMP(L) = PINC(1,L)
3234+ PEMTTEMP(L) = PJET(I,L)
3235+ PRECTEMP(L) = PINC(2,L)
3236+ ENDDO
3237+ PT1 = RHOPYTHIA(PRADTEMP, PEMTTEMP, PRECTEMP, INCFLAVOUR(1),
3238+ & JETFLAVOUR(I), -1, -1)
3239+ PTMIN = MIN( PTMIN, PT1 )
3240+C Check separation to second incoming particle
3241+ DO L=0,3
3242+ PRADTEMP(L) = PINC(2,L)
3243+ PEMTTEMP(L) = PJET(I,L)
3244+ PRECTEMP(L) = PINC(1,L)
3245+ ENDDO
3246+ PT2 = RHOPYTHIA(PRADTEMP, PEMTTEMP, PRECTEMP, INCFLAVOUR(2),
3247+ & JETFLAVOUR(I), -1, -1)
3248+ PTMIN = MIN( PTMIN, PT2 )
3249+ ENDIF
3250+
3251+C Compute pythia FSR separation between two jets,
3252+C without any knowledge of colour connections
3253+ DO J=1,NJETS
3254+ DO K=1,NJETS
3255+ IF ( I .NE. J .AND. I .NE. K .AND. J .NE. K ) THEN
3256+
3257+C Check separation between final partons i and j, with k as spectator
3258+ DO L=0,3
3259+ PRADTEMP(L) = PJET(J,L)
3260+ PEMTTEMP(L) = PJET(I,L)
3261+ PRECTEMP(L) = PJET(K,L)
3262+ ENDDO
3263+
3264+ TEMP = RHOPYTHIA( PRADTEMP, PEMTTEMP, PRECTEMP,
3265+ & JETFLAVOUR(J), JETFLAVOUR(I), 1, 1)
3266+C Only SM-like emissions off the beam are possible, no additional
3267+C BSM particles will be produced as as shower emissions.
3268+ IF ( ABS(JETFLAVOUR(I)) .LT. 30 ) THEN
3269+ PTMIN = MIN(PTMIN, TEMP);
3270+ ENDIF
3271+
3272+ TEMP = RHOPYTHIA( PEMTTEMP, PRADTEMP, PRECTEMP,
3273+ & JETFLAVOUR(I), JETFLAVOUR(J), 1, 1)
3274+C Only SM-like emissions off the beam are possible, no additional
3275+C BSM particles will be produced as as shower emissions.
3276+ IF ( ABS(JETFLAVOUR(J)) .LT. 30 ) THEN
3277+ PTMIN = MIN(PTMIN, TEMP);
3278+ ENDIF
3279+
3280+ ENDIF
3281+
3282+ ENDDO ! LOOP OVER NJET
3283+ ENDDO ! LOOP OVER NJET
3284+
3285+C Compute pythia FSR separation between two jets, with initial spectator
3286+ IF ( (LPP(1).NE.0) .OR. (LPP(2).NE.0)) THEN
3287+ DO J=1,NJETS
3288+
3289+C BSM particles can only be radiators, and will not be produced
3290+C as shower emissions.
3291+ IF ( ABS(JETFLAVOUR(I)) .GT. 1000000 ) THEN
3292+ EXIT
3293+ ENDIF
3294+
3295+C Allow both initial partons as recoiler
3296+ IF ( I .NE. J ) THEN
3297+
3298+C Check with first initial as recoiler
3299+ DO L=0,3
3300+ PRADTEMP(L) = PJET(J,L)
3301+ PEMTTEMP(L) = PJET(I,L)
3302+ PRECTEMP(L) = PINC(1,L)
3303+ ENDDO
3304+ TEMP = RHOPYTHIA( PRADTEMP, PEMTTEMP, PRECTEMP,
3305+ & JETFLAVOUR(J), JETFLAVOUR(I), 1, -1);
3306+ IF ( LPP(1) .NE. 0 ) THEN
3307+ PTMIN = MIN(PTMIN, TEMP);
3308+ ENDIF
3309+ DO L=0,3
3310+ PRADTEMP(L) = PJET(J,L)
3311+ PEMTTEMP(L) = PJET(I,L)
3312+ PRECTEMP(L) = PINC(2,L)
3313+ ENDDO
3314+ TEMP = RHOPYTHIA( PRADTEMP, PEMTTEMP, PRECTEMP,
3315+ & JETFLAVOUR(J), JETFLAVOUR(I), 1, -1);
3316+ IF ( LPP(2) .NE. 0 ) THEN
3317+ PTMIN = MIN(PTMIN, TEMP);
3318+ ENDIF
3319+ ENDIF
3320+ ENDDO ! LOOP OVER NJET
3321+ ENDIF
3322+
3323+ PTMINSAVE = MIN(PTMIN,PTMINSAVE)
3324+
3325+ ENDDO ! LOOP OVER NJET
3326+
3327+C CHECK COMPATIBILITY WITH CUT
3328+ IF (PTMINSAVE .LT. PT_LUND) THEN
3329+ PASSCUTS = .FALSE.
3330+ RETURN
3331+ ENDIF
3332+
3333+ ENDIF ! IF NJETS.GT. 0
3334+
3335+ ENDIF ! PT_LUND .GT. 0D0
3336+
3337+C----------------------------------------------------------------------------
3338+C----------------------------------------------------------------------------
3339+
3340+
3341+
3342+
3343+c- check existance of jets if jet cuts are on
3344+ if(njets.lt.1.and.(htjmin.gt.0.or.ptj1min.gt.0).or.
3345+ $ njets.lt.2.and.ptj2min.gt.0.or.
3346+ $ njets.lt.3.and.ptj3min.gt.0.or.
3347+ $ njets.lt.4.and.ptj4min.gt.0)then
3348+ if(debug) write (*,*) i, ' too few jets -> fails'
3349+ passcuts=.false.
3350+ return
3351+ endif
3352+
3353+c - sort jet pts
3354+ do i=1,njets-1
3355+ do j=i+1,njets
3356+ if(ptjet(j).gt.ptjet(i)) then
3357+ temp=ptjet(i)
3358+ ptjet(i)=ptjet(j)
3359+ ptjet(j)=temp
3360+ endif
3361+ enddo
3362+ enddo
3363+ if(debug) write (*,*) 'ordered ',njets,' ',ptjet
3364+c
3365+c Use "and" or "or" prescriptions
3366+c
3367+ inclht=0
3368+
3369+ if(njets.gt.0) then
3370+
3371+ notgood=.not.jetor
3372+ if(debug) write (*,*) 'jetor :',jetor
3373+ if(debug) write (*,*) '0',notgood
3374+
3375+ do i=1,min(njets,4)
3376+ if(debug) write (*,*) i,ptjet(i), ' ',ptjmin4(i),
3377+ $ ':',ptjmax4(i)
3378+ if(jetor) then
3379+c--- if one of the jets does not pass, the event is rejected
3380+ notgood=notgood.or.(ptjmax4(i).ge.0d0 .and.
3381+ $ ptjet(i).gt.ptjmax4(i)) .or.
3382+ $ (ptjet(i).lt.ptjmin4(i))
3383+ if(debug) write (*,*) i,' notgood total:', notgood
3384+ else
3385+c--- all cuts must fail to reject the event
3386+ notgood=notgood.and.(ptjmax4(i).ge.0d0 .and.
3387+ $ ptjet(i).gt.ptjmax4(i) .or.
3388+ $ (ptjet(i).lt.ptjmin4(i)))
3389+ if(debug) write (*,*) i,' notgood total:', notgood
3390+ endif
3391+ enddo
3392+
3393+
3394+ if (notgood) then
3395+ if(debug) write (*,*) i, ' multiple pt -> fails'
3396+ passcuts=.false.
3397+ return
3398+ endif
3399+
3400+c---------------------------
3401+c Ht cuts
3402+C---------------------------
3403+ htj=ptjet(1)
3404+
3405+ do i=2,njets
3406+ htj=htj+ptjet(i)
3407+ if(debug) write (*,*) i, 'htj ',htj
3408+ if(debug.and.i.le.4) write (*,*) 'htmin ',i,' ', htjmin4(i),':',htjmax4(i)
3409+ if(i.le.4)then
3410+ if(htj.lt.htjmin4(i) .or.
3411+ $ htjmax4(i).ge.0d0.and.htj.gt.htjmax4(i)) then
3412+ if(debug) write (*,*) i, ' ht -> fails'
3413+ passcuts=.false.
3414+ return
3415+ endif
3416+ endif
3417+ enddo
3418+
3419+ if(htj.lt.htjmin.or.htjmax.ge.0d0.and.htj.gt.htjmax)then
3420+ if(debug) write (*,*) i, ' htj -> fails'
3421+ passcuts=.false.
3422+ return
3423+ endif
3424+
3425+ inclht=htj
3426+
3427+ endif !if there are jets
3428+
3429+ if(nheavyjets.gt.0) then
3430+ do i=1,nheavyjets
3431+ inclht=inclht+ptheavyjet(i)
3432+ enddo
3433+ endif !if there are heavyjets
3434+
3435+ if(inclht.lt.inclHtmin.or.
3436+ $ inclHtmax.ge.0d0.and.inclht.gt.inclHtmax)then
3437+ if(debug) write (*,*) ' inclhtmin=',inclHtmin,' -> fails'
3438+ passcuts=.false.
3439+ return
3440+ endif
3441+
3442+C
3443+C maximal and minimal pt of the leptons sorted by pt
3444+c
3445+ nleptons=0
3446+
3447+ if(ptl1min.gt.0.or.ptl2min.gt.0.or.ptl3min.gt.0.or.ptl4min.gt.0.or.
3448+ $ ptl1max.ge.0d0.or.ptl2max.ge.0d0.or.
3449+ $ ptl3max.ge.0d0.or.ptl4max.ge.0d0) then
3450+
3451+c - fill ptlepton with the pt's of the leptons.
3452+ do i=nincoming+1,nexternal
3453+ if(is_a_l(i)) then
3454+ nleptons=nleptons+1
3455+ ptlepton(nleptons)=pt(p(0,i))
3456+ endif
3457+ enddo
3458+ if(debug) write (*,*) 'not yet ordered ',njets,' ',ptjet
3459+
3460+c - check existance of leptons if lepton cuts are on
3461+ if(nleptons.lt.1.and.ptl1min.gt.0.or.
3462+ $ nleptons.lt.2.and.ptl2min.gt.0.or.
3463+ $ nleptons.lt.3.and.ptl3min.gt.0.or.
3464+ $ nleptons.lt.4.and.ptl4min.gt.0)then
3465+ if(debug) write (*,*) i, ' too few leptons -> fails'
3466+ passcuts=.false.
3467+ return
3468+ endif
3469+
3470+c - sort lepton pts
3471+ do i=1,nleptons-1
3472+ do j=i+1,nleptons
3473+ if(ptlepton(j).gt.ptlepton(i)) then
3474+ temp=ptlepton(i)
3475+ ptlepton(i)=ptlepton(j)
3476+ ptlepton(j)=temp
3477+ endif
3478+ enddo
3479+ enddo
3480+ if(debug) write (*,*) 'ordered ',nleptons,' ',ptlepton
3481+
3482+ if(nleptons.gt.0) then
3483+
3484+ notgood = .false.
3485+ do i=1,min(nleptons,4)
3486+ if(debug) write (*,*) i,ptlepton(i), ' ',ptlmin4(i),':',ptlmax4(i)
3487+c--- if one of the leptons does not pass, the event is rejected
3488+ notgood=notgood.or.
3489+ $ (ptlmax4(i).ge.0d0.and.ptlepton(i).gt.ptlmax4(i)).or.
3490+ $ (ptlepton(i).lt.ptlmin4(i))
3491+ if(debug) write (*,*) i,' notgood total:', notgood
3492+ enddo
3493+
3494+
3495+ if (notgood) then
3496+ if(debug) write (*,*) i, ' multiple pt -> fails'
3497+ passcuts=.false.
3498+ return
3499+ endif
3500+ endif
3501+ endif
3502+C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3503+C SPECIAL CUTS
3504+C<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
3505+
3506+C REQUIRE AT LEAST ONE JET WITH PT>XPTJ
3507+
3508+ IF(xptj.gt.0d0) THEN
3509+ xvar=0
3510+ do i=nincoming+1,nexternal
3511+ if(is_a_j(i)) xvar=max(xvar,pt(p(0,i)))
3512+ enddo
3513+ if (xvar .lt. xptj) then
3514+ passcuts=.false.
3515+ return
3516+ endif
3517+ ENDIF
3518+
3519+C REQUIRE AT LEAST ONE PHOTON WITH PT>XPTA
3520+
3521+ IF(xpta.gt.0d0) THEN
3522+ xvar=0
3523+ do i=nincoming+1,nexternal
3524+ if(is_a_a(i)) xvar=max(xvar,pt(p(0,i)))
3525+ enddo
3526+ if (xvar .lt. xpta) then
3527+ passcuts=.false.
3528+ return
3529+ endif
3530+ ENDIF
3531+
3532+C REQUIRE AT LEAST ONE B WITH PT>XPTB
3533+
3534+ IF(xptb.gt.0d0) THEN
3535+ xvar=0
3536+ do i=nincoming+1,nexternal
3537+ if(is_a_b(i)) xvar=max(xvar,pt(p(0,i)))
3538+ enddo
3539+ if (xvar .lt. xptb) then
3540+ passcuts=.false.
3541+ return
3542+ endif
3543+ ENDIF
3544+
3545+C REQUIRE AT LEAST ONE LEPTON WITH PT>XPTL
3546+
3547+ IF(xptl.gt.0d0) THEN
3548+ xvar=0
3549+ do i=nincoming+1,nexternal
3550+ if(is_a_l(i)) xvar=max(xvar,pt(p(0,i)))
3551+ enddo
3552+ if (xvar .lt. xptl) then
3553+ passcuts=.false.
3554+ if(debug) write (*,*) ' xptl -> fails'
3555+ return
3556+ endif
3557+ ENDIF
3558+C
3559+C WBF CUTS: TWO TYPES
3560+C
3561+C FIRST TYPE: implemented by FM
3562+C
3563+C 1. FIND THE 2 HARDEST JETS
3564+C 2. REQUIRE |RAP(J)|>XETAMIN
3565+C 3. REQUIRE RAP(J1)*ETA(J2)<0
3566+C
3567+C SECOND TYPE : added by Simon de Visscher 1-08-2007
3568+C
3569+C 1. FIND THE 2 HARDEST JETS
3570+C 2. REQUIRE |RAP(J1)-RAP(J2)|>DELTAETA
3571+C 3. REQUIRE RAP(J1)*RAP(J2)<0
3572+C
3573+C
3574+ hardj1=0
3575+ hardj2=0
3576+ ptmax1=0d0
3577+ ptmax2=0d0
3578+
3579+C-- START IF AT LEAST ONE OF THE CUTS IS ACTIVATED
3580+
3581+ IF(XETAMIN.GT.0D0.OR.DELTAETA.GT.0D0) THEN
3582+
3583+C-- FIND THE HARDEST JETS
3584+
3585+ do i=nincoming+1,nexternal
3586+ if(is_a_j(i)) then
3587+c write (*,*) i,pt(p(0,i))
3588+ if(pt(p(0,i)).gt.ptmax1) then
3589+ hardj2=hardj1
3590+ ptmax2=ptmax1
3591+ hardj1=i
3592+ ptmax1=pt(p(0,i))
3593+ elseif(pt(p(0,i)).gt.ptmax2) then
3594+ hardj2=i
3595+ ptmax2=pt(p(0,i))
3596+ endif
3597+c write (*,*) hardj1,hardj2,ptmax1,ptmax2
3598+ endif
3599+ enddo
3600+
3601+ if (hardj2.eq.0) goto 21 ! bypass vbf cut since not enough jets
3602+
3603+C-- NOW APPLY THE CUT I
3604+
3605+ if (abs(rap(p(0,hardj1))) .lt. xetamin
3606+ & .or.abs(rap(p(0,hardj2))) .lt. xetamin
3607+ & .or.rap(p(0,hardj1))*rap(p(0,hardj2)) .gt.0d0) then
3608+ passcuts=.false.
3609+ return
3610+ endif
3611+
3612+
3613+C-- NOW APPLY THE CUT II
3614+
3615+ if (abs(rap(p(0,hardj1))-rap(p(0,hardj2))) .lt. deltaeta) then
3616+ passcuts=.false.
3617+ return
3618+ endif
3619+
3620+c write (*,*) hardj1,hardj2,rap(p(0,hardj1)),rap(p(0,hardj2))
3621+
3622+ ENDIF
3623+
3624+c Begin photon isolation
3625+c NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
3626+c Use is made of parton cm frame momenta. If this must be
3627+c changed, pQCD used below must be redefined
3628+c NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
3629+c If we do not require a mimimum jet energy, there's no need to apply
3630+c jet clustering and all that.
3631+ if (ptgmin.ne.0d0) then
3632+
3633+c Put all (light) QCD partons in momentum array for jet clustering.
3634+c From the run_card.dat, maxjetflavor defines if b quark should be
3635+c considered here (via the logical variable 'is_a_jet'). nQCD becomes
3636+c the number of (light) QCD partons at the real-emission level (i.e. one
3637+c more than the Born).
3638+
3639+ nQCD=0
3640+ do j=nincoming+1,nexternal
3641+ if (is_a_j(j)) then
3642+ nQCD=nQCD+1
3643+ do i=0,3
3644+ pQCD(i,nQCD)=p(i,j) ! Use C.o.M. frame momenta
3645+ enddo
3646+ endif
3647+ enddo
3648+
3649+ nph=0
3650+ do j=nincoming+1,nexternal
3651+ if (is_a_a(j)) then
3652+ nph=nph+1
3653+ do i=0,3
3654+ pgamma(i,nph)=p(i,j) ! Use C.o.M. frame momenta
3655+ enddo
3656+ endif
3657+ enddo
3658+ if(nph.eq.0) goto 444
3659+
3660+ if(isoEM)then
3661+ nem=nph
3662+ do k=1,nem
3663+ do i=0,3
3664+ pem(i,k)=pgamma(i,k)
3665+ enddo
3666+ enddo
3667+ do j=nincoming+1,nexternal
3668+ if (is_a_l(j)) then
3669+ nem=nem+1
3670+ do i=0,3
3671+ pem(i,nem)=p(i,j) ! Use C.o.M. frame momenta
3672+ enddo
3673+ endif
3674+ enddo
3675+ endif
3676+
3677+ alliso=.true.
3678+
3679+ j=0
3680+ dowhile(j.lt.nph.and.alliso)
3681+c Loop over all photons
3682+ j=j+1
3683+
3684+ ptg=pt(pgamma(0,j))
3685+ if(ptg.lt.ptgmin)then
3686+ passcuts=.false.
3687+ return
3688+ endif
3689+
3690+c Isolate from hadronic energy
3691+ do i=1,nQCD
3692+ drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pQCD(0,i)))
3693+ enddo
3694+ call sortzv(drlist,isorted,nQCD,ismode,isway,izero)
3695+ Etsum(0)=0.d0
3696+ nin=0
3697+ do i=1,nQCD
3698+ if(dble(drlist(isorted(i))).le.R0gamma)then
3699+ nin=nin+1
3700+ Etsum(nin)=Etsum(nin-1)+pt(pQCD(0,isorted(i)))
3701+ endif
3702+ enddo
3703+ do i=1,nin
3704+ alliso=alliso .and.
3705+ # Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
3706+ # R0gamma,xn,epsgamma,ptg)
3707+ enddo
3708+
3709+c Isolate from EM energy
3710+ if(isoEM.and.nem.gt.1)then
3711+ do i=1,nem
3712+ drlist(i)=sngl(iso_getdrv40(pgamma(0,j),pem(0,i)))
3713+ enddo
3714+ call sortzv(drlist,isorted,nem,ismode,isway,izero)
3715+c First of list must be the photon: check this, and drop it
3716+ if(isorted(1).ne.j.or.drlist(isorted(1)).gt.1.e-4)then
3717+ write(*,*)'Error #1 in photon isolation'
3718+ write(*,*)j,isorted(1),drlist(isorted(1))
3719+ stop
3720+ endif
3721+ Etsum(0)=0.d0
3722+ nin=0
3723+ do i=2,nem
3724+ if(dble(drlist(isorted(i))).le.R0gamma)then
3725+ nin=nin+1
3726+ Etsum(nin)=Etsum(nin-1)+pt(pem(0,isorted(i)))
3727+ endif
3728+ enddo
3729+ do i=1,nin
3730+ alliso=alliso .and.
3731+ # Etsum(i).le.chi_gamma_iso(dble(drlist(isorted(i))),
3732+ # R0gamma,xn,epsgamma,ptg)
3733+ enddo
3734+
3735+ endif
3736+
3737+c End of loop over photons
3738+ enddo
3739+
3740+ if(.not.alliso)then
3741+ passcuts=.false.
3742+ return
3743+ endif
3744+ endif
3745+
3746+ 444 continue
3747+c End photon isolation
3748+
3749+
3750+C...Set couplings if event passed cuts
3751+
3752+ 21 if(.not.fixed_ren_scale) then
3753+ call set_ren_scale(P,scale)
3754+ if(scale.gt.0) G = SQRT(4d0*PI*ALPHAS(scale))
3755+ endif
3756+
3757+ if(.not.fixed_fac_scale) then
3758+ call set_fac_scale(P,q2fact)
3759+ endif
3760+
3761+c
3762+c Here we cluster event and reset factorization and renormalization
3763+c scales on an event-by-event basis, as well as check xqcut for jets
3764+c
3765+c Note the following condition is the first line of setclscales
3766+c if(xqcut.gt.0d0.or.ickkw.gt.0.or.scale.eq.0.or.q2fact(1).eq.0)then
3767+c Do not duplicate it since some variable are set for syscalc in the fct
3768+ if(.not.setclscales(p))then
3769+ cutsdone=.false.
3770+ cutspassed=.false.
3771+ passcuts = .false.
3772+ if(debug) write (*,*) 'setclscales -> fails'
3773+ return
3774+ endif
3775+c endif
3776+
3777+c Set couplings in model files
3778+ if(.not.fixed_ren_scale.or..not.fixed_couplings) then
3779+ if (.not.fixed_couplings)then
3780+ do i=0,3
3781+ do j=1,nexternal
3782+ pp(i,j)=p(i,j)
3783+ enddo
3784+ enddo
3785+ endif
3786+ call update_as_param()
3787+ endif
3788+
3789+ IF (FIRSTTIME2) THEN
3790+ FIRSTTIME2=.FALSE.
3791+ write(6,*) 'alpha_s for scale ',scale,' is ', G**2/(16d0*atan(1d0))
3792+ ENDIF
3793+
3794+ if(debug) write (*,*) '============================='
3795+ if(debug) write (*,*) ' EVENT PASSED THE CUTS '
3796+ if(debug) write (*,*) '============================='
3797+
3798+ CUTSPASSED=.TRUE.
3799+
3800+ RETURN
3801+ END
3802+
3803+
3804+C
3805+C FUNCTION FOR ISOLATION
3806+C
3807+
3808+ function iso_getdrv40(p1,p2)
3809+ implicit none
3810+ real*8 iso_getdrv40,p1(0:3),p2(0:3)
3811+ real*8 iso_getdr
3812+c
3813+ iso_getdrv40=iso_getdr(p1(0),p1(1),p1(2),p1(3),
3814+ # p2(0),p2(1),p2(2),p2(3))
3815+ return
3816+ end
3817+
3818+
3819+ function iso_getdr(en1,ptx1,pty1,pl1,en2,ptx2,pty2,pl2)
3820+ implicit none
3821+ real*8 iso_getdr,en1,ptx1,pty1,pl1,en2,ptx2,pty2,pl2,deta,dphi,
3822+ # iso_getpseudorap,iso_getdelphi
3823+c
3824+ deta=iso_getpseudorap(en1,ptx1,pty1,pl1)-
3825+ # iso_getpseudorap(en2,ptx2,pty2,pl2)
3826+ dphi=iso_getdelphi(ptx1,pty1,ptx2,pty2)
3827+ iso_getdr=sqrt(dphi**2+deta**2)
3828+ return
3829+ end
3830+
3831+
3832+ function iso_getpseudorap(en,ptx,pty,pl)
3833+ implicit none
3834+ real*8 iso_getpseudorap,en,ptx,pty,pl,tiny,pt,eta,th
3835+ parameter (tiny=1.d-5)
3836+c
3837+ pt=sqrt(ptx**2+pty**2)
3838+ if(pt.lt.tiny.and.abs(pl).lt.tiny)then
3839+ eta=sign(1.d0,pl)*1.d8
3840+ else
3841+ th=atan2(pt,pl)
3842+ eta=-log(tan(th/2.d0))
3843+ endif
3844+ iso_getpseudorap=eta
3845+ return
3846+ end
3847+
3848+
3849+ function iso_getdelphi(ptx1,pty1,ptx2,pty2)
3850+ implicit none
3851+ real*8 iso_getdelphi,ptx1,pty1,ptx2,pty2,tiny,pt1,pt2,tmp
3852+ parameter (tiny=1.d-5)
3853+c
3854+ pt1=sqrt(ptx1**2+pty1**2)
3855+ pt2=sqrt(ptx2**2+pty2**2)
3856+ if(pt1.ne.0.d0.and.pt2.ne.0.d0)then
3857+ tmp=ptx1*ptx2+pty1*pty2
3858+ tmp=tmp/(pt1*pt2)
3859+ if(abs(tmp).gt.1.d0+tiny)then
3860+ write(*,*)'Cosine larger than 1'
3861+ stop
3862+ elseif(abs(tmp).ge.1.d0)then
3863+ tmp=sign(1.d0,tmp)
3864+ endif
3865+ tmp=acos(tmp)
3866+ else
3867+ tmp=1.d8
3868+ endif
3869+ iso_getdelphi=tmp
3870+ return
3871+ end
3872+
3873+ function chi_gamma_iso(dr,R0,xn,epsgamma,pTgamma)
3874+c Eq.(3.4) of Phys.Lett. B429 (1998) 369-374 [hep-ph/9801442]
3875+ implicit none
3876+ real*8 chi_gamma_iso,dr,R0,xn,epsgamma,pTgamma
3877+ real*8 tmp,axn
3878+c
3879+ axn=abs(xn)
3880+ tmp=epsgamma*pTgamma
3881+ if(axn.ne.0.d0)then
3882+ tmp=tmp*( (1-cos(dr))/(1-cos(R0)) )**axn
3883+ endif
3884+ chi_gamma_iso=tmp
3885+ return
3886+ end
3887+
3888+
3889+*
3890+* $Id: sortzv.F,v 1.1.1.1 1996/02/15 17:49:50 mclareni Exp $
3891+*
3892+* $Log: sortzv.F,v $
3893+* Revision 1.1.1.1 1996/02/15 17:49:50 mclareni
3894+* Kernlib
3895+*
3896+*
3897+c$$$#include "kerngen/pilot.h"
3898+ SUBROUTINE SORTZV (A,INDEX,N1,MODE,NWAY,NSORT)
3899+C
3900+C CERN PROGLIB# M101 SORTZV .VERSION KERNFOR 3.15 820113
3901+C ORIG. 02/10/75
3902+C
3903+ DIMENSION A(N1),INDEX(N1)
3904+C
3905+C
3906+ N = N1
3907+ IF (N.LE.0) RETURN
3908+ IF (NSORT.NE.0) GO TO 2
3909+ DO 1 I=1,N
3910+ 1 INDEX(I)=I
3911+C
3912+ 2 IF (N.EQ.1) RETURN
3913+ IF (MODE) 10,20,30
3914+ 10 CALL SORTTI (A,INDEX,N)
3915+ GO TO 40
3916+C
3917+ 20 CALL SORTTC(A,INDEX,N)
3918+ GO TO 40
3919+C
3920+ 30 CALL SORTTF (A,INDEX,N)
3921+C
3922+ 40 IF (NWAY.EQ.0) GO TO 50
3923+ N2 = N/2
3924+ DO 41 I=1,N2
3925+ ISWAP = INDEX(I)
3926+ K = N+1-I
3927+ INDEX(I) = INDEX(K)
3928+ 41 INDEX(K) = ISWAP
3929+ 50 RETURN
3930+ END
3931+* ========================================
3932+ SUBROUTINE SORTTF (A,INDEX,N1)
3933+C
3934+ DIMENSION A(N1),INDEX(N1)
3935+C
3936+ N = N1
3937+ DO 3 I1=2,N
3938+ I3 = I1
3939+ I33 = INDEX(I3)
3940+ AI = A(I33)
3941+ 1 I2 = I3/2
3942+ IF (I2) 3,3,2
3943+ 2 I22 = INDEX(I2)
3944+ IF (AI.LE.A (I22)) GO TO 3
3945+ INDEX (I3) = I22
3946+ I3 = I2
3947+ GO TO 1
3948+ 3 INDEX (I3) = I33
3949+ 4 I3 = INDEX (N)
3950+ INDEX (N) = INDEX (1)
3951+ AI = A(I3)
3952+ N = N-1
3953+ IF (N-1) 12,12,5
3954+ 5 I1 = 1
3955+ 6 I2 = I1 + I1
3956+ IF (I2.LE.N) I22= INDEX(I2)
3957+ IF (I2-N) 7,9,11
3958+ 7 I222 = INDEX (I2+1)
3959+ IF (A(I22)-A(I222)) 8,9,9
3960+ 8 I2 = I2+1
3961+ I22 = I222
3962+ 9 IF (AI-A(I22)) 10,11,11
3963+ 10 INDEX(I1) = I22
3964+ I1 = I2
3965+ GO TO 6
3966+ 11 INDEX (I1) = I3
3967+ GO TO 4
3968+ 12 INDEX (1) = I3
3969+ RETURN
3970+ END
3971+* ========================================
3972+ SUBROUTINE SORTTI (A,INDEX,N1)
3973+C
3974+ INTEGER A,AI
3975+ DIMENSION A(N1),INDEX(N1)
3976+C
3977+ N = N1
3978+ DO 3 I1=2,N
3979+ I3 = I1
3980+ I33 = INDEX(I3)
3981+ AI = A(I33)
3982+ 1 I2 = I3/2
3983+ IF (I2) 3,3,2
3984+ 2 I22 = INDEX(I2)
3985+ IF (AI.LE.A (I22)) GO TO 3
3986+ INDEX (I3) = I22
3987+ I3 = I2
3988+ GO TO 1
3989+ 3 INDEX (I3) = I33
3990+ 4 I3 = INDEX (N)
3991+ INDEX (N) = INDEX (1)
3992+ AI = A(I3)
3993+ N = N-1
3994+ IF (N-1) 12,12,5
3995+ 5 I1 = 1
3996+ 6 I2 = I1 + I1
3997+ IF (I2.LE.N) I22= INDEX(I2)
3998+ IF (I2-N) 7,9,11
3999+ 7 I222 = INDEX (I2+1)
4000+ IF (A(I22)-A(I222)) 8,9,9
4001+ 8 I2 = I2+1
4002+ I22 = I222
4003+ 9 IF (AI-A(I22)) 10,11,11
4004+ 10 INDEX(I1) = I22
4005+ I1 = I2
4006+ GO TO 6
4007+ 11 INDEX (I1) = I3
4008+ GO TO 4
4009+ 12 INDEX (1) = I3
4010+ RETURN
4011+ END
4012+* ========================================
4013+ SUBROUTINE SORTTC (A,INDEX,N1)
4014+C
4015+ INTEGER A,AI
4016+ DIMENSION A(N1),INDEX(N1)
4017+C
4018+ N = N1
4019+ DO 3 I1=2,N
4020+ I3 = I1
4021+ I33 = INDEX(I3)
4022+ AI = A(I33)
4023+ 1 I2 = I3/2
4024+ IF (I2) 3,3,2
4025+ 2 I22 = INDEX(I2)
4026+ IF(ICMPCH(AI,A(I22)))3,3,21
4027+ 21 INDEX (I3) = I22
4028+ I3 = I2
4029+ GO TO 1
4030+ 3 INDEX (I3) = I33
4031+ 4 I3 = INDEX (N)
4032+ INDEX (N) = INDEX (1)
4033+ AI = A(I3)
4034+ N = N-1
4035+ IF (N-1) 12,12,5
4036+ 5 I1 = 1
4037+ 6 I2 = I1 + I1
4038+ IF (I2.LE.N) I22= INDEX(I2)
4039+ IF (I2-N) 7,9,11
4040+ 7 I222 = INDEX (I2+1)
4041+ IF (ICMPCH(A(I22),A(I222))) 8,9,9
4042+ 8 I2 = I2+1
4043+ I22 = I222
4044+ 9 IF (ICMPCH(AI,A(I22))) 10,11,11
4045+ 10 INDEX(I1) = I22
4046+ I1 = I2
4047+ GO TO 6
4048+ 11 INDEX (I1) = I3
4049+ GO TO 4
4050+ 12 INDEX (1) = I3
4051+ RETURN
4052+ END
4053+* ========================================
4054+ FUNCTION ICMPCH(IC1,IC2)
4055+C FUNCTION TO COMPARE TWO 4 CHARACTER EBCDIC STRINGS - IC1,IC2
4056+C ICMPCH=-1 IF HEX VALUE OF IC1 IS LESS THAN IC2
4057+C ICMPCH=0 IF HEX VALUES OF IC1 AND IC2 ARE THE SAME
4058+C ICMPCH=+1 IF HEX VALUES OF IC1 IS GREATER THAN IC2
4059+ I1=IC1
4060+ I2=IC2
4061+ IF(I1.GE.0.AND.I2.GE.0)GOTO 40
4062+ IF(I1.GE.0)GOTO 60
4063+ IF(I2.GE.0)GOTO 80
4064+ I1=-I1
4065+ I2=-I2
4066+ IF(I1-I2)80,70,60
4067+ 40 IF(I1-I2)60,70,80
4068+ 60 ICMPCH=-1
4069+ RETURN
4070+ 70 ICMPCH=0
4071+ RETURN
4072+ 80 ICMPCH=1
4073+ RETURN
4074+ END
4075+
4076+c************************************************************************
4077+c Returns pTLund (i.e. the Pythia8 evolution variable) between two
4078+c particles with momenta prad and pemt with momentum prec as spectator
4079+c************************************************************************
4080+
4081+ DOUBLE PRECISION FUNCTION RHOPYTHIA(PRAD, PEMT, PREC, FLAVRAD,
4082+ & FLAVEMT, RADTYPE, RECTYPE)
4083+
4084+ IMPLICIT NONE
4085+c
4086+c Arguments
4087+c
4088+ DOUBLE PRECISION PRAD(0:3),PEMT(0:3), PREC(0:3)
4089+ INTEGER FLAVRAD, FLAVEMT, RADTYPE,RECTYPE
4090+c
4091+c Local
4092+c
4093+ DOUBLE PRECISION Q(0:3),SUM(0:3), qBR(0:3), qAR(0:3)
4094+ DOUBLE PRECISION Q2, m2Rad, m2Emt, m2Dip, qBR2, qAR2, x1, x2, z
4095+ DOUBLE PRECISION m2RadAft, m2EmtAft, m2Rec, m2RadBef, m2ar, rescale
4096+ DOUBLE PRECISION TEMP, lambda13, k1, k3, m2Final
4097+ DOUBLE PRECISION m0u, m0d, m0c, m0s, m0t, m0b, m0w, m0z, m0x
4098+ DOUBLE PRECISION PRECAFT(0:3)
4099+ INTEGER emtsign
4100+ INTEGER idRadBef
4101+ LOGICAL allowed
4102+
4103+c-----
4104+c Begin Code
4105+c-----
4106+
4107+C Set masses. Currently no way of getting those?
4108+ m0u = 0.0
4109+ m0d = 0.0
4110+ m0c = 1.5
4111+ m0s = 0.0
4112+ m0t = 172.5
4113+ m0w = 80.4
4114+ m0z = 91.188
4115+ m0x = 400.0
4116+
4117+C Store recoiler momentum (since FI splittings require recoiler
4118+C rescaling)
4119+ PRECAFT(0) = PREC(0)
4120+ PRECAFT(1) = PREC(1)
4121+ PRECAFT(2) = PREC(2)
4122+ PRECAFT(3) = PREC(3)
4123+C Get sign of emitted momentum
4124+ emtsign = 1
4125+ if(radtype .eq. -1) emtsign = -1
4126+
4127+C Get virtuality
4128+ Q(0) = pRad(0) + emtsign*pEmt(0)
4129+ Q(1) = pRad(1) + emtsign*pEmt(1)
4130+ Q(2) = pRad(2) + emtsign*pEmt(2)
4131+ Q(3) = pRad(3) + emtsign*pEmt(3)
4132+ Q2 = emtsign * ( Q(0)**2 - Q(1)**2 - Q(2)**2 - Q(3)**2 );
4133+
4134+C Reset allowed
4135+ allowed = .true.
4136+
4137+C Splitting not possible for negative virtuality.
4138+ if ( Q2 .lt. 0.0 ) allowed = .false.
4139+
4140+C Try to reconstruct flavour of radiator before emission.
4141+ idRadBef = 0
4142+C gluon radiation: idBef = idAft
4143+ if (abs(flavEmt) .eq. 21 .or. abs(flavEmt) .eq. 22 ) idRadBef=flavRad
4144+C final state gluon splitting: idBef = 21
4145+ if (radtype .eq. 1 .and. flavEmt .eq. -flavRad) idRadBef=21
4146+C final state quark -> gluon conversion
4147+ if (radtype .eq. 1 .and. abs(flavEmt) .lt. 10 .and. flavRad .eq. 21) idRadBef=flavEmt
4148+C initial state gluon splitting: idBef = -idEmt
4149+ if (radtype .eq. -1 .and. abs(flavEmt) .lt. 10 .and. flavRad .eq. 21) idRadBef=-flavEmt
4150+C initial state gluon -> quark conversion
4151+ if (radtype .eq. -1 .and. abs(flavEmt) .lt. 10 .and. flavRad .eq. flavEmt) idRadBef=21
4152+C W-boson radiation
4153+ if (flavEmt .eq. 24) idRadBef = flavRad+1
4154+ if (flavEmt .eq. -24) idRadBef = flavRad-1
4155+
4156+C Set particle masses.
4157+ m2RadAft = 0.0
4158+ m2EmtAft = 0.0
4159+ m2Rec = 0.0
4160+ m2RadBef = 0.0
4161+
4162+ m2RadAft = pRad(0)*pRad(0)-pRad(1)*pRad(1)-pRad(2)*pRad(2)-pRad(3)*pRad(3)
4163+ m2EmtAft = pEmt(0)*pEmt(0)-pEmt(1)*pEmt(1)-pEmt(2)*pEmt(2)-pEmt(3)*pEmt(3)
4164+ m2Rec = pRec(0)*pRec(0)-pRec(1)*pRec(1)-pRec(2)*pRec(2)-pRec(3)*pRec(3)
4165+
4166+ if (m2RadAft .lt. 1d-4) m2RadAft = 0.0
4167+ if (m2EmtAft .lt. 1d-4) m2EmtAft = 0.0
4168+ if (m2Rec .lt. 1d-4) m2Rec = 0.0
4169+
4170+ if (abs(flavRad) .ne. 21 .and. abs(flavRad) .ne. 22 .and.
4171+ & abs(flavEmt) .ne. 24 .and.
4172+ & abs(flavRad) .ne. abs(flavEmt)) then
4173+ m2RadBef = m2RadAft
4174+ else if (abs(flavEmt) .eq. 24) then
4175+ if (idRadBef .ne. 0) then
4176+ if( abs(idRadBef) .eq. 4 ) m2RadBef = m0c**2
4177+ if( abs(idRadBef) .eq. 5 ) m2RadBef = m0b**2
4178+ if( abs(idRadBef) .eq. 6 ) m2RadBef = m0t**2
4179+ if( abs(idRadBef) .eq. 9000001 ) m2RadBef = m0x**2
4180+ endif
4181+ else if (radtype .eq. -1) then
4182+ if (abs(flavRad) .eq. 21 .and. abs(flavEmt) .eq. 21) m2RadBef = m2EmtAft
4183+ endif
4184+
4185+C Calculate dipole mass for final-state radiation.
4186+ m2Final = 0.0
4187+ m2Final = m2Final + (pRad(0) + pRec(0) + pEmt(0))**2
4188+ m2Final = m2Final - (pRad(1) + pRec(1) + pEmt(1))**2
4189+ m2Final = m2Final - (pRad(2) + pRec(2) + pEmt(2))**2
4190+ m2Final = m2Final - (pRad(3) + pRec(3) + pEmt(3))**2
4191+
4192+C Final state splitting not possible for negative dipole mass.
4193+ if ( radtype .eq. 1 .and. m2Final .lt. 0.0 ) allowed = .false.
4194+
4195+C Rescale recoiler for final-intial splittings.
4196+ rescale = 1.0
4197+ if (radtype .eq. 1 .and. rectype .eq. -1) then
4198+ m2ar = m2Final - 2.0*Q2 + 2.0*m2RadBef
4199+ rescale = (1.0 - (Q2 - m2RadBef) / (m2ar-m2RadBef))
4200+ & /(1.0 + (Q2 - m2RadBef) / (m2ar-m2RadBef))
4201+ pRecAft(0) = pRecAft(0)*rescale
4202+ pRecAft(1) = pRecAft(1)*rescale
4203+ pRecAft(2) = pRecAft(2)*rescale
4204+ pRecAft(3) = pRecAft(3)*rescale
4205+ endif
4206+
4207+C Final-initial splitting not possible for negative rescaling.
4208+ if ( rescale .lt. 0.0 ) allowed = .false.
4209+
4210+C Construct dipole momentum for FSR.
4211+ sum(0) = pRad(0) + pRecAft(0) + pEmt(0)
4212+ sum(1) = pRad(1) + pRecAft(1) + pEmt(1)
4213+ sum(2) = pRad(2) + pRecAft(2) + pEmt(2)
4214+ sum(3) = pRad(3) + pRecAft(3) + pEmt(3)
4215+ m2Dip = sum(0)**2 - sum(1)**2 - sum(2)**2 - sum(3)**2
4216+
4217+C Construct 2->3 variables for FSR
4218+ x1 = 2. * ( sum(0)*pRad(0) - sum(1)*pRad(1)
4219+ & - sum(2)*pRad(2) - sum(3)*pRad(3) ) / m2Dip
4220+ x2 = 2. * ( sum(0)*pRecAft(0) - sum(1)*pRecAft(1)
4221+ & - sum(2)*pRecAft(2) - sum(3)*pRecAft(3) ) / m2Dip
4222+
4223+C Final state splitting not possible for ill-defined
4224+C 3-body-variables.
4225+ if ( radtype .eq. 1 .and. x1 .lt. 0.0 ) allowed = .false.
4226+ if ( radtype .eq. 1 .and. x1 .gt. 1.0 ) allowed = .false.
4227+ if ( radtype .eq. 1 .and. x2 .lt. 0.0 ) allowed = .false.
4228+ if ( radtype .eq. 1 .and. x2 .gt. 1.0 ) allowed = .false.
4229+
4230+C Auxiliary variables for massive FSR
4231+ lambda13 = DSQRT( (Q2 - m2RadAft - m2EmtAft )**2 - 4.0 * m2RadAft*m2EmtAft)
4232+ k1 = ( Q2 - lambda13 + (m2EmtAft - m2RadAft ) ) / ( 2.0 * Q2)
4233+ k3 = ( Q2 - lambda13 - (m2EmtAft - m2RadAft ) ) / ( 2.0 * Q2)
4234+
4235+C Construct momenta of dipole before/after splitting for ISR
4236+ qBR(0) = pRad(0) + pRec(0) - pEmt(0)
4237+ qBR(1) = pRad(1) + pRec(1) - pEmt(1)
4238+ qBR(2) = pRad(2) + pRec(2) - pEmt(2)
4239+ qBR(3) = pRad(3) + pRec(3) - pEmt(3)
4240+ qBR2 = qBR(0)**2 - qBR(1)**2 - qBR(2)**2 - qBR(3)**2
4241+
4242+ qAR(0) = pRad(0) + pRec(0)
4243+ qAR(1) = pRad(1) + pRec(1)
4244+ qAR(2) = pRad(2) + pRec(2)
4245+ qAR(3) = pRad(3) + pRec(3)
4246+ qAR2 = qAR(0)**2 - qAR(1)**2 - qAR(2)**2 - qAR(3)**2
4247+
4248+C Calculate z of splitting, different for FSR and ISR
4249+ z = 1.0 / (1.0 - k1 -k3) * ( x1 / (2.0-x2) - k3)
4250+ if(radtype .eq. -1 ) z = qBR2 / qAR2;
4251+
4252+C Splitting not possible for ill-defined energy sharing.
4253+ if ( z .lt. 0.0 .or. z .gt. 1.0 ) allowed = .false.
4254+
4255+C pT^2 = separation * virtuality (corrected with mass for FSR)
4256+ if (radtype .eq. 1) temp = z*(1-z)*(Q2 - m2RadBef)
4257+ if (radtype .eq. -1) temp = (1-z)*Q2
4258+
4259+C Check threshold in ISR
4260+ if (radtype .ne. 1) then
4261+ if ((abs(flavRad) .eq. 4 .or. abs(flavEmt) .eq. 4)
4262+ & .and. dsqrt(temp) .le. 2.0*m0c**2 ) temp = (1.-z)*(Q2+m0c**2)
4263+ if ((abs(flavRad) .eq. 5 .or. abs(flavEmt) .eq. 5)
4264+ & .and. dsqrt(temp) .le. 2.0*m0b**2 ) temp = (1.-z)*(Q2+m0b**2)
4265+ endif
4266+
4267+C Kinematically impossible splittings should not be included in the
4268+C pT definition!
4269+ if( .not. allowed) temp = 1d15
4270+
4271+ if(temp .lt. 0.0) temp = 0.0
4272+
4273+C Return pT
4274+ rhoPythia = dsqrt(temp);
4275+
4276+ RETURN
4277+ END
4278
4279=== modified file 'Template/LO/SubProcesses/genps.f'
4280--- Template/LO/SubProcesses/genps.f 2016-06-16 15:03:59 +0000
4281+++ Template/LO/SubProcesses/genps.f 2016-11-04 09:43:15 +0000
4282@@ -216,9 +216,9 @@
4283 if(ebeam(1).lt.m1) ebeam(1)=m1
4284 if(ebeam(2).lt.m2) ebeam(2)=m2
4285 pi1(0)=ebeam(1)
4286- pi1(3)=sqrt(ebeam(1)**2-m1**2)
4287+ pi1(3)=sqrt(max(ebeam(1)**2-m1**2, 0d0))
4288 pi2(0)=ebeam(2)
4289- pi2(3)=-sqrt(ebeam(2)**2-m2**2)
4290+ pi2(3)=-sqrt(max(ebeam(2)**2-m2**2, 0d0))
4291 stot=m1**2+m2**2+2*(pi1(0)*pi2(0)-pi1(3)*pi2(3))
4292 endif
4293 write(*,'(x,a,f13.2)') 'Set CM energy to ',sqrt(stot)
4294
4295=== modified file 'Template/LO/SubProcesses/makefile'
4296--- Template/LO/SubProcesses/makefile 2016-05-26 23:36:59 +0000
4297+++ Template/LO/SubProcesses/makefile 2016-11-04 09:43:15 +0000
4298@@ -1,6 +1,13 @@
4299 include ../../Source/make_opts
4300 FFLAGS+= -w
4301
4302+# Load additional dependencies of the bias module, if present
4303+ifeq (,$(wildcard ../bias_dependencies))
4304+BIASDEPENDENCIES =
4305+else
4306+include ../bias_dependencies
4307+endif
4308+
4309 # Definitions
4310
4311 LIBDIR = ../../lib/
4312@@ -17,9 +24,9 @@
4313 MADLOOP_LIB =
4314 endif
4315
4316-LINKLIBS = $(LINK_MADLOOP_LIB) $(LINK_LOOP_LIBS) -L../../lib/ -ldhelas -ldsample -lmodel -lgeneric -lpdf -lcernlib $(llhapdf)
4317+LINKLIBS = $(LINK_MADLOOP_LIB) $(LINK_LOOP_LIBS) -L../../lib/ -ldhelas -ldsample -lmodel -lgeneric -lpdf -lcernlib $(llhapdf) -lbias
4318
4319-LIBS = $(LIBDIR)libdhelas.$(libext) $(LIBDIR)libdsample.$(libext) $(LIBDIR)libgeneric.$(libext) $(LIBDIR)libpdf.$(libext) $(LIBDIR)libmodel.$(libext) $(LIBDIR)libcernlib.$(libext) $(MADLOOP_LIB) $(LOOP_LIBS)
4320+LIBS = $(LIBDIR)libbias.$(libext) $(LIBDIR)libdhelas.$(libext) $(LIBDIR)libdsample.$(libext) $(LIBDIR)libgeneric.$(libext) $(LIBDIR)libpdf.$(libext) $(LIBDIR)libmodel.$(libext) $(LIBDIR)libcernlib.$(libext) $(MADLOOP_LIB) $(LOOP_LIBS)
4321
4322 # Source files
4323
4324@@ -34,7 +41,7 @@
4325 # Binaries
4326
4327 $(PROG): $(PROCESS) auto_dsig.o $(LIBS)
4328- $(FC) -o $(PROG) $(PROCESS) $(LINKLIBS) $(LDFLAGS)
4329+ $(FC) -o $(PROG) $(PROCESS) $(LINKLIBS) $(LDFLAGS) $(BIASDEPENDENCIES)
4330
4331 gensym: $(SYMMETRY) configs.inc $(LIBDIR)libmodel.$(libext) $(LIBDIR)libgeneric.$(libext)
4332 $(FC) -o gensym $(SYMMETRY) -L../../lib/ -lmodel -lgeneric $(LDFLAGS)
4333
4334=== modified file 'Template/LO/SubProcesses/myamp.f'
4335--- Template/LO/SubProcesses/myamp.f 2016-06-16 15:03:59 +0000
4336+++ Template/LO/SubProcesses/myamp.f 2016-11-04 09:43:15 +0000
4337@@ -212,7 +212,8 @@
4338 c
4339 onshell = (abs(xmass - prmass(i,iconfig)) .lt.
4340 $ bwcutoff*prwidth(i,iconfig).and.
4341- $ prwidth(i,iconfig)/prmass(i,iconfig).lt.0.1d0)
4342+ $ (prwidth(i,iconfig)/prmass(i,iconfig).lt.0.1d0.or.
4343+ $ gForceBW(i,iconfig).eq.1))
4344 if(onshell)then
4345 c Remove on-shell forbidden s-channels (gForceBW=2) (JA 2/10/11)
4346 if(gForceBW(i,iconfig).eq.2) then
4347
4348=== modified file 'Template/LO/SubProcesses/reweight.f'
4349--- Template/LO/SubProcesses/reweight.f 2016-06-07 09:33:55 +0000
4350+++ Template/LO/SubProcesses/reweight.f 2016-11-04 09:43:15 +0000
4351@@ -994,21 +994,21 @@
4352 pt2ijcl(nexternal-2)=q2fact(1)
4353 if(nexternal.gt.3) pt2ijcl(nexternal-3)=q2fact(1)
4354 else
4355- q2fact(1)=pt2ijcl(nexternal-2)
4356- q2fact(2)=q2fact(1)
4357+ q2fact(1)=scalefact**2*pt2ijcl(nexternal-2)
4358+ q2fact(2)=scalefact**2*q2fact(1)
4359 endif
4360 elseif(jcentral(1).eq.0)then
4361- q2fact(1) = pt2ijcl(jfirst(1))
4362+ q2fact(1) = scalefact**2*pt2ijcl(jfirst(1))
4363 elseif(jcentral(2).eq.0)then
4364- q2fact(2) = pt2ijcl(jfirst(2))
4365+ q2fact(2) = scalefact**2*pt2ijcl(jfirst(2))
4366 elseif(ickkw.eq.2.or.(pdfwgt.and.ickkw.gt.0))then
4367 c Total pdf weight is f1(x1,pt2E)*fj(x1*z,Q)/fj(x1*z,pt2E)
4368 c f1(x1,pt2E) is given by DSIG, just need to set scale.
4369 c Use the minimum scale found for fact scale in ME
4370 if(jlast(1).gt.0.and.jfirst(1).le.jlast(1))
4371- $ q2fact(1)=min(pt2ijcl(jfirst(1)),q2fact(1))
4372+ $ q2fact(1)=scalefact**2*min(pt2ijcl(jfirst(1)),q2fact(1))
4373 if(jlast(2).gt.0.and.jfirst(2).le.jlast(2))
4374- $ q2fact(2)=min(pt2ijcl(jfirst(2)),q2fact(2))
4375+ $ q2fact(2)=scalefact**2*min(pt2ijcl(jfirst(2)),q2fact(2))
4376 endif
4377
4378 c Check that factorization scale is >= 2 GeV
4379@@ -1087,7 +1087,53 @@
4380 endif
4381 return
4382 end
4383+
4384+ double precision function custom_bias(p, original_weight, numproc)
4385+c***********************************************************
4386+c Returns a bias weight as instructed by the bias module
4387+c***********************************************************
4388+ implicit none
4389+
4390+ include 'nexternal.inc'
4391+ include 'maxparticles.inc'
4392+ include 'run_config.inc'
4393+ include 'lhe_event_infos.inc'
4394+ include 'run.inc'
4395+
4396+ DOUBLE PRECISION P(0:3,NEXTERNAL)
4397+ integer numproc
4398+
4399+ double precision original_weight
4400+
4401+ double precision bias_weight
4402+ logical is_bias_dummy, requires_full_event_info
4403+ common/bias/bias_weight,is_bias_dummy,requires_full_event_info
4404+
4405
4406+C If the bias module necessitates the full event information
4407+C then we must call write_leshouches here already so as to set it.
4408+C The weight specified at this stage is irrelevant since we
4409+C use do_write_events set to .False.
4410+ AlreadySetInBiasModule = .False.
4411+ if (requires_full_event_info) then
4412+ call write_leshouche(p,-1.0d0,numproc,.False.)
4413+C Write the event in the string evt_record, part of the
4414+C lhe_event_info common block
4415+ event_record(:) = ''
4416+ call write_event_to_stream(event_record,pb(0,1),1.0d0,npart,
4417+ & jpart(1,1),ngroup,sscale,aaqcd,aaqed,buff,use_syst,
4418+ & s_buff, nclus, buffclus)
4419+ AlreadySetInBiasModule = .True.
4420+ else
4421+ AlreadySetInBiasModule = .False.
4422+ endif
4423+C Apply the bias weight. The default run_card entry 'None' for the
4424+c 'bias_weight' option will implement a constant bias_weight of 1.0 below.
4425+ call bias_wgt(p, original_weight, bias_weight)
4426+ custom_bias = bias_weight
4427+
4428+ end
4429+
4430 double precision function rewgt(p)
4431 c**************************************************
4432 c reweight the hard me according to ckkw
4433
4434=== modified file 'Template/LO/SubProcesses/setcuts.f'
4435--- Template/LO/SubProcesses/setcuts.f 2016-06-16 15:03:59 +0000
4436+++ Template/LO/SubProcesses/setcuts.f 2016-11-04 09:43:15 +0000
4437@@ -81,6 +81,11 @@
4438 logical do_cuts(nexternal)
4439 COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
4440 . IS_A_ONIUM, do_cuts
4441+
4442+c Store which external particles undergo the ktdurham and ptlund cuts.
4443+ LOGICAL is_pdg_for_merging_cut(NEXTERNAL)
4444+ COMMON /TO_MERGE_CUTS/is_pdg_for_merging_cut, from_decay
4445+
4446 c
4447 c
4448 c reading parameters
4449@@ -228,55 +233,17 @@
4450 if (abs(idup(i,1,iproc)).eq.16) is_a_nu(i)=.true. ! no cuts on vt vt~
4451 if (pmass(i).gt.10d0) is_heavy(i)=.true. ! heavy fs particle
4452 c-onium
4453-c if (idup(i,1,iproc).eq.441) is_a_onium(i)=.true. ! charmonium
4454-c if (idup(i,1,iproc).eq.10441) is_a_onium(i)=.true. ! charmonium
4455-c if (idup(i,1,iproc).eq.100441) is_a_onium(i)=.true. ! charmonium
4456-c if (idup(i,1,iproc).eq.443) is_a_onium(i)=.true. ! charmonium
4457-c if (idup(i,1,iproc).eq.10443) is_a_onium(i)=.true. ! charmonium
4458-c if (idup(i,1,iproc).eq.20443) is_a_onium(i)=.true. ! charmonium
4459-c if (idup(i,1,iproc).eq.100443) is_a_onium(i)=.true. ! charmonium
4460-c if (idup(i,1,iproc).eq.30443) is_a_onium(i)=.true. ! charmonium
4461-c if (idup(i,1,iproc).eq.9000443) is_a_onium(i)=.true. ! charmonium
4462-c if (idup(i,1,iproc).eq.9010443) is_a_onium(i)=.true. ! charmonium
4463-c if (idup(i,1,iproc).eq.9020443) is_a_onium(i)=.true. ! charmonium
4464-c if (idup(i,1,iproc).eq.445) is_a_onium(i)=.true. ! charmonium
4465-c if (idup(i,1,iproc).eq.9000445) is_a_onium(i)=.true. ! charmonium
4466-
4467-c if (idup(i,1,iproc).eq.551) is_a_onium(i)=.true. ! bottomonium
4468-c if (idup(i,1,iproc).eq.10551) is_a_onium(i)=.true. ! bottomonium
4469-c if (idup(i,1,iproc).eq.100551) is_a_onium(i)=.true. ! bottomonium
4470-c if (idup(i,1,iproc).eq.110551) is_a_onium(i)=.true. ! bottomonium
4471-c if (idup(i,1,iproc).eq.200551) is_a_onium(i)=.true. ! bottomonium
4472-c if (idup(i,1,iproc).eq.210551) is_a_onium(i)=.true. ! bottomonium
4473-c if (idup(i,1,iproc).eq.553) is_a_onium(i)=.true. ! bottomonium
4474-c if (idup(i,1,iproc).eq.10553) is_a_onium(i)=.true. ! bottomonium
4475-c if (idup(i,1,iproc).eq.20553) is_a_onium(i)=.true. ! bottomonium
4476-c if (idup(i,1,iproc).eq.30553) is_a_onium(i)=.true. ! bottomonium
4477-c if (idup(i,1,iproc).eq.100553) is_a_onium(i)=.true. ! bottomonium
4478-c if (idup(i,1,iproc).eq.110553) is_a_onium(i)=.true. ! bottomonium
4479-c if (idup(i,1,iproc).eq.120553) is_a_onium(i)=.true. ! bottomonium
4480-c if (idup(i,1,iproc).eq.130553) is_a_onium(i)=.true. ! bottomonium
4481-c if (idup(i,1,iproc).eq.200553) is_a_onium(i)=.true. ! bottomonium
4482-c if (idup(i,1,iproc).eq.210553) is_a_onium(i)=.true. ! bottomonium
4483-c if (idup(i,1,iproc).eq.220553) is_a_onium(i)=.true. ! bottomonium
4484-c if (idup(i,1,iproc).eq.300553) is_a_onium(i)=.true. ! bottomonium
4485-c if (idup(i,1,iproc).eq.9000553) is_a_onium(i)=.true. ! bottomonium
4486-c if (idup(i,1,iproc).eq.9010553) is_a_onium(i)=.true. ! bottomonium
4487-c if (idup(i,1,iproc).eq.555) is_a_onium(i)=.true. ! bottomonium
4488-c if (idup(i,1,iproc).eq.10555) is_a_onium(i)=.true. ! bottomonium
4489-c if (idup(i,1,iproc).eq.20555) is_a_onium(i)=.true. ! bottomonium
4490-c if (idup(i,1,iproc).eq.100555) is_a_onium(i)=.true. ! bottomonium
4491-c if (idup(i,1,iproc).eq.110555) is_a_onium(i)=.true. ! bottomonium
4492-c if (idup(i,1,iproc).eq.200555) is_a_onium(i)=.true. ! bottomonium
4493-c if (idup(i,1,iproc).eq.557) is_a_onium(i)=.true. ! bottomonium
4494-c if (idup(i,1,iproc).eq.100557) is_a_onium(i)=.true. ! bottomonium
4495-
4496-c if (idup(i,1,iproc).eq.541) is_a_onium(i)=.true. ! Bc
4497-c if (idup(i,1,iproc).eq.10541) is_a_onium(i)=.true. ! Bc
4498-c if (idup(i,1,iproc).eq.543) is_a_onium(i)=.true. ! Bc
4499-c if (idup(i,1,iproc).eq.10543) is_a_onium(i)=.true. ! Bc
4500-c if (idup(i,1,iproc).eq.20543) is_a_onium(i)=.true. ! Bc
4501-c if (idup(i,1,iproc).eq.545) is_a_onium(i)=.true. ! Bc
4502+
4503+c Remember mergeable particles
4504+ do j=1,pdgs_for_merging_cut(0)
4505+ if ( pdgs_for_merging_cut(j) .ne. 0
4506+ $ .and. abs(idup(i,1,iproc)) .eq.pdgs_for_merging_cut(j)
4507+ $ .and..not.from_decay(i) ) then
4508+ is_pdg_for_merging_cut(i)=.true.
4509+ exit
4510+ endif
4511+ enddo
4512+
4513 enddo
4514
4515
4516
4517=== modified file 'Template/LO/SubProcesses/unwgt.f'
4518--- Template/LO/SubProcesses/unwgt.f 2016-05-05 11:12:21 +0000
4519+++ Template/LO/SubProcesses/unwgt.f 2016-11-04 09:43:15 +0000
4520@@ -150,6 +150,10 @@
4521 denom = pin(0)*pout(0) - pin(3)*pout(3)
4522 if (denom.ne.0d0) then
4523 get_betaz = (pin(3) * pout(0) - pout(3) * pin(0)) / denom
4524+ else if (pin(0).eq.pin(3)) then
4525+ get_betaz = (pin(0)**2 - pout(0)**2)/(pin(0)**2 + pout(0)**2)
4526+ else if (pin(0).eq.abs(pin(3))) then
4527+ get_betaz = (pout(0)**2 - pin(0)**2)/(pin(0)**2 + pout(0)**2)
4528 else
4529 get_betaz = 0d0
4530 endif
4531@@ -236,9 +240,9 @@
4532 c call write_event(p,uwgt)
4533 c write(29,'(2e15.5)') matrix,wgt
4534 c $B$ S-COMMENT_C $B$
4535- call write_leshouche(p,uwgt,numproc)
4536+ call write_leshouche(p,uwgt,numproc,.True.)
4537 elseif (xwgt .gt. 0d0 .and. nw .lt. 5) then
4538- call write_leshouche(p,wgt/twgt*1d-6,numproc)
4539+ call write_leshouche(p,wgt/twgt*1d-6,numproc,.True.)
4540 c $E$ S-COMMENT_C $E$
4541 endif
4542 maxwgt=max(maxwgt,xwgt)
4543@@ -336,7 +340,8 @@
4544 c
4545 xsum = 0d0
4546 i = nw
4547- do while (xsum-dabs(swgt(i))*(nw-i) .lt. xtot*trunc_max .and. i .gt. 2)
4548+ do while (xsum-dabs(swgt(i))*(nw-i) .lt. xtot*trunc_max
4549+ $ .and. i .gt. 2)
4550 xsum = xsum + dabs(swgt(i))
4551 i = i-1
4552 enddo
4553@@ -437,7 +442,7 @@
4554 c close(lun)
4555 end
4556
4557- SUBROUTINE write_leshouche(p,wgt,numproc)
4558+ SUBROUTINE write_leshouche(p,wgt,numproc,do_write_events)
4559 C**************************************************************************
4560 C Writes out information for event
4561 C**************************************************************************
4562@@ -460,15 +465,16 @@
4563 c
4564 double precision p(0:3,nexternal),wgt
4565 integer numproc
4566+ logical do_write_events
4567 c
4568 c Local
4569 c
4570 integer i,j,k,iini,ifin
4571 double precision sum_wgt,sum_wgt2, xtarget,targetamp(maxflow)
4572- integer ip, np, ic, nc, jpart(7,-nexternal+3:2*nexternal-3)
4573+ integer ip, np, ic, nc
4574 integer ida(2),ito(-nexternal+3:nexternal),ns,nres,ires,icloop
4575 integer iseed
4576- double precision pboost(0:3),pb(0:4,-nexternal+3:2*nexternal-3)
4577+ double precision pboost(0:3)
4578 double precision beta, get_betaz
4579 double precision ebi(0:3), ebo(0:3)
4580 double precision ptcltmp(nexternal), pdum(0:3)
4581@@ -477,19 +483,14 @@
4582 integer mothup(2,nexternal)
4583 integer icolup(2,nexternal,maxflow,maxsproc)
4584
4585- integer isym(nexternal,99), nsym, jsym
4586+ integer nsym
4587
4588- double precision sscale,aaqcd,aaqed
4589- integer ievent,npart
4590+ integer ievent
4591 logical flip
4592
4593 real ran1
4594 external ran1
4595
4596- character*1000 buff
4597- character*(s_bufflen) s_buff(7)
4598- integer nclus
4599- character*(clus_bufflen) buffclus(nexternal)
4600 character*40 cfmt
4601 C
4602 C GLOBAL
4603@@ -510,9 +511,6 @@
4604 integer mincfig, maxcfig
4605 common/to_configs/mincfig, maxcfig
4606
4607- integer ngroup
4608- common/to_group/ngroup
4609-
4610 double precision stot,m1,m2
4611 common/to_stot/stot,m1,m2
4612 c
4613@@ -529,17 +527,24 @@
4614 c data ncolflow/maxamps*0/
4615 c data ncolalt/maxamps*0/
4616
4617+ include 'coupl.inc'
4618+
4619+ include 'lhe_event_infos.inc'
4620+ data AlreadySetInBiasModule/.False./
4621+
4622 include 'symswap.inc'
4623- include 'coupl.inc'
4624 C-----
4625 C BEGIN CODE
4626 C-----
4627
4628- if (nw .ge. maxevents) return
4629-
4630-c Store weight for event
4631- nw = nw+1
4632- swgt(nw)=wgt
4633+ if ((nw .ge. maxevents).and.do_write_events) return
4634+
4635+C if all the necessary inputs to write the events have already been
4636+C computed in the bias module, then directly jump to write_events
4637+ if (AlreadySetInBiasModule) then
4638+ goto 1123
4639+ endif
4640+
4641 c
4642 c In case of identical particles symmetry, choose assignment
4643 c
4644@@ -596,53 +601,45 @@
4645 pboost(2)=0d0
4646 pboost(3)=0d0
4647 if (nincoming.eq.2) then
4648- if (xbk(1) .gt. 0d0 .and. xbk(1) .lt. 1d0 .and.
4649- $ xbk(2) .gt. 0d0 .and. xbk(2) .lt. 1d0) then
4650- pboost(0) = -1d0 ! special flag
4651- ! construct the beam momenta in each frame and compute the related (z)boost
4652- ebi(0) = p(0,1)/xbk(1)
4653- ebi(1) = 0
4654- ebi(2) = 0
4655- ebi(3) = DSQRT(ebi(0)**2-m1**2)
4656- ebo(0) = ebeam(1)
4657- ebo(1) = 0
4658- ebo(2) = 0
4659- ebo(3) = DSQRT(ebo(0)**2-m1**2)
4660- beta = get_betaz(ebi, ebo)
4661-c eta = sqrt(xbk(1)*ebeam(1)/
4662-c $ (xbk(2)*ebeam(2)))
4663-c pboost(0)=p(0,1)*(eta + 1d0/eta)
4664-c pboost(3)=p(0,1)*(eta - 1d0/eta)
4665- else if (xbk(1) .gt. 0d0 .and. xbk(1) .lt. 1d0 .and.
4666- $ xbk(2) .eq. 1d0) then
4667- pboost(0)=xbk(1)*ebeam(1)+ebeam(2)
4668- pboost(3)=xbk(1)*ebeam(1)-
4669- $ sqrt(ebeam(2)**2-m2**2)
4670- else if (xbk(1) .eq. 1d0 .and.
4671- $ xbk(2) .gt. 0d0 .and. xbk(2) .lt. 1d0) then
4672- pboost(0)=ebeam(1)+xbk(2)*ebeam(2)
4673- pboost(3)=sqrt(ebeam(1)**2-m1**2)-
4674- $ xbk(2)*ebeam(2)
4675- else if (xbk(1) .eq. 1d0 .and. xbk(2) .eq. 1d0) then
4676- pboost(0)=ebeam(1)+ebeam(2)
4677- pboost(3)=sqrt(ebeam(1)**2-m1**2)-
4678- $ sqrt(ebeam(2)**2-m2**2)
4679+ if (xbk(1) .gt. 0d0 .and. xbk(1) .le. 1d0 .and.
4680+ $ xbk(2) .gt. 0d0 .and. xbk(2) .le. 1d0) then
4681+ if(xbk(1).eq.1d0.or.pmass(1).eq.0d0) then
4682+ ! construct the beam momenta in each frame and compute the related (z)boost
4683+ ebi(0) = p(0,1)/xbk(1) ! this assumes that particle 1 is massless or mass equal to beam
4684+ ebi(1) = 0
4685+ ebi(2) = 0
4686+ ebi(3) = DSQRT(ebi(0)**2-m1**2)
4687+ ebo(0) = ebeam(1)
4688+ ebo(1) = 0
4689+ ebo(2) = 0
4690+ ebo(3) = DSQRT(ebo(0)**2-m1**2)
4691+ beta = get_betaz(ebi, ebo)
4692+ else
4693+ ebi(0) = p(0,2)/xbk(2) ! this assumes that particle 2 is massless or mass equal to beam
4694+ ebi(1) = 0
4695+ ebi(2) = 0
4696+ ebi(3) = -1d0*DSQRT(ebi(0)**2-m2**2)
4697+ ebo(0) = ebeam(2)
4698+ ebo(1) = 0
4699+ ebo(2) = 0
4700+ ebo(3) = -1d0*DSQRT(ebo(0)**2-m2**2)
4701+ beta = get_betaz(ebi, ebo)
4702+ ! wrong boost if both parton are massive!
4703+ endif
4704 else
4705 write(*,*) 'Warning bad x1 or x2 in write_leshouche',
4706 $ xbk(1),xbk(2)
4707 endif
4708- endif
4709- if (pboost(0).ne.-1d0) then
4710+ do j=1,nexternal
4711+ call zboost_with_beta(p(0,j),beta,pb(0,isym(j,jsym)))
4712+ pb(4,isym(j,jsym))=pmass(j)
4713+ enddo
4714+ else
4715 do j=1,nexternal
4716 call boostx(p(0,j),pboost,pb(0,isym(j,jsym)))
4717 ! Add mass information in pb(4)
4718 pb(4,isym(j,jsym))=pmass(j)
4719 enddo
4720- else
4721- do j=1,nexternal
4722- call zboost_with_beta(p(0,j),beta,pb(0,isym(j,jsym)))
4723- pb(4,isym(j,jsym))=pmass(j)
4724- enddo
4725 endif
4726 c
4727 c Add info on resonant mothers
4728@@ -746,6 +743,19 @@
4729 write(buffclus(nexternal),'(a)')'</clustering>'
4730 endif
4731
4732+C If the arguments of write_event have already been set in the
4733+C bias module, then the beginning of the routine will directly
4734+C jump here.
4735+
4736+ 1123 continue
4737+ if (.not.do_write_events) then
4738+ return
4739+ endif
4740+
4741+c Store weight for event
4742+ nw = nw+1
4743+ swgt(nw)=wgt
4744+
4745 call write_event(lun,pb(0,1),wgt,npart,jpart(1,1),ngroup,
4746 & sscale,aaqcd,aaqed,buff,use_syst,s_buff,nclus,buffclus)
4747 if(btest(mlevel,1))
4748
4749=== modified file 'Template/LO/bin/internal/run_delphes3'
4750--- Template/LO/bin/internal/run_delphes3 2013-02-25 00:52:53 +0000
4751+++ Template/LO/bin/internal/run_delphes3 2016-11-04 09:43:15 +0000
4752@@ -9,6 +9,7 @@
4753 run=$2
4754 tag=$3
4755 cross=$4
4756+file=$5
4757
4758 main=`pwd`
4759
4760@@ -22,17 +23,35 @@
4761 exit
4762 fi
4763
4764+if [ ${file: -3} == ".gz" ]
4765+then
4766+ if [ ${file: -7} == ".hep.gz" ]
4767+ then
4768+ gunzip --stdout $file | $delphesdir/DelphesSTDHEP ../Cards/delphes_card.dat ${run}/${tag}_delphes_events.root
4769+ else
4770+ gunzip --stdout $file | $delphesdir/DelphesHepMC ../Cards/delphes_card.dat ${run}/${tag}_delphes_events.root
4771+ fi
4772+else
4773+ if [ ${file: -4} == ".hep" ]
4774+ then
4775+ $delphesdir/DelphesSTDHEP ../Cards/delphes_card.dat ${run}/${tag}_delphes_events.root $file
4776+ else
4777+ $delphesdir/DelphesHepMC ../Cards/delphes_card.dat ${run}/${tag}_delphes_events.root $file
4778+ fi
4779+fi
4780+
4781 echo $$ >> ../myprocid
4782
4783-# Set delphes path in delphes_card.dat
4784-
4785-$delphesdir/DelphesSTDHEP ../Cards/delphes_card.dat delphes.root pythia_events.hep
4786-$delphesdir/root2lhco delphes.root delphes_events.lhco
4787-
4788-if [ -e delphes_events.lhco ]; then
4789-# write the delphes banner
4790- sed -e "s/^/#/g" ${run}/${run}_${tag}_banner.txt > ${run}/${tag}_delphes_events.lhco
4791- echo "## Integrated weight (pb) : ${cross}" >> ${run}/${tag}_delphes_events.lhco
4792- cat delphes_events.lhco >> ${run}/${tag}_delphes_events.lhco
4793- rm -f delphes_events.lhco
4794-fi
4795+# Uncomment the following to have the LHCO file:
4796+#
4797+#
4798+#$delphesdir/root2lhco ${run}/${tag}_delphes.root delphes_events.lhco
4799+#
4800+#if [ -e delphes_events.lhco ]; then
4801+## write the delphes banner
4802+# sed -e "s/^/#/g" ${run}/${run}_${tag}_banner.txt > ${run}/${tag}_delphes_events.lhco
4803+# echo "## Integrated weight (pb) : ${cross}" >> ${run}/${tag}_delphes_events.lhco
4804+# cat delphes_events.lhco >> ${run}/${tag}_delphes_events.lhco
4805+# gzip ${run}/${tag}_delphes_events.lhco
4806+# rm -f delphes_events.lhco
4807+#fi
4808
4809=== removed file 'Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran.h'
4810--- Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran.h 2013-09-26 09:34:42 +0000
4811+++ Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran.h 1970-01-01 00:00:00 +0000
4812@@ -1,154 +0,0 @@
4813-// -*- C++ -*-
4814-#ifndef MCATNLO_HepMCFortran_H
4815-#define MCATNLO_HepMCFortran_H
4816-//
4817-// This is the declaration of the HepMCFortran class.
4818-//
4819-
4820-#include "ThePEG/Handlers/AnalysisHandler.h"
4821-#include "Herwig++/Utilities/Histogram.h"
4822-
4823-#include "HepMC/IO_BaseClass.h"
4824-
4825-#include "HepMCFortran.fh"
4826-
4827-namespace MCatNLO {
4828-
4829-using namespace ThePEG;
4830-using namespace Herwig;
4831-
4832-/**
4833- * Here is the documentation of the HepMCFortran class.
4834- *
4835- * @see \ref HepMCFortranInterfaces "The interfaces"
4836- * defined for HepMCFortran.
4837- */
4838-class HepMCFortran: public AnalysisHandler {
4839-
4840-public:
4841-
4842- /** @name Virtual functions required by the AnalysisHandler class. */
4843- //@{
4844- /**
4845- * Analyze a given Event. Note that a fully generated event
4846- * may be presented several times, if it has been manipulated in
4847- * between. The default version of this function will call transform
4848- * to make a lorentz transformation of the whole event, then extract
4849- * all final state particles and call analyze(tPVector) of this
4850- * analysis object and those of all associated analysis objects. The
4851- * default version will not, however, do anything on events which
4852- * have not been fully generated, or have been manipulated in any
4853- * way.
4854- * @param event pointer to the Event to be analyzed.
4855- * @param ieve the event number.
4856- * @param loop the number of times this event has been presented.
4857- * If negative the event is now fully generated.
4858- * @param state a number different from zero if the event has been
4859- * manipulated in some way since it was last presented.
4860- */
4861- virtual void analyze(tEventPtr event, long ieve, int loop, int state);
4862- //@}
4863-
4864-public:
4865-
4866- /**
4867- * The standard Init function used to initialize the interfaces.
4868- * Called exactly once for each class by the class description system
4869- * before the main function starts or
4870- * when this class is dynamically loaded.
4871- */
4872- static void Init();
4873-
4874-protected:
4875-
4876- /** @name Standard Interfaced functions. */
4877- //@{
4878- /**
4879- * Initialize this object. Called in the run phase just before
4880- * a run begins.
4881- */
4882- virtual void doinitrun();
4883-
4884- /**
4885- * Finalize this object. Called in the run phase just after a
4886- * run has ended. Used eg. to write out statistics.
4887- */
4888- virtual void dofinish();
4889- //@}
4890-
4891-protected:
4892-
4893- /** @name Clone Methods. */
4894- //@{
4895- /**
4896- * Make a simple clone of this object.
4897- * @return a pointer to the new object.
4898- */
4899- virtual IBPtr clone() const;
4900-
4901- /** Make a clone of this object, possibly modifying the cloned object
4902- * to make it sane.
4903- * @return a pointer to the new object.
4904- */
4905- virtual IBPtr fullclone() const;
4906- //@}
4907-
4908-private:
4909-
4910- /**
4911- * The static object used to initialize the description of this class.
4912- * Indicates that this is an concrete class without persistent data.
4913- */
4914- static NoPIOClassDescription<HepMCFortran> initHepMCFortran;
4915-
4916- /**
4917- * The assignment operator is private and must never be called.
4918- * In fact, it should not even be implemented.
4919- */
4920- HepMCFortran & operator=(const HepMCFortran &);
4921-
4922-
4923-private:
4924-
4925- HepMC::IO_BaseClass *_hepevtio;
4926-
4927-};
4928-
4929-}
4930-
4931-#include "ThePEG/Utilities/ClassTraits.h"
4932-
4933-namespace ThePEG {
4934-
4935-/** @cond TRAITSPECIALIZATIONS */
4936-
4937-/** This template specialization informs ThePEG about the
4938- * base classes of HepMCFortran. */
4939-template <>
4940-struct BaseClassTrait<MCatNLO::HepMCFortran,1> {
4941- /** Typedef of the first base class of HepMCFortran. */
4942- typedef AnalysisHandler NthBase;
4943-};
4944-
4945-/** This template specialization informs ThePEG about the name of
4946- * the HepMCFortran class and the shared object where it is defined. */
4947-template <>
4948-struct ClassTraits<MCatNLO::HepMCFortran>
4949- : public ClassTraitsBase<MCatNLO::HepMCFortran> {
4950- /** Return a platform-independent class name */
4951- static string className() { return "MCatNLO::HepMCFortran"; }
4952- /**
4953- * The name of a file containing the dynamic library where the class
4954- * HepMCFortran is implemented. It may also include several, space-separated,
4955- * libraries if the class HepMCFortran depends on other classes (base classes
4956- * excepted). In this case the listed libraries will be dynamically
4957- * linked in the order they are specified.
4958- */
4959- static string library() { return "HepMCFortran.so"; }
4960-};
4961-
4962-/** @endcond */
4963-
4964-}
4965-
4966-#endif /* MCATNLO_HepMCFortran_H */
4967
4968=== added file 'Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran2.h'
4969--- Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran2.h 1970-01-01 00:00:00 +0000
4970+++ Template/NLO/MCatNLO/HWPPAnalyzer/HepMCFortran2.h 2016-11-04 09:43:15 +0000
4971@@ -0,0 +1,154 @@
4972+// -*- C++ -*-
4973+#ifndef MCATNLO_HepMCFortran_H
4974+#define MCATNLO_HepMCFortran_H
4975+//
4976+// This is the declaration of the HepMCFortran class.
4977+//
4978+
4979+#include "ThePEG/Handlers/AnalysisHandler.h"
4980+#include "Herwig++/Utilities/Histogram.h"
4981+
4982+#include "HepMC/IO_BaseClass.h"
4983+
4984+#include "HepMCFortran.fh"
4985+
4986+namespace MCatNLO {
4987+
4988+using namespace ThePEG;
4989+using namespace Herwig;
4990+
4991+/**
4992+ * Here is the documentation of the HepMCFortran class.
4993+ *
4994+ * @see \ref HepMCFortranInterfaces "The interfaces"
4995+ * defined for HepMCFortran.
4996+ */
4997+class HepMCFortran: public AnalysisHandler {
4998+
4999+public:
5000+
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: