From 640bb00efa2330ea4bab131488d4adc8f713fde3 Mon Sep 17 00:00:00 2001
From: Stefan Bienert <stefan.bienert@unibas.ch>
Date: Fri, 23 Jan 2015 11:33:06 +0100
Subject: [PATCH] Dealing with PDB setting some mmCIF values to ?

---
 modules/io/src/mol/mmcif_reader.cc | 33 ++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc
index 52cd7e1ae..d6af7a258 100644
--- a/modules/io/src/mol/mmcif_reader.cc
+++ b/modules/io/src/mol/mmcif_reader.cc
@@ -750,13 +750,18 @@ void MMCifReader::ParseCitation(const std::vector<StringRef>& columns)
   // just add info
   cit.SetID(columns[indices_[CITATION_ID]].str());
   if (indices_[ABSTRACT_ID_CAS] != -1) {
-    cit.SetCAS(columns[indices_[ABSTRACT_ID_CAS]].str());
+    if (columns[indices_[ABSTRACT_ID_CAS]][0]!='?') {
+      cit.SetCAS(columns[indices_[ABSTRACT_ID_CAS]].str());
+    }
   }
   if (indices_[BOOK_ID_ISBN] != -1) {
-    cit.SetISBN(columns[indices_[BOOK_ID_ISBN]].str());
+    if (columns[indices_[BOOK_ID_ISBN]][0]!='?') {
+      cit.SetISBN(columns[indices_[BOOK_ID_ISBN]].str());
+    }
   }
   if (indices_[BOOK_TITLE] != -1) {
-    if (columns[indices_[BOOK_TITLE]] != StringRef(".", 1)) {
+    if ((columns[indices_[BOOK_TITLE]] != StringRef(".", 1)) &&
+        (columns[indices_[BOOK_TITLE]][0]!='?')) {
       cit.SetPublishedIn(columns[indices_[BOOK_TITLE]].str());
     }
   }
@@ -774,16 +779,24 @@ void MMCifReader::ParseCitation(const std::vector<StringRef>& columns)
     }
   }
   if (indices_[JOURNAL_VOLUME] != -1) {
-    cit.SetVolume(columns[indices_[JOURNAL_VOLUME]].str());
+    if (columns[indices_[JOURNAL_VOLUME]][0]!='?') {
+      cit.SetVolume(columns[indices_[JOURNAL_VOLUME]].str());
+    }
   }
   if (indices_[PAGE_FIRST] != -1) {
-    cit.SetPageFirst(columns[indices_[PAGE_FIRST]].str());
+    if (columns[indices_[PAGE_FIRST]][0]!='?') {
+      cit.SetPageFirst(columns[indices_[PAGE_FIRST]].str());
+    }
   }
   if (indices_[PAGE_LAST] != -1) {
-    cit.SetPageLast(columns[indices_[PAGE_LAST]].str());
+    if (columns[indices_[PAGE_LAST]][0]!='?') {
+      cit.SetPageLast(columns[indices_[PAGE_LAST]].str());
+    }
   }
   if (indices_[PDBX_DATABASE_ID_DOI] != -1) {
-    cit.SetDOI(columns[indices_[PDBX_DATABASE_ID_DOI]].str());
+    if (columns[indices_[PDBX_DATABASE_ID_DOI]][0]!='?') {
+      cit.SetDOI(columns[indices_[PDBX_DATABASE_ID_DOI]].str());
+    }
   }
   if (indices_[PDBX_DATABASE_ID_PUBMED] != -1) {
     if (columns[indices_[PDBX_DATABASE_ID_PUBMED]][0]!='?') {
@@ -1072,8 +1085,10 @@ void MMCifReader::ParseStruct(const std::vector<StringRef>& columns)
   }
 
   if (indices_[PDBX_FORMULA_WEIGHT] != -1) {
-    details.SetMass(this->TryGetReal(columns[indices_[PDBX_FORMULA_WEIGHT]],
-                                     "struct.pdbx_formula_weight"));
+    if (columns[indices_[PDBX_FORMULA_WEIGHT]][0] != '?') {
+      details.SetMass(this->TryGetReal(columns[indices_[PDBX_FORMULA_WEIGHT]],
+                                       "struct.pdbx_formula_weight"));
+    }
   }
 
   if (indices_[PDBX_FORMULA_WEIGHT_METHOD] != -1) {
-- 
GitLab