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
{
26
namespace
tool
27
{
28
namespace
graph
29
{
30
31
segregated_graph_write::segregated_graph_write
( std::string
const
& oprfx,
32
size_t
const
minc,
33
size_t
const
maxc )
34
:
35
this_dest_prefix
( oprfx ),
36
this_min_component_size
( minc ),
37
this_max_component_size
( maxc )
38
{
39
}
40
41
int
segregated_graph_write::operator ()
(
gtool
const
&
tool
)
const
42
{
43
typedef
long
unsigned
int
t_int;
44
gtool::t_graph
const
& G =
tool
.getgraph();
45
std::vector<t_int> compindices ( boost::num_vertices ( G ) );
46
t_int total_connected = boost::connected_components ( G, &compindices[0] );
47
48
std::vector<gtool::t_graph> components ( total_connected );
49
std::vector<gtool::t_registry> component_registries ( total_connected );
50
51
// Build the components as seperate graphs
52
for
( t_int vector_i = 0; vector_i != compindices.size(); ++vector_i )
53
{
54
t_int component_j = compindices[vector_i];
55
std::string oname = boost::get ( &
gtool::vertex_label::uid
, G ) [vector_i];
56
std::string cname = boost::get ( &
gtool::vertex_label::cname
, G ) [vector_i];
57
gtool::add_object_and_friends
(
58
components[component_j],
59
dbe::inner::dbcontroller::get
(
60
{ oname, cname } ),
61
component_registries[component_j] );
62
}
63
64
// from the graphs built output only those that are within the range specified
65
66
int
max_punits =
GTOOL_MAX_THREADS
;
67
68
std::vector<std::future<void>> punits;
69
70
unsigned
long
long
int
c = 0;
71
72
for
(
auto
const
& g : components )
73
{
74
size_t
const
component_size = g.vertex_set().size();
75
76
if
( component_size >
this_min_component_size
77
and component_size <
this_max_component_size
)
78
{
79
if
( --max_punits )
80
{
81
std::string output_file
82
{
this_dest_prefix
+ std::string (
"_"
) + std::to_string ( ++c ) + std::string (
".dot"
) };
83
84
try
85
{
86
punits.push_back ( std::async ( std::launch::async,
graph::write
, g, output_file ) );
87
}
88
catch
( std::system_error
const
& e )
89
{
90
if
( e.code() == std::errc::resource_unavailable_try_again )
91
{
92
93
ERROR
(
94
"Could not launch another thread"
, e.what(),
"for file:"
, output_file,
95
"try to launch in deferred"
);
96
97
punits.push_back (
98
std::async ( std::launch::deferred,
graph::write
, g, output_file ) );
99
100
WARN
(
101
"File write policy change"
,
"Program execution correction"
,
" for file:"
,
102
output_file,
" launched in deferred"
);
103
104
}
105
else
106
{
107
throw
e;
108
}
109
}
110
}
111
else
112
{
113
// The standard dictates ( C++11 ) that wait is called on the destructor
114
// and the futures launched are either async or defered, which puts them
115
// always in a valid state. All that is needed to do is clear the vector
116
// of futures to initiate calling the destructors.
117
punits.clear();
118
max_punits =
GTOOL_MAX_THREADS
;
119
}
120
}
121
}
122
123
return
EXIT_SUCCESS;
124
}
125
126
}
/* namespace graph */
127
}
/* namespace tool */
128
}
/* namespace dbe */
dbe::inner::dbcontroller::get
static configobject::tref get(dbe::cokey const &desc)
Definition
dbcontroller.cpp:388
dbe::tool::graph::gtool
Definition
gtool.hpp:39
dbe::tool::graph::gtool::t_graph
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, vertex_label > t_graph
Definition
gtool.hpp:55
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:166
dbe::tool::graph::segregated_graph_write::this_min_component_size
size_t const this_min_component_size
Definition
segregate.hpp:44
dbe::tool::graph::segregated_graph_write::this_dest_prefix
std::string const this_dest_prefix
Definition
segregate.hpp:43
dbe::tool::graph::segregated_graph_write::this_max_component_size
size_t const this_max_component_size
Definition
segregate.hpp:45
dbe::tool::graph::segregated_graph_write::operator()
int operator()(gtool const &) const
Definition
segregate.cpp:41
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:31
dbcontroller.hpp
ERROR
#define ERROR(...)
Definition
messenger.hpp:93
WARN
#define WARN(...)
Definition
messenger.hpp:85
dbe::tool::graph::write
void write(gtool::t_graph const &, std::string const &)
Definition
gtool.cpp:226
dbe::tool
Definition
gtool.hpp:33
dbe
Include QT Headers.
Definition
BatchChangeWidget.hpp:18
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:50
dbe::tool::graph::gtool::vertex_label::uid
std::string uid
Definition
gtool.hpp:49
Generated on
for DUNE-DAQ by
1.17.0