diff --git a/FixedOrderGen/t/CMakeLists.txt b/FixedOrderGen/t/CMakeLists.txt index 325e1a5..8307199 100644 --- a/FixedOrderGen/t/CMakeLists.txt +++ b/FixedOrderGen/t/CMakeLists.txt @@ -1,70 +1,72 @@ set(tst_dir "${CMAKE_CURRENT_SOURCE_DIR}") foreach(tst W_reconstruct_enu W_2j_classify W_nj_classify) add_executable(test_${tst} ${tst_dir}/${tst}.cc) target_link_libraries(test_${tst} hejfog_lib) add_test(NAME ${tst} COMMAND test_${tst} WORKING_DIRECTORY ${tst_dir}) endforeach() # this only tests if the runcard actually works, not if the result is correct add_test( NAME main_2j COMMAND HEJFOG ${tst_dir}/config_2j.yml ) add_test( NAME main_h2j - COMMAND HEJFOG ${tst_dir}/config_h_2j.yml + COMMAND HEJFOG ${tst_dir}/config_h2j.yml ) add_test( NAME main_h2j_decay - COMMAND HEJFOG ${tst_dir}/config_h_2j_decay.yml + COMMAND HEJFOG ${tst_dir}/config_h2j_decay.yml ) add_test( NAME peakpt COMMAND HEJFOG ${tst_dir}/config_2j_peak.yml ) # check that uno emission doesn't change FKL xs add_executable(FKL_uno FKL_uno.cc) target_link_libraries(FKL_uno hejfog_lib) add_test( NAME FKL_uno # calculated with HEJ revision 9570e3809613272ac4b8bf3236279ba23cf64d20 - COMMAND FKL_uno ${tst_dir}/config_h_3j_uno.yml 0.0243548 0.000119862 + COMMAND FKL_uno ${tst_dir}/config_h3j_uno.yml 0.0243548 0.000119862 ) # xs tests add_executable(xs_gen xs_gen.cc) target_link_libraries(xs_gen hejfog_lib) +## Higgs add_test( NAME xs_h2j # calculated with HEJ revision 9570e3809613272ac4b8bf3236279ba23cf64d20 - COMMAND xs_gen ${tst_dir}/config_h_2j.yml 2.04928 0.00956022 + COMMAND xs_gen ${tst_dir}/config_h2j.yml 2.04928 0.00956022 ) add_test( NAME xs_h3j # calculated with HEJ revision bd4388fe55cbc3f5a7b6139096456c551294aa31 - COMMAND xs_gen ${tst_dir}/config_h_3j.yml 1.07807 0.0132409 + COMMAND xs_gen ${tst_dir}/config_h3j.yml 1.07807 0.0132409 ) add_test( NAME xs_h5j # calculated with HEJ revision dbde2ffbb3b383ae6709b2424d8f0f9d5658270b - COMMAND xs_gen ${tst_dir}/config_h_5j.yml 0.0112504 0.000199633 + COMMAND xs_gen ${tst_dir}/config_h5j.yml 0.0112504 0.000199633 ) add_test( NAME xs_h3j_uno # calculated with HEJ revision 9570e3809613272ac4b8bf3236279ba23cf64d20 - COMMAND xs_gen ${tst_dir}/config_h_3j_uno.yml 0.00347538 3.85875e-05 + COMMAND xs_gen ${tst_dir}/config_h3j_uno.yml 0.00347538 3.85875e-05 ) add_test( NAME xs_h2j_decay # calculated with HEJ revision 9570e3809613272ac4b8bf3236279ba23cf64d20 - COMMAND xs_gen ${tst_dir}/config_h_2j_decay.yml 0.00466994 2.20995e-05 + COMMAND xs_gen ${tst_dir}/config_h2j_decay.yml 0.00466994 2.20995e-05 ) +## pure jets add_test( NAME xs_2j # calculated with "combined" HEJ svn r3480 COMMAND xs_gen ${tst_dir}/config_2j.yml 86.42031848e06 590570 ) add_test( NAME xs_4j # calculated with HEJ revision 13207b5f67a5f40a2141aa7ee515b022bd4efb65 COMMAND xs_gen ${tst_dir}/config_4j.yml 915072 15402.4 ) diff --git a/FixedOrderGen/t/config_h_2j.yml b/FixedOrderGen/t/config_h2j.yml similarity index 100% rename from FixedOrderGen/t/config_h_2j.yml rename to FixedOrderGen/t/config_h2j.yml diff --git a/FixedOrderGen/t/config_h_2j_decay.yml b/FixedOrderGen/t/config_h2j_decay.yml similarity index 100% rename from FixedOrderGen/t/config_h_2j_decay.yml rename to FixedOrderGen/t/config_h2j_decay.yml diff --git a/FixedOrderGen/t/config_h_3j.yml b/FixedOrderGen/t/config_h3j.yml similarity index 100% rename from FixedOrderGen/t/config_h_3j.yml rename to FixedOrderGen/t/config_h3j.yml diff --git a/FixedOrderGen/t/config_h_3j_uno.yml b/FixedOrderGen/t/config_h3j_uno.yml similarity index 100% rename from FixedOrderGen/t/config_h_3j_uno.yml rename to FixedOrderGen/t/config_h3j_uno.yml diff --git a/FixedOrderGen/t/config_h_5j.yml b/FixedOrderGen/t/config_h5j.yml similarity index 100% rename from FixedOrderGen/t/config_h_5j.yml rename to FixedOrderGen/t/config_h5j.yml diff --git a/FixedOrderGen/t/xs_gen.cc b/FixedOrderGen/t/xs_gen.cc index 0e20c77..9a04a0a 100644 --- a/FixedOrderGen/t/xs_gen.cc +++ b/FixedOrderGen/t/xs_gen.cc @@ -1,107 +1,107 @@ /** * \authors The HEJ collaboration (see AUTHORS for details) * \date 2020 * \copyright GPLv2 or later */ #include #include #include #include #include #include "HEJ/Event.hh" #include "HEJ/Mixmax.hh" #include "HEJ/PDG_codes.hh" #include "HEJ/ScaleFunction.hh" #include "HEJ/utility.hh" #include "config.hh" #include "EventGenerator.hh" #include "Status.hh" //! throw error if condition not fulfilled #define ASSERT(x) if(!(x)) { \ throw std::logic_error("Assertion '" #x "' failed."); \ } namespace { constexpr double invGeV2_to_pb = 389379292.; } int main(int argn, char const *argv[]){ using namespace HEJFOG; if(argn != 4){ std::cerr << "Usage: " << argv[0] << " config.yml xs xs_err"; return EXIT_FAILURE; } const double xs_ref = std::stod(argv[2]); const double err_ref = std::stod(argv[3]); const auto config = load_config(argv[1]); std::shared_ptr ran{std::make_shared()}; HEJFOG::EventGenerator generator{ config.process, config.beam, HEJ::ScaleGenerator{ config.scales.base, config.scales.factors, config.scales.max_ratio }, config.jets, config.pdf_id, config.subleading_fraction, config.subleading_channels, config.particle_decays, config.Higgs_coupling, config.ew_parameters, ran }; double xs = 0., xs_err = 0.; for (std::size_t trials = 0; trials < config.events; ++trials){ auto ev = generator.gen_event(); if(generator.status() != good) continue; ASSERT(ev); if(config.process.boson){ const auto boson = std::find_if( begin(ev->outgoing()), end(ev->outgoing()), [&](HEJ::Particle const & p){ return p.type == *config.process.boson; } ); ASSERT(boson != end(ev->outgoing())); if(!config.process.boson_decay.empty()){ ASSERT(ev->decays().size() == 1); const auto decay = ev->decays().begin(); ASSERT(ev->outgoing().size() > decay->first); ASSERT(decay->first == static_cast( std::distance(ev->outgoing().begin(), boson))); ASSERT(decay->second.size() == 2); - auto const & gamma = decay->second; - ASSERT(gamma[0].type == HEJ::pid::photon); - ASSERT(gamma[1].type == HEJ::pid::photon); - ASSERT(HEJ::nearby_ep(gamma[0].p + gamma[1].p, boson->p, 1e-6)); + auto const & decay_part = decay->second; + ASSERT(decay_part[0].type == config.process.boson_decay[0]); + ASSERT(decay_part[1].type == config.process.boson_decay[1]); + ASSERT(HEJ::nearby_ep(decay_part[0].p + decay_part[1].p, boson->p, 1e-6)); } } xs += ev->central().weight; xs_err += ev->central().weight*ev->central().weight; } xs_err = std::sqrt(xs_err); xs *= invGeV2_to_pb/config.events; xs_err *= invGeV2_to_pb/config.events; std::cout << xs_ref << " +- " << err_ref << " (" << err_ref/xs_ref*100. << "%)" << " ~ " << xs << " +- " << xs_err << " (" << xs_err/xs*100. << "%)" << std::endl; std::cout << "=> " << std::abs(xs - xs_ref)/sqrt(xs_err*xs_err+err_ref*err_ref) << " sigma" << std::endl; ASSERT(std::abs(xs - xs_ref) < 2.*sqrt(xs_err*xs_err+err_ref*err_ref)); ASSERT(std::abs(err_ref - xs_err) < 0.1*xs_err); ASSERT(xs_err < 0.02*xs); return EXIT_SUCCESS; }