ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonCalib
MuonCalibDbOperations
src
CalibHeadOperations.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
#include "
MuonCalibDbOperations/CalibHeadOperations.h
"
5
6
#include "
AthenaKernel/getMessageSvc.h
"
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"
12
#include "
MuonCalibDbOperations/CalibDbConnection.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
{
26
CalibHeadOperations::~CalibHeadOperations
() {}
27
CalibHeadOperations::CalibHeadOperations
(
CalibDbConnection
& db_conn) :
m_meta_connection
(&db_conn) {}
28
29
int
CalibHeadOperations::GetLatestHeadId
() {
30
try
{
31
m_meta_connection
->OpenTransaction();
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
{
59
m_meta_connection
->OpenTransaction();
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
{
95
m_meta_connection
->OpenTransaction();
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;
128
m_meta_connection
->GetLogin(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
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
CalibDbConnection.h
CalibHeadOperations.h
al
static Double_t al
Definition
LArPhysWaveHECTool.cxx:38
MuonCalib::CalibDbConnection
Definition
CalibDbConnection.h:22
MuonCalib::CalibDbConnection::SetTargetUser
void SetTargetUser(const std::string &target_user)
Definition
CalibDbConnection.h:40
MuonCalib::CalibDbConnection::SetLogin
void SetLogin(const std::string &username, const std::string &password)
Definition
CalibDbConnection.h:30
MuonCalib::CalibHeadOperations::GetLatestHeadId
int GetLatestHeadId()
Definition
CalibHeadOperations.cxx:29
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::~CalibHeadOperations
virtual ~CalibHeadOperations()
Definition
CalibHeadOperations.cxx:26
MuonCalib::CalibHeadOperations::m_meta_connection
CalibDbConnection * m_meta_connection
Definition
CalibHeadOperations.h:37
MuonCalib::CalibHeadOperations::CalibHeadOperations
CalibHeadOperations(CalibDbConnection &db_conn)
Definition
CalibHeadOperations.cxx:27
MuonCalib::CalibHeadOperations::GetHeadInfo
bool GetHeadInfo(int &head_id, int &lowrun, int &uprun, int &lowtime, int &uptime)
Definition
CalibHeadOperations.cxx:51
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition
getMessageSvc.cxx:20
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition
CscCalcPed.cxx:21
query
Definition
query.py:1
Generated on
for ATLAS Offline Software by
1.17.0