Project
Loading...
Searching...
No Matches
Options.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
17#include "rapidjson/document.h"
18#include "rapidjson/stringbuffer.h"
19#include "rapidjson/prettywriter.h"
20#include <fairlogger/Logger.h>
21#include <unistd.h>
22#include <iostream>
23#include <string>
24
25#include <boost/program_options.hpp>
26#include <boost/program_options/options_description.hpp>
27#include <boost/program_options/variables_map.hpp>
28
29namespace o2
30{
31namespace event_visualisation
32{
33
34Options Options::instance;
35
36namespace bpo = boost::program_options;
37
38std::string Options::printOptions()
39{
40 static const char* str[2] = {"false", "true"};
41 std::stringstream ss;
42 ss << "fileName : " << this->fileName() << std::endl;
43 ss << "data folder : " << this->dataFolder() << std::endl;
44 ss << "saved data folder : " << this->savedDataFolder() << std::endl;
45 ss << "randomTracks: " << str[this->randomTracks()] << std::endl;
46 ss << "json : " << str[this->json()] << std::endl;
47 ss << "online : " << str[this->online()] << std::endl;
48 return ss.str();
49}
50
51bool Options::processCommandLine(int argc, char* argv[])
52{
53 bool save = false;
54
55 bpo::options_description eveOptions("o2Eve options");
56
57 eveOptions.add_options()(
58 "help,h", "produce help message")(
59 "datafolder,d", bpo::value<decltype(this->mDataFolder)>()->default_value("./json"), "name of the data folder")(
60 "imagefolder,i", bpo::value<decltype(this->mImageFolder)>()->default_value(""), "name of the image folder")(
61 "filename,f", bpo::value<decltype(this->mFileName)>()->default_value("data.root"), "name of the data file")(
62 "json,j", bpo::value<decltype(this->mJSON)>()->zero_tokens()->default_value(false), "use json files as a source")(
63 "memorylimit,m", bpo::value<decltype(this->mMemoryLimit)>()->default_value(-1), "memory usage limit (MB) - app will terminate if it is exceeded (pass -1 for no limit)")(
64 "online,o", bpo::value<decltype(this->mOnline)>()->zero_tokens()->default_value(false), "use online json files as a source")(
65 "optionsfilename,p", bpo::value<std::string>()->default_value(""), "name of the options file")(
66 "randomtracks,r", bpo::value<decltype(this->mRandomTracks)>()->zero_tokens()->default_value(false), "use random tracks")(
67 "saveddatafolder,s", bpo::value<decltype(this->mSavedDataFolder)>()->default_value(""), "name of the saved data folder")(
68 "hidedplgui", bpo::value<decltype(this->mHideDplGUI)>()->zero_tokens()->default_value(false), "hide DPL GUI when processing AODs")(
69 "aodconverter,a", bpo::value<decltype(this->mAODConverterPath)>()->default_value("o2-eve-aodconverter"), "AOD converter path");
70
71 using namespace bpo::command_line_style;
72 auto style = (allow_short | short_allow_adjacent | short_allow_next | allow_long | long_allow_adjacent | long_allow_next | allow_sticky | allow_dash_for_short);
73 bpo::variables_map varmap;
74 try {
75 bpo::store(
76 bpo::command_line_parser(argc, argv)
77 .options(eveOptions)
78 .style(style)
79 .run(),
80 varmap);
81 } catch (std::exception const& e) {
82 LOGP(error, "error parsing options of {}: {}", argv[0], e.what());
83 exit(1);
84 }
85
86 if (varmap.count("help")) {
87 LOGF(info, printOptions());
88 return false;
89 }
90
91 this->mDataFolder = varmap["datafolder"].as<decltype(this->mDataFolder)>();
92 this->mImageFolder = varmap["imagefolder"].as<decltype(this->mImageFolder)>();
93 this->mFileName = varmap["filename"].as<decltype(this->mFileName)>();
94 this->mJSON = varmap["json"].as<decltype(this->mJSON)>();
95 this->mMemoryLimit = varmap["memorylimit"].as<decltype(this->mMemoryLimit)>();
96 this->mOnline = varmap["online"].as<decltype(this->mOnline)>();
97 this->mOptionsFileName = varmap["optionsfilename"].as<std::string>();
98 this->mRandomTracks = varmap["randomtracks"].as<decltype(this->mRandomTracks)>();
99 this->mSavedDataFolder = varmap["saveddatafolder"].as<decltype(this->mSavedDataFolder)>();
100 this->mHideDplGUI = varmap["hidedplgui"].as<decltype(this->mHideDplGUI)>();
101 this->mAODConverterPath = varmap["aodconverter"].as<decltype(this->mAODConverterPath)>();
102
103 if (save) {
104 this->saveToJSON("o2eve.json");
105 return false;
106 }
107
108 return true;
109}
110
111bool Options::saveToJSON(std::string filename)
112{
113 rapidjson::Value dataFolder;
114 rapidjson::Value savedDataFolder;
115 rapidjson::Value fileName;
116 rapidjson::Value json(rapidjson::kNumberType);
117 rapidjson::Value online(rapidjson::kNumberType);
118 rapidjson::Value randomTracks(rapidjson::kNumberType);
119
120 dataFolder.SetString(rapidjson::StringRef(this->dataFolder().c_str()));
121 savedDataFolder.SetString(rapidjson::StringRef(this->savedDataFolder().c_str()));
122 fileName.SetString(rapidjson::StringRef(this->fileName().c_str()));
123 json.SetBool(this->json());
124 online.SetBool(this->online());
125 randomTracks.SetBool(this->randomTracks());
126
127 rapidjson::Document tree(rapidjson::kObjectType);
128 rapidjson::Document::AllocatorType& allocator = tree.GetAllocator();
129 tree.AddMember("dataFolder", dataFolder, allocator);
130 tree.AddMember("savedDataFolder", savedDataFolder, allocator);
131 tree.AddMember("fileName", fileName, allocator);
132 tree.AddMember("json", json, allocator);
133 tree.AddMember("online", online, allocator);
134 tree.AddMember("randomTracks", randomTracks, allocator);
135
136 rapidjson::StringBuffer buffer;
137 rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
138 tree.Accept(writer);
139
140 std::ofstream out(filename);
141 out << buffer.GetString();
142 out.close();
143 return true;
144}
145
146bool Options::readFromJSON(std::string /*filename*/)
147{
148 return false;
149}
150
151} // namespace event_visualisation
152} // namespace o2
GLuint buffer
Definition glcorearb.h:655
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string filename()
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))
const std::string str