M_PI is a POSIX <math.h> extension that MSVC does not define without _USE_MATH_DEFINES. std::numbers::pi (introduced in the viewer guard commit) is C++20, but CUDA here is compiled as C++17 (CMAKE_CUDA_STANDARD 17) and several common/ headers are pulled into .cu device translation units, so std::numbers is not available there. Add common/JFJochMath.h with a dependency-free `constexpr double PI` that works in host code (including MSVC), in CUDA device code, and under C++17/20, and use it everywhere: - common/ and image_analysis/ (incl. CUDA .cu): 78 M_PI occurrences, 22 files - broker/OpenAPIConvert.cpp - viewer/: the 5 files that used std::numbers::pi now use PI, for one consistent convention across the codebase Verified to build: JFJochImageAnalysis (incl. CUDA), jfjoch_viewer, JFJochBroker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
1.7 KiB
C++
49 lines
1.7 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#pragma once
|
|
|
|
#include "JFJochMath.h"
|
|
#include <optional>
|
|
#include <cstdint>
|
|
|
|
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 * PI / 3.0;
|
|
float bkg_estimate_low_q_recipA = 2.0f * 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;
|
|
};
|
|
|