62 JRange_t runs = JRange_t::DEFAULT_RANGE();
63 long long int numberOfRows;
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@");
79 JParser<> zap(
"Auxiliary program to convert slow control data from the database to ROOT TTree.");
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");
98 catch(
const exception &error) {
99 FATAL(error.what() << endl);
109 WARNING(
"Setting prescale to one." << endl);
139 detid = getDetector<string>(detid);
144 DEBUG(
"Reading database table " << getTable<JDetectorIntegration_t>() << endl);
146 ResultSet& rs =
getResultSet(getTable<JDetectorIntegration_t>());
153 DEBUG(
"Number of integrated products (before) " << right <<
detector.size() << endl);
157 DEBUG(
"Number of integrated products (after) " << right <<
detector.size() << endl);
162 DEBUG(
"Reading database table " << getTable<JAllParams>() << endl);
166 for (
JAllParams parameters; rs >> parameters; ) {
173 if (
to_upper(parameters.TYPE) ==
"INTEGER" && parameters.INTEGER_UNIT_SCALE > 0.0) {
174 unit[
to_upper(parameters.NAME)] = parameters.INTEGER_UNIT_SCALE;
182 DEBUG(
"Reading database table " << getTable<JDatalogNumbers>() << endl);
188 ResultSet& rs =
getResultSet(getTable<JDatalogNumbers>(), selection);
190 long long int counter = 0;
192 for (
JDatalogNumbers parameters; rs >> parameters && counter != numberOfRows; ++counter) {
196 const JUPI_t upi = parameters.SOURCE_NAME;
197 const JLocation_t& location = router.getLocation(upi);
201 strings.insert(location.
string);
202 floors .insert(location.
floor);
210 bool nos = (*i)[0] == FILTER;
211 TRegexp regexp = (nos ? i->substr(1).c_str() : i->c_str());
213 if (TString(parameters.PARAMETER_NAME).Contains(regexp)) {
229 string buffer = parameters.PARAMETER_NAME;
231 if (locate.count(buffer) != 0) {
244 errors[parameters.PARAMETER_NAME] += 1;
247 if ((counts[location.
string][location.
floor][buffer]++)%prescale == 0) {
255 parameters.PARAMETER_NAME,
257 parameters.DATA_VALUE * factor));
261 g1.put(parameters.getTime(), parameters.DATA_VALUE * factor);
268 warnings[parameters.PARAMETER_NAME] += 1;
274 catch(
const exception& error) {
275 ERROR(error.what() << endl);
280 cout << endl <<
"Parameters without location in detector." << endl;
283 cout << left << setw(48) << i->first <<
' ' << setw(6) << i->second << endl;
287 if (!errors.empty()) {
289 cout << endl <<
"Parameters without scale." << endl;
292 cout << left << setw(48) << i->first <<
' ' << setw(6) << i->second << endl;
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) {
304 const JRange<double> range(i->second.Y.begin(), i->second.Y.end());
306 g1.SetMinimum(range.getLowerLimit());
307 g1.SetMaximum(range.getUpperLimit());
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;
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;
326 os <<
"set_array STRINGS ";
327 copy(strings.begin(), strings.end(), ostream_iterator<int>(os,
" "));
330 outputFile.put(TNamed(
"TUNA", os.str().c_str()));
#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.
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)...
Data structure for graph data.
Auxiliary data structure to build TGraph.