DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
dbe
apps
graphtool
segregate.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/segregate.cpp to apps/graphtool/segregate.cpp).
5
6
/*
7
* segregate.cpp
8
*
9
* Created on: 14 Jun 2016
10
* Author: Leonidas Georgopoulos
11
*/
12
13
#include "
dbe/segregate.hpp
"
14
#include "
dbe/dbcontroller.hpp
"
15
16
#include <boost/graph/connected_components.hpp>
17
#include <boost/graph/filtered_graph.hpp>
18
19
#include <array>
20
#include <future>
21
22
#define GTOOL_MAX_THREADS 10
23
24
namespace
dbe
{
25
namespace
tool {
26
namespace
graph {
27
28
segregated_graph_write::segregated_graph_write
(std::string
const
& oprfx,
size_t
const
minc,
size_t
const
maxc)
29
:
this_dest_prefix
(oprfx)
30
,
this_min_component_size
(minc)
31
,
this_max_component_size
(maxc)
32
{
33
}
34
35
int
36
segregated_graph_write::operator()
(
gtool
const
&
tool
)
const
37
{
38
typedef
long
unsigned
int
t_int;
39
gtool::t_graph
const
& G =
tool
.getgraph();
40
std::vector<t_int> compindices(boost::num_vertices(G));
41
t_int total_connected = boost::connected_components(G, &compindices[0]);
42
43
std::vector<gtool::t_graph> components(total_connected);
44
std::vector<gtool::t_registry> component_registries(total_connected);
45
46
// Build the components as seperate graphs
47
for
(t_int vector_i = 0; vector_i != compindices.size(); ++vector_i) {
48
t_int component_j = compindices[vector_i];
49
std::string oname = boost::get(&
gtool::vertex_label::uid
, G)[vector_i];
50
std::string cname = boost::get(&
gtool::vertex_label::cname
, G)[vector_i];
51
gtool::add_object_and_friends
(
52
components[component_j],
dbe::inner::dbcontroller::get
({ oname, cname }), component_registries[component_j]);
53
}
54
55
// from the graphs built output only those that are within the range specified
56
57
int
max_punits =
GTOOL_MAX_THREADS
;
58
59
std::vector<std::future<void>> punits;
60
61
unsigned
long
long
int
c = 0;
62
63
for
(
auto
const
& g : components) {
64
size_t
const
component_size = g.vertex_set().size();
65
66
if
(component_size >
this_min_component_size
and component_size <
this_max_component_size
) {
67
if
(--max_punits) {
68
std::string output_file{
this_dest_prefix
+ std::string(
"_"
) + std::to_string(++c) + std::string(
".dot"
) };
69
70
try
{
71
punits.push_back(std::async(std::launch::async,
graph::write
, g, output_file));
72
}
catch
(std::system_error
const
& e) {
73
if
(e.code() == std::errc::resource_unavailable_try_again) {
74
75
ERROR
(
"Could not launch another thread"
, e.what(),
"for file:"
, output_file,
"try to launch in deferred"
);
76
77
punits.push_back(std::async(std::launch::deferred,
graph::write
, g, output_file));
78
79
WARN
(
"File write policy change"
,
80
"Program execution correction"
,
81
" for file:"
,
82
output_file,
83
" launched in deferred"
);
84
85
}
else
{
86
throw
e;
87
}
88
}
89
}
else
{
90
// The standard dictates ( C++11 ) that wait is called on the destructor
91
// and the futures launched are either async or defered, which puts them
92
// always in a valid state. All that is needed to do is clear the vector
93
// of futures to initiate calling the destructors.
94
punits.clear();
95
max_punits =
GTOOL_MAX_THREADS
;
96
}
97
}
98
}
99
100
return
EXIT_SUCCESS;
101
}
102
103
}
/* namespace graph */
104
}
/* namespace tool */
105
}
/* namespace dbe */
dbe::inner::dbcontroller::get
static configobject::tref get(dbe::cokey const &desc)
Definition
dbcontroller.cpp:357
dbe::tool::graph::gtool
Definition
gtool.hpp:36
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::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::segregated_graph_write::this_min_component_size
size_t const this_min_component_size
Definition
segregate.hpp:40
dbe::tool::graph::segregated_graph_write::this_dest_prefix
std::string const this_dest_prefix
Definition
segregate.hpp:39
dbe::tool::graph::segregated_graph_write::this_max_component_size
size_t const this_max_component_size
Definition
segregate.hpp:41
dbe::tool::graph::segregated_graph_write::operator()
int operator()(gtool const &) const
Definition
segregate.cpp:36
dbe::tool::graph::segregated_graph_write::segregated_graph_write
segregated_graph_write(std::string const &ofn_prefix, size_t const minc=0, size_t const maxc=0)
Definition
segregate.cpp:28
dbcontroller.hpp
ERROR
#define ERROR(...)
Definition
messenger.hpp:90
WARN
#define WARN(...)
Definition
messenger.hpp:82
dbe::tool::graph::write
void write(gtool::t_graph const &, std::string const &)
Definition
gtool.cpp:202
dbe::tool
Definition
gtool.hpp:31
dbe
Include QT Headers.
Definition
BatchChangeWidget.hpp:16
GTOOL_MAX_THREADS
#define GTOOL_MAX_THREADS
Definition
segregate.cpp:22
segregate.hpp
dbe::tool::graph::gtool::vertex_label::cname
std::string cname
Definition
gtool.hpp:46
dbe::tool::graph::gtool::vertex_label::uid
std::string uid
Definition
gtool.hpp:45
Generated on
for DUNE-DAQ by
1.18.0