CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripCoralIface.cc
Go to the documentation of this file.
2 
3 #include "RelationalAccess/ISessionProxy.h"
4 #include "RelationalAccess/ISchema.h"
5 #include "RelationalAccess/ITable.h"
6 #include "RelationalAccess/TableDescription.h"
7 #include "RelationalAccess/ITablePrivilegeManager.h"
8 #include "RelationalAccess/ICursor.h"
9 #include "RelationalAccess/IQuery.h"
10 #include "RelationalAccess/ITableDataEditor.h"
11 #include "CoralBase/Exception.h"
12 #include "CoralBase/AttributeList.h"
13 #include "CoralBase/AttributeSpecification.h"
14 #include "CoralBase/Attribute.h"
15 
19 
20 // constructor
21 SiStripCoralIface::SiStripCoralIface( std::string connectionString , std::string authenticationPath, const bool debug) : m_connectionString(connectionString), m_session(), debug_(debug)
22 {
23  std::cout << "Building coral interface" << std::endl;
24  m_connection.configuration().setAuthenticationPath(authenticationPath);
26  initialize();
27 }
28 
29 // destructor
31  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] Destructor called.";
32  // m_connection.close();
33 }
34 
35 // open DB connection
39  try {
41  m_transaction->start(true);
42  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] Database connection opened";
43  }
44  catch (...) {
45  edm::LogError("SiStripCoralIface") << "Database connection failed";
46  exit(1);
47  }
48 }
49 
50 // access the status change or lastValue tables
51 void SiStripCoralIface::doQuery(std::string queryType, const coral::TimeStamp& startTime, const coral::TimeStamp& endTime, std::vector<coral::TimeStamp> &vec_changedate,
52  std::vector<float> &vec_actualValue, std::vector<std::string> &vec_dpname)
53 {
54  std::auto_ptr<coral::IQuery> query( m_session.schema(std::string("CMS_TRK_DCS_PVSS_COND")).newQuery());
55  std::string condition;
56 
57  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] table to be accessed: " << queryType;
58 
59  if (queryType == "STATUSCHANGE") {
60  query->addToOutputList("FWCAENCHANNEL.CHANGE_DATE","CHANGE_DATE");
61  query->addToOutputList("FWCAENCHANNEL.ACTUAL_STATUS","ACTUAL_STATUS");
62  query->addToOutputList("DP_NAME2ID.DPNAME","DPNAME");
63  query->addToOrderList("FWCAENCHANNEL.CHANGE_DATE");
64  query->addToTableList("FWCAENCHANNEL");
65  query->addToTableList("DP_NAME2ID");
66  condition = "FWCAENCHANNEL.DPID = DP_NAME2ID.id AND FWCAENCHANNEL.CHANGE_DATE<=:tmax AND FWCAENCHANNEL.ACTUAL_STATUS IS NOT NULL AND FWCAENCHANNEL.CHANGE_DATE >=:tmin AND (DP_NAME2ID.dpname like '%easyBoard%')";
67  } else if (queryType == "LASTVALUE") {
68  query->addToOutputList("DCSLASTVALUE_VOLTAGE.CHANGE_DATE","CHANGE_DATE");
69  query->addToOutputList("DCSLASTVALUE_VOLTAGE.ACTUAL_VMON","ACTUAL_VMON");
70  query->addToOutputList("DP_NAME2ID.DPNAME","DPNAME");
71  query->addToOrderList("DCSLASTVALUE_VOLTAGE.CHANGE_DATE");
72  query->addToTableList("DCSLASTVALUE_VOLTAGE");
73  query->addToTableList("DP_NAME2ID");
74  condition = "DCSLASTVALUE_VOLTAGE.DPID = DP_NAME2ID.id AND DCSLASTVALUE_VOLTAGE.CHANGE_DATE<=:tmax AND DCSLASTVALUE_VOLTAGE.CHANGE_DATE>=:tmin AND DCSLASTVALUE_VOLTAGE.ACTUAL_VMON IS NOT NULL AND (DP_NAME2ID.dpname like '%easyBoard%')";
75  }
76 
77  coral::AttributeList conditionData;
78  conditionData.extend<coral::TimeStamp>( "tmax" );
79  conditionData.extend<coral::TimeStamp>( "tmin" );
80  query->setCondition( condition, conditionData );
81  conditionData[0].data<coral::TimeStamp>() = endTime;
82  conditionData[1].data<coral::TimeStamp>() = startTime;
83 
84  query->setMemoryCacheSize( 100 );
85  std::cout<<"Executing query"<<std::endl;
86  if (debug_) std::cout<<"[SiStripCoralIface::"<<__func__<<"] Dumping all query results:"<<std::endl;
87  coral::ICursor& cursor = query->execute();
88  int numberRow=0;
89  while( cursor.next() ){
90  const coral::AttributeList& row = cursor.currentRow();
91  //DEBUG
92  //Output the query results directly to cout,
93  //Can be subsequently parsed by Python validation code
94  if( debug_ ) row.toOutputStream( std::cout ) << std::endl;
95  numberRow++;
96  if (queryType == "STATUSCHANGE") {
97  coral::TimeStamp ts = row["CHANGE_DATE"].data<coral::TimeStamp>();
98  vec_changedate.push_back(ts);
99  float as = (float)row["ACTUAL_STATUS"].data<float>();
100  vec_actualValue.push_back(as);
101  std::string id_name = (std::string)row["DPNAME"].data<std::string>();
102  vec_dpname.push_back(id_name);
103  } else if (queryType == "LASTVALUE") {
104  coral::TimeStamp ts = row["CHANGE_DATE"].data<coral::TimeStamp>();
105  vec_changedate.push_back(ts);
106  float av = (float)row["ACTUAL_VMON"].data<float>();
107  vec_actualValue.push_back(av);
108  std::string id_name = (std::string)row["DPNAME"].data<std::string>();
109  vec_dpname.push_back(id_name);
110  }
111  }
112  cursor.close();
113  if (debug_) std::cout<<"[SiStripCoralIface::"<<__func__<<"] Finished dumping query results, "<< numberRow<<" rows were retrieved from PVSS Cond DB (both Pixel and Strip CAEN supplies)"<<std::endl;
114  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] " << numberRow << " rows retrieved from PVSS Cond DB";
115 }
116 
117 // access the channel settings in the status change table
118 void SiStripCoralIface::doSettingsQuery(const coral::TimeStamp& startTime, const coral::TimeStamp& endTime, std::vector<coral::TimeStamp> &vec_changedate,
119  std::vector<float> &vec_settings, std::vector<std::string> &vec_dpname, std::vector<uint32_t> &vec_dpid)
120 {
121  std::auto_ptr<coral::IQuery> query( m_session.schema(std::string("CMS_TRK_DCS_PVSS_COND")).newQuery());
122  query->addToOutputList("FWCAENCHANNEL.CHANGE_DATE","CHANGE_DATE");
123  query->addToOutputList("FWCAENCHANNEL.SETTINGS_V0","VSET");
124  query->addToOutputList("FWCAENCHANNEL.DPID","DPID");
125  query->addToOutputList("DP_NAME2ID.DPNAME","DPNAME");
126  query->addToOrderList("FWCAENCHANNEL.CHANGE_DATE");
127  query->addToTableList("FWCAENCHANNEL");
128  query->addToTableList("DP_NAME2ID");
129  std::string condition = "FWCAENCHANNEL.DPID = DP_NAME2ID.id AND FWCAENCHANNEL.CHANGE_DATE<=:tmax AND FWCAENCHANNEL.SETTINGS_V0 IS NOT NULL AND FWCAENCHANNEL.CHANGE_DATE >=:tmin AND (DP_NAME2ID.dpname like '%easyBoard%')";
130 
131  coral::AttributeList conditionData;
132  conditionData.extend<coral::TimeStamp>( "tmax" );
133  conditionData.extend<coral::TimeStamp>( "tmin" );
134  query->setCondition( condition, conditionData );
135  conditionData[0].data<coral::TimeStamp>() = endTime;
136  conditionData[1].data<coral::TimeStamp>() = startTime;
137 
138  query->setMemoryCacheSize( 100 );
139  coral::ICursor& cursor = query->execute();
140  int numberRow=0;
141  while( cursor.next() ){
142  const coral::AttributeList& row = cursor.currentRow();
143  if( debug_ ) row.toOutputStream( std::cout ) << std::endl;
144  numberRow++;
145  coral::TimeStamp ts = row["CHANGE_DATE"].data<coral::TimeStamp>();
146  vec_changedate.push_back(ts);
147  float vs = (float)row["VSET"].data<float>();
148  vec_settings.push_back(vs);
149  uint32_t id = (uint32_t)row["DPID"].data<float>();
150  vec_dpid.push_back(id);
151  std::string id_name = (std::string)row["DPNAME"].data<std::string>();
152  vec_dpname.push_back(id_name);
153  }
154  cursor.close();
155  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] " << numberRow << " rows retrieved from PVSS Cond DB";
156 }
157 
158 void SiStripCoralIface::doNameQuery(std::vector<std::string> &vec_dpname, std::vector<uint32_t> &vec_dpid)
159 {
160  std::auto_ptr<coral::IQuery> query( m_session.schema(std::string("CMS_TRK_DCS_PVSS_COND")).newQuery());
161  query->addToOutputList("DP_NAME2ID.DPNAME","DPNAME");
162  query->addToOutputList("DP_NAME2ID.ID","DPID");
163  query->addToTableList("DP_NAME2ID");
164 
165  std::string condition = "DP_NAME2ID.dpname like '%easyBoard%' ";
166  query->setCondition( condition, coral::AttributeList() );
167 
168  query->setMemoryCacheSize( 100 );
169  coral::ICursor& cursor = query->execute();
170  int numberRow=0;
171  while( cursor.next() ){
172  const coral::AttributeList& row = cursor.currentRow();
173  numberRow++;
174  uint32_t id = (uint32_t)row["DPID"].data<float>();
175  vec_dpid.push_back(id);
176  std::string id_name = (std::string)row["DPNAME"].data<std::string>();
177  vec_dpname.push_back(id_name);
178  }
179  cursor.close();
180  LogTrace("SiStripCoralIface") << "[SiStripCoralIface::" << __func__ << "] " << numberRow << " rows retrieved from PVSS Cond DB";
181 }
std::string m_connectionString
void doSettingsQuery(const coral::TimeStamp &startTime, const coral::TimeStamp &endTime, std::vector< coral::TimeStamp > &, std::vector< float > &, std::vector< std::string > &, std::vector< uint32_t > &)
void open(const std::string &connectionString, bool readOnly=false)
Definition: DbSession.cc:159
DbConnectionConfiguration & configuration()
Definition: DbConnection.cc:83
cond::DbConnection m_connection
coral::ISchema & schema(const std::string &schemaName)
Definition: DbSession.cc:238
SiStripCoralIface(std::string connectionString, std::string authenticationPath, const bool debug)
cond::DbSession m_session
void doQuery(std::string queryType, const coral::TimeStamp &startTime, const coral::TimeStamp &endTime, std::vector< coral::TimeStamp > &, std::vector< float > &, std::vector< std::string > &)
void doNameQuery(std::vector< std::string > &vec_dpname, std::vector< uint32_t > &vec_dpid)
#define LogTrace(id)
std::auto_ptr< cond::DbScopedTransaction > m_transaction
string connectionString
Definition: autoCondHLT.py:4
#define debug
Definition: HDRShower.cc:19
DbSession createSession() const
Definition: DbConnection.cc:66
void setAuthenticationPath(const std::string &p)
tuple query
Definition: o2o.py:269
tuple cout
Definition: gather_cfg.py:121