ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonCalib
MuonCalibDbOperations
src
MuonCalibDbCalibrationSource.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// this
6
#include "
MuonCalibDbOperations/MuonCalibDbCalibrationSource.h
"
7
8
#include "
MuonCalibDbOperations/CalibDbConnection.h
"
9
#include "
MuonCalibDbOperations/CalibHeadOperations.h
"
10
#include "
MuonCalibDbOperations/CalibRtDbOperations.h
"
11
#include "
MuonCalibDbOperations/CalibT0DbOperations.h
"
12
#include "
MuonCalibDbOperations/CoolInserter.h
"
13
14
// coral
15
#include "CoralBase/Attribute.h"
16
#include "CoralBase/AttributeList.h"
17
18
// MuonCalibIdentifier//MuonCalibIdentifier
19
#include "
MuonCalibIdentifier/MdtCalibCreationFlags.h
"
20
#include "
MuonCalibIdentifier/MuonFixedId.h
"
21
22
// MuonCalibMath
23
#include "GaudiKernel/IMessageSvc.h"
24
#include "GaudiKernel/MsgStream.h"
25
#include "
MuonCalibMath/SamplePoint.h
"
26
// MuonCalibStandALoneBase
27
#include "
MuonCalibStandAloneBase/NtupleStationId.h
"
28
#include "
MuonCalibStandAloneBase/RegionSelectorBase.h
"
29
// c - c++
30
#include "exception"
31
#include "iostream"
32
#include "sstream"
33
34
namespace
MuonCalib
{
35
MuonCalibDbCalibrationSource::~MuonCalibDbCalibrationSource
() =
default
;
36
MuonCalibDbCalibrationSource::MuonCalibDbCalibrationSource
(
const
std::string& t,
const
std::string& n,
const
IInterface* p) :
37
IMuonCalibConditionsSource
(),
IConditionsStorage
(),
AthAlgTool
(t, n, p) {
38
declareInterface<IMuonCalibConditionsSource>(
this
);
39
declareProperty
(
"SiteName"
,
m_site_name
);
40
declareProperty
(
"HeadId"
,
m_head_id
);
41
declareProperty
(
"ConnectionString"
,
m_calib_connection_string
);
42
declareProperty
(
"WorkingSchema"
,
m_calib_working_schema
);
43
declareProperty
(
"UserName"
,
m_username
);
44
declareProperty
(
"Password"
,
m_password
);
45
declareProperty
(
"Region"
,
m_region_str
);
46
m_mdt_tube_cols
.push_back(std::string(
"TUBE_ID"
));
47
m_mdt_tube_cols
.push_back(std::string(
"P4"
));
48
m_mdt_tube_cols
.push_back(std::string(
"VALIDFLAG"
));
49
m_mdt_tube_cols
.push_back(std::string(
"ADC_1"
));
50
m_store_t0
=
true
;
51
m_store_rt
=
true
;
52
declareProperty
(
"StoreT0"
,
m_store_t0
);
53
declareProperty
(
"StoreRT"
,
m_store_rt
);
54
m_t0_offset
= 0.0;
55
declareProperty
(
"DriftTimeOffsetsVsR"
,
m_drift_time_offsets
);
56
declareProperty
(
"T0Offset"
,
m_t0_offset
);
57
m_time_slewing_applied
=
false
;
58
declareProperty
(
"TimeSlewingApplied"
,
m_time_slewing_applied
);
59
m_b_field_correction_applied
=
false
;
60
declareProperty
(
"BFieldCorrectionApplied"
,
m_b_field_correction_applied
);
61
m_creation_flags
= 0;
62
}
63
64
StatusCode
MuonCalibDbCalibrationSource::initialize
() {
65
// process region
66
m_region
=
RegionSelectorBase::GetRegion
(
m_region_str
);
67
if
(!
m_region
) {
68
ATH_MSG_FATAL
(
"Error initializing RegionSelectorBase::GetRegion with region string: '"
<<
m_region_str
);
69
return
StatusCode::FAILURE;
70
}
71
// open conneciton to calibration db
72
m_connection
= std::make_unique<CalibDbConnection>(
m_calib_connection_string
,
m_calib_working_schema
);
73
m_connection
->SetLogin(
m_username
,
m_password
);
74
if
(!
m_connection
->OpenConnection()) {
75
ATH_MSG_FATAL
(
"Cannot open connection to calibration database!"
);
76
return
StatusCode::FAILURE;
77
}
78
m_head_ops
= std::make_unique<CalibHeadOperations>(*
m_connection
);
79
int
lowrun, uprun, lowtime, uptime;
80
if
(!
m_head_ops
->GetHeadInfo(
m_head_id
, lowrun, uprun, lowtime, uptime)) {
81
ATH_MSG_FATAL
(
"Cannot get header "
<<
m_head_id
<<
"from calib datbase"
);
82
return
StatusCode::FAILURE;
83
}
84
m_iov_start
= lowrun;
85
m_iov_end
= uprun;
86
m_iov_end
++;
87
m_data_connection
.reset(
m_head_ops
->GetDataConnection(
m_head_id
,
false
));
88
if
(!
m_data_connection
) {
89
ATH_MSG_FATAL
(
"Cannot open data connection!"
);
90
return
StatusCode::FAILURE;
91
}
92
if
(!
m_data_connection
->OpenConnection()) {
93
ATH_MSG_FATAL
(
"Cannot open data connection!"
);
94
return
StatusCode::FAILURE;
95
}
96
m_creation_flags
= 0;
97
if
(
m_time_slewing_applied
)
m_creation_flags
|=
MuonCalib::TIME_SLEWING_CORRECTION_APPLIED
;
98
if
(
m_b_field_correction_applied
)
m_creation_flags
|=
MuonCalib::B_FIELD_CORRECTIONS_APPLIED
;
99
return
StatusCode::SUCCESS;
100
}
101
102
bool
MuonCalibDbCalibrationSource::StoreT0Chamber
(
const
int
& chamber,
const
std::map<TubeId, coral::AttributeList>& rows) {
103
MuonFixedId
id(chamber);
104
if
(!
m_region
->Result(
id
)) {
return
true
; }
105
NtupleStationId
sid(
id
);
106
sid.
SetMultilayer
(0);
107
std::string data_string;
108
std::ostringstream f;
109
f << chamber <<
m_site_name
<<
m_head_id
;
110
if
(!
m_inserter
->StartT0Chamber(sid)) {
111
ATH_MSG_WARNING
(
"Cannot insert chamber "
<< chamber);
112
return
true
;
113
}
114
for
(
const
auto
& row : rows) {
115
if
(!
m_inserter
->AppendT0(row.second[
"P4"
].data<
float
>() +
m_t0_offset
, row.second[
"VALIDFLAG"
].data<
short
>(),
116
row.second[
"ADC_1"
].data<
float
>())) {
117
ATH_MSG_WARNING
(
"Wrong number of tubes in database for "
<< sid.
regionId
() <<
"!"
);
118
break
;
119
}
120
}
121
m_inserter
->StoreT0Chamber(sid, f.str(),
m_creation_flags
);
122
return
true
;
123
}
124
125
bool
MuonCalibDbCalibrationSource::StoreRtChamber
(
const
int
& chamber,
const
std::map<int, SamplePoint>& points) {
126
MuonFixedId
id(chamber);
127
if
(!
m_region
->Result(
id
)) {
return
true
; }
128
NtupleStationId
sid(
id
);
129
sid.
SetMultilayer
(0);
130
std::ostringstream f;
131
f << chamber <<
m_site_name
<<
m_head_id
;
132
if
(
m_drift_time_offsets
.size()) {
133
float
slice_width = 14.6 /
static_cast<
float
>
(
m_drift_time_offsets
.size());
134
std::map<int, SamplePoint> points_cp(points);
135
for
(
auto
& it : points_cp) {
136
int
slice_number =
static_cast<
int
>
(std::floor(it.second.x2() / slice_width));
137
if
(slice_number < 0) slice_number = 0;
138
if
(slice_number >=
static_cast<
int
>
(
m_drift_time_offsets
.size()))
139
slice_number =
static_cast<
int
>
(
m_drift_time_offsets
.size()) - 1;
140
it.second.set_x1(it.second.x1() +
m_drift_time_offsets
[slice_number]);
141
}
142
m_inserter
->StoreRtChamber(sid, points_cp, f.str(),
m_creation_flags
);
143
}
else
{
144
m_inserter
->StoreRtChamber(sid, points, f.str(),
m_creation_flags
);
145
}
146
return
true
;
147
}
148
149
bool
MuonCalibDbCalibrationSource::insert_calibration
(
bool
store_t0,
bool
store_rt) {
150
try
{
151
if
(store_t0 &&
m_store_t0
) {
152
CalibT0DbOperations
t0_op(*
m_data_connection
);
153
if
(!t0_op.
ReadForConditions
(
m_site_name
,
m_head_id
, *
this
)) {
154
ATH_MSG_WARNING
(
"T0 insert failed!"
);
155
return
false
;
156
}
157
}
158
if
(store_rt &&
m_store_rt
) {
159
CalibRtDbOperations
rt_op(*
m_data_connection
);
160
if
(!rt_op.
ReadForConditions
(
m_site_name
,
m_head_id
, *
this
)) {
161
ATH_MSG_WARNING
(
"RT insert failed!"
);
162
return
false
;
163
}
164
}
165
}
// try
166
catch
(
const
std::exception& e) {
167
ATH_MSG_FATAL
(
"Exception: "
<< e.what());
168
return
false
;
169
}
170
return
true
;
171
}
172
173
}
// namespace MuonCalib
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
CalibDbConnection.h
CalibHeadOperations.h
CalibRtDbOperations.h
CalibT0DbOperations.h
CoolInserter.h
MdtCalibCreationFlags.h
MuonCalibDbCalibrationSource.h
MuonFixedId.h
NtupleStationId.h
RegionSelectorBase.h
SamplePoint.h
AthAlgTool::AthAlgTool
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Definition
AthAlgTool.cxx:16
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
MuonCalib::CalibRtDbOperations
Definition
CalibRtDbOperations.h:25
MuonCalib::CalibRtDbOperations::ReadForConditions
bool ReadForConditions(const std::string &, int head_id, IConditionsStorage &storage)
Definition
CalibRtDbOperations.cxx:157
MuonCalib::CalibT0DbOperations
Definition
CalibT0DbOperations.h:29
MuonCalib::CalibT0DbOperations::ReadForConditions
bool ReadForConditions(const std::string &site_name, int head_id, IConditionsStorage &storage)
Definition
CalibT0DbOperations.cxx:301
MuonCalib::IConditionsStorage::IConditionsStorage
IConditionsStorage()
Definition
IConditionsStorage.h:31
MuonCalib::IMuonCalibConditionsSource
Definition
IMuonCalibConditionsSource.h:17
MuonCalib::IMuonCalibConditionsSource::m_inserter
CoolInserter * m_inserter
Definition
IMuonCalibConditionsSource.h:31
MuonCalib::MuonCalibDbCalibrationSource::~MuonCalibDbCalibrationSource
virtual ~MuonCalibDbCalibrationSource()
MuonCalib::MuonCalibDbCalibrationSource::m_head_ops
std::unique_ptr< CalibHeadOperations > m_head_ops
Definition
MuonCalibDbCalibrationSource.h:72
MuonCalib::MuonCalibDbCalibrationSource::StoreRtChamber
bool StoreRtChamber(const int &chamber, const std::map< int, SamplePoint > &points)
Definition
MuonCalibDbCalibrationSource.cxx:125
MuonCalib::MuonCalibDbCalibrationSource::m_store_rt
bool m_store_rt
Definition
MuonCalibDbCalibrationSource.h:61
MuonCalib::MuonCalibDbCalibrationSource::m_region_str
std::string m_region_str
Definition
MuonCalibDbCalibrationSource.h:57
MuonCalib::MuonCalibDbCalibrationSource::m_head_id
int m_head_id
Definition
MuonCalibDbCalibrationSource.h:49
MuonCalib::MuonCalibDbCalibrationSource::StoreT0Chamber
bool StoreT0Chamber(const int &chamber, const std::map< TubeId, coral::AttributeList > &rows)
call back for t0
Definition
MuonCalibDbCalibrationSource.cxx:102
MuonCalib::MuonCalibDbCalibrationSource::m_connection
std::unique_ptr< CalibDbConnection > m_connection
Definition
MuonCalibDbCalibrationSource.h:70
MuonCalib::MuonCalibDbCalibrationSource::m_b_field_correction_applied
bool m_b_field_correction_applied
Definition
MuonCalibDbCalibrationSource.h:65
MuonCalib::MuonCalibDbCalibrationSource::m_region
std::unique_ptr< RegionSelectorBase > m_region
Definition
MuonCalibDbCalibrationSource.h:73
MuonCalib::MuonCalibDbCalibrationSource::m_time_slewing_applied
bool m_time_slewing_applied
Definition
MuonCalibDbCalibrationSource.h:65
MuonCalib::MuonCalibDbCalibrationSource::m_calib_working_schema
std::string m_calib_working_schema
Definition
MuonCalibDbCalibrationSource.h:53
MuonCalib::MuonCalibDbCalibrationSource::m_iov_end
int m_iov_end
Definition
MuonCalibDbCalibrationSource.h:51
MuonCalib::MuonCalibDbCalibrationSource::m_iov_start
int m_iov_start
Definition
MuonCalibDbCalibrationSource.h:51
MuonCalib::MuonCalibDbCalibrationSource::m_site_name
std::string m_site_name
Definition
MuonCalibDbCalibrationSource.h:48
MuonCalib::MuonCalibDbCalibrationSource::m_data_connection
std::unique_ptr< CalibDbConnection > m_data_connection
Definition
MuonCalibDbCalibrationSource.h:71
MuonCalib::MuonCalibDbCalibrationSource::m_drift_time_offsets
std::vector< float > m_drift_time_offsets
Definition
MuonCalibDbCalibrationSource.h:59
MuonCalib::MuonCalibDbCalibrationSource::m_calib_connection_string
std::string m_calib_connection_string
Definition
MuonCalibDbCalibrationSource.h:53
MuonCalib::MuonCalibDbCalibrationSource::m_username
std::string m_username
Definition
MuonCalibDbCalibrationSource.h:55
MuonCalib::MuonCalibDbCalibrationSource::insert_calibration
bool insert_calibration(bool store_t0, bool store_rt)
insert calibration
Definition
MuonCalibDbCalibrationSource.cxx:149
MuonCalib::MuonCalibDbCalibrationSource::m_store_t0
bool m_store_t0
Definition
MuonCalibDbCalibrationSource.h:61
MuonCalib::MuonCalibDbCalibrationSource::m_creation_flags
unsigned int m_creation_flags
Definition
MuonCalibDbCalibrationSource.h:66
MuonCalib::MuonCalibDbCalibrationSource::m_t0_offset
float m_t0_offset
Definition
MuonCalibDbCalibrationSource.h:63
MuonCalib::MuonCalibDbCalibrationSource::m_mdt_tube_cols
std::vector< std::string > m_mdt_tube_cols
Definition
MuonCalibDbCalibrationSource.h:69
MuonCalib::MuonCalibDbCalibrationSource::MuonCalibDbCalibrationSource
MuonCalibDbCalibrationSource(const std::string &t, const std::string &n, const IInterface *p)
constructor
Definition
MuonCalibDbCalibrationSource.cxx:36
MuonCalib::MuonCalibDbCalibrationSource::initialize
StatusCode initialize()
initialize
Definition
MuonCalibDbCalibrationSource.cxx:64
MuonCalib::MuonCalibDbCalibrationSource::m_password
std::string m_password
Definition
MuonCalibDbCalibrationSource.h:55
MuonCalib::MuonFixedId
Implements fixed identifiers not dependent upon Athena Identifier for internal use in the calibration...
Definition
MuonFixedId.h:50
MuonCalib::NtupleStationId
Station Identifier for sorting calibration data.
Definition
NtupleStationId.h:36
MuonCalib::NtupleStationId::SetMultilayer
void SetMultilayer(const int &ml)
Definition
NtupleStationId.h:110
MuonCalib::NtupleStationId::regionId
std::string regionId() const
return the region id string
Definition
NtupleStationId.cxx:69
MuonCalib::RegionSelectorBase::GetRegion
static std::unique_ptr< RegionSelectorBase > GetRegion(const std::string &input)
create a region from a string
Definition
RegionSelectorBase.cxx:13
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition
CscCalcPed.cxx:21
MuonCalib::TIME_SLEWING_CORRECTION_APPLIED
@ TIME_SLEWING_CORRECTION_APPLIED
Definition
MdtCalibCreationFlags.h:10
MuonCalib::B_FIELD_CORRECTIONS_APPLIED
@ B_FIELD_CORRECTIONS_APPLIED
Definition
MdtCalibCreationFlags.h:10
Generated on
for ATLAS Offline Software by
1.17.0