DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
dbe
apps
graphtool
gtool.cpp
Go to the documentation of this file.
1
// DUNE DAQ modification notice:
2
// This file has been modified from the original ATLAS dbe source for the DUNE DAQ project.
3
// Fork baseline commit: dbe-02-12-17 (2022-05-12).
4
// Renamed since fork: yes (from src/graphtool/gtool.cpp to apps/graphtool/gtool.cpp).
5
6
/************************************************************
7
* gtool.cpp
8
*
9
* Created on: Jun 10, 2016
10
* Author: Leonidas Georgopoulos
11
************************************************************/
12
13
#include "
dbe/gtool.hpp
"
14
#include "
dbe/confaccessor.hpp
"
15
#include "
dbe/config_api.hpp
"
16
#include "
dbe/config_api_info.hpp
"
17
#include "
dbe/config_reference.hpp
"
18
#include "
dbe/graphtool.hpp
"
19
#include "
dbe/messenger.hpp
"
20
21
#include <QFileInfo>
22
23
#include <boost/graph/graphviz.hpp>
24
25
#include <algorithm>
26
#include <string>
27
#include <vector>
28
29
namespace
dbe
{
30
namespace
tool
{
31
namespace
graph
{
32
33
//------------------------------------------------------------------------------------------
34
gtool::gtool
(std::string
const
& rl,
dbinfo
dbtype)
35
:
this_src
(rl)
36
{
37
QFileInfo DatabaseFile(QString::fromStdString(rl));
38
39
if
(DatabaseFile.exists()) {
40
QString path_to_database = QString(DatabaseFile.absoluteFilePath());
41
{
42
confaccessor::setdbinfo
(path_to_database, dbtype);
43
INFO
(
"Database location set"
,
"Program execution control success"
);
44
45
if
(
confaccessor::load
()) {
46
INFO
(
"Database initialized"
,
"User request"
);
47
}
else
{
48
ERROR
(
"Could not load database"
,
"OKS error "
,
" Actions : check environment variables e.g. DUNEDAQ_DB_PATH"
);
49
throw
std::string(
"Could not load database"
);
50
}
51
}
52
}
else
{
53
ERROR
(
"Cannot open database"
,
"File error"
,
"for file"
, rl);
54
}
55
}
56
57
gtool::t_graph
const
&
58
gtool::getgraph
()
const
59
{
60
return
this_graph
;
61
}
62
63
void
64
gtool::load_all
()
65
{
66
INFO
(
"Start load objects into internal cache"
,
"Program execution control"
);
67
68
std::vector<std::string> all_classes = {
config::api::info::onclass::allnames<std::vector<std::string>
>() };
69
70
for
(
auto
const
& x : all_classes) {
71
load_all_class_objects
(x);
72
}
73
74
INFO
(
"All objects loaded into internal cache"
,
75
"Program execution control success"
,
76
"#objects:"
,
77
std::to_string(
this_all_objects
.size()));
78
}
79
80
void
81
gtool::load_all_class_objects
(std::string
const
& cname)
82
{
83
std::vector<dbe::tref> all_objects =
config::api::info::onclass::objects<false>
(cname,
false
);
84
85
INFO
(
"Class to load: "
,
"Program execution control"
, cname);
86
87
for
(
dbe::tref
const
& x : all_objects) {
88
this_all_objects
.push_back(x);
89
}
90
91
INFO
(
"Class load success: "
,
"Program execution control"
, cname,
"#objects"
, std::to_string(all_objects.size()));
92
}
93
94
void
95
gtool::create_graph
()
96
{
97
INFO
(
"Database graph generation initiated"
,
"Program execution control"
);
98
already_processed
.clear();
99
100
for
(
auto
const
& x :
this_all_objects
) {
101
add_object_and_friends
(
this_graph
, x,
already_processed
);
102
}
103
104
INFO
(
"Graph generation completed successfully"
,
"Program execution control success"
);
105
}
106
107
gtool::t_vertex
108
gtool::add_object
(
gtool::t_graph
& g,
tref
const
& x,
bool
uniqueness)
109
{
110
vertex_label
xl{ x.
UID
(), x.
class_name
(), x.
full_name
() };
111
112
if
(not uniqueness) {
113
// Multiple vertices with the same properties can be added to this graph
114
return
boost::add_vertex(xl, g);
115
}
else
{
116
bool
result;
117
boost::graph_traits<t_graph>::vertex_iterator viter;
118
std::tie(result, viter) =
lookup
(g, xl);
119
120
if
(result) {
121
return
*viter;
122
}
else
{
123
return
boost::add_vertex(xl, g);
124
}
125
}
126
}
127
128
gtool::t_vertex
129
gtool::add_object
(
gtool::t_graph
& g,
tref
const
& x,
t_registry
& registry)
130
{
131
t_registry::iterator vat = registry.find(x.
full_name
());
132
133
if
(std::end(registry) == vat) {
134
FULLDEBUG
(
"Adding object"
,
"Program execution control"
, x.
full_name
());
135
// not in the registry implies it is not in the graph , i.e. its user responsibility
136
t_registry::iterator v;
137
std::tie(v, std::ignore) = registry.emplace(x.
full_name
(),
add_object
(g, x,
false
));
138
return
v->second;
139
}
else
{
140
return
vat->second;
141
}
142
}
143
144
gtool::t_vertex
145
gtool::add_object_and_friends
(
t_graph
& g,
tref
const
& o,
t_registry
& registry)
146
{
147
DEBUG
(
"Processing object"
,
"Program execution control"
, o.
full_name
());
148
t_vertex
ov =
add_object
(g, o, registry);
149
150
std::vector<tref> friends{
config::api::graph::linked::by::object<tref>
(o) };
// get all neighbors
151
DEBUG
(
152
"Processing object"
,
"Program execution control"
, o.
full_name
(),
" # friends: "
, std::to_string(friends.size()));
153
154
for
(
tref
const
& x : friends) {
155
t_vertex
xv =
add_object
(g, x, registry);
156
boost::add_edge(ov, xv, g);
157
FULLDEBUG
(
"Add edge "
,
"Program excecution control"
, o.
full_name
(),
"->"
, x.full_name());
158
}
159
160
return
ov;
161
}
162
163
gtool::t_lookup_ret
164
gtool::lookup
(
t_graph
const
& g,
vertex_label
const
& l)
165
{
166
auto
const
& vertices = boost::vertices(g);
167
168
for
(
auto
v = vertices.first; v != vertices.second; ++v) {
169
if
(l.label == boost::get(&
vertex_label::label
, g, *v)) {
170
return
t_lookup_ret
(
true
, v);
171
}
172
}
173
174
return
t_lookup_ret
(
false
, vertices.second);
175
}
176
//------------------------------------------------------------------------------------------
177
178
//------------------------------------------------------------------------------------------
179
writegraph::writegraph
(std::string
const
& s)
180
:
this_dest
(s)
181
{
182
}
183
184
int
185
writegraph::operator()
(
gtool
const
& x)
const
186
{
187
INFO
(
"Saving result"
,
"Program execution control"
,
this_dest
);
188
write
(x.
getgraph
());
189
INFO
(
"Result sent to output"
,
"Program execution control success"
,
this_dest
);
190
return
EXIT_SUCCESS;
191
}
192
193
void
194
writegraph::write
(
gtool::t_graph
const
& g)
const
195
{
196
graph::write
(g,
this_dest
);
197
}
198
//------------------------------------------------------------------------------------------
199
200
//------------------------------------------------------------------------------------------
201
void
202
write
(
gtool::t_graph
const
& g, std::string
const
& ofn)
203
{
204
if
(ofn.empty()) {
205
write_to_cout
(g);
206
}
else
{
207
write_to_file
(g, ofn);
208
}
209
}
210
211
void
212
write_to_cout
(
gtool::t_graph
const
& g)
213
{
214
INFO
(
"Sending output to stdout"
,
"Program execution control"
)
215
boost::write_graphviz(std::cout, g, boost::make_label_writer(boost::get(&
gtool::vertex_label::label
, g)));
216
}
217
218
void
219
write_to_file
(
gtool::t_graph
const
& g, std::string
const
& ofn)
220
{
221
std::ofstream of;
222
of.open(ofn);
223
224
if
(of.is_open()) {
225
INFO
(
"Sending output to file"
,
"Program execution control"
,
"File name:"
, ofn);
226
boost::write_graphviz(of, g, boost::make_label_writer(boost::get(&
gtool::vertex_label::label
, g)));
227
228
of.close();
229
230
if
(of.fail()) {
231
ERROR
(
"Could not close file"
,
"Program execution control"
,
"File name:"
, ofn);
232
}
else
{
233
NOTE
(
"Output written to file"
,
"Program execution control success"
,
"File name:"
, ofn);
234
}
235
}
else
{
236
ERROR
(
"Output could not be written file"
,
"Stream could not be opened"
,
"File name:"
, ofn);
237
write_to_cout
(g);
238
}
239
}
240
//------------------------------------------------------------------------------------------
241
242
}
/* namespace graph */
243
}
/* namespace tool */
244
}
/* namespace dbe */
dbe::confaccessor::load
static bool load(bool subscribeToChanges=true)
Definition
confaccessor.cpp:312
dbe::confaccessor::setdbinfo
static void setdbinfo(QString const &location, dbinfo const itype=dbinfo::oks)
Definition
confaccessor.cpp:230
dbe::config::api::info::onclass::objects
static std::vector< dbe::inner::configobject::tref > objects(std::string const &cname, bool const keep_inherited=true)
dbe::config::api::info::onclass::allnames
static T allnames()
Definition
config_api.hpp:35
dbe::inner::configobject::ref_interface::class_name
std::string class_name() const
Definition
config_reference.hpp:180
dbe::inner::configobject::ref_interface::UID
std::string UID() const
Definition
config_reference.hpp:178
dbe::inner::configobject::ref_interface::full_name
std::string full_name() const
Definition
config_reference.hpp:182
dbe::tool::graph::gtool
Definition
gtool.hpp:36
dbe::tool::graph::gtool::t_vertex
boost::graph_traits< t_graph >::vertex_descriptor t_vertex
Definition
gtool.hpp:53
dbe::tool::graph::gtool::create_graph
void create_graph()
Definition
gtool.cpp:95
dbe::tool::graph::gtool::this_all_objects
t_objects this_all_objects
Definition
gtool.hpp:128
dbe::tool::graph::gtool::t_registry
std::map< std::string, t_vertex > t_registry
Definition
gtool.hpp:55
dbe::tool::graph::gtool::gtool
gtool(std::string const &rl, dbinfo dbtype)
Definition
gtool.cpp:34
dbe::tool::graph::gtool::t_graph
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, vertex_label > t_graph
Definition
gtool.hpp:50
dbe::tool::graph::gtool::lookup
static t_lookup_ret lookup(t_graph const &g, vertex_label const &l)
Definition
gtool.cpp:164
dbe::tool::graph::gtool::t_lookup_ret
std::pair< bool, boost::graph_traits< gtool::t_graph >::vertex_iterator > t_lookup_ret
Definition
gtool.hpp:110
dbe::tool::graph::gtool::this_src
std::string this_src
Definition
gtool.hpp:131
dbe::tool::graph::gtool::already_processed
t_registry already_processed
Definition
gtool.hpp:129
dbe::tool::graph::gtool::this_graph
t_graph this_graph
Definition
gtool.hpp:127
dbe::tool::graph::gtool::add_object
static t_vertex add_object(t_graph &g, tref const &o, bool uniqueness=true)
Definition
gtool.cpp:108
dbe::tool::graph::gtool::load_all_class_objects
void load_all_class_objects(std::string const &cname)
Definition
gtool.cpp:81
dbe::tool::graph::gtool::add_object_and_friends
static t_vertex add_object_and_friends(t_graph &, tref const &, t_registry ®istry)
Definition
gtool.cpp:145
dbe::tool::graph::gtool::load_all
void load_all()
Definition
gtool.cpp:64
dbe::tool::graph::gtool::getgraph
t_graph const & getgraph() const
Definition
gtool.cpp:58
dbe::tool::graph::writegraph::write
void write(gtool::t_graph const &) const
Definition
gtool.cpp:194
dbe::tool::graph::writegraph::operator()
int operator()(gtool const &) const
Definition
gtool.cpp:185
dbe::tool::graph::writegraph::writegraph
writegraph(std::string const &)
Definition
gtool.cpp:179
dbe::tool::graph::writegraph::this_dest
std::string this_dest
Definition
gtool.hpp:149
confaccessor.hpp
config_api.hpp
config_api_info.hpp
config_reference.hpp
graphtool.hpp
gtool.hpp
messenger.hpp
ERROR
#define ERROR(...)
Definition
messenger.hpp:90
FULLDEBUG
#define FULLDEBUG(...)
Definition
messenger.hpp:115
NOTE
#define NOTE(...)
Definition
messenger.hpp:105
DEBUG
#define DEBUG(...)
Definition
messenger.hpp:121
INFO
#define INFO(...)
Definition
messenger.hpp:98
dbe::config::api::graph::linked::by::object
std::vector< T > object(tref const &item)
Definition
config_api_graph.cpp:268
dbe::tool::graph
Definition
gtool.hpp:32
dbe::tool::graph::write
void write(gtool::t_graph const &, std::string const &)
Definition
gtool.cpp:202
dbe::tool::graph::write_to_cout
void write_to_cout(gtool::t_graph const &)
Definition
gtool.cpp:212
dbe::tool::graph::write_to_file
void write_to_file(gtool::t_graph const &, std::string const &)
Definition
gtool.cpp:219
dbe::tool
Definition
gtool.hpp:31
dbe
Include QT Headers.
Definition
BatchChangeWidget.hpp:16
dbe::tref
inner::configobject::tref tref
Definition
tref.hpp:36
dbe::dbinfo
dbinfo
Definition
dbinfo.hpp:19
dbe::tool::graph::gtool::vertex_label
Definition
gtool.hpp:44
dbe::tool::graph::gtool::vertex_label::label
std::string label
Definition
gtool.hpp:47
Generated on
for DUNE-DAQ by
1.18.0