diff --git a/cmake_modules/YamlCpp.cmake b/cmake_modules/YamlCpp.cmake index a89f5bf2..81f43722 100644 --- a/cmake_modules/YamlCpp.cmake +++ b/cmake_modules/YamlCpp.cmake @@ -14,14 +14,12 @@ if (yaml-cpp_BUNDLED) PREFIX ${CMAKE_BINARY_DIR}/external/yaml-cpp ) - + execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/external/yaml-cpp/include) add_library(yaml-cpp SHARED IMPORTED GLOBAL) - set_target_properties(yaml-cpp PROPERTIES - IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/external/yaml-cpp/lib/libyaml-cpp.so - INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/external/yaml-cpp/include - ) - add_dependencies(yaml-cpp yaml-cpp_Ext) + set_target_properties(yaml-cpp PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/external/yaml-cpp/lib/libyaml-cpp.so) + target_include_directories(yaml-cpp INTERFACE ${CMAKE_BINARY_DIR}/external/yaml-cpp/include) + add_dependencies(yaml-cpp yaml-cpp_Ext yaml-cpp.include) set(yaml-cpp_FOUND TRUE) set(yaml-cpp_INCLUDE_DIR ${CMAKE_BINARY_DIR}/external/yaml-cpp/include) diff --git a/src/QnAnalysisConfig/CMakeLists.txt b/src/QnAnalysisConfig/CMakeLists.txt index 17c17c62..15c1e818 100644 --- a/src/QnAnalysisConfig/CMakeLists.txt +++ b/src/QnAnalysisConfig/CMakeLists.txt @@ -1,5 +1,3 @@ -find_package(yaml-cpp REQUIRED) - add_library(QnAnalysisConfig STATIC Convert.cpp Config.cpp) target_include_directories(QnAnalysisConfig PUBLIC $> diff --git a/src/QnAnalysisCorrelate/CMakeLists.txt b/src/QnAnalysisCorrelate/CMakeLists.txt index bc95393b..76664075 100644 --- a/src/QnAnalysisCorrelate/CMakeLists.txt +++ b/src/QnAnalysisCorrelate/CMakeLists.txt @@ -1,23 +1,30 @@ find_package(Boost REQUIRED COMPONENTS program_options) -find_package(yaml-cpp REQUIRED) set(QnAnalysis_SETUPS_DIR ${CMAKE_SOURCE_DIR}/setups) configure_file(BuildOptions.hpp.in BuildOptions.hpp) +ROOT_GENERATE_DICTIONARY(G__TStringMeta + TStringMeta.hpp + LINKDEF TStringMetaLinkDef.h + OPTIONS -I${CMAKE_CURRENT_SOURCE_DIR}) +add_library(TStringMeta SHARED TStringMeta.cpp G__TStringMeta.cxx) +target_link_libraries(TStringMeta PUBLIC ROOT::Core) +target_include_directories(TStringMeta PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + add_executable(QnAnalysisCorrelate CorrelationMain.cpp CorrelationTaskRunner.cpp) target_link_libraries(QnAnalysisCorrelate PRIVATE $<$,$,9.0>>:stdc++fs> PUBLIC - QnToolsDataFrame Boost::program_options yaml-cpp) + QnToolsDataFrame Boost::program_options yaml-cpp TStringMeta) target_include_directories(QnAnalysisCorrelate PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) if (QnAnalysis_BUILD_TESTS) include(GoogleTest) - add_executable(QnAnalysisCorrelate_UnitTests Config.test.cpp Utils.test.cpp UserCorrelationAction.test.cpp) - target_link_libraries(QnAnalysisCorrelate_UnitTests PRIVATE gtest_main yaml-cpp QnToolsDataFrame) + add_executable(QnAnalysisCorrelate_UnitTests Config.test.cpp Utils.test.cpp UserCorrelationAction.test.cpp TStringMeta.test.cpp) + target_link_libraries(QnAnalysisCorrelate_UnitTests PRIVATE gtest_main yaml-cpp QnToolsDataFrame TStringMeta) target_include_directories(QnAnalysisCorrelate_UnitTests PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) gtest_add_tests(TARGET QnAnalysisCorrelate_UnitTests) endif () \ No newline at end of file diff --git a/src/QnAnalysisCorrelate/CorrelationTaskRunner.cpp b/src/QnAnalysisCorrelate/CorrelationTaskRunner.cpp index 817a5528..aa29e512 100644 --- a/src/QnAnalysisCorrelate/CorrelationTaskRunner.cpp +++ b/src/QnAnalysisCorrelate/CorrelationTaskRunner.cpp @@ -15,6 +15,8 @@ #include #include +#include "Config.hpp" + using std::filesystem::path; using std::filesystem::current_path; using namespace Qn::Analysis::Correlate; @@ -51,7 +53,6 @@ void Qn::Analysis::Correlate::CorrelationTaskRunner::Run() { TFile f(output_file_.c_str(), "RECREATE"); - TObjString container_meta; for (auto &task : initialized_tasks_) { auto dir = mkcd(task->output_folder, f); @@ -59,10 +60,10 @@ void Qn::Analysis::Correlate::CorrelationTaskRunner::Run() { Info(__func__, "Processing '%s'... ", correlation.result_ptr->GetName().c_str()); auto &container = correlation.result_ptr.GetValue().GetDataContainer(); - container_meta.String() = GenCorrelationMeta(correlation); + auto correlation_meta = GenCorrelationMeta(correlation); dir->WriteObject(&container, correlation.meta_key.c_str()); - dir->WriteObject(&container_meta, (correlation.meta_key + "_meta").c_str()); + dir->WriteObject(&correlation_meta, (correlation.meta_key + "_meta").c_str()); } } @@ -219,17 +220,23 @@ TDirectory *CorrelationTaskRunner::mkcd(const path &path, TDirectory& root_dir) return pwd; } -std::string CorrelationTaskRunner::GenCorrelationMeta(const CorrelationTaskRunner::Correlation &c) { +TStringMeta CorrelationTaskRunner::GenCorrelationMeta(const CorrelationTaskRunner::Correlation &c) { using namespace YAML; Node n; n["meta_key"] = c.meta_key; - n["action_name"] = c.action_name; - n["argument_names"] = c.argument_names; + for (auto &arg : c.args_list) { + Node arg_node; + arg_node["q-vector"] = arg.q_vector_name; + arg_node["correction-step"] = Enum(arg.correction_step); + arg_node["component"] = arg.component; + arg_node["weight"] = arg.weight; + n["args"].push_back(arg_node); + } std::stringstream stream; stream << n; - return stream.str(); + return TStringMeta(stream.str()); } CorrelationTaskRunner::QVectorComponentFct CorrelationTaskRunner::GetQVectorComponentFct(const CorrelationArg &arg) { diff --git a/src/QnAnalysisCorrelate/CorrelationTaskRunner.hpp b/src/QnAnalysisCorrelate/CorrelationTaskRunner.hpp index 87b7de3a..e44c9b7a 100644 --- a/src/QnAnalysisCorrelate/CorrelationTaskRunner.hpp +++ b/src/QnAnalysisCorrelate/CorrelationTaskRunner.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -21,6 +22,8 @@ #include "Config.hpp" #include "Utils.hpp" //#include "UserCorrelationAction.hpp" +#include "TStringMeta.hpp" + namespace Qn::Analysis::Correlate { @@ -170,7 +173,7 @@ class CorrelationTaskRunner { static TDirectory *mkcd(const std::filesystem::path &path, TDirectory &root_dir); - static std::string GenCorrelationMeta(const Correlation &c); + static TStringMeta GenCorrelationMeta(const Correlation &c); static QVectorComponentFct GetQVectorComponentFct(const CorrelationArg &arg); @@ -216,8 +219,8 @@ class CorrelationTaskRunner { auto result = std::make_shared(); /* init RDataFrame */ - auto df = GetRDF(); - auto df_sampled = Qn::Correlation::Resample(*df, t.n_samples); + auto df = GetRDF()->Range(0, 100); + auto df_sampled = Qn::Correlation::Resample(df, t.n_samples); result->output_folder = std::filesystem::path(t.output_folder); if (result->output_folder.is_relative()) { diff --git a/src/QnAnalysisCorrelate/TStringMeta.cpp b/src/QnAnalysisCorrelate/TStringMeta.cpp new file mode 100644 index 00000000..378a63f8 --- /dev/null +++ b/src/QnAnalysisCorrelate/TStringMeta.cpp @@ -0,0 +1,28 @@ +// +// Created by eugene on 27/10/2020. +// + +#include +#include "TStringMeta.hpp" +#include + +ClassImp(TStringMeta) + +Bool_t TStringMeta::IsEqual(const TObject *other) const { + if (this == other) return kTRUE; + if (TStringMeta::Class() != other->IsA()) return false; + return TObjString::IsEqual((TObjString*) other); +} + +Long64_t TStringMeta::Merge(TCollection *coll) { + + std::cout << "Merge!" << std::endl; + TIter iter(coll); + while (TObject *obj = iter()) { + if (IsEqual(obj)) { /* do nothing */ } + else { + return -1; + } + } + return 1l; +} diff --git a/src/QnAnalysisCorrelate/TStringMeta.hpp b/src/QnAnalysisCorrelate/TStringMeta.hpp new file mode 100644 index 00000000..f2af230e --- /dev/null +++ b/src/QnAnalysisCorrelate/TStringMeta.hpp @@ -0,0 +1,24 @@ +// +// Created by eugene on 27/10/2020. +// + +#ifndef QNANALYSIS_SRC_QNANALYSISCORRELATE_TSTRINGMETA_HPP +#define QNANALYSIS_SRC_QNANALYSISCORRELATE_TSTRINGMETA_HPP + +#include + +class TStringMeta : public TObjString { + +public: + TStringMeta() = default; + explicit TStringMeta(const std::string& str) : TObjString(str.c_str()) {} + explicit TStringMeta(const TObjString& ostr) : TObjString(ostr) {} + + + Bool_t IsEqual(const TObject *other) const override; + Long64_t Merge(TCollection *coll); + + ClassDefOverride(TStringMeta, 1); +}; + +#endif //QNANALYSIS_SRC_QNANALYSISCORRELATE_TSTRINGMETA_HPP diff --git a/src/QnAnalysisCorrelate/TStringMeta.test.cpp b/src/QnAnalysisCorrelate/TStringMeta.test.cpp new file mode 100644 index 00000000..ff44c503 --- /dev/null +++ b/src/QnAnalysisCorrelate/TStringMeta.test.cpp @@ -0,0 +1,32 @@ +// +// Created by eugene on 27/10/2020. +// + +#include + +#include "TStringMeta.hpp" +#include + + +namespace { + + +TEST(TStringMeta, Same_Meta) { + + TStringMeta s1(std::string("test")); + TStringMeta s2(std::string("test")); + + TList l; + l.SetOwner(kFALSE); + l.Add(&s2); + + s1.Merge(&l); + +} + + + + + +} + diff --git a/src/QnAnalysisCorrelate/TStringMetaLinkDef.h b/src/QnAnalysisCorrelate/TStringMetaLinkDef.h new file mode 100644 index 00000000..3ab6eeb2 --- /dev/null +++ b/src/QnAnalysisCorrelate/TStringMetaLinkDef.h @@ -0,0 +1,12 @@ +// +// Created by eugene on 27/10/2020. +// +#ifdef __ROOTCLING__ +// turns off dictionary generation for all +#pragma link off all class; +#pragma link off all function; +#pragma link off all global; +#pragma link off all typedef; + +#pragma link C++ class TStringMeta+; +#endif