// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "AzimuthalIntegrationCPU.h" namespace { template void AzimuthalIntegrationCPU(const AzimuthalIntegration &azint, AzimuthalIntegrationProfile &ret, const T *data, T special_value_1, T special_value_2) { auto &pixel_to_bin = azint.GetPixelToBin(); auto &corrections = azint.Corrections(); auto nbins = azint.GetBinNumber(); std::vector sum(nbins); std::vector sum2(nbins); std::vector count(nbins); for (int i = 0; i < pixel_to_bin.size(); i++) { auto bin = pixel_to_bin[i]; auto value = data[i] * corrections[i]; if ((data[i] != special_value_1) && (data[i] != special_value_2) && (bin < nbins)) { sum[bin] += value; // sum2[bin] += value * value; count[bin] += 1; } } ret.Add(sum, count); } } void AzimuthalIntegrationCPU(const AzimuthalIntegration &azint, AzimuthalIntegrationProfile& result, const int32_t *data) { return AzimuthalIntegrationCPU(azint, result, data, INT32_MIN, INT32_MAX); } void AzimuthalIntegrationCPU(const AzimuthalIntegration &azint, AzimuthalIntegrationProfile& result, const uint32_t *data) { return AzimuthalIntegrationCPU(azint, result, data, UINT32_MAX, UINT32_MAX); } void AzimuthalIntegrationCPU(const AzimuthalIntegration &azint, AzimuthalIntegrationProfile& result, const uint16_t *data) { return AzimuthalIntegrationCPU(azint,result, data, UINT16_MAX, UINT16_MAX); } void AzimuthalIntegrationCPU(const AzimuthalIntegration &azint, AzimuthalIntegrationProfile& result, const int16_t *data) { return AzimuthalIntegrationCPU(azint,result, data, INT16_MIN, INT16_MAX); }