Jpp  15.0.5
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