From f5bd76db055e135b0f7ecd29072a6e816e955fc9 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Fri, 30 Jan 2026 20:49:07 +0100 Subject: [PATCH] BraggPrediction: Set Lorentz-polarization correction properly --- common/Reflection.h | 2 +- docs/CBOR.md | 2 +- frame_serialize/CBORStream2Deserializer.cpp | 2 +- frame_serialize/CBORStream2Serializer.cpp | 2 +- image_analysis/bragg_integration/BraggIntegrate2D.cpp | 8 ++++---- image_analysis/bragg_prediction/BraggPrediction.cpp | 2 +- image_analysis/bragg_prediction/BraggPredictionGPU.cu | 2 +- image_analysis/bragg_prediction/BraggPredictionRot.cpp | 2 +- image_analysis/bragg_prediction/BraggPredictionRotGPU.cu | 2 +- reader/JFJochHDF5Reader.cpp | 5 +++-- tools/jfjoch_extract_hkl.cpp | 2 +- writer/HDF5DataFilePluginReflection.cpp | 2 +- 12 files changed, 17 insertions(+), 16 deletions(-) diff --git a/common/Reflection.h b/common/Reflection.h index b15a70fe..2682087e 100644 --- a/common/Reflection.h +++ b/common/Reflection.h @@ -21,7 +21,7 @@ struct Reflection { float bkg; float sigma; float dist_ewald; - float lp; + float rlp; bool observed = false; float S_x, S_y, S_z; }; diff --git a/docs/CBOR.md b/docs/CBOR.md index c489bd63..3a6344d9 100644 --- a/docs/CBOR.md +++ b/docs/CBOR.md @@ -146,7 +146,7 @@ See [DECTRIS documentation](https://github.com/dectris/documentation/tree/main/s | - sigma | float | standard deviation, estimated from counting statistics (photons) | | | | - image | float | image number (present for each spot) | | | | - dist_ewald | float | distance to Ewald sphere (present only for indexed spots) | | | -| - lp | float | Lorentz and polarization corrections | | | +| - rlp | float | Reciprocal Lorentz and polarization corrections | | | | spot_count | uint64 | Spot count | | | | spot_count_ice_rings | uint64 | Number of spots within identified rings (experimental) | | | | spot_count_low_res | uint64 | Number of spots in low resolution (prior to filtering) | | | diff --git a/frame_serialize/CBORStream2Deserializer.cpp b/frame_serialize/CBORStream2Deserializer.cpp index 28695a5d..d56ffc9b 100644 --- a/frame_serialize/CBORStream2Deserializer.cpp +++ b/frame_serialize/CBORStream2Deserializer.cpp @@ -464,7 +464,7 @@ namespace { else if (key == "image") r.image_number = GetCBORFloat(map_value); else if (key == "rlp") - r.lp = GetCBORFloat(map_value); + r.rlp = GetCBORFloat(map_value); else if (key == "rp") r.dist_ewald = GetCBORFloat(map_value); else diff --git a/frame_serialize/CBORStream2Serializer.cpp b/frame_serialize/CBORStream2Serializer.cpp index dd26989d..06027d43 100644 --- a/frame_serialize/CBORStream2Serializer.cpp +++ b/frame_serialize/CBORStream2Serializer.cpp @@ -243,7 +243,7 @@ inline void CBOR_ENC(CborEncoder &encoder, const Reflection& r) { CBOR_ENC(mapEncoder, "sigma", r.sigma); CBOR_ENC(mapEncoder, "image", r.image_number); CBOR_ENC(mapEncoder, "rp", r.dist_ewald); - CBOR_ENC(mapEncoder, "lp", r.lp); + CBOR_ENC(mapEncoder, "rlp", r.rlp); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } diff --git a/image_analysis/bragg_integration/BraggIntegrate2D.cpp b/image_analysis/bragg_integration/BraggIntegrate2D.cpp index 0e5bd116..77622f64 100644 --- a/image_analysis/bragg_integration/BraggIntegrate2D.cpp +++ b/image_analysis/bragg_integration/BraggIntegrate2D.cpp @@ -99,11 +99,11 @@ std::vector IntegrateInternal(const DiffractionExperiment &experimen r_3, r_1_sq, r_2_sq, r_3_sq); if (r.observed) { if (experiment.GetPolarizationFactor()) - r.lp *= geom.CalcAzIntPolarizationCorr(r.predicted_x, r.predicted_y, + r.rlp *= geom.CalcAzIntPolarizationCorr(r.predicted_x, r.predicted_y, experiment.GetPolarizationFactor().value()); - r.I *= r.lp; - r.bkg *= r.lp; - r.sigma *= r.lp; + r.I *= r.rlp; + r.bkg *= r.rlp; + r.sigma *= r.rlp; r.image_number = static_cast(image_number); ret.emplace_back(r); } diff --git a/image_analysis/bragg_prediction/BraggPrediction.cpp b/image_analysis/bragg_prediction/BraggPrediction.cpp index 483c2d85..df9d180b 100644 --- a/image_analysis/bragg_prediction/BraggPrediction.cpp +++ b/image_analysis/bragg_prediction/BraggPrediction.cpp @@ -100,7 +100,7 @@ int BraggPrediction::Calc(const DiffractionExperiment &experiment, const Crystal .predicted_y = y, .d = d, .dist_ewald = dist_ewald_sphere, - .lp = 1.0, + .rlp = 1.0, .S_x = S_x, .S_y = S_y, .S_z = S_z diff --git a/image_analysis/bragg_prediction/BraggPredictionGPU.cu b/image_analysis/bragg_prediction/BraggPredictionGPU.cu index aae6a5ed..b71ecb5c 100644 --- a/image_analysis/bragg_prediction/BraggPredictionGPU.cu +++ b/image_analysis/bragg_prediction/BraggPredictionGPU.cu @@ -84,7 +84,7 @@ namespace { out.S_x = Sx; out.S_y = Sy; out.S_z = Sz; - out.lp = 1.0f; + out.rlp = 1.0f; return true; } diff --git a/image_analysis/bragg_prediction/BraggPredictionRot.cpp b/image_analysis/bragg_prediction/BraggPredictionRot.cpp index b202efaf..94a1d437 100644 --- a/image_analysis/bragg_prediction/BraggPredictionRot.cpp +++ b/image_analysis/bragg_prediction/BraggPredictionRot.cpp @@ -124,7 +124,7 @@ int BraggPredictionRot::Calc(const DiffractionExperiment &experiment, const Crys .predicted_y = y, .d = d, .dist_ewald = dist_ewald_sphere, - .lp = lorentz_reciprocal, + .rlp = lorentz_reciprocal, .S_x = S.x, .S_y = S.y, .S_z = S.z diff --git a/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu b/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu index b77e598e..7c764123 100644 --- a/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu +++ b/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu @@ -131,7 +131,7 @@ namespace { out[count].predicted_y = y; out[count].d = 1.0f / sqrtf(p0_sq); out[count].dist_ewald = dist_ewald; - out[count].lp = lorentz; + out[count].rlp = lorentz; out[count].S_x = Sx; out[count].S_y = Sy; out[count].S_z = Sz; diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index 06546cbd..e017a77e 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -689,7 +689,8 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr &dataset for (size_t i = 0; i < h.size(); i++) { float lp_val = 0.0; - if (lp.size() > i) lp_val = lp.at(i); + if (lp.size() > i && lp[i] != 0.0f) + lp_val = 1.0f / lp[i]; Reflection r{ .h = h.at(i), .k = k.at(i), @@ -700,7 +701,7 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr &dataset .I = int_sum.at(i), .bkg = bkg.at(i), .sigma = int_err.at(i), - .lp = lp_val + .rlp = lp_val }; message.reflections.emplace_back(r); } diff --git a/tools/jfjoch_extract_hkl.cpp b/tools/jfjoch_extract_hkl.cpp index 1968f742..f12412e7 100644 --- a/tools/jfjoch_extract_hkl.cpp +++ b/tools/jfjoch_extract_hkl.cpp @@ -89,7 +89,7 @@ int main(int argc, char **argv) { .I = r.I, .last_image = i, .count = 1, - .rlp = r.lp, + .rlp = r.rlp, .image_number = r.image_number }; bool found = false; diff --git a/writer/HDF5DataFilePluginReflection.cpp b/writer/HDF5DataFilePluginReflection.cpp index ba6aa4d4..2b9fc2e5 100644 --- a/writer/HDF5DataFilePluginReflection.cpp +++ b/writer/HDF5DataFilePluginReflection.cpp @@ -30,7 +30,7 @@ void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_ pred_x.emplace_back(refl.predicted_x); pred_y.emplace_back(refl.predicted_y); bkg.emplace_back(refl.bkg); - lp.emplace_back(refl.lp); + lp.emplace_back(1.0/refl.rlp); } std::string image_group_name = fmt::format("image_{:06d}", image_number);