Merge lp:~maddevelopers/mg5amcnlo/2.5.1 into lp:mg5amcnlo/lts
- 2.5.1
- Merge into series2.0
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Rikkert Frederix | Approve | ||
Review via email: mp+309108@code.launchpad.net |
Commit message
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
- 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
- 334. By Olivier Mattelaer
-
include antiname in name2part
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
- 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
Olivier Mattelaer (olivier-mattelaer) wrote : | # |
Ok I'm starting the process of merging the branch.
The release should be done by tomorrow.
Cheers,
Olivier
- 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
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 | + |
Hi Olivier,
Go ahead!
Cheers,
Rik