 |
DAS
3.0
Das Analysis System
|
#include <boost/test/included/unit_test.hpp>
#include <boost/exception/all.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/info_parser.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include "test.h"
#include "exceptions.h"
#include "Options.h"
#include "UserInfo.h"
#include "MetaInfo.h"
#include "example01.cc"
#include "example02.cc"
#include "example03.cc"
#include "example04.cc"
#include "../bin/getMetaInfo.cc"
#include "../bin/printMetaInfo.cc"
#include "../bin/printEntries.cc"
#include "../bin/printBranches.cc"
#include "../bin/forceMetaInfo.cc"
#include "../bin/applyPlugins.cc"
|
template<bool DARWIN_TEST_EXCEPTIONS = false> |
void | example02 (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0}) |
|
template<bool DARWIN_TEST_EXCEPTIONS = false> |
void | example03 (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0}, const vector< fs::path > plugins={}) |
|
void | example04 (const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0}) |
|
| BOOST_AUTO_TEST_CASE (output) |
|
| BOOST_AUTO_TEST_CASE (getters_empty_input) |
|
| BOOST_AUTO_TEST_CASE (getters_broken_input) |
|
| BOOST_AUTO_TEST_CASE (getters_wrong_objects) |
|
| BOOST_AUTO_TEST_CASE (ntuple_producer) |
|
| BOOST_AUTO_TEST_CASE (ntuple_weight_modifier) |
|
| BOOST_AUTO_TEST_CASE (ntuple_JEC_modifier) |
|
| BOOST_AUTO_TEST_CASE (plugins) |
|
| BOOST_AUTO_TEST_CASE (projection) |
|
| BOOST_AUTO_TEST_CASE (all_steps) |
|
| BOOST_AUTO_TEST_CASE (getBool) |
|
| BOOST_AUTO_TEST_CASE (forceMetaInfo) |
|
| BOOST_AUTO_TEST_CASE (GetFirstTreeLocation) |
|
| BOOST_AUTO_TEST_CASE (printEntries) |
|
| BOOST_AUTO_TEST_CASE (printBranches) |
|
| BOOST_AUTO_TEST_CASE (printMetaInfo) |
|
| BOOST_AUTO_TEST_CASE (closure) |
|
| BOOST_AUTO_TEST_CASE (exceptions) |
|
◆ BOOST_TEST_MODULE
#define BOOST_TEST_MODULE test |
◆ DARWIN_GIT_REPO
#define DARWIN_GIT_REPO DARWIN |
◆ DOXYGEN_SHOULD_SKIP_THIS
#define DOXYGEN_SHOULD_SKIP_THIS |
◆ BOOST_AUTO_TEST_CASE() [1/18]
BOOST_AUTO_TEST_CASE |
( |
all_steps |
| ) |
|
302 BOOST_REQUIRE_NO_THROW( pt::read_info(
"example.info",
config) );
305 BOOST_REQUIRE_NO_THROW( DP::example01(
"ntuple01.root",
config, steering) );
306 BOOST_REQUIRE_NO_THROW(
DP::example02(
"ntuple01.root",
"ntuple02.root",
config, steering) );
307 BOOST_REQUIRE_NO_THROW(
DP::example03(
"ntuple02.root",
"ntuple03.root",
config, steering) );
308 BOOST_REQUIRE_NO_THROW(
DP::example04(
"ntuple03.root",
"hists04.root",
config, steering) );
◆ BOOST_AUTO_TEST_CASE() [2/18]
BOOST_AUTO_TEST_CASE |
( |
closure |
| ) |
|
375 unique_ptr<TFile>
f(TFile::Open(
"ntuple02.root"));
379 vector<string> exts {
"info",
"xml",
"json"};
380 for (
string ext: exts) {
381 fs::path file =
"out1." + ext;
382 vector<fs::path>
inputs = {
"ntuple02.root"};
386 auto getHash = [](
const fs::path& ntuple) {
387 auto rootfile = unique_ptr<TFile>(TFile::Open(ntuple.c_str(),
"READ"));
388 auto events = unique_ptr<TTree>(rootfile->Get<TTree>(
"events"));
393 size_t Hash = getHash(
"ntuple02.root");
396 auto chain = [&
config,&getHash](
const fs::path& fOut,
bool isMC) {
397 fs::remove(
"ntuple02.root");
398 fs::remove(
"ntuple03.root");
402 DP::example01(
"ntuple01.root",
config, steering);
406 vector<fs::path>
inputs = {
"hists04.root"};
408 size_t Hash = getHash(
"ntuple02.root");
409 fs::remove(
"ntuple01.root");
410 fs::rename(
"hists04.root", Form(
"hists04_%s_%s.root", &(fOut.extension().c_str()[1]),
isMC ?
"true" :
"false"));
414 BOOST_TEST_MESSAGE(
"Reading config in INFO format" );
415 pt::read_info(
"out1.info",
config);
416 int oldseed =
config.get<
int>(
"preseed");
417 config.put<
int>(
"preseed", 2*oldseed);
418 BOOST_TEST( Hash != chain(
"out2.info",
true ) );
419 config.put<
int>(
"preseed", oldseed);
420 BOOST_TEST( Hash == chain(
"out2.info",
true ) );
421 BOOST_TEST( Hash != chain(
"out2.info",
false) );
423 BOOST_TEST_MESSAGE(
"Reading config in JSON format" );
424 pt::read_json(
"out1.json",
config);
425 BOOST_TEST( Hash == chain(
"out2.json",
true ) );
426 BOOST_TEST( Hash != chain(
"out2.json",
false) );
428 BOOST_TEST_MESSAGE(
"Reading config in XML format" );
429 pt::read_xml(
"out1.xml",
config);
431 BOOST_TEST( Hash == chain(
"out2.xml",
true ) );
432 BOOST_TEST( Hash != chain(
"out2.xml",
false) );
434 vector<fs::path>
inputs = {
"hists04_info_true.root" ,
"hists04_json_true.root" ,
"hists04_xml_true.root" };
436 inputs = {
"hists04_info_false.root",
"hists04_json_false.root",
"hists04_xml_false.root"};
438 inputs = {
"hists04_info_true.root" ,
"hists04_info_false.root"};
441 for (
string name: {
"true",
"false",
"failure"})
442 fs::remove(
name +
".info");
444 for (
string ext: exts) {
445 fs::remove(
"out1." + ext);
446 fs::remove(
"out2." + ext);
447 for (
string b: {
"true",
"false"})
448 fs::remove(
"hists04_" + ext +
"_" + b +
".root");
◆ BOOST_AUTO_TEST_CASE() [3/18]
BOOST_AUTO_TEST_CASE |
( |
exceptions |
| ) |
|
455 auto f = unique_ptr<TFile>(TFile::Open(
"ntuple02.root",
"READ"));
456 auto t = unique_ptr<TTree>(
f->Get<TTree>(
"events"));
458 cout <<
DE::BadInput(
"Here is a bad input", metainfo).what() << endl;
460 cout <<
DE::AnomalousEvent(
"Here is an anomally (just for the example)", t).what() << endl;
464 BOOST_REQUIRE_NO_THROW( pt::read_info(DARWIN
"/test/example.info",
config) );
467 DP::example01(
"ntuple01.root",
config, steering);
468 BOOST_REQUIRE_THROW( DP::example02<true>(
"ntuple01.root",
"ntuple02.root",
config, steering), wrapexcept<DE::AnomalousEvent> );
469 BOOST_REQUIRE_THROW( DP::example01<true>(
"ntuple01.root",
config, steering), wrapexcept<DE::BadInput > );
471 fs::remove(
"inexistent.out");
472 fs::remove(
"ntuple01.root");
◆ BOOST_AUTO_TEST_CASE() [4/18]
BOOST_AUTO_TEST_CASE |
( |
forceMetaInfo |
| ) |
|
323 vector<fs::path>
input = {
"ntuple02.root"};
326 input = {
"ntuple01.root"};
328 unique_ptr<TFile>
f(TFile::Open(
"ntuple01.root",
"READ"));
329 auto events = unique_ptr<TTree>(
f->Get<TTree>(
"events"));
332 BOOST_TEST( !metainfo.Get<
bool>(
"git",
"reproducible") );
◆ BOOST_AUTO_TEST_CASE() [5/18]
BOOST_AUTO_TEST_CASE |
( |
getBool |
| ) |
|
◆ BOOST_AUTO_TEST_CASE() [6/18]
BOOST_AUTO_TEST_CASE |
( |
GetFirstTreeLocation |
| ) |
|
340 TFile::Open(
"GetFirstTreeLocation.root",
"RECREATE")->Close();
◆ BOOST_AUTO_TEST_CASE() [7/18]
BOOST_AUTO_TEST_CASE |
( |
getters_broken_input |
| ) |
|
91 vector<fs::path>
files{
"/this/dir/does/not/exist"};
◆ BOOST_AUTO_TEST_CASE() [8/18]
BOOST_AUTO_TEST_CASE |
( |
getters_empty_input |
| ) |
|
82 vector<fs::path>
files;
84 BOOST_TEST_MESSAGE(
"Testing exceptions for empty list of input files" );
85 BOOST_REQUIRE_THROW( flow.GetInputHist(
"h") , wrapexcept<invalid_argument> );
86 BOOST_REQUIRE_THROW( flow.GetInputTree({1, 0},
"t"), wrapexcept<invalid_argument> );
◆ BOOST_AUTO_TEST_CASE() [9/18]
BOOST_AUTO_TEST_CASE |
( |
getters_wrong_objects |
| ) |
|
97 vector<fs::path>
files;
98 for (
int i = 1; i < 4; ++i) {
99 fs::path
name = Form(
"getters_%d.root", i);
100 cout <<
name << endl;
102 unique_ptr<TFile>
f(TFile::Open(
name.c_str(),
"RECREATE"));
103 auto h = make_unique<TH1F>(
"h",
"h", 1, 0., 1.);
104 auto t = make_unique<TTree>(
"t",
"t");
105 h->SetDirectory(
f.get());
106 t->SetDirectory(
f.get());
112 BOOST_TEST_MESSAGE(
"Testing exceptions for inexisting histogram" );
113 BOOST_REQUIRE_THROW( flow.GetInputHist(
"thisHistDoesNotExist"), wrapexcept<DE::BadInput> );
114 BOOST_TEST_MESSAGE(
"Testing exceptions for empty tree" );
115 BOOST_REQUIRE_THROW( flow.GetInputTree({1, 0},
"t" ), wrapexcept<invalid_argument> );
116 BOOST_TEST_MESSAGE(
"Testing exceptions for inexisting tree" );
117 BOOST_REQUIRE_THROW( flow.GetInputTree({1, 0},
"thisTreeDoesNotExist"), wrapexcept<DE::BadInput> );
119 BOOST_REQUIRE_NO_THROW( flow.GetInputHist(
"h") );
◆ BOOST_AUTO_TEST_CASE() [10/18]
BOOST_AUTO_TEST_CASE |
( |
ntuple_JEC_modifier |
| ) |
|
194 fs::path
input, output;
199 .output(
"output", &output,
"output ROOT file");
201 for (
string mode: {
"fill",
"Friend"}) {
202 string cmd =
"example03 ntuple02_" + mode +
".root ntuple03_" + mode
203 +
".root -j 3 -k 1 -" + mode.at(0)
204 +
" -v -p ../plugins/libFlattener." DLL_EXT;
209 const auto& slice =
options.slice();
210 const int steering =
options.steering();
217 vector<DP::RecJet> * recs_f =
nullptr,
222 flow_F.GetInputTree();
223 BOOST_REQUIRE_NO_THROW( recs_f = flow_f.GetBranchReadOnly<vector<DP::RecJet>>(
"recJets") );
224 BOOST_REQUIRE_NO_THROW( recs_F = flow_F.GetBranchReadOnly<vector<DP::RecJet>>(
"recJets") );
226 string active_branches_f = flow_f.DumpActiveBranches(),
227 active_branches_F = flow_F.DumpActiveBranches();
228 cout <<
"Without friends: " << active_branches_f << endl;
229 cout <<
"With friends: " << active_branches_F << endl;
230 BOOST_TEST( active_branches_f == active_branches_F );
232 auto tIn_f = flow_f.GetInputTree(),
233 tIn_F = flow_F.GetInputTree();
234 BOOST_TEST( tIn_f->GetEntries() == tIn_F->GetEntries() );
236 for (
long long i = 0; i < tIn_f->GetEntries(); ++i) {
239 BOOST_TEST( recs_f->size() == recs_F->size() );
240 for (
size_t j = 0; j < recs_f->size(); ++j)
241 BOOST_TEST( recs_f->at(j).CorrPt() == recs_F->at(j).CorrPt() );
244 fs::remove(
"ntuple02_fill.root");
◆ BOOST_AUTO_TEST_CASE() [11/18]
BOOST_AUTO_TEST_CASE |
( |
ntuple_producer |
| ) |
|
131 options.output(
"output" , &output,
"output ROOT file")
132 .arg<
bool> (
"isMC" ,
"flags.isMC" ,
"flag" )
133 .arg<float> (
"R" ,
"flags.R" ,
"R parameter in jet clustering algorithm")
134 .arg<
int > (
"year" ,
"flags.year" ,
"year (20xx)" );
136 auto const args =
tokenize(
"example01 ntuple01.root -c example.info -f");
140 const int steering =
options.steering();
142 DP::example01(output,
config, steering);
143 BOOST_REQUIRE_NO_THROW( DP::example01(output,
config, steering) );
◆ BOOST_AUTO_TEST_CASE() [12/18]
BOOST_AUTO_TEST_CASE |
( |
ntuple_weight_modifier |
| ) |
|
148 fs::path
input, output;
153 .output(
"output", &output,
"output ROOT file")
154 .arg<fs::path>(
"filters",
"corrections.filters",
"location of list of event filters to apply");
156 for (
string mode: {
"fill",
"Friend"}) {
157 string cmd =
"example02 ntuple01.root ntuple02_" + mode +
".root -c example.info -v -j 2 -k 1 -" + mode.at(0);
162 const auto& slice =
options.slice();
163 const int steering =
options.steering();
174 tIn_F = flow_F.GetInputTree();
175 BOOST_TEST( tIn_f->GetEntries() == tIn_F->GetEntries() );
177 BOOST_TEST_MESSAGE(
"Trying to load an inexistant branch" );
181 BOOST_TEST_MESSAGE(
"Loading the analog branch in the friend and no-friend n-tuples." );
182 BOOST_REQUIRE_NO_THROW( event_f = flow_f.GetBranchReadOnly<
DP::RecEvent>(
"recEvent") );
183 BOOST_REQUIRE_NO_THROW( event_F = flow_F.GetBranchReadOnly<
DP::RecEvent>(
"recEvent") );
185 for (
long long i = 0; i < tIn_f->GetEntries(); ++i) {
◆ BOOST_AUTO_TEST_CASE() [13/18]
BOOST_AUTO_TEST_CASE |
( |
output |
| ) |
|
76 BOOST_REQUIRE_THROW(
DT::GetOutputFile(
"/this/file/does/not/exists.root"), wrapexcept<fs::filesystem_error> );
◆ BOOST_AUTO_TEST_CASE() [14/18]
254 options.inputs(
"inputs", &
inputs,
"input ROOT file(s) or directory")
255 .output(
"output", &output,
"output ROOT file")
256 .args(
"plugins",
"corrections.plugins",
"plugins");
258 auto const args =
tokenize(
"applyPlugins ntuple03_fill.root -f -v "
259 "applyPlugins04.root ../plugins/libFlattener." DLL_EXT);
263 const auto& slice =
options.slice();
264 const int steering =
options.steering();
265 BOOST_REQUIRE_THROW(
options.plugins(), runtime_error );
268 fs::remove(
"ntuple03_fill.root");
◆ BOOST_AUTO_TEST_CASE() [15/18]
BOOST_AUTO_TEST_CASE |
( |
printBranches |
| ) |
|
360 vector<fs::path>
inputs {
"ntuple01.root"};
◆ BOOST_AUTO_TEST_CASE() [16/18]
BOOST_AUTO_TEST_CASE |
( |
printEntries |
| ) |
|
346 auto f = TFile::Open(
"printEntries.root",
"RECREATE");
348 auto d =
f->mkdir(
"dir2"); d->cd();
349 auto dd = d->mkdir(
"subdir"); dd->cd();
350 auto t =
new TTree(
"one_tree",
"");
355 fs::remove(
"printEntries.root");
◆ BOOST_AUTO_TEST_CASE() [17/18]
BOOST_AUTO_TEST_CASE |
( |
printMetaInfo |
| ) |
|
366 vector<fs::path>
inputs {
"ntuple01.root"};
368 tree.put<
string>(
"path",
"preseed");
◆ BOOST_AUTO_TEST_CASE() [18/18]
BOOST_AUTO_TEST_CASE |
( |
projection |
| ) |
|
273 fs::path
input, output;
277 .output(
"output", &output,
"output ROOT file");
279 BOOST_TEST( fs::exists(
"ntuple03_Friend.root") );
280 auto const args =
tokenize(
"example04 ntuple03_Friend.root hists04.root");
284 const auto& slice =
options.slice();
285 const int steering =
options.steering();
289 fs::remove(
"ntuple01.root");
290 fs::remove(
"ntuple02_Friend.root");
291 fs::remove(
"ntuple03_Friend.root");
292 fs::remove(
"hists04.root");
name
Definition: DYToLL_M-50_13TeV_pythia8_cff_GEN_SIM_RECOBEFMIX_DIGI_L1_DIGI2RAW_L1Reco_RECO.py:48
options
Definition: DYToLL_M-50_13TeV_pythia8_cff_GEN_SIM_RECOBEFMIX_DIGI_L1_DIGI2RAW_L1Reco_RECO.py:41
Exception type to throw from plugins.
Definition: exceptions.h:132
static bool verbose
Definition: Step.h:40
args
Definition: Ntupliser_cfg.py:11
BOOST_TEST(gendijet.Rapidity()==1.3573785791881385)
Hash from TTree obtained by combination of different elements.
Definition: UserInfo.h:313
f
Definition: Ntupliser_cfg.py:322
void example02(const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Definition: main.cc:44
void example04(const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0})
Definition: main.cc:60
files
Definition: compareFiles.py:125
PluginsVec * plugins()
Definition: IPlugin.h:77
cmd
Definition: Core-cfgcmd.txt:1
void example03(const fs::path &input, const fs::path &output, const pt::ptree &config, const int steering, const DT::Slice slice={1, 0}, const vector< fs::path > plugins={})
Definition: main.cc:52
config
Definition: Ntupliser_cfg.py:330
input
Definition: DYToLL_M-50_13TeV_pythia8_cff_GEN_SIM_RECOBEFMIX_DIGI_L1_DIGI2RAW_L1Reco_RECO.py:35
Weights weights
e.g. cross section normalisation
Definition: GenericObject.h:45
Generic detector-level event.
Definition: Event.h:32
dictionary isMC
Definition: Ntupliser_cfg.py:62
def inputs
Definition: jercExample.py:118
Generic exception for problematic event (during event loop).
Definition: exceptions.h:63