portability: replace M_PI / std::numbers::pi with a host+device-safe PI
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>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
#include "JFJochMath.h"
|
||||
#include <cmath>
|
||||
#include <thread>
|
||||
#include <future>
|
||||
@@ -145,8 +146,8 @@ void AzimuthalIntegrationMapping::SetupPixel(const DiffractionGeometry &geom,
|
||||
corrections[pxl] = corr;
|
||||
|
||||
if (d > 0) {
|
||||
float q = 2.0f * static_cast<float>(M_PI) / d;
|
||||
pixel_to_bin[pxl] = settings.GetBin(q, phi_rad * 180.0 / M_PI);
|
||||
float q = 2.0f * static_cast<float>(PI) / d;
|
||||
pixel_to_bin[pxl] = settings.GetBin(q, phi_rad * 180.0 / PI);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,9 +188,9 @@ void AzimuthalIntegrationMapping::UpdateMaxBinNumber() {
|
||||
for (int j = 0; j < settings.GetAzimuthalBinCount(); j++) {
|
||||
for (int i = 0; i < settings.GetQBinCount(); i++) {
|
||||
bin_to_q[j * settings.GetQBinCount() + i] = static_cast<float>(settings.GetQSpacing_recipA() * (i + 0.5) + settings.GetLowQ_recipA());
|
||||
bin_to_d[j * settings.GetQBinCount() + i] = 2.0f * static_cast<float>(M_PI) / bin_to_q[j * settings.GetQBinCount() + i];
|
||||
bin_to_2theta[j * settings.GetQBinCount() + i] = 2.0f * asinf(bin_to_q[i] * wavelength / (4.0f * static_cast<float>(M_PI))) * 180.0f /
|
||||
static_cast<float>(M_PI);
|
||||
bin_to_d[j * settings.GetQBinCount() + i] = 2.0f * static_cast<float>(PI) / bin_to_q[j * settings.GetQBinCount() + i];
|
||||
bin_to_2theta[j * settings.GetQBinCount() + i] = 2.0f * asinf(bin_to_q[i] * wavelength / (4.0f * static_cast<float>(PI))) * 180.0f /
|
||||
static_cast<float>(PI);
|
||||
bin_to_phi[j * settings.GetQBinCount() + i] = static_cast<float>(j) * 360.0f / static_cast<float>(settings.GetAzimuthalBinCount());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user