diff --git a/common/Reflection.h b/common/Reflection.h index 2682087e..03517ee1 100644 --- a/common/Reflection.h +++ b/common/Reflection.h @@ -24,6 +24,7 @@ struct Reflection { float rlp; bool observed = false; float S_x, S_y, S_z; + float partiality; }; #endif //JFJOCH_REFLECTION_H diff --git a/docs/CBOR.md b/docs/CBOR.md index 3a6344d9..4e0c6735 100644 --- a/docs/CBOR.md +++ b/docs/CBOR.md @@ -147,6 +147,7 @@ See [DECTRIS documentation](https://github.com/dectris/documentation/tree/main/s | - image | float | image number (present for each spot) | | | | - dist_ewald | float | distance to Ewald sphere (present only for indexed spots) | | | | - rlp | float | Reciprocal Lorentz and polarization corrections | | | +| - partiality | float | Partiality of the reflection | | | | 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 d56ffc9b..7285d712 100644 --- a/frame_serialize/CBORStream2Deserializer.cpp +++ b/frame_serialize/CBORStream2Deserializer.cpp @@ -467,6 +467,8 @@ namespace { r.rlp = GetCBORFloat(map_value); else if (key == "rp") r.dist_ewald = GetCBORFloat(map_value); + else if (key == "partiality") + r.partiality = GetCBORFloat(map_value); else cbor_value_advance(&map_value); } diff --git a/frame_serialize/CBORStream2Serializer.cpp b/frame_serialize/CBORStream2Serializer.cpp index 06027d43..e3c47f89 100644 --- a/frame_serialize/CBORStream2Serializer.cpp +++ b/frame_serialize/CBORStream2Serializer.cpp @@ -244,6 +244,8 @@ inline void CBOR_ENC(CborEncoder &encoder, const Reflection& r) { CBOR_ENC(mapEncoder, "image", r.image_number); CBOR_ENC(mapEncoder, "rp", r.dist_ewald); CBOR_ENC(mapEncoder, "rlp", r.rlp); + CBOR_ENC(mapEncoder, "partiality", r.partiality); + cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index e017a77e..985859db 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -681,6 +681,7 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr &dataset auto int_err = source_file->ReadOptVector(image_group_name + "/int_err"); auto bkg = source_file->ReadOptVector(image_group_name + "/background_mean"); auto lp = source_file->ReadOptVector(image_group_name + "/lp"); + auto partiality = source_file->ReadOptVector(image_group_name + "/partiality"); if (h.size() != l.size() || h.size() != k.size() || h.size() != d.size() || h.size() != predicted_x.size() || h.size() != predicted_y.size() @@ -691,6 +692,11 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr &dataset float lp_val = 0.0; if (lp.size() > i && lp[i] != 0.0f) lp_val = 1.0f / lp[i]; + + float partiality_val = 0.0f; + if (partiality.size() > i && partiality[i] != 0.0f) + partiality_val = partiality[i]; + Reflection r{ .h = h.at(i), .k = k.at(i), @@ -701,7 +707,8 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr &dataset .I = int_sum.at(i), .bkg = bkg.at(i), .sigma = int_err.at(i), - .rlp = lp_val + .rlp = lp_val, + .partiality = partiality_val }; message.reflections.emplace_back(r); } diff --git a/writer/HDF5DataFilePluginReflection.cpp b/writer/HDF5DataFilePluginReflection.cpp index 2b9fc2e5..8f826b29 100644 --- a/writer/HDF5DataFilePluginReflection.cpp +++ b/writer/HDF5DataFilePluginReflection.cpp @@ -17,7 +17,7 @@ void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_ std::vector h, k, l; std::vector I, sigma, d, lp; - std::vector image, pred_x, pred_y, bkg; + std::vector image, pred_x, pred_y, bkg, partiality; for (const auto &refl : msg.reflections) { image.emplace_back(refl.image_number); @@ -31,6 +31,7 @@ void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_ pred_y.emplace_back(refl.predicted_y); bkg.emplace_back(refl.bkg); lp.emplace_back(1.0/refl.rlp); + partiality.emplace_back(refl.partiality); } std::string image_group_name = fmt::format("image_{:06d}", image_number); @@ -47,6 +48,7 @@ void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_ image_group.SaveVector("background_mean", bkg); image_group.SaveVector("observed_frame", image); image_group.SaveVector("lp", lp); + image_group.SaveVector("partiality", partiality); } void HDF5DataFilePluginReflection::WriteFinal(HDF5File &data_file) {