// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_AZIMUTHALINTEGRATIONSETTINGS_H #define JFJOCH_AZIMUTHALINTEGRATIONSETTINGS_H #include #include class AzimuthalIntegrationSettings { bool solid_angle_correction = true; bool polarization_correction = true; float high_q_recipA = 5.0; float low_q_recipA = 0.1; float bkg_estimate_high_q_recipA = 2.0f * M_PI / 3.0; float bkg_estimate_low_q_recipA = 2.0f * M_PI / 5.0; float q_spacing = 0.05; int32_t azim_bins = 1; int32_t q_bins= 0; int32_t total_bins = 0; void UpdateBinCount(); public: AzimuthalIntegrationSettings(); AzimuthalIntegrationSettings& SolidAngleCorrection(bool input); AzimuthalIntegrationSettings& PolarizationCorrection(bool input); AzimuthalIntegrationSettings& QRange_recipA(float low, float high); AzimuthalIntegrationSettings& QSpacing_recipA(float input); AzimuthalIntegrationSettings& BkgEstimateQRange_recipA(float low, float high); AzimuthalIntegrationSettings& AzimuthalBinCount(int32_t input); [[nodiscard]] bool IsSolidAngleCorrection() const; [[nodiscard]] bool IsPolarizationCorrection() const; [[nodiscard]] float GetHighQ_recipA() const; [[nodiscard]] float GetLowQ_recipA() const; [[nodiscard]] float GetQSpacing_recipA() const; [[nodiscard]] int32_t GetBinCount() const; [[nodiscard]] int32_t GetQBinCount() const; [[nodiscard]] int32_t GetAzimuthalBinCount() const; [[nodiscard]] float GetBkgEstimateLowQ_recipA() const; [[nodiscard]] float GetBkgEstimateHighQ_recipA() const; [[nodiscard]] uint16_t QToBin(float q) const; [[nodiscard]] uint16_t GetBin(float q, float phi_deg) const; }; #endif //JFJOCH_AZIMUTHALINTEGRATIONSETTINGS_H