ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
AthenaExamples
AthExHive
src
condEx
ASCIICondDbSvc.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
ASCIICondDbSvc.h
"
6
#include "
AthenaKernel/CondCont.h
"
7
8
#include <regex>
9
#include <ranges>
10
11
#include <fstream>
12
13
const
std::string
r_t
(
"\\[([0-9]+),([0-9]+)\\]"
);
14
const
std::string
r_r
=
"\\s*\\{"
+
r_t
+
"-"
+
r_t
+
"\\}\\s*"
;
15
const
std::string
r_e
=
"\\s*\\{"
+
r_t
+
"-"
+
r_t
+
"\\}=([0-9]+)\\s*"
;
16
const
std::string
r_ef
=
"\\s*\\{"
+
r_t
+
"-"
+
r_t
+
"\\}=(-*[0-9]*\\.*[0-9]*)\\s*"
;
17
const
std::regex
rr
(
r_r
);
18
const
std::regex
re
(
r_e
);
19
const
std::regex
ref
(
r_ef
);
20
21
22
//---------------------------------------------------------------------------
23
24
ASCIICondDbSvc::ASCIICondDbSvc
(
const
std::string& name, ISvcLocator* svcLoc ):
25
base_class(name,svcLoc)
26
{}
27
28
//---------------------------------------------------------------------------
29
30
StatusCode
31
ASCIICondDbSvc::initialize
() {
32
33
// Initialise mother class in order to print DEBUG messages during initialize()
34
StatusCode
sc
(AthService::initialize());
35
msg
().setLevel( m_outputLevel.value() );
36
37
if
(!
sc
.isSuccess()) {
38
ATH_MSG_WARNING
(
"Base class could not be initialized"
);
39
return
StatusCode::FAILURE;
40
}
41
42
if
(
m_file
==
""
) {
43
ATH_MSG_DEBUG
(
"db file not set"
);
44
return
StatusCode::SUCCESS;
45
}
46
47
if
(
readDbFile
(
m_file
).isFailure()) {
48
return
StatusCode::FAILURE;
49
}
50
51
std::ostringstream ost;
52
std::print(ost,
" Printing CondDB registry"
);
53
for
(
const
auto
& e :
m_registry
) {
54
std::print(ost,
"\n - id: {} r:"
, e.first);
55
for
(
const
IOVEntryT<IASCIICondDbSvc::dbData_t>
&
r
: e.second) {
56
std::print (ost,
" {} :: {}"
,
static_cast<
std::string
>
(
r
.range()), *
r
.objPtr());
57
}
58
}
59
60
ATH_MSG_DEBUG
( ost.str() );
61
62
return
StatusCode::SUCCESS;
63
64
}
65
//---------------------------------------------------------------------------
66
67
StatusCode
68
ASCIICondDbSvc::readDbFile
(
const
std::string& fname) {
69
70
StatusCode
sc
(StatusCode::SUCCESS);
71
72
ATH_MSG_DEBUG
(
"reading cond db from \"{}\""
, fname);
73
74
std::ifstream ifs (fname);
75
std::string line;
76
if
(ifs.is_open()) {
77
78
IOVEntryT<IASCIICondDbSvc::dbData_t>
ie;
79
80
while
( getline (ifs, line) ) {
81
82
// ignore anything after a "#" and blank lines
83
size_t
fh = line.find(
"#"
);
84
if
(fh != std::string::npos)
85
line.erase(fh,line.length()-fh);
86
if
(line.length() == 0)
continue
;
87
88
std::vector<std::string> tokens;
89
for
(
auto
&& token : line | std::views::split(
' '
))
if
(!token.empty()) tokens.emplace_back(token.begin(), token.end());
90
auto
it = tokens.begin();
91
92
std::string dbKey = *it;
93
94
++it;
95
96
while
(it != tokens.end()) {
97
if
(
parse
(ie,*it)) {
98
m_registry
[dbKey].push_back( ie );
99
}
else
{
100
ATH_MSG_ERROR
(
"while reading {} problem parsing in line {}"
,
101
fname, *it, line);
102
sc
= StatusCode::FAILURE;
103
}
104
++it;
105
}
106
}
107
ifs.close();
108
}
else
{
109
ATH_MSG_ERROR
(
"unable to open file {}"
,
m_file
.value() );
110
sc
= StatusCode::FAILURE;
111
}
112
113
return
sc
;
114
115
}
116
//---------------------------------------------------------------------------
117
118
void
119
ASCIICondDbSvc::dump
()
const
{
120
121
std::ostringstream ost;
122
dump
(ost);
123
124
ATH_MSG_INFO
(
"{}"
, ost.str() );
125
126
}
127
128
129
//---------------------------------------------------------------------------
130
131
void
132
ASCIICondDbSvc::dump
(std::ostringstream& ost)
const
{
133
134
std::lock_guard<std::mutex>
lock
(
m_lock
);
135
std::println (ost,
"ASCIICondDbSvc::dump()"
);
136
}
137
138
//---------------------------------------------------------------------------
139
140
StatusCode
141
ASCIICondDbSvc::finalize
() {
142
143
ATH_MSG_DEBUG
(
"ASCIICondDbSvc::finalize()"
);
144
145
if
(msgLvl(MSG::DEBUG)) {
146
std::ostringstream ost;
147
dump
(ost);
148
149
ATH_MSG_DEBUG
( ost.str() );
150
}
151
152
for
(
auto
e :
m_registry
) {
153
for
(
auto
ie : e.second ) {
154
delete
ie.objPtr();
155
ie.setPtr(0);
156
}
157
}
158
159
160
return
StatusCode::SUCCESS;
161
162
}
163
164
//---------------------------------------------------------------------------
165
166
bool
167
ASCIICondDbSvc::parse
(EventIDRange& t,
const
std::string& s) {
168
169
std::smatch m;
170
std::regex_match(s,m,
rr
);
171
172
if
(m.size() != 5) {
return
false
; }
173
174
// set run# and timestamp
175
EventIDBase start(std::stoi(m[1]), EventIDBase::UNDEFEVT, std::stoi(m[2]));
176
EventIDBase end(std::stoi(m[3]), EventIDBase::UNDEFEVT, std::stoi(m[4]));
177
178
start.set_lumi_block(
m_lbn
);
179
end.set_lumi_block(
m_lbn
);
180
181
t = EventIDRange(start, end);
182
183
return
true
;
184
185
}
186
187
//---------------------------------------------------------------------------
188
189
bool
190
ASCIICondDbSvc::parse
(
IOVEntryT<IASCIICondDbSvc::dbData_t>
& ie,
const
std::string& s) {
191
192
std::smatch m;
193
std::regex_match(s,m,
ref
);
194
195
if
(m.size() != 6) {
return
false
; }
196
197
// set run#, lumi and timestamp
198
// EventIDBase start(std::stoi(m[1]), EventIDBase::UNDEFEVT, std::stoi(m[2]));
199
// EventIDBase end(std::stoi(m[3]), EventIDBase::UNDEFEVT, std::stoi(m[4]));
200
// start.set_lumi_block(m_lbn);
201
// end.set_lumi_block(m_lbn);
202
203
// set lumi and Timestamp
204
EventIDBase start(0, EventIDBase::UNDEFEVT,
205
std::stoi(m[2]));
206
EventIDBase end(EventIDBase::UNDEFNUM, EventIDBase::UNDEFEVT,
207
std::stoi(m[4]));
208
start.set_lumi_block(std::stoi(m[1]));
209
end.set_lumi_block(std::stoi(m[3]));
210
211
// Set Run/Lumi
212
// EventIDBase start(std::stoi(m[1]), EventIDBase::UNDEFEVT);
213
// EventIDBase end(std::stoi(m[3]), EventIDBase::UNDEFEVT);
214
// start.set_lumi_block(std::stoi(m[2]));
215
// end.set_lumi_block(std::stoi(m[4]));
216
217
ie.setRange(EventIDRange(start,end));
218
219
IASCIICondDbSvc::dbData_t
*v =
new
IASCIICondDbSvc::dbData_t
( std::stof(m[5]) );
220
ie.setPtr(v);
221
222
return
true
;
223
224
}
225
226
//---------------------------------------------------------------------------
227
228
StatusCode
229
ASCIICondDbSvc::getRange
(
const
std::string& dbKey ,
const
EventContext& ctx,
230
EventIDRange& rng,
IASCIICondDbSvc::dbData_t
& val)
const
{
231
232
std::lock_guard<std::mutex>
lock
(
m_lock
);
233
234
registry_t::const_iterator itr =
m_registry
.find(dbKey);
235
236
if
(itr ==
m_registry
.end()) {
237
ATH_MSG_ERROR
(
"getRange: no dbKey {} found in registry"
, dbKey );
238
return
StatusCode::FAILURE;
239
}
240
241
for
(
const
IOVEntryT<IASCIICondDbSvc::dbData_t>
& e : itr->second) {
242
ATH_MSG_DEBUG
(
"compare "
<< e.range() <<
" with "
<< ctx.eventID() );
243
if
(e.range().isInRange(EventIDBase(ctx.eventID()))) {
244
rng = e.range();
245
val = *(e.objPtr());
246
return
StatusCode::SUCCESS;
247
}
248
}
249
250
ATH_MSG_ERROR
(
"getRange: no range for Time "
<< ctx.eventID()
251
<<
" found for dbKey "
<< dbKey );
252
253
return
StatusCode::FAILURE;
254
}
r_e
const std::string r_e
Definition
ASCIICondDbSvc.cxx:15
ref
const std::regex ref(r_ef)
re
const std::regex re(r_e)
r_t
const std::string r_t("\\[([0-9]+),([0-9]+)\\]")
r_ef
const std::string r_ef
Definition
ASCIICondDbSvc.cxx:16
r_r
const std::string r_r
Definition
ASCIICondDbSvc.cxx:14
rr
const std::regex rr(r_r)
ASCIICondDbSvc.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x,...)
Definition
AthMsgStreamMacros.h:43
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x,...)
Definition
AthMsgStreamMacros.h:47
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x,...)
Definition
AthMsgStreamMacros.h:46
ATH_MSG_INFO
#define ATH_MSG_INFO(x,...)
Definition
AthMsgStreamMacros.h:45
CondCont.h
Hold mappings of ranges to condition objects.
lock
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
ASCIICondDbSvc::getRange
virtual StatusCode getRange(const std::string &, const EventContext &, EventIDRange &, IASCIICondDbSvc::dbData_t &) const override
Definition
ASCIICondDbSvc.cxx:229
ASCIICondDbSvc::m_lbn
Gaudi::Property< unsigned int > m_lbn
Definition
ASCIICondDbSvc.h:49
ASCIICondDbSvc::finalize
virtual StatusCode finalize() override
Definition
ASCIICondDbSvc.cxx:141
ASCIICondDbSvc::m_file
Gaudi::Property< std::string > m_file
Definition
ASCIICondDbSvc.h:48
ASCIICondDbSvc::initialize
virtual StatusCode initialize() override
Definition
ASCIICondDbSvc.cxx:31
ASCIICondDbSvc::ASCIICondDbSvc
ASCIICondDbSvc(const std::string &name, ISvcLocator *svc)
Definition
ASCIICondDbSvc.cxx:24
ASCIICondDbSvc::m_registry
registry_t m_registry
Definition
ASCIICondDbSvc.h:52
ASCIICondDbSvc::m_lock
std::mutex m_lock
Definition
ASCIICondDbSvc.h:54
ASCIICondDbSvc::parse
bool parse(EventIDRange &t, const std::string &s)
Definition
ASCIICondDbSvc.cxx:167
ASCIICondDbSvc::readDbFile
StatusCode readDbFile(const std::string &)
Definition
ASCIICondDbSvc.cxx:68
ASCIICondDbSvc::dump
virtual void dump() const override
Definition
ASCIICondDbSvc.cxx:119
IASCIICondDbSvc::dbData_t
float dbData_t
Definition
IASCIICondDbSvc.h:19
IOVEntryT
Definition
IOVEntryT.h:28
r
int r
Definition
globals.cxx:22
msg
MsgStream & msg
Definition
testRead.cxx:32
Generated on
for ATLAS Offline Software by
1.17.0