Jpp  15.0.1-rc.1-highqe
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JPrintAHRSCalibration.cc File Reference

Example program for compass calibration. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <functional>
#include "JDB/JDB.hh"
#include "JDB/JSelector.hh"
#include "JDB/JSelectorSupportkit.hh"
#include "JDB/JAHRSCalibration.hh"
#include "JDB/JAHRSCalibrationToolkit.hh"
#include "JDB/JDBToolkit.hh"
#include "JDB/JDetectorIntegration_t.hh"
#include "JDB/JPBSSequence.hh"
#include "JDB/JProductRouter.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program for compass calibration.

Author
mdejong

Definition in file JPrintAHRSCalibration.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 27 of file JPrintAHRSCalibration.cc.

28 {
29  using namespace std;
30  using namespace JPP;
31 
32  JServer server;
33  string usr;
34  string pwd;
35  string cookie;
36  string detid;
37  int debug;
38 
39  try {
40 
41  JParser<> zap("Example program for compass calibration.");
42 
43  zap['s'] = make_field(server) = getServernames();
44  zap['u'] = make_field(usr) = "";
45  zap['!'] = make_field(pwd) = "";
46  zap['C'] = make_field(cookie) = "";
47  zap['D'] = make_field(detid, "Detector identifier") = "";
48  zap['d'] = make_field(debug) = 2;
49 
50  zap(argc, argv);
51  }
52  catch(const exception &error) {
53  FATAL(error.what() << endl);
54  }
55 
56 
57  vector<JAHRSCalibration> calibration;
58 
59  try {
60 
61  JDB::reset(usr, pwd, cookie);
62 
63  ResultSet& rs = getResultSet(getTable<JAHRSCalibration>());
64 
65  rs >> calibration;
66 
67  rs.Close();
68  }
69  catch(const exception& error) {
70  FATAL(error.what() << endl);
71  }
72 
73  const JAHRSCalibrationValidity is_valid;
74 
75  JDBToolkit::initialise(getUPI, PBS::AHRS);
76 
77 
78  JDetectorIntegration_t detector;
79 
80  if (detid != "") {
81 
82  DEBUG("Reading database table " << getTable<JDetectorIntegration_t>() << endl);
83 
84  try {
85 
86  JDB::reset(usr, pwd, cookie);
87 
88  if (is_integer(detid)) {
89  detid = getDetector(to_value<int>(detid));
90  }
91 
92  ResultSet& rs = getResultSet(getTable<JDetectorIntegration_t>());
93 
94  if (! (rs >> detector)) {
95  THROW(JDatabaseException, "Error reading " << getTable<JDetectorIntegration_t>());
96  }
97  }
98  catch(const exception& error) {
99  FATAL(error.what() << endl);
100  }
101 
102  detector.configure(detid);
103  }
104 
105 
106  const JProductRouter router(detector, getPBSSequences(PBS::AHRS));
107 
108  sort(calibration.begin(), calibration.end(), binary_negate<JAHRSCalibrationComparator>(JAHRSCalibrationComparator()));
109 
110 
112 
113  for (vector<JAHRSCalibration>::const_iterator p = calibration.begin(); p != calibration.end(); ) {
114 
116 
117  for (++q; q != calibration.end() && q->SERIALNUMBER == p->SERIALNUMBER; ++q) {}
118 
119  const JUPI_t upi = getUPI(PBS::AHRS, p->SERIALNUMBER);
120  const JLocation_t location = router.getLocation(upi);
121 
122  if (location.is_valid()) {
123 
124  for (vector<JAHRSCalibration>::const_iterator i = p; i != q; ++i) {
125 
126  if (is_valid(*i)) {
127 
128  if (i != p) {
129  WARNING("AHRS " << location << ' ' << upi << ' '
130  << "invalid calibration" << ' '
131  << p->TESTEND << " v" << getVersion(p->TESTNAME) << " -> "
132  << i->TESTEND << " v" << getVersion(i->TESTNAME) << endl);
133  }
134 
135  zmap[location] = *p;
136 
137  break;
138  }
139  }
140  }
141 
142  for (vector<JAHRSCalibration>::const_iterator i = p; i != q; ++i) {
143 
144  const bool valid = is_valid(*i) || (i != p);
145 
146  if (debug >= debug_t) {
147 
148  cout << setw(8) << i->SERIALNUMBER << ' '
149  << setw(22) << left << upi << right << ' '
150  << setw(8) << i->TESTEND << ' '
151  << setw(8) << i->FIRMWARE_VERSION << ' '
152  << setw(2) << getVersion(i->TESTNAME) << ' '
153  << setw(10) << i->TESTOPID << ' '
154  << (valid ? "" : "*") << endl;
155 
156  if (!valid) {
157  //cout << " -> " << *i << endl;
158  }
159  }
160  }
161 
162  p = q;
163  }
164 
165  for (map<JLocation_t, JAHRSCalibration>::const_iterator i = zmap.begin(); i != zmap.end(); ++i) {
166 
167  const JLocation_t& location = i->first;
168  const JAHRSCalibration& calibration = i->second;
169  const JUPI_t upi = getUPI(PBS::AHRS, calibration.SERIALNUMBER);
170 
171  cout << location << " ";
172 
173  JDetectorIntegration_t::range_type r1, r2;
174 
175  r1 = detector.find(upi);
176 
177  if (distance(r1.first, r1.second) == 1) {
178 
179  r2 = detector.find(detector[r1.first->second].container.getUPI());
180 
181  if (distance(r2.first, r2.second) == 1) {
182  cout << setw(22) << left << detector[r2.first->second].container.getUPI() << right << ' ';
183  cout << setw(22) << left << detector[r1.first->second].container.getUPI() << right << ' ';
184  cout << setw(22) << left << upi << right << ' ';
185  }
186  }
187 
188  cout << setw(3) << (calibration.FIRMWARE_VERSION != "" ?
189  calibration.FIRMWARE_VERSION :
190  "?") << ' ';
191  cout << setw(2) << getVersion(calibration.TESTNAME) << ' ';
192  cout << setw(10) << calibration.TESTOPID << ' ';
193  cout << endl;
194  }
195 
196  return 0;
197 }
Utility class to parse command line options.
Definition: JParser.hh:1500
#define WARNING(A)
Definition: JMessage.hh:65
debug
Definition: JMessage.hh:29
static JGetPBSSequences getPBSSequences
Function object to get PBS sequences as a function of PBS.
int getVersion(const std::string &version)
Get numerical value of AHRS calibration version.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
JDetectorsHelper getDetector
Function object for mapping serial number to object identifier of detector and vice versa...
Definition: JDBToolkit.cc:5
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
bool is_valid(const json &js)
Check validity of JSon data.
bool is_integer(const std::string &buffer)
Check if string is an integer.
Definition: JLangToolkit.hh:58
int debug
debug level
Definition: JSirene.cc:63
#define FATAL(A)
Definition: JMessage.hh:67
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
JUPIHelper getUPI
Function object for mapping PBS and serial number to UPI.
Definition: JDBToolkit.cc:7
do set_variable DETECTOR_TXT $WORKDIR detector
static const JPBS_t AHRS(3, 4, 3, 4)
PBS of compass