From 2cd8c57eba4c97951669ad84eb10be172a40763e Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Thu, 10 May 2012 20:06:40 +0200 Subject: [PATCH] store original pdb chain name as generic property --- modules/io/src/mol/mmcif_reader.cc | 32 ++++++++++++++------------- modules/io/src/mol/mmcif_reader.hh | 3 ++- modules/io/tests/test_mmcif_reader.cc | 12 +++++----- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc index c58c14c8d..d4a9e3140 100644 --- a/modules/io/src/mol/mmcif_reader.cc +++ b/modules/io/src/mol/mmcif_reader.cc @@ -342,7 +342,8 @@ mol::ResNum to_res_num(int num, char ins_code) } bool MMCifReader::ParseAtomIdent(const std::vector<StringRef>& columns, - String& chain_name, + String& auth_chain_name, + String& cif_chain_name, StringRef& res_name, mol::ResNum& resnum, bool& valid_res_num, @@ -357,13 +358,11 @@ bool MMCifReader::ParseAtomIdent(const std::vector<StringRef>& columns, } } // CHAIN ID - if (auth_chain_id_) { // unit test different IDs - chain_name = columns[indices_[AUTH_ASYM_ID]].str(); - } else { - chain_name = columns[indices_[LABEL_ASYM_ID]].str(); - } + auth_chain_name = columns[indices_[AUTH_ASYM_ID]].str(); + cif_chain_name = columns[indices_[LABEL_ASYM_ID]].str(); + if (restrict_chains_.size() > 0 && - restrict_chains_.find(chain_name) == String::npos) { + restrict_chains_.find(cif_chain_name) == String::npos) { return false; } @@ -398,7 +397,8 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns) { mol::XCSEditor editor=ent_handle_.EditXCS(mol::BUFFERED_EDIT); // potbl char alt_loc=0; - String chain_name; + String auth_chain_name; + String cif_chain_name; StringRef res_name, atom_name; mol::ResNum res_num(0); bool valid_res_num = false; @@ -416,7 +416,8 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns) } if (!this->ParseAtomIdent(columns, - chain_name, + auth_chain_name, + cif_chain_name, res_name, res_num, valid_res_num, @@ -460,7 +461,7 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns) if(!curr_chain_) { // unit test update_chain=true; update_residue=true; - } else if(curr_chain_.GetName() != chain_name) { // unit test + } else if(curr_chain_.GetName() != cif_chain_name) { // unit test update_chain=true; update_residue=true; } @@ -471,12 +472,12 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns) if (indices_[AUTH_SEQ_ID] != -1 && indices_[PDBX_PDB_INS_CODE] != -1) { if (subst_res_id_ != - chain_name + + cif_chain_name + columns[indices_[AUTH_SEQ_ID]].str() + columns[indices_[PDBX_PDB_INS_CODE]].str()) { update_residue=true; - subst_res_id_ = chain_name + + subst_res_id_ = cif_chain_name + columns[indices_[AUTH_SEQ_ID]].str() + columns[indices_[PDBX_PDB_INS_CODE]].str(); } @@ -490,10 +491,11 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns) } if(update_chain) { // unit test - curr_chain_ = ent_handle_.FindChain(chain_name); + curr_chain_ = ent_handle_.FindChain(cif_chain_name); if(!curr_chain_.IsValid()) { // unit test - LOG_DEBUG("new chain " << chain_name); - curr_chain_=editor.InsertChain(chain_name); + LOG_DEBUG("new chain " << cif_chain_name); + curr_chain_=editor.InsertChain(cif_chain_name); + curr_chain_.SetStringProp("pdb_auth_chain_name", auth_chain_name); ++chain_count_; // store entity id chain_id_pairs_.push_back(std::pair<mol::ChainHandle,String>(curr_chain_, diff --git a/modules/io/src/mol/mmcif_reader.hh b/modules/io/src/mol/mmcif_reader.hh index 06215f56b..e9ff3b893 100644 --- a/modules/io/src/mol/mmcif_reader.hh +++ b/modules/io/src/mol/mmcif_reader.hh @@ -202,7 +202,8 @@ protected: /// \param[out] atom_name corresponds to label_atom_id /// \param[out] alt_loc gets first letter of atom_site.label_alt_id bool ParseAtomIdent(const std::vector<StringRef>& columns, - String& chain_name, + String& auth_chain_name, + String& cif_chain_name, StringRef& res_name, mol::ResNum& resnum, bool& valid_res_num, diff --git a/modules/io/tests/test_mmcif_reader.cc b/modules/io/tests/test_mmcif_reader.cc index b2294ba90..fff6bbb2e 100644 --- a/modules/io/tests/test_mmcif_reader.cc +++ b/modules/io/tests/test_mmcif_reader.cc @@ -644,7 +644,7 @@ BOOST_AUTO_TEST_CASE(mmcif_struct_ref) BOOST_CHECK_EQUAL(seqs[1]->GetDBEnd(), 49); MMCifInfoStructRefSeqDifs diffs=seqs[0]->GetDifs(); BOOST_CHECK_EQUAL(diffs.size(), 1); - BOOST_CHECK_EQUAL(diffs[0]->GetRNum(), 91); + BOOST_CHECK_EQUAL(diffs[0]->GetSeqRNum(), 91); BOOST_CHECK_EQUAL(diffs[0]->GetDetails(), "ENGINEERED MUTATION"); } @@ -1091,7 +1091,8 @@ BOOST_AUTO_TEST_CASE(mmcif_parseatomident) StarLoopDesc tmmcif_h; TestMMCifReaderProtected tmmcif_p(s, eh, profile); std::vector<StringRef> columns; - String chain_name; + String cif_chain_name; + String auth_chain_name; StringRef res_name; mol::ResNum resnum(0); bool valid_res_num = false; @@ -1099,7 +1100,6 @@ BOOST_AUTO_TEST_CASE(mmcif_parseatomident) StringRef atom_name; BOOST_MESSAGE(" testing valid line"); - //tmmcif_p.ParseAtomIdent(); BOOST_MESSAGE(" done."); // negative //cols.push_back(StringRef("ATOM", 4)); @@ -1148,7 +1148,8 @@ BOOST_AUTO_TEST_CASE(mmcif_parseatomident) columns.push_back(StringRef("25.369", 6)); // Cartn_x columns.push_back(StringRef("30.691", 6)); // Cartn_y columns.push_back(StringRef("11.795", 6)); // Cartn_z - BOOST_CHECK_EQUAL(tmmcif_p.ParseAtomIdent(columns, chain_name, res_name, + BOOST_CHECK_EQUAL(tmmcif_p.ParseAtomIdent(columns, auth_chain_name, + cif_chain_name, res_name, resnum, valid_res_num, atom_name, alt_loc), true); columns.pop_back(); @@ -1167,7 +1168,8 @@ BOOST_AUTO_TEST_CASE(mmcif_parseatomident) columns.push_back(StringRef("25.369", 6)); // Cartn_x columns.push_back(StringRef("30.691", 6)); // Cartn_y columns.push_back(StringRef("11.795", 6)); // Cartn_z - BOOST_CHECK_EQUAL(tmmcif_p.ParseAtomIdent(columns, chain_name, res_name, + BOOST_CHECK_EQUAL(tmmcif_p.ParseAtomIdent(columns, auth_chain_name, + cif_chain_name, res_name, resnum, valid_res_num, atom_name, alt_loc), false); } -- GitLab