15void copy_values_from_map_to_offset_vector(
const std::map<detid_t, double> &map_values,
const detid_t idmin,
16 const detid_t idmax, std::vector<double> &vector_values) {
18 vector_values.assign(
static_cast<size_t>(idmax - idmin + 1), 1.);
21 auto iter = std::find_if(map_values.cbegin(), map_values.cend(),
22 [idmin](
const auto &itervalue) { return itervalue.first >= idmin; });
23 if (iter == map_values.end())
24 throw std::runtime_error(
"Failed to find idmin=" +
std::to_string(idmin) +
" in map");
26 std::find_if(iter, map_values.cend(), [idmax](
const auto itervalue) { return itervalue.first > idmax; });
29 for (; iter != iter_end; ++iter) {
30 const auto index =
static_cast<size_t>(iter->first - idmin);
31 vector_values[
index] = iter->second;
50 const std::map<detid_t, double> &calibration_map,
51 const std::map<detid_t, double> &scale_at_sample,
const std::set<detid_t> &mask) {
52 if (det_in_group.empty())
56 const detid_t idmin_found = *det_in_group.begin();
57 const detid_t idmax_found = *std::prev(det_in_group.end());
63 copy_values_from_map_to_offset_vector(calibration_map, idmin_found, idmax_found,
m_calibration);
65 if (time_conversion != 1.) {
67 [time_conversion](
const auto &
value) { return std::move(time_conversion * value); });
71 if (!scale_at_sample.empty())
72 copy_values_from_map_to_offset_vector(scale_at_sample, idmin_found, idmax_found,
m_scale_at_sample);
81 if (!det_in_group.contains(detid) || mask.contains(detid)) {
89 return (!(detid < this->
idmin() || detid > this->
idmax()));
117 const std::map<detid_t, double> &scale_at_sample,
118 const std::map<
size_t, std::set<detid_t>> &grouping,
119 const std::set<detid_t> &mask,
120 const std::map<
size_t, std::set<detid_t>> &bank_detids)
121 : m_calibration_map(calibration_map), m_scale_at_sample(scale_at_sample), m_grouping(grouping), m_mask(mask),
122 m_bank_detids(bank_detids) {}
125 const size_t bank_index)
const {
127 std::vector<BankCalibration> calibrations;
139 [
this, time_conversion, bank_detids](
const auto &pair) {
140 std::set<detid_t> detids_intersection;
141 std::set_intersection(pair.second.begin(), pair.second.end(), bank_detids.begin(), bank_detids.end(),
142 std::inserter(detids_intersection, detids_intersection.begin()));
143 return BankCalibration(time_conversion, detids_intersection, m_calibration_map, m_scale_at_sample,
double value
The value of the point.
std::map< DeltaEMode::Type, std::string > index
const std::map< size_t, std::set< detid_t > > & m_grouping
detector ids for output workspace index
const std::map< size_t, std::set< detid_t > > & m_bank_detids
std::vector< BankCalibration > getCalibrations(const double time_conversion, const size_t bank_index) const
Select which detector ids go into the output group.
BankCalibrationFactory(const std::map< detid_t, double > &calibration_map, const std::map< detid_t, double > &scale_at_sample, const std::map< size_t, std::set< detid_t > > &grouping, const std::set< detid_t > &mask, const std::map< size_t, std::set< detid_t > > &bank_detids)
const double & value_calibration(const detid_t detid) const
This assumes that everything is in range.
BankCalibration(const double time_conversion, const std::set< detid_t > &det_in_group, const std::map< detid_t, double > &calibration_map, const std::map< detid_t, double > &scale_at_sample, const std::set< detid_t > &mask)
Calibration of a subset of pixels as requested in the constructor.
const detid_t & idmin() const
bool detidInRange(const detid_t detid) const
std::vector< double > m_scale_at_sample
double value_scale_at_sample(const detid_t detid) const
This returns a value with no bounds checking.
std::vector< double > m_calibration
constexpr double IGNORE_PIXEL
int32_t detid_t
Typedef for a detector ID.
std::string to_string(const wide_integer< Bits, Signed > &n)