ATLAS Offline Software
CalibHeadOperations.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
5 
7 #include "CoralBase/Attribute.h"
8 #include "CoralBase/AttributeList.h"
9 #include "CoralBase/AttributeSpecification.h"
10 #include "CoralKernel/Context.h"
11 #include "GaudiKernel/MsgStream.h"
13 #include "RelationalAccess/IAuthenticationCredentials.h"
14 #include "RelationalAccess/IAuthenticationService.h"
15 #include "RelationalAccess/ICursor.h"
16 #include "RelationalAccess/IQuery.h"
17 #include "RelationalAccess/IRelationalDomain.h"
18 #include "RelationalAccess/IRelationalService.h"
19 #include "RelationalAccess/ISchema.h"
20 #include "RelationalAccess/ITable.h"
21 #include "RelationalAccess/ITransaction.h"
22 #include "RelationalAccess/SchemaException.h"
23 #include "iostream"
24 
25 namespace MuonCalib {
27  CalibHeadOperations::CalibHeadOperations(CalibDbConnection& db_conn) : m_meta_connection(&db_conn) {}
28 
30  try {
32  coral::IQuery* query = m_meta_connection->GetQuery();
33  query->setRowCacheSize(1);
34  query->addToTableList("MDT_HEAD");
35  query->addToOutputList("max(HEAD_ID)", "max_head_id");
36  coral::ICursor& cursor = query->execute();
37  if (!cursor.next()) {
38  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
39  log << MSG::WARNING << "Query for head_id failed!" << endmsg;
40  return -1;
41  }
42  const coral::AttributeList& al = cursor.currentRow();
43  return static_cast<int>(al["max_head_id"].data<double>());
44  } catch (coral::SchemaException& e) {
45  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
46  log << MSG::WARNING << "Schema exception : " << e.what() << endmsg;
47  return -1;
48  }
49  }
50 
51  bool CalibHeadOperations::GetHeadInfo(int& head_id, int& lowrun, int& uprun, int& lowtime, int& uptime) {
52  if (head_id < 0) { head_id = GetLatestHeadId(); }
53  if (head_id < 0) {
54  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
55  log << MSG::WARNING << "CalibHeadOperations::GetHeadInfo: Cannot get latest head id" << endmsg;
56  return -1;
57  }
58  try {
60  coral::IQuery* query = m_meta_connection->GetQuery();
61  query->addToTableList("MDT_HEAD");
62  query->addToOutputList("LOWRUN");
63  query->addToOutputList("UPRUN");
64  query->addToOutputList("LOWTIME");
65  query->addToOutputList("UPTIME");
66  std::string condition = "HEAD_ID=:hid";
67  coral::AttributeList conditionData;
68  conditionData.extend<int>("hid");
69  conditionData["hid"].data<int>() = head_id;
70  query->setCondition(condition, conditionData);
71  coral::ICursor& cursor = query->execute();
72  if (!cursor.next()) {
73  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
74  log << MSG::WARNING << "No information about head_id=" << head_id << " found!" << endmsg;
75  return false;
76  }
77  const coral::AttributeList& al = cursor.currentRow();
78  lowrun = al["LOWRUN"].data<int>();
79  uprun = al["UPRUN"].data<int>();
80  lowtime = al["LOWTIME"].data<int>();
81  uptime = al["UPTIME"].data<int>();
82  return true;
83  } catch (coral::SchemaException& e) {
84  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
85  log << MSG::WARNING << "Schema exception : " << e.what() << endmsg;
86  return false;
87  }
88  }
89 
90  CalibDbConnection* CalibHeadOperations::GetDataConnection(int head_id, bool write, const std::string& writer_connection,
91  const std::string& writer_user, const std::string& writer_password) {
92  if (head_id < 0) { head_id = GetLatestHeadId(); }
93  if (head_id < 0) return nullptr;
94  try {
96  coral::IQuery* query = m_meta_connection->GetQuery();
97  query->setRowCacheSize(1);
98  query->addToTableList("MDT_HEAD");
99  query->addToTableList("MDT_DATA_SCHEMA");
100  query->addToOutputList("MDT_DATA_SCHEMA.SCHEMA_NAME", "SCHEMA");
101  query->addToOutputList("MDT_DATA_SCHEMA.WRITER_ACCOUNT", "WRITER_ACCOUNT");
102  query->addToOutputList("MDT_DATA_SCHEMA.ACTIVE", "ACTIVE");
103  query->addToOutputList("MDT_DATA_SCHEMA.ARCHIVED", "ARCHIVED");
104  query->addToOutputList("MDT_DATA_SCHEMA.ARCHIVE_CONNECTION_STRING", "ARCHIVE_CONNECTION_STRING");
105  std::string condition = "MDT_HEAD.DATA_SCHEMA=MDT_DATA_SCHEMA.SCHEMA_NAME and MDT_HEAD.HEAD_ID=:hid";
106  coral::AttributeList conditionData;
107  conditionData.extend<int>("hid");
108  conditionData["hid"].data<int>() = head_id;
109  query->setCondition(condition, conditionData);
110  coral::ICursor& cursor = query->execute();
111  if (!cursor.next()) {
112  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
113  log << MSG::WARNING << "No information about head_id=" << head_id << " found!" << endmsg;
114  return nullptr;
115  }
116  const coral::AttributeList& al = cursor.currentRow();
117  if (write && !al["ACTIVE"].data<bool>()) {
118  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
119  log << MSG::WARNING << "Can only write to the active schema" << endmsg;
120  return nullptr;
121  }
122  if (al["ARCHIVED"].data<bool>()) {
123  return new CalibDbConnection(al["ARCHIVE_CONNECTION_STRING"].data<std::string>(), al["SCHEMA"].data<std::string>());
124  }
125  if (!write) {
126  CalibDbConnection* conn = new CalibDbConnection(m_meta_connection->GetConnectionString(), al["SCHEMA"].data<std::string>());
127  std::string user, passwd;
129  conn->SetLogin(user, passwd);
130  return conn;
131  }
132  CalibDbConnection* ret = new CalibDbConnection(writer_connection, al["SCHEMA"].data<std::string>());
133  ret->SetTargetUser(al["WRITER_ACCOUNT"].data<std::string>());
134  ret->SetLogin(writer_user, writer_password);
135  return ret;
136  } catch (coral::SchemaException& e) {
137  MsgStream log(Athena::getMessageSvc(), "CalibHeadOperations");
138  log << MSG::WARNING << "Schema exception : " << e.what() << endmsg;
139  return nullptr;
140  }
141  }
142 
143 } // namespace MuonCalib
CalibDbConnection.h
checkCorrelInHIST.conn
conn
Definition: checkCorrelInHIST.py:25
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
MuonCalib::CalibHeadOperations::GetHeadInfo
bool GetHeadInfo(int &head_id, int &lowrun, int &uprun, int &lowtime, int &uptime)
Definition: CalibHeadOperations.cxx:51
calibdata.uptime
uptime
Definition: calibdata.py:36
LArG4GenerateShowerLib.condition
condition
Definition: LArG4GenerateShowerLib.py:19
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
MuonCalib::CalibDbConnection::GetConnectionString
const std::string GetConnectionString() const
Definition: CalibDbConnection.h:38
query
Definition: query.py:1
MuonCalib::CalibHeadOperations::GetDataConnection
CalibDbConnection * GetDataConnection(int head_id=-1, bool write=false, const std::string &writer_connection="", const std::string &writer_user="", const std::string &writer_password="")
Definition: CalibHeadOperations.cxx:90
MuonCalib::CalibHeadOperations::GetLatestHeadId
int GetLatestHeadId()
Definition: CalibHeadOperations.cxx:29
MuonCalib::CalibDbConnection::GetQuery
coral::IQuery * GetQuery()
Definition: CalibDbConnection.cxx:136
sim_rttUpdate.user
def user
Definition: sim_rttUpdate.py:662
ret
T ret(T t)
Definition: rootspy.cxx:260
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
calibdata.uprun
uprun
Definition: calibdata.py:34
python.ByteStreamConfig.write
def write
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:248
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
MuonCalib::CalibDbConnection::OpenTransaction
void OpenTransaction()
Definition: CalibDbConnection.cxx:99
MuonCalib::CalibHeadOperations::m_meta_connection
CalibDbConnection * m_meta_connection
Definition: CalibHeadOperations.h:37
calibdata.head_id
head_id
Definition: calibdata.py:29
MuonCalib::CalibHeadOperations::CalibHeadOperations
CalibHeadOperations(CalibDbConnection &db_conn)
Definition: CalibHeadOperations.cxx:27
MuonCalib::CalibDbConnection::GetLogin
void GetLogin(std::string &username, std::string &password) const
Definition: CalibDbConnection.h:34
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
query_example.cursor
cursor
Definition: query_example.py:21
calibdata.lowrun
lowrun
Definition: calibdata.py:33
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
MuonCalib::CalibDbConnection
Definition: CalibDbConnection.h:22
DeMoUpdate.passwd
passwd
Definition: DeMoUpdate.py:46
CalibHeadOperations.h
calibdata.lowtime
lowtime
Definition: calibdata.py:35
MuonCalib::CalibHeadOperations::~CalibHeadOperations
virtual ~CalibHeadOperations()
Definition: CalibHeadOperations.cxx:26