// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include "ROIElement.h" class ROIAzimuthal : public ROIElement { float d_min_A, d_max_A; // Azimuthal-angle sector, normalized to [0, 360). phi_min_deg == phi_max_deg means // the full ring (all angles); a sector with phi_min_deg > phi_max_deg wraps across 0. float phi_min_deg = 0; float phi_max_deg = 0; public: ROIAzimuthal(const std::string &name, float d_min_A, float d_max_A, float phi_min_deg = 0, float phi_max_deg = 0); ~ROIAzimuthal() override = default; [[nodiscard]] float GetDMin_A() const; [[nodiscard]] float GetDMax_A() const; [[nodiscard]] float GetQMin_recipA() const; [[nodiscard]] float GetQMax_recipA() const; [[nodiscard]] bool HasPhi() const; // a sector is set (phi_min_deg != phi_max_deg) [[nodiscard]] float GetPhiMin_deg() const; [[nodiscard]] float GetPhiMax_deg() const; bool CheckROI(int64_t x, int64_t y, float resolution, float phi_deg) const override; ROIConfig ExportMetadata() const override; };