50{
53
55
58 string usr;
59 string pwd;
60 string cookie;
61 string detid;
62 JRange_t runs = JRange_t::DEFAULT_RANGE();
63 long long int numberOfRows;
66 int prescale;
67 bool graph;
70
71 locate.insert("pmt_id");
72 locate.insert("pmt_threshold");
73 locate.insert("pmt_threshold@");
74 locate.insert("pmt_highvolt");
75 locate.insert("pmt_highvolt@");
76
77 try {
78
79 JParser<> zap(
"Auxiliary program to convert slow control data from the database to ROOT TTree.");
80
86 zap[
'D'] =
make_field(detid,
"Detector identifier");
88 zap[
'n'] =
make_field(numberOfRows,
"Maximal number of rows") = numeric_limits<long long int>::max();
91 zap[
'P'] =
make_field(prescale,
"Prescale sampling of data") = 1;
92 zap[
'G'] =
make_field(graph,
"Write TGraph instead of TTree");
95
96 zap(argc, argv);
97 }
98 catch(const exception &error) {
99 FATAL(error.what() << endl);
100 }
101
103
106 }
107
108 if (prescale < 1) {
109 WARNING(
"Setting prescale to one." << endl);
110 prescale = 1;
111 }
112
113
115
120 int> > > counts;
121
124
128
130
133 }
134
135 try {
136
137 JDB::reset(usr, pwd, cookie);
138
140
142
143 {
145
147
150 }
151 }
152
153 DEBUG(
"Number of integrated products (before) " << right <<
detector.size() << endl);
154
156
157 DEBUG(
"Number of integrated products (after) " << right <<
detector.size() << endl);
158
160
161 {
163
165
166 for (
JAllParams parameters; rs >> parameters; ) {
167
168
169
170
171
172
173 if (
to_upper(parameters.TYPE) ==
"INTEGER" && parameters.INTEGER_UNIT_SCALE > 0.0) {
174 unit[
to_upper(parameters.NAME)] = parameters.INTEGER_UNIT_SCALE;
175 }
176 }
177
178 rs.Close();
179 }
180
181 {
183
187
189
190 long long int counter = 0;
191
192 for (
JDatalogNumbers parameters; rs >> parameters && counter != numberOfRows; ++counter) {
193
195
196 const JUPI_t upi = parameters.SOURCE_NAME;
197 const JLocation_t& location = router.getLocation(upi);
198
200
201 strings.insert(location.
string);
202 floors .insert(location.
floor);
203
204 bool status = true;
205
206 for (vector<string>::const_iterator i =
filter.begin(); i !=
filter.end(); ++i) {
207
208 if (*i != "") {
209
210 bool nos = (*i)[0] == FILTER;
211 TRegexp regexp = (nos ? i->substr(1).c_str() : i->c_str());
212
213 if (TString(parameters.PARAMETER_NAME).Contains(regexp)) {
214 status = !nos;
215 }
216 }
217 }
218
219 if (status) {
220
223 }
224
225 if (location.
floor >= (
int) data[location.
string].size()) {
227 }
228
229 string buffer = parameters.PARAMETER_NAME;
230
231 if (locate.count(buffer) != 0) {
233 }
234
236
237 double factor = 1.0;
238
240
241 if (p != unit.end())
242 factor = p->second;
243 else
244 errors[parameters.PARAMETER_NAME] += 1;
245
246
247 if ((counts[location.
string][location.
floor][buffer]++)%prescale == 0) {
248
249 if (!graph) {
250
255 parameters.PARAMETER_NAME,
256 parameters.UNIXTIME,
257 parameters.DATA_VALUE * factor));
258
259 } else {
260
261 g1.put(parameters.getTime(), parameters.DATA_VALUE * factor);
262 }
263 }
264 }
265
266 } else {
267
268 warnings[parameters.PARAMETER_NAME] += 1;
269 }
270 }
272 }
273 }
274 catch(const exception& error) {
275 ERROR(error.what() << endl);
276 }
277
279
280 cout << endl << "Parameters without location in detector." << endl;
281
283 cout << left << setw(48) << i->first << ' ' << setw(6) << i->second << endl;
284 }
285 }
286
287 if (!errors.empty()) {
288
289 cout << endl << "Parameters without scale." << endl;
290
292 cout << left << setw(48) << i->first << ' ' << setw(6) << i->second << endl;
293 }
294 }
295
296 if (graph) {
297
298 for (
size_t string = 0;
string !=
data.size(); ++string) {
299 for (
size_t floor = 0; floor !=
data[string].size(); ++floor) {
300 for (map_type::iterator i = data[
string][floor].begin(); i !=
data[string][floor].end(); ++i) {
301
303
304 const JRange<double> range(i->second.Y.begin(), i->second.Y.end());
305
306 g1.SetMinimum(range.getLowerLimit());
307 g1.SetMaximum(range.getUpperLimit());
308
310 }
311 }
312 }
313
314 ostringstream os;
315
316 os << "set_variable NUMBER_OF_STRINGS " << setw(4) << strings.size() << ";" << endl;
317 os << "set_variable NUMBER_OF_FLOORS " << setw(4) << floors. size() << ";" << endl;
318 if (!strings.empty()) {
319 os << "set_variable FIRST_STRING " << setw(4) << *strings. begin() << ";" << endl;
320 os << "set_variable LAST_STRING " << setw(4) << *strings.rbegin() << ";" << endl;
321 }
322 if (!floors.empty()) {
323 os << "set_variable FIRST_FLOOR " << setw(4) << *floors. begin() << ";" << endl;
324 os << "set_variable LAST_FLOOR " << setw(4) << *floors. rbegin() << ";" << endl;
325 }
326 os << "set_array STRINGS ";
327 copy(strings.begin(), strings.end(), ostream_iterator<int>(os,
" "));
328 os << endl;
329
330 outputFile.put(TNamed(
"TUNA", os.str().c_str()));
331 }
332
334}
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
#define MAKE_STRING(A)
Make string.
Double_t g1(const Double_t x)
Function.
Auxiliary class for specifying selection of database data.
Utility class to parse command line options.
void copy(const Head &from, JHead &to)
Copy header from from to to.
static const JPBSSequences CLB_SEQUENCES
PBS sequences for central-logic board.
ResultSet & getResultSet(const std::string &query)
Get result set.
const char * getTable()
Get table name.
JDetectorsHelper & getDetector()
Auxiliary function for helper object initialisation.
std::vector< std::string > getColumns()
Get column names.
std::vector< JServer > getServernames()
Get list of names of available database servers.
std::string to_upper(const std::string &value)
Convert all character to upper case.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool filter(const JDAQEvent &tev, const JEvt &evt, const Evt *const pE)
Event selection.
std::map< int, range_type > map_type
Auxiliary data structure for sequence of same character.
Type definition of range.
Auxiliary data structure for location of product in detector.
int string
position in detector
int floor
position in string
int position
position in floor
Auxiliary class to map UPI to location in detector.
Wrapper class for server name.
Universal product identifier (UPI).
Template definition for getting table specific selector.
Auxiliary data structure for streaming of STL containers.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure to build TGraph.