ATLAS Offline Software
Loading...
Searching...
No Matches
RIO_OnTrackErrorScalingDbOverrideCondAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
9
11 : ::AthCondAlgorithm(name, pSvcLocator)
12 , m_condSvc{"CondSvc", name}
13{
14}
15
17 ATH_CHECK(m_condSvc.retrieve());
18 if (m_writeKey.key().empty()) {
19 ATH_MSG_FATAL("No conditions data write key specified.");
20 }
21 ATH_CHECK(m_writeKey.initialize());
23 unsigned int n_parameters_total=0;
24 unsigned int n_parameter_sets = m_errorScalingDataKit->nParametres();
25 if (n_parameter_sets>0) {
26 if (!m_nParameterPerSet.empty()) {
27 if (m_nParameterPerSet.size() != n_parameter_sets) {
28 ATH_MSG_FATAL("PrametersPerSet must either be empty or match the number of parameters of the error scaling class " << m_errorScalingTypeName);
29 return StatusCode::FAILURE;
30 }
31
32 for (unsigned int n_parameters : m_nParameterPerSet) {
33 n_parameters_total += n_parameters;
34 }
35
37 }
38 else {
39 unsigned int n_parameters_per_set=m_errorScalingParameters.size()/n_parameter_sets;
40 n_parameters_total = n_parameter_sets * n_parameters_per_set;
42 m_useNParametersPerSet.reserve(n_parameter_sets);
43 for (unsigned int param_set_i=0; param_set_i<n_parameter_sets; ++param_set_i ) {
44 m_useNParametersPerSet.push_back( n_parameters_per_set);
45 }
46 ATH_MSG_VERBOSE("init n_parameters_total=" << n_parameters_total << " =?= " << m_errorScalingParameters.size()
47 << " n_parameters_per_set=" << n_parameters_per_set );
48 }
49 if (n_parameters_total != m_errorScalingParameters.size()) {
50 ATH_MSG_FATAL("Number of parameters in ErorScalingParameters does not match expectation. Estimated " << n_parameters_total
51 << " parameters in total for the " << n_parameter_sets << " parameter sets of " << m_errorScalingTypeName
52 << " but got " << m_errorScalingParameters.size());
53 return StatusCode::FAILURE;
54 }
55 }
56 if(msgLvl(MSG::VERBOSE)) {
57 for(unsigned int param_i=0; param_i<m_errorScalingDataKit->nParametres(); ++param_i) {
58 ATH_MSG_VERBOSE("No error scaling parameters for " << m_writeKey.key() << " " << m_errorScalingDataKit->paramNames()[param_i]
59 << " n-params="
60 << m_useNParametersPerSet[param_i]);
61 }
62 }
63 if (n_parameters_total==0 && !m_errorScalingParameters.empty()) {
64 ATH_MSG_FATAL("ErorScalingParameters expected to be empty for " << m_errorScalingTypeName) ;
65 return StatusCode::FAILURE;
66 }
67
68 return StatusCode::SUCCESS;
69}
70
71namespace {
72 EventIDBase timestamp (int t)
73 {
74 return {EventIDBase::UNDEFNUM, // run
75 EventIDBase::UNDEFEVT, // event
76 static_cast<EventIDBase::number_type>(t)};
77 }
78
79 EventIDBase infiniteIOVEend() {
80 return timestamp(std::numeric_limits<int>::max() - 1);
81 }
82
83 template <typename T>
84 std::ostream &operator<<(std::ostream &out, const std::vector<T> &a) {
85 for (const T &elm : a) {
86 out << " " << elm;
87 }
88 return out;
89 }
90}
91
92
93StatusCode RIO_OnTrackErrorScalingDbOverrideCondAlg::execute(const EventContext& ctx) const {
95 if (!write_handle.isValid()) {
96 EventIDRange range(timestamp(0),infiniteIOVEend());
97 std::unique_ptr<RIO_OnTrackErrorScaling> error_scaling( m_errorScalingDataKit->create() );
98 std::vector<float>::const_iterator param_iter = m_errorScalingParameters.begin();
99 unsigned int set_i=0;
100 for (unsigned int n_params : m_useNParametersPerSet ) {
101 // cppcheck-suppress assertWithSideEffect
102 assert( set_i < error_scaling->params().size() );
103 error_scaling->params()[set_i].clear();
104 error_scaling->params()[set_i].reserve(n_params);
105 for(unsigned int param_i=0; param_i<n_params; ++param_i, ++param_iter) {
106 assert( param_iter != m_errorScalingParameters.end() );
107 error_scaling->params()[set_i].push_back( *param_iter );
108 }
109 ++set_i;
110 }
111
112 // dump error scaling parameters
113 if(msgLvl(MSG::VERBOSE)) {
114 for(unsigned int param_i=0; param_i<m_errorScalingDataKit->nParametres(); ++param_i) {
115 if (param_i>= error_scaling->params().size()) {
116 ATH_MSG_FATAL("No error scaling parameters for " << write_handle.key() << " " << m_errorScalingDataKit->paramNames()[param_i] << ".");
117 return StatusCode::FAILURE;
118 }
119
120 ATH_MSG_VERBOSE("Parameters for " << write_handle.key() << " " << m_errorScalingDataKit->paramNames()[param_i] << error_scaling->params()[param_i] );
121
122 }
123 }
124
125 if (!error_scaling->postProcess()) {
126 ATH_MSG_ERROR("Conditions data for " << write_handle.key() << " not valid.");
127 return StatusCode::FAILURE;
128 }
129 if (write_handle.record(range, std::move(error_scaling)).isFailure()) {
130 ATH_MSG_FATAL("Could not record RIO_OnTrackErrorScaling " << write_handle.key()
131 << " with EventRange " << range
132 << " into Conditions Store");
133 return StatusCode::FAILURE;
134 }
135 }
136 return StatusCode::SUCCESS;
137}
138
139
141 return StatusCode::SUCCESS;
142}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
static Double_t a
std::ostream & operator<<(std::ostream &lhs, const TestGaudiProperty &rhs)
Define macros for attributes used to control the static checker.
bool msgLvl(const MSG::Level lvl) const
Base class for conditions algorithms.
static KitManager< RIO_OnTrackErrorScalingKit > & instance()
Definition KitManager.h:50
const T_KitInterface & kit(const std::string &name) const
Definition KitManager.h:45
SG::WriteCondHandleKey< RIO_OnTrackErrorScaling > m_writeKey
Gaudi::Property< std::vector< unsigned int > > m_nParameterPerSet
RIO_OnTrackErrorScalingDbOverrideCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute(const EventContext &ctx) const override
Gaudi::Property< std::vector< float > > m_errorScalingParameters
const std::string & key() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED