From 532f5b41d3cc03f805cefb507b9d206510f2ba8c Mon Sep 17 00:00:00 2001 From: Xavier Robin <xavier.robin@unibas.ch> Date: Mon, 22 Jul 2024 18:02:39 +0200 Subject: [PATCH] fix: allow duplicate _struct_ref_seq.align_id in fault_tolerant mode --- modules/io/src/mol/mmcif_info.cc | 13 +++++++++++-- modules/io/src/mol/mmcif_info.hh | 3 ++- modules/io/src/mol/mmcif_reader.cc | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/io/src/mol/mmcif_info.cc b/modules/io/src/mol/mmcif_info.cc index 77ae60402..da2922234 100644 --- a/modules/io/src/mol/mmcif_info.cc +++ b/modules/io/src/mol/mmcif_info.cc @@ -196,11 +196,20 @@ void MMCifInfoBioUnit::Merge(MMCifInfoBioUnit& from) MMCifInfoStructRefSeqPtr MMCifInfoStructRef::AddAlignedSeq(const String& aid, const String& chain_name, int seq_begin, int seq_end, int db_begin, - int db_end) + int db_end, bool fault_tolerant) { std::map<String, MMCifInfoStructRefSeqPtr>::const_iterator i=seqs_.find(aid); if (i!=seqs_.end()) { - throw IOException("duplicate align_id for struct_ref '"+id_+"'"); + std::stringstream msg; + msg << "Duplicate align_id for struct_ref '" << id_ << "'"; + if (fault_tolerant) { + msg << ". Record will be overwritten."; + LOG_WARNING(msg.str()); + } + else { + throw IOException(msg.str()); + } + } MMCifInfoStructRefSeqPtr p(new MMCifInfoStructRefSeq(aid, chain_name, seq_begin, seq_end, diff --git a/modules/io/src/mol/mmcif_info.hh b/modules/io/src/mol/mmcif_info.hh index 73d3c25d2..73946c139 100644 --- a/modules/io/src/mol/mmcif_info.hh +++ b/modules/io/src/mol/mmcif_info.hh @@ -858,7 +858,8 @@ public: const String& GetDBAccess() const { return db_access_; } MMCifInfoStructRefSeqPtr AddAlignedSeq(const String& align_id, const String& chain_name, int seq_begin, - int seq_end, int db_begin, int db_end); + int seq_end, int db_begin, int db_end, + bool fault_tolerant); MMCifInfoStructRefSeqPtr GetAlignedSeq(const String& align_id) const; MMCifInfoStructRefSeqs GetAlignedSeqs() const { diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc index 5ebb954dc..64d632755 100644 --- a/modules/io/src/mol/mmcif_reader.cc +++ b/modules/io/src/mol/mmcif_reader.cc @@ -1686,7 +1686,7 @@ void MMCifReader::ParseStructRefSeq(const std::vector<StringRef>& columns) e=struct_refs_.end(); i!=e; ++i) { if ((*i)->GetID()==sr_id) { (*i)->AddAlignedSeq(aln_id, chain_name, entbeg.second, entend.second, - dbbeg.second, dbend.second); + dbbeg.second, dbend.second, profile_.fault_tolerant); found=true; break; } -- GitLab