7#ifndef GEMMI_INTENSIT_HPP_
8#define GEMMI_INTENSIT_HPP_
11#include <unordered_map>
23namespace cif {
struct Block; }
37 double r_merge_num = 0;
38 double r_meas_num = 0;
44 double sum_sig2_eps = 0;
49 all_refl +=
o.all_refl;
50 unique_refl +=
o.unique_refl;
51 stats_refl +=
o.stats_refl;
52 r_merge_num +=
o.r_merge_num;
53 r_meas_num +=
o.r_meas_num;
54 r_pim_num +=
o.r_pim_num;
56 sum_ibar +=
o.sum_ibar;
57 sum_ibar2 +=
o.sum_ibar2;
58 sum_sig2_eps +=
o.sum_sig2_eps;
61 double r_merge()
const {
return r_merge_num / r_denom; }
62 double r_meas()
const {
return r_meas_num / r_denom; }
63 double r_pim()
const {
return r_pim_num / r_denom; }
67 double cc = cc_half();
68 return 2 * cc / (1 + cc);
70 double cc_star()
const {
return std::sqrt(cc_full()); }
86 return std::tie(hkl[0], hkl[1], hkl[2], isign) <
93 return isign > 0 ?
"I(+)" :
"I(-)";
96 return cat(intensity_label(),
" (", hkl[0],
' ', hkl[1],
' ', hkl[2],
')');
103 bool ok()
const {
return !b.all_zero(); }
106 return std::exp(0.5 * b.r_u_r(s));
113 double unit_cell_rmsd[6] = {0., 0., 0., 0., 0., 0.};
121 case DataType::Unmerged:
return "I";
122 case DataType::Mean:
return "<I>";
123 case DataType::Anomalous:
return "I+/I-";
124 case DataType::MergedAM:
125 case DataType::MergedMA:
127 case DataType::Unknown:
return "n/a";
132 const char*
type_str()
const {
return Intensities::type_str(type); }
145 if (!std::isnan(value) && sigma > 0)
146 data.push_back({hkl, isign, isym, 0, value, sigma});
156 void sort() { std::sort(data.begin(), data.end()); }
204 size_t size()
const {
return intensities_.
data.size(); }
208 double get_num(
size_t n)
const {
return intensities_.
data[n].value; }
211template<
typename DataProxy>
216 std::unordered_map<Op::Miller, int, MillerHash>
seen;
226 if ((
r.first->second & sign) != 0 ||
centric) {
229 r.first->second |= sign;
void vector_remove_if(std::vector< T > &v, F &&condition)
std::array< int, 3 > Miller
A synonym for convenient passing of hkl.
std::pair< DataType, size_t > check_data_type_under_symmetry(const DataProxy &proxy)
std::string cat(Args const &... args)
GEMMI_DLL std::string read_staraniso_b_from_mtz(const Mtz &mtz, SMat33< double > &output)
Returns STARANISO version or empty string.
Statistics utilities: classes Covariance, Correlation, DataStats.
bool is_systematically_absent(const Op::Miller &hkl) const
bool is_centrosymmetric() const
Miller get_hkl(size_t offset) const
const UnitCell & unit_cell() const
double get_num(size_t n) const
const SpaceGroup * spacegroup() const
double scale(const Miller &hkl, const UnitCell &cell) const
std::string hkl_label() const
bool operator<(const Refl &o) const
const char * intensity_label() const
static const char * type_str(DataType data_type)
void import_xds(const XdsAscii &xds)
void merge_in_place(DataType new_type)
void import_unmerged_intensities_from_mmcif(const ReflnBlock &rb)
void import_f_squared_from_mmcif(const ReflnBlock &rb)
bool take_staraniso_b_from_mmcif(const cif::Block &block)
std::vector< Op > isym_ops
void import_mean_intensities_from_mtz(const Mtz &mtz)
std::string spacegroup_str() const
void import_anomalous_intensities_from_mtz(const Mtz &mtz, bool check_complete=false)
void import_anomalous_intensities_from_mmcif(const ReflnBlock &rb, bool check_complete=false)
void switch_to_asu_indices()
void import_mean_intensities_from_mmcif(const ReflnBlock &rb)
std::string take_staraniso_b_from_mtz(const Mtz &mtz)
void remove_systematic_absences()
void add_if_valid(const Miller &hkl, int8_t isign, int8_t isym, double value, double sigma)
Mtz prepare_merged_mtz(bool with_nobs)
DataType prepare_for_merging(DataType new_type)
const char * type_str() const
void import_refln_block(const ReflnBlock &rb, DataType data_type=DataType::Unknown)
void import_unmerged_intensities_from_mtz(const Mtz &mtz)
std::array< double, 2 > resolution_range() const
Intensities merged(DataType new_type)
void import_mtz(const Mtz &mtz, DataType data_type=DataType::Unknown)
Correlation calculate_correlation(const Intensities &other) const
const SpaceGroup * spacegroup
std::vector< MergingStats > calculate_merging_stats(const Binner *binner, char use_weights='Y') const
use_weights can be 'Y' (yes, like Aimless), 'U' (unweighted), 'X' (yes, like XDS)
Vec3 left_multiply(const Vec3 &p) const
double cc_full() const
split-half reliability using the Spearman-Brown prediction formula :-)
void add_other(const MergingStats &o)
This class is additive.
std::pair< Op::Miller, bool > to_asu_sign(const Op::Miller &hkl, const GroupOps &gops) const
Similar to to_asu(), but the second returned value is sign: true for + or centric.
GroupOps operations() const
Crystallographic Symmetry. Space Groups. Coordinate Triplets.
Utilities. Mostly for working with strings and vectors.