From de9e3301e7cc8dd6b2c7bfde03858ee5c634cbe2 Mon Sep 17 00:00:00 2001
From: Xavier Robin <xavalias-github@xavier.robin.name>
Date: Thu, 6 Jun 2024 09:55:20 +0200
Subject: [PATCH] fix: SCHWED-6331 make struct_ref_seq_dif.pdbx_seq_db_seq_num
 optional

---
 modules/io/src/mol/mmcif_reader.cc | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc
index e95263b57..9ab20c5e2 100644
--- a/modules/io/src/mol/mmcif_reader.cc
+++ b/modules/io/src/mol/mmcif_reader.cc
@@ -319,9 +319,11 @@ bool MMCifReader::OnBeginLoop(const StarLoopDesc& header)
     cat_available = true;
   } else if (header.GetCategory()=="struct_ref_seq_dif") {
     category_ = STRUCT_REF_SEQ_DIF;
+    // mandatory
     this->TryStoreIdx(SRSD_ALIGN_ID, "align_id", header);
-    this->TryStoreIdx(SRSD_SEQ_RNUM, "seq_num", header);
-    this->TryStoreIdx(SRSD_DB_RNUM, "pdbx_seq_db_seq_num", header);
+    // optional
+    indices_[SRSD_SEQ_RNUM]=header.GetIndex("seq_num");
+    indices_[SRSD_DB_RNUM]=header.GetIndex("pdbx_seq_db_seq_num");
     indices_[SRSD_DETAILS]=header.GetIndex("details");
     cat_available = true;
   } else if (header.GetCategory()=="database_PDB_rev") {
@@ -1693,17 +1695,23 @@ void MMCifReader::ParseStructRefSeqDif(const std::vector<StringRef>& columns)
 {
   String aln_id=columns[indices_[SRSD_ALIGN_ID]].str();
   String db_rnum;
-  if (!is_undef(columns[indices_[SRSD_DB_RNUM]])) {
+  if (indices_[SRSD_DB_RNUM] != -1) {
     db_rnum=columns[indices_[SRSD_DB_RNUM]].str();
+  } else {
+ 	 	LOG_INFO("Ignoring struct_ref_seq_dif with missing data item "
+ 	 	         "pdbx_seq_db_seq_num");
+ 	 	 return;
   }
-  std::pair<bool,int> seq_rnum(true, -1);
-  if (!is_undef(columns[indices_[SRSD_SEQ_RNUM]])) {
+  std::pair<bool,int> seq_rnum;
+  if (indices_[SRSD_SEQ_RNUM] != -1) {
     seq_rnum=this->TryGetInt(columns[indices_[SRSD_SEQ_RNUM]],
                              "_struct_ref_seq_dif.seq_num",
                              profile_.fault_tolerant);
     
   }
   if (!seq_rnum.first) {
+ 	 	LOG_INFO("Ignoring struct_ref_seq_dif with missing data item "
+ 	 	         "seq_num");
     return;
   }
   String details;
-- 
GitLab