Diana Software
QRunDataHandle.cc
Go to the documentation of this file.
1 #include "QRunDataHandle.hh"
3 #include "QDianaDb.hh"
4 #include <sstream>
5 
6 using namespace Diana;
7 
8 QRunDataHandle::QRunDataHandle(const int run, const std::string& name): GlobalHandle<QRunData>(name,"DAQ")
9 {
10  SetRun(run);
11  fIsOnline = false;
12 }
13 
15 {
16  runData.fDetector.Set(GetBeginRun());
17  runData.fNumber = GetBeginRun();
18 }
19 
20 QError QRunDataHandle::FillFromFile(const std::string& fname)
21 {
23  QRunData runData;
24  runData.Clear();
25  FillBasicInfo(runData);
26  if(fname == "NONE") {
27  Set(runData);
28  return err;
29  }
31  return err;
32 }
33 
35 {
36  QError myerr = QERR_SUCCESS, err = QERR_SUCCESS;
37 
38  QRunData runData;
39  runData.Clear();
40  FillBasicInfo(runData);
41 
42  int run = runData.fNumber;
43 
44  QDianaDb *db = QDianaDb::Get();
45  // Run type
46  try {
47  std::stringstream squery;
48  squery<<"SELECT run_type from runs where run_number = "<<run;
49 
50  std::string srun = db->DoQueryString(squery.str());
51  QError err = runData.fType.Set(srun);
52  if(err != QERR_SUCCESS) throw err;
53 
54  }
55  catch(QError& err) {
56  char berr[1024];
57  snprintf(berr,1024,"Could not find RunType for run %06d in DB: %s",run,err.GetDescription().c_str());
58  myerr = QERR_GLOBAL_HANDLE;
59  myerr.SetDescription(__FILE__,__LINE__,berr);
60  return myerr;
61  }
62 
63  /*
64  * Use run (as opposed to source run) to retrieve all the information.
65  * This way we get the proper trigger and event building configuration
66  * while the other hardware parameters will likely be the same between
67  * the sb of the run and the sb of the source run.
68  */
69 
70  // start date
71  try {
72  std::stringstream squery;
73  squery<<"SELECT date_part('epoch', start_date) FROM runs WHERE "
74  <<"run_number = "<< GetRun();
75  runData.fStartDate = (time_t) db->DoQueryDouble(squery.str());
76  }
77  catch(QError& err) {
78  char berr[1024];
79  snprintf(berr,1024,"Could not find StartDate for run %06d in DB: %s",run,err.GetDescription().c_str());
80  myerr = QERR_GLOBAL_HANDLE;
81  myerr.SetDescription(__FILE__,__LINE__,berr);
82  return myerr;
83  }
84 
85  // end date (compute also duration)
86  try {
87  std::stringstream squery;
88  squery<<"SELECT date_part('epoch', stop_date) FROM runs WHERE "
89  <<"run_number = "<< GetRun();
90  runData.fStopDate = (time_t) db->DoQueryDouble(squery.str());
91  runData.fDuration= runData.fStopDate-runData.fStartDate;
92 
93 
94  }
95  catch(QError& err) {
96  char berr[1024];
97  snprintf(berr,1024,"Could not find StopDate for run %06d in DB: %s",run,err.GetDescription().c_str());
98  if(!fIsOnline) {
99  myerr = QERR_GLOBAL_HANDLE;
100  myerr.SetDescription(__FILE__,__LINE__,berr);
101  return err;
102  } else {
103  QMessageHandler::Info("QRunDataHandle::FillFromDB",berr);
104  }
105  }
106 
107  // everything ok if we arrived here
108  Set(runData);
109  return myerr;
110 }
111 
113 {
114  QError err = QERR_NOT_IMPLEMENTED; // (yet)
115  err.SetDescription("StoreOnDB() not implemented for QRunDataHandle");
116  /*
117  const QVector& ap = Get();
118  int beginRun,endRun;
119  GetValidityInterval(beginRun,endRun);
120  // set ap and validity in db
121  */
122  return err;
123 }
124 
125 
err
Definition: CheckOF.C:114
hvec2 SetRun(753)
hvec Set(vec)
@ QERR_GLOBAL_HANDLE
Definition: QError.hh:45
@ QERR_NOT_IMPLEMENTED
Definition: QError.hh:109
@ QERR_SUCCESS
Definition: QError.hh:27
QError Set(const int run)
convert from run number
virtual QError FillFromFile(const std::string &fname)
fill QObject from file fname
double DoQueryDouble(const std::string &query)
Definition: QDb.cc:181
std::string DoQueryString(const std::string &query)
Definition: QDb.cc:229
static QDianaDb * Get()
Definition: QDianaDb.cc:21
error class with error type and description
Definition: QError.hh:115
void SetDescription(const std::string &descr)
set error description
Definition: QError.hh:147
static void Info(const std::string &sender, const std::string &msg)
Definition: QMessage.hh:40
QError FillFromDB()
QError FillFromFile(const std::string &fname)
QRunDataHandle(const int run, const std::string &name="RunData")
void FillBasicInfo(QRunData &runData)
QError StoreOnDB() const
Basic run based info.
Definition: QRunData.hh:20
int fNumber
Run Number.
Definition: QRunData.hh:41
time_t fStartDate
StartTime.
Definition: QRunData.hh:62
virtual void Clear()
Clear members.
Definition: QRunData.cc:12
RunType fType
Run Type.
Definition: QRunData.hh:45
time_t fStopDate
StopTime.
Definition: QRunData.hh:64
time_t fDuration
Duration.
Definition: QRunData.hh:66
DetectorName fDetector
Source Run Number.
Definition: QRunData.hh:43
QError Set(const std::string &)
convert from string
Definition: QRunType.cc:101
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...