File indexing completed on 2024-04-06 12:02:16
0001 #include <climits>
0002
0003 #include "CondFormats/HcalObjects/interface/PiecewiseScalingPolynomial.h"
0004
0005 PiecewiseScalingPolynomial::PiecewiseScalingPolynomial(const std::vector<std::vector<double> >& coeffs,
0006 const std::vector<double>& limits)
0007 : coeffs_(coeffs), limits_(limits) {
0008 if (!validate())
0009 throw cms::Exception("Invalid PiecewiseScalingPolynomial constructor arguments");
0010 }
0011
0012 bool PiecewiseScalingPolynomial::validate() const {
0013 const std::size_t nLimits(limits_.size());
0014 if (!nLimits)
0015 return false;
0016 if (nLimits >= static_cast<std::size_t>(UINT_MAX))
0017 return false;
0018 if (limits_[0] <= 0.0)
0019 return false;
0020 for (std::size_t i = 0; i < nLimits - 1; ++i)
0021 if (!(limits_[i] < limits_[i + 1]))
0022 return false;
0023 if (coeffs_.size() != nLimits + 1)
0024 return false;
0025 for (std::size_t i = 0; i <= nLimits; ++i) {
0026 if (coeffs_[i].empty())
0027 return false;
0028 if (coeffs_[i].size() >= static_cast<std::size_t>(INT_MAX))
0029 return false;
0030 }
0031 return true;
0032 }