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 "DiffractionGeometry.h"
|
||||
@@ -48,7 +49,7 @@ float DiffractionGeometry::Phi_rad(float x, float y) const {
|
||||
auto lab = LabCoord(x, y);
|
||||
auto v = atan2f(lab.y, lab.x);
|
||||
if (v < 0)
|
||||
v += 2.0f * M_PI;
|
||||
v += 2.0f * PI;
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -58,7 +59,7 @@ float DiffractionGeometry::PxlToRes(float x, float y) const {
|
||||
}
|
||||
|
||||
float DiffractionGeometry::PxlToQ(float x, float y) const {
|
||||
return 2.0f * M_PI / PxlToRes(x,y);
|
||||
return 2.0f * PI / PxlToRes(x,y);
|
||||
}
|
||||
|
||||
float DiffractionGeometry::PxlToRes(float dist_pxl) const {
|
||||
@@ -87,7 +88,7 @@ float DiffractionGeometry::DistFromEwaldSphere(const Coord &recip) const {
|
||||
}
|
||||
|
||||
float DiffractionGeometry::CalcAzIntSolidAngleCorr(float q) const {
|
||||
float sin_theta = q * wavelength_A / (4 * static_cast<float>(M_PI));
|
||||
float sin_theta = q * wavelength_A / (4 * static_cast<float>(PI));
|
||||
float cos_2theta = 1.0f - 2.0f * sin_theta * sin_theta; // cos(2*alpha) = 1 - 2 * sin(alpha)^2
|
||||
float cos_2theta_3 = cos_2theta * cos_2theta * cos_2theta;
|
||||
return cos_2theta_3;
|
||||
|
||||
Reference in New Issue
Block a user