From 5e0eddcea7a49c4d1e251e41b51a8641633b0329 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Wed, 10 Jan 2024 13:46:36 +0100 Subject: [PATCH] mmcif writer: Set user defined mmCIF entities --- modules/io/pymod/export_mmcif_io.cc | 20 ++++++++++++++------ modules/io/src/mol/mmcif_writer.cc | 9 ++++++--- modules/io/src/mol/mmcif_writer.hh | 22 ++++++++++++++++++++-- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/modules/io/pymod/export_mmcif_io.cc b/modules/io/pymod/export_mmcif_io.cc index f9a575b5f..411750b91 100644 --- a/modules/io/pymod/export_mmcif_io.cc +++ b/modules/io/pymod/export_mmcif_io.cc @@ -84,14 +84,16 @@ void WrapStarWriterWrite(StarWriter& writer, const String& data_name, void WrapSetStructureHandle(MMCifWriter& writer, const ost::mol::EntityHandle& ent, - bool mmcif_conform) { - writer.SetStructure(ent, mmcif_conform); + bool mmcif_conform, + const std::vector<MMCifWriterEntity>& entity_info) { + writer.SetStructure(ent, mmcif_conform, entity_info); } void WrapSetStructureView(MMCifWriter& writer, const ost::mol::EntityView& ent, - bool mmcif_conform) { - writer.SetStructure(ent, mmcif_conform); + bool mmcif_conform, + const std::vector<MMCifWriterEntity>& entity_info) { + writer.SetStructure(ent, mmcif_conform, entity_info); } void export_mmcif_io() @@ -159,9 +161,15 @@ void export_mmcif_io() .add_property("asym_ids", &MMCifWriterEntity::asym_ids) ; + class_<std::vector<MMCifWriterEntity> >("MMCifWriterEntityList", init<>()) + .def(vector_indexing_suite<std::vector<MMCifWriterEntity> >()) + ; + class_<MMCifWriter, bases<StarWriter> >("MMCifWriter", init<>()) - .def("SetStructure", &WrapSetStructureHandle, (arg("ent"), arg("mmcif_conform")=true)) - .def("SetStructure", &WrapSetStructureView, (arg("ent"), arg("mmcif_conform")=true)) + .def("SetStructure", &WrapSetStructureHandle, (arg("ent"), arg("mmcif_conform")=true, + arg("entity_info")=std::vector<MMCifWriterEntity>())) + .def("SetStructure", &WrapSetStructureView, (arg("ent"), arg("mmcif_conform")=true, + arg("entity_info")=std::vector<MMCifWriterEntity>())) ; enum_<MMCifInfoCitation::MMCifInfoCType>("MMCifInfoCType") diff --git a/modules/io/src/mol/mmcif_writer.cc b/modules/io/src/mol/mmcif_writer.cc index 16cf083f6..a2b3ba02e 100644 --- a/modules/io/src/mol/mmcif_writer.cc +++ b/modules/io/src/mol/mmcif_writer.cc @@ -1461,18 +1461,21 @@ int MMCifWriterEntity::GetAsymIdx(const String& asym_id) const { } void MMCifWriter::SetStructure(const ost::mol::EntityHandle& ent, - bool mmcif_conform) { - + bool mmcif_conform, + const std::vector<MMCifWriterEntity>& entity_info) { this->Setup(); + entity_info_ = entity_info; ProcessEnt(ent, mmcif_conform, comp_info_, entity_info_, atom_site_, pdbx_poly_seq_scheme_); this->Finalize(); } void MMCifWriter::SetStructure(const ost::mol::EntityView& ent, - bool mmcif_conform) { + bool mmcif_conform, + const std::vector<MMCifWriterEntity>& entity_info) { this->Setup(); + entity_info_ = entity_info; ProcessEnt(ent, mmcif_conform, comp_info_, entity_info_, atom_site_, pdbx_poly_seq_scheme_); this->Finalize(); diff --git a/modules/io/src/mol/mmcif_writer.hh b/modules/io/src/mol/mmcif_writer.hh index 98c62c4be..85b3f9a2a 100644 --- a/modules/io/src/mol/mmcif_writer.hh +++ b/modules/io/src/mol/mmcif_writer.hh @@ -41,6 +41,22 @@ struct MMCifWriterEntity { int GetAsymIdx(const String& asym_id) const; + bool operator==(const MMCifWriterEntity& rhs) const { + return (type == rhs.type) + && (poly_type == rhs.poly_type) + && (branch_type == rhs.branch_type) + && (asym_ids == rhs.asym_ids) + && (is_poly == rhs.is_poly) + && (mon_ids == rhs.mon_ids) + && (seq_olcs == rhs.seq_olcs) + && (seq_can_olcs == rhs.seq_can_olcs) + && (asym_alns == rhs.asym_alns); + } + + bool operator!=(const MMCifWriterEntity& rhs) const { + return !(*this == rhs); + } + // _entity.type String type; @@ -88,9 +104,11 @@ public: virtual ~MMCifWriter() { } - void SetStructure(const ost::mol::EntityHandle& ent, bool mmcif_conform=true); + void SetStructure(const ost::mol::EntityHandle& ent, bool mmcif_conform=true, + const std::vector<MMCifWriterEntity>& entity_info=std::vector<MMCifWriterEntity>()); - void SetStructure(const ost::mol::EntityView& ent, bool mmcif_conform=true); + void SetStructure(const ost::mol::EntityView& ent, bool mmcif_conform=true, + const std::vector<MMCifWriterEntity>& entity_info=std::vector<MMCifWriterEntity>()); private: -- GitLab