ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_CondParameterData.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include <cmath>
8#include <limits>
9
10// constructor
14
15// Get the indicated value for a module identifier hash
17 return m_values[idHash][iparam];
18}
19
20// Fill a user-provided vector with the values
21void SCT_CondParameterData::getValues(std::vector<float>& userVector, const SCT_CondParameterData::ParameterIndex iparam) const {
22 for (unsigned int i{0}; i!=m_values.size(); ++i) {
23 userVector.push_back(m_values[i][iparam]);
24 }
25}
26
28void SCT_CondParameterData::setValue(const IdentifierHash& idHash, const SCT_CondParameterData::ParameterIndex iparam, const float value) {
29 if (insert(idHash, iparam, value)) {
30 m_n[iparam]++;
31 m_sum[iparam] += value;
32 m_sumsq[iparam] += value*value;
33 m_min[iparam] = std::min(m_min[iparam], value);
34 m_max[iparam] = std::max(m_max[iparam], value);
35 }
36}
37
38// Extended methods for data structure insertion
39bool SCT_CondParameterData::insert(const IdentifierHash& idHash, const SCT_CondParameterData::ParameterIndex iparam, const float theValue) {
40 // theValue must be valid
41 if (not isValid(theValue, iparam)) return false;
42 std::array<float,N_PARAMETERS>& paramArray = m_values[idHash];
43 // initial value should be invalid, only insert if this is the case
44 if (not isValid(paramArray[iparam], iparam)) {
45 paramArray[iparam] = theValue;
46 return true;
47 } else {
48 return false;
49 }
50}
51
52// Is a given value within acceptable limits?
53bool SCT_CondParameterData::isValid(const float parameterValue, const SCT_CondParameterData::ParameterIndex iparam) {
54 // Second condition is to check if it is nan.
55 return !(iparam==AVG_THRESHOLD and (parameterValue!=parameterValue));
56}
57
58// What is the default error value for this parameter?
59float SCT_CondParameterData::invalid(const unsigned int iparam) {
60 float result{0.0};
61 if (iparam==AVG_THRESHOLD) {
62 result=std::numeric_limits<float>::quiet_NaN();
63 }
64 return result;
65}
66
67// Get maximum value
69 return m_max[iparam];
70}
71
72// Get minimum value
74 return m_min[iparam];
75}
76
77// Get average value
79 return (m_n[iparam]!=0)?(m_sum[iparam]/m_n[iparam]):(std::numeric_limits<float>::quiet_NaN());
80}
81
82// Get standard deviation
84 float mu{m_sum[iparam]/m_n[iparam]};
85 return std::sqrt((m_sumsq[iparam]/m_n[iparam]) - mu*mu);
86}
87
88// Get the number of values
90 return m_n[iparam];
91}
92
93// Clear all data members
95 std::array<float, N_PARAMETERS> init{};
96 for (unsigned int i{0}; i!=N_PARAMETERS; ++i) {
97 m_min[i] = std::numeric_limits<float>::max();
98 m_max[i] = std::numeric_limits<float>::min();
99 m_n[i] = 0;
100 m_sum[i] = 0.0;
101 m_sumsq[i] = 0.0;
102 init[i] = invalid(i);
103 }
104
105 //initialize array
106 m_values.fill(init);
107}
header file for data object for SCT_ConditionsParameterTool and SCT_ConditionsParameterCondAlg.
This is a "hash" representation of an Identifier.
unsigned int m_n[N_PARAMETERS]
static float invalid(const unsigned int iparam)
What is the default error value for this parameter?
float m_min[N_PARAMETERS]
float m_sum[N_PARAMETERS]
float min(const SCT_CondParameterData::ParameterIndex iparam) const
Get minimum value.
float sd(const SCT_CondParameterData::ParameterIndex iparam) const
Get standard deviation.
bool insert(const IdentifierHash &idHash, const SCT_CondParameterData::ParameterIndex iparam, const float value)
Extended methods for data structure insertion.
void setValue(const IdentifierHash &idHash, const SCT_CondParameterData::ParameterIndex iparam, const float value)
Get the indicated value for a module identifier hash.
std::array< std::array< float, N_PARAMETERS >, SCT_ConditionsData::NUMBER_OF_WAFERS > m_values
float avg(const SCT_CondParameterData::ParameterIndex iparam) const
Get average value.
unsigned int n(const SCT_CondParameterData::ParameterIndex iparam) const
Get the number of values.
void getValues(std::vector< float > &userVector, const SCT_CondParameterData::ParameterIndex iparam) const
Fill a user-provided vector with the values.
float m_max[N_PARAMETERS]
float m_sumsq[N_PARAMETERS]
float getValue(const IdentifierHash &idHash, const SCT_CondParameterData::ParameterIndex iparam) const
Get the indicated value for a module identifier hash.
float max(const SCT_CondParameterData::ParameterIndex iparam) const
Get maximum value.
static bool isValid(const float parameterValue, const SCT_CondParameterData::ParameterIndex iparam)
Is a given value within acceptable limits?
void clear()
Clear all data members.