From a002412aecdab94015351ccbb50e27f691279663 Mon Sep 17 00:00:00 2001 From: Xavier Robin <xavier.robin@unibas.ch> Date: Tue, 9 Apr 2019 11:44:36 +0200 Subject: [PATCH] Ignore missing (struct_conf|struct_sheet_range).(beg|end)_label_seq_id data item in fault_tolerant mode of mmCIF reader. --- modules/io/src/mol/mmcif_reader.cc | 31 ++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc index 5ed09e1ed..a232e3711 100644 --- a/modules/io/src/mol/mmcif_reader.cc +++ b/modules/io/src/mol/mmcif_reader.cc @@ -1312,10 +1312,18 @@ void MMCifReader::ParseStructConf(const std::vector<StringRef>& columns) if (restrict_chains_.size() == 0 || restrict_chains_.find(chain_name.str()) != String::npos) { // fetch start and end - s_res_num = this->TryGetInt(columns[indices_[SC_BEG_LABEL_SEQ_ID]], - "struct_conf.beg_label_seq_id"); - e_res_num = this->TryGetInt(columns[indices_[SC_END_LABEL_SEQ_ID]], - "struct_conf.end_label_seq_id"); + std::pair<bool,int> s_beg = this->TryGetInt(columns[indices_[SC_BEG_LABEL_SEQ_ID]], // s_res_num + "struct_conf.beg_label_seq_id", + profile_.fault_tolerant); + std::pair<bool,int> s_end = this->TryGetInt(columns[indices_[SC_END_LABEL_SEQ_ID]], // e_res_num + "struct_conf.end_label_seq_id", + profile_.fault_tolerant); + if (!(s_beg.first && s_end.first)) { + return; + } + s_res_num = s_beg.second; + e_res_num = s_end.second; + MMCifHSEntry hse = {to_res_num(s_res_num, ' '), to_res_num(e_res_num, ' '), chain_name.str()}; @@ -1353,10 +1361,17 @@ void MMCifReader::ParseStructSheetRange(const std::vector<StringRef>& columns) if (restrict_chains_.size() == 0 || restrict_chains_.find(chain_name.str()) != String::npos) { - s_res_num = this->TryGetInt(columns[indices_[SSR_BEG_LABEL_SEQ_ID]], - "struct_sheet_range.beg_label_seq_id"); - e_res_num = this->TryGetInt(columns[indices_[SSR_END_LABEL_SEQ_ID]], - "struct_sheet_range.end_label_seq_id"); + std::pair<bool,int> s_beg = this->TryGetInt(columns[indices_[SSR_BEG_LABEL_SEQ_ID]], // s_res_num + "struct_sheet_range.beg_label_seq_id", + profile_.fault_tolerant); + std::pair<bool,int> s_end = this->TryGetInt(columns[indices_[SSR_END_LABEL_SEQ_ID]], // e_res_num + "struct_sheet_range.end_label_seq_id", + profile_.fault_tolerant); + if (!(s_beg.first && s_end.first)) { + return; + } + s_res_num = s_beg.second; + e_res_num = s_end.second; MMCifHSEntry hse = {to_res_num(s_res_num, ' '), to_res_num(e_res_num, ' '), -- GitLab