Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8725473
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
18 KB
Subscribers
None
View Options
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c6a7b2..1644b80 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,177 +1,185 @@
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
)
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Templates/Version.hh.in
${PROJECT_BINARY_DIR}/include/RHEJ/Version.hh @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/main.cc)
## link libraries
target_link_libraries(rHEJ rhej)
#plugins
add_subdirectory("analysis-plugins")
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 include/RHEJ/)
install(FILES ${lhef_headers} DESTINATION include/LHEF/)
install(TARGETS rHEJ DESTINATION bin)
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)
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)
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")
add_test(
NAME t_main
COMMAND rHEJ ${tst_dir}/jet_config_withHepMC.yml ${tst_dir}/2j.lhe.gz
)
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
)
diff --git a/FixedOrderGen/CMakeLists.txt b/FixedOrderGen/CMakeLists.txt
index 16d9a1a..c4a5067 100644
--- a/FixedOrderGen/CMakeLists.txt
+++ b/FixedOrderGen/CMakeLists.txt
@@ -1,68 +1,62 @@
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project("Fixed Order Generation" 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)
## Add directories and find dependences
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../include)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/../cmake/Modules/")
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)
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()
## define executable
file(GLOB FOgen_source ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc)
list(REMOVE_ITEM FOgen_source ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc)
add_library(hejfog STATIC ${FOgen_source})
add_executable(FOgen ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc)
## link libraries
-set(libraries ${CMAKE_DL_LIBS} ${LHAPDF_LIBRARIES} ${CLHEP_LIBRARIES} ${FASTJET_LIBRARIES} ${GSL_LIBRARIES} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES})
+set(libraries ${CMAKE_DL_LIBS} ${LHAPDF_LIBRARIES} ${CLHEP_LIBRARIES} ${FASTJET_LIBRARIES} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES})
if(${QCDloop_FOUND})
list(APPEND libraries ${QCDloop_LIBRARIES} quadmath)
endif()
-if(${HepMC_FOUND})
- list(APPEND libraries ${HepMC_LIBRARIES})
-endif()
# add libraries for reversed HEJ <by hand>
list(APPEND libraries rhej)
target_link_libraries(hejfog ${libraries})
target_link_libraries(FOgen hejfog)
install(TARGETS FOgen DESTINATION bin)
enable_testing()
set(tst_dir "${CMAKE_CURRENT_SOURCE_DIR}/t")
foreach(tst h_2j h_3j h_5j h_3j_uno1 h_3j_uno2 h_2j_decay)
add_executable(test_${tst} ${tst_dir}/${tst}.cc)
target_link_libraries(test_${tst} hejfog)
add_test(NAME t_${tst} COMMAND test_${tst} WORKING_DIRECTORY ${tst_dir})
endforeach()
diff --git a/analysis-plugins/src/Rivet_Analysis.cc b/analysis-plugins/src/Rivet_Analysis.cc
deleted file mode 100644
index 8d6a2ab..0000000
--- a/analysis-plugins/src/Rivet_Analysis.cc
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "Rivet_Analysis.hh"
-
-#include <ostream>
-
-#include "RHEJ/Event.hh"
-
-#include "yaml-cpp/yaml.h"
-
-// @TODO guards for proper rivet-use
-
-#include "Rivet/AnalysisHandler.hh"
-
-// namespace RHEJ {
- Rivet_Analysis::Rivet_Analysis(YAML::Node const & config):
- output_name_{config["output"].as<std::string>()},
- first_event_(true)
- {
- // read in analyses
- const auto & name_node = config["analysis"];
- switch(name_node.Type()){
- case YAML::NodeType::Scalar:
- std::cout << name_node.as<std::string>();
- analyses_names_.push_back(name_node.as<std::string>());
- break;
- case YAML::NodeType::Sequence:
- for(YAML::const_iterator it = name_node.begin(); it != name_node.end(); ++it){
- std::cout << it->as<std::string>() << " ";
- analyses_names_.push_back(it->as<std::string>());
- }
- break;
- default:
- throw std::invalid_argument{
- "No Analysis was provided to rivet. "
- "Either give a analysis or deactivate this plugin."
- };
- }
- }
-
- void Rivet_Analysis::init(RHEJ::Event const & event){
- const auto & central = event.central();
- for(size_t i = 0; i < event.variations().size(); ++i){
- const auto & vari = event.variations(i);
- std::ostringstream name;
- // calculate name ratio of the scales and use them for the output file name
- name << ".Scale" << i << "_MuR" << vari.mur/central.mur
- << "_MuF" << vari.muf/central.muf;
- rivet_runs_.push_back({std::make_unique<Rivet::AnalysisHandler>()
- , name.str(), RHEJ::HepMCInterface()});
- rivet_runs_.back().handler->addAnalyses(analyses_names_);
- }
- }
-
- void Rivet_Analysis::fill(RHEJ::Event const & event, RHEJ::Event const &){
- if(first_event_){
- first_event_=false;
- init(event);
- }
- for(auto & run: rivet_runs_){
- run.handler->analyze(run.hepmc(event));
- }
- }
-
- void Rivet_Analysis::finalise(){
- for(auto const & run: rivet_runs_){
- run.handler->finalize();
- run.handler->writeData(output_name_+run.name+std::string(".yoda"));
- }
- }
-// }
diff --git a/cmake/Modules/Findrivet.cmake b/cmake/Modules/Findrivet.cmake
new file mode 100644
index 0000000..cd7d2ec
--- /dev/null
+++ b/cmake/Modules/Findrivet.cmake
@@ -0,0 +1,27 @@
+include (FindPackageMessage)
+
+message (STATUS "Detecting rivet installation")
+execute_process (COMMAND rivet-config --prefix
+ OUTPUT_VARIABLE rivet_PREFIX
+ )
+if (rivet_PREFIX)
+ string (STRIP ${rivet_PREFIX} rivet_PREFIX)
+ message (STATUS "rivet installation found: ${rivet_PREFIX}")
+ EXECUTE_PROCESS(COMMAND rivet-config --libs OUTPUT_VARIABLE
+ rivet_LIBRARIES OUTPUT_STRIP_TRAILING_WHITESPACE)
+ # set (rivet_INCLUDE_PATH ${rivet_PREFIX}/include)
+ EXECUTE_PROCESS(COMMAND rivet-config --includedir OUTPUT_VARIABLE
+ rivet_INCLUDE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set (rivet_FOUND TRUE)
+else (rivet_PREFIX)
+ set (rivet_FOUND FALSE)
+endif (rivet_PREFIX)
+
+if (NOT rivet_FOUND)
+ message(STATUS "rivet installation not found!")
+endif (NOT rivet_FOUND)
+
+mark_as_advanced(
+ rivet_INCLUDE_PATH
+ rivet_LIBRARIES
+)
diff --git a/analysis-plugins/include/Rivet_Analysis.hh b/include/RHEJ/Rivet_Analysis.hh
similarity index 71%
rename from analysis-plugins/include/Rivet_Analysis.hh
rename to include/RHEJ/Rivet_Analysis.hh
index 38bd355..86f2d5a 100644
--- a/analysis-plugins/include/Rivet_Analysis.hh
+++ b/include/RHEJ/Rivet_Analysis.hh
@@ -1,63 +1,65 @@
/** \file Rivet_Analysis.hh
* \brief A custom analysis that calles multiple rivet analyses
*/
#include <memory>
#include <string>
#include <utility>
#include "RHEJ/Analysis.hh"
#include "RHEJ/HepMCInterface.hh"
namespace RHEJ {
class Event;
}
namespace Rivet {
class AnalysisHandler;
}
namespace YAML {
class Node;
}
-// namespace RHEJ {
-/**
- * @brief Rivet analysis which can be called as a normal rHEJ analysis
- * @details In the input file both "analysis" (list of rivet analysis to be called)
- * and "output" (prefix for the .yoda files)
- */
+namespace RHEJ {
+ /**
+ * @brief Rivet analysis which can be called as a normal rHEJ analysis
+ * @details In the input file both "analysis" (list of rivet analysis to be called)
+ * and "output" (prefix for the .yoda files)
+ */
class Rivet_Analysis: public RHEJ::Analysis {
public:
+ static std::unique_ptr<Analysis> create(YAML::Node const & config);
+
Rivet_Analysis(YAML::Node const & config);
void fill(RHEJ::Event const & event, RHEJ::Event const &) override;
bool pass_cuts(RHEJ::Event const &, RHEJ::Event const &) override
{return true;} //< no additional cuts are applied
void finalise() override;
private:
std::vector<std::string> analyses_names_;
const std::string output_name_;
/// struct to organise the infos per rivet run/scale setting
struct rivet_info {
std::unique_ptr<Rivet::AnalysisHandler> handler;
std::string name;
RHEJ::HepMCInterface hepmc;
};
std::vector<rivet_info> rivet_runs_;
/** @brief Calculates the scale variation from the first event for the output file
* @note Name is wrong if multiple scale functions are choosen
* @TODO is there a better way of finding the scale factor?
*/
void init(RHEJ::Event const & event);
bool first_event_;
};
-// }
-
-extern "C"
-__attribute__((visibility("default")))
-std::unique_ptr<RHEJ::Analysis> make_analysis(
- YAML::Node const & config
-){
- return std::make_unique<Rivet_Analysis>(config);
}
+
+// extern "C"
+// __attribute__((visibility("default")))
+// std::unique_ptr<RHEJ::Analysis> make_analysis(
+// YAML::Node const & config
+// ){
+// return std::make_unique<Rivet_Analysis>(config);
+// }
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 43d94e3..a41811f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,14 +1,17 @@
file(GLOB src_files *.cc)
add_library(rhej SHARED ${src_files})
set(libraries ${CMAKE_DL_LIBS} ${LHAPDF_LIBRARIES} ${CLHEP_LIBRARIES} ${FASTJET_LIBRARIES} ${GSL_LIBRARIES} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} yaml-cpp)
if(${QCDloop_FOUND})
list(APPEND libraries ${QCDloop_LIBRARIES} quadmath)
endif()
if(${HepMC_FOUND})
list(APPEND libraries ${HepMC_LIBRARIES})
+ if(${rivet_FOUND})
+ list(APPEND libraries ${rivet_LIBRARIES})
+ endif()
endif()
target_link_libraries(rhej ${libraries})
install(TARGETS rhej DESTINATION lib)
diff --git a/src/Rivet_Analysis.cc b/src/Rivet_Analysis.cc
new file mode 100644
index 0000000..e0bb33b
--- /dev/null
+++ b/src/Rivet_Analysis.cc
@@ -0,0 +1,98 @@
+#include "RHEJ/Rivet_Analysis.hh"
+
+#ifdef RHEJ_BUILD_WITH_RIVET
+
+#include <ostream>
+
+#include "RHEJ/Event.hh"
+
+#include "yaml-cpp/yaml.h"
+#include "Rivet/AnalysisHandler.hh"
+
+namespace RHEJ {
+ std::unique_ptr<Analysis> Rivet_Analysis::create(YAML::Node const & config){
+ return std::unique_ptr<Analysis>{new Rivet_Analysis{config}};
+ }
+
+ Rivet_Analysis::Rivet_Analysis(YAML::Node const & config):
+ output_name_{config["output"].as<std::string>()},
+ first_event_(true)
+ {
+ // read in analyses
+ const auto & name_node = config["rivet"];
+ switch(name_node.Type()){
+ case YAML::NodeType::Scalar:
+ analyses_names_.push_back(name_node.as<std::string>());
+ break;
+ case YAML::NodeType::Sequence:
+ for(YAML::const_iterator it = name_node.begin(); it != name_node.end(); ++it){
+ analyses_names_.push_back(it->as<std::string>());
+ }
+ break;
+ default:
+ throw std::invalid_argument{
+ "No Analysis was provided to rivet. "
+ "Either give an analysis or deactivate rivet."
+ };
+ }
+ }
+
+ void Rivet_Analysis::init(Event const & event){
+ const auto & central = event.central();
+ for(size_t i = 0; i < event.variations().size(); ++i){
+ const auto & vari = event.variations(i);
+ std::ostringstream name;
+ // calculate name ratio of the scales and use them for the output file name
+ name << ".Scale" << i << "_MuR" << vari.mur/central.mur
+ << "_MuF" << vari.muf/central.muf;
+ rivet_runs_.push_back({std::make_unique<Rivet::AnalysisHandler>()
+ , name.str(), HepMCInterface()});
+ rivet_runs_.back().handler->addAnalyses(analyses_names_);
+ }
+ }
+
+ void Rivet_Analysis::fill(Event const & event, Event const &){
+ if(first_event_){
+ first_event_=false;
+ init(event);
+ }
+ for(auto & run: rivet_runs_){
+ run.handler->analyze(run.hepmc(event));
+ }
+ }
+
+ void Rivet_Analysis::finalise(){
+ for(auto const & run: rivet_runs_){
+ run.handler->finalize();
+ run.handler->writeData(output_name_+run.name+std::string(".yoda"));
+ }
+ }
+} // namespace RHEJ
+
+#else // no rivet => create empty analysis
+
+namespace Rivet {
+ class AnalysisHandler {};
+}
+
+namespace RHEJ {
+ std::unique_ptr<Analysis> Rivet_Analysis::create(YAML::Node const & config){
+ return std::unique_ptr<Analysis>{new Rivet_Analysis{config}};
+ }
+
+ Rivet_Analysis::Rivet_Analysis(YAML::Node const &)
+ {
+ throw std::invalid_argument(
+ "Failed to create Rivet_Analysis: "
+ "Reversed HEJ was built without rivet support"
+ );
+ }
+
+ void Rivet_Analysis::init(Event const &){}
+
+ void Rivet_Analysis::fill(Event const &, Event const &){}
+
+ void Rivet_Analysis::finalise(){}
+} // namespace RHEJ
+
+#endif
diff --git a/src/get_analysis.cc b/src/get_analysis.cc
index 91eff64..c9a6718 100644
--- a/src/get_analysis.cc
+++ b/src/get_analysis.cc
@@ -1,29 +1,32 @@
#include "RHEJ/get_analysis.hh"
#include <dlfcn.h>
#include "yaml-cpp/yaml.h"
+#include "RHEJ/Rivet_Analysis.hh"
#include "RHEJ/EmptyAnalysis.hh"
namespace RHEJ{
std::unique_ptr<Analysis> get_analysis(YAML::Node const & parameters){
if(!parameters["plugin"]){
+ if(parameters["rivet"])
+ return Rivet_Analysis::create(parameters);
return EmptyAnalysis::create(parameters);
}
using AnalysisMaker = std::unique_ptr<Analysis> (*)(YAML::Node);
const auto plugin_name = parameters["plugin"].as<std::string>();
auto handle = dlopen(plugin_name.c_str(), RTLD_NOW);
char * error = dlerror();
if(error != nullptr) throw std::runtime_error(error);
void * sym = dlsym(handle, "make_analysis");
error = dlerror();
if(error != nullptr) throw std::runtime_error(error);
auto make_analysis = reinterpret_cast<AnalysisMaker>(sym);
return make_analysis(parameters);
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Jan 21, 1:45 AM (1 d, 11 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4243503
Default Alt Text
(18 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment