From 04427182ef0be1fac82ec11a3b87077106bf3bb6 Mon Sep 17 00:00:00 2001 From: yokochi47 Date: Thu, 23 Jan 2025 20:08:00 +0900 Subject: [PATCH] Counter-fix for polarstar replace _Chem_comp.ID with integer value as if list ID when parsing NMR-STAR file --- wwpdb/utils/nmr/CifToNmrStar.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/wwpdb/utils/nmr/CifToNmrStar.py b/wwpdb/utils/nmr/CifToNmrStar.py index 29d105ae..1cf65729 100644 --- a/wwpdb/utils/nmr/CifToNmrStar.py +++ b/wwpdb/utils/nmr/CifToNmrStar.py @@ -761,7 +761,7 @@ def set_entry_id(self, strData: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynm return modified - def set_local_sf_id(self, strData: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynmrstar.Loop], listId: int): + def set_local_sf_id(self, strData: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynmrstar.Loop], listId: Union[int, str]): """ Set list ID for a given saveframe or loop. """ @@ -950,10 +950,12 @@ def cleanup_str(self, strData: pynmrstar.Entry) -> pynmrstar.Entry: has_list_id = any(tag[0] == 'ID' for tag in sf.tags) - if has_list_id: - list_id = next(tag[1] for tag in sf.tags if tag[0] == 'ID') - if list_id in emptyValue: - self.set_local_sf_id(sf, list_id_dict[sf.category]) + if has_list_id and sf.category != 'entry_information': + list_id_tag = 'ID' if sf.category != 'chem_comp' else 'PDB_code' + list_id = next(tag[1] for tag in sf.tags if tag[0] == list_id_tag) + if list_id not in emptyValue: + self.set_local_sf_id(sf, list_id_dict[sf.category] + if isinstance(list_id, int) or list_id.isdigit() else list_id) has_eff_sf_tag = any(tag[1] not in emptyValue for tag in sf.tags if tag[0] not in ('Sf_category', 'Sf_framecode', 'Entry_ID', 'Sf_ID', 'ID'))