FACT++  1.0
PixelMap.cc
Go to the documentation of this file.
1 #include "externals/PixelMap.h"
2 
3 using namespace std;
4 
5 #include <boost/regex.hpp>
6 #include <mysql++/mysql++.h>
7 
8 void BiasMap::Retrieve(const std::string &database)
9 {
10  static const boost::regex expr("(([[:word:].-]+)(:(.+))?@)?([[:word:].-]+)(:([[:digit:]]+))?(/([[:word:].-]+))");
11  // 2: user
12  // 4: pass
13  // 5: server
14  // 7: port
15  // 9: db
16 
17  boost::smatch what;
18  if (!boost::regex_match(database, what, expr, boost::match_extra))
19  throw runtime_error("Couldn't parse '"+database+"'.");
20 
21  if (what.size()!=10)
22  throw runtime_error("Error parsing '"+database+"'.");
23 
24  const string user = what[2];
25  const string passwd = what[4];
26  const string server = what[5];
27  const string db = what[9];
28  const int port = atoi(string(what[7]).c_str());
29 
30  mysqlpp::Connection conn(db.c_str(), server.c_str(), user.c_str(), passwd.c_str(), port);
31 
32  const mysqlpp::StoreQueryResult res =
33  conn.query("SELECT fPatchNumber, AVG(fVoltageNom), fOffset "
34  " FROM GapdVoltages "
35  " LEFT JOIN BiasOffsets USING(fPatchNumber) "
36  " GROUP BY fPatchNumber").store();
37 
38  clear();
39 
40  int l = 0;
41  for (vector<mysqlpp::Row>::const_iterator v=res.begin(); v<res.end(); v++)
42  {
43  const int id = (*v)[0];
44 
45  if (id<0 || id>416)
46  {
47  ostringstream str;
48  str << "Invalid channel id " << id << " received from database.";
49  throw runtime_error(str.str());
50  }
51 
52  BiasMapEntry entry;
53 
54  entry.hv_board = id/32;
55  entry.hv_channel = id%32;
56  entry.Vnom = (*v)[1];
57  entry.Voff = (*v)[2];
58 
59  (*this)[id] = entry;
60 
61  l++;
62  }
63 
64  if (l!=416)
65  throw runtime_error("Number of rows retrieved from the database does not match 416.");
66 
67  if (size()!=416)
68  throw runtime_error("Number of entries retrived from database does not match 416.");
69 }
char str[80]
Definition: test_client.c:7
STL namespace.
char id[4]
Definition: FITS.h:71
void Retrieve(const std::string &database)
Definition: PixelMap.cc:8
int size
Definition: db_dim_server.c:17
void clear()
Definition: HeadersFTM.h:216
int hv_board
Definition: PixelMap.h:201