From fb6c876aa2b186d3dd67ab73c590688621644800 Mon Sep 17 00:00:00 2001 From: Stefan Bienert <stefan.bienert@unibas.ch> Date: Thu, 6 Sep 2018 11:15:54 +0200 Subject: [PATCH] Use book publisher info in mmCIF reader --- modules/io/src/mol/mmcif_reader.cc | 12 ++++++++++++ modules/io/src/mol/mmcif_reader.hh | 2 ++ modules/io/tests/test_mmcif_reader.cc | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc index 1bd0011c8..213e6e922 100644 --- a/modules/io/src/mol/mmcif_reader.cc +++ b/modules/io/src/mol/mmcif_reader.cc @@ -191,6 +191,8 @@ bool MMCifReader::OnBeginLoop(const StarLoopDesc& header) indices_[ABSTRACT_ID_CAS] = header.GetIndex("abstract_id_CAS"); indices_[BOOK_ID_ISBN] = header.GetIndex("book_id_ISBN"); indices_[BOOK_TITLE] = header.GetIndex("book_title"); + indices_[BOOK_PUBLISHER] = header.GetIndex("book_publisher"); + indices_[BOOK_PUBLISHER_CITY] = header.GetIndex("book_publisher_city"); indices_[JOURNAL_ABBREV] = header.GetIndex("journal_abbrev"); indices_[YEAR] = header.GetIndex("year"); indices_[TITLE] = header.GetIndex("title"); @@ -816,6 +818,16 @@ void MMCifReader::ParseCitation(const std::vector<StringRef>& columns) // the journal_abbrev attribute. cit.SetPublishedIn(columns[indices_[BOOK_TITLE]].str()); cit.SetCitationTypeBook(); + + // In theory, book_publisher and book_publisher_city are only set for + // books and book chapters, so we only try to fetch them if the citation + // type points to book. + if (indices_[BOOK_PUBLISHER] != -1) { + cit.SetBookPublisher(columns[indices_[BOOK_PUBLISHER]].str()); + } + if (indices_[BOOK_PUBLISHER_CITY] != -1) { + cit.SetBookPublisherCity(columns[indices_[BOOK_PUBLISHER_CITY]].str()); + } } } if (indices_[JOURNAL_VOLUME] != -1) { diff --git a/modules/io/src/mol/mmcif_reader.hh b/modules/io/src/mol/mmcif_reader.hh index edd249f38..fa747a2ab 100644 --- a/modules/io/src/mol/mmcif_reader.hh +++ b/modules/io/src/mol/mmcif_reader.hh @@ -400,6 +400,8 @@ private: ABSTRACT_ID_CAS, ///< CAS identifier BOOK_ID_ISBN, ///< ISBN code assigned, if book cited BOOK_TITLE, ///< title of book storing the citation + BOOK_PUBLISHER, ///< name of publisher f a book + BOOK_PUBLISHER_CITY, ///< location of a publisher of a book JOURNAL_ABBREV, ///< abbreviated journal title for articles JOURNAL_VOLUME, ///< volume of cited journal PAGE_FIRST, ///< first page of citation diff --git a/modules/io/tests/test_mmcif_reader.cc b/modules/io/tests/test_mmcif_reader.cc index 233403c61..682e43c31 100644 --- a/modules/io/tests/test_mmcif_reader.cc +++ b/modules/io/tests/test_mmcif_reader.cc @@ -583,14 +583,18 @@ BOOST_AUTO_TEST_CASE(mmcif_citation_tests) tmmcif_h.SetCategory(StringRef("citation", 8)); tmmcif_h.Add(StringRef("id", 2)); tmmcif_h.Add(StringRef("year", 4)); + tmmcif_h.Add(StringRef("book_publisher_city", 19)); tmmcif_h.Add(StringRef("book_title", 10)); + tmmcif_h.Add(StringRef("book_publisher", 14)); tmmcif_h.Add(StringRef("journal_abbrev", 14)); tmmcif_p.OnBeginLoop(tmmcif_h); // ensure that we use book_title if no journal given (no RCSB use of this) columns.push_back(StringRef("Foo", 3)); columns.push_back(StringRef("1979", 4)); + columns.push_back(StringRef("The restaurant", 14)); columns.push_back(StringRef("The Guide", 9)); + columns.push_back(StringRef("Doug", 4)); columns.push_back(StringRef(".", 1)); BOOST_CHECK_NO_THROW(tmmcif_p.ParseCitation(columns)); @@ -598,12 +602,16 @@ BOOST_AUTO_TEST_CASE(mmcif_citation_tests) BOOST_CHECK_EQUAL(cit.GetID(), String("Foo")); BOOST_CHECK_EQUAL(cit.GetYear(), 1979); BOOST_CHECK_EQUAL(cit.GetPublishedIn(), String("The Guide")); + BOOST_CHECK_EQUAL(cit.GetBookPublisher(), String("Doug")); + BOOST_CHECK_EQUAL(cit.GetBookPublisherCity(), String("The restaurant")); BOOST_CHECK_EQUAL(cit.IsCitationTypeBook(), true); // ensure that we override book_title if not properly given columns.pop_back(); columns.pop_back(); + columns.pop_back(); columns.push_back(StringRef(".", 1)); + columns.push_back(StringRef("Doug", 4)); columns.push_back(StringRef("Hitch", 5)); BOOST_CHECK_NO_THROW(tmmcif_p.ParseCitation(columns)); @@ -613,7 +621,9 @@ BOOST_AUTO_TEST_CASE(mmcif_citation_tests) // ensure that we override journal if book_title given columns.pop_back(); columns.pop_back(); + columns.pop_back(); columns.push_back(StringRef("The Guide", 9)); + columns.push_back(StringRef("Doug", 4)); columns.push_back(StringRef("Hitch", 5)); BOOST_CHECK_NO_THROW(tmmcif_p.ParseCitation(columns)); -- GitLab