From 66df8ace9bff98d20e38ffaada436c16a8fc1cff Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Tue, 11 Mar 2025 16:21:36 +0100
Subject: [PATCH] OMF: extract rnums from omf obj

---
 modules/io/pymod/export_omf_io.cc | 5 +++++
 modules/io/src/mol/omf.cc         | 8 ++++++++
 modules/io/src/mol/omf.hh         | 2 ++
 3 files changed, 15 insertions(+)

diff --git a/modules/io/pymod/export_omf_io.cc b/modules/io/pymod/export_omf_io.cc
index 1c52809be..cfb1977a8 100644
--- a/modules/io/pymod/export_omf_io.cc
+++ b/modules/io/pymod/export_omf_io.cc
@@ -67,6 +67,10 @@ namespace{
     return boost::python::make_tuple(VecToList(rnums), pos);
   }
 
+  boost::python::list wrap_get_rnums(OMFPtr omf, const String& cname) {
+    const std::vector<int>& rnums = omf->GetRNums(cname);
+    return VecToList<int>(rnums);
+  }
 }
 
 void export_omf_io() {
@@ -97,6 +101,7 @@ void export_omf_io() {
     .def("GetAvgBFactors", &OMF::GetAvgBFactors,(arg("cname")))
     .def("GetOccupancies", &OMF::GetOccupancies, return_value_policy<reference_existing_object>(),(arg("cname")))
     .def("GetSequence", &OMF::GetSequence, (arg("cname")))
+    .def("GetRNums", &wrap_get_rnums, (arg("cname")))
     .def("ToAssembly", &wrap_to_assembly, (arg("bu_info")))
     .def("Trace", &wrap_trace, (arg("cname"), arg("aname")))
   ;
diff --git a/modules/io/src/mol/omf.cc b/modules/io/src/mol/omf.cc
index b4fd31c86..a00acc67e 100644
--- a/modules/io/src/mol/omf.cc
+++ b/modules/io/src/mol/omf.cc
@@ -5677,4 +5677,12 @@ String OMF::GetSequence(const String& cname) const {
   return sequence;
 }
 
+const std::vector<int>& OMF::GetRNums(const String& cname) const {
+  auto it = chain_data_.find(cname);
+  if(it == chain_data_.end()) {
+    throw ost::Error("Provided chain name not in OMF structure");
+  }
+  return it->second->rnums;
+}
+
 }} //ns
diff --git a/modules/io/src/mol/omf.hh b/modules/io/src/mol/omf.hh
index ce0850e37..2fd9c0595 100644
--- a/modules/io/src/mol/omf.hh
+++ b/modules/io/src/mol/omf.hh
@@ -242,6 +242,8 @@ public:
 
   String GetSequence(const String& cname) const;
 
+  const std::vector<int>& GetRNums(const String& cname) const;
+
   // raw data access - pros only...
   const std::vector<ResidueDefinition>& GetResidueDefinitions() const {
     return residue_definitions_;
-- 
GitLab