Jpp  15.0.3
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
software/JDB/JPMTThreshold.cc File Reference

Auxiliary program to set PMT thresholds according DAQ configuration of a given data taking run. More...

#include <string>
#include <iostream>
#include <vector>
#include <map>
#include "TF1.h"
#include "JDB/JDB.hh"
#include "JDB/JSelector.hh"
#include "JDB/JSelectorSupportkit.hh"
#include "JDB/JDBToolkit.hh"
#include "JDB/JPMTThreshold.hh"
#include "JDB/JDetectorIntegration.hh"
#include "JDetector/JPMTParametersMap.hh"
#include "JSystem/JStat.hh"
#include "JSupport/JMeta.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (const int argc, const char *const argv[])
 

Detailed Description

Auxiliary program to set PMT thresholds according DAQ configuration of a given data taking run.

Author
mdejong

Definition in file software/JDB/JPMTThreshold.cc.

Function Documentation

int main ( const int  argc,
const char *const  argv[] 
)

Definition at line 30 of file software/JDB/JPMTThreshold.cc.

31 {
32  using namespace std;
33  using namespace JPP;
34 
35  JServer server;
36  string usr;
37  string pwd;
38  string cookie;
39  string detid;
40  int run;
41  string pmtFile;
42  string formula;
43  int debug;
44 
45  try {
46 
47  JParser<> zap("Auxiliary program to set PMT thresholds according DAQ configuration of a given data taking run.");
48 
49  zap['s'] = make_field(server) = getServernames();
50  zap['u'] = make_field(usr) = "";
51  zap['!'] = make_field(pwd) = "";
52  zap['C'] = make_field(cookie) = "";
53  zap['D'] = make_field(detid);
54  zap['r'] = make_field(run);
55  zap['P'] = make_field(pmtFile, "PMT parameters file") = "";
56  zap['F'] = make_field(formula, "transfer function") = "((x * 1.0)/255.0 * 1.6 + 0.8 - 0.989) / 0.44"; // "((x * 1.0)/255.0 * 1.6 + 0.8 - 1) / 0.44";
57  zap['d'] = make_field(debug) = 1;
58 
59  zap(argc, argv);
60  }
61  catch(const exception& error) {
62  FATAL(error.what() << endl);
63  }
64 
65 
66  JPMTParametersMap parameters;
67 
68  if (pmtFile != "" && getFileStatus(pmtFile.c_str())) {
69  parameters.load(pmtFile.c_str());
70  }
71 
72 
73  TF1 f1("user", formula.c_str());
74 
75  if (!f1.IsValid()) {
76  FATAL("Formula <" << formula << "> invalid." << endl);
77  }
78 
79 
80  typedef vector<JDetectorIntegration> detector_type;
81 
82  JPMTThreshold getPMTThreshold;
83  detector_type detector;
84 
85 
86  try {
87 
88  JDB::reset(usr, pwd, cookie);
89 
90  const int id = getDetector<int>(detid);
91 
92  getPMTThreshold.configure(id, run);
93 
94  DEBUG(getPMTThreshold);
95 
96  ResultSet& rs = getResultSet(getTable<JDetectorIntegration>(), getSelector<JDetectorIntegration>(id));
97 
98  for (JDetectorIntegration parameters; rs >> parameters; ) {
99  detector.push_back(parameters);
100  }
101 
102  rs.Close();
103  }
104  catch(const exception& error) {
105  FATAL(error.what() << endl);
106  }
107 
108 
109  for (vector<JDetectorIntegration>::const_iterator i = detector.begin(); i != detector.end(); ++i) {
110 
111  if (i->PMTID != -1) {
112 
113  try {
114 
115  const JPMTThreshold::result_type threshold = getPMTThreshold(i->PMTUPI);
116 
117  const double value = f1.Eval((double) threshold.value);
118 
119  if (debug >= debug_t) {
120 
121  cout << FILL(4,'0') << i->DUID << FILL() << '.'
122  << FILL(2,'0') << i->FLOORID << FILL() << '['
123  << FILL(2,'0') << i->CABLEPOS << FILL() << ']'
124  << ' '
125  << setw(3) << threshold.value << ' '
126  << FIXED(5,2) << value << ' ';
127 
128  if (threshold.is_default) {
129  cout << "* (" << FIXED(5,2) << JPMTParameters().threshold << ")";
130  }
131 
132  cout << endl;
133  }
134 
135  if (!threshold.is_default) {
136 
137  const JPMTIdentifier id(i->DOMID, i->CABLEPOS);
138 
139  parameters[id].threshold = value;
140  }
141  }
142  catch(const exception& error) {
143  WARNING("Error at "
144  << FILL(4,'0') << i->DUID << FILL() << '.'
145  << FILL(2,'0') << i->FLOORID << FILL() << '['
146  << FILL(2,'0') << i->CABLEPOS << FILL() << ']'
147  << ' '
148  << error.what() << endl);
149  }
150  }
151  }
152 
153  if (pmtFile != "") {
154 
155  parameters.comment.add(JMeta(argc, argv));
156 
157  parameters.store(pmtFile.c_str());
158 
159  } else {
160 
161  cout << parameters << endl;
162  }
163 }
Utility class to parse command line options.
Definition: JParser.hh:1500
#define WARNING(A)
Definition: JMessage.hh:65
debug
Definition: JMessage.hh:29
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
int debug
debug level
Definition: JSirene.cc:63
Auxiliary data structure for sequence of same character.
Definition: JManip.hh:328
#define FATAL(A)
Definition: JMessage.hh:67
static JStat getFileStatus
Function object for file status.
Definition: JStat.hh:173
void reset(T &value)
Reset value.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
ResultSet & getResultSet(const std::string &query)
Get result set.
Definition: JDB.hh:432
std::vector< JServer > getServernames()
Get list of names of available database servers.
Definition: JDB.hh:98
do set_variable DETECTOR_TXT $WORKDIR detector