Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions cmake_modules/YamlCpp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 0 additions & 2 deletions src/QnAnalysisConfig/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
find_package(yaml-cpp REQUIRED)

add_library(QnAnalysisConfig STATIC Convert.cpp Config.cpp)
target_include_directories(QnAnalysisConfig PUBLIC
$<BUILD_INTERFACE:${QnAnalysis_SOURCE_DIR}>>
Expand Down
15 changes: 11 additions & 4 deletions src/QnAnalysisCorrelate/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,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 ()
21 changes: 14 additions & 7 deletions src/QnAnalysisCorrelate/CorrelationTaskRunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <TChain.h>
#include <TDirectory.h>

#include "Config.hpp"

using std::filesystem::path;
using std::filesystem::current_path;
using namespace Qn::Analysis::Correlate;
Expand Down Expand Up @@ -51,18 +53,17 @@ 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);

for (auto &correlation : task->correlations) {
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());
}
}

Expand Down Expand Up @@ -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<EQnCorrectionStep>(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) {
Expand Down
9 changes: 6 additions & 3 deletions src/QnAnalysisCorrelate/CorrelationTaskRunner.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@
#include <QnDataFrame.hpp>
#include <TFile.h>
#include <TTree.h>
#include <TObjString.h>
#include <boost/program_options.hpp>

#include <yaml-cpp/yaml.h>

#include "Config.hpp"
#include "Utils.hpp"
//#include "UserCorrelationAction.hpp"
#include "TStringMeta.hpp"


namespace Qn::Analysis::Correlate {

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -216,8 +219,8 @@ class CorrelationTaskRunner {

auto result = std::make_shared<CorrelationTaskInitialized>();
/* 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()) {
Expand Down
28 changes: 28 additions & 0 deletions src/QnAnalysisCorrelate/TStringMeta.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// Created by eugene on 27/10/2020.
//

#include <iostream>
#include "TStringMeta.hpp"
#include <TCollection.h>

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;
}
24 changes: 24 additions & 0 deletions src/QnAnalysisCorrelate/TStringMeta.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// Created by eugene on 27/10/2020.
//

#ifndef QNANALYSIS_SRC_QNANALYSISCORRELATE_TSTRINGMETA_HPP
#define QNANALYSIS_SRC_QNANALYSISCORRELATE_TSTRINGMETA_HPP

#include <TObjString.h>

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
32 changes: 32 additions & 0 deletions src/QnAnalysisCorrelate/TStringMeta.test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// Created by eugene on 27/10/2020.
//

#include <TFile.h>

#include "TStringMeta.hpp"
#include <gtest/gtest.h>


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);

}





}

12 changes: 12 additions & 0 deletions src/QnAnalysisCorrelate/TStringMetaLinkDef.h
Original file line number Diff line number Diff line change
@@ -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