// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include #include "SpotToSave.h" struct Reflection { int32_t h; int32_t k; int32_t l; float image_number; // Can be in-between for 3D integration float delta_phi_deg; // phi angle from XDS - difference from middle of current frame (NOT an absolute angle) float predicted_x; float predicted_y; float observed_x; float observed_y; float d; float I; float bkg; float sigma; float dist_ewald; float rlp; float partiality; // fraction of the reflection recorded in the sampled (rocking) slice float zeta; float image_scale_corr; // I_true = scaling_correction * I; scaling_correction = rlp / (partiality * image_scale) bool observed = false; bool on_ice_ring = false; // sits on a hexagonal-ice powder ring: excluded from scaling, kept for merging }; struct MergedReflection { int32_t h = 0; int32_t k = 0; int32_t l = 0; float I = NAN; float sigma = NAN; float I_half[2] = {NAN, NAN}; float sigma_half[2] = {NAN, NAN}; float d = 0.0; bool rfree_flag = false; float F = NAN; // French-Wilson amplitude |F| (filled by ApplyFrenchWilson at end of merge) float sigmaF = NAN; // its sigma // Anomalous (Bijvoet) split of this reflection's own observations, kept even when the merge is // Friedel-averaged (I above is the Friedel mean). Lets I(+)/I(-) be written and CCano reported by // default without scaling anomalously; NaN when a hand was not measured or for centrics. float I_plus = NAN; float sigma_plus = NAN; float I_minus = NAN; float sigma_minus = NAN; // French-Wilson amplitudes of the two hands (filled by ApplyFrenchWilson from I_plus/I_minus). float F_plus = NAN; float sigmaF_plus = NAN; float F_minus = NAN; float sigmaF_minus = NAN; };