39   const char FILTER = 
'!';   
 
   49 int main(
int argc, 
char **argv)
 
   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;
 
  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());
 
  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()));
 
ROOT TTree parameter settings.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Recording of objects on file according a format that follows from the file name extension.
General purpose messaging.
#define DEBUG(A)
Message macros.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
I/O formatting auxiliaries.
#define MAKE_CSTRING(A)
Make C-string.
#define MAKE_STRING(A)
Make string.
Double_t g1(const Double_t x)
Function.
Auxiliary class to define a range between two values.
int main(int argc, char **argv)
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.
JLocation_t getLocation(const JUPI_t &upi) const
Get location of product with given UPI.
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.