ATLAS Offline Software
CalibrationDbIOTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // this
7 
11 // gaudi
12 #include "GaudiKernel/MsgStream.h"
13 
14 // MdtCalibUtils
17 
18 // MdtCalibData
26 #include "MdtCalibData/RtSpline.h"
27 
28 // MdtCalibRt
30 
31 // MuonCalibStandAloneBase
34 
35 // MuonCalibMath
37 
38 // c - c++
39 #include <dirent.h>
40 #include <sys/types.h>
41 
43 #include "fstream"
44 #include "iostream"
45 #include "string"
46 
47 namespace MuonCalib {
49  CalibrationDbIOTool::CalibrationDbIOTool(const std::string &t, const std::string &n, const IInterface *p) :
50  AthAlgTool(t, n, p), m_db_ConnectionString(""), m_db_WorkingSchema(""), m_sitename("") {
51  declareInterface<ICalibrationIOTool>(this);
52  declareProperty("ConnectionString", m_db_ConnectionString);
53  declareProperty("WriterConnectionString", m_writer_connection_string);
54  declareProperty("WorkingSchema", m_db_WorkingSchema);
55  m_headid = -1;
56  declareProperty("HeadId", m_headid);
57  declareProperty("SiteName", m_sitename);
58  m_max_rt_points = 100;
59  declareProperty("MaxRtPoints", m_max_rt_points);
60  m_use_validated_t0 = true;
61  declareProperty("UseValidaedT0", m_use_validated_t0);
62  m_use_validated_t0 = false;
63  declareProperty("UseValidaedRt", m_use_validated_rt);
64  declareProperty("ReaderAccount", m_reader_account);
65  declareProperty("ReaderPassword", m_reader_password);
66  declareProperty("WriterAccount", m_writer_account);
67  declareProperty("WriterPassword", m_writer_password);
68  }
69 
71  ATH_CHECK(serviceLocator()->service("RegionSelectionSvc", p_reg_sel_svc));
73  ATH_MSG_INFO(" CalibrationDbIOTool::initialize() - number of selected regions: " << m_region_ids.size());
74 
75  ATH_MSG_INFO("open connection");
76  m_connection = std::make_unique<CalibDbConnection>(m_db_ConnectionString, m_db_WorkingSchema);
77  ATH_MSG_INFO(".");
79  if (!m_connection->OpenConnection()) {
80  ATH_MSG_FATAL("Cannot open connection to database!");
81  return StatusCode::FAILURE;
82  }
83  ATH_MSG_INFO("..");
84  m_head_ops = std::make_unique<CalibHeadOperations>(*m_connection);
85  if (m_headid < 0) {
86  m_headid = m_head_ops->GetLatestHeadId();
87  if (m_headid < 0) {
88  ATH_MSG_FATAL("Cannot get latest head_id for site " << m_sitename);
89  return StatusCode::FAILURE;
90  }
91  }
92  return StatusCode::SUCCESS;
93  }
94 
95  StatusCode CalibrationDbIOTool::WriteT0(const MdtTubeFitContainer *t0, const NtupleStationId &it, int /*iov_start*/, int /*iov_end*/) {
96  ATH_MSG_INFO("Writing to database");
97  if (!m_connection->OpenConnection()) {
98  ATH_MSG_FATAL("Open Connection failed!");
99  return StatusCode::FAILURE;
100  } else {
101  if (!get_connection(1)) { return StatusCode::FAILURE; }
102  m_data_connections[1]->OpenConnection();
104  std::vector<int> val(0);
105  if (!t0_op.WriteT0Chamber(it, t0, val, m_headid, m_sitename)) {
106  ATH_MSG_FATAL("Writing t0 failed!");
107  return StatusCode::FAILURE;
108  }
109  }
110  return StatusCode::SUCCESS;
111  }
112 
113  StatusCode CalibrationDbIOTool::LoadT0(std::map<NtupleStationId, MdtStationT0Container *> &t0s, int /*iov_id*/) {
114  if (!m_connection->OpenConnection()) {
115  ATH_MSG_FATAL("Open Connection failed!");
116  return StatusCode::FAILURE;
117  } else {
118  if (!get_connection(0)) { return StatusCode::FAILURE; }
119  m_data_connections[0]->OpenConnection();
121  t0s.clear();
122 
123  // loop on all the ids in the selected calibration region
125  ATH_MSG_INFO("Reading t0s for region " << it->regionId());
128  if (t0 != nullptr) t0s[*it] = t0;
129  }
130  }
131  return StatusCode::SUCCESS;
132  }
133 
134  StatusCode CalibrationDbIOTool::WriteRt(const RtCalibrationOutput *rt_relation, std::shared_ptr<const IRtResolution> resolution,
135  const NtupleStationId &station_id, int /*iov_start*/, int /*iov_end*/, bool /*real_rt*/,
136  bool /*real resolution*/) {
137  std::vector<SamplePoint> points;
138  // fill rt poits
139  fillRtPoints(rt_relation->rt(), points);
140  // fill resolution points
141  fillResPoints(resolution, points);
142  // fill multilayer rt difference as pseudo-point
143  if (rt_relation->rt()->HasTmaxDiff()) {
144  SamplePoint point(rt_relation->rt()->GetTmaxDiff(), -99.9, 0.0);
145  points.push_back(point);
146  }
147  if (!m_connection->OpenConnection()) {
148  ATH_MSG_FATAL("Open Connection failed!");
149  return StatusCode::FAILURE;
150  } else {
151  if (!get_connection(1)) { return StatusCode::FAILURE; }
152  m_data_connections[1]->OpenConnection();
154  if (!rt_op.WriteUpdateRt(station_id, m_headid, m_sitename, points, 0, rt_relation->fullInfo().get())) {
155  ATH_MSG_FATAL("Writing rt failed!");
156  return StatusCode::FAILURE;
157  }
158  }
159  return StatusCode::SUCCESS;
160  }
161 
162  StatusCode CalibrationDbIOTool::LoadRt(std::map<NtupleStationId, IRtRelation *> &rts, std::map<NtupleStationId, IRtResolution *> &res,
163  int /*iov_id*/) {
164  if (!m_connection->OpenConnection()) {
165  ATH_MSG_FATAL("Open Connection failed!");
166  return StatusCode::FAILURE;
167  } else {
168  if (!get_connection(0)) { return StatusCode::FAILURE; }
169  m_data_connections[0]->OpenConnection();
171  // loop on all the ids in the selected calibration region
172  RtFromPoints rt_from_points;
173  RtResolutionFromPoints res_from_points;
175  std::vector<SamplePoint> in_points;
176  RtFullInfo full_info;
177  if (!rt_op.LoadRt(*it, m_headid, m_use_validated_rt, m_sitename, in_points, &full_info)) continue;
178  ATH_MSG_INFO("Reading rts for region " << it->regionId());
179  std::vector<SamplePoint> outpoints;
180  float tmax_diff(-9e9);
181  for (auto & in_point : in_points) {
182  if (in_point.x2() < -99) {
183  tmax_diff = in_point.x1();
184  continue;
185  }
186  SamplePoint outpoint(in_point.x1(), in_point.x2(), 1.0);
187  outpoints.push_back(outpoint);
188  }
189  rts[*it] = new RtRelationLookUp(rt_from_points.getRtRelationLookUp(outpoints));
190  if (tmax_diff > -8e8) { rts[*it]->SetTmaxDiff(tmax_diff); }
191  outpoints.clear();
192  for (auto & in_point : in_points) {
193  if (in_point.x2() < -99) { continue; }
194  SamplePoint outpoint(in_point.x1(), in_point.error(), 1.0);
195  outpoints.push_back(outpoint);
196  }
197  res[*it] = new RtResolutionLookUp(res_from_points.getRtResolutionLookUp(outpoints));
198  }
199  }
200  return StatusCode::SUCCESS;
201  }
202 
203  void CalibrationDbIOTool::fillRtPoints(const std::shared_ptr<const IRtRelation>& rt, std::vector<SamplePoint> &points) {
204  points.clear();
205  // for rt relations based on support points, write points
206  std::shared_ptr<const RtRelationLookUp> rt_lookup = std::dynamic_pointer_cast<const RtRelationLookUp>(rt);
207  const CalibFunc::ParVec &rt_param = rt->parameters();
208  if (rt_lookup && static_cast<int>(rt_lookup->nPar() - 2) <= m_max_rt_points) {
209  double t_min(rt_param[0]);
210  double bin_size = rt_param[1];
211  unsigned int nb_points(rt_lookup->nPar() - 2);
212  for (unsigned int k = 0; k < nb_points; k++) {
213  double radius(rt_param[k + 2]);
214  if (std::isnan(radius)) {
215  ATH_MSG_WARNING("Skipping NAN");
216  continue;
217  }
218  SamplePoint point(t_min + bin_size * k, rt_param[k + 2], -1);
219  points.push_back(point);
220  }
221  return;
222  }
223  std::shared_ptr<const RtSpline> rt_spline = std::dynamic_pointer_cast<const RtSpline>(rt);
224  if (rt_spline && static_cast<int>(rt_param.size() / 2) <= m_max_rt_points) {
225  for (unsigned int i = 0; i < rt_param.size(); i += 2) {
226  SamplePoint point(rt_param[i], rt_param[i + 1], -1);
227  points.push_back(point);
228  }
229  return;
230  }
231  // for all others, or if the number of support points is too high, calculate new support points
232  for (int i = 0; i < m_max_rt_points; i++) {
233  double t = rt->tLower() + i * ((rt->tUpper() - rt->tLower()) / (m_max_rt_points - 1));
234  SamplePoint point(t, rt->radius(t), -1.0);
235  }
236  }
237 
238  void CalibrationDbIOTool::fillResPoints(const std::shared_ptr<const IRtResolution>& rt_resolution, std::vector<SamplePoint> &points) {
239  for (auto & point : points) { point.set_error(rt_resolution->resolution(point.x1())); }
240  }
241 
243  if (m_data_connections[write]) { return m_data_connections[write].get(); }
244  m_data_connections[write] = std::unique_ptr<CalibDbConnection>{m_head_ops->GetDataConnection(
246  return m_data_connections[write].get();
247  }
248 
249 } // namespace MuonCalib
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MuonCalib::RtCalibrationOutput
Definition: RtCalibrationOutput.h:21
RtCalibrationOutput.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
MuonCalib::CalibrationDbIOTool::m_data_connections
std::array< std::unique_ptr< CalibDbConnection >, 2 > m_data_connections
Definition: CalibrationDbIOTool.h:70
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
MuonCalib::CalibrationDbIOTool::m_reader_account
std::string m_reader_account
account data
Definition: CalibrationDbIOTool.h:59
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
MuonCalib::NtupleStationId
Definition: NtupleStationId.h:36
MuonCalib::CalibrationDbIOTool::m_db_ConnectionString
std::string m_db_ConnectionString
Definition: CalibrationDbIOTool.h:55
MuonCalib::MdtStationT0Container
Definition: MdtStationT0Container.h:24
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
MuonCalib::CalibrationDbIOTool::initialize
StatusCode initialize() override
initialisation
Definition: CalibrationDbIOTool.cxx:70
skel.it
it
Definition: skel.GENtoEVGEN.py:423
MdtStationT0Container.h
RtRelationLookUp.h
MuonCalib::CalibrationDbIOTool::fillResPoints
void fillResPoints(const std::shared_ptr< const IRtResolution > &rt_resolution, std::vector< SamplePoint > &points)
Definition: CalibrationDbIOTool.cxx:238
MuonCalib::CalibrationDbIOTool::m_head_ops
std::unique_ptr< CalibHeadOperations > m_head_ops
Definition: CalibrationDbIOTool.h:71
MdtTubeFitContainer.h
RtSpline.h
CalibT0DbOperations.h
CalibrationDbIOTool.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
MuonCalib::CalibrationDbIOTool::m_region_ids
std::vector< MuonCalib::NtupleStationId > m_region_ids
Definition: CalibrationDbIOTool.h:67
MuonCalib::RtRelationLookUp
Equidistant look up table for rt-relations with the time as key.
Definition: RtRelationLookUp.h:24
MuonCalib::CalibrationDbIOTool::LoadT0
StatusCode LoadT0(std::map< NtupleStationId, MdtStationT0Container * > &t0s, int) override
load t0s
Definition: CalibrationDbIOTool.cxx:113
Dedxcorrection::resolution
double resolution[nGasTypes][nParametersResolution]
Definition: TRT_ToT_Corrections.h:46
NtupleStationId.h
MuonCalib::CalibrationDbIOTool::m_reader_password
std::string m_reader_password
Definition: CalibrationDbIOTool.h:59
MuonCalib::CalibrationDbIOTool::m_db_WorkingSchema
std::string m_db_WorkingSchema
Definition: CalibrationDbIOTool.h:57
MuonCalib::CalibrationDbIOTool::m_sitename
std::string m_sitename
Definition: CalibrationDbIOTool.h:64
MuonCalib::CalibrationDbIOTool::m_writer_account
std::string m_writer_account
Definition: CalibrationDbIOTool.h:60
MuonCalib::RtFromPoints::getRtRelationLookUp
static RtRelationLookUp getRtRelationLookUp(const std::vector< SamplePoint > &sample_points)
Definition: RtFromPoints.cxx:78
MuonCalib::CalibFunc::ParVec
std::vector< double > ParVec
Definition: CalibFunc.h:36
MuonCalib::CalibrationDbIOTool::fillRtPoints
void fillRtPoints(const std::shared_ptr< const IRtRelation > &rt_relation, std::vector< SamplePoint > &points)
convert rt and resolution to points
Definition: CalibrationDbIOTool.cxx:203
MuonCalib::CalibRtDbOperations::LoadRt
bool LoadRt(const NtupleStationId &id, int head_id, bool validated, const std::string &, std::vector< SamplePoint > &points, RtFullInfo *full_info)
Definition: CalibRtDbOperations.cxx:42
RegionSelectionSvc::GetStationsInRegions
const std::vector< MuonCalib ::NtupleStationId > & GetStationsInRegions() const
get stations/multilayers in region
Definition: RegionSelectionSvc.cxx:66
MuonCalib::CalibT0DbOperations
Definition: CalibT0DbOperations.h:29
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
RtFromPoints.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonCalib::CalibrationDbIOTool::WriteT0
StatusCode WriteT0(const MdtTubeFitContainer *t0_output, const NtupleStationId &station_id, int iov_start, int iov_end) override
write out t0
Definition: CalibrationDbIOTool.cxx:95
MuonCalib::CalibrationDbIOTool::m_use_validated_t0
bool m_use_validated_t0
if true use validated - jo
Definition: CalibrationDbIOTool.h:53
python.ByteStreamConfig.write
def write
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:248
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
MuonCalib::CalibRtDbOperations::WriteUpdateRt
bool WriteUpdateRt(const NtupleStationId &id, int head_id, const std::string &, const std::vector< SamplePoint > &points, int validflag, const RtFullInfo *full_info)
Definition: CalibRtDbOperations.cxx:72
MuonCalib::CalibrationDbIOTool::m_headid
int m_headid
Definition: CalibrationDbIOTool.h:63
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
RtResolutionLookUp.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonCalib::CalibRtDbOperations
Definition: CalibRtDbOperations.h:25
IRtResolution.h
TubeDataFromFile.h
MuonCalib::RtFullInfo
addiitonal information used in validation of a rt-relation
Definition: RtFullInfo.h:15
MuonCalib::RtFromPoints
Definition: RtFromPoints.h:30
MuonCalib::CalibrationDbIOTool::~CalibrationDbIOTool
virtual ~CalibrationDbIOTool()
MuonCalib::RtResolutionFromPoints::getRtResolutionLookUp
static RtResolutionLookUp getRtResolutionLookUp(const std::vector< SamplePoint > &sample_points)
Definition: RtResolutionFromPoints.cxx:80
RtResolutionFromPoints.h
MuonCalib::SamplePoint
Definition: SamplePoint.h:17
MuonCalib::RtCalibrationOutput::rt
std::shared_ptr< const IRtRelation > rt() const
access to private attributes
Definition: RtCalibrationOutput.h:27
MuonCalib::CalibrationDbIOTool::m_writer_password
std::string m_writer_password
Definition: CalibrationDbIOTool.h:60
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
MuonCalib::CalibrationDbIOTool::m_max_rt_points
int m_max_rt_points
Definition: CalibrationDbIOTool.h:62
MuonCalib::CalibrationDbIOTool::CalibrationDbIOTool
CalibrationDbIOTool(const std::string &t, const std::string &n, const IInterface *p)
constructor
Definition: CalibrationDbIOTool.cxx:49
MuonCalib::RtResolutionFromPoints
Definition: RtResolutionFromPoints.h:30
RtChebyshev.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
MuonCalib::MdtTubeFitContainer
Holds single-tube full calibration information of one chamber.
Definition: MdtTubeFitContainer.h:16
CalibRtDbOperations.h
MuonCalib::CalibrationDbIOTool::p_reg_sel_svc
RegionSelectionSvc * p_reg_sel_svc
pointer to region selection service
Definition: CalibrationDbIOTool.h:66
calibdata.rts
rts
Definition: calibdata.py:414
MuonCalib::CalibT0DbOperations::WriteT0Chamber
bool WriteT0Chamber(const NtupleStationId &id, const MdtTubeFitContainer *t0, std::vector< int > &validation_flag, int head_id, const std::string &site_name)
Definition: CalibT0DbOperations.cxx:189
MuonCalib::CalibrationDbIOTool::m_connection
std::unique_ptr< CalibDbConnection > m_connection
pointer to db connection
Definition: CalibrationDbIOTool.h:69
MuonCalib::RtCalibrationOutput::fullInfo
std::shared_ptr< const RtFullInfo > fullInfo() const
Definition: RtCalibrationOutput.h:28
SamplePoint.h
MuonCalib::CalibrationDbIOTool::m_writer_connection_string
std::string m_writer_connection_string
Definition: CalibrationDbIOTool.h:56
AthAlgTool
Definition: AthAlgTool.h:26
MuonCalib::CalibDbConnection
Definition: CalibDbConnection.h:22
MuonCalib::CalibrationDbIOTool::LoadRt
StatusCode LoadRt(std::map< NtupleStationId, IRtRelation * > &rts, std::map< NtupleStationId, IRtResolution * > &res, int) override
load rts
Definition: CalibrationDbIOTool.cxx:162
MuonCalib::CalibrationDbIOTool::m_use_validated_rt
bool m_use_validated_rt
Definition: CalibrationDbIOTool.h:53
MuonCalib::CalibrationDbIOTool::WriteRt
StatusCode WriteRt(const RtCalibrationOutput *rt_relation, std::shared_ptr< const IRtResolution > resolution, const NtupleStationId &station_id, int iov_start, int iov_end, bool, bool) override
write rt
Definition: CalibrationDbIOTool.cxx:134
fitman.k
k
Definition: fitman.py:528
MuonCalib::RtResolutionLookUp
Equidistant look up table for resolution tables with the time as key.
Definition: RtResolutionLookUp.h:23
CalibHeadOperations.h
MuonCalib::CalibrationDbIOTool::get_connection
CalibDbConnection * get_connection(int write)
Definition: CalibrationDbIOTool.cxx:242
MuonCalib::CalibT0DbOperations::LoadT0Calibration
MdtStationT0Container * LoadT0Calibration(const NtupleStationId &id, int head_id, std::string &site_name)
Definition: CalibT0DbOperations.cxx:39
RtDataFromFile.h
RegionSelectionSvc.h