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 "../../common/JFJochMath.h"
|
||||
#include "PixelRefine.h"
|
||||
|
||||
#include <algorithm>
|
||||
@@ -499,7 +500,7 @@ void PixelRefine::Run(const T *image,
|
||||
beam, dist_mm, detector_rot, latt_vec0, latt_vec1, latt_vec2,
|
||||
q_sq, eps_r, eps_t_sq))
|
||||
continue;
|
||||
const double P_t = std::exp(-eps_t_sq / (R1 * R1)) / (M_PI * R1 * R1);
|
||||
const double P_t = std::exp(-eps_t_sq / (R1 * R1)) / (PI * R1 * R1);
|
||||
const double R0_eff_sq = R0 * R0 + g.R_bw_sq;
|
||||
const double P_rad = std::exp(-eps_r * eps_r / R0_eff_sq);
|
||||
const double v = std::max(g.Ibkg, 1.0);
|
||||
@@ -597,7 +598,7 @@ void PixelRefine::Run(const T *image,
|
||||
// Tangential profile shape (area-normalized) -> the fit template, using the
|
||||
// per-reflection R1_eff (Term 2).
|
||||
const double R1 = g.R1_eff;
|
||||
const double P_t = std::exp(-eps_t_sq / (R1 * R1)) / (M_PI * R1 * R1);
|
||||
const double P_t = std::exp(-eps_t_sq / (R1 * R1)) / (PI * R1 * R1);
|
||||
prof_full += P_t; // whole shoebox, on- or off-detector
|
||||
|
||||
// Only real, unmasked detector pixels carry signal.
|
||||
|
||||
Reference in New Issue
Block a user