Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
src
DQMServices
StreamerIO
plugins
DQMFileIterator.cc
Go to the documentation of this file.
1
#include "
DQMFileIterator.h
"
2
#include "
FWCore/MessageLogger/interface/MessageLogger.h
"
3
4
#include <queue>
5
#include <boost/regex.hpp>
6
#include <boost/format.hpp>
7
#include <boost/range.hpp>
8
#include <boost/filesystem.hpp>
9
#include <boost/algorithm/string/predicate.hpp>
10
11
namespace
edm {
12
13
DQMFileIterator::LumiEntry
DQMFileIterator::LumiEntry::load_json
(
14
const
std::string
&
filename
,
int
lumiNumber) {
15
boost::property_tree::ptree
pt
;
16
read_json(filename, pt);
17
18
LumiEntry
lumi
;
19
20
// We rely on n_events to be the first item on the array...
21
lumi.
n_events
=
std::next
(pt.get_child(
"data"
).begin(), 1)->
second
22
.get_value<std::size_t>();
23
lumi.
datafilename
=
std::next
(pt.get_child(
"data"
).begin(), 2)->
second
24
.get_value<std::string>();
25
lumi.
definition
= pt.get<
std::string
>(
"definition"
);
26
lumi.
source
= pt.get<
std::string
>(
"source"
);
27
28
lumi.
ls
= lumiNumber;
29
return
lumi
;
30
}
31
32
DQMFileIterator::EorEntry
DQMFileIterator::EorEntry::load_json
(
33
const
std::string
&
filename
) {
34
boost::property_tree::ptree
pt
;
35
read_json(filename, pt);
36
37
EorEntry
eor;
38
39
// We rely on n_events to be the first item on the array...
40
eor.
n_events
=
std::next
(pt.get_child(
"data"
).begin(), 1)->
second
41
.get_value<std::size_t>();
42
eor.
n_lumi
=
std::next
(pt.get_child(
"data"
).begin(), 2)->
second
43
.get_value<std::size_t>();
44
eor.
datafilename
=
std::next
(pt.get_child(
"data"
).begin(), 2)->
second
45
.get_value<std::string>();
46
eor.
definition
= pt.get<
std::string
>(
"definition"
);
47
eor.
source
= pt.get<
std::string
>(
"source"
);
48
eor.
loaded
=
true
;
49
50
return
eor;
51
}
52
53
DQMFileIterator::DQMFileIterator
() :
state_
(
EOR
) {}
54
DQMFileIterator::~DQMFileIterator
() {}
55
56
void
DQMFileIterator::initialise
(
int
run
,
const
std::string
&
path
,
const
std::string
&
streamLabel
) {
57
run_
=
run
;
58
streamLabel_
=
streamLabel
;
59
run_path_
= str(
boost::format
(
"%s/run%06d"
) % path %
run_
);
60
61
eor_
.
loaded
=
false
;
62
state_
= State::OPEN;
63
lastLumiSeen_
= 0;
64
65
while
(!
queue_
.empty()) {
66
queue_
.pop();
67
}
68
69
update_state
();
70
}
71
72
DQMFileIterator::State
DQMFileIterator::state
() {
return
state_
; }
73
74
const
DQMFileIterator::LumiEntry
&
DQMFileIterator::front
() {
75
return
queue_
.front();
76
}
77
78
void
DQMFileIterator::pop
() {
return
queue_
.pop(); }
79
80
bool
DQMFileIterator::hasNext
() {
81
update_state
();
82
return
!
queue_
.empty();
83
}
84
85
std::string
DQMFileIterator::make_path_jsn
(
int
lumi
) {
86
return
str(
boost::format
(
"%s/run%06d_ls%04d%s.jsn"
) %
run_path_
%
run_
% lumi %
streamLabel_
);
87
}
88
89
std::string
DQMFileIterator::make_path_eor
() {
90
return
str(
boost::format
(
"%s/run%06d_ls0000_EoR.jsn"
) %
run_path_
%
run_
);
91
}
92
93
std::string
DQMFileIterator::make_path_data
(
const
LumiEntry
&
lumi
) {
94
if
(boost::starts_with(lumi.
datafilename
,
"/"
))
return
lumi.
datafilename
;
95
96
boost::filesystem::path
p
(
run_path_
);
97
p /= lumi.
datafilename
;
98
return
p.string();
99
}
100
101
void
DQMFileIterator::collect
() {
102
// search filesystem to find available lumi section files
103
// or the end of run file
104
105
auto
now
=
std::chrono::high_resolution_clock::now
();
106
auto
last_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
107
now
-
last_collect_
).
count
();
108
109
if
(last_ms < 100)
return
;
110
111
last_collect_
=
now
;
112
113
if
(!
eor_
.
loaded
) {
114
// end of run is not yet read
115
std::string
fn_eor =
make_path_eor
();
116
edm::LogAbsolute
(
"DQMStreamerReader"
) <<
"Checking eor file: "
<< fn_eor;
117
118
if
(boost::filesystem::exists(fn_eor)) {
119
eor_
=
EorEntry::load_json
(fn_eor);
120
121
edm::LogAbsolute
(
"DQMStreamerReader"
) <<
"Loaded eor file: "
<< fn_eor;
122
}
123
}
124
125
int
nextLumi =
lastLumiSeen_
;
// initiate lumi
126
for
(;;) {
127
nextLumi += 1;
128
129
std::string
fn =
make_path_jsn
(nextLumi);
130
edm::LogAbsolute
(
"DQMStreamerReader"
) <<
"Checking json file: "
<< fn;
131
if
(!boost::filesystem::exists(fn)) {
132
// file not yet available
133
break
;
134
}
135
136
LumiEntry
lumi
=
LumiEntry::load_json
(fn, nextLumi);
137
lastLumiSeen_
= nextLumi;
138
queue_
.push(lumi);
139
140
edm::LogAbsolute
(
"DQMStreamerReader"
) <<
"Loaded json file: "
<< fn;
141
}
142
}
143
144
void
DQMFileIterator::update_state
() {
145
collect
();
146
147
// now update the state
148
State
old_state =
state_
;
149
150
if
((
state_
== State::OPEN) && (
eor_
.
loaded
)) {
151
state_
= State::EOR_CLOSING;
152
}
153
154
if
(
state_
== State::EOR_CLOSING) {
155
if
(
int
(
eor_
.
n_lumi
) <=
lastLumiSeen_
) {
156
// last lumi number is also the number of lumis
157
// ie lumi start from 1
158
state_
= State::EOR;
159
}
160
}
161
162
if
(
state_
!= old_state) {
163
edm::LogAbsolute
(
"DQMStreamerReader"
)
164
<<
"Streamer state changed: "
<< old_state <<
" -> "
<<
state_
;
165
}
166
}
167
168
}
/* end of namespace */
edm::DQMFileIterator::state
State state()
Definition:
DQMFileIterator.cc:72
edm::DQMFileIterator::EOR
Definition:
DQMFileIterator.h:46
prof2calltree.count
list count
Definition:
prof2calltree.py:146
MessageLogger.h
edm::DQMFileIterator::initialise
void initialise(int run, const std::string &, const std::string &)
Definition:
DQMFileIterator.cc:56
edm::DQMFileIterator::make_path_data
std::string make_path_data(const LumiEntry &lumi)
Definition:
DQMFileIterator.cc:93
edm::DQMFileIterator::State
State
Definition:
DQMFileIterator.h:43
edm::DQMFileIterator::collect
void collect()
Definition:
DQMFileIterator.cc:101
edm::DQMFileIterator::EorEntry
Definition:
DQMFileIterator.h:31
StorageManager_cfg.streamLabel
tuple streamLabel
Definition:
StorageManager_cfg.py:7
edm::DQMFileIterator::make_path_jsn
std::string make_path_jsn(int lumi)
Definition:
DQMFileIterator.cc:85
fjr2json.lumi
tuple lumi
Definition:
fjr2json.py:35
edm::DQMFileIterator::hasNext
bool hasNext()
Definition:
DQMFileIterator.cc:80
edm::DQMFileIterator::lastLumiSeen_
int lastLumiSeen_
Definition:
DQMFileIterator.h:72
edm::DQMFileIterator::update_state
void update_state()
Definition:
DQMFileIterator.cc:144
getHLTPrescaleColumns.path
list path
Definition:
getHLTPrescaleColumns.py:15
edm::DQMFileIterator::LumiEntry::source
std::string source
Definition:
DQMFileIterator.h:26
edm::DQMFileIterator::EorEntry::n_lumi
std::size_t n_lumi
Definition:
DQMFileIterator.h:35
edm::DQMFileIterator::EorEntry::loaded
bool loaded
Definition:
DQMFileIterator.h:32
edm::DQMFileIterator::EorEntry::n_events
std::size_t n_events
Definition:
DQMFileIterator.h:34
edm::DQMFileIterator::eor_
EorEntry eor_
Definition:
DQMFileIterator.h:73
edm::DQMFileIterator::pop
void pop()
Definition:
DQMFileIterator.cc:78
edm::DQMFileIterator::LumiEntry
Definition:
DQMFileIterator.h:20
cmsPerfStripChart.format
string format
Some error handling for the usage.
Definition:
cmsPerfStripChart.py:290
edm::DQMFileIterator::run_path_
std::string run_path_
Definition:
DQMFileIterator.h:69
edm::DQMFileIterator::make_path_eor
std::string make_path_eor()
Definition:
DQMFileIterator.cc:89
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition:
AlCaHLTBitMon_QueryRunRegistry.py:255
edm::DQMFileIterator::last_collect_
std::chrono::high_resolution_clock::time_point last_collect_
Definition:
DQMFileIterator.h:77
edm::second
U second(std::pair< T, U > const &p)
Definition:
ParameterSet.cc:250
edm::DQMFileIterator::LumiEntry::ls
int ls
Definition:
DQMFileIterator.h:21
edm::DQMFileIterator::~DQMFileIterator
~DQMFileIterator()
Definition:
DQMFileIterator.cc:54
edm::DQMFileIterator::front
const LumiEntry & front()
Definition:
DQMFileIterator.cc:74
RecoTauCleanerPlugins.pt
tuple pt
Definition:
RecoTauCleanerPlugins.py:53
edm::DQMFileIterator::state_
State state_
Definition:
DQMFileIterator.h:74
edm::DQMFileIterator::LumiEntry::definition
std::string definition
Definition:
DQMFileIterator.h:25
DTTTrigCorrFirst.run
run
Definition:
DTTTrigCorrFirst.py:63
edm::DQMFileIterator::run_
int run_
Definition:
DQMFileIterator.h:68
edm::DQMFileIterator::LumiEntry::n_events
std::size_t n_events
Definition:
DQMFileIterator.h:23
edm::DQMFileIterator::LumiEntry::datafilename
std::string datafilename
Definition:
DQMFileIterator.h:24
DQMFileIterator.h
edm::DQMFileIterator::streamLabel_
std::string streamLabel_
Definition:
DQMFileIterator.h:70
edm::DQMFileIterator::EorEntry::load_json
static EorEntry load_json(const std::string &filename)
Definition:
DQMFileIterator.cc:32
AlCaHLTBitMon_ParallelJobs.p
tuple p
Definition:
AlCaHLTBitMon_ParallelJobs.py:152
edm::DQMFileIterator::EorEntry::datafilename
std::string datafilename
Definition:
DQMFileIterator.h:36
lut2db_cfg.filename
tuple filename
Definition:
lut2db_cfg.py:20
edm::DQMFileIterator::queue_
std::queue< LumiEntry > queue_
Definition:
DQMFileIterator.h:75
GetRecoTauVFromDQM_MC_cff.next
tuple next
Definition:
GetRecoTauVFromDQM_MC_cff.py:30
edm::DQMFileIterator::DQMFileIterator
DQMFileIterator()
Definition:
DQMFileIterator.cc:53
edm::DQMFileIterator::EorEntry::definition
std::string definition
Definition:
DQMFileIterator.h:37
cmsPerfSuiteHarvest.now
tuple now
Definition:
cmsPerfSuiteHarvest.py:590
edm::DQMFileIterator::LumiEntry::load_json
static LumiEntry load_json(const std::string &filename, int lumiNumber)
Definition:
DQMFileIterator.cc:13
edm::LogAbsolute
Definition:
MessageLogger.h:347
edm::DQMFileIterator::EorEntry::source
std::string source
Definition:
DQMFileIterator.h:38
Generated for CMSSW Reference Manual by
1.8.5