diff --git a/CMakeLists.txt b/CMakeLists.txt index 22592da..a9405ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,201 +1,207 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR) set(CMAKE_LEGACY_CYGWIN_WIN32 0) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) project("Reversed HEJ" VERSION 0.0.1 LANGUAGES C CXX) ## Flags for the compiler. No warning allowed. if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror") elseif (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /EHsc") endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 14) ## Create Version set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") # Get the latest abbreviated commit hash of the working branch execute_process( COMMAND git rev-parse HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE PROJECT_GIT_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE ) # Get the current working branch execute_process( COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE PROJECT_GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) set(INSTALL_INCLUDE_DIR "include/RHEJ/") set(INSTALL_BIN_DIR "bin/") set(INSTALL_LIB_DIR "lib/") CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/Version.hh.in ${PROJECT_BINARY_DIR}/include/RHEJ/Version.hh @ONLY ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/rHEJ-config.cc.in ${PROJECT_BINARY_DIR}/src/bin/rHEJ-config.cc @ONLY ) ## Add directories and find dependences include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}/include) find_package(fastjet REQUIRED) include_directories(${fastjet_INCLUDE_PATH}) find_package(clhep 2.3 REQUIRED) include_directories(${clhep_INCLUDE_PATH}) find_package(lhapdf REQUIRED) include_directories(${lhapdf_INCLUDE_PATH}) find_package(gsl REQUIRED) include_directories(${gsl_INCLUDE_PATH}) find_package(Boost REQUIRED COMPONENTS iostreams) include_directories(${Boost_INCLUDE_DIRS}) find_package(yaml-cpp) include_directories(${YAML_CPP_INCLUDE_DIR}) find_package(HepMC 2) if(${HepMC_FOUND}) message (STATUS "HepMC installation found: ${HepMC_INCLUDE_DIRS}") set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRHEJ_BUILD_WITH_HepMC_VERSION=${HepMC_VERSION_MAJOR}" ) include_directories(${HepMC_INCLUDE_DIRS}) find_package(rivet) if(${rivet_FOUND}) include_directories(${rivet_INCLUDE_PATH}) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRHEJ_BUILD_WITH_RIVET" ) endif() endif() find_package(QCDloop 2) if(${QCDloop_FOUND}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRHEJ_BUILD_WITH_QCDLOOP") include_directories(SYSTEM ${QCDloop_INCLUDE_DIRS}) endif() add_subdirectory(src) ## define executable add_executable(rHEJ src/bin/rHEJ.cc) ## link libraries target_link_libraries(rHEJ rhej) add_executable(rHEJ-config src/bin/rHEJ-config.cc) file(GLOB rhej_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/RHEJ/*.hh ${PROJECT_BINARY_DIR}/include/RHEJ/*.hh) file(GLOB lhef_headers ${CMAKE_CURRENT_SOURCE_DIR}/include/LHEF/*.h) install(FILES ${rhej_headers} DESTINATION ${INSTALL_INCLUDE_DIR}) install(FILES ${lhef_headers} DESTINATION include/LHEF/) install(TARGETS rHEJ rHEJ-config DESTINATION ${INSTALL_BIN_DIR}) enable_testing() set(tst_dir "${CMAKE_CURRENT_SOURCE_DIR}/t") add_executable(test_Matrix ${tst_dir}/test_Matrix.cc) add_executable(test_classify ${tst_dir}/test_classify.cc) add_executable(test_psp ${tst_dir}/test_psp.cc) add_executable(test_ME_h_3j ${tst_dir}/test_ME_h_3j.cc) add_executable(test_ME_hjets_mt174 ${tst_dir}/test_ME_hjets_mt174.cc) add_executable(check_res ${tst_dir}/check_res.cc) add_executable(check_lhe ${tst_dir}/check_lhe.cc) add_library(scales SHARED ${tst_dir}/scales.cc) add_executable(test_scale_import ${tst_dir}/test_scale_import) +add_executable(test_scale_names ${tst_dir}/test_scale_names) target_link_libraries(test_Matrix rhej) target_link_libraries(test_classify rhej) target_link_libraries(test_psp rhej) target_link_libraries(test_ME_h_3j rhej) target_link_libraries(test_ME_hjets_mt174 rhej) target_link_libraries(check_res rhej) target_link_libraries(check_lhe rhej) target_link_libraries(test_scale_import rhej) +target_link_libraries(test_scale_names rhej) add_test( NAME t_matrix COMMAND test_Matrix ) add_test( NAME t_classify COMMAND test_classify ${tst_dir}/classify.lhe.gz ) add_test( NAME t_psp COMMAND test_psp ${tst_dir}/psp_gen.lhe.gz ) add_test( NAME t_ME COMMAND test_ME_h_3j ) if(${QCDloop_FOUND}) add_test( NAME t_ME_mt174 COMMAND test_ME_hjets_mt174 ) endif() add_test( NAME t_2j COMMAND check_res ${tst_dir}/2j.lhe.gz 3.382e7 752159 ) add_test( NAME t_3j COMMAND check_res ${tst_dir}/3j.lhe.gz 2.5019e+06 97075 ) add_test( NAME t_4j COMMAND check_res ${tst_dir}/4j.lhe.gz 479170 19203.9 ) add_test( NAME t_h_3j COMMAND check_res ${tst_dir}/h_3j.lhe.gz 0.793107 0.0479054 ) add_test( NAME t_h_3j_uno COMMAND check_res ${tst_dir}/h_3j_uno.lhe.gz 0.0260428 0.00129855 uno ) if(${HepMC_FOUND}) file(READ "${tst_dir}/jet_config.yml" config) file(WRITE "${tst_dir}/jet_config_withHepMC.yml" "${config} - tst.hepmc") if(${rivet_FOUND}) file(READ "${tst_dir}/jet_config_withHepMC.yml" config) file(WRITE "${tst_dir}/jet_config_withRivet.yml" "${config}\n\nanalysis:\n rivet: MC_XS\n output: tst") add_test( NAME t_main COMMAND rHEJ ${tst_dir}/jet_config_withRivet.yml ${tst_dir}/2j.lhe.gz ) else() add_test( NAME t_main COMMAND rHEJ ${tst_dir}/jet_config_withHepMC.yml ${tst_dir}/2j.lhe.gz ) endif() if(${HepMC_VERSION_MAJOR} GREATER 2) add_executable(check_hepmc ${tst_dir}/check_hepmc.cc) target_link_libraries(check_hepmc rhej) add_test( NAME t_hepmc COMMAND check_hepmc tst.hepmc ) endif() else() add_test( NAME t_main COMMAND rHEJ ${tst_dir}/jet_config.yml ${tst_dir}/2j.lhe.gz ) endif() add_test( NAME t_lhe COMMAND check_lhe tst.lhe ) add_test( NAME t_scale_import COMMAND test_scale_import ${tst_dir}/jet_config_with_import.yml ) +add_test( + NAME t_scale_names + COMMAND test_scale_names + ) diff --git a/t/test_scale_names.cc b/t/test_scale_names.cc new file mode 100644 index 0000000..29ccb0c --- /dev/null +++ b/t/test_scale_names.cc @@ -0,0 +1,42 @@ +#include <iostream> +#include <cstddef> + +#include "RHEJ/ScaleFunction.hh" +#include "RHEJ/EventReweighter.hh" + +#define ASSERT(x) if(!(x)) { \ + std::cerr << "Assertion '" #x "' failed.\n"; \ + return EXIT_FAILURE; \ + } + +int main() { + constexpr double mu = 125.; + RHEJ::ScaleFunction fun{"125", RHEJ::FixedScale{mu}}; + ASSERT(fun.name() == "125"); + + RHEJ::ScaleGenerator scale_gen{ + {std::move(fun)}, {0.5, 1, 2.}, 2.1 + }; + RHEJ::UnclusteredEvent tmp; + tmp.outgoing.push_back( + {RHEJ::ParticleID::gluon, fastjet::PtYPhiM(50., -1., 0.3, 0.)} + ); + tmp.outgoing.push_back( + {RHEJ::ParticleID::gluon, fastjet::PtYPhiM(30., 1., -0.3, 0.)} + ); + RHEJ::Event ev{ + std::move(tmp), + fastjet::JetDefinition{fastjet::kt_algorithm, 0.4}, + 20. + }; + + auto rescaled = scale_gen(std::move(ev)); + ASSERT(*rescaled.central().description == "mur=125, muf=125"); + ASSERT(*rescaled.variations(0).description == "mur=125, muf=125"); + ASSERT(*rescaled.variations(1).description == "mur=0.5*125, muf=0.5*125"); + ASSERT(*rescaled.variations(2).description == "mur=0.5*125, muf=1*125"); + ASSERT(*rescaled.variations(3).description == "mur=1*125, muf=0.5*125"); + ASSERT(*rescaled.variations(4).description == "mur=1*125, muf=2*125"); + ASSERT(*rescaled.variations(5).description == "mur=2*125, muf=1*125"); + ASSERT(*rescaled.variations(6).description == "mur=2*125, muf=2*125"); +}