From 7a55b5ba5d445ffb8a3787df1a8250b59d482dae Mon Sep 17 00:00:00 2001 From: yokochi47 Date: Tue, 14 Jan 2025 12:34:17 +0900 Subject: [PATCH] DAOTHER-1728, 9846, 8905: Fix exceptions when merging NMR metadata upon submission --- wwpdb/utils/nmr/NmrDpUtility.py | 42 +++++++++++++++++++-------- wwpdb/utils/nmr/ann/OneDepAnnTasks.py | 10 +++++++ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/wwpdb/utils/nmr/NmrDpUtility.py b/wwpdb/utils/nmr/NmrDpUtility.py index dbb7790d..648f6103 100644 --- a/wwpdb/utils/nmr/NmrDpUtility.py +++ b/wwpdb/utils/nmr/NmrDpUtility.py @@ -36524,10 +36524,12 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item_temp in enumerate(assign_item_temps): assign_item = assign_item_temp % dim + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -36550,7 +36552,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) @@ -36603,9 +36606,11 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item in enumerate(assign_items): + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -36622,7 +36627,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) @@ -36681,10 +36687,12 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item_temp in enumerate(assign_item_temps): assign_item = assign_item_temp % dim + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -36707,7 +36715,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) @@ -36759,9 +36768,11 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item in enumerate(assign_items): + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -36778,7 +36789,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) @@ -36932,10 +36944,12 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item_temp in enumerate(assign_item_temps): assign_item = assign_item_temp % dim + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -36958,7 +36972,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) @@ -37172,9 +37187,11 @@ def get_auth_seq_scheme(chain_id, seq_id): else: - chain_id = seq_id = comp_id = atom_id = None + chain_id = seq_id = comp_id = atom_id = auth_asym_id = auth_seq_id = None for col, assign_item in enumerate(assign_items): + if assign_item not in loop.tags: + continue if col == 0: chain_id = row[loop.tags.index(assign_item)] elif col == 1: @@ -37191,7 +37208,8 @@ def get_auth_seq_scheme(chain_id, seq_id): else: atom_id = row[loop.tags.index(assign_item)] - auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) + if chain_id is not None and seq_id is not None: + auth_asym_id, auth_seq_id = get_auth_seq_scheme(chain_id, seq_id) if auth_asym_id is not None and auth_seq_id is not None: seq_key = (auth_asym_id, auth_seq_id, comp_id) diff --git a/wwpdb/utils/nmr/ann/OneDepAnnTasks.py b/wwpdb/utils/nmr/ann/OneDepAnnTasks.py index 9c4bc8f3..e566645d 100644 --- a/wwpdb/utils/nmr/ann/OneDepAnnTasks.py +++ b/wwpdb/utils/nmr/ann/OneDepAnnTasks.py @@ -1655,6 +1655,16 @@ def perform(self, master_entry: pynmrstar.Entry, nmrif) -> bool: lp.add_data(_row) if reset and len(lp) > 0: + + try: + + loop = sf.get_loop(lp_category) + + del sf[loop] + + except KeyError: + pass + sf.add_loop(lp) allowed_sf_tags = set(self.__allowedSfTags)