diff --git a/modules/io/src/mol/mmcif_info.cc b/modules/io/src/mol/mmcif_info.cc index 77ae604029e8a0b71a00a3c0b48fec6972c5bf61..da292223460a6717e772a3abe60f374e0025bdae 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 73d3c25d2b69feafb098ed4f0d1dbd00add0657a..73946c1393d6e285b0b66637ad89ad977a462a26 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 5ebb954dc2dccf1564d044275bfa83212a1e720c..64d632755ceb4bb3c11de43f7988196e6181c654 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; }