END message: optional merged / map_coefficients / placed_model blocks
Structured results of an analysis run inside the broker, for jfjoch_writer to turn into <file_prefix>.mtz, _maps.mtz and _model.cif itself: the merged reflections and the map coefficients one typed array per MTZ column, the placed model one array per atom field (coordinates as float64). Each block is a nested CBOR map under its own optional END key; a reader that does not know a key skips it, as for every other END key, and unknown keys inside a block are skipped the same way. Space groups travel as gemmi's extended H-M name, which round-trips to the same table entry for all 564 settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5d8c6f4504
commit
91f6563953
4 files changed
+266
No files matched your search
@@ -515,6 +515,89 @@ inline void CBOR_ENC(CborEncoder &encoder, const char* key, const UnitCell &val)
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
}
|
||||
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::vector<double>& v) {
|
||||
cborErr(cbor_encode_text_stringz(&encoder, key));
|
||||
cborErr(cbor_encode_tag(&encoder, TagDoubleLE));
|
||||
cborErr(cbor_encode_byte_string(&encoder, reinterpret_cast<const uint8_t *>(v.data()), v.size() * sizeof(double)));
|
||||
}
|
||||
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MergedReflectionsMessage &m) {
|
||||
CborEncoder mapEncoder;
|
||||
cborErr(cbor_encode_text_stringz(&encoder, key));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell);
|
||||
CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name);
|
||||
CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A);
|
||||
CBOR_ENC(mapEncoder, "crystal_name", m.crystal_name);
|
||||
CBOR_ENC(mapEncoder, "history", m.history);
|
||||
CBOR_ENC(mapEncoder, "h", m.h);
|
||||
CBOR_ENC(mapEncoder, "k", m.k);
|
||||
CBOR_ENC(mapEncoder, "l", m.l);
|
||||
CBOR_ENC(mapEncoder, "i_mean", m.i_mean);
|
||||
CBOR_ENC(mapEncoder, "sigma_i_mean", m.sigma_i_mean);
|
||||
CBOR_ENC(mapEncoder, "i_plus", m.i_plus);
|
||||
CBOR_ENC(mapEncoder, "sigma_i_plus", m.sigma_i_plus);
|
||||
CBOR_ENC(mapEncoder, "i_minus", m.i_minus);
|
||||
CBOR_ENC(mapEncoder, "sigma_i_minus", m.sigma_i_minus);
|
||||
CBOR_ENC(mapEncoder, "f", m.f);
|
||||
CBOR_ENC(mapEncoder, "sigma_f", m.sigma_f);
|
||||
CBOR_ENC(mapEncoder, "f_plus", m.f_plus);
|
||||
CBOR_ENC(mapEncoder, "sigma_f_plus", m.sigma_f_plus);
|
||||
CBOR_ENC(mapEncoder, "f_minus", m.f_minus);
|
||||
CBOR_ENC(mapEncoder, "sigma_f_minus", m.sigma_f_minus);
|
||||
CBOR_ENC(mapEncoder, "free_flag", m.free_flag);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
}
|
||||
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MapCoefficientsMessage &m) {
|
||||
CborEncoder mapEncoder;
|
||||
cborErr(cbor_encode_text_stringz(&encoder, key));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell);
|
||||
CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name);
|
||||
CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A);
|
||||
CBOR_ENC(mapEncoder, "h", m.h);
|
||||
CBOR_ENC(mapEncoder, "k", m.k);
|
||||
CBOR_ENC(mapEncoder, "l", m.l);
|
||||
CBOR_ENC(mapEncoder, "fp", m.fp);
|
||||
CBOR_ENC(mapEncoder, "fc", m.fc);
|
||||
CBOR_ENC(mapEncoder, "phic", m.phic);
|
||||
CBOR_ENC(mapEncoder, "fwt", m.fwt);
|
||||
CBOR_ENC(mapEncoder, "phwt", m.phwt);
|
||||
CBOR_ENC(mapEncoder, "delfwt", m.delfwt);
|
||||
CBOR_ENC(mapEncoder, "phdelwt", m.phdelwt);
|
||||
CBOR_ENC(mapEncoder, "fom", m.fom);
|
||||
CBOR_ENC(mapEncoder, "free_flag", m.free_flag);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
}
|
||||
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const PlacedModelMessage &m) {
|
||||
CborEncoder mapEncoder;
|
||||
cborErr(cbor_encode_text_stringz(&encoder, key));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
CBOR_ENC(mapEncoder, "name", m.name);
|
||||
CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell);
|
||||
CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name);
|
||||
CBOR_ENC(mapEncoder, "model_space_group_name", m.model_space_group_name);
|
||||
CBOR_ENC(mapEncoder, "model_number", m.model_number);
|
||||
CBOR_ENC(mapEncoder, "chain", m.chain);
|
||||
CBOR_ENC(mapEncoder, "residue_name", m.residue_name);
|
||||
CBOR_ENC(mapEncoder, "seq_num", m.seq_num);
|
||||
CBOR_ENC(mapEncoder, "icode", m.icode);
|
||||
CBOR_ENC(mapEncoder, "het_flag", m.het_flag);
|
||||
CBOR_ENC(mapEncoder, "atom_name", m.atom_name);
|
||||
CBOR_ENC(mapEncoder, "element", m.element);
|
||||
CBOR_ENC(mapEncoder, "altloc", m.altloc);
|
||||
CBOR_ENC(mapEncoder, "charge", m.charge);
|
||||
CBOR_ENC(mapEncoder, "x", m.x);
|
||||
CBOR_ENC(mapEncoder, "y", m.y);
|
||||
CBOR_ENC(mapEncoder, "z", m.z);
|
||||
CBOR_ENC(mapEncoder, "b_iso", m.b_iso);
|
||||
CBOR_ENC(mapEncoder, "occupancy", m.occupancy);
|
||||
CBOR_ENC(mapEncoder, "aniso", m.aniso);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
}
|
||||
|
||||
// Add encoder for LatticeMessage
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const LatticeMessage &val) {
|
||||
CborEncoder mapEncoder;
|
||||
@@ -857,6 +940,9 @@ void CBORStream2Serializer::SerializeSequenceEnd(const EndMessage& message) {
|
||||
// should take; the number is beside it for a reader written before the name existed.
|
||||
CBOR_ENC(mapEncoder, "space_group_name", message.space_group_name);
|
||||
CBOR_ENC(mapEncoder, "space_group_number", message.space_group_number);
|
||||
CBOR_ENC(mapEncoder, "merged", message.merged);
|
||||
CBOR_ENC(mapEncoder, "map_coefficients", message.map_coefficients);
|
||||
CBOR_ENC(mapEncoder, "placed_model", message.placed_model);
|
||||
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
|
||||
|
||||
Reference in new issue
Block a user