From 330ccdb7264018a41c44b2a2ab104be1b3a0a15a Mon Sep 17 00:00:00 2001 From: yokochi47 Date: Wed, 4 Dec 2024 15:31:58 +0900 Subject: [PATCH] Add NMRView peak reader and parserlistener --- .../utils/nmr/NEFTranslator/NEFTranslator.py | 12 +- wwpdb/utils/nmr/NmrDpReport.py | 4 +- wwpdb/utils/nmr/NmrDpUtility.py | 22 +- wwpdb/utils/nmr/NmrVrptUtility.py | 6 +- wwpdb/utils/nmr/mr/AmberMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/AmberMRReader.py | 8 +- wwpdb/utils/nmr/mr/AmberPTParserListener.py | 8 +- wwpdb/utils/nmr/mr/AmberPTReader.py | 8 +- wwpdb/utils/nmr/mr/AriaMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/AriaMRReader.py | 8 +- wwpdb/utils/nmr/mr/BiosymMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/BiosymMRReader.py | 8 +- wwpdb/utils/nmr/mr/CharmmCRDParserListener.py | 8 +- wwpdb/utils/nmr/mr/CharmmCRDReader.py | 8 +- wwpdb/utils/nmr/mr/CharmmMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/CharmmMRReader.py | 8 +- wwpdb/utils/nmr/mr/CnsMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/CnsMRReader.py | 8 +- wwpdb/utils/nmr/mr/CyanaMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/CyanaMRReader.py | 8 +- wwpdb/utils/nmr/mr/CyanaNOAParserListener.py | 8 +- wwpdb/utils/nmr/mr/CyanaNOAReader.py | 8 +- wwpdb/utils/nmr/mr/DynamoMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/DynamoMRReader.py | 8 +- wwpdb/utils/nmr/mr/GromacsMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/GromacsMRReader.py | 8 +- wwpdb/utils/nmr/mr/GromacsPTParserListener.py | 8 +- wwpdb/utils/nmr/mr/GromacsPTReader.py | 8 +- wwpdb/utils/nmr/mr/IsdMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/IsdMRReader.py | 8 +- wwpdb/utils/nmr/mr/ParserListenerUtil.py | 159 +- wwpdb/utils/nmr/mr/RosettaMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/RosettaMRReader.py | 8 +- wwpdb/utils/nmr/mr/SybylMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/SybylMRReader.py | 8 +- wwpdb/utils/nmr/mr/XplorMRParserListener.py | 8 +- wwpdb/utils/nmr/mr/XplorMRReader.py | 8 +- wwpdb/utils/nmr/pk/BasePKParserListener.py | 88 +- wwpdb/utils/nmr/pk/NmrPipePKLexer.py | 718 +++--- wwpdb/utils/nmr/pk/NmrPipePKParser.py | 925 +++---- wwpdb/utils/nmr/pk/NmrPipePKParserListener.py | 56 +- wwpdb/utils/nmr/pk/NmrPipePKReader.py | 8 +- wwpdb/utils/nmr/pk/NmrViewPKLexer.py | 384 +-- wwpdb/utils/nmr/pk/NmrViewPKParser.py | 2219 +++++++++++++---- wwpdb/utils/nmr/pk/NmrViewPKParserListener.py | 1546 +++++++++++- wwpdb/utils/nmr/pk/NmrViewPKReader.py | 216 ++ wwpdb/utils/nmr/pk/SparkyPKLexer.py | 261 +- wwpdb/utils/nmr/pk/XeasyPKLexer.py | 449 ++-- wwpdb/utils/nmr/pk/XeasyPKParser.py | 77 +- .../antlr-grammars-v4.10/NmrPipePKLexer.g4 | 4 +- .../antlr-grammars-v4.10/NmrPipePKParser.g4 | 18 +- .../antlr-grammars-v4.10/NmrViewPKLexer.g4 | 18 +- .../antlr-grammars-v4.10/NmrViewPKParser.g4 | 119 +- .../antlr-grammars-v4.10/SparkyPKLexer.g4 | 5 +- .../antlr-grammars-v4.10/XeasyPKLexer.g4 | 6 +- 55 files changed, 5339 insertions(+), 2237 deletions(-) create mode 100644 wwpdb/utils/nmr/pk/NmrViewPKReader.py diff --git a/wwpdb/utils/nmr/NEFTranslator/NEFTranslator.py b/wwpdb/utils/nmr/NEFTranslator/NEFTranslator.py index a37626c14..e5a0ba7f6 100644 --- a/wwpdb/utils/nmr/NEFTranslator/NEFTranslator.py +++ b/wwpdb/utils/nmr/NEFTranslator/NEFTranslator.py @@ -120,7 +120,7 @@ from packaging import version from operator import itemgetter -from typing import List +from typing import List, Optional, Union from wwpdb.utils.align.alignlib import PairwiseAlign # pylint: disable=no-name-in-module @@ -474,7 +474,7 @@ } -def get_first_sf_tag(sf=None, tag=None) -> str: +def get_first_sf_tag(sf: Optional[pynmrstar.Saveframe] = None, tag: Optional[str] = None) -> str: """ Return the first value of a given saveframe tag. @return: The first tag value, empty string otherwise. """ @@ -490,7 +490,7 @@ def get_first_sf_tag(sf=None, tag=None) -> str: return array[0] if array[0] is not None else '' -def get_idx_msg(idx_tag_ids: List[int], tags: List[str], row) -> str: +def get_idx_msg(idx_tag_ids: List[int], tags: List[str], row: dict) -> str: """ Return description about current index. @author: Masashi Yokochi @return: description @@ -512,7 +512,7 @@ def get_idx_msg(idx_tag_ids: List[int], tags: List[str], row) -> str: return '' -def is_empty_loop(star_data, lp_category: str) -> bool: +def is_empty_loop(star_data: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynmrstar.Loop], lp_category: str) -> bool: """ Return whether one of specified loops is empty loop. @return: True for empty loop exists, False otherwise """ @@ -530,7 +530,7 @@ def is_empty_loop(star_data, lp_category: str) -> bool: return len(star_data) == 0 -def count_non_empty_loops(star_data, lp_category: str) -> int: +def count_non_empty_loops(star_data: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynmrstar.Loop], lp_category: str) -> int: """ Return the number of non-empty loops. @return: the number of non-empty loops. """ @@ -548,7 +548,7 @@ def count_non_empty_loops(star_data, lp_category: str) -> int: return 0 if len(star_data) == 0 else 1 -def get_sf_tag_values_with_empty_loop(star_data, lp_category: str, sf_category: str) -> List[str]: +def get_sf_tag_values_with_empty_loop(star_data: Union[pynmrstar.Entry, pynmrstar.Saveframe, pynmrstar.Loop], lp_category: str, sf_category: str) -> List[str]: """ Return list of saveframe tag values with empty loop. @return: list of saveframe tag values """ diff --git a/wwpdb/utils/nmr/NmrDpReport.py b/wwpdb/utils/nmr/NmrDpReport.py index 7d7b8dbca..b1f0b90ef 100644 --- a/wwpdb/utils/nmr/NmrDpReport.py +++ b/wwpdb/utils/nmr/NmrDpReport.py @@ -98,7 +98,7 @@ import re from operator import itemgetter -from typing import Optional +from typing import Any, Optional try: from wwpdb.utils.nmr.AlignUtil import emptyValue, monDict3, unknownResidue, getPrettyJson @@ -106,7 +106,7 @@ from nmr.AlignUtil import emptyValue, monDict3, unknownResidue, getPrettyJson -def get_value_safe(d=None, key=None) -> Optional[str]: +def get_value_safe(d: Optional[dict] = None, key: Any = None) -> Optional[str]: """ Return value of a given dictionary for a key. @return: value for a key, None otherwise """ diff --git a/wwpdb/utils/nmr/NmrDpUtility.py b/wwpdb/utils/nmr/NmrDpUtility.py index 51fee9ed3..80b084e0d 100644 --- a/wwpdb/utils/nmr/NmrDpUtility.py +++ b/wwpdb/utils/nmr/NmrDpUtility.py @@ -223,7 +223,7 @@ from munkres import Munkres from operator import itemgetter from striprtf.striprtf import rtf_to_text -from typing import List, Tuple, Optional +from typing import Any, List, Tuple, Optional from mmcif.io.IoAdapterPy import IoAdapterPy from wwpdb.utils.align.alignlib import PairwiseAlign # pylint: disable=no-name-in-module @@ -569,7 +569,7 @@ 'nm-res-syb', 'nm-res-ros', 'nm-res-xpl') -def detect_bom(fPath: str, default='utf-8') -> str: +def detect_bom(fPath: str, default: str = 'utf-8') -> str: """ Detect BOM of input file. """ @@ -586,7 +586,7 @@ def detect_bom(fPath: str, default='utf-8') -> str: return default -def convert_codec(inPath: str, outPath: str, in_codec='utf-8', out_codec='utf-8'): +def convert_codec(inPath: str, outPath: str, in_codec: str = 'utf-8', out_codec: str = 'utf-8'): """ Convert codec of input file. """ @@ -701,7 +701,7 @@ def get_type_of_star_file(fPath: str) -> str: pass -def has_key_value(d=None, key=None) -> bool: +def has_key_value(d: Optional[dict] = None, key: Any = None) -> bool: """ Return whether a given dictionary has effective value for a key. @return: True if d[key] has effective value, False otherwise """ @@ -715,7 +715,7 @@ def has_key_value(d=None, key=None) -> bool: return False -def get_first_sf_tag(sf=None, tag=None) -> str: +def get_first_sf_tag(sf: Optional[pynmrstar.Saveframe] = None, tag: Optional[str] = None) -> str: """ Return the first value of a given saveframe tag. @return: The first tag value, empty string otherwise. """ @@ -731,7 +731,7 @@ def get_first_sf_tag(sf=None, tag=None) -> str: return array[0] if array[0] is not None else '' -def set_sf_tag(sf, tag: str, value): +def set_sf_tag(sf: pynmrstar.Saveframe, tag: str, value): """ Set saveframe tag. """ @@ -1062,7 +1062,7 @@ def concat_nmr_restraint_names(content_subtype: Optional[str]) -> str: return ', '.join(f) -def is_peak_list(line: str, has_header=True) -> bool: +def is_peak_list(line: str, has_header: bool = True) -> bool: """ Return whether a given input is derived from peak list in any native format. """ @@ -1082,7 +1082,7 @@ def is_peak_list(line: str, has_header=True) -> bool: return False -def get_peak_list_format(line: str, has_header=True) -> Optional[str]: +def get_peak_list_format(line: str, has_header: bool = True) -> Optional[str]: """ Return peak list format for a given input. """ @@ -1137,7 +1137,7 @@ def get_number_of_dimensions_of_peak_list(file_format: str, line: str) -> Option return None -def is_like_planality_boundary(row, lower_limit_name: str, upper_limit_name: str) -> bool: +def is_like_planality_boundary(row: dict, lower_limit_name: str, upper_limit_name: str) -> bool: """ Return whether boundary conditions like planality restraint. """ @@ -1165,7 +1165,7 @@ def is_like_planality_boundary(row, lower_limit_name: str, upper_limit_name: str return False -def get_atom_name_mapping(lp, list_of_tags: List[List[str]]) -> Optional[List[dict]]: +def get_atom_name_mapping(lp: pynmrstar.Loop, list_of_tags: List[List[str]]) -> Optional[List[dict]]: """ Return atom name mapping history for each comp_id. Each tags should be array of 'comp_id', 'atom_id', and 'atom_name'. """ @@ -29956,7 +29956,7 @@ def __retrieveCoordAssemblyChecker(self): self.__caC = coordAssemblyChecker(self.__verbose, self.__lfh, self.__representative_model_id, self.__representative_alt_id, - self.__cR, None, nmrPolySeq) + self.__cR, self.__ccU, None, nmrPolySeq) if self.__caC is not None and self.__asmChkCachePath is not None: write_as_pickle(self.__caC, self.__asmChkCachePath) diff --git a/wwpdb/utils/nmr/NmrVrptUtility.py b/wwpdb/utils/nmr/NmrVrptUtility.py index 70d1e6d29..e0c9948f0 100644 --- a/wwpdb/utils/nmr/NmrVrptUtility.py +++ b/wwpdb/utils/nmr/NmrVrptUtility.py @@ -96,7 +96,7 @@ def compress_as_gzip_file(inPath: str, outPath: str): ofh.write(line) -def load_from_pickle(file_name: str, default=None) -> Any: +def load_from_pickle(file_name: str, default: Any = None) -> Any: """ Load object from pickle file. """ @@ -1177,7 +1177,7 @@ def __retrieveCoordAssemblyChecker(self): self.__caC = coordAssemblyChecker(self.__verbose, self.__lfh, self.__representative_model_id, self.__representative_alt_id, - self.__cR, None, None) + self.__cR, self.__ccU, None, None) if self.__caC is not None and cache_path: write_as_pickle(self.__caC, cache_path) @@ -1186,7 +1186,7 @@ def __retrieveCoordAssemblyChecker(self): self.__caC = coordAssemblyChecker(self.__verbose, self.__lfh, self.__representative_model_id, self.__representative_alt_id, - self.__cR, None, None, False) + self.__cR, self.__ccU, None, None, False) return True diff --git a/wwpdb/utils/nmr/mr/AmberMRParserListener.py b/wwpdb/utils/nmr/mr/AmberMRParserListener.py index 3b63a927e..03e6aca1b 100644 --- a/wwpdb/utils/nmr/mr/AmberMRParserListener.py +++ b/wwpdb/utils/nmr/mr/AmberMRParserListener.py @@ -530,9 +530,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -574,9 +577,6 @@ def __init__(self, verbose=True, log=sys.stdout, self.__concatHetero = False break - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/AmberMRReader.py b/wwpdb/utils/nmr/mr/AmberMRReader.py index ea194561f..1caae25f9 100644 --- a/wwpdb/utils/nmr/mr/AmberMRReader.py +++ b/wwpdb/utils/nmr/mr/AmberMRReader.py @@ -65,16 +65,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/AmberPTParserListener.py b/wwpdb/utils/nmr/mr/AmberPTParserListener.py index ef1dec71e..95252d77e 100644 --- a/wwpdb/utils/nmr/mr/AmberPTParserListener.py +++ b/wwpdb/utils/nmr/mr/AmberPTParserListener.py @@ -160,9 +160,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC, None, fullCheck=True) + cR, self.__ccU, caC, None, fullCheck=True) self.__polySeqModel = ret['polymer_sequence'] self.__nonPolyModel = ret['non_polymer'] self.__branchedModel = ret['branched'] @@ -175,9 +178,6 @@ def __init__(self, verbose=True, log=sys.stdout, self.__hasBranchedModel = self.__branchedModel is not None and len(self.__branchedModel) > 0 self.__noWaterMol = not self.__hasNonPolyModel or not any(np['comp_id'][0] == 'HOH' for np in self.__nonPolyModel) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/AmberPTReader.py b/wwpdb/utils/nmr/mr/AmberPTReader.py index ef219156c..19c0b27b2 100644 --- a/wwpdb/utils/nmr/mr/AmberPTReader.py +++ b/wwpdb/utils/nmr/mr/AmberPTReader.py @@ -59,16 +59,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/AriaMRParserListener.py b/wwpdb/utils/nmr/mr/AriaMRParserListener.py index 98495323e..0232d25a2 100644 --- a/wwpdb/utils/nmr/mr/AriaMRParserListener.py +++ b/wwpdb/utils/nmr/mr/AriaMRParserListener.py @@ -315,9 +315,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -352,9 +355,6 @@ def __init__(self, verbose=True, log=sys.stdout, else: self.__nonPolySeq = self.__branched - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/AriaMRReader.py b/wwpdb/utils/nmr/mr/AriaMRReader.py index 18ad83ce5..fad5951f7 100644 --- a/wwpdb/utils/nmr/mr/AriaMRReader.py +++ b/wwpdb/utils/nmr/mr/AriaMRReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/BiosymMRParserListener.py b/wwpdb/utils/nmr/mr/BiosymMRParserListener.py index 3d6b2092a..614f6dd37 100644 --- a/wwpdb/utils/nmr/mr/BiosymMRParserListener.py +++ b/wwpdb/utils/nmr/mr/BiosymMRParserListener.py @@ -326,9 +326,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -363,9 +366,6 @@ def __init__(self, verbose=True, log=sys.stdout, else: self.__nonPolySeq = self.__branched - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/BiosymMRReader.py b/wwpdb/utils/nmr/mr/BiosymMRReader.py index c48bb1514..fcb67594e 100644 --- a/wwpdb/utils/nmr/mr/BiosymMRReader.py +++ b/wwpdb/utils/nmr/mr/BiosymMRReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py b/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py index 0193dfb82..04b784d54 100644 --- a/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py +++ b/wwpdb/utils/nmr/mr/CharmmCRDParserListener.py @@ -115,9 +115,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__mrAtomNameMapping = None if mrAtomNameMapping is None or len(mrAtomNameMapping) == 0 else mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC, None, fullCheck=True) + cR, self.__ccU, caC, None, fullCheck=True) self.__polySeqModel = ret['polymer_sequence'] self.__nonPolyModel = ret['non_polymer'] self.__branchedModel = ret['branched'] @@ -129,9 +132,6 @@ def __init__(self, verbose=True, log=sys.stdout, self.__hasBranchedModel = self.__branchedModel is not None and len(self.__branchedModel) > 0 self.__noWaterMol = not self.__hasNonPolyModel or not any(np['comp_id'][0] == 'HOH' for np in self.__nonPolyModel) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CharmmCRDReader.py b/wwpdb/utils/nmr/mr/CharmmCRDReader.py index a8de36b30..d84482812 100644 --- a/wwpdb/utils/nmr/mr/CharmmCRDReader.py +++ b/wwpdb/utils/nmr/mr/CharmmCRDReader.py @@ -57,16 +57,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CharmmMRParserListener.py b/wwpdb/utils/nmr/mr/CharmmMRParserListener.py index 3227d052c..f8bf83d58 100644 --- a/wwpdb/utils/nmr/mr/CharmmMRParserListener.py +++ b/wwpdb/utils/nmr/mr/CharmmMRParserListener.py @@ -409,9 +409,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -448,9 +451,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__largeModel: self.__representativeAsymId = next(c for c in LARGE_ASYM_ID if any(ps for ps in self.__polySeq if ps['auth_chain_id'] == c)) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CharmmMRReader.py b/wwpdb/utils/nmr/mr/CharmmMRReader.py index bfa63a3a1..cbc997396 100644 --- a/wwpdb/utils/nmr/mr/CharmmMRReader.py +++ b/wwpdb/utils/nmr/mr/CharmmMRReader.py @@ -64,16 +64,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CnsMRParserListener.py b/wwpdb/utils/nmr/mr/CnsMRParserListener.py index 474c521cd..bd79bf32d 100644 --- a/wwpdb/utils/nmr/mr/CnsMRParserListener.py +++ b/wwpdb/utils/nmr/mr/CnsMRParserListener.py @@ -516,9 +516,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -577,9 +580,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__largeModel: self.__representativeAsymId = next(c for c in LARGE_ASYM_ID if any(ps for ps in self.__polySeq if ps['auth_chain_id'] == c)) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CnsMRReader.py b/wwpdb/utils/nmr/mr/CnsMRReader.py index fb81568d8..243f6861b 100644 --- a/wwpdb/utils/nmr/mr/CnsMRReader.py +++ b/wwpdb/utils/nmr/mr/CnsMRReader.py @@ -62,16 +62,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CyanaMRParserListener.py b/wwpdb/utils/nmr/mr/CyanaMRParserListener.py index 7281cbd2d..6bc7eecca 100644 --- a/wwpdb/utils/nmr/mr/CyanaMRParserListener.py +++ b/wwpdb/utils/nmr/mr/CyanaMRParserListener.py @@ -427,9 +427,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -468,9 +471,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__hasPolySeq: self.__gapInAuthSeq = any(ps for ps in self.__polySeq if 'gap_in_auth_seq' in ps and ps['gap_in_auth_seq']) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CyanaMRReader.py b/wwpdb/utils/nmr/mr/CyanaMRReader.py index 9bac41ba2..445d4b702 100644 --- a/wwpdb/utils/nmr/mr/CyanaMRReader.py +++ b/wwpdb/utils/nmr/mr/CyanaMRReader.py @@ -63,16 +63,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CyanaNOAParserListener.py b/wwpdb/utils/nmr/mr/CyanaNOAParserListener.py index 3edf11673..bce9e7a67 100644 --- a/wwpdb/utils/nmr/mr/CyanaNOAParserListener.py +++ b/wwpdb/utils/nmr/mr/CyanaNOAParserListener.py @@ -319,9 +319,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -356,9 +359,6 @@ def __init__(self, verbose=True, log=sys.stdout, else: self.__nonPolySeq = self.__branched - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/CyanaNOAReader.py b/wwpdb/utils/nmr/mr/CyanaNOAReader.py index aef95d165..80d2d4491 100644 --- a/wwpdb/utils/nmr/mr/CyanaNOAReader.py +++ b/wwpdb/utils/nmr/mr/CyanaNOAReader.py @@ -62,16 +62,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/DynamoMRParserListener.py b/wwpdb/utils/nmr/mr/DynamoMRParserListener.py index 67aae94b5..898eb957b 100644 --- a/wwpdb/utils/nmr/mr/DynamoMRParserListener.py +++ b/wwpdb/utils/nmr/mr/DynamoMRParserListener.py @@ -368,9 +368,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -408,9 +411,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__hasPolySeq: self.__gapInAuthSeq = any(ps for ps in self.__polySeq if 'gap_in_auth_seq' in ps and ps['gap_in_auth_seq']) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/DynamoMRReader.py b/wwpdb/utils/nmr/mr/DynamoMRReader.py index 0b459d723..63d9a4bbe 100644 --- a/wwpdb/utils/nmr/mr/DynamoMRReader.py +++ b/wwpdb/utils/nmr/mr/DynamoMRReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/GromacsMRParserListener.py b/wwpdb/utils/nmr/mr/GromacsMRParserListener.py index 206225866..e24cfd312 100644 --- a/wwpdb/utils/nmr/mr/GromacsMRParserListener.py +++ b/wwpdb/utils/nmr/mr/GromacsMRParserListener.py @@ -248,9 +248,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -276,9 +279,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__hasPolySeq: self.__gapInAuthSeq = any(ps for ps in self.__polySeq if 'gap_in_auth_seq' in ps and ps['gap_in_auth_seq']) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/GromacsMRReader.py b/wwpdb/utils/nmr/mr/GromacsMRReader.py index d956d23cf..d712ecaa3 100644 --- a/wwpdb/utils/nmr/mr/GromacsMRReader.py +++ b/wwpdb/utils/nmr/mr/GromacsMRReader.py @@ -63,16 +63,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/GromacsPTParserListener.py b/wwpdb/utils/nmr/mr/GromacsPTParserListener.py index 869db6b0d..3c9b3c257 100644 --- a/wwpdb/utils/nmr/mr/GromacsPTParserListener.py +++ b/wwpdb/utils/nmr/mr/GromacsPTParserListener.py @@ -133,9 +133,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__mrAtomNameMapping = None if mrAtomNameMapping is None or len(mrAtomNameMapping) == 0 else mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC, None, fullCheck=True) + cR, self.__ccU, caC, None, fullCheck=True) self.__polySeqModel = ret['polymer_sequence'] self.__nonPolyModel = ret['non_polymer'] self.__branchedModel = ret['branched'] @@ -148,9 +151,6 @@ def __init__(self, verbose=True, log=sys.stdout, self.__hasBranchedModel = self.__branchedModel is not None and len(self.__branchedModel) > 0 self.__noWaterMol = not self.__hasNonPolyModel or not any(np['comp_id'][0] == 'HOH' for np in self.__nonPolyModel) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/GromacsPTReader.py b/wwpdb/utils/nmr/mr/GromacsPTReader.py index c3ebdaa0f..b3a7b35a4 100644 --- a/wwpdb/utils/nmr/mr/GromacsPTReader.py +++ b/wwpdb/utils/nmr/mr/GromacsPTReader.py @@ -59,16 +59,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/IsdMRParserListener.py b/wwpdb/utils/nmr/mr/IsdMRParserListener.py index 5f66f8be7..5d7bf5d92 100644 --- a/wwpdb/utils/nmr/mr/IsdMRParserListener.py +++ b/wwpdb/utils/nmr/mr/IsdMRParserListener.py @@ -296,9 +296,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -333,9 +336,6 @@ def __init__(self, verbose=True, log=sys.stdout, else: self.__nonPolySeq = self.__branched - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/IsdMRReader.py b/wwpdb/utils/nmr/mr/IsdMRReader.py index 6ab6904cd..3e34de4a1 100644 --- a/wwpdb/utils/nmr/mr/IsdMRReader.py +++ b/wwpdb/utils/nmr/mr/IsdMRReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/ParserListenerUtil.py b/wwpdb/utils/nmr/mr/ParserListenerUtil.py index 38d6a52b4..48555aae2 100644 --- a/wwpdb/utils/nmr/mr/ParserListenerUtil.py +++ b/wwpdb/utils/nmr/mr/ParserListenerUtil.py @@ -22,7 +22,7 @@ import pynmrstar from operator import itemgetter -from typing import Any, List, Set, Tuple, Optional +from typing import Any, List, IO, Set, Tuple, Optional from wwpdb.utils.align.alignlib import PairwiseAlign # pylint: disable=no-name-in-module @@ -41,7 +41,6 @@ assignPolymerSequence, getScoreOfSeqAlign, getOneLetterCode) - from wwpdb.utils.nmr.ChemCompUtil import ChemCompUtil except ImportError: from nmr.io.CifReader import SYMBOLS_ELEMENT from nmr.AlignUtil import (monDict3, @@ -57,7 +56,6 @@ assignPolymerSequence, getScoreOfSeqAlign, getOneLetterCode) - from nmr.ChemCompUtil import ChemCompUtil MAX_ERROR_REPORT = 1 MAX_ERR_LINENUM_REPORT = 20 @@ -2144,7 +2142,9 @@ def stripQuot(string: str) -> str: return _string -def translateToStdAtomName(atomId: str, refCompId=None, refAtomIdList=None, ccU=None, unambig=False) -> str: +def translateToStdAtomName(atomId: str, refCompId: Optional[str] = None, + refAtomIdList: Optional[List[str]] = None, + ccU=None, unambig: bool = False) -> str: """ Translate software specific atom nomenclature for standard residues to the CCD one. """ @@ -2879,7 +2879,7 @@ def translateToStdAtomName(atomId: str, refCompId=None, refAtomIdList=None, ccU= return atomId -def translateToStdAtomNameOfDmpc(atomId: str, dmpcNameSystemId=-1) -> str: +def translateToStdAtomNameOfDmpc(atomId: str, dmpcNameSystemId: int = -1) -> str: """ Translate software specific atom nomenclature for DMPC to CCD PX4. """ @@ -3422,7 +3422,7 @@ def translateToStdAtomNameOfDmpc(atomId: str, dmpcNameSystemId=-1) -> str: return atomId -def translateToStdResName(compId: str, refCompId=None, ccU=None) -> str: +def translateToStdResName(compId: str, refCompId: Optional[str] = None, ccU=None) -> str: """ Translate software specific residue name to standard residue name of CCD. """ @@ -3594,11 +3594,11 @@ def translateToLigandName(compId: str, refCompId: str, ccU) -> str: return compId -def coordAssemblyChecker(verbose=True, log=sys.stdout, - representativeModelId=REPRESENTATIVE_MODEL_ID, - representativeAltId=REPRESENTATIVE_ALT_ID, - cR=None, prevResult=None, nmrPolySeq=None, - fullCheck=True) -> dict: +def coordAssemblyChecker(verbose: bool = True, log: IO = sys.stdout, + representativeModelId: int = REPRESENTATIVE_MODEL_ID, + representativeAltId: str = REPRESENTATIVE_ALT_ID, + cR=None, ccU=None, prevResult: dict = None, + nmrPolySeq: Optional[list] = None, fullCheck: bool = True) -> dict: """ Check assembly of the coordinates for MR/PT parser listener. """ @@ -3749,7 +3749,6 @@ def to_np_array(a): if nmrPolySeq is not None: pA = PairwiseAlign() - ccU = ChemCompUtil() seqAlign, _ = alignPolymerSequence(pA, polySeq, nmrPolySeq) chainAssign, _ = assignPolymerSequence(pA, ccU, 'nmr-star', polySeq, nmrPolySeq, seqAlign) @@ -5523,7 +5522,7 @@ def to_np_array(a): 'split_ligand': splitLigand} -def extendCoordChainsForExactNoes(modelChainIdExt, +def extendCoordChainsForExactNoes(modelChainIdExt: dict, polySeq: List[dict], altPolySeq: List[dict], coordAtomSite: Optional[dict], coordUnobsRes: Optional[dict], authToLabelSeq: Optional[dict], authToStarSeq: Optional[dict], @@ -5699,7 +5698,7 @@ def isIdenticalRestraint(atoms: List[dict], nefT=None) -> bool: return False -def isLongRangeRestraint(atoms: List[dict], polySeq=None) -> bool: +def isLongRangeRestraint(atoms: List[dict], polySeq: Optional[List[dict]] = None) -> bool: """ Return whether restraint is neither an intra residue nor sequential residue restraint. """ @@ -5860,7 +5859,7 @@ def guessCompIdFromAtomId(atomIds: List[str], polySeq: List[dict], nefT) -> List return list(candidates) -def guessCompIdFromAtomIdWoLimit(atomIds: List[str], polySeq: List[dict], nefT, isPolySeq=True) -> List[str]: +def guessCompIdFromAtomIdWoLimit(atomIds: List[str], polySeq: List[dict], nefT, isPolySeq: bool = True) -> List[str]: """ Try to find candidate comp_id that matches with a given atom_id. """ @@ -6000,9 +5999,11 @@ def isAmbigAtomSelection(atoms: List[dict], csStat) -> bool: def getTypeOfDihedralRestraint(polypeptide: bool, polynucleotide: bool, carbohydrates: bool, - atoms: List[dict], planeLike: bool, cR=None, ccU=None, - representativeModelId=REPRESENTATIVE_MODEL_ID, representativeAltId=REPRESENTATIVE_ALT_ID, - modelNumName='PDB_model_num') -> Optional[str]: + atoms: List[dict], planeLike: bool, + cR=None, ccU=None, + representativeModelId: int = REPRESENTATIVE_MODEL_ID, + representativeAltId: str = REPRESENTATIVE_ALT_ID, + modelNumName: str = 'PDB_model_num') -> Optional[str]: """ Return type of dihedral angle restraint. """ @@ -6565,8 +6566,9 @@ def startsWithPdbRecord(line: str) -> bool: def isCyclicPolymer(cR, polySeq: List[dict], authAsymId: str, - representativeModelId=REPRESENTATIVE_MODEL_ID, representativeAltId=REPRESENTATIVE_ALT_ID, - modelNumName='PDB_model_num') -> bool: + representativeModelId: int = REPRESENTATIVE_MODEL_ID, + representativeAltId: str = REPRESENTATIVE_ALT_ID, + modelNumName: str = 'PDB_model_num') -> bool: """ Return whether a given chain is cyclic polymer based on coordinate annotation. """ @@ -6653,8 +6655,9 @@ def isCyclicPolymer(cR, polySeq: List[dict], authAsymId: str, def isStructConn(cR, authAsymId1: str, authSeqId1: int, authAtomId1: str, authAsymId2: str, authSeqId2: int, authAtomId2: str, - representativeModelId=REPRESENTATIVE_MODEL_ID, representativeAltId=REPRESENTATIVE_ALT_ID, - modelNumName='PDB_model_num') -> bool: + representativeModelId: int = REPRESENTATIVE_MODEL_ID, + representativeAltId: str = REPRESENTATIVE_ALT_ID, + modelNumName: str = 'PDB_model_num') -> bool: """ Return whether a given atom pair is structurally connected. """ @@ -6751,8 +6754,10 @@ def isStructConn(cR, authAsymId1: str, authSeqId1: int, authAtomId1: str, return struct_conn[0]['conn_type_id'] not in emptyValue -def getCoordBondLength(cR, asymId1: str, seqId1: int, atomId1: str, asymId2: str, seqId2: int, atomId2: str, - representativeAltId=REPRESENTATIVE_ALT_ID, modelNumName='PDB_model_num', labelScheme=True) -> Optional[List[dict]]: +def getCoordBondLength(cR, asymId1: str, seqId1: int, atomId1: str, + asymId2: str, seqId2: int, atomId2: str, + representativeAltId: int = REPRESENTATIVE_ALT_ID, + modelNumName: str = 'PDB_model_num', labelScheme: bool = True) -> Optional[List[dict]]: """ Return the bond length of given two CIF atoms. @return: the bond length """ @@ -6849,7 +6854,7 @@ def getMetalCoordOf(cR, authSeqId: int, authCompId: str, metalId: str) -> Tuple[ return None, None -def getRestraintName(mrSubtype: str, title=False) -> str: +def getRestraintName(mrSubtype: str, title: bool = False) -> str: """ Return human-readable restraint name for a given restraint subtype. """ @@ -6967,7 +6972,7 @@ def contentSubtypeOf(mrSubtype: str) -> str: raise KeyError(f'Internal restraint subtype {mrSubtype!r} is not defined.') -def incListIdCounter(mrSubtype: str, listIdCounter: dict, reduced=True) -> dict: +def incListIdCounter(mrSubtype: str, listIdCounter: dict, reduced: bool = True) -> dict: """ Increment list id counter for a given internal restraint subtype (default)/content subtype (reduced=False). """ @@ -7009,7 +7014,7 @@ def incListIdCounter(mrSubtype: str, listIdCounter: dict, reduced=True) -> dict: return listIdCounter -def decListIdCounter(mrSubtype: str, listIdCounter: dict, reduced=True) -> dict: +def decListIdCounter(mrSubtype: str, listIdCounter: dict, reduced: bool = True) -> dict: """ Decrement list id counter for a given internal restraint subtype (default)/content subtype (reduced=False). """ @@ -7051,9 +7056,11 @@ def decListIdCounter(mrSubtype: str, listIdCounter: dict, reduced=True) -> dict: return listIdCounter -def getSaveframe(mrSubtype: str, sf_framecode: str, listId=None, entryId=None, fileName=None, - constraintType=None, potentialType=None, - rdcCode=None, alignCenter=None, cyanaParameter=None, reduced=True): +def getSaveframe(mrSubtype: str, sf_framecode: str, + listId: Optional[int] = None, entryId: Optional[str] = None, fileName: Optional[str] = None, + constraintType: Optional[str] = None, potentialType: Optional[str] = None, + rdcCode: Optional[str] = None, alignCenter: Optional[dict] = None, + cyanaParameter: Optional[dict] = None, reduced: bool = True) -> Optional[pynmrstar.Saveframe]: """ Return pynmrstar saveframe for a given internal restraint subtype (default)/content subtype (reduced=False). @return: pynmrstar saveframe """ @@ -7142,7 +7149,7 @@ def getSaveframe(mrSubtype: str, sf_framecode: str, listId=None, entryId=None, f return sf -def getLoop(mrSubtype: str, reduced=True, hasInsCode=False): +def getLoop(mrSubtype: str, reduced: bool = True, hasInsCode: bool = False) -> Optional[pynmrstar.Loop]: """ Return pynmrstart loop for a given internal restraint subtype (default)/content subtype (reduced=False).. @return: pynmrstar loop """ @@ -7174,7 +7181,7 @@ def getLoop(mrSubtype: str, reduced=True, hasInsCode=False): return lp -def getAuxLoops(mrSubtype: str): +def getAuxLoops(mrSubtype: str) -> Optional[List[pynmrstar.Loop]]: """ Return pynmrstart auxiliary loops for a given internal restraint subtype. @return: pynmrstar loop """ @@ -7206,7 +7213,7 @@ def getAuxLoops(mrSubtype: str): return aux_lps -def getPkLoop(pkSubtype: str): +def getPkLoop(pkSubtype: str) -> Optional[pynmrstar.Loop]: """ Return pynmrstart peak_row_format loop for a given internal peak subtype @return: pynmrstar loop """ @@ -7233,7 +7240,7 @@ def getPkLoop(pkSubtype: str): def getStarAtom(authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], offsetHolder: dict, - atom: List[dict], aux_atom=None, asis=False) -> Optional[str]: + atom: List[dict], aux_atom: Optional[dict] = None, asis: bool = False) -> Optional[str]: """ Return NMR-STAR sequence including entity ID for a given auth atom of the cooridnates. @return: a dictionary of NMR-STAR sequence/entity, None otherwise """ @@ -7413,9 +7420,12 @@ def getInsCode(authToInsCode: Optional[dict], offsetHolder: dict, atom: List[dic def getRow(mrSubtype: str, id: int, indexId: int, combinationId: Optional[int], memberId: Optional[int], code: Optional[str], listId: int, entryId: str, dstFunc: dict, - authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], authToInsCode: Optional[dict], offsetHolder: dict, - atom1: dict, atom2=None, atom3=None, atom4=None, atom5=None, - asis1=False, asis2=False, asis3=False, asis4=False, asis5=False) -> List[Any]: + authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], + authToInsCode: Optional[dict], offsetHolder: dict, + atom1: dict, atom2: Optional[dict] = None, atom3: Optional[dict] = None, + atom4: Optional[dict] = None, atom5: Optional[dict] = None, + asis1: bool = False, asis2: bool = False, asis3: bool = False, + asis4: bool = False, asis5: bool = False) -> Optional[List[Any]]: """ Return row data for a given internal restraint subtype. @return: data array """ @@ -7913,10 +7923,12 @@ def getRow(mrSubtype: str, id: int, indexId: int, def getPkRow(pkSubtype: str, id: int, indexId: int, listId: int, entryId: str, dstFunc: dict, authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], offsetHolder: dict, - atom1=None, atom2=None, atom3=None, atom4=None, - asis1=False, asis2=False, asis3=False, asis4=False, - ambig_code1=None, ambig_code2=None, ambig_code3=None, ambig_code4=None, - details=None) -> List[Any]: + atom1: Optional[dict] = None, atom2: Optional[dict] = None, + atom3: Optional[dict] = None, atom4: Optional[dict] = None, + asis1: bool = False, asis2: bool = False, asis3: bool = False, asis4: bool = False, + ambig_code1: Optional[int] = None, ambig_code2: Optional[int] = None, + ambig_code3: Optional[int] = None, ambig_code4: Optional[int] = None, + details: Optional[str] = None) -> Optional[List[Any]]: """ Return row data for a given internal peak subtype. @return: data array """ @@ -7941,7 +7953,8 @@ def getPkRow(pkSubtype: str, id: int, indexId: int, star_atom1 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom1, atom2, asis=asis1) if star_atom1 is None: star_atom1 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom1, asis=asis1) - atom1['atom_id'] = atom1['auth_atom_id'] + if ambig_code1 is not None: + atom1['atom_id'] = atom1['auth_atom_id'] if atom2 is not None: if 'asis' in atom2: @@ -7949,7 +7962,8 @@ def getPkRow(pkSubtype: str, id: int, indexId: int, star_atom2 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom2, atom1, asis=asis2) if star_atom2 is None: star_atom2 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom2, asis=asis2) - atom2['atom_id'] = atom2['auth_atom_id'] + if ambig_code2 is not None: + atom2['atom_id'] = atom2['auth_atom_id'] if atom3 is not None: if 'asis' in atom3: @@ -7957,7 +7971,8 @@ def getPkRow(pkSubtype: str, id: int, indexId: int, star_atom3 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom3, atom1, asis=asis3) if star_atom3 is None: star_atom3 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom3, asis=asis3) - atom3['atom_id'] = atom3['auth_atom_id'] + if ambig_code3 is not None: + atom3['atom_id'] = atom3['auth_atom_id'] if atom4 is not None: if 'asis' in atom4: @@ -7965,7 +7980,8 @@ def getPkRow(pkSubtype: str, id: int, indexId: int, star_atom4 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom4, atom1, asis=asis4) if star_atom4 is None: star_atom4 = getStarAtom(authToStarSeq, authToOrigSeq, offsetHolder, atom4, asis=asis4) - atom4['atom_id'] = atom4['auth_atom_id'] + if ambig_code4 is not None: + atom4['atom_id'] = atom4['auth_atom_id'] row[key_size] = indexId @@ -8049,12 +8065,12 @@ def getPkRow(pkSubtype: str, id: int, indexId: int, return row -def getMaxEffDigits(str_list: List[str]) -> int: +def getMaxEffDigits(vals: List[str]) -> int: """ Return maximum effective precision of float strings. """ max_eff_digits = 0 - for val in str_list: + for val in vals: if '.' in val: period = val.index('.') last = len(val) - 1 @@ -8066,15 +8082,15 @@ def getMaxEffDigits(str_list: List[str]) -> int: return max_eff_digits -def roundString(string: str, max_eff_digits: int) -> str: +def roundString(string: str, maxEffDigits: int) -> str: """ Return rounded float string for a given maximum effective precision. """ if '.' in string: first_digit = string.index('.') + 1 eff_digits = len(string) - first_digit - if 0 < max_eff_digits < eff_digits: - return string[0:first_digit + max_eff_digits] + if 0 < maxEffDigits < eff_digits: + return string[0:first_digit + maxEffDigits] return string[0:first_digit + 1] return string @@ -8190,7 +8206,8 @@ def getDstFuncAsNoe() -> dict: def getRowForStrMr(contentSubtype: str, id: int, indexId: int, memberId: Optional[int], code: Optional[str], listId: int, entryId: str, originalTagNames: List[str], originalRow: List[Any], - authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], authToInsCode: Optional[dict], offsetHolder: dict, + authToStarSeq: Optional[dict], authToOrigSeq: Optional[dict], + authToInsCode: Optional[dict], offsetHolder: dict, atoms: List[dict], annotationMode: bool) -> List[Any]: """ Return row data for a given constraint subtype and corresponding NMR-STAR row. @return: data array @@ -9182,7 +9199,7 @@ def getRowValue(tag): return row -def getAuxRow(mrSubtype: str, catName: str, listId: int, entryId: str, inDict: dict) -> List[Any]: +def getAuxRow(mrSubtype: str, catName: str, listId: int, entryId: str, inDict: dict) -> Optional[List[Any]]: """ Return aux row data for a given category. @return: data array """ @@ -9215,7 +9232,8 @@ def getAuxRow(mrSubtype: str, catName: str, listId: int, entryId: str, inDict: d return row -def assignCoordPolymerSequenceWithChainId(caC, nefT, refChainId: str, seqId: int, compId: str, atomId: str +def assignCoordPolymerSequenceWithChainId(caC: dict, nefT, + refChainId: str, seqId: int, compId: str, atomId: str ) -> Tuple[List[Tuple[str, int, str, bool]], str]: """ Assign polymer sequences of the coordinates. @return possible assignments to the coordinate, warning message (None for valid case) @@ -9407,11 +9425,11 @@ def assignCoordPolymerSequenceWithChainId(caC, nefT, refChainId: str, seqId: int return list(chainAssign), warningMessage -def selectCoordAtoms(cR, caC, nefT, chainAssign: List[Tuple[str, int, str, bool]], +def selectCoordAtoms(cR, caC: dict, nefT, chainAssign: List[Tuple[str, int, str, bool]], authChainId: str, seqId: int, compId: str, atomId: str, authAtomId: str, - allowAmbig=True, enableWarning=True, preferAuthAtomName=False, - representativeModelId=REPRESENTATIVE_MODEL_ID, representativeAltId=REPRESENTATIVE_ALT_ID, - modelNumName='PDB_model_num', offset=1) -> Tuple[List[dict], str]: + allowAmbig: bool = True, enableWarning: bool = True, preferAuthAtomName: bool = False, + representativeModelId: int = REPRESENTATIVE_MODEL_ID, representativeAltId: str = REPRESENTATIVE_ALT_ID, + modelNumName: str = 'PDB_model_num', offset: int = 1) -> Tuple[List[dict], str]: """ Select atoms of the coordinates. @return atom selection, warning mesage (None for valid case) """ @@ -9600,23 +9618,24 @@ def selectCoordAtoms(cR, caC, nefT, chainAssign: List[Tuple[str, int, str, bool] return atomSelection, warningMessage -def getRealChainSeqId(ccU, polySeq: dict, seqId: int, compId=None) -> Tuple[str, int]: +def getRealChainSeqId(ccU, ps: dict, seqId: int, compId: Optional[str] = None) -> Tuple[str, int]: """ Return effective sequence key according to polymer sequence of the coordinates. @return: sequence key """ if compId is not None: compId = translateToStdResName(compId, ccU=ccU) - if seqId in polySeq['auth_seq_id']: + if seqId in ps['auth_seq_id']: if compId is None: - return polySeq['auth_chain_id'], seqId - idx = polySeq['auth_seq_id'].index(seqId) - if compId in (polySeq['comp_id'][idx], polySeq['auth_comp_id'][idx]): - return polySeq['auth_chain_id'], seqId - return polySeq['auth_chain_id'], seqId + return ps['auth_chain_id'], seqId + idx = ps['auth_seq_id'].index(seqId) + if compId in (ps['comp_id'][idx], ps['auth_comp_id'][idx]): + return ps['auth_chain_id'], seqId + return ps['auth_chain_id'], seqId -def getCoordAtomSiteOf(caC, authChainId: str, chainId: str, seqId: int, compId=None, asis=True) -> Tuple[Tuple[str, int], dict]: +def getCoordAtomSiteOf(caC: dict, authChainId: str, chainId: str, seqId: int, + compId: Optional[str] = None, asis: bool = True) -> Tuple[Tuple[str, int], dict]: """ Return sequence key and its atom list of the coordinates. @return: sequence key, atom list in the sequence """ @@ -9650,8 +9669,8 @@ def getCoordAtomSiteOf(caC, authChainId: str, chainId: str, seqId: int, compId=N return seqKey, coordAtomSite -def testCoordAtomIdConsistency(caC, ccU, authChainId: str, chainId: str, seqId: int, compId: str, atomId: str, - seqKey: Tuple[str, int], coordAtomSite: Optional[dict], enableWarning=True) -> Optional[str]: +def testCoordAtomIdConsistency(caC: dict, ccU, authChainId: str, chainId: str, seqId: int, compId: str, atomId: str, + seqKey: Tuple[str, int], coordAtomSite: Optional[dict], enableWarning: bool = True) -> Optional[str]: """ Check existence of specified atom in the coordinates. @return: waring message (None for valid case) """ @@ -9728,7 +9747,7 @@ def testCoordAtomIdConsistency(caC, ccU, authChainId: str, chainId: str, seqId: return None -def getDistConstraintType(atomSelectionSet: List[List[dict]], dstFunc: dict, csStat, hint='.') -> Optional[str]: +def getDistConstraintType(atomSelectionSet: List[List[dict]], dstFunc: dict, csStat, hint: str = '.') -> Optional[str]: """ Return distance constraint type for _Constraint_file.Constraint_type tag value. @return 'hydrogen bond', 'disulfide bond', etc., None for unclassified distance constraint """ @@ -9940,7 +9959,7 @@ def getPdbxNmrSoftwareName(name: str) -> str: return name # 'ARIA', 'CHARMM', 'CNS', 'CYANA', 'DYNAMO', 'PALES', 'TALOS', 'GROMACS', 'SYBYL', 'XEASY' -def hasKeyValue(d=None, key=None) -> bool: +def hasKeyValue(d: Optional[dict] = None, key: Any = None) -> bool: """ Return whether a given dictionary has effective value for a key. @return: True if d[key] has effective value, False otherwise """ @@ -9959,7 +9978,7 @@ def extractPeakAssignment(numOfDim: int, string: str, segIdSet: Set[str], compId """ Extract peak assignment from a given string. """ - if numOfDim not in (2, 3, 4): + if numOfDim not in (1, 2, 3, 4): return None _str = PEAK_ASSIGNMENT_SEPARATOR_PAT.sub(' ', string.upper()).split() diff --git a/wwpdb/utils/nmr/mr/RosettaMRParserListener.py b/wwpdb/utils/nmr/mr/RosettaMRParserListener.py index 0297beaa3..468434b28 100644 --- a/wwpdb/utils/nmr/mr/RosettaMRParserListener.py +++ b/wwpdb/utils/nmr/mr/RosettaMRParserListener.py @@ -352,9 +352,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -390,9 +393,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__hasPolySeq: self.__gapInAuthSeq = any(ps for ps in self.__polySeq if 'gap_in_auth_seq' in ps and ps['gap_in_auth_seq']) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/RosettaMRReader.py b/wwpdb/utils/nmr/mr/RosettaMRReader.py index f593b7030..6ce7bcfd1 100644 --- a/wwpdb/utils/nmr/mr/RosettaMRReader.py +++ b/wwpdb/utils/nmr/mr/RosettaMRReader.py @@ -62,16 +62,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/SybylMRParserListener.py b/wwpdb/utils/nmr/mr/SybylMRParserListener.py index 4490d1fa5..296a3b5cc 100644 --- a/wwpdb/utils/nmr/mr/SybylMRParserListener.py +++ b/wwpdb/utils/nmr/mr/SybylMRParserListener.py @@ -296,9 +296,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -333,9 +336,6 @@ def __init__(self, verbose=True, log=sys.stdout, else: self.__nonPolySeq = self.__branched - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/SybylMRReader.py b/wwpdb/utils/nmr/mr/SybylMRReader.py index 39583639a..73326bd88 100644 --- a/wwpdb/utils/nmr/mr/SybylMRReader.py +++ b/wwpdb/utils/nmr/mr/SybylMRReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/XplorMRParserListener.py b/wwpdb/utils/nmr/mr/XplorMRParserListener.py index dc176385f..476cbd244 100644 --- a/wwpdb/utils/nmr/mr/XplorMRParserListener.py +++ b/wwpdb/utils/nmr/mr/XplorMRParserListener.py @@ -615,9 +615,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.__cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.__ccU, caC) self.__modelNumName = ret['model_num_name'] self.__authAsymId = ret['auth_asym_id'] self.__authSeqId = ret['auth_seq_id'] @@ -676,9 +679,6 @@ def __init__(self, verbose=True, log=sys.stdout, if self.__largeModel: self.__representativeAsymId = next(c for c in LARGE_ASYM_ID if any(ps for ps in self.__polySeq if ps['auth_chain_id'] == c)) - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/mr/XplorMRReader.py b/wwpdb/utils/nmr/mr/XplorMRReader.py index 9b1a20654..4cd077f9f 100644 --- a/wwpdb/utils/nmr/mr/XplorMRReader.py +++ b/wwpdb/utils/nmr/mr/XplorMRReader.py @@ -63,16 +63,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/pk/BasePKParserListener.py b/wwpdb/utils/nmr/pk/BasePKParserListener.py index cd87fe400..8057055b7 100644 --- a/wwpdb/utils/nmr/pk/BasePKParserListener.py +++ b/wwpdb/utils/nmr/pk/BasePKParserListener.py @@ -3,7 +3,7 @@ # Date: 03-Dec-2024 # # Updates: -""" ParserLister base class. +""" ParserLister base class for any peak list file. @author: Masashi Yokochi """ import sys @@ -11,12 +11,12 @@ import copy import collections -from typing import List, Tuple, Optional +from typing import List, IO, Tuple, Optional from wwpdb.utils.align.alignlib import PairwiseAlign # pylint: disable=no-name-in-module try: - from wwpdb.utils.nmr.io.CifReader import SYMBOLS_ELEMENT + from wwpdb.utils.nmr.io.CifReader import (CifReader, SYMBOLS_ELEMENT) from wwpdb.utils.nmr.mr.ParserListenerUtil import (coordAssemblyChecker, translateToStdResName, translateToStdAtomName, @@ -62,7 +62,7 @@ retrieveRemappedNonPoly, retrieveOriginalSeqIdFromMRMap) except ImportError: - from nmr.io.CifReader import SYMBOLS_ELEMENT + from nmr.io.CifReader import (CifReader, SYMBOLS_ELEMENT) from nmr.mr.ParserListenerUtil import (coordAssemblyChecker, translateToStdResName, translateToStdAtomName, @@ -245,12 +245,13 @@ class BasePKParserListener(): __cachedDictForStarAtom = {} - def __init__(self, verbose=True, log=sys.stdout, - representativeModelId=REPRESENTATIVE_MODEL_ID, - representativeAltId=REPRESENTATIVE_ALT_ID, - mrAtomNameMapping=None, - cR=None, caC=None, ccU=None, csStat=None, nefT=None, - reasons=None): + def __init__(self, verbose: bool = True, log: IO = sys.stdout, + representativeModelId: int = REPRESENTATIVE_MODEL_ID, + representativeAltId: str = REPRESENTATIVE_ALT_ID, + mrAtomNameMapping: Optional[List[dict]] = None, + cR: Optional[CifReader] = None, caC: Optional[dict] = None, ccU: Optional[ChemCompUtil] = None, + csStat: Optional[BMRBChemShiftStat] = None, nefT: Optional[NEFTranslator] = None, + reasons: Optional[dict] = None): self.representativeModelId = representativeModelId self.representativeAltId = representativeAltId @@ -259,9 +260,12 @@ def __init__(self, verbose=True, log=sys.stdout, self.cR = cR self.__hasCoord = cR is not None + # CCD accessing utility + self.ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if self.__hasCoord: ret = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, caC) + cR, self.ccU, caC) self.modelNumName = ret['model_num_name'] self.__authSeqId = ret['auth_seq_id'] self.polySeq = ret['polymer_sequence'] @@ -325,9 +329,6 @@ def __init__(self, verbose=True, log=sys.stdout, elif poly_type == 'polyribonucleotide': self.polyRibonucleotide = True - # CCD accessing utility - self.ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.csStat = BMRBChemShiftStat(verbose, log, self.ccU) if csStat is None else csStat @@ -370,6 +371,8 @@ def setEntryId(self, entryId: str): self.entryId = entryId def validatePeak2D(self, index: int, pos_1: float, pos_2: float, + pos_unc_1: Optional[float], pos_unc_2: Optional[float], + lw_1: Optional[float], lw_2: Optional[float], pos_hz_1: Optional[float], pos_hz_2: Optional[float], lw_hz_1: Optional[float], lw_hz_2: Optional[float], height: Optional[str], height_uncertainty: Optional[str], volume: Optional[str]) -> Optional[dict]: @@ -388,7 +391,17 @@ def validatePeak2D(self, index: int, pos_1: float, pos_2: float, "Neither height nor volume value is set.") return None - if lw_hz_1 is not None or lw_hz_2 is not None: + if pos_unc_1 is not None: + dstFunc['position_uncertainty_1'] = str(pos_unc_1) + if pos_unc_2 is not None: + dstFunc['position_uncertainty_2'] = str(pos_unc_2) + + if lw_1 is not None: + dstFunc['line_width_1'] = str(lw_1) + if lw_2 is not None: + dstFunc['line_width_2'] = str(lw_2) + + if (lw_1 is None and lw_hz_1 is not None) or (lw_2 is None and lw_hz_2 is not None): cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] if lw_hz_1 is not None: @@ -410,6 +423,8 @@ def validatePeak2D(self, index: int, pos_1: float, pos_2: float, return dstFunc def validatePeak3D(self, index: int, pos_1: float, pos_2: float, pos_3: float, + pos_unc_1: Optional[float], pos_unc_2: Optional[float], pos_unc_3: Optional[float], + lw_1: Optional[float], lw_2: Optional[float], lw_3: Optional[float], pos_hz_1: Optional[float], pos_hz_2: Optional[float], pos_hz_3: Optional[float], lw_hz_1: Optional[float], lw_hz_2: Optional[float], lw_hz_3: Optional[float], height: Optional[str], height_uncertainty: Optional[str], volume: Optional[str]) -> Optional[dict]: @@ -428,6 +443,24 @@ def validatePeak3D(self, index: int, pos_1: float, pos_2: float, pos_3: float, "Neither height nor volume value is set.") return None + if pos_unc_1 is not None: + dstFunc['position_uncertainty_1'] = str(pos_unc_1) + if pos_unc_2 is not None: + dstFunc['position_uncertainty_2'] = str(pos_unc_2) + if pos_unc_3 is not None: + dstFunc['position_uncertainty_3'] = str(pos_unc_3) + + if lw_1 is not None: + dstFunc['line_width_1'] = str(lw_1) + if lw_2 is not None: + dstFunc['line_width_2'] = str(lw_2) + if lw_3 is not None: + dstFunc['line_width_3'] = str(lw_3) + + if (lw_1 is None and lw_hz_1 is not None) or (lw_2 is None and lw_hz_2 is not None)\ + or (lw_3 is None and lw_hz_3 is not None): + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + if lw_hz_1 is not None or lw_hz_2 is not None or lw_hz_3 is not None: cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] @@ -458,6 +491,8 @@ def validatePeak3D(self, index: int, pos_1: float, pos_2: float, pos_3: float, return dstFunc def validatePeak4D(self, index: int, pos_1: float, pos_2: float, pos_3: float, pos_4: float, + pos_unc_1: Optional[float], pos_unc_2: Optional[float], pos_unc_3: Optional[float], pos_unc_4: Optional[float], + lw_1: Optional[float], lw_2: Optional[float], lw_3: Optional[float], lw_4: Optional[float], pos_hz_1: Optional[float], pos_hz_2: Optional[float], pos_hz_3: Optional[float], pos_hz_4: Optional[float], lw_hz_1: Optional[float], lw_hz_2: Optional[float], lw_hz_3: Optional[float], lw_hz_4: Optional[float], height: Optional[str], height_uncertainty: Optional[str], volume: Optional[str]) -> Optional[dict]: @@ -476,7 +511,26 @@ def validatePeak4D(self, index: int, pos_1: float, pos_2: float, pos_3: float, p "Neither height nor volume value is set.") return None - if lw_hz_1 is not None or lw_hz_2 is not None or lw_hz_3 is not None or lw_hz_4 is not None: + if pos_unc_1 is not None: + dstFunc['position_uncertainty_1'] = str(pos_unc_1) + if pos_unc_2 is not None: + dstFunc['position_uncertainty_2'] = str(pos_unc_2) + if pos_unc_3 is not None: + dstFunc['position_uncertainty_3'] = str(pos_unc_3) + if pos_unc_4 is not None: + dstFunc['position_uncertainty_4'] = str(pos_unc_4) + + if lw_1 is not None: + dstFunc['line_width_1'] = str(lw_1) + if lw_2 is not None: + dstFunc['line_width_2'] = str(lw_2) + if lw_3 is not None: + dstFunc['line_width_3'] = str(lw_3) + if lw_4 is not None: + dstFunc['line_width_4'] = str(lw_4) + + if (lw_1 is None and lw_hz_1 is not None) or (lw_2 is None and lw_hz_2 is not None)\ + or (lw_3 is None and lw_hz_3 is not None) or (lw_4 is None and lw_hz_4 is not None): cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] if lw_hz_1 is not None: @@ -513,7 +567,7 @@ def validatePeak4D(self, index: int, pos_1: float, pos_2: float, pos_3: float, p return dstFunc - def getRealChainSeqId(self, ps: list, seqId: int, compId: Optional[str], isPolySeq=True) -> Tuple[str, int, Optional[str]]: + def getRealChainSeqId(self, ps: dict, seqId: int, compId: Optional[str], isPolySeq=True) -> Tuple[str, int, Optional[str]]: if compId is not None: compId = _compId = translateToStdResName(compId, ccU=self.ccU) if len(_compId) == 2 and _compId.startswith('D'): diff --git a/wwpdb/utils/nmr/pk/NmrPipePKLexer.py b/wwpdb/utils/nmr/pk/NmrPipePKLexer.py index d90ae0d12..37c382a29 100644 --- a/wwpdb/utils/nmr/pk/NmrPipePKLexer.py +++ b/wwpdb/utils/nmr/pk/NmrPipePKLexer.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,88,1048,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7, + 4,0,88,1024,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7, 2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7, 10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2, 17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7, @@ -45,370 +45,358 @@ def serializedATN(): 391,1,20,1,20,1,21,4,21,397,8,21,11,21,12,21,398,1,22,1,22,1,22, 5,22,404,8,22,10,22,12,22,407,9,22,1,22,1,22,1,22,1,22,1,23,1,23, 1,23,4,23,416,8,23,11,23,12,23,417,1,23,1,23,4,23,422,8,23,11,23, - 12,23,423,1,23,1,23,4,23,428,8,23,11,23,12,23,429,1,23,1,23,4,23, - 434,8,23,11,23,12,23,435,1,23,1,23,4,23,440,8,23,11,23,12,23,441, - 1,23,1,23,1,23,1,23,1,23,1,23,3,23,450,8,23,1,23,5,23,453,8,23,10, - 23,12,23,456,9,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,4,24,465,8, - 24,11,24,12,24,466,1,24,1,24,4,24,471,8,24,11,24,12,24,472,1,24, - 1,24,4,24,477,8,24,11,24,12,24,478,1,24,1,24,4,24,483,8,24,11,24, - 12,24,484,1,24,1,24,4,24,489,8,24,11,24,12,24,490,1,24,1,24,1,24, - 1,24,1,24,1,24,3,24,499,8,24,1,24,5,24,502,8,24,10,24,12,24,505, - 9,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26, - 1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27, - 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,30, - 3,30,545,8,30,1,30,1,30,1,31,3,31,550,8,31,1,31,1,31,3,31,554,8, - 31,1,32,3,32,557,8,32,1,32,1,32,3,32,561,8,32,1,32,1,32,3,32,565, - 8,32,1,32,3,32,568,8,32,1,33,1,33,1,34,4,34,573,8,34,11,34,12,34, - 574,1,34,1,34,1,35,4,35,580,8,35,11,35,12,35,581,1,35,1,35,1,36, - 1,36,1,36,4,36,589,8,36,11,36,12,36,590,1,36,1,36,4,36,595,8,36, - 11,36,12,36,596,1,36,1,36,4,36,601,8,36,11,36,12,36,602,1,36,1,36, - 4,36,607,8,36,11,36,12,36,608,1,36,1,36,4,36,613,8,36,11,36,12,36, - 614,1,36,1,36,1,36,1,36,1,36,1,36,3,36,623,8,36,1,36,5,36,626,8, - 36,10,36,12,36,629,9,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37, - 1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39, - 1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41, - 1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,43,1,43,1,43,1,44,1,44,1,44, - 1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47, - 1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49, - 1,49,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52, - 1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55, - 1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58, - 1,59,1,59,1,59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,61, - 1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64, - 1,64,1,65,1,65,1,65,1,66,1,66,1,66,1,67,1,67,1,67,1,68,1,68,1,68, - 1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71, - 1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73, - 1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77, - 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,3,79,843,8,79,1,79, - 1,79,1,80,3,80,848,8,80,1,80,1,80,3,80,852,8,80,1,81,3,81,855,8, - 81,1,81,1,81,3,81,859,8,81,1,81,1,81,3,81,863,8,81,1,81,3,81,866, - 8,81,1,82,1,82,1,83,4,83,871,8,83,11,83,12,83,872,1,83,1,83,1,84, - 4,84,878,8,84,11,84,12,84,879,1,84,1,84,1,85,1,85,1,85,4,85,887, - 8,85,11,85,12,85,888,1,85,1,85,4,85,893,8,85,11,85,12,85,894,1,85, - 1,85,4,85,899,8,85,11,85,12,85,900,1,85,1,85,4,85,905,8,85,11,85, - 12,85,906,1,85,1,85,4,85,911,8,85,11,85,12,85,912,1,85,1,85,1,85, - 1,85,1,85,1,85,3,85,921,8,85,1,85,5,85,924,8,85,10,85,12,85,927, - 9,85,1,85,1,85,1,85,1,85,1,86,1,86,3,86,935,8,86,1,86,1,86,1,86, - 1,86,1,86,1,86,3,86,943,8,86,1,86,3,86,946,8,86,1,87,4,87,949,8, - 87,11,87,12,87,950,1,87,1,87,1,88,4,88,956,8,88,11,88,12,88,957, - 1,88,1,88,1,89,1,89,1,89,4,89,965,8,89,11,89,12,89,966,1,89,1,89, - 4,89,971,8,89,11,89,12,89,972,1,89,1,89,4,89,977,8,89,11,89,12,89, - 978,1,89,1,89,4,89,983,8,89,11,89,12,89,984,1,89,1,89,4,89,989,8, - 89,11,89,12,89,990,1,89,1,89,1,89,1,89,1,89,1,89,3,89,999,8,89,1, - 89,5,89,1002,8,89,10,89,12,89,1005,9,89,1,89,1,89,1,89,1,89,1,90, - 4,90,1012,8,90,11,90,12,90,1013,1,91,4,91,1017,8,91,11,91,12,91, - 1018,1,91,1,91,1,92,4,92,1024,8,92,11,92,12,92,1025,1,92,1,92,1, - 93,4,93,1031,8,93,11,93,12,93,1032,1,94,4,94,1036,8,94,11,94,12, - 94,1037,1,94,1,94,1,95,4,95,1043,8,95,11,95,12,95,1044,1,95,1,95, - 1,405,0,96,6,1,8,2,10,3,12,4,14,5,16,6,18,7,20,8,22,0,24,0,26,0, - 28,9,30,10,32,11,34,12,36,0,38,0,40,0,42,0,44,0,46,13,48,14,50,15, - 52,16,54,17,56,18,58,19,60,20,62,21,64,22,66,23,68,24,70,25,72,26, - 74,27,76,28,78,29,80,30,82,31,84,32,86,33,88,34,90,35,92,36,94,37, - 96,38,98,39,100,40,102,41,104,42,106,43,108,44,110,45,112,46,114, - 47,116,48,118,49,120,50,122,51,124,52,126,53,128,54,130,55,132,56, - 134,57,136,58,138,59,140,60,142,61,144,62,146,63,148,64,150,65,152, - 66,154,67,156,68,158,69,160,70,162,71,164,72,166,73,168,74,170,75, - 172,76,174,77,176,78,178,79,180,80,182,81,184,82,186,83,188,84,190, - 85,192,86,194,87,196,88,6,0,1,2,3,4,5,11,2,0,43,43,45,45,2,0,69, - 69,101,101,1,0,48,57,2,0,10,10,13,13,3,0,9,10,13,13,32,32,2,0,65, - 90,97,122,5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39,39,2,0, - 9,9,32,32,5,0,33,33,35,35,38,38,59,59,92,92,2,0,100,100,115,115, - 1154,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12,1,0,0,0,0,14,1,0, - 0,0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,28,1,0,0,0,0,30,1,0, - 0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0, - 0,0,0,52,1,0,0,0,0,54,1,0,0,0,1,56,1,0,0,0,1,58,1,0,0,0,1,60,1,0, - 0,0,1,62,1,0,0,0,1,64,1,0,0,0,1,66,1,0,0,0,1,68,1,0,0,0,1,70,1,0, - 0,0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,1,78,1,0,0,0,2,80,1,0, - 0,0,2,82,1,0,0,0,2,84,1,0,0,0,2,86,1,0,0,0,2,88,1,0,0,0,2,90,1,0, - 0,0,2,92,1,0,0,0,2,94,1,0,0,0,2,96,1,0,0,0,2,98,1,0,0,0,2,100,1, - 0,0,0,2,102,1,0,0,0,2,104,1,0,0,0,2,106,1,0,0,0,2,108,1,0,0,0,2, - 110,1,0,0,0,2,112,1,0,0,0,2,114,1,0,0,0,2,116,1,0,0,0,2,118,1,0, - 0,0,2,120,1,0,0,0,2,122,1,0,0,0,2,124,1,0,0,0,2,126,1,0,0,0,2,128, - 1,0,0,0,2,130,1,0,0,0,2,132,1,0,0,0,2,134,1,0,0,0,2,136,1,0,0,0, - 2,138,1,0,0,0,2,140,1,0,0,0,2,142,1,0,0,0,2,144,1,0,0,0,2,146,1, - 0,0,0,2,148,1,0,0,0,2,150,1,0,0,0,2,152,1,0,0,0,2,154,1,0,0,0,2, - 156,1,0,0,0,2,158,1,0,0,0,2,160,1,0,0,0,2,162,1,0,0,0,2,164,1,0, - 0,0,2,166,1,0,0,0,2,168,1,0,0,0,2,170,1,0,0,0,2,172,1,0,0,0,2,174, - 1,0,0,0,2,176,1,0,0,0,3,178,1,0,0,0,3,180,1,0,0,0,3,182,1,0,0,0, - 3,184,1,0,0,0,4,186,1,0,0,0,4,188,1,0,0,0,4,190,1,0,0,0,5,192,1, - 0,0,0,5,194,1,0,0,0,5,196,1,0,0,0,6,198,1,0,0,0,8,205,1,0,0,0,10, - 212,1,0,0,0,12,221,1,0,0,0,14,233,1,0,0,0,16,247,1,0,0,0,18,252, - 1,0,0,0,20,259,1,0,0,0,22,278,1,0,0,0,24,280,1,0,0,0,26,283,1,0, - 0,0,28,288,1,0,0,0,30,313,1,0,0,0,32,338,1,0,0,0,34,363,1,0,0,0, - 36,367,1,0,0,0,38,371,1,0,0,0,40,375,1,0,0,0,42,379,1,0,0,0,44,381, - 1,0,0,0,46,389,1,0,0,0,48,396,1,0,0,0,50,400,1,0,0,0,52,449,1,0, - 0,0,54,498,1,0,0,0,56,510,1,0,0,0,58,517,1,0,0,0,60,524,1,0,0,0, - 62,531,1,0,0,0,64,538,1,0,0,0,66,544,1,0,0,0,68,549,1,0,0,0,70,556, - 1,0,0,0,72,569,1,0,0,0,74,572,1,0,0,0,76,579,1,0,0,0,78,622,1,0, - 0,0,80,634,1,0,0,0,82,640,1,0,0,0,84,647,1,0,0,0,86,654,1,0,0,0, - 88,661,1,0,0,0,90,668,1,0,0,0,92,671,1,0,0,0,94,674,1,0,0,0,96,677, - 1,0,0,0,98,680,1,0,0,0,100,686,1,0,0,0,102,692,1,0,0,0,104,698,1, - 0,0,0,106,704,1,0,0,0,108,709,1,0,0,0,110,714,1,0,0,0,112,719,1, - 0,0,0,114,724,1,0,0,0,116,727,1,0,0,0,118,730,1,0,0,0,120,733,1, - 0,0,0,122,736,1,0,0,0,124,742,1,0,0,0,126,748,1,0,0,0,128,754,1, - 0,0,0,130,760,1,0,0,0,132,763,1,0,0,0,134,766,1,0,0,0,136,769,1, - 0,0,0,138,772,1,0,0,0,140,775,1,0,0,0,142,778,1,0,0,0,144,781,1, - 0,0,0,146,784,1,0,0,0,148,791,1,0,0,0,150,799,1,0,0,0,152,803,1, - 0,0,0,154,809,1,0,0,0,156,814,1,0,0,0,158,818,1,0,0,0,160,826,1, - 0,0,0,162,833,1,0,0,0,164,842,1,0,0,0,166,847,1,0,0,0,168,854,1, - 0,0,0,170,867,1,0,0,0,172,870,1,0,0,0,174,877,1,0,0,0,176,920,1, - 0,0,0,178,932,1,0,0,0,180,948,1,0,0,0,182,955,1,0,0,0,184,998,1, - 0,0,0,186,1011,1,0,0,0,188,1016,1,0,0,0,190,1023,1,0,0,0,192,1030, - 1,0,0,0,194,1035,1,0,0,0,196,1042,1,0,0,0,198,199,5,68,0,0,199,200, - 5,65,0,0,200,201,5,84,0,0,201,202,5,65,0,0,202,203,1,0,0,0,203,204, - 6,0,0,0,204,7,1,0,0,0,205,206,5,86,0,0,206,207,5,65,0,0,207,208, - 5,82,0,0,208,209,5,83,0,0,209,210,1,0,0,0,210,211,6,1,1,0,211,9, - 1,0,0,0,212,213,5,70,0,0,213,214,5,79,0,0,214,215,5,82,0,0,215,216, - 5,77,0,0,216,217,5,65,0,0,217,218,5,84,0,0,218,219,1,0,0,0,219,220, - 6,2,2,0,220,11,1,0,0,0,221,222,5,78,0,0,222,223,5,85,0,0,223,224, - 5,76,0,0,224,225,5,76,0,0,225,226,5,86,0,0,226,227,5,65,0,0,227, - 228,5,76,0,0,228,229,5,85,0,0,229,230,5,69,0,0,230,231,1,0,0,0,231, - 232,6,3,3,0,232,13,1,0,0,0,233,234,5,78,0,0,234,235,5,85,0,0,235, - 236,5,76,0,0,236,237,5,76,0,0,237,238,5,83,0,0,238,239,5,84,0,0, - 239,240,5,82,0,0,240,241,5,73,0,0,241,242,5,78,0,0,242,243,5,71, - 0,0,243,244,1,0,0,0,244,245,6,4,4,0,245,15,1,0,0,0,246,248,7,0,0, - 0,247,246,1,0,0,0,247,248,1,0,0,0,248,249,1,0,0,0,249,250,3,26,10, - 0,250,17,1,0,0,0,251,253,7,0,0,0,252,251,1,0,0,0,252,253,1,0,0,0, - 253,256,1,0,0,0,254,257,3,26,10,0,255,257,3,22,8,0,256,254,1,0,0, - 0,256,255,1,0,0,0,257,19,1,0,0,0,258,260,7,0,0,0,259,258,1,0,0,0, - 259,260,1,0,0,0,260,263,1,0,0,0,261,264,3,26,10,0,262,264,3,22,8, - 0,263,261,1,0,0,0,263,262,1,0,0,0,264,270,1,0,0,0,265,267,7,1,0, - 0,266,268,7,0,0,0,267,266,1,0,0,0,267,268,1,0,0,0,268,269,1,0,0, - 0,269,271,3,26,10,0,270,265,1,0,0,0,270,271,1,0,0,0,271,21,1,0,0, - 0,272,273,3,26,10,0,273,274,5,46,0,0,274,275,3,26,10,0,275,279,1, - 0,0,0,276,277,5,46,0,0,277,279,3,26,10,0,278,272,1,0,0,0,278,276, - 1,0,0,0,279,23,1,0,0,0,280,281,7,2,0,0,281,25,1,0,0,0,282,284,3, - 24,9,0,283,282,1,0,0,0,284,285,1,0,0,0,285,283,1,0,0,0,285,286,1, - 0,0,0,286,27,1,0,0,0,287,289,5,35,0,0,288,287,1,0,0,0,289,290,1, - 0,0,0,290,288,1,0,0,0,290,291,1,0,0,0,291,295,1,0,0,0,292,294,8, - 3,0,0,293,292,1,0,0,0,294,297,1,0,0,0,295,293,1,0,0,0,295,296,1, - 0,0,0,296,301,1,0,0,0,297,295,1,0,0,0,298,300,5,35,0,0,299,298,1, - 0,0,0,300,303,1,0,0,0,301,299,1,0,0,0,301,302,1,0,0,0,302,307,1, - 0,0,0,303,301,1,0,0,0,304,306,8,3,0,0,305,304,1,0,0,0,306,309,1, - 0,0,0,307,305,1,0,0,0,307,308,1,0,0,0,308,310,1,0,0,0,309,307,1, - 0,0,0,310,311,6,11,5,0,311,29,1,0,0,0,312,314,5,33,0,0,313,312,1, - 0,0,0,314,315,1,0,0,0,315,313,1,0,0,0,315,316,1,0,0,0,316,320,1, - 0,0,0,317,319,8,3,0,0,318,317,1,0,0,0,319,322,1,0,0,0,320,318,1, - 0,0,0,320,321,1,0,0,0,321,326,1,0,0,0,322,320,1,0,0,0,323,325,5, - 33,0,0,324,323,1,0,0,0,325,328,1,0,0,0,326,324,1,0,0,0,326,327,1, - 0,0,0,327,332,1,0,0,0,328,326,1,0,0,0,329,331,8,3,0,0,330,329,1, - 0,0,0,331,334,1,0,0,0,332,330,1,0,0,0,332,333,1,0,0,0,333,335,1, - 0,0,0,334,332,1,0,0,0,335,336,6,12,5,0,336,31,1,0,0,0,337,339,5, - 59,0,0,338,337,1,0,0,0,339,340,1,0,0,0,340,338,1,0,0,0,340,341,1, - 0,0,0,341,345,1,0,0,0,342,344,8,3,0,0,343,342,1,0,0,0,344,347,1, - 0,0,0,345,343,1,0,0,0,345,346,1,0,0,0,346,351,1,0,0,0,347,345,1, - 0,0,0,348,350,5,59,0,0,349,348,1,0,0,0,350,353,1,0,0,0,351,349,1, - 0,0,0,351,352,1,0,0,0,352,357,1,0,0,0,353,351,1,0,0,0,354,356,8, - 3,0,0,355,354,1,0,0,0,356,359,1,0,0,0,357,355,1,0,0,0,357,358,1, - 0,0,0,358,360,1,0,0,0,359,357,1,0,0,0,360,361,6,13,5,0,361,33,1, - 0,0,0,362,364,8,4,0,0,363,362,1,0,0,0,364,365,1,0,0,0,365,363,1, - 0,0,0,365,366,1,0,0,0,366,35,1,0,0,0,367,368,7,5,0,0,368,37,1,0, - 0,0,369,372,3,36,15,0,370,372,3,24,9,0,371,369,1,0,0,0,371,370,1, - 0,0,0,372,39,1,0,0,0,373,376,3,38,16,0,374,376,7,6,0,0,375,373,1, - 0,0,0,375,374,1,0,0,0,376,41,1,0,0,0,377,380,3,40,17,0,378,380,7, - 7,0,0,379,377,1,0,0,0,379,378,1,0,0,0,380,43,1,0,0,0,381,385,3,40, - 17,0,382,384,3,42,18,0,383,382,1,0,0,0,384,387,1,0,0,0,385,383,1, - 0,0,0,385,386,1,0,0,0,386,45,1,0,0,0,387,385,1,0,0,0,388,390,7,8, - 0,0,389,388,1,0,0,0,390,391,1,0,0,0,391,389,1,0,0,0,391,392,1,0, - 0,0,392,393,1,0,0,0,393,394,6,20,6,0,394,47,1,0,0,0,395,397,7,3, - 0,0,396,395,1,0,0,0,397,398,1,0,0,0,398,396,1,0,0,0,398,399,1,0, - 0,0,399,49,1,0,0,0,400,405,5,123,0,0,401,404,3,50,22,0,402,404,9, - 0,0,0,403,401,1,0,0,0,403,402,1,0,0,0,404,407,1,0,0,0,405,406,1, - 0,0,0,405,403,1,0,0,0,406,408,1,0,0,0,407,405,1,0,0,0,408,409,5, - 125,0,0,409,410,1,0,0,0,410,411,6,22,5,0,411,51,1,0,0,0,412,450, - 7,9,0,0,413,415,5,47,0,0,414,416,5,47,0,0,415,414,1,0,0,0,416,417, - 1,0,0,0,417,415,1,0,0,0,417,418,1,0,0,0,418,450,1,0,0,0,419,421, - 5,42,0,0,420,422,5,42,0,0,421,420,1,0,0,0,422,423,1,0,0,0,423,421, - 1,0,0,0,423,424,1,0,0,0,424,450,1,0,0,0,425,427,5,45,0,0,426,428, - 5,45,0,0,427,426,1,0,0,0,428,429,1,0,0,0,429,427,1,0,0,0,429,430, - 1,0,0,0,430,450,1,0,0,0,431,433,5,43,0,0,432,434,5,43,0,0,433,432, - 1,0,0,0,434,435,1,0,0,0,435,433,1,0,0,0,435,436,1,0,0,0,436,450, - 1,0,0,0,437,439,5,61,0,0,438,440,5,61,0,0,439,438,1,0,0,0,440,441, - 1,0,0,0,441,439,1,0,0,0,441,442,1,0,0,0,442,450,1,0,0,0,443,444, - 5,82,0,0,444,445,5,69,0,0,445,446,5,77,0,0,446,447,5,65,0,0,447, - 448,5,82,0,0,448,450,5,75,0,0,449,412,1,0,0,0,449,413,1,0,0,0,449, - 419,1,0,0,0,449,425,1,0,0,0,449,431,1,0,0,0,449,437,1,0,0,0,449, - 443,1,0,0,0,450,454,1,0,0,0,451,453,5,32,0,0,452,451,1,0,0,0,453, - 456,1,0,0,0,454,452,1,0,0,0,454,455,1,0,0,0,455,457,1,0,0,0,456, - 454,1,0,0,0,457,458,3,48,21,0,458,459,1,0,0,0,459,460,6,23,5,0,460, - 53,1,0,0,0,461,499,7,9,0,0,462,464,5,47,0,0,463,465,5,47,0,0,464, - 463,1,0,0,0,465,466,1,0,0,0,466,464,1,0,0,0,466,467,1,0,0,0,467, - 499,1,0,0,0,468,470,5,42,0,0,469,471,5,42,0,0,470,469,1,0,0,0,471, - 472,1,0,0,0,472,470,1,0,0,0,472,473,1,0,0,0,473,499,1,0,0,0,474, - 476,5,45,0,0,475,477,5,45,0,0,476,475,1,0,0,0,477,478,1,0,0,0,478, - 476,1,0,0,0,478,479,1,0,0,0,479,499,1,0,0,0,480,482,5,43,0,0,481, - 483,5,43,0,0,482,481,1,0,0,0,483,484,1,0,0,0,484,482,1,0,0,0,484, - 485,1,0,0,0,485,499,1,0,0,0,486,488,5,61,0,0,487,489,5,61,0,0,488, - 487,1,0,0,0,489,490,1,0,0,0,490,488,1,0,0,0,490,491,1,0,0,0,491, - 499,1,0,0,0,492,493,5,82,0,0,493,494,5,69,0,0,494,495,5,77,0,0,495, - 496,5,65,0,0,496,497,5,82,0,0,497,499,5,75,0,0,498,461,1,0,0,0,498, - 462,1,0,0,0,498,468,1,0,0,0,498,474,1,0,0,0,498,480,1,0,0,0,498, - 486,1,0,0,0,498,492,1,0,0,0,499,503,1,0,0,0,500,502,8,3,0,0,501, - 500,1,0,0,0,502,505,1,0,0,0,503,501,1,0,0,0,503,504,1,0,0,0,504, - 506,1,0,0,0,505,503,1,0,0,0,506,507,3,48,21,0,507,508,1,0,0,0,508, - 509,6,24,5,0,509,55,1,0,0,0,510,511,5,88,0,0,511,512,5,95,0,0,512, - 513,5,65,0,0,513,514,5,88,0,0,514,515,5,73,0,0,515,516,5,83,0,0, - 516,57,1,0,0,0,517,518,5,89,0,0,518,519,5,95,0,0,519,520,5,65,0, - 0,520,521,5,88,0,0,521,522,5,73,0,0,522,523,5,83,0,0,523,59,1,0, - 0,0,524,525,5,90,0,0,525,526,5,95,0,0,526,527,5,65,0,0,527,528,5, - 88,0,0,528,529,5,73,0,0,529,530,5,83,0,0,530,61,1,0,0,0,531,532, - 5,65,0,0,532,533,5,95,0,0,533,534,5,65,0,0,534,535,5,88,0,0,535, - 536,5,73,0,0,536,537,5,83,0,0,537,63,1,0,0,0,538,539,3,18,6,0,539, - 540,5,112,0,0,540,541,5,112,0,0,541,542,5,109,0,0,542,65,1,0,0,0, - 543,545,7,0,0,0,544,543,1,0,0,0,544,545,1,0,0,0,545,546,1,0,0,0, - 546,547,3,26,10,0,547,67,1,0,0,0,548,550,7,0,0,0,549,548,1,0,0,0, - 549,550,1,0,0,0,550,553,1,0,0,0,551,554,3,26,10,0,552,554,3,22,8, - 0,553,551,1,0,0,0,553,552,1,0,0,0,554,69,1,0,0,0,555,557,7,0,0,0, - 556,555,1,0,0,0,556,557,1,0,0,0,557,560,1,0,0,0,558,561,3,26,10, - 0,559,561,3,22,8,0,560,558,1,0,0,0,560,559,1,0,0,0,561,567,1,0,0, - 0,562,564,7,1,0,0,563,565,7,0,0,0,564,563,1,0,0,0,564,565,1,0,0, - 0,565,566,1,0,0,0,566,568,3,26,10,0,567,562,1,0,0,0,567,568,1,0, - 0,0,568,71,1,0,0,0,569,570,3,44,19,0,570,73,1,0,0,0,571,573,7,8, - 0,0,572,571,1,0,0,0,573,574,1,0,0,0,574,572,1,0,0,0,574,575,1,0, - 0,0,575,576,1,0,0,0,576,577,6,34,6,0,577,75,1,0,0,0,578,580,7,3, - 0,0,579,578,1,0,0,0,580,581,1,0,0,0,581,579,1,0,0,0,581,582,1,0, - 0,0,582,583,1,0,0,0,583,584,6,35,7,0,584,77,1,0,0,0,585,623,7,9, - 0,0,586,588,5,47,0,0,587,589,5,47,0,0,588,587,1,0,0,0,589,590,1, - 0,0,0,590,588,1,0,0,0,590,591,1,0,0,0,591,623,1,0,0,0,592,594,5, - 42,0,0,593,595,5,42,0,0,594,593,1,0,0,0,595,596,1,0,0,0,596,594, - 1,0,0,0,596,597,1,0,0,0,597,623,1,0,0,0,598,600,5,45,0,0,599,601, - 5,45,0,0,600,599,1,0,0,0,601,602,1,0,0,0,602,600,1,0,0,0,602,603, - 1,0,0,0,603,623,1,0,0,0,604,606,5,43,0,0,605,607,5,43,0,0,606,605, - 1,0,0,0,607,608,1,0,0,0,608,606,1,0,0,0,608,609,1,0,0,0,609,623, - 1,0,0,0,610,612,5,61,0,0,611,613,5,61,0,0,612,611,1,0,0,0,613,614, - 1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0,615,623,1,0,0,0,616,617, - 5,82,0,0,617,618,5,69,0,0,618,619,5,77,0,0,619,620,5,65,0,0,620, - 621,5,82,0,0,621,623,5,75,0,0,622,585,1,0,0,0,622,586,1,0,0,0,622, - 592,1,0,0,0,622,598,1,0,0,0,622,604,1,0,0,0,622,610,1,0,0,0,622, - 616,1,0,0,0,623,627,1,0,0,0,624,626,8,3,0,0,625,624,1,0,0,0,626, - 629,1,0,0,0,627,625,1,0,0,0,627,628,1,0,0,0,628,630,1,0,0,0,629, - 627,1,0,0,0,630,631,3,76,35,0,631,632,1,0,0,0,632,633,6,36,5,0,633, - 79,1,0,0,0,634,635,5,73,0,0,635,636,5,78,0,0,636,637,5,68,0,0,637, - 638,5,69,0,0,638,639,5,88,0,0,639,81,1,0,0,0,640,641,5,88,0,0,641, - 642,5,95,0,0,642,643,5,65,0,0,643,644,5,88,0,0,644,645,5,73,0,0, - 645,646,5,83,0,0,646,83,1,0,0,0,647,648,5,89,0,0,648,649,5,95,0, - 0,649,650,5,65,0,0,650,651,5,88,0,0,651,652,5,73,0,0,652,653,5,83, - 0,0,653,85,1,0,0,0,654,655,5,90,0,0,655,656,5,95,0,0,656,657,5,65, - 0,0,657,658,5,88,0,0,658,659,5,73,0,0,659,660,5,83,0,0,660,87,1, - 0,0,0,661,662,5,65,0,0,662,663,5,95,0,0,663,664,5,65,0,0,664,665, - 5,88,0,0,665,666,5,73,0,0,666,667,5,83,0,0,667,89,1,0,0,0,668,669, - 5,68,0,0,669,670,5,88,0,0,670,91,1,0,0,0,671,672,5,68,0,0,672,673, - 5,89,0,0,673,93,1,0,0,0,674,675,5,68,0,0,675,676,5,90,0,0,676,95, - 1,0,0,0,677,678,5,68,0,0,678,679,5,65,0,0,679,97,1,0,0,0,680,681, - 5,88,0,0,681,682,5,95,0,0,682,683,5,80,0,0,683,684,5,80,0,0,684, - 685,5,77,0,0,685,99,1,0,0,0,686,687,5,89,0,0,687,688,5,95,0,0,688, - 689,5,80,0,0,689,690,5,80,0,0,690,691,5,77,0,0,691,101,1,0,0,0,692, - 693,5,90,0,0,693,694,5,95,0,0,694,695,5,80,0,0,695,696,5,80,0,0, - 696,697,5,77,0,0,697,103,1,0,0,0,698,699,5,65,0,0,699,700,5,95,0, - 0,700,701,5,80,0,0,701,702,5,80,0,0,702,703,5,77,0,0,703,105,1,0, - 0,0,704,705,5,88,0,0,705,706,5,95,0,0,706,707,5,72,0,0,707,708,5, - 90,0,0,708,107,1,0,0,0,709,710,5,89,0,0,710,711,5,95,0,0,711,712, - 5,72,0,0,712,713,5,90,0,0,713,109,1,0,0,0,714,715,5,90,0,0,715,716, - 5,95,0,0,716,717,5,72,0,0,717,718,5,90,0,0,718,111,1,0,0,0,719,720, - 5,65,0,0,720,721,5,95,0,0,721,722,5,72,0,0,722,723,5,90,0,0,723, - 113,1,0,0,0,724,725,5,88,0,0,725,726,5,87,0,0,726,115,1,0,0,0,727, - 728,5,89,0,0,728,729,5,87,0,0,729,117,1,0,0,0,730,731,5,90,0,0,731, - 732,5,87,0,0,732,119,1,0,0,0,733,734,5,65,0,0,734,735,5,87,0,0,735, - 121,1,0,0,0,736,737,5,88,0,0,737,738,5,87,0,0,738,739,5,95,0,0,739, - 740,5,72,0,0,740,741,5,90,0,0,741,123,1,0,0,0,742,743,5,89,0,0,743, - 744,5,87,0,0,744,745,5,95,0,0,745,746,5,72,0,0,746,747,5,90,0,0, - 747,125,1,0,0,0,748,749,5,90,0,0,749,750,5,87,0,0,750,751,5,95,0, - 0,751,752,5,72,0,0,752,753,5,90,0,0,753,127,1,0,0,0,754,755,5,65, - 0,0,755,756,5,87,0,0,756,757,5,95,0,0,757,758,5,72,0,0,758,759,5, - 90,0,0,759,129,1,0,0,0,760,761,5,88,0,0,761,762,5,49,0,0,762,131, - 1,0,0,0,763,764,5,88,0,0,764,765,5,51,0,0,765,133,1,0,0,0,766,767, - 5,89,0,0,767,768,5,49,0,0,768,135,1,0,0,0,769,770,5,89,0,0,770,771, - 5,51,0,0,771,137,1,0,0,0,772,773,5,90,0,0,773,774,5,49,0,0,774,139, - 1,0,0,0,775,776,5,90,0,0,776,777,5,51,0,0,777,141,1,0,0,0,778,779, - 5,65,0,0,779,780,5,49,0,0,780,143,1,0,0,0,781,782,5,65,0,0,782,783, - 5,51,0,0,783,145,1,0,0,0,784,785,5,72,0,0,785,786,5,69,0,0,786,787, - 5,73,0,0,787,788,5,71,0,0,788,789,5,72,0,0,789,790,5,84,0,0,790, - 147,1,0,0,0,791,792,5,68,0,0,792,793,5,72,0,0,793,794,5,69,0,0,794, - 795,5,73,0,0,795,796,5,71,0,0,796,797,5,72,0,0,797,798,5,84,0,0, - 798,149,1,0,0,0,799,800,5,86,0,0,800,801,5,79,0,0,801,802,5,76,0, - 0,802,151,1,0,0,0,803,804,5,80,0,0,804,805,5,67,0,0,805,806,5,72, - 0,0,806,807,5,73,0,0,807,808,5,50,0,0,808,153,1,0,0,0,809,810,5, - 84,0,0,810,811,5,89,0,0,811,812,5,80,0,0,812,813,5,69,0,0,813,155, - 1,0,0,0,814,815,5,65,0,0,815,816,5,83,0,0,816,817,5,83,0,0,817,157, - 1,0,0,0,818,819,5,67,0,0,819,820,5,76,0,0,820,821,5,85,0,0,821,822, - 5,83,0,0,822,823,5,84,0,0,823,824,5,73,0,0,824,825,5,68,0,0,825, - 159,1,0,0,0,826,827,5,77,0,0,827,828,5,69,0,0,828,829,5,77,0,0,829, - 830,5,67,0,0,830,831,5,78,0,0,831,832,5,84,0,0,832,161,1,0,0,0,833, - 834,5,84,0,0,834,835,5,82,0,0,835,836,5,79,0,0,836,837,5,85,0,0, - 837,838,5,66,0,0,838,839,5,76,0,0,839,840,5,69,0,0,840,163,1,0,0, - 0,841,843,7,0,0,0,842,841,1,0,0,0,842,843,1,0,0,0,843,844,1,0,0, - 0,844,845,3,26,10,0,845,165,1,0,0,0,846,848,7,0,0,0,847,846,1,0, - 0,0,847,848,1,0,0,0,848,851,1,0,0,0,849,852,3,26,10,0,850,852,3, - 22,8,0,851,849,1,0,0,0,851,850,1,0,0,0,852,167,1,0,0,0,853,855,7, - 0,0,0,854,853,1,0,0,0,854,855,1,0,0,0,855,858,1,0,0,0,856,859,3, - 26,10,0,857,859,3,22,8,0,858,856,1,0,0,0,858,857,1,0,0,0,859,865, - 1,0,0,0,860,862,7,1,0,0,861,863,7,0,0,0,862,861,1,0,0,0,862,863, - 1,0,0,0,863,864,1,0,0,0,864,866,3,26,10,0,865,860,1,0,0,0,865,866, - 1,0,0,0,866,169,1,0,0,0,867,868,3,44,19,0,868,171,1,0,0,0,869,871, - 7,8,0,0,870,869,1,0,0,0,871,872,1,0,0,0,872,870,1,0,0,0,872,873, - 1,0,0,0,873,874,1,0,0,0,874,875,6,83,6,0,875,173,1,0,0,0,876,878, - 7,3,0,0,877,876,1,0,0,0,878,879,1,0,0,0,879,877,1,0,0,0,879,880, - 1,0,0,0,880,881,1,0,0,0,881,882,6,84,7,0,882,175,1,0,0,0,883,921, - 7,9,0,0,884,886,5,47,0,0,885,887,5,47,0,0,886,885,1,0,0,0,887,888, - 1,0,0,0,888,886,1,0,0,0,888,889,1,0,0,0,889,921,1,0,0,0,890,892, - 5,42,0,0,891,893,5,42,0,0,892,891,1,0,0,0,893,894,1,0,0,0,894,892, - 1,0,0,0,894,895,1,0,0,0,895,921,1,0,0,0,896,898,5,45,0,0,897,899, - 5,45,0,0,898,897,1,0,0,0,899,900,1,0,0,0,900,898,1,0,0,0,900,901, - 1,0,0,0,901,921,1,0,0,0,902,904,5,43,0,0,903,905,5,43,0,0,904,903, - 1,0,0,0,905,906,1,0,0,0,906,904,1,0,0,0,906,907,1,0,0,0,907,921, - 1,0,0,0,908,910,5,61,0,0,909,911,5,61,0,0,910,909,1,0,0,0,911,912, - 1,0,0,0,912,910,1,0,0,0,912,913,1,0,0,0,913,921,1,0,0,0,914,915, - 5,82,0,0,915,916,5,69,0,0,916,917,5,77,0,0,917,918,5,65,0,0,918, - 919,5,82,0,0,919,921,5,75,0,0,920,883,1,0,0,0,920,884,1,0,0,0,920, - 890,1,0,0,0,920,896,1,0,0,0,920,902,1,0,0,0,920,908,1,0,0,0,920, - 914,1,0,0,0,921,925,1,0,0,0,922,924,8,3,0,0,923,922,1,0,0,0,924, - 927,1,0,0,0,925,923,1,0,0,0,925,926,1,0,0,0,926,928,1,0,0,0,927, - 925,1,0,0,0,928,929,3,174,84,0,929,930,1,0,0,0,930,931,6,85,5,0, - 931,177,1,0,0,0,932,934,5,37,0,0,933,935,3,26,10,0,934,933,1,0,0, - 0,934,935,1,0,0,0,935,945,1,0,0,0,936,946,7,10,0,0,937,938,5,46, - 0,0,938,939,3,26,10,0,939,940,5,102,0,0,940,946,1,0,0,0,941,943, - 5,43,0,0,942,941,1,0,0,0,942,943,1,0,0,0,943,944,1,0,0,0,944,946, - 5,101,0,0,945,936,1,0,0,0,945,937,1,0,0,0,945,942,1,0,0,0,946,179, - 1,0,0,0,947,949,7,8,0,0,948,947,1,0,0,0,949,950,1,0,0,0,950,948, - 1,0,0,0,950,951,1,0,0,0,951,952,1,0,0,0,952,953,6,87,6,0,953,181, - 1,0,0,0,954,956,7,3,0,0,955,954,1,0,0,0,956,957,1,0,0,0,957,955, - 1,0,0,0,957,958,1,0,0,0,958,959,1,0,0,0,959,960,6,88,7,0,960,183, - 1,0,0,0,961,999,7,9,0,0,962,964,5,47,0,0,963,965,5,47,0,0,964,963, - 1,0,0,0,965,966,1,0,0,0,966,964,1,0,0,0,966,967,1,0,0,0,967,999, - 1,0,0,0,968,970,5,42,0,0,969,971,5,42,0,0,970,969,1,0,0,0,971,972, - 1,0,0,0,972,970,1,0,0,0,972,973,1,0,0,0,973,999,1,0,0,0,974,976, - 5,45,0,0,975,977,5,45,0,0,976,975,1,0,0,0,977,978,1,0,0,0,978,976, - 1,0,0,0,978,979,1,0,0,0,979,999,1,0,0,0,980,982,5,43,0,0,981,983, - 5,43,0,0,982,981,1,0,0,0,983,984,1,0,0,0,984,982,1,0,0,0,984,985, - 1,0,0,0,985,999,1,0,0,0,986,988,5,61,0,0,987,989,5,61,0,0,988,987, - 1,0,0,0,989,990,1,0,0,0,990,988,1,0,0,0,990,991,1,0,0,0,991,999, - 1,0,0,0,992,993,5,82,0,0,993,994,5,69,0,0,994,995,5,77,0,0,995,996, - 5,65,0,0,996,997,5,82,0,0,997,999,5,75,0,0,998,961,1,0,0,0,998,962, - 1,0,0,0,998,968,1,0,0,0,998,974,1,0,0,0,998,980,1,0,0,0,998,986, - 1,0,0,0,998,992,1,0,0,0,999,1003,1,0,0,0,1000,1002,8,3,0,0,1001, - 1000,1,0,0,0,1002,1005,1,0,0,0,1003,1001,1,0,0,0,1003,1004,1,0,0, - 0,1004,1006,1,0,0,0,1005,1003,1,0,0,0,1006,1007,3,182,88,0,1007, - 1008,1,0,0,0,1008,1009,6,89,5,0,1009,185,1,0,0,0,1010,1012,8,4,0, - 0,1011,1010,1,0,0,0,1012,1013,1,0,0,0,1013,1011,1,0,0,0,1013,1014, - 1,0,0,0,1014,187,1,0,0,0,1015,1017,7,8,0,0,1016,1015,1,0,0,0,1017, - 1018,1,0,0,0,1018,1016,1,0,0,0,1018,1019,1,0,0,0,1019,1020,1,0,0, - 0,1020,1021,6,91,6,0,1021,189,1,0,0,0,1022,1024,7,3,0,0,1023,1022, - 1,0,0,0,1024,1025,1,0,0,0,1025,1023,1,0,0,0,1025,1026,1,0,0,0,1026, - 1027,1,0,0,0,1027,1028,6,92,7,0,1028,191,1,0,0,0,1029,1031,8,4,0, - 0,1030,1029,1,0,0,0,1031,1032,1,0,0,0,1032,1030,1,0,0,0,1032,1033, - 1,0,0,0,1033,193,1,0,0,0,1034,1036,7,8,0,0,1035,1034,1,0,0,0,1036, - 1037,1,0,0,0,1037,1035,1,0,0,0,1037,1038,1,0,0,0,1038,1039,1,0,0, - 0,1039,1040,6,94,6,0,1040,195,1,0,0,0,1041,1043,7,3,0,0,1042,1041, - 1,0,0,0,1043,1044,1,0,0,0,1044,1042,1,0,0,0,1044,1045,1,0,0,0,1045, - 1046,1,0,0,0,1046,1047,6,95,7,0,1047,197,1,0,0,0,100,0,1,2,3,4,5, - 247,252,256,259,263,267,270,278,285,290,295,301,307,315,320,326, - 332,340,345,351,357,365,371,375,379,385,391,398,403,405,417,423, - 429,435,441,449,454,466,472,478,484,490,498,503,544,549,553,556, - 560,564,567,574,581,590,596,602,608,614,622,627,842,847,851,854, - 858,862,865,872,879,888,894,900,906,912,920,925,934,942,945,950, - 957,966,972,978,984,990,998,1003,1013,1018,1025,1032,1037,1044,8, - 5,1,0,5,2,0,5,3,0,5,4,0,5,5,0,0,1,0,6,0,0,4,0,0 + 12,23,423,1,23,1,23,4,23,428,8,23,11,23,12,23,429,1,23,1,23,1,23, + 1,23,1,23,1,23,3,23,438,8,23,1,23,5,23,441,8,23,10,23,12,23,444, + 9,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,4,24,453,8,24,11,24,12,24, + 454,1,24,1,24,4,24,459,8,24,11,24,12,24,460,1,24,1,24,4,24,465,8, + 24,11,24,12,24,466,1,24,1,24,1,24,1,24,1,24,1,24,3,24,475,8,24,1, + 24,5,24,478,8,24,10,24,12,24,481,9,24,1,24,1,24,1,24,1,24,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1, + 27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,29,1,29,1,29,1,29,1,29,1,30,3,30,521,8,30,1,30,1,30,1,31,3, + 31,526,8,31,1,31,1,31,3,31,530,8,31,1,32,3,32,533,8,32,1,32,1,32, + 3,32,537,8,32,1,32,1,32,3,32,541,8,32,1,32,3,32,544,8,32,1,33,1, + 33,1,34,4,34,549,8,34,11,34,12,34,550,1,34,1,34,1,35,4,35,556,8, + 35,11,35,12,35,557,1,35,1,35,1,36,1,36,1,36,4,36,565,8,36,11,36, + 12,36,566,1,36,1,36,4,36,571,8,36,11,36,12,36,572,1,36,1,36,4,36, + 577,8,36,11,36,12,36,578,1,36,1,36,4,36,583,8,36,11,36,12,36,584, + 1,36,1,36,4,36,589,8,36,11,36,12,36,590,1,36,1,36,1,36,1,36,1,36, + 1,36,3,36,599,8,36,1,36,5,36,602,8,36,10,36,12,36,605,9,36,1,36, + 1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38, + 1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40, + 1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42, + 1,42,1,43,1,43,1,43,1,44,1,44,1,44,1,45,1,45,1,45,1,46,1,46,1,46, + 1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48, + 1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50, + 1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53, + 1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1,56,1,56,1,56,1,57,1,57, + 1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59, + 1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,62, + 1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,65,1,65,1,65,1,66,1,66, + 1,66,1,67,1,67,1,67,1,68,1,68,1,68,1,69,1,69,1,69,1,70,1,70,1,70, + 1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72, + 1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74, + 1,74,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,79,3,79,819,8,79,1,79,1,79,1,80,3,80,824,8,80,1,80,1, + 80,3,80,828,8,80,1,81,3,81,831,8,81,1,81,1,81,3,81,835,8,81,1,81, + 1,81,3,81,839,8,81,1,81,3,81,842,8,81,1,82,1,82,1,83,4,83,847,8, + 83,11,83,12,83,848,1,83,1,83,1,84,4,84,854,8,84,11,84,12,84,855, + 1,84,1,84,1,85,1,85,1,85,4,85,863,8,85,11,85,12,85,864,1,85,1,85, + 4,85,869,8,85,11,85,12,85,870,1,85,1,85,4,85,875,8,85,11,85,12,85, + 876,1,85,1,85,4,85,881,8,85,11,85,12,85,882,1,85,1,85,4,85,887,8, + 85,11,85,12,85,888,1,85,1,85,1,85,1,85,1,85,1,85,3,85,897,8,85,1, + 85,5,85,900,8,85,10,85,12,85,903,9,85,1,85,1,85,1,85,1,85,1,86,1, + 86,3,86,911,8,86,1,86,1,86,1,86,1,86,1,86,1,86,3,86,919,8,86,1,86, + 3,86,922,8,86,1,87,4,87,925,8,87,11,87,12,87,926,1,87,1,87,1,88, + 4,88,932,8,88,11,88,12,88,933,1,88,1,88,1,89,1,89,1,89,4,89,941, + 8,89,11,89,12,89,942,1,89,1,89,4,89,947,8,89,11,89,12,89,948,1,89, + 1,89,4,89,953,8,89,11,89,12,89,954,1,89,1,89,4,89,959,8,89,11,89, + 12,89,960,1,89,1,89,4,89,965,8,89,11,89,12,89,966,1,89,1,89,1,89, + 1,89,1,89,1,89,3,89,975,8,89,1,89,5,89,978,8,89,10,89,12,89,981, + 9,89,1,89,1,89,1,89,1,89,1,90,4,90,988,8,90,11,90,12,90,989,1,91, + 4,91,993,8,91,11,91,12,91,994,1,91,1,91,1,92,4,92,1000,8,92,11,92, + 12,92,1001,1,92,1,92,1,93,4,93,1007,8,93,11,93,12,93,1008,1,94,4, + 94,1012,8,94,11,94,12,94,1013,1,94,1,94,1,95,4,95,1019,8,95,11,95, + 12,95,1020,1,95,1,95,1,405,0,96,6,1,8,2,10,3,12,4,14,5,16,6,18,7, + 20,8,22,0,24,0,26,0,28,9,30,10,32,11,34,12,36,0,38,0,40,0,42,0,44, + 0,46,13,48,14,50,15,52,16,54,17,56,18,58,19,60,20,62,21,64,22,66, + 23,68,24,70,25,72,26,74,27,76,28,78,29,80,30,82,31,84,32,86,33,88, + 34,90,35,92,36,94,37,96,38,98,39,100,40,102,41,104,42,106,43,108, + 44,110,45,112,46,114,47,116,48,118,49,120,50,122,51,124,52,126,53, + 128,54,130,55,132,56,134,57,136,58,138,59,140,60,142,61,144,62,146, + 63,148,64,150,65,152,66,154,67,156,68,158,69,160,70,162,71,164,72, + 166,73,168,74,170,75,172,76,174,77,176,78,178,79,180,80,182,81,184, + 82,186,83,188,84,190,85,192,86,194,87,196,88,6,0,1,2,3,4,5,11,2, + 0,43,43,45,45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13,3,0,9, + 10,13,13,32,32,2,0,65,90,97,122,5,0,35,35,42,43,45,46,63,63,95,95, + 2,0,34,34,39,39,2,0,9,9,32,32,5,0,33,33,35,35,38,38,59,59,92,92, + 2,0,100,100,115,115,1122,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0, + 12,1,0,0,0,0,14,1,0,0,0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0, + 28,1,0,0,0,0,30,1,0,0,0,0,32,1,0,0,0,0,34,1,0,0,0,0,46,1,0,0,0,0, + 48,1,0,0,0,0,50,1,0,0,0,0,52,1,0,0,0,0,54,1,0,0,0,1,56,1,0,0,0,1, + 58,1,0,0,0,1,60,1,0,0,0,1,62,1,0,0,0,1,64,1,0,0,0,1,66,1,0,0,0,1, + 68,1,0,0,0,1,70,1,0,0,0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,1, + 78,1,0,0,0,2,80,1,0,0,0,2,82,1,0,0,0,2,84,1,0,0,0,2,86,1,0,0,0,2, + 88,1,0,0,0,2,90,1,0,0,0,2,92,1,0,0,0,2,94,1,0,0,0,2,96,1,0,0,0,2, + 98,1,0,0,0,2,100,1,0,0,0,2,102,1,0,0,0,2,104,1,0,0,0,2,106,1,0,0, + 0,2,108,1,0,0,0,2,110,1,0,0,0,2,112,1,0,0,0,2,114,1,0,0,0,2,116, + 1,0,0,0,2,118,1,0,0,0,2,120,1,0,0,0,2,122,1,0,0,0,2,124,1,0,0,0, + 2,126,1,0,0,0,2,128,1,0,0,0,2,130,1,0,0,0,2,132,1,0,0,0,2,134,1, + 0,0,0,2,136,1,0,0,0,2,138,1,0,0,0,2,140,1,0,0,0,2,142,1,0,0,0,2, + 144,1,0,0,0,2,146,1,0,0,0,2,148,1,0,0,0,2,150,1,0,0,0,2,152,1,0, + 0,0,2,154,1,0,0,0,2,156,1,0,0,0,2,158,1,0,0,0,2,160,1,0,0,0,2,162, + 1,0,0,0,2,164,1,0,0,0,2,166,1,0,0,0,2,168,1,0,0,0,2,170,1,0,0,0, + 2,172,1,0,0,0,2,174,1,0,0,0,2,176,1,0,0,0,3,178,1,0,0,0,3,180,1, + 0,0,0,3,182,1,0,0,0,3,184,1,0,0,0,4,186,1,0,0,0,4,188,1,0,0,0,4, + 190,1,0,0,0,5,192,1,0,0,0,5,194,1,0,0,0,5,196,1,0,0,0,6,198,1,0, + 0,0,8,205,1,0,0,0,10,212,1,0,0,0,12,221,1,0,0,0,14,233,1,0,0,0,16, + 247,1,0,0,0,18,252,1,0,0,0,20,259,1,0,0,0,22,278,1,0,0,0,24,280, + 1,0,0,0,26,283,1,0,0,0,28,288,1,0,0,0,30,313,1,0,0,0,32,338,1,0, + 0,0,34,363,1,0,0,0,36,367,1,0,0,0,38,371,1,0,0,0,40,375,1,0,0,0, + 42,379,1,0,0,0,44,381,1,0,0,0,46,389,1,0,0,0,48,396,1,0,0,0,50,400, + 1,0,0,0,52,437,1,0,0,0,54,474,1,0,0,0,56,486,1,0,0,0,58,493,1,0, + 0,0,60,500,1,0,0,0,62,507,1,0,0,0,64,514,1,0,0,0,66,520,1,0,0,0, + 68,525,1,0,0,0,70,532,1,0,0,0,72,545,1,0,0,0,74,548,1,0,0,0,76,555, + 1,0,0,0,78,598,1,0,0,0,80,610,1,0,0,0,82,616,1,0,0,0,84,623,1,0, + 0,0,86,630,1,0,0,0,88,637,1,0,0,0,90,644,1,0,0,0,92,647,1,0,0,0, + 94,650,1,0,0,0,96,653,1,0,0,0,98,656,1,0,0,0,100,662,1,0,0,0,102, + 668,1,0,0,0,104,674,1,0,0,0,106,680,1,0,0,0,108,685,1,0,0,0,110, + 690,1,0,0,0,112,695,1,0,0,0,114,700,1,0,0,0,116,703,1,0,0,0,118, + 706,1,0,0,0,120,709,1,0,0,0,122,712,1,0,0,0,124,718,1,0,0,0,126, + 724,1,0,0,0,128,730,1,0,0,0,130,736,1,0,0,0,132,739,1,0,0,0,134, + 742,1,0,0,0,136,745,1,0,0,0,138,748,1,0,0,0,140,751,1,0,0,0,142, + 754,1,0,0,0,144,757,1,0,0,0,146,760,1,0,0,0,148,767,1,0,0,0,150, + 775,1,0,0,0,152,779,1,0,0,0,154,785,1,0,0,0,156,790,1,0,0,0,158, + 794,1,0,0,0,160,802,1,0,0,0,162,809,1,0,0,0,164,818,1,0,0,0,166, + 823,1,0,0,0,168,830,1,0,0,0,170,843,1,0,0,0,172,846,1,0,0,0,174, + 853,1,0,0,0,176,896,1,0,0,0,178,908,1,0,0,0,180,924,1,0,0,0,182, + 931,1,0,0,0,184,974,1,0,0,0,186,987,1,0,0,0,188,992,1,0,0,0,190, + 999,1,0,0,0,192,1006,1,0,0,0,194,1011,1,0,0,0,196,1018,1,0,0,0,198, + 199,5,68,0,0,199,200,5,65,0,0,200,201,5,84,0,0,201,202,5,65,0,0, + 202,203,1,0,0,0,203,204,6,0,0,0,204,7,1,0,0,0,205,206,5,86,0,0,206, + 207,5,65,0,0,207,208,5,82,0,0,208,209,5,83,0,0,209,210,1,0,0,0,210, + 211,6,1,1,0,211,9,1,0,0,0,212,213,5,70,0,0,213,214,5,79,0,0,214, + 215,5,82,0,0,215,216,5,77,0,0,216,217,5,65,0,0,217,218,5,84,0,0, + 218,219,1,0,0,0,219,220,6,2,2,0,220,11,1,0,0,0,221,222,5,78,0,0, + 222,223,5,85,0,0,223,224,5,76,0,0,224,225,5,76,0,0,225,226,5,86, + 0,0,226,227,5,65,0,0,227,228,5,76,0,0,228,229,5,85,0,0,229,230,5, + 69,0,0,230,231,1,0,0,0,231,232,6,3,3,0,232,13,1,0,0,0,233,234,5, + 78,0,0,234,235,5,85,0,0,235,236,5,76,0,0,236,237,5,76,0,0,237,238, + 5,83,0,0,238,239,5,84,0,0,239,240,5,82,0,0,240,241,5,73,0,0,241, + 242,5,78,0,0,242,243,5,71,0,0,243,244,1,0,0,0,244,245,6,4,4,0,245, + 15,1,0,0,0,246,248,7,0,0,0,247,246,1,0,0,0,247,248,1,0,0,0,248,249, + 1,0,0,0,249,250,3,26,10,0,250,17,1,0,0,0,251,253,7,0,0,0,252,251, + 1,0,0,0,252,253,1,0,0,0,253,256,1,0,0,0,254,257,3,26,10,0,255,257, + 3,22,8,0,256,254,1,0,0,0,256,255,1,0,0,0,257,19,1,0,0,0,258,260, + 7,0,0,0,259,258,1,0,0,0,259,260,1,0,0,0,260,263,1,0,0,0,261,264, + 3,26,10,0,262,264,3,22,8,0,263,261,1,0,0,0,263,262,1,0,0,0,264,270, + 1,0,0,0,265,267,7,1,0,0,266,268,7,0,0,0,267,266,1,0,0,0,267,268, + 1,0,0,0,268,269,1,0,0,0,269,271,3,26,10,0,270,265,1,0,0,0,270,271, + 1,0,0,0,271,21,1,0,0,0,272,273,3,26,10,0,273,274,5,46,0,0,274,275, + 3,26,10,0,275,279,1,0,0,0,276,277,5,46,0,0,277,279,3,26,10,0,278, + 272,1,0,0,0,278,276,1,0,0,0,279,23,1,0,0,0,280,281,7,2,0,0,281,25, + 1,0,0,0,282,284,3,24,9,0,283,282,1,0,0,0,284,285,1,0,0,0,285,283, + 1,0,0,0,285,286,1,0,0,0,286,27,1,0,0,0,287,289,5,35,0,0,288,287, + 1,0,0,0,289,290,1,0,0,0,290,288,1,0,0,0,290,291,1,0,0,0,291,295, + 1,0,0,0,292,294,8,3,0,0,293,292,1,0,0,0,294,297,1,0,0,0,295,293, + 1,0,0,0,295,296,1,0,0,0,296,301,1,0,0,0,297,295,1,0,0,0,298,300, + 5,35,0,0,299,298,1,0,0,0,300,303,1,0,0,0,301,299,1,0,0,0,301,302, + 1,0,0,0,302,307,1,0,0,0,303,301,1,0,0,0,304,306,8,3,0,0,305,304, + 1,0,0,0,306,309,1,0,0,0,307,305,1,0,0,0,307,308,1,0,0,0,308,310, + 1,0,0,0,309,307,1,0,0,0,310,311,6,11,5,0,311,29,1,0,0,0,312,314, + 5,33,0,0,313,312,1,0,0,0,314,315,1,0,0,0,315,313,1,0,0,0,315,316, + 1,0,0,0,316,320,1,0,0,0,317,319,8,3,0,0,318,317,1,0,0,0,319,322, + 1,0,0,0,320,318,1,0,0,0,320,321,1,0,0,0,321,326,1,0,0,0,322,320, + 1,0,0,0,323,325,5,33,0,0,324,323,1,0,0,0,325,328,1,0,0,0,326,324, + 1,0,0,0,326,327,1,0,0,0,327,332,1,0,0,0,328,326,1,0,0,0,329,331, + 8,3,0,0,330,329,1,0,0,0,331,334,1,0,0,0,332,330,1,0,0,0,332,333, + 1,0,0,0,333,335,1,0,0,0,334,332,1,0,0,0,335,336,6,12,5,0,336,31, + 1,0,0,0,337,339,5,59,0,0,338,337,1,0,0,0,339,340,1,0,0,0,340,338, + 1,0,0,0,340,341,1,0,0,0,341,345,1,0,0,0,342,344,8,3,0,0,343,342, + 1,0,0,0,344,347,1,0,0,0,345,343,1,0,0,0,345,346,1,0,0,0,346,351, + 1,0,0,0,347,345,1,0,0,0,348,350,5,59,0,0,349,348,1,0,0,0,350,353, + 1,0,0,0,351,349,1,0,0,0,351,352,1,0,0,0,352,357,1,0,0,0,353,351, + 1,0,0,0,354,356,8,3,0,0,355,354,1,0,0,0,356,359,1,0,0,0,357,355, + 1,0,0,0,357,358,1,0,0,0,358,360,1,0,0,0,359,357,1,0,0,0,360,361, + 6,13,5,0,361,33,1,0,0,0,362,364,8,4,0,0,363,362,1,0,0,0,364,365, + 1,0,0,0,365,363,1,0,0,0,365,366,1,0,0,0,366,35,1,0,0,0,367,368,7, + 5,0,0,368,37,1,0,0,0,369,372,3,36,15,0,370,372,3,24,9,0,371,369, + 1,0,0,0,371,370,1,0,0,0,372,39,1,0,0,0,373,376,3,38,16,0,374,376, + 7,6,0,0,375,373,1,0,0,0,375,374,1,0,0,0,376,41,1,0,0,0,377,380,3, + 40,17,0,378,380,7,7,0,0,379,377,1,0,0,0,379,378,1,0,0,0,380,43,1, + 0,0,0,381,385,3,40,17,0,382,384,3,42,18,0,383,382,1,0,0,0,384,387, + 1,0,0,0,385,383,1,0,0,0,385,386,1,0,0,0,386,45,1,0,0,0,387,385,1, + 0,0,0,388,390,7,8,0,0,389,388,1,0,0,0,390,391,1,0,0,0,391,389,1, + 0,0,0,391,392,1,0,0,0,392,393,1,0,0,0,393,394,6,20,6,0,394,47,1, + 0,0,0,395,397,7,3,0,0,396,395,1,0,0,0,397,398,1,0,0,0,398,396,1, + 0,0,0,398,399,1,0,0,0,399,49,1,0,0,0,400,405,5,123,0,0,401,404,3, + 50,22,0,402,404,9,0,0,0,403,401,1,0,0,0,403,402,1,0,0,0,404,407, + 1,0,0,0,405,406,1,0,0,0,405,403,1,0,0,0,406,408,1,0,0,0,407,405, + 1,0,0,0,408,409,5,125,0,0,409,410,1,0,0,0,410,411,6,22,5,0,411,51, + 1,0,0,0,412,438,7,9,0,0,413,415,5,47,0,0,414,416,5,47,0,0,415,414, + 1,0,0,0,416,417,1,0,0,0,417,415,1,0,0,0,417,418,1,0,0,0,418,438, + 1,0,0,0,419,421,5,42,0,0,420,422,5,42,0,0,421,420,1,0,0,0,422,423, + 1,0,0,0,423,421,1,0,0,0,423,424,1,0,0,0,424,438,1,0,0,0,425,427, + 5,61,0,0,426,428,5,61,0,0,427,426,1,0,0,0,428,429,1,0,0,0,429,427, + 1,0,0,0,429,430,1,0,0,0,430,438,1,0,0,0,431,432,5,82,0,0,432,433, + 5,69,0,0,433,434,5,77,0,0,434,435,5,65,0,0,435,436,5,82,0,0,436, + 438,5,75,0,0,437,412,1,0,0,0,437,413,1,0,0,0,437,419,1,0,0,0,437, + 425,1,0,0,0,437,431,1,0,0,0,438,442,1,0,0,0,439,441,5,32,0,0,440, + 439,1,0,0,0,441,444,1,0,0,0,442,440,1,0,0,0,442,443,1,0,0,0,443, + 445,1,0,0,0,444,442,1,0,0,0,445,446,3,48,21,0,446,447,1,0,0,0,447, + 448,6,23,5,0,448,53,1,0,0,0,449,475,7,9,0,0,450,452,5,47,0,0,451, + 453,5,47,0,0,452,451,1,0,0,0,453,454,1,0,0,0,454,452,1,0,0,0,454, + 455,1,0,0,0,455,475,1,0,0,0,456,458,5,42,0,0,457,459,5,42,0,0,458, + 457,1,0,0,0,459,460,1,0,0,0,460,458,1,0,0,0,460,461,1,0,0,0,461, + 475,1,0,0,0,462,464,5,61,0,0,463,465,5,61,0,0,464,463,1,0,0,0,465, + 466,1,0,0,0,466,464,1,0,0,0,466,467,1,0,0,0,467,475,1,0,0,0,468, + 469,5,82,0,0,469,470,5,69,0,0,470,471,5,77,0,0,471,472,5,65,0,0, + 472,473,5,82,0,0,473,475,5,75,0,0,474,449,1,0,0,0,474,450,1,0,0, + 0,474,456,1,0,0,0,474,462,1,0,0,0,474,468,1,0,0,0,475,479,1,0,0, + 0,476,478,8,3,0,0,477,476,1,0,0,0,478,481,1,0,0,0,479,477,1,0,0, + 0,479,480,1,0,0,0,480,482,1,0,0,0,481,479,1,0,0,0,482,483,3,48,21, + 0,483,484,1,0,0,0,484,485,6,24,5,0,485,55,1,0,0,0,486,487,5,88,0, + 0,487,488,5,95,0,0,488,489,5,65,0,0,489,490,5,88,0,0,490,491,5,73, + 0,0,491,492,5,83,0,0,492,57,1,0,0,0,493,494,5,89,0,0,494,495,5,95, + 0,0,495,496,5,65,0,0,496,497,5,88,0,0,497,498,5,73,0,0,498,499,5, + 83,0,0,499,59,1,0,0,0,500,501,5,90,0,0,501,502,5,95,0,0,502,503, + 5,65,0,0,503,504,5,88,0,0,504,505,5,73,0,0,505,506,5,83,0,0,506, + 61,1,0,0,0,507,508,5,65,0,0,508,509,5,95,0,0,509,510,5,65,0,0,510, + 511,5,88,0,0,511,512,5,73,0,0,512,513,5,83,0,0,513,63,1,0,0,0,514, + 515,3,18,6,0,515,516,5,112,0,0,516,517,5,112,0,0,517,518,5,109,0, + 0,518,65,1,0,0,0,519,521,7,0,0,0,520,519,1,0,0,0,520,521,1,0,0,0, + 521,522,1,0,0,0,522,523,3,26,10,0,523,67,1,0,0,0,524,526,7,0,0,0, + 525,524,1,0,0,0,525,526,1,0,0,0,526,529,1,0,0,0,527,530,3,26,10, + 0,528,530,3,22,8,0,529,527,1,0,0,0,529,528,1,0,0,0,530,69,1,0,0, + 0,531,533,7,0,0,0,532,531,1,0,0,0,532,533,1,0,0,0,533,536,1,0,0, + 0,534,537,3,26,10,0,535,537,3,22,8,0,536,534,1,0,0,0,536,535,1,0, + 0,0,537,543,1,0,0,0,538,540,7,1,0,0,539,541,7,0,0,0,540,539,1,0, + 0,0,540,541,1,0,0,0,541,542,1,0,0,0,542,544,3,26,10,0,543,538,1, + 0,0,0,543,544,1,0,0,0,544,71,1,0,0,0,545,546,3,44,19,0,546,73,1, + 0,0,0,547,549,7,8,0,0,548,547,1,0,0,0,549,550,1,0,0,0,550,548,1, + 0,0,0,550,551,1,0,0,0,551,552,1,0,0,0,552,553,6,34,6,0,553,75,1, + 0,0,0,554,556,7,3,0,0,555,554,1,0,0,0,556,557,1,0,0,0,557,555,1, + 0,0,0,557,558,1,0,0,0,558,559,1,0,0,0,559,560,6,35,7,0,560,77,1, + 0,0,0,561,599,7,9,0,0,562,564,5,47,0,0,563,565,5,47,0,0,564,563, + 1,0,0,0,565,566,1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,0,567,599, + 1,0,0,0,568,570,5,42,0,0,569,571,5,42,0,0,570,569,1,0,0,0,571,572, + 1,0,0,0,572,570,1,0,0,0,572,573,1,0,0,0,573,599,1,0,0,0,574,576, + 5,45,0,0,575,577,5,45,0,0,576,575,1,0,0,0,577,578,1,0,0,0,578,576, + 1,0,0,0,578,579,1,0,0,0,579,599,1,0,0,0,580,582,5,43,0,0,581,583, + 5,43,0,0,582,581,1,0,0,0,583,584,1,0,0,0,584,582,1,0,0,0,584,585, + 1,0,0,0,585,599,1,0,0,0,586,588,5,61,0,0,587,589,5,61,0,0,588,587, + 1,0,0,0,589,590,1,0,0,0,590,588,1,0,0,0,590,591,1,0,0,0,591,599, + 1,0,0,0,592,593,5,82,0,0,593,594,5,69,0,0,594,595,5,77,0,0,595,596, + 5,65,0,0,596,597,5,82,0,0,597,599,5,75,0,0,598,561,1,0,0,0,598,562, + 1,0,0,0,598,568,1,0,0,0,598,574,1,0,0,0,598,580,1,0,0,0,598,586, + 1,0,0,0,598,592,1,0,0,0,599,603,1,0,0,0,600,602,8,3,0,0,601,600, + 1,0,0,0,602,605,1,0,0,0,603,601,1,0,0,0,603,604,1,0,0,0,604,606, + 1,0,0,0,605,603,1,0,0,0,606,607,3,76,35,0,607,608,1,0,0,0,608,609, + 6,36,5,0,609,79,1,0,0,0,610,611,5,73,0,0,611,612,5,78,0,0,612,613, + 5,68,0,0,613,614,5,69,0,0,614,615,5,88,0,0,615,81,1,0,0,0,616,617, + 5,88,0,0,617,618,5,95,0,0,618,619,5,65,0,0,619,620,5,88,0,0,620, + 621,5,73,0,0,621,622,5,83,0,0,622,83,1,0,0,0,623,624,5,89,0,0,624, + 625,5,95,0,0,625,626,5,65,0,0,626,627,5,88,0,0,627,628,5,73,0,0, + 628,629,5,83,0,0,629,85,1,0,0,0,630,631,5,90,0,0,631,632,5,95,0, + 0,632,633,5,65,0,0,633,634,5,88,0,0,634,635,5,73,0,0,635,636,5,83, + 0,0,636,87,1,0,0,0,637,638,5,65,0,0,638,639,5,95,0,0,639,640,5,65, + 0,0,640,641,5,88,0,0,641,642,5,73,0,0,642,643,5,83,0,0,643,89,1, + 0,0,0,644,645,5,68,0,0,645,646,5,88,0,0,646,91,1,0,0,0,647,648,5, + 68,0,0,648,649,5,89,0,0,649,93,1,0,0,0,650,651,5,68,0,0,651,652, + 5,90,0,0,652,95,1,0,0,0,653,654,5,68,0,0,654,655,5,65,0,0,655,97, + 1,0,0,0,656,657,5,88,0,0,657,658,5,95,0,0,658,659,5,80,0,0,659,660, + 5,80,0,0,660,661,5,77,0,0,661,99,1,0,0,0,662,663,5,89,0,0,663,664, + 5,95,0,0,664,665,5,80,0,0,665,666,5,80,0,0,666,667,5,77,0,0,667, + 101,1,0,0,0,668,669,5,90,0,0,669,670,5,95,0,0,670,671,5,80,0,0,671, + 672,5,80,0,0,672,673,5,77,0,0,673,103,1,0,0,0,674,675,5,65,0,0,675, + 676,5,95,0,0,676,677,5,80,0,0,677,678,5,80,0,0,678,679,5,77,0,0, + 679,105,1,0,0,0,680,681,5,88,0,0,681,682,5,95,0,0,682,683,5,72,0, + 0,683,684,5,90,0,0,684,107,1,0,0,0,685,686,5,89,0,0,686,687,5,95, + 0,0,687,688,5,72,0,0,688,689,5,90,0,0,689,109,1,0,0,0,690,691,5, + 90,0,0,691,692,5,95,0,0,692,693,5,72,0,0,693,694,5,90,0,0,694,111, + 1,0,0,0,695,696,5,65,0,0,696,697,5,95,0,0,697,698,5,72,0,0,698,699, + 5,90,0,0,699,113,1,0,0,0,700,701,5,88,0,0,701,702,5,87,0,0,702,115, + 1,0,0,0,703,704,5,89,0,0,704,705,5,87,0,0,705,117,1,0,0,0,706,707, + 5,90,0,0,707,708,5,87,0,0,708,119,1,0,0,0,709,710,5,65,0,0,710,711, + 5,87,0,0,711,121,1,0,0,0,712,713,5,88,0,0,713,714,5,87,0,0,714,715, + 5,95,0,0,715,716,5,72,0,0,716,717,5,90,0,0,717,123,1,0,0,0,718,719, + 5,89,0,0,719,720,5,87,0,0,720,721,5,95,0,0,721,722,5,72,0,0,722, + 723,5,90,0,0,723,125,1,0,0,0,724,725,5,90,0,0,725,726,5,87,0,0,726, + 727,5,95,0,0,727,728,5,72,0,0,728,729,5,90,0,0,729,127,1,0,0,0,730, + 731,5,65,0,0,731,732,5,87,0,0,732,733,5,95,0,0,733,734,5,72,0,0, + 734,735,5,90,0,0,735,129,1,0,0,0,736,737,5,88,0,0,737,738,5,49,0, + 0,738,131,1,0,0,0,739,740,5,88,0,0,740,741,5,51,0,0,741,133,1,0, + 0,0,742,743,5,89,0,0,743,744,5,49,0,0,744,135,1,0,0,0,745,746,5, + 89,0,0,746,747,5,51,0,0,747,137,1,0,0,0,748,749,5,90,0,0,749,750, + 5,49,0,0,750,139,1,0,0,0,751,752,5,90,0,0,752,753,5,51,0,0,753,141, + 1,0,0,0,754,755,5,65,0,0,755,756,5,49,0,0,756,143,1,0,0,0,757,758, + 5,65,0,0,758,759,5,51,0,0,759,145,1,0,0,0,760,761,5,72,0,0,761,762, + 5,69,0,0,762,763,5,73,0,0,763,764,5,71,0,0,764,765,5,72,0,0,765, + 766,5,84,0,0,766,147,1,0,0,0,767,768,5,68,0,0,768,769,5,72,0,0,769, + 770,5,69,0,0,770,771,5,73,0,0,771,772,5,71,0,0,772,773,5,72,0,0, + 773,774,5,84,0,0,774,149,1,0,0,0,775,776,5,86,0,0,776,777,5,79,0, + 0,777,778,5,76,0,0,778,151,1,0,0,0,779,780,5,80,0,0,780,781,5,67, + 0,0,781,782,5,72,0,0,782,783,5,73,0,0,783,784,5,50,0,0,784,153,1, + 0,0,0,785,786,5,84,0,0,786,787,5,89,0,0,787,788,5,80,0,0,788,789, + 5,69,0,0,789,155,1,0,0,0,790,791,5,65,0,0,791,792,5,83,0,0,792,793, + 5,83,0,0,793,157,1,0,0,0,794,795,5,67,0,0,795,796,5,76,0,0,796,797, + 5,85,0,0,797,798,5,83,0,0,798,799,5,84,0,0,799,800,5,73,0,0,800, + 801,5,68,0,0,801,159,1,0,0,0,802,803,5,77,0,0,803,804,5,69,0,0,804, + 805,5,77,0,0,805,806,5,67,0,0,806,807,5,78,0,0,807,808,5,84,0,0, + 808,161,1,0,0,0,809,810,5,84,0,0,810,811,5,82,0,0,811,812,5,79,0, + 0,812,813,5,85,0,0,813,814,5,66,0,0,814,815,5,76,0,0,815,816,5,69, + 0,0,816,163,1,0,0,0,817,819,7,0,0,0,818,817,1,0,0,0,818,819,1,0, + 0,0,819,820,1,0,0,0,820,821,3,26,10,0,821,165,1,0,0,0,822,824,7, + 0,0,0,823,822,1,0,0,0,823,824,1,0,0,0,824,827,1,0,0,0,825,828,3, + 26,10,0,826,828,3,22,8,0,827,825,1,0,0,0,827,826,1,0,0,0,828,167, + 1,0,0,0,829,831,7,0,0,0,830,829,1,0,0,0,830,831,1,0,0,0,831,834, + 1,0,0,0,832,835,3,26,10,0,833,835,3,22,8,0,834,832,1,0,0,0,834,833, + 1,0,0,0,835,841,1,0,0,0,836,838,7,1,0,0,837,839,7,0,0,0,838,837, + 1,0,0,0,838,839,1,0,0,0,839,840,1,0,0,0,840,842,3,26,10,0,841,836, + 1,0,0,0,841,842,1,0,0,0,842,169,1,0,0,0,843,844,3,44,19,0,844,171, + 1,0,0,0,845,847,7,8,0,0,846,845,1,0,0,0,847,848,1,0,0,0,848,846, + 1,0,0,0,848,849,1,0,0,0,849,850,1,0,0,0,850,851,6,83,6,0,851,173, + 1,0,0,0,852,854,7,3,0,0,853,852,1,0,0,0,854,855,1,0,0,0,855,853, + 1,0,0,0,855,856,1,0,0,0,856,857,1,0,0,0,857,858,6,84,7,0,858,175, + 1,0,0,0,859,897,7,9,0,0,860,862,5,47,0,0,861,863,5,47,0,0,862,861, + 1,0,0,0,863,864,1,0,0,0,864,862,1,0,0,0,864,865,1,0,0,0,865,897, + 1,0,0,0,866,868,5,42,0,0,867,869,5,42,0,0,868,867,1,0,0,0,869,870, + 1,0,0,0,870,868,1,0,0,0,870,871,1,0,0,0,871,897,1,0,0,0,872,874, + 5,45,0,0,873,875,5,45,0,0,874,873,1,0,0,0,875,876,1,0,0,0,876,874, + 1,0,0,0,876,877,1,0,0,0,877,897,1,0,0,0,878,880,5,43,0,0,879,881, + 5,43,0,0,880,879,1,0,0,0,881,882,1,0,0,0,882,880,1,0,0,0,882,883, + 1,0,0,0,883,897,1,0,0,0,884,886,5,61,0,0,885,887,5,61,0,0,886,885, + 1,0,0,0,887,888,1,0,0,0,888,886,1,0,0,0,888,889,1,0,0,0,889,897, + 1,0,0,0,890,891,5,82,0,0,891,892,5,69,0,0,892,893,5,77,0,0,893,894, + 5,65,0,0,894,895,5,82,0,0,895,897,5,75,0,0,896,859,1,0,0,0,896,860, + 1,0,0,0,896,866,1,0,0,0,896,872,1,0,0,0,896,878,1,0,0,0,896,884, + 1,0,0,0,896,890,1,0,0,0,897,901,1,0,0,0,898,900,8,3,0,0,899,898, + 1,0,0,0,900,903,1,0,0,0,901,899,1,0,0,0,901,902,1,0,0,0,902,904, + 1,0,0,0,903,901,1,0,0,0,904,905,3,174,84,0,905,906,1,0,0,0,906,907, + 6,85,5,0,907,177,1,0,0,0,908,910,5,37,0,0,909,911,3,26,10,0,910, + 909,1,0,0,0,910,911,1,0,0,0,911,921,1,0,0,0,912,922,7,10,0,0,913, + 914,5,46,0,0,914,915,3,26,10,0,915,916,5,102,0,0,916,922,1,0,0,0, + 917,919,5,43,0,0,918,917,1,0,0,0,918,919,1,0,0,0,919,920,1,0,0,0, + 920,922,5,101,0,0,921,912,1,0,0,0,921,913,1,0,0,0,921,918,1,0,0, + 0,922,179,1,0,0,0,923,925,7,8,0,0,924,923,1,0,0,0,925,926,1,0,0, + 0,926,924,1,0,0,0,926,927,1,0,0,0,927,928,1,0,0,0,928,929,6,87,6, + 0,929,181,1,0,0,0,930,932,7,3,0,0,931,930,1,0,0,0,932,933,1,0,0, + 0,933,931,1,0,0,0,933,934,1,0,0,0,934,935,1,0,0,0,935,936,6,88,7, + 0,936,183,1,0,0,0,937,975,7,9,0,0,938,940,5,47,0,0,939,941,5,47, + 0,0,940,939,1,0,0,0,941,942,1,0,0,0,942,940,1,0,0,0,942,943,1,0, + 0,0,943,975,1,0,0,0,944,946,5,42,0,0,945,947,5,42,0,0,946,945,1, + 0,0,0,947,948,1,0,0,0,948,946,1,0,0,0,948,949,1,0,0,0,949,975,1, + 0,0,0,950,952,5,45,0,0,951,953,5,45,0,0,952,951,1,0,0,0,953,954, + 1,0,0,0,954,952,1,0,0,0,954,955,1,0,0,0,955,975,1,0,0,0,956,958, + 5,43,0,0,957,959,5,43,0,0,958,957,1,0,0,0,959,960,1,0,0,0,960,958, + 1,0,0,0,960,961,1,0,0,0,961,975,1,0,0,0,962,964,5,61,0,0,963,965, + 5,61,0,0,964,963,1,0,0,0,965,966,1,0,0,0,966,964,1,0,0,0,966,967, + 1,0,0,0,967,975,1,0,0,0,968,969,5,82,0,0,969,970,5,69,0,0,970,971, + 5,77,0,0,971,972,5,65,0,0,972,973,5,82,0,0,973,975,5,75,0,0,974, + 937,1,0,0,0,974,938,1,0,0,0,974,944,1,0,0,0,974,950,1,0,0,0,974, + 956,1,0,0,0,974,962,1,0,0,0,974,968,1,0,0,0,975,979,1,0,0,0,976, + 978,8,3,0,0,977,976,1,0,0,0,978,981,1,0,0,0,979,977,1,0,0,0,979, + 980,1,0,0,0,980,982,1,0,0,0,981,979,1,0,0,0,982,983,3,182,88,0,983, + 984,1,0,0,0,984,985,6,89,5,0,985,185,1,0,0,0,986,988,8,4,0,0,987, + 986,1,0,0,0,988,989,1,0,0,0,989,987,1,0,0,0,989,990,1,0,0,0,990, + 187,1,0,0,0,991,993,7,8,0,0,992,991,1,0,0,0,993,994,1,0,0,0,994, + 992,1,0,0,0,994,995,1,0,0,0,995,996,1,0,0,0,996,997,6,91,6,0,997, + 189,1,0,0,0,998,1000,7,3,0,0,999,998,1,0,0,0,1000,1001,1,0,0,0,1001, + 999,1,0,0,0,1001,1002,1,0,0,0,1002,1003,1,0,0,0,1003,1004,6,92,7, + 0,1004,191,1,0,0,0,1005,1007,8,4,0,0,1006,1005,1,0,0,0,1007,1008, + 1,0,0,0,1008,1006,1,0,0,0,1008,1009,1,0,0,0,1009,193,1,0,0,0,1010, + 1012,7,8,0,0,1011,1010,1,0,0,0,1012,1013,1,0,0,0,1013,1011,1,0,0, + 0,1013,1014,1,0,0,0,1014,1015,1,0,0,0,1015,1016,6,94,6,0,1016,195, + 1,0,0,0,1017,1019,7,3,0,0,1018,1017,1,0,0,0,1019,1020,1,0,0,0,1020, + 1018,1,0,0,0,1020,1021,1,0,0,0,1021,1022,1,0,0,0,1022,1023,6,95, + 7,0,1023,197,1,0,0,0,96,0,1,2,3,4,5,247,252,256,259,263,267,270, + 278,285,290,295,301,307,315,320,326,332,340,345,351,357,365,371, + 375,379,385,391,398,403,405,417,423,429,437,442,454,460,466,474, + 479,520,525,529,532,536,540,543,550,557,566,572,578,584,590,598, + 603,818,823,827,830,834,838,841,848,855,864,870,876,882,888,896, + 901,910,918,921,926,933,942,948,954,960,966,974,979,989,994,1001, + 1008,1013,1020,8,5,1,0,5,2,0,5,3,0,5,4,0,5,5,0,0,1,0,6,0,0,4,0,0 ] class NmrPipePKLexer(Lexer): diff --git a/wwpdb/utils/nmr/pk/NmrPipePKParser.py b/wwpdb/utils/nmr/pk/NmrPipePKParser.py index 6ad389201..ccbfc97c2 100644 --- a/wwpdb/utils/nmr/pk/NmrPipePKParser.py +++ b/wwpdb/utils/nmr/pk/NmrPipePKParser.py @@ -10,147 +10,156 @@ def serializedATN(): return [ - 4,1,88,428,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 4,1,88,446,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,2,8,7,8,1,0,1,0,1,0,1,0,5,0,23,8,0,10,0,12,0,26,9,0,1, 0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,1,2,3,2,66,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 2,1,2,1,2,3,2,63,8,2,1,2,1,2,1,2,3,2,68,8,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,3,2,96,8,2,1,2,1,2,1,2,1,2,3,2,102,8,2,1,2,1,2,1, - 2,3,2,107,8,2,1,2,4,2,110,8,2,11,2,12,2,111,1,3,1,3,1,3,1,3,1,3, - 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, - 1,3,1,3,1,3,1,3,1,3,3,3,140,8,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4, + 1,2,1,2,1,2,1,2,3,2,95,8,2,1,2,1,2,1,2,3,2,100,8,2,1,2,1,2,1,2,1, + 2,3,2,106,8,2,1,2,1,2,1,2,3,2,111,8,2,1,2,4,2,114,8,2,11,2,12,2, + 115,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,141,8,3,1,3,1,3,1,3,3,3,146, + 8,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,179,8,4, + 1,4,1,4,1,4,3,4,182,8,4,1,4,1,4,1,4,3,4,187,8,4,1,4,1,4,1,4,1,4, 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,3,4,217,8,4,1,4,1,4,1,4,1,4,3,4,223,8,4,1,4,1,4, - 1,4,3,4,228,8,4,1,4,4,4,231,8,4,11,4,12,4,232,1,5,1,5,1,5,1,5,1, + 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,222,8,4, + 1,4,1,4,1,4,3,4,227,8,4,1,4,1,4,1,4,1,4,3,4,233,8,4,1,4,1,4,1,4, + 3,4,238,8,4,1,4,4,4,241,8,4,11,4,12,4,242,1,5,1,5,1,5,1,5,1,5,1, 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,269,8, - 5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,316,8, + 5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,276,8,5,1,5,1,5,1,5,3, + 5,281,8,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,325,8,6,1, + 6,1,6,1,6,3,6,330,8,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,362,8,6,1, - 6,1,6,1,6,1,6,3,6,368,8,6,1,6,1,6,1,6,3,6,373,8,6,1,6,4,6,376,8, - 6,11,6,12,6,377,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, - 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, - 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,422, - 8,7,1,7,1,7,1,8,1,8,1,8,0,0,9,0,2,4,6,8,10,12,14,16,0,2,1,0,18,21, - 2,0,7,8,12,12,440,0,24,1,0,0,0,2,29,1,0,0,0,4,38,1,0,0,0,6,113,1, - 0,0,0,8,143,1,0,0,0,10,234,1,0,0,0,12,272,1,0,0,0,14,379,1,0,0,0, - 16,425,1,0,0,0,18,23,3,2,1,0,19,23,3,4,2,0,20,23,3,8,4,0,21,23,3, - 12,6,0,22,18,1,0,0,0,22,19,1,0,0,0,22,20,1,0,0,0,22,21,1,0,0,0,23, - 26,1,0,0,0,24,22,1,0,0,0,24,25,1,0,0,0,25,27,1,0,0,0,26,24,1,0,0, - 0,27,28,5,0,0,1,28,1,1,0,0,0,29,30,5,1,0,0,30,31,7,0,0,0,31,32,5, - 26,0,0,32,33,5,23,0,0,33,34,5,23,0,0,34,35,5,22,0,0,35,36,5,22,0, - 0,36,37,5,28,0,0,37,3,1,0,0,0,38,39,5,2,0,0,39,40,5,30,0,0,40,41, - 5,31,0,0,41,42,5,32,0,0,42,43,5,35,0,0,43,44,5,36,0,0,44,45,5,39, - 0,0,45,46,5,40,0,0,46,47,5,43,0,0,47,48,5,44,0,0,48,49,5,47,0,0, - 49,50,5,48,0,0,50,51,5,51,0,0,51,52,5,52,0,0,52,53,5,55,0,0,53,54, - 5,56,0,0,54,55,5,57,0,0,55,56,5,58,0,0,56,57,5,63,0,0,57,58,5,64, - 0,0,58,59,5,65,0,0,59,60,5,66,0,0,60,61,5,67,0,0,61,62,5,68,0,0, - 62,63,5,69,0,0,63,65,5,70,0,0,64,66,5,71,0,0,65,64,1,0,0,0,65,66, - 1,0,0,0,66,67,1,0,0,0,67,68,5,77,0,0,68,69,5,3,0,0,69,70,5,79,0, - 0,70,71,5,79,0,0,71,72,5,79,0,0,72,73,5,79,0,0,73,74,5,79,0,0,74, - 75,5,79,0,0,75,76,5,79,0,0,76,77,5,79,0,0,77,78,5,79,0,0,78,79,5, - 79,0,0,79,80,5,79,0,0,80,81,5,79,0,0,81,82,5,79,0,0,82,83,5,79,0, - 0,83,84,5,79,0,0,84,85,5,79,0,0,85,86,5,79,0,0,86,87,5,79,0,0,87, - 88,5,79,0,0,88,89,5,79,0,0,89,90,5,79,0,0,90,91,5,79,0,0,91,92,5, - 79,0,0,92,93,5,79,0,0,93,95,5,79,0,0,94,96,5,79,0,0,95,94,1,0,0, - 0,95,96,1,0,0,0,96,97,1,0,0,0,97,101,5,81,0,0,98,99,5,4,0,0,99,100, - 5,83,0,0,100,102,5,85,0,0,101,98,1,0,0,0,101,102,1,0,0,0,102,106, - 1,0,0,0,103,104,5,5,0,0,104,105,5,86,0,0,105,107,5,88,0,0,106,103, - 1,0,0,0,106,107,1,0,0,0,107,109,1,0,0,0,108,110,3,6,3,0,109,108, - 1,0,0,0,110,111,1,0,0,0,111,109,1,0,0,0,111,112,1,0,0,0,112,5,1, - 0,0,0,113,114,5,6,0,0,114,115,3,16,8,0,115,116,3,16,8,0,116,117, - 3,16,8,0,117,118,3,16,8,0,118,119,3,16,8,0,119,120,3,16,8,0,120, - 121,3,16,8,0,121,122,3,16,8,0,122,123,3,16,8,0,123,124,3,16,8,0, - 124,125,3,16,8,0,125,126,3,16,8,0,126,127,5,6,0,0,127,128,5,6,0, - 0,128,129,5,6,0,0,129,130,5,6,0,0,130,131,3,16,8,0,131,132,3,16, - 8,0,132,133,3,16,8,0,133,134,3,16,8,0,134,135,5,6,0,0,135,136,5, - 12,0,0,136,137,5,6,0,0,137,139,5,6,0,0,138,140,5,6,0,0,139,138,1, - 0,0,0,139,140,1,0,0,0,140,141,1,0,0,0,141,142,5,14,0,0,142,7,1,0, - 0,0,143,144,5,2,0,0,144,145,5,30,0,0,145,146,5,31,0,0,146,147,5, - 32,0,0,147,148,5,33,0,0,148,149,5,35,0,0,149,150,5,36,0,0,150,151, - 5,37,0,0,151,152,5,39,0,0,152,153,5,40,0,0,153,154,5,41,0,0,154, - 155,5,43,0,0,155,156,5,44,0,0,156,157,5,45,0,0,157,158,5,47,0,0, - 158,159,5,48,0,0,159,160,5,49,0,0,160,161,5,51,0,0,161,162,5,52, - 0,0,162,163,5,53,0,0,163,164,5,55,0,0,164,165,5,56,0,0,165,166,5, - 57,0,0,166,167,5,58,0,0,167,168,5,59,0,0,168,169,5,60,0,0,169,170, - 5,63,0,0,170,171,5,64,0,0,171,172,5,65,0,0,172,173,5,66,0,0,173, - 174,5,67,0,0,174,175,5,68,0,0,175,176,5,69,0,0,176,178,5,70,0,0, - 177,179,5,71,0,0,178,177,1,0,0,0,178,179,1,0,0,0,179,180,1,0,0,0, - 180,181,5,77,0,0,181,182,5,3,0,0,182,183,5,79,0,0,183,184,5,79,0, - 0,184,185,5,79,0,0,185,186,5,79,0,0,186,187,5,79,0,0,187,188,5,79, - 0,0,188,189,5,79,0,0,189,190,5,79,0,0,190,191,5,79,0,0,191,192,5, - 79,0,0,192,193,5,79,0,0,193,194,5,79,0,0,194,195,5,79,0,0,195,196, - 5,79,0,0,196,197,5,79,0,0,197,198,5,79,0,0,198,199,5,79,0,0,199, - 200,5,79,0,0,200,201,5,79,0,0,201,202,5,79,0,0,202,203,5,79,0,0, - 203,204,5,79,0,0,204,205,5,79,0,0,205,206,5,79,0,0,206,207,5,79, - 0,0,207,208,5,79,0,0,208,209,5,79,0,0,209,210,5,79,0,0,210,211,5, - 79,0,0,211,212,5,79,0,0,212,213,5,79,0,0,213,214,5,79,0,0,214,216, - 5,79,0,0,215,217,5,79,0,0,216,215,1,0,0,0,216,217,1,0,0,0,217,218, - 1,0,0,0,218,222,5,81,0,0,219,220,5,4,0,0,220,221,5,83,0,0,221,223, - 5,85,0,0,222,219,1,0,0,0,222,223,1,0,0,0,223,227,1,0,0,0,224,225, - 5,5,0,0,225,226,5,86,0,0,226,228,5,88,0,0,227,224,1,0,0,0,227,228, - 1,0,0,0,228,230,1,0,0,0,229,231,3,10,5,0,230,229,1,0,0,0,231,232, - 1,0,0,0,232,230,1,0,0,0,232,233,1,0,0,0,233,9,1,0,0,0,234,235,5, - 6,0,0,235,236,3,16,8,0,236,237,3,16,8,0,237,238,3,16,8,0,238,239, - 3,16,8,0,239,240,3,16,8,0,240,241,3,16,8,0,241,242,3,16,8,0,242, - 243,3,16,8,0,243,244,3,16,8,0,244,245,3,16,8,0,245,246,3,16,8,0, - 246,247,3,16,8,0,247,248,3,16,8,0,248,249,3,16,8,0,249,250,3,16, - 8,0,250,251,3,16,8,0,251,252,3,16,8,0,252,253,3,16,8,0,253,254,5, - 6,0,0,254,255,5,6,0,0,255,256,5,6,0,0,256,257,5,6,0,0,257,258,5, - 6,0,0,258,259,5,6,0,0,259,260,3,16,8,0,260,261,3,16,8,0,261,262, - 3,16,8,0,262,263,3,16,8,0,263,264,5,6,0,0,264,265,5,12,0,0,265,266, - 5,6,0,0,266,268,5,6,0,0,267,269,5,6,0,0,268,267,1,0,0,0,268,269, - 1,0,0,0,269,270,1,0,0,0,270,271,5,14,0,0,271,11,1,0,0,0,272,273, - 5,2,0,0,273,274,5,30,0,0,274,275,5,31,0,0,275,276,5,32,0,0,276,277, - 5,33,0,0,277,278,5,34,0,0,278,279,5,35,0,0,279,280,5,36,0,0,280, - 281,5,37,0,0,281,282,5,37,0,0,282,283,5,39,0,0,283,284,5,40,0,0, - 284,285,5,41,0,0,285,286,5,42,0,0,286,287,5,43,0,0,287,288,5,44, - 0,0,288,289,5,45,0,0,289,290,5,46,0,0,290,291,5,47,0,0,291,292,5, - 48,0,0,292,293,5,49,0,0,293,294,5,50,0,0,294,295,5,51,0,0,295,296, - 5,52,0,0,296,297,5,53,0,0,297,298,5,54,0,0,298,299,5,55,0,0,299, - 300,5,56,0,0,300,301,5,57,0,0,301,302,5,58,0,0,302,303,5,59,0,0, - 303,304,5,60,0,0,304,305,5,61,0,0,305,306,5,62,0,0,306,307,5,63, - 0,0,307,308,5,64,0,0,308,309,5,65,0,0,309,310,5,66,0,0,310,311,5, - 67,0,0,311,312,5,68,0,0,312,313,5,69,0,0,313,315,5,70,0,0,314,316, - 5,71,0,0,315,314,1,0,0,0,315,316,1,0,0,0,316,317,1,0,0,0,317,318, - 5,77,0,0,318,319,5,3,0,0,319,320,5,79,0,0,320,321,5,79,0,0,321,322, - 5,79,0,0,322,323,5,79,0,0,323,324,5,79,0,0,324,325,5,79,0,0,325, - 326,5,79,0,0,326,327,5,79,0,0,327,328,5,79,0,0,328,329,5,79,0,0, - 329,330,5,79,0,0,330,331,5,79,0,0,331,332,5,79,0,0,332,333,5,79, - 0,0,333,334,5,79,0,0,334,335,5,79,0,0,335,336,5,79,0,0,336,337,5, - 79,0,0,337,338,5,79,0,0,338,339,5,79,0,0,339,340,5,79,0,0,340,341, - 5,79,0,0,341,342,5,79,0,0,342,343,5,79,0,0,343,344,5,79,0,0,344, - 345,5,79,0,0,345,346,5,79,0,0,346,347,5,79,0,0,347,348,5,79,0,0, - 348,349,5,79,0,0,349,350,5,79,0,0,350,351,5,79,0,0,351,352,5,79, - 0,0,352,353,5,79,0,0,353,354,5,79,0,0,354,355,5,79,0,0,355,356,5, - 79,0,0,356,357,5,79,0,0,357,358,5,79,0,0,358,359,5,79,0,0,359,361, - 5,79,0,0,360,362,5,79,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362,363, - 1,0,0,0,363,367,5,81,0,0,364,365,5,4,0,0,365,366,5,83,0,0,366,368, - 5,85,0,0,367,364,1,0,0,0,367,368,1,0,0,0,368,372,1,0,0,0,369,370, - 5,5,0,0,370,371,5,86,0,0,371,373,5,88,0,0,372,369,1,0,0,0,372,373, - 1,0,0,0,373,375,1,0,0,0,374,376,3,14,7,0,375,374,1,0,0,0,376,377, - 1,0,0,0,377,375,1,0,0,0,377,378,1,0,0,0,378,13,1,0,0,0,379,380,5, - 6,0,0,380,381,3,16,8,0,381,382,3,16,8,0,382,383,3,16,8,0,383,384, - 3,16,8,0,384,385,3,16,8,0,385,386,3,16,8,0,386,387,3,16,8,0,387, - 388,3,16,8,0,388,389,3,16,8,0,389,390,3,16,8,0,390,391,3,16,8,0, - 391,392,3,16,8,0,392,393,3,16,8,0,393,394,3,16,8,0,394,395,3,16, - 8,0,395,396,3,16,8,0,396,397,3,16,8,0,397,398,3,16,8,0,398,399,3, - 16,8,0,399,400,3,16,8,0,400,401,3,16,8,0,401,402,3,16,8,0,402,403, - 3,16,8,0,403,404,3,16,8,0,404,405,5,6,0,0,405,406,5,6,0,0,406,407, - 5,6,0,0,407,408,5,6,0,0,408,409,5,6,0,0,409,410,5,6,0,0,410,411, - 5,6,0,0,411,412,5,6,0,0,412,413,3,16,8,0,413,414,3,16,8,0,414,415, - 3,16,8,0,415,416,3,16,8,0,416,417,5,6,0,0,417,418,5,12,0,0,418,419, - 5,6,0,0,419,421,5,6,0,0,420,422,5,6,0,0,421,420,1,0,0,0,421,422, - 1,0,0,0,422,423,1,0,0,0,423,424,5,14,0,0,424,15,1,0,0,0,425,426, - 7,1,0,0,426,17,1,0,0,0,20,22,24,65,95,101,106,111,139,178,216,222, - 227,232,268,315,361,367,372,377,421 + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,373, + 8,6,1,6,1,6,1,6,3,6,378,8,6,1,6,1,6,1,6,1,6,3,6,384,8,6,1,6,1,6, + 1,6,3,6,389,8,6,1,6,4,6,392,8,6,11,6,12,6,393,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,3,7,435,8,7,1,7,1,7,1,7,3,7,440,8,7,1,7,1,7,1,8,1,8,1, + 8,0,0,9,0,2,4,6,8,10,12,14,16,0,2,1,0,18,21,2,0,7,8,12,12,467,0, + 24,1,0,0,0,2,29,1,0,0,0,4,38,1,0,0,0,6,117,1,0,0,0,8,149,1,0,0,0, + 10,244,1,0,0,0,12,284,1,0,0,0,14,395,1,0,0,0,16,443,1,0,0,0,18,23, + 3,2,1,0,19,23,3,4,2,0,20,23,3,8,4,0,21,23,3,12,6,0,22,18,1,0,0,0, + 22,19,1,0,0,0,22,20,1,0,0,0,22,21,1,0,0,0,23,26,1,0,0,0,24,22,1, + 0,0,0,24,25,1,0,0,0,25,27,1,0,0,0,26,24,1,0,0,0,27,28,5,0,0,1,28, + 1,1,0,0,0,29,30,5,1,0,0,30,31,7,0,0,0,31,32,5,26,0,0,32,33,5,23, + 0,0,33,34,5,23,0,0,34,35,5,22,0,0,35,36,5,22,0,0,36,37,5,28,0,0, + 37,3,1,0,0,0,38,39,5,2,0,0,39,40,5,30,0,0,40,41,5,31,0,0,41,42,5, + 32,0,0,42,43,5,35,0,0,43,44,5,36,0,0,44,45,5,39,0,0,45,46,5,40,0, + 0,46,47,5,43,0,0,47,48,5,44,0,0,48,49,5,47,0,0,49,50,5,48,0,0,50, + 51,5,51,0,0,51,52,5,52,0,0,52,53,5,55,0,0,53,54,5,56,0,0,54,55,5, + 57,0,0,55,56,5,58,0,0,56,57,5,63,0,0,57,58,5,64,0,0,58,59,5,65,0, + 0,59,60,5,66,0,0,60,62,5,67,0,0,61,63,5,68,0,0,62,61,1,0,0,0,62, + 63,1,0,0,0,63,64,1,0,0,0,64,65,5,69,0,0,65,67,5,70,0,0,66,68,5,71, + 0,0,67,66,1,0,0,0,67,68,1,0,0,0,68,69,1,0,0,0,69,70,5,77,0,0,70, + 71,5,3,0,0,71,72,5,79,0,0,72,73,5,79,0,0,73,74,5,79,0,0,74,75,5, + 79,0,0,75,76,5,79,0,0,76,77,5,79,0,0,77,78,5,79,0,0,78,79,5,79,0, + 0,79,80,5,79,0,0,80,81,5,79,0,0,81,82,5,79,0,0,82,83,5,79,0,0,83, + 84,5,79,0,0,84,85,5,79,0,0,85,86,5,79,0,0,86,87,5,79,0,0,87,88,5, + 79,0,0,88,89,5,79,0,0,89,90,5,79,0,0,90,91,5,79,0,0,91,92,5,79,0, + 0,92,94,5,79,0,0,93,95,5,79,0,0,94,93,1,0,0,0,94,95,1,0,0,0,95,96, + 1,0,0,0,96,97,5,79,0,0,97,99,5,79,0,0,98,100,5,79,0,0,99,98,1,0, + 0,0,99,100,1,0,0,0,100,101,1,0,0,0,101,105,5,81,0,0,102,103,5,4, + 0,0,103,104,5,83,0,0,104,106,5,85,0,0,105,102,1,0,0,0,105,106,1, + 0,0,0,106,110,1,0,0,0,107,108,5,5,0,0,108,109,5,86,0,0,109,111,5, + 88,0,0,110,107,1,0,0,0,110,111,1,0,0,0,111,113,1,0,0,0,112,114,3, + 6,3,0,113,112,1,0,0,0,114,115,1,0,0,0,115,113,1,0,0,0,115,116,1, + 0,0,0,116,5,1,0,0,0,117,118,5,6,0,0,118,119,3,16,8,0,119,120,3,16, + 8,0,120,121,3,16,8,0,121,122,3,16,8,0,122,123,3,16,8,0,123,124,3, + 16,8,0,124,125,3,16,8,0,125,126,3,16,8,0,126,127,3,16,8,0,127,128, + 3,16,8,0,128,129,3,16,8,0,129,130,3,16,8,0,130,131,5,6,0,0,131,132, + 5,6,0,0,132,133,5,6,0,0,133,134,5,6,0,0,134,135,3,16,8,0,135,136, + 3,16,8,0,136,137,3,16,8,0,137,138,3,16,8,0,138,140,5,6,0,0,139,141, + 5,12,0,0,140,139,1,0,0,0,140,141,1,0,0,0,141,142,1,0,0,0,142,143, + 5,6,0,0,143,145,5,6,0,0,144,146,5,6,0,0,145,144,1,0,0,0,145,146, + 1,0,0,0,146,147,1,0,0,0,147,148,5,14,0,0,148,7,1,0,0,0,149,150,5, + 2,0,0,150,151,5,30,0,0,151,152,5,31,0,0,152,153,5,32,0,0,153,154, + 5,33,0,0,154,155,5,35,0,0,155,156,5,36,0,0,156,157,5,37,0,0,157, + 158,5,39,0,0,158,159,5,40,0,0,159,160,5,41,0,0,160,161,5,43,0,0, + 161,162,5,44,0,0,162,163,5,45,0,0,163,164,5,47,0,0,164,165,5,48, + 0,0,165,166,5,49,0,0,166,167,5,51,0,0,167,168,5,52,0,0,168,169,5, + 53,0,0,169,170,5,55,0,0,170,171,5,56,0,0,171,172,5,57,0,0,172,173, + 5,58,0,0,173,174,5,59,0,0,174,175,5,60,0,0,175,176,5,63,0,0,176, + 177,5,64,0,0,177,178,5,65,0,0,178,179,5,66,0,0,179,181,5,67,0,0, + 180,182,5,68,0,0,181,180,1,0,0,0,181,182,1,0,0,0,182,183,1,0,0,0, + 183,184,5,69,0,0,184,186,5,70,0,0,185,187,5,71,0,0,186,185,1,0,0, + 0,186,187,1,0,0,0,187,188,1,0,0,0,188,189,5,77,0,0,189,190,5,3,0, + 0,190,191,5,79,0,0,191,192,5,79,0,0,192,193,5,79,0,0,193,194,5,79, + 0,0,194,195,5,79,0,0,195,196,5,79,0,0,196,197,5,79,0,0,197,198,5, + 79,0,0,198,199,5,79,0,0,199,200,5,79,0,0,200,201,5,79,0,0,201,202, + 5,79,0,0,202,203,5,79,0,0,203,204,5,79,0,0,204,205,5,79,0,0,205, + 206,5,79,0,0,206,207,5,79,0,0,207,208,5,79,0,0,208,209,5,79,0,0, + 209,210,5,79,0,0,210,211,5,79,0,0,211,212,5,79,0,0,212,213,5,79, + 0,0,213,214,5,79,0,0,214,215,5,79,0,0,215,216,5,79,0,0,216,217,5, + 79,0,0,217,218,5,79,0,0,218,219,5,79,0,0,219,221,5,79,0,0,220,222, + 5,79,0,0,221,220,1,0,0,0,221,222,1,0,0,0,222,223,1,0,0,0,223,224, + 5,79,0,0,224,226,5,79,0,0,225,227,5,79,0,0,226,225,1,0,0,0,226,227, + 1,0,0,0,227,228,1,0,0,0,228,232,5,81,0,0,229,230,5,4,0,0,230,231, + 5,83,0,0,231,233,5,85,0,0,232,229,1,0,0,0,232,233,1,0,0,0,233,237, + 1,0,0,0,234,235,5,5,0,0,235,236,5,86,0,0,236,238,5,88,0,0,237,234, + 1,0,0,0,237,238,1,0,0,0,238,240,1,0,0,0,239,241,3,10,5,0,240,239, + 1,0,0,0,241,242,1,0,0,0,242,240,1,0,0,0,242,243,1,0,0,0,243,9,1, + 0,0,0,244,245,5,6,0,0,245,246,3,16,8,0,246,247,3,16,8,0,247,248, + 3,16,8,0,248,249,3,16,8,0,249,250,3,16,8,0,250,251,3,16,8,0,251, + 252,3,16,8,0,252,253,3,16,8,0,253,254,3,16,8,0,254,255,3,16,8,0, + 255,256,3,16,8,0,256,257,3,16,8,0,257,258,3,16,8,0,258,259,3,16, + 8,0,259,260,3,16,8,0,260,261,3,16,8,0,261,262,3,16,8,0,262,263,3, + 16,8,0,263,264,5,6,0,0,264,265,5,6,0,0,265,266,5,6,0,0,266,267,5, + 6,0,0,267,268,5,6,0,0,268,269,5,6,0,0,269,270,3,16,8,0,270,271,3, + 16,8,0,271,272,3,16,8,0,272,273,3,16,8,0,273,275,5,6,0,0,274,276, + 5,12,0,0,275,274,1,0,0,0,275,276,1,0,0,0,276,277,1,0,0,0,277,278, + 5,6,0,0,278,280,5,6,0,0,279,281,5,6,0,0,280,279,1,0,0,0,280,281, + 1,0,0,0,281,282,1,0,0,0,282,283,5,14,0,0,283,11,1,0,0,0,284,285, + 5,2,0,0,285,286,5,30,0,0,286,287,5,31,0,0,287,288,5,32,0,0,288,289, + 5,33,0,0,289,290,5,34,0,0,290,291,5,35,0,0,291,292,5,36,0,0,292, + 293,5,37,0,0,293,294,5,37,0,0,294,295,5,39,0,0,295,296,5,40,0,0, + 296,297,5,41,0,0,297,298,5,42,0,0,298,299,5,43,0,0,299,300,5,44, + 0,0,300,301,5,45,0,0,301,302,5,46,0,0,302,303,5,47,0,0,303,304,5, + 48,0,0,304,305,5,49,0,0,305,306,5,50,0,0,306,307,5,51,0,0,307,308, + 5,52,0,0,308,309,5,53,0,0,309,310,5,54,0,0,310,311,5,55,0,0,311, + 312,5,56,0,0,312,313,5,57,0,0,313,314,5,58,0,0,314,315,5,59,0,0, + 315,316,5,60,0,0,316,317,5,61,0,0,317,318,5,62,0,0,318,319,5,63, + 0,0,319,320,5,64,0,0,320,321,5,65,0,0,321,322,5,66,0,0,322,324,5, + 67,0,0,323,325,5,68,0,0,324,323,1,0,0,0,324,325,1,0,0,0,325,326, + 1,0,0,0,326,327,5,69,0,0,327,329,5,70,0,0,328,330,5,71,0,0,329,328, + 1,0,0,0,329,330,1,0,0,0,330,331,1,0,0,0,331,332,5,77,0,0,332,333, + 5,3,0,0,333,334,5,79,0,0,334,335,5,79,0,0,335,336,5,79,0,0,336,337, + 5,79,0,0,337,338,5,79,0,0,338,339,5,79,0,0,339,340,5,79,0,0,340, + 341,5,79,0,0,341,342,5,79,0,0,342,343,5,79,0,0,343,344,5,79,0,0, + 344,345,5,79,0,0,345,346,5,79,0,0,346,347,5,79,0,0,347,348,5,79, + 0,0,348,349,5,79,0,0,349,350,5,79,0,0,350,351,5,79,0,0,351,352,5, + 79,0,0,352,353,5,79,0,0,353,354,5,79,0,0,354,355,5,79,0,0,355,356, + 5,79,0,0,356,357,5,79,0,0,357,358,5,79,0,0,358,359,5,79,0,0,359, + 360,5,79,0,0,360,361,5,79,0,0,361,362,5,79,0,0,362,363,5,79,0,0, + 363,364,5,79,0,0,364,365,5,79,0,0,365,366,5,79,0,0,366,367,5,79, + 0,0,367,368,5,79,0,0,368,369,5,79,0,0,369,370,5,79,0,0,370,372,5, + 79,0,0,371,373,5,79,0,0,372,371,1,0,0,0,372,373,1,0,0,0,373,374, + 1,0,0,0,374,375,5,79,0,0,375,377,5,79,0,0,376,378,5,79,0,0,377,376, + 1,0,0,0,377,378,1,0,0,0,378,379,1,0,0,0,379,383,5,81,0,0,380,381, + 5,4,0,0,381,382,5,83,0,0,382,384,5,85,0,0,383,380,1,0,0,0,383,384, + 1,0,0,0,384,388,1,0,0,0,385,386,5,5,0,0,386,387,5,86,0,0,387,389, + 5,88,0,0,388,385,1,0,0,0,388,389,1,0,0,0,389,391,1,0,0,0,390,392, + 3,14,7,0,391,390,1,0,0,0,392,393,1,0,0,0,393,391,1,0,0,0,393,394, + 1,0,0,0,394,13,1,0,0,0,395,396,5,6,0,0,396,397,3,16,8,0,397,398, + 3,16,8,0,398,399,3,16,8,0,399,400,3,16,8,0,400,401,3,16,8,0,401, + 402,3,16,8,0,402,403,3,16,8,0,403,404,3,16,8,0,404,405,3,16,8,0, + 405,406,3,16,8,0,406,407,3,16,8,0,407,408,3,16,8,0,408,409,3,16, + 8,0,409,410,3,16,8,0,410,411,3,16,8,0,411,412,3,16,8,0,412,413,3, + 16,8,0,413,414,3,16,8,0,414,415,3,16,8,0,415,416,3,16,8,0,416,417, + 3,16,8,0,417,418,3,16,8,0,418,419,3,16,8,0,419,420,3,16,8,0,420, + 421,5,6,0,0,421,422,5,6,0,0,422,423,5,6,0,0,423,424,5,6,0,0,424, + 425,5,6,0,0,425,426,5,6,0,0,426,427,5,6,0,0,427,428,5,6,0,0,428, + 429,3,16,8,0,429,430,3,16,8,0,430,431,3,16,8,0,431,432,3,16,8,0, + 432,434,5,6,0,0,433,435,5,12,0,0,434,433,1,0,0,0,434,435,1,0,0,0, + 435,436,1,0,0,0,436,437,5,6,0,0,437,439,5,6,0,0,438,440,5,6,0,0, + 439,438,1,0,0,0,439,440,1,0,0,0,440,441,1,0,0,0,441,442,5,14,0,0, + 442,15,1,0,0,0,443,444,7,1,0,0,444,17,1,0,0,0,29,22,24,62,67,94, + 99,105,110,115,140,145,181,186,221,226,232,237,242,275,280,324,329, + 372,377,383,388,393,434,439 ] class NmrPipePKParser ( Parser ): @@ -580,9 +589,6 @@ def Pchi2(self): def Type(self): return self.getToken(NmrPipePKParser.Type, 0) - def Ass(self): - return self.getToken(NmrPipePKParser.Ass, 0) - def ClustId(self): return self.getToken(NmrPipePKParser.ClustId, 0) @@ -604,6 +610,9 @@ def Format_code(self, i:int=None): def RETURN_FO(self): return self.getToken(NmrPipePKParser.RETURN_FO, 0) + def Ass(self): + return self.getToken(NmrPipePKParser.Ass, 0) + def Trouble(self): return self.getToken(NmrPipePKParser.Trouble, 0) @@ -699,28 +708,30 @@ def peak_list_2d(self): self.match(NmrPipePKParser.Pchi2) self.state = 60 self.match(NmrPipePKParser.Type) - self.state = 61 - self.match(NmrPipePKParser.Ass) self.state = 62 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 61 + self.match(NmrPipePKParser.Ass) + + + self.state = 64 self.match(NmrPipePKParser.ClustId) - self.state = 63 - self.match(NmrPipePKParser.Memcnt) self.state = 65 + self.match(NmrPipePKParser.Memcnt) + self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) if _la==71: - self.state = 64 + self.state = 66 self.match(NmrPipePKParser.Trouble) - self.state = 67 - self.match(NmrPipePKParser.RETURN_VA) - self.state = 68 - self.match(NmrPipePKParser.Format) self.state = 69 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.RETURN_VA) self.state = 70 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.Format) self.state = 71 self.match(NmrPipePKParser.Format_code) self.state = 72 @@ -765,49 +776,59 @@ def peak_list_2d(self): self.match(NmrPipePKParser.Format_code) self.state = 92 self.match(NmrPipePKParser.Format_code) - self.state = 93 + self.state = 94 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,4,self._ctx) + if la_ == 1: + self.state = 93 + self.match(NmrPipePKParser.Format_code) + + + self.state = 96 self.match(NmrPipePKParser.Format_code) - self.state = 95 + self.state = 97 + self.match(NmrPipePKParser.Format_code) + self.state = 99 self._errHandler.sync(self) _la = self._input.LA(1) if _la==79: - self.state = 94 + self.state = 98 self.match(NmrPipePKParser.Format_code) - self.state = 97 - self.match(NmrPipePKParser.RETURN_FO) self.state = 101 + self.match(NmrPipePKParser.RETURN_FO) + self.state = 105 self._errHandler.sync(self) _la = self._input.LA(1) if _la==4: - self.state = 98 + self.state = 102 self.match(NmrPipePKParser.Null_value) - self.state = 99 + self.state = 103 self.match(NmrPipePKParser.Any_name_NV) - self.state = 100 + self.state = 104 self.match(NmrPipePKParser.RETURN_NV) - self.state = 106 + self.state = 110 self._errHandler.sync(self) _la = self._input.LA(1) if _la==5: - self.state = 103 + self.state = 107 self.match(NmrPipePKParser.Null_string) - self.state = 104 + self.state = 108 self.match(NmrPipePKParser.Any_name_NS) - self.state = 105 + self.state = 109 self.match(NmrPipePKParser.RETURN_NS) - self.state = 109 + self.state = 113 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 108 + self.state = 112 self.peak_2d() - self.state = 111 + self.state = 115 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==6): @@ -842,12 +863,12 @@ def number(self, i:int=None): return self.getTypedRuleContext(NmrPipePKParser.NumberContext,i) - def Any_name(self): - return self.getToken(NmrPipePKParser.Any_name, 0) - def RETURN(self): return self.getToken(NmrPipePKParser.RETURN, 0) + def Any_name(self): + return self.getToken(NmrPipePKParser.Any_name, 0) + def getRuleIndex(self): return NmrPipePKParser.RULE_peak_2d @@ -869,16 +890,8 @@ def peak_2d(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 113 - self.match(NmrPipePKParser.Integer) - self.state = 114 - self.number() - self.state = 115 - self.number() - self.state = 116 - self.number() self.state = 117 - self.number() + self.match(NmrPipePKParser.Integer) self.state = 118 self.number() self.state = 119 @@ -896,38 +909,52 @@ def peak_2d(self): self.state = 125 self.number() self.state = 126 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 127 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 128 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 129 - self.match(NmrPipePKParser.Integer) - self.state = 130 self.number() + self.state = 130 + self.match(NmrPipePKParser.Integer) self.state = 131 - self.number() + self.match(NmrPipePKParser.Integer) self.state = 132 - self.number() + self.match(NmrPipePKParser.Integer) self.state = 133 - self.number() - self.state = 134 self.match(NmrPipePKParser.Integer) + self.state = 134 + self.number() self.state = 135 - self.match(NmrPipePKParser.Any_name) + self.number() self.state = 136 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 137 + self.number() + self.state = 138 self.match(NmrPipePKParser.Integer) - self.state = 139 + self.state = 140 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 139 + self.match(NmrPipePKParser.Any_name) + + + self.state = 142 + self.match(NmrPipePKParser.Integer) + self.state = 143 + self.match(NmrPipePKParser.Integer) + self.state = 145 self._errHandler.sync(self) _la = self._input.LA(1) if _la==6: - self.state = 138 + self.state = 144 self.match(NmrPipePKParser.Integer) - self.state = 141 + self.state = 147 self.match(NmrPipePKParser.RETURN) except RecognitionException as re: localctx.exception = re @@ -1038,9 +1065,6 @@ def Pchi2(self): def Type(self): return self.getToken(NmrPipePKParser.Type, 0) - def Ass(self): - return self.getToken(NmrPipePKParser.Ass, 0) - def ClustId(self): return self.getToken(NmrPipePKParser.ClustId, 0) @@ -1062,6 +1086,9 @@ def Format_code(self, i:int=None): def RETURN_FO(self): return self.getToken(NmrPipePKParser.RETURN_FO, 0) + def Ass(self): + return self.getToken(NmrPipePKParser.Ass, 0) + def Trouble(self): return self.getToken(NmrPipePKParser.Trouble, 0) @@ -1111,102 +1138,92 @@ def peak_list_3d(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 143 + self.state = 149 self.match(NmrPipePKParser.Vars) - self.state = 144 + self.state = 150 self.match(NmrPipePKParser.Index) - self.state = 145 + self.state = 151 self.match(NmrPipePKParser.X_axis) - self.state = 146 + self.state = 152 self.match(NmrPipePKParser.Y_axis) - self.state = 147 + self.state = 153 self.match(NmrPipePKParser.Z_axis) - self.state = 148 + self.state = 154 self.match(NmrPipePKParser.Dx) - self.state = 149 + self.state = 155 self.match(NmrPipePKParser.Dy) - self.state = 150 + self.state = 156 self.match(NmrPipePKParser.Dz) - self.state = 151 + self.state = 157 self.match(NmrPipePKParser.X_ppm) - self.state = 152 + self.state = 158 self.match(NmrPipePKParser.Y_ppm) - self.state = 153 + self.state = 159 self.match(NmrPipePKParser.Z_ppm) - self.state = 154 + self.state = 160 self.match(NmrPipePKParser.X_hz) - self.state = 155 + self.state = 161 self.match(NmrPipePKParser.Y_hz) - self.state = 156 + self.state = 162 self.match(NmrPipePKParser.Z_hz) - self.state = 157 + self.state = 163 self.match(NmrPipePKParser.Xw) - self.state = 158 + self.state = 164 self.match(NmrPipePKParser.Yw) - self.state = 159 + self.state = 165 self.match(NmrPipePKParser.Zw) - self.state = 160 + self.state = 166 self.match(NmrPipePKParser.Xw_hz) - self.state = 161 + self.state = 167 self.match(NmrPipePKParser.Yw_hz) - self.state = 162 + self.state = 168 self.match(NmrPipePKParser.Zw_hz) - self.state = 163 + self.state = 169 self.match(NmrPipePKParser.X1) - self.state = 164 + self.state = 170 self.match(NmrPipePKParser.X3) - self.state = 165 + self.state = 171 self.match(NmrPipePKParser.Y1) - self.state = 166 + self.state = 172 self.match(NmrPipePKParser.Y3) - self.state = 167 + self.state = 173 self.match(NmrPipePKParser.Z1) - self.state = 168 + self.state = 174 self.match(NmrPipePKParser.Z3) - self.state = 169 + self.state = 175 self.match(NmrPipePKParser.Height) - self.state = 170 + self.state = 176 self.match(NmrPipePKParser.DHeight) - self.state = 171 + self.state = 177 self.match(NmrPipePKParser.Vol) - self.state = 172 + self.state = 178 self.match(NmrPipePKParser.Pchi2) - self.state = 173 + self.state = 179 self.match(NmrPipePKParser.Type) - self.state = 174 - self.match(NmrPipePKParser.Ass) - self.state = 175 + self.state = 181 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 180 + self.match(NmrPipePKParser.Ass) + + + self.state = 183 self.match(NmrPipePKParser.ClustId) - self.state = 176 + self.state = 184 self.match(NmrPipePKParser.Memcnt) - self.state = 178 + self.state = 186 self._errHandler.sync(self) _la = self._input.LA(1) if _la==71: - self.state = 177 + self.state = 185 self.match(NmrPipePKParser.Trouble) - self.state = 180 - self.match(NmrPipePKParser.RETURN_VA) - self.state = 181 - self.match(NmrPipePKParser.Format) - self.state = 182 - self.match(NmrPipePKParser.Format_code) - self.state = 183 - self.match(NmrPipePKParser.Format_code) - self.state = 184 - self.match(NmrPipePKParser.Format_code) - self.state = 185 - self.match(NmrPipePKParser.Format_code) - self.state = 186 - self.match(NmrPipePKParser.Format_code) - self.state = 187 - self.match(NmrPipePKParser.Format_code) self.state = 188 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.RETURN_VA) self.state = 189 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.Format) self.state = 190 self.match(NmrPipePKParser.Format_code) self.state = 191 @@ -1257,47 +1274,69 @@ def peak_list_3d(self): self.match(NmrPipePKParser.Format_code) self.state = 214 self.match(NmrPipePKParser.Format_code) + self.state = 215 + self.match(NmrPipePKParser.Format_code) self.state = 216 + self.match(NmrPipePKParser.Format_code) + self.state = 217 + self.match(NmrPipePKParser.Format_code) + self.state = 218 + self.match(NmrPipePKParser.Format_code) + self.state = 219 + self.match(NmrPipePKParser.Format_code) + self.state = 221 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,13,self._ctx) + if la_ == 1: + self.state = 220 + self.match(NmrPipePKParser.Format_code) + + + self.state = 223 + self.match(NmrPipePKParser.Format_code) + self.state = 224 + self.match(NmrPipePKParser.Format_code) + self.state = 226 self._errHandler.sync(self) _la = self._input.LA(1) if _la==79: - self.state = 215 + self.state = 225 self.match(NmrPipePKParser.Format_code) - self.state = 218 + self.state = 228 self.match(NmrPipePKParser.RETURN_FO) - self.state = 222 + self.state = 232 self._errHandler.sync(self) _la = self._input.LA(1) if _la==4: - self.state = 219 + self.state = 229 self.match(NmrPipePKParser.Null_value) - self.state = 220 + self.state = 230 self.match(NmrPipePKParser.Any_name_NV) - self.state = 221 + self.state = 231 self.match(NmrPipePKParser.RETURN_NV) - self.state = 227 + self.state = 237 self._errHandler.sync(self) _la = self._input.LA(1) if _la==5: - self.state = 224 + self.state = 234 self.match(NmrPipePKParser.Null_string) - self.state = 225 + self.state = 235 self.match(NmrPipePKParser.Any_name_NS) - self.state = 226 + self.state = 236 self.match(NmrPipePKParser.RETURN_NS) - self.state = 230 + self.state = 240 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 229 + self.state = 239 self.peak_3d() - self.state = 232 + self.state = 242 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==6): @@ -1332,12 +1371,12 @@ def number(self, i:int=None): return self.getTypedRuleContext(NmrPipePKParser.NumberContext,i) - def Any_name(self): - return self.getToken(NmrPipePKParser.Any_name, 0) - def RETURN(self): return self.getToken(NmrPipePKParser.RETURN, 0) + def Any_name(self): + return self.getToken(NmrPipePKParser.Any_name, 0) + def getRuleIndex(self): return NmrPipePKParser.RULE_peak_3d @@ -1359,28 +1398,8 @@ def peak_3d(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 234 - self.match(NmrPipePKParser.Integer) - self.state = 235 - self.number() - self.state = 236 - self.number() - self.state = 237 - self.number() - self.state = 238 - self.number() - self.state = 239 - self.number() - self.state = 240 - self.number() - self.state = 241 - self.number() - self.state = 242 - self.number() - self.state = 243 - self.number() self.state = 244 - self.number() + self.match(NmrPipePKParser.Integer) self.state = 245 self.number() self.state = 246 @@ -1398,17 +1417,17 @@ def peak_3d(self): self.state = 252 self.number() self.state = 253 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 254 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 255 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 256 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 257 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 258 - self.match(NmrPipePKParser.Integer) + self.number() self.state = 259 self.number() self.state = 260 @@ -1420,20 +1439,46 @@ def peak_3d(self): self.state = 263 self.match(NmrPipePKParser.Integer) self.state = 264 - self.match(NmrPipePKParser.Any_name) + self.match(NmrPipePKParser.Integer) self.state = 265 self.match(NmrPipePKParser.Integer) self.state = 266 self.match(NmrPipePKParser.Integer) + self.state = 267 + self.match(NmrPipePKParser.Integer) self.state = 268 + self.match(NmrPipePKParser.Integer) + self.state = 269 + self.number() + self.state = 270 + self.number() + self.state = 271 + self.number() + self.state = 272 + self.number() + self.state = 273 + self.match(NmrPipePKParser.Integer) + self.state = 275 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 274 + self.match(NmrPipePKParser.Any_name) + + + self.state = 277 + self.match(NmrPipePKParser.Integer) + self.state = 278 + self.match(NmrPipePKParser.Integer) + self.state = 280 self._errHandler.sync(self) _la = self._input.LA(1) if _la==6: - self.state = 267 + self.state = 279 self.match(NmrPipePKParser.Integer) - self.state = 270 + self.state = 282 self.match(NmrPipePKParser.RETURN) except RecognitionException as re: localctx.exception = re @@ -1568,9 +1613,6 @@ def Pchi2(self): def Type(self): return self.getToken(NmrPipePKParser.Type, 0) - def Ass(self): - return self.getToken(NmrPipePKParser.Ass, 0) - def ClustId(self): return self.getToken(NmrPipePKParser.ClustId, 0) @@ -1592,6 +1634,9 @@ def Format_code(self, i:int=None): def RETURN_FO(self): return self.getToken(NmrPipePKParser.RETURN_FO, 0) + def Ass(self): + return self.getToken(NmrPipePKParser.Ass, 0) + def Trouble(self): return self.getToken(NmrPipePKParser.Trouble, 0) @@ -1641,130 +1686,108 @@ def peak_list_4d(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 272 + self.state = 284 self.match(NmrPipePKParser.Vars) - self.state = 273 + self.state = 285 self.match(NmrPipePKParser.Index) - self.state = 274 + self.state = 286 self.match(NmrPipePKParser.X_axis) - self.state = 275 + self.state = 287 self.match(NmrPipePKParser.Y_axis) - self.state = 276 + self.state = 288 self.match(NmrPipePKParser.Z_axis) - self.state = 277 + self.state = 289 self.match(NmrPipePKParser.A_axis) - self.state = 278 + self.state = 290 self.match(NmrPipePKParser.Dx) - self.state = 279 + self.state = 291 self.match(NmrPipePKParser.Dy) - self.state = 280 + self.state = 292 self.match(NmrPipePKParser.Dz) - self.state = 281 + self.state = 293 self.match(NmrPipePKParser.Dz) - self.state = 282 + self.state = 294 self.match(NmrPipePKParser.X_ppm) - self.state = 283 + self.state = 295 self.match(NmrPipePKParser.Y_ppm) - self.state = 284 + self.state = 296 self.match(NmrPipePKParser.Z_ppm) - self.state = 285 + self.state = 297 self.match(NmrPipePKParser.A_ppm) - self.state = 286 + self.state = 298 self.match(NmrPipePKParser.X_hz) - self.state = 287 + self.state = 299 self.match(NmrPipePKParser.Y_hz) - self.state = 288 + self.state = 300 self.match(NmrPipePKParser.Z_hz) - self.state = 289 + self.state = 301 self.match(NmrPipePKParser.A_hz) - self.state = 290 + self.state = 302 self.match(NmrPipePKParser.Xw) - self.state = 291 + self.state = 303 self.match(NmrPipePKParser.Yw) - self.state = 292 + self.state = 304 self.match(NmrPipePKParser.Zw) - self.state = 293 + self.state = 305 self.match(NmrPipePKParser.Aw) - self.state = 294 + self.state = 306 self.match(NmrPipePKParser.Xw_hz) - self.state = 295 + self.state = 307 self.match(NmrPipePKParser.Yw_hz) - self.state = 296 + self.state = 308 self.match(NmrPipePKParser.Zw_hz) - self.state = 297 + self.state = 309 self.match(NmrPipePKParser.Aw_hz) - self.state = 298 + self.state = 310 self.match(NmrPipePKParser.X1) - self.state = 299 + self.state = 311 self.match(NmrPipePKParser.X3) - self.state = 300 + self.state = 312 self.match(NmrPipePKParser.Y1) - self.state = 301 + self.state = 313 self.match(NmrPipePKParser.Y3) - self.state = 302 + self.state = 314 self.match(NmrPipePKParser.Z1) - self.state = 303 + self.state = 315 self.match(NmrPipePKParser.Z3) - self.state = 304 + self.state = 316 self.match(NmrPipePKParser.A1) - self.state = 305 + self.state = 317 self.match(NmrPipePKParser.A3) - self.state = 306 + self.state = 318 self.match(NmrPipePKParser.Height) - self.state = 307 + self.state = 319 self.match(NmrPipePKParser.DHeight) - self.state = 308 + self.state = 320 self.match(NmrPipePKParser.Vol) - self.state = 309 + self.state = 321 self.match(NmrPipePKParser.Pchi2) - self.state = 310 + self.state = 322 self.match(NmrPipePKParser.Type) - self.state = 311 - self.match(NmrPipePKParser.Ass) - self.state = 312 + self.state = 324 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==68: + self.state = 323 + self.match(NmrPipePKParser.Ass) + + + self.state = 326 self.match(NmrPipePKParser.ClustId) - self.state = 313 + self.state = 327 self.match(NmrPipePKParser.Memcnt) - self.state = 315 + self.state = 329 self._errHandler.sync(self) _la = self._input.LA(1) if _la==71: - self.state = 314 + self.state = 328 self.match(NmrPipePKParser.Trouble) - self.state = 317 - self.match(NmrPipePKParser.RETURN_VA) - self.state = 318 - self.match(NmrPipePKParser.Format) - self.state = 319 - self.match(NmrPipePKParser.Format_code) - self.state = 320 - self.match(NmrPipePKParser.Format_code) - self.state = 321 - self.match(NmrPipePKParser.Format_code) - self.state = 322 - self.match(NmrPipePKParser.Format_code) - self.state = 323 - self.match(NmrPipePKParser.Format_code) - self.state = 324 - self.match(NmrPipePKParser.Format_code) - self.state = 325 - self.match(NmrPipePKParser.Format_code) - self.state = 326 - self.match(NmrPipePKParser.Format_code) - self.state = 327 - self.match(NmrPipePKParser.Format_code) - self.state = 328 - self.match(NmrPipePKParser.Format_code) - self.state = 329 - self.match(NmrPipePKParser.Format_code) - self.state = 330 - self.match(NmrPipePKParser.Format_code) self.state = 331 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.RETURN_VA) self.state = 332 - self.match(NmrPipePKParser.Format_code) + self.match(NmrPipePKParser.Format) self.state = 333 self.match(NmrPipePKParser.Format_code) self.state = 334 @@ -1819,47 +1842,81 @@ def peak_list_4d(self): self.match(NmrPipePKParser.Format_code) self.state = 359 self.match(NmrPipePKParser.Format_code) + self.state = 360 + self.match(NmrPipePKParser.Format_code) self.state = 361 + self.match(NmrPipePKParser.Format_code) + self.state = 362 + self.match(NmrPipePKParser.Format_code) + self.state = 363 + self.match(NmrPipePKParser.Format_code) + self.state = 364 + self.match(NmrPipePKParser.Format_code) + self.state = 365 + self.match(NmrPipePKParser.Format_code) + self.state = 366 + self.match(NmrPipePKParser.Format_code) + self.state = 367 + self.match(NmrPipePKParser.Format_code) + self.state = 368 + self.match(NmrPipePKParser.Format_code) + self.state = 369 + self.match(NmrPipePKParser.Format_code) + self.state = 370 + self.match(NmrPipePKParser.Format_code) + self.state = 372 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,22,self._ctx) + if la_ == 1: + self.state = 371 + self.match(NmrPipePKParser.Format_code) + + + self.state = 374 + self.match(NmrPipePKParser.Format_code) + self.state = 375 + self.match(NmrPipePKParser.Format_code) + self.state = 377 self._errHandler.sync(self) _la = self._input.LA(1) if _la==79: - self.state = 360 + self.state = 376 self.match(NmrPipePKParser.Format_code) - self.state = 363 + self.state = 379 self.match(NmrPipePKParser.RETURN_FO) - self.state = 367 + self.state = 383 self._errHandler.sync(self) _la = self._input.LA(1) if _la==4: - self.state = 364 + self.state = 380 self.match(NmrPipePKParser.Null_value) - self.state = 365 + self.state = 381 self.match(NmrPipePKParser.Any_name_NV) - self.state = 366 + self.state = 382 self.match(NmrPipePKParser.RETURN_NV) - self.state = 372 + self.state = 388 self._errHandler.sync(self) _la = self._input.LA(1) if _la==5: - self.state = 369 + self.state = 385 self.match(NmrPipePKParser.Null_string) - self.state = 370 + self.state = 386 self.match(NmrPipePKParser.Any_name_NS) - self.state = 371 + self.state = 387 self.match(NmrPipePKParser.RETURN_NS) - self.state = 375 + self.state = 391 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 374 + self.state = 390 self.peak_4d() - self.state = 377 + self.state = 393 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==6): @@ -1894,12 +1951,12 @@ def number(self, i:int=None): return self.getTypedRuleContext(NmrPipePKParser.NumberContext,i) - def Any_name(self): - return self.getToken(NmrPipePKParser.Any_name, 0) - def RETURN(self): return self.getToken(NmrPipePKParser.RETURN, 0) + def Any_name(self): + return self.getToken(NmrPipePKParser.Any_name, 0) + def getRuleIndex(self): return NmrPipePKParser.RULE_peak_4d @@ -1921,97 +1978,103 @@ def peak_4d(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 379 + self.state = 395 self.match(NmrPipePKParser.Integer) - self.state = 380 + self.state = 396 self.number() - self.state = 381 + self.state = 397 self.number() - self.state = 382 + self.state = 398 self.number() - self.state = 383 + self.state = 399 self.number() - self.state = 384 + self.state = 400 self.number() - self.state = 385 + self.state = 401 self.number() - self.state = 386 + self.state = 402 self.number() - self.state = 387 + self.state = 403 self.number() - self.state = 388 + self.state = 404 self.number() - self.state = 389 + self.state = 405 self.number() - self.state = 390 + self.state = 406 self.number() - self.state = 391 + self.state = 407 self.number() - self.state = 392 + self.state = 408 self.number() - self.state = 393 + self.state = 409 self.number() - self.state = 394 + self.state = 410 self.number() - self.state = 395 + self.state = 411 self.number() - self.state = 396 + self.state = 412 self.number() - self.state = 397 + self.state = 413 self.number() - self.state = 398 + self.state = 414 self.number() - self.state = 399 + self.state = 415 self.number() - self.state = 400 + self.state = 416 self.number() - self.state = 401 + self.state = 417 self.number() - self.state = 402 + self.state = 418 self.number() - self.state = 403 + self.state = 419 self.number() - self.state = 404 + self.state = 420 self.match(NmrPipePKParser.Integer) - self.state = 405 + self.state = 421 self.match(NmrPipePKParser.Integer) - self.state = 406 + self.state = 422 self.match(NmrPipePKParser.Integer) - self.state = 407 + self.state = 423 self.match(NmrPipePKParser.Integer) - self.state = 408 + self.state = 424 self.match(NmrPipePKParser.Integer) - self.state = 409 + self.state = 425 self.match(NmrPipePKParser.Integer) - self.state = 410 + self.state = 426 self.match(NmrPipePKParser.Integer) - self.state = 411 + self.state = 427 self.match(NmrPipePKParser.Integer) - self.state = 412 + self.state = 428 self.number() - self.state = 413 + self.state = 429 self.number() - self.state = 414 + self.state = 430 self.number() - self.state = 415 + self.state = 431 self.number() - self.state = 416 + self.state = 432 self.match(NmrPipePKParser.Integer) - self.state = 417 - self.match(NmrPipePKParser.Any_name) - self.state = 418 + self.state = 434 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==12: + self.state = 433 + self.match(NmrPipePKParser.Any_name) + + + self.state = 436 self.match(NmrPipePKParser.Integer) - self.state = 419 + self.state = 437 self.match(NmrPipePKParser.Integer) - self.state = 421 + self.state = 439 self._errHandler.sync(self) _la = self._input.LA(1) if _la==6: - self.state = 420 + self.state = 438 self.match(NmrPipePKParser.Integer) - self.state = 423 + self.state = 441 self.match(NmrPipePKParser.RETURN) except RecognitionException as re: localctx.exception = re @@ -2059,7 +2122,7 @@ def number(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 425 + self.state = 443 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4480) != 0)): self._errHandler.recoverInline(self) diff --git a/wwpdb/utils/nmr/pk/NmrPipePKParserListener.py b/wwpdb/utils/nmr/pk/NmrPipePKParserListener.py index 07234b845..a7995e2ea 100644 --- a/wwpdb/utils/nmr/pk/NmrPipePKParserListener.py +++ b/wwpdb/utils/nmr/pk/NmrPipePKParserListener.py @@ -410,16 +410,18 @@ def set_spectral_dim(_dim_id): digits = re.findall(r'\d+', axis_code) for digit in digits: num = int(digit) - nuc = next((k for k, v in ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS.items() if num in v), None) + nuc = next((k for k, v in ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS.items() if num == v[0]), None) if nuc is not None: cur_spectral_dim['atom_type'] = nuc cur_spectral_dim['atom_isotope_number'] = num break if cur_spectral_dim['atom_type'] is None: for a in axis_code: + a = a.upper() if a in ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS: cur_spectral_dim['atom_type'] = a cur_spectral_dim['atom_isotope_number'] = ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS[a][0] + break truncated = False first_point = last_point = None @@ -550,9 +552,12 @@ def exitPeak_2d(self, ctx: NmrPipePKParser.Peak_2dContext): dheight = self.originalNumberSelection[13] vol = self.originalNumberSelection[14] # pchi2 = self.originalNumberSelection[15] - # type = int(str(ctx.Integer(5))) - ass = str(ctx.Any_name()) - if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + type = int(str(ctx.Integer(5))) + if ctx.Any_name(): + ass = str(ctx.Any_name()) + if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + ass = None + else: ass = None # clustid = int(str(ctx.Integer(6))) # memcnt = int(str(ctx.Integer(7))) @@ -560,11 +565,12 @@ def exitPeak_2d(self, ctx: NmrPipePKParser.Peak_2dContext): if not self.hasPolySeq and not self.hasNonPolySeq: return - if x_ppm is None or y_ppm is None: + if x_ppm is None or y_ppm is None or type != 1: self.peaks2D -= 1 return - dstFunc = self.validatePeak2D(index, x_ppm, y_ppm, x_hz, y_hz, xw_hz, yw_hz, height, dheight, vol) + dstFunc = self.validatePeak2D(index, x_ppm, y_ppm, None, None, None, None, + x_hz, y_hz, xw_hz, yw_hz, height, dheight, vol) if dstFunc is None: self.peaks2D -= 1 @@ -632,6 +638,7 @@ def exitPeak_2d(self, ctx: NmrPipePKParser.Peak_2dContext): if self.createSfDict__ and sf is not None: sf['index_id'] += 1 + ambig_code1 = ambig_code2 = None if has_assignments: atom1 = self.atomSelectionSet[0][0] atom2 = self.atomSelectionSet[1][0] @@ -644,7 +651,7 @@ def exitPeak_2d(self, ctx: NmrPipePKParser.Peak_2dContext): if ambig_code2 == 0: ambig_code2 = None else: - atom1 = atom2 = ambig_code1 = ambig_code2 = None + atom1 = atom2 = None row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], sf['list_id'], self.entryId, dstFunc, @@ -731,9 +738,12 @@ def exitPeak_3d(self, ctx: NmrPipePKParser.Peak_3dContext): dheight = self.originalNumberSelection[19] vol = self.originalNumberSelection[20] # pchi2 = self.originalNumberSelection[21] - # type = int(str(ctx.Integer(7))) - ass = str(ctx.Any_name()) - if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + type = int(str(ctx.Integer(7))) + if ctx.Any_name(): + ass = str(ctx.Any_name()) + if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + ass = None + else: ass = None # clustid = int(str(ctx.Integer(8))) # memcnt = int(str(ctx.Integer(9))) @@ -741,11 +751,12 @@ def exitPeak_3d(self, ctx: NmrPipePKParser.Peak_3dContext): if not self.hasPolySeq and not self.hasNonPolySeq: return - if x_ppm is None or y_ppm is None: + if x_ppm is None or y_ppm is None or type != 1: self.peaks3D -= 1 return - dstFunc = self.validatePeak3D(index, x_ppm, y_ppm, z_ppm, x_hz, y_hz, z_hz, xw_hz, yw_hz, zw_hz, height, dheight, vol) + dstFunc = self.validatePeak3D(index, x_ppm, y_ppm, z_ppm, None, None, None, None, None, None, + x_hz, y_hz, z_hz, xw_hz, yw_hz, zw_hz, height, dheight, vol) if dstFunc is None: self.peaks3D -= 1 @@ -824,6 +835,7 @@ def exitPeak_3d(self, ctx: NmrPipePKParser.Peak_3dContext): if self.createSfDict__ and sf is not None: sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = None if has_assignments: atom1 = self.atomSelectionSet[0][0] atom2 = self.atomSelectionSet[1][0] @@ -841,7 +853,7 @@ def exitPeak_3d(self, ctx: NmrPipePKParser.Peak_3dContext): if ambig_code3 == 0: ambig_code3 = None else: - atom1 = atom2 = atom3 = ambig_code1 = ambig_code2 = ambig_code3 = None + atom1 = atom2 = atom3 = None row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], sf['list_id'], self.entryId, dstFunc, @@ -936,9 +948,12 @@ def exitPeak_4d(self, ctx: NmrPipePKParser.Peak_4dContext): dheight = self.originalNumberSelection[25] vol = self.originalNumberSelection[26] # pchi2 = self.originalNumberSelection[27] - # type = int(str(ctx.Integer(9))) - ass = str(ctx.Any_name()) - if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + type = int(str(ctx.Integer(9))) + if ctx.Any_name(): + ass = str(ctx.Any_name()) + if ass in emptyValue or (self.null_string is not None and ass == self.null_string): + ass = None + else: ass = None # clustid = int(str(ctx.Integer(10))) # memcnt = int(str(ctx.Integer(11))) @@ -946,12 +961,12 @@ def exitPeak_4d(self, ctx: NmrPipePKParser.Peak_4dContext): if not self.hasPolySeq and not self.hasNonPolySeq: return - if x_ppm is None or y_ppm is None: + if x_ppm is None or y_ppm is None or type != 1: self.peaks4D -= 1 return - dstFunc = self.validatePeak4D(index, x_ppm, y_ppm, z_ppm, a_ppm, x_hz, y_hz, z_hz, a_hz, - xw_hz, yw_hz, zw_hz, aw_hz, height, dheight, vol) + dstFunc = self.validatePeak4D(index, x_ppm, y_ppm, z_ppm, a_ppm, None, None, None, None, None, None, None, None, + x_hz, y_hz, z_hz, a_hz, xw_hz, yw_hz, zw_hz, aw_hz, height, dheight, vol) if dstFunc is None: self.peaks4D -= 1 @@ -1040,6 +1055,7 @@ def exitPeak_4d(self, ctx: NmrPipePKParser.Peak_4dContext): if self.createSfDict__ and sf is not None: sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = ambig_code4 = None if has_assignments: atom1 = self.atomSelectionSet[0][0] atom2 = self.atomSelectionSet[1][0] @@ -1062,7 +1078,7 @@ def exitPeak_4d(self, ctx: NmrPipePKParser.Peak_4dContext): if ambig_code4 == 0: ambig_code4 = None else: - atom1 = atom2 = atom3 = atom4 = ambig_code1 = ambig_code2 = ambig_code3 = ambig_code4 = None + atom1 = atom2 = atom3 = atom4 = None row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], sf['list_id'], self.entryId, dstFunc, diff --git a/wwpdb/utils/nmr/pk/NmrPipePKReader.py b/wwpdb/utils/nmr/pk/NmrPipePKReader.py index efa8e4d7e..0afd14977 100644 --- a/wwpdb/utils/nmr/pk/NmrPipePKReader.py +++ b/wwpdb/utils/nmr/pk/NmrPipePKReader.py @@ -61,16 +61,16 @@ def __init__(self, verbose=True, log=sys.stdout, self.__representativeAltId = representativeAltId self.__mrAtomNameMapping = mrAtomNameMapping + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + if cR is not None and caC is None: caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, - cR, None, None, fullCheck=False) + cR, self.__ccU, None, None, fullCheck=False) self.__cR = cR self.__caC = caC - # CCD accessing utility - self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU - # BMRB chemical shift statistics self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat diff --git a/wwpdb/utils/nmr/pk/NmrViewPKLexer.py b/wwpdb/utils/nmr/pk/NmrViewPKLexer.py index 27bd4d539..49a809d45 100644 --- a/wwpdb/utils/nmr/pk/NmrViewPKLexer.py +++ b/wwpdb/utils/nmr/pk/NmrViewPKLexer.py @@ -10,172 +10,180 @@ def serializedATN(): return [ - 4,0,31,435,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5, + 4,0,33,459,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5, 7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, - 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,3,1,90,8,1,1,1,1,1,1,2,3,2,95, - 8,2,1,2,1,2,3,2,99,8,2,1,3,3,3,102,8,3,1,3,1,3,3,3,106,8,3,1,3,1, - 3,3,3,110,8,3,1,3,3,3,113,8,3,1,4,1,4,1,4,1,4,1,4,1,4,3,4,121,8, - 4,1,5,1,5,1,6,4,6,126,8,6,11,6,12,6,127,1,7,4,7,131,8,7,11,7,12, - 7,132,1,7,5,7,136,8,7,10,7,12,7,139,9,7,1,7,5,7,142,8,7,10,7,12, - 7,145,9,7,1,7,5,7,148,8,7,10,7,12,7,151,9,7,1,7,1,7,1,8,4,8,156, - 8,8,11,8,12,8,157,1,8,5,8,161,8,8,10,8,12,8,164,9,8,1,8,5,8,167, - 8,8,10,8,12,8,170,9,8,1,8,5,8,173,8,8,10,8,12,8,176,9,8,1,8,1,8, - 1,9,4,9,181,8,9,11,9,12,9,182,1,9,5,9,186,8,9,10,9,12,9,189,9,9, - 1,9,5,9,192,8,9,10,9,12,9,195,9,9,1,9,5,9,198,8,9,10,9,12,9,201, - 9,9,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,3,12,211,8,12,1,13,1,13, - 3,13,215,8,13,1,14,1,14,3,14,219,8,14,1,15,1,15,5,15,223,8,15,10, - 15,12,15,226,9,15,1,16,4,16,229,8,16,11,16,12,16,230,1,16,1,16,1, - 17,1,17,1,17,5,17,238,8,17,10,17,12,17,241,9,17,1,17,1,17,1,18,1, - 18,1,18,4,18,248,8,18,11,18,12,18,249,1,18,1,18,4,18,254,8,18,11, - 18,12,18,255,1,18,1,18,4,18,260,8,18,11,18,12,18,261,1,18,1,18,4, - 18,266,8,18,11,18,12,18,267,1,18,1,18,4,18,272,8,18,11,18,12,18, - 273,1,18,1,18,1,18,1,18,1,18,1,18,3,18,282,8,18,1,18,5,18,285,8, - 18,10,18,12,18,288,9,18,1,18,4,18,291,8,18,11,18,12,18,292,1,18, - 1,18,1,19,1,19,1,19,4,19,300,8,19,11,19,12,19,301,1,19,1,19,4,19, - 306,8,19,11,19,12,19,307,1,19,1,19,4,19,312,8,19,11,19,12,19,313, - 1,19,1,19,4,19,318,8,19,11,19,12,19,319,1,19,1,19,4,19,324,8,19, - 11,19,12,19,325,1,19,1,19,1,19,1,19,1,19,1,19,3,19,334,8,19,1,19, - 5,19,337,8,19,10,19,12,19,340,9,19,1,19,1,19,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,23,1,23,1,23, - 1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26, - 1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30, - 1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,4,34,414,8,34,11,34,12,34,415,1,34,1,34,1,35,1,35,1,36,1,36, - 1,37,4,37,425,8,37,11,37,12,37,426,1,37,1,37,1,38,4,38,432,8,38, - 11,38,12,38,433,1,239,0,39,2,1,4,2,6,3,8,4,10,0,12,0,14,0,16,5,18, - 6,20,7,22,8,24,0,26,0,28,0,30,0,32,0,34,9,36,10,38,11,40,12,42,13, - 44,14,46,15,48,16,50,17,52,18,54,19,56,20,58,21,60,22,62,23,64,24, - 66,25,68,26,70,27,72,28,74,29,76,30,78,31,2,0,1,10,2,0,43,43,45, - 45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13,2,0,65,90,97,122, - 5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39,39,3,0,9,10,13,13, - 32,32,5,0,33,33,35,35,38,38,59,59,92,92,2,0,9,9,32,32,481,0,2,1, - 0,0,0,0,4,1,0,0,0,0,6,1,0,0,0,0,8,1,0,0,0,0,16,1,0,0,0,0,18,1,0, - 0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0, - 0,0,0,40,1,0,0,0,1,42,1,0,0,0,1,44,1,0,0,0,1,46,1,0,0,0,1,48,1,0, - 0,0,1,50,1,0,0,0,1,52,1,0,0,0,1,54,1,0,0,0,1,56,1,0,0,0,1,58,1,0, - 0,0,1,60,1,0,0,0,1,62,1,0,0,0,1,64,1,0,0,0,1,66,1,0,0,0,1,68,1,0, - 0,0,1,70,1,0,0,0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,1,78,1,0, - 0,0,2,80,1,0,0,0,4,89,1,0,0,0,6,94,1,0,0,0,8,101,1,0,0,0,10,120, - 1,0,0,0,12,122,1,0,0,0,14,125,1,0,0,0,16,130,1,0,0,0,18,155,1,0, - 0,0,20,180,1,0,0,0,22,204,1,0,0,0,24,206,1,0,0,0,26,210,1,0,0,0, - 28,214,1,0,0,0,30,218,1,0,0,0,32,220,1,0,0,0,34,228,1,0,0,0,36,234, - 1,0,0,0,38,281,1,0,0,0,40,333,1,0,0,0,42,343,1,0,0,0,44,351,1,0, - 0,0,46,354,1,0,0,0,48,357,1,0,0,0,50,361,1,0,0,0,52,365,1,0,0,0, - 54,369,1,0,0,0,56,373,1,0,0,0,58,377,1,0,0,0,60,381,1,0,0,0,62,385, - 1,0,0,0,64,389,1,0,0,0,66,393,1,0,0,0,68,398,1,0,0,0,70,406,1,0, - 0,0,72,419,1,0,0,0,74,421,1,0,0,0,76,424,1,0,0,0,78,431,1,0,0,0, - 80,81,5,108,0,0,81,82,5,97,0,0,82,83,5,98,0,0,83,84,5,101,0,0,84, - 85,5,108,0,0,85,86,1,0,0,0,86,87,6,0,0,0,87,3,1,0,0,0,88,90,7,0, - 0,0,89,88,1,0,0,0,89,90,1,0,0,0,90,91,1,0,0,0,91,92,3,14,6,0,92, - 5,1,0,0,0,93,95,7,0,0,0,94,93,1,0,0,0,94,95,1,0,0,0,95,98,1,0,0, - 0,96,99,3,14,6,0,97,99,3,10,4,0,98,96,1,0,0,0,98,97,1,0,0,0,99,7, - 1,0,0,0,100,102,7,0,0,0,101,100,1,0,0,0,101,102,1,0,0,0,102,105, - 1,0,0,0,103,106,3,14,6,0,104,106,3,10,4,0,105,103,1,0,0,0,105,104, - 1,0,0,0,106,112,1,0,0,0,107,109,7,1,0,0,108,110,7,0,0,0,109,108, - 1,0,0,0,109,110,1,0,0,0,110,111,1,0,0,0,111,113,3,14,6,0,112,107, - 1,0,0,0,112,113,1,0,0,0,113,9,1,0,0,0,114,115,3,14,6,0,115,116,5, - 46,0,0,116,117,3,14,6,0,117,121,1,0,0,0,118,119,5,46,0,0,119,121, - 3,14,6,0,120,114,1,0,0,0,120,118,1,0,0,0,121,11,1,0,0,0,122,123, - 7,2,0,0,123,13,1,0,0,0,124,126,3,12,5,0,125,124,1,0,0,0,126,127, - 1,0,0,0,127,125,1,0,0,0,127,128,1,0,0,0,128,15,1,0,0,0,129,131,5, - 35,0,0,130,129,1,0,0,0,131,132,1,0,0,0,132,130,1,0,0,0,132,133,1, - 0,0,0,133,137,1,0,0,0,134,136,8,3,0,0,135,134,1,0,0,0,136,139,1, - 0,0,0,137,135,1,0,0,0,137,138,1,0,0,0,138,143,1,0,0,0,139,137,1, - 0,0,0,140,142,5,35,0,0,141,140,1,0,0,0,142,145,1,0,0,0,143,141,1, - 0,0,0,143,144,1,0,0,0,144,149,1,0,0,0,145,143,1,0,0,0,146,148,8, - 3,0,0,147,146,1,0,0,0,148,151,1,0,0,0,149,147,1,0,0,0,149,150,1, - 0,0,0,150,152,1,0,0,0,151,149,1,0,0,0,152,153,6,7,1,0,153,17,1,0, - 0,0,154,156,5,33,0,0,155,154,1,0,0,0,156,157,1,0,0,0,157,155,1,0, - 0,0,157,158,1,0,0,0,158,162,1,0,0,0,159,161,8,3,0,0,160,159,1,0, - 0,0,161,164,1,0,0,0,162,160,1,0,0,0,162,163,1,0,0,0,163,168,1,0, - 0,0,164,162,1,0,0,0,165,167,5,33,0,0,166,165,1,0,0,0,167,170,1,0, - 0,0,168,166,1,0,0,0,168,169,1,0,0,0,169,174,1,0,0,0,170,168,1,0, - 0,0,171,173,8,3,0,0,172,171,1,0,0,0,173,176,1,0,0,0,174,172,1,0, - 0,0,174,175,1,0,0,0,175,177,1,0,0,0,176,174,1,0,0,0,177,178,6,8, - 1,0,178,19,1,0,0,0,179,181,5,59,0,0,180,179,1,0,0,0,181,182,1,0, - 0,0,182,180,1,0,0,0,182,183,1,0,0,0,183,187,1,0,0,0,184,186,8,3, - 0,0,185,184,1,0,0,0,186,189,1,0,0,0,187,185,1,0,0,0,187,188,1,0, - 0,0,188,193,1,0,0,0,189,187,1,0,0,0,190,192,5,59,0,0,191,190,1,0, - 0,0,192,195,1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,199,1,0, - 0,0,195,193,1,0,0,0,196,198,8,3,0,0,197,196,1,0,0,0,198,201,1,0, - 0,0,199,197,1,0,0,0,199,200,1,0,0,0,200,202,1,0,0,0,201,199,1,0, - 0,0,202,203,6,9,1,0,203,21,1,0,0,0,204,205,3,32,15,0,205,23,1,0, - 0,0,206,207,7,4,0,0,207,25,1,0,0,0,208,211,3,24,11,0,209,211,3,12, - 5,0,210,208,1,0,0,0,210,209,1,0,0,0,211,27,1,0,0,0,212,215,3,26, - 12,0,213,215,7,5,0,0,214,212,1,0,0,0,214,213,1,0,0,0,215,29,1,0, - 0,0,216,219,3,28,13,0,217,219,7,6,0,0,218,216,1,0,0,0,218,217,1, - 0,0,0,219,31,1,0,0,0,220,224,3,28,13,0,221,223,3,30,14,0,222,221, - 1,0,0,0,223,226,1,0,0,0,224,222,1,0,0,0,224,225,1,0,0,0,225,33,1, - 0,0,0,226,224,1,0,0,0,227,229,7,7,0,0,228,227,1,0,0,0,229,230,1, - 0,0,0,230,228,1,0,0,0,230,231,1,0,0,0,231,232,1,0,0,0,232,233,6, - 16,2,0,233,35,1,0,0,0,234,239,5,123,0,0,235,238,3,6,2,0,236,238, - 3,32,15,0,237,235,1,0,0,0,237,236,1,0,0,0,238,241,1,0,0,0,239,240, - 1,0,0,0,239,237,1,0,0,0,240,242,1,0,0,0,241,239,1,0,0,0,242,243, - 5,125,0,0,243,37,1,0,0,0,244,282,7,8,0,0,245,247,5,47,0,0,246,248, - 5,47,0,0,247,246,1,0,0,0,248,249,1,0,0,0,249,247,1,0,0,0,249,250, - 1,0,0,0,250,282,1,0,0,0,251,253,5,42,0,0,252,254,5,42,0,0,253,252, - 1,0,0,0,254,255,1,0,0,0,255,253,1,0,0,0,255,256,1,0,0,0,256,282, - 1,0,0,0,257,259,5,45,0,0,258,260,5,45,0,0,259,258,1,0,0,0,260,261, - 1,0,0,0,261,259,1,0,0,0,261,262,1,0,0,0,262,282,1,0,0,0,263,265, - 5,43,0,0,264,266,5,43,0,0,265,264,1,0,0,0,266,267,1,0,0,0,267,265, - 1,0,0,0,267,268,1,0,0,0,268,282,1,0,0,0,269,271,5,61,0,0,270,272, - 5,61,0,0,271,270,1,0,0,0,272,273,1,0,0,0,273,271,1,0,0,0,273,274, - 1,0,0,0,274,282,1,0,0,0,275,276,5,82,0,0,276,277,5,69,0,0,277,278, - 5,77,0,0,278,279,5,65,0,0,279,280,5,82,0,0,280,282,5,75,0,0,281, - 244,1,0,0,0,281,245,1,0,0,0,281,251,1,0,0,0,281,257,1,0,0,0,281, - 263,1,0,0,0,281,269,1,0,0,0,281,275,1,0,0,0,282,286,1,0,0,0,283, - 285,5,32,0,0,284,283,1,0,0,0,285,288,1,0,0,0,286,284,1,0,0,0,286, - 287,1,0,0,0,287,290,1,0,0,0,288,286,1,0,0,0,289,291,7,3,0,0,290, - 289,1,0,0,0,291,292,1,0,0,0,292,290,1,0,0,0,292,293,1,0,0,0,293, - 294,1,0,0,0,294,295,6,18,1,0,295,39,1,0,0,0,296,334,7,8,0,0,297, - 299,5,47,0,0,298,300,5,47,0,0,299,298,1,0,0,0,300,301,1,0,0,0,301, - 299,1,0,0,0,301,302,1,0,0,0,302,334,1,0,0,0,303,305,5,42,0,0,304, - 306,5,42,0,0,305,304,1,0,0,0,306,307,1,0,0,0,307,305,1,0,0,0,307, - 308,1,0,0,0,308,334,1,0,0,0,309,311,5,45,0,0,310,312,5,45,0,0,311, - 310,1,0,0,0,312,313,1,0,0,0,313,311,1,0,0,0,313,314,1,0,0,0,314, - 334,1,0,0,0,315,317,5,43,0,0,316,318,5,43,0,0,317,316,1,0,0,0,318, - 319,1,0,0,0,319,317,1,0,0,0,319,320,1,0,0,0,320,334,1,0,0,0,321, - 323,5,61,0,0,322,324,5,61,0,0,323,322,1,0,0,0,324,325,1,0,0,0,325, - 323,1,0,0,0,325,326,1,0,0,0,326,334,1,0,0,0,327,328,5,82,0,0,328, - 329,5,69,0,0,329,330,5,77,0,0,330,331,5,65,0,0,331,332,5,82,0,0, - 332,334,5,75,0,0,333,296,1,0,0,0,333,297,1,0,0,0,333,303,1,0,0,0, - 333,309,1,0,0,0,333,315,1,0,0,0,333,321,1,0,0,0,333,327,1,0,0,0, - 334,338,1,0,0,0,335,337,8,3,0,0,336,335,1,0,0,0,337,340,1,0,0,0, - 338,336,1,0,0,0,338,339,1,0,0,0,339,341,1,0,0,0,340,338,1,0,0,0, - 341,342,6,19,1,0,342,41,1,0,0,0,343,344,5,100,0,0,344,345,5,97,0, - 0,345,346,5,116,0,0,346,347,5,97,0,0,347,348,5,115,0,0,348,349,5, - 101,0,0,349,350,5,116,0,0,350,43,1,0,0,0,351,352,5,115,0,0,352,353, - 5,119,0,0,353,45,1,0,0,0,354,355,5,115,0,0,355,356,5,102,0,0,356, - 47,1,0,0,0,357,358,3,22,10,0,358,359,5,46,0,0,359,360,5,76,0,0,360, - 49,1,0,0,0,361,362,3,22,10,0,362,363,5,46,0,0,363,364,5,80,0,0,364, - 51,1,0,0,0,365,366,3,22,10,0,366,367,5,46,0,0,367,368,5,87,0,0,368, - 53,1,0,0,0,369,370,3,22,10,0,370,371,5,46,0,0,371,372,5,66,0,0,372, - 55,1,0,0,0,373,374,3,22,10,0,374,375,5,46,0,0,375,376,5,69,0,0,376, - 57,1,0,0,0,377,378,3,22,10,0,378,379,5,46,0,0,379,380,5,74,0,0,380, - 59,1,0,0,0,381,382,3,22,10,0,382,383,5,44,0,0,383,384,5,85,0,0,384, - 61,1,0,0,0,385,386,5,118,0,0,386,387,5,111,0,0,387,388,5,108,0,0, - 388,63,1,0,0,0,389,390,5,105,0,0,390,391,5,110,0,0,391,392,5,116, - 0,0,392,65,1,0,0,0,393,394,5,115,0,0,394,395,5,116,0,0,395,396,5, - 97,0,0,396,397,5,116,0,0,397,67,1,0,0,0,398,399,5,99,0,0,399,400, - 5,111,0,0,400,401,5,109,0,0,401,402,5,109,0,0,402,403,5,101,0,0, - 403,404,5,110,0,0,404,405,5,116,0,0,405,69,1,0,0,0,406,407,5,102, - 0,0,407,408,5,108,0,0,408,409,5,97,0,0,409,410,5,103,0,0,410,411, - 5,48,0,0,411,413,1,0,0,0,412,414,7,3,0,0,413,412,1,0,0,0,414,415, - 1,0,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,417,1,0,0,0,417,418, - 6,34,3,0,418,71,1,0,0,0,419,420,3,32,15,0,420,73,1,0,0,0,421,422, - 3,6,2,0,422,75,1,0,0,0,423,425,7,9,0,0,424,423,1,0,0,0,425,426,1, - 0,0,0,426,424,1,0,0,0,426,427,1,0,0,0,427,428,1,0,0,0,428,429,6, - 37,2,0,429,77,1,0,0,0,430,432,7,3,0,0,431,430,1,0,0,0,432,433,1, - 0,0,0,433,431,1,0,0,0,433,434,1,0,0,0,434,79,1,0,0,0,48,0,1,89,94, - 98,101,105,109,112,120,127,132,137,143,149,157,162,168,174,182,187, - 193,199,210,214,218,224,230,237,239,249,255,261,267,273,281,286, - 292,301,307,313,319,325,333,338,415,426,433,4,5,1,0,0,1,0,6,0,0, - 4,0,0 + 2,39,7,39,2,40,7,40,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,3,1,94,8, + 1,1,1,1,1,1,2,3,2,99,8,2,1,2,1,2,3,2,103,8,2,1,3,3,3,106,8,3,1,3, + 1,3,3,3,110,8,3,1,3,1,3,3,3,114,8,3,1,3,3,3,117,8,3,1,4,1,4,1,4, + 1,4,1,4,1,4,3,4,125,8,4,1,5,1,5,1,6,4,6,130,8,6,11,6,12,6,131,1, + 7,4,7,135,8,7,11,7,12,7,136,1,7,5,7,140,8,7,10,7,12,7,143,9,7,1, + 7,5,7,146,8,7,10,7,12,7,149,9,7,1,7,5,7,152,8,7,10,7,12,7,155,9, + 7,1,7,1,7,1,8,4,8,160,8,8,11,8,12,8,161,1,8,5,8,165,8,8,10,8,12, + 8,168,9,8,1,8,5,8,171,8,8,10,8,12,8,174,9,8,1,8,5,8,177,8,8,10,8, + 12,8,180,9,8,1,8,1,8,1,9,4,9,185,8,9,11,9,12,9,186,1,9,5,9,190,8, + 9,10,9,12,9,193,9,9,1,9,5,9,196,8,9,10,9,12,9,199,9,9,1,9,5,9,202, + 8,9,10,9,12,9,205,9,9,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,3,12, + 215,8,12,1,13,1,13,3,13,219,8,13,1,14,1,14,3,14,223,8,14,1,15,1, + 15,5,15,227,8,15,10,15,12,15,230,9,15,1,16,4,16,233,8,16,11,16,12, + 16,234,1,16,1,16,1,17,4,17,240,8,17,11,17,12,17,241,1,18,1,18,5, + 18,246,8,18,10,18,12,18,249,9,18,1,18,1,18,1,18,5,18,254,8,18,10, + 18,12,18,257,9,18,3,18,259,8,18,1,18,5,18,262,8,18,10,18,12,18,265, + 9,18,1,18,1,18,1,19,1,19,1,19,4,19,272,8,19,11,19,12,19,273,1,19, + 1,19,4,19,278,8,19,11,19,12,19,279,1,19,1,19,4,19,284,8,19,11,19, + 12,19,285,1,19,1,19,1,19,1,19,1,19,1,19,3,19,294,8,19,1,19,5,19, + 297,8,19,10,19,12,19,300,9,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20, + 4,20,309,8,20,11,20,12,20,310,1,20,1,20,4,20,315,8,20,11,20,12,20, + 316,1,20,1,20,4,20,321,8,20,11,20,12,20,322,1,20,1,20,1,20,1,20, + 1,20,1,20,3,20,331,8,20,1,20,5,20,334,8,20,10,20,12,20,337,9,20, + 1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22, + 1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25, + 1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,29, + 1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32, + 1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,4,35,413,8,35,11,35, + 12,35,414,1,35,1,35,1,36,1,36,1,37,1,37,1,38,4,38,424,8,38,11,38, + 12,38,425,1,38,1,38,1,39,4,39,431,8,39,11,39,12,39,432,1,40,1,40, + 5,40,437,8,40,10,40,12,40,440,9,40,1,40,1,40,1,40,5,40,445,8,40, + 10,40,12,40,448,9,40,3,40,450,8,40,1,40,5,40,453,8,40,10,40,12,40, + 456,9,40,1,40,1,40,2,255,446,0,41,2,1,4,2,6,3,8,4,10,0,12,0,14,0, + 16,5,18,6,20,7,22,8,24,0,26,0,28,0,30,0,32,0,34,9,36,10,38,11,40, + 12,42,13,44,14,46,15,48,16,50,17,52,18,54,19,56,20,58,21,60,22,62, + 23,64,24,66,25,68,26,70,27,72,28,74,29,76,30,78,31,80,32,82,33,2, + 0,1,9,2,0,43,43,45,45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13, + 2,0,65,90,97,122,5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39, + 39,2,0,9,9,32,32,5,0,33,33,35,35,38,38,59,59,92,92,505,0,2,1,0,0, + 0,0,4,1,0,0,0,0,6,1,0,0,0,0,8,1,0,0,0,0,16,1,0,0,0,0,18,1,0,0,0, + 0,20,1,0,0,0,0,22,1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0, + 0,40,1,0,0,0,0,42,1,0,0,0,1,44,1,0,0,0,1,46,1,0,0,0,1,48,1,0,0,0, + 1,50,1,0,0,0,1,52,1,0,0,0,1,54,1,0,0,0,1,56,1,0,0,0,1,58,1,0,0,0, + 1,60,1,0,0,0,1,62,1,0,0,0,1,64,1,0,0,0,1,66,1,0,0,0,1,68,1,0,0,0, + 1,70,1,0,0,0,1,72,1,0,0,0,1,74,1,0,0,0,1,76,1,0,0,0,1,78,1,0,0,0, + 1,80,1,0,0,0,1,82,1,0,0,0,2,84,1,0,0,0,4,93,1,0,0,0,6,98,1,0,0,0, + 8,105,1,0,0,0,10,124,1,0,0,0,12,126,1,0,0,0,14,129,1,0,0,0,16,134, + 1,0,0,0,18,159,1,0,0,0,20,184,1,0,0,0,22,208,1,0,0,0,24,210,1,0, + 0,0,26,214,1,0,0,0,28,218,1,0,0,0,30,222,1,0,0,0,32,224,1,0,0,0, + 34,232,1,0,0,0,36,239,1,0,0,0,38,243,1,0,0,0,40,293,1,0,0,0,42,330, + 1,0,0,0,44,342,1,0,0,0,46,350,1,0,0,0,48,353,1,0,0,0,50,356,1,0, + 0,0,52,360,1,0,0,0,54,364,1,0,0,0,56,368,1,0,0,0,58,372,1,0,0,0, + 60,376,1,0,0,0,62,380,1,0,0,0,64,384,1,0,0,0,66,388,1,0,0,0,68,392, + 1,0,0,0,70,397,1,0,0,0,72,405,1,0,0,0,74,418,1,0,0,0,76,420,1,0, + 0,0,78,423,1,0,0,0,80,430,1,0,0,0,82,434,1,0,0,0,84,85,5,108,0,0, + 85,86,5,97,0,0,86,87,5,98,0,0,87,88,5,101,0,0,88,89,5,108,0,0,89, + 90,1,0,0,0,90,91,6,0,0,0,91,3,1,0,0,0,92,94,7,0,0,0,93,92,1,0,0, + 0,93,94,1,0,0,0,94,95,1,0,0,0,95,96,3,14,6,0,96,5,1,0,0,0,97,99, + 7,0,0,0,98,97,1,0,0,0,98,99,1,0,0,0,99,102,1,0,0,0,100,103,3,14, + 6,0,101,103,3,10,4,0,102,100,1,0,0,0,102,101,1,0,0,0,103,7,1,0,0, + 0,104,106,7,0,0,0,105,104,1,0,0,0,105,106,1,0,0,0,106,109,1,0,0, + 0,107,110,3,14,6,0,108,110,3,10,4,0,109,107,1,0,0,0,109,108,1,0, + 0,0,110,116,1,0,0,0,111,113,7,1,0,0,112,114,7,0,0,0,113,112,1,0, + 0,0,113,114,1,0,0,0,114,115,1,0,0,0,115,117,3,14,6,0,116,111,1,0, + 0,0,116,117,1,0,0,0,117,9,1,0,0,0,118,119,3,14,6,0,119,120,5,46, + 0,0,120,121,3,14,6,0,121,125,1,0,0,0,122,123,5,46,0,0,123,125,3, + 14,6,0,124,118,1,0,0,0,124,122,1,0,0,0,125,11,1,0,0,0,126,127,7, + 2,0,0,127,13,1,0,0,0,128,130,3,12,5,0,129,128,1,0,0,0,130,131,1, + 0,0,0,131,129,1,0,0,0,131,132,1,0,0,0,132,15,1,0,0,0,133,135,5,35, + 0,0,134,133,1,0,0,0,135,136,1,0,0,0,136,134,1,0,0,0,136,137,1,0, + 0,0,137,141,1,0,0,0,138,140,8,3,0,0,139,138,1,0,0,0,140,143,1,0, + 0,0,141,139,1,0,0,0,141,142,1,0,0,0,142,147,1,0,0,0,143,141,1,0, + 0,0,144,146,5,35,0,0,145,144,1,0,0,0,146,149,1,0,0,0,147,145,1,0, + 0,0,147,148,1,0,0,0,148,153,1,0,0,0,149,147,1,0,0,0,150,152,8,3, + 0,0,151,150,1,0,0,0,152,155,1,0,0,0,153,151,1,0,0,0,153,154,1,0, + 0,0,154,156,1,0,0,0,155,153,1,0,0,0,156,157,6,7,1,0,157,17,1,0,0, + 0,158,160,5,33,0,0,159,158,1,0,0,0,160,161,1,0,0,0,161,159,1,0,0, + 0,161,162,1,0,0,0,162,166,1,0,0,0,163,165,8,3,0,0,164,163,1,0,0, + 0,165,168,1,0,0,0,166,164,1,0,0,0,166,167,1,0,0,0,167,172,1,0,0, + 0,168,166,1,0,0,0,169,171,5,33,0,0,170,169,1,0,0,0,171,174,1,0,0, + 0,172,170,1,0,0,0,172,173,1,0,0,0,173,178,1,0,0,0,174,172,1,0,0, + 0,175,177,8,3,0,0,176,175,1,0,0,0,177,180,1,0,0,0,178,176,1,0,0, + 0,178,179,1,0,0,0,179,181,1,0,0,0,180,178,1,0,0,0,181,182,6,8,1, + 0,182,19,1,0,0,0,183,185,5,59,0,0,184,183,1,0,0,0,185,186,1,0,0, + 0,186,184,1,0,0,0,186,187,1,0,0,0,187,191,1,0,0,0,188,190,8,3,0, + 0,189,188,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192,1,0,0, + 0,192,197,1,0,0,0,193,191,1,0,0,0,194,196,5,59,0,0,195,194,1,0,0, + 0,196,199,1,0,0,0,197,195,1,0,0,0,197,198,1,0,0,0,198,203,1,0,0, + 0,199,197,1,0,0,0,200,202,8,3,0,0,201,200,1,0,0,0,202,205,1,0,0, + 0,203,201,1,0,0,0,203,204,1,0,0,0,204,206,1,0,0,0,205,203,1,0,0, + 0,206,207,6,9,1,0,207,21,1,0,0,0,208,209,3,32,15,0,209,23,1,0,0, + 0,210,211,7,4,0,0,211,25,1,0,0,0,212,215,3,24,11,0,213,215,3,12, + 5,0,214,212,1,0,0,0,214,213,1,0,0,0,215,27,1,0,0,0,216,219,3,26, + 12,0,217,219,7,5,0,0,218,216,1,0,0,0,218,217,1,0,0,0,219,29,1,0, + 0,0,220,223,3,28,13,0,221,223,7,6,0,0,222,220,1,0,0,0,222,221,1, + 0,0,0,223,31,1,0,0,0,224,228,3,28,13,0,225,227,3,30,14,0,226,225, + 1,0,0,0,227,230,1,0,0,0,228,226,1,0,0,0,228,229,1,0,0,0,229,33,1, + 0,0,0,230,228,1,0,0,0,231,233,7,7,0,0,232,231,1,0,0,0,233,234,1, + 0,0,0,234,232,1,0,0,0,234,235,1,0,0,0,235,236,1,0,0,0,236,237,6, + 16,2,0,237,35,1,0,0,0,238,240,7,3,0,0,239,238,1,0,0,0,240,241,1, + 0,0,0,241,239,1,0,0,0,241,242,1,0,0,0,242,37,1,0,0,0,243,247,5,123, + 0,0,244,246,5,32,0,0,245,244,1,0,0,0,246,249,1,0,0,0,247,245,1,0, + 0,0,247,248,1,0,0,0,248,258,1,0,0,0,249,247,1,0,0,0,250,259,3,6, + 2,0,251,254,3,32,15,0,252,254,5,32,0,0,253,251,1,0,0,0,253,252,1, + 0,0,0,254,257,1,0,0,0,255,256,1,0,0,0,255,253,1,0,0,0,256,259,1, + 0,0,0,257,255,1,0,0,0,258,250,1,0,0,0,258,255,1,0,0,0,259,263,1, + 0,0,0,260,262,5,32,0,0,261,260,1,0,0,0,262,265,1,0,0,0,263,261,1, + 0,0,0,263,264,1,0,0,0,264,266,1,0,0,0,265,263,1,0,0,0,266,267,5, + 125,0,0,267,39,1,0,0,0,268,294,7,8,0,0,269,271,5,47,0,0,270,272, + 5,47,0,0,271,270,1,0,0,0,272,273,1,0,0,0,273,271,1,0,0,0,273,274, + 1,0,0,0,274,294,1,0,0,0,275,277,5,42,0,0,276,278,5,42,0,0,277,276, + 1,0,0,0,278,279,1,0,0,0,279,277,1,0,0,0,279,280,1,0,0,0,280,294, + 1,0,0,0,281,283,5,61,0,0,282,284,5,61,0,0,283,282,1,0,0,0,284,285, + 1,0,0,0,285,283,1,0,0,0,285,286,1,0,0,0,286,294,1,0,0,0,287,288, + 5,82,0,0,288,289,5,69,0,0,289,290,5,77,0,0,290,291,5,65,0,0,291, + 292,5,82,0,0,292,294,5,75,0,0,293,268,1,0,0,0,293,269,1,0,0,0,293, + 275,1,0,0,0,293,281,1,0,0,0,293,287,1,0,0,0,294,298,1,0,0,0,295, + 297,5,32,0,0,296,295,1,0,0,0,297,300,1,0,0,0,298,296,1,0,0,0,298, + 299,1,0,0,0,299,301,1,0,0,0,300,298,1,0,0,0,301,302,3,36,17,0,302, + 303,1,0,0,0,303,304,6,19,1,0,304,41,1,0,0,0,305,331,7,8,0,0,306, + 308,5,47,0,0,307,309,5,47,0,0,308,307,1,0,0,0,309,310,1,0,0,0,310, + 308,1,0,0,0,310,311,1,0,0,0,311,331,1,0,0,0,312,314,5,42,0,0,313, + 315,5,42,0,0,314,313,1,0,0,0,315,316,1,0,0,0,316,314,1,0,0,0,316, + 317,1,0,0,0,317,331,1,0,0,0,318,320,5,61,0,0,319,321,5,61,0,0,320, + 319,1,0,0,0,321,322,1,0,0,0,322,320,1,0,0,0,322,323,1,0,0,0,323, + 331,1,0,0,0,324,325,5,82,0,0,325,326,5,69,0,0,326,327,5,77,0,0,327, + 328,5,65,0,0,328,329,5,82,0,0,329,331,5,75,0,0,330,305,1,0,0,0,330, + 306,1,0,0,0,330,312,1,0,0,0,330,318,1,0,0,0,330,324,1,0,0,0,331, + 335,1,0,0,0,332,334,8,3,0,0,333,332,1,0,0,0,334,337,1,0,0,0,335, + 333,1,0,0,0,335,336,1,0,0,0,336,338,1,0,0,0,337,335,1,0,0,0,338, + 339,3,36,17,0,339,340,1,0,0,0,340,341,6,20,1,0,341,43,1,0,0,0,342, + 343,5,100,0,0,343,344,5,97,0,0,344,345,5,116,0,0,345,346,5,97,0, + 0,346,347,5,115,0,0,347,348,5,101,0,0,348,349,5,116,0,0,349,45,1, + 0,0,0,350,351,5,115,0,0,351,352,5,119,0,0,352,47,1,0,0,0,353,354, + 5,115,0,0,354,355,5,102,0,0,355,49,1,0,0,0,356,357,3,22,10,0,357, + 358,5,46,0,0,358,359,5,76,0,0,359,51,1,0,0,0,360,361,3,22,10,0,361, + 362,5,46,0,0,362,363,5,80,0,0,363,53,1,0,0,0,364,365,3,22,10,0,365, + 366,5,46,0,0,366,367,5,87,0,0,367,55,1,0,0,0,368,369,3,22,10,0,369, + 370,5,46,0,0,370,371,5,66,0,0,371,57,1,0,0,0,372,373,3,22,10,0,373, + 374,5,46,0,0,374,375,5,69,0,0,375,59,1,0,0,0,376,377,3,22,10,0,377, + 378,5,46,0,0,378,379,5,74,0,0,379,61,1,0,0,0,380,381,3,22,10,0,381, + 382,5,46,0,0,382,383,5,85,0,0,383,63,1,0,0,0,384,385,5,118,0,0,385, + 386,5,111,0,0,386,387,5,108,0,0,387,65,1,0,0,0,388,389,5,105,0,0, + 389,390,5,110,0,0,390,391,5,116,0,0,391,67,1,0,0,0,392,393,5,115, + 0,0,393,394,5,116,0,0,394,395,5,97,0,0,395,396,5,116,0,0,396,69, + 1,0,0,0,397,398,5,99,0,0,398,399,5,111,0,0,399,400,5,109,0,0,400, + 401,5,109,0,0,401,402,5,101,0,0,402,403,5,110,0,0,403,404,5,116, + 0,0,404,71,1,0,0,0,405,406,5,102,0,0,406,407,5,108,0,0,407,408,5, + 97,0,0,408,409,5,103,0,0,409,410,5,48,0,0,410,412,1,0,0,0,411,413, + 7,3,0,0,412,411,1,0,0,0,413,414,1,0,0,0,414,412,1,0,0,0,414,415, + 1,0,0,0,415,416,1,0,0,0,416,417,6,35,3,0,417,73,1,0,0,0,418,419, + 3,32,15,0,419,75,1,0,0,0,420,421,3,6,2,0,421,77,1,0,0,0,422,424, + 7,7,0,0,423,422,1,0,0,0,424,425,1,0,0,0,425,423,1,0,0,0,425,426, + 1,0,0,0,426,427,1,0,0,0,427,428,6,38,2,0,428,79,1,0,0,0,429,431, + 7,3,0,0,430,429,1,0,0,0,431,432,1,0,0,0,432,430,1,0,0,0,432,433, + 1,0,0,0,433,81,1,0,0,0,434,438,5,123,0,0,435,437,5,32,0,0,436,435, + 1,0,0,0,437,440,1,0,0,0,438,436,1,0,0,0,438,439,1,0,0,0,439,449, + 1,0,0,0,440,438,1,0,0,0,441,450,3,6,2,0,442,445,3,32,15,0,443,445, + 5,32,0,0,444,442,1,0,0,0,444,443,1,0,0,0,445,448,1,0,0,0,446,447, + 1,0,0,0,446,444,1,0,0,0,447,450,1,0,0,0,448,446,1,0,0,0,449,441, + 1,0,0,0,449,446,1,0,0,0,450,454,1,0,0,0,451,453,5,32,0,0,452,451, + 1,0,0,0,453,456,1,0,0,0,454,452,1,0,0,0,454,455,1,0,0,0,455,457, + 1,0,0,0,456,454,1,0,0,0,457,458,5,125,0,0,458,83,1,0,0,0,52,0,1, + 93,98,102,105,109,113,116,124,131,136,141,147,153,161,166,172,178, + 186,191,197,203,214,218,222,228,234,241,247,253,255,258,263,273, + 279,285,293,298,310,316,322,330,335,414,425,432,438,444,446,449, + 454,4,5,1,0,0,1,0,6,0,0,4,0,0 ] class NmrViewPKLexer(Lexer): @@ -195,28 +203,30 @@ class NmrViewPKLexer(Lexer): SMCLN_COMMENT = 7 Simple_name = 8 SPACE = 9 - ENCLOSE_COMMENT = 10 - SECTION_COMMENT = 11 - LINE_COMMENT = 12 - Dataset = 13 - Sw = 14 - Sf = 15 - L_name = 16 - P_name = 17 - W_name = 18 - B_name = 19 - E_name = 20 - J_name = 21 - U_name = 22 - Vol = 23 - Int = 24 - Stat = 25 - Comment = 26 - Flag0 = 27 - Simple_name_LA = 28 - Float_LA = 29 - SPACE_LA = 30 - RETURN_LA = 31 + RETURN = 10 + ENCLOSE_DATA = 11 + SECTION_COMMENT = 12 + LINE_COMMENT = 13 + Dataset = 14 + Sw = 15 + Sf = 16 + L_name = 17 + P_name = 18 + W_name = 19 + B_name = 20 + E_name = 21 + J_name = 22 + U_name = 23 + Vol = 24 + Int = 25 + Stat = 26 + Comment = 27 + Flag0 = 28 + Simple_name_LA = 29 + Float_LA = 30 + SPACE_LA = 31 + RETURN_LA = 32 + ENCLOSE_DATA_LA = 33 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -228,20 +238,20 @@ class NmrViewPKLexer(Lexer): symbolicNames = [ "", "Label", "Integer", "Float", "Real", "SHARP_COMMENT", "EXCLM_COMMENT", - "SMCLN_COMMENT", "Simple_name", "SPACE", "ENCLOSE_COMMENT", + "SMCLN_COMMENT", "Simple_name", "SPACE", "RETURN", "ENCLOSE_DATA", "SECTION_COMMENT", "LINE_COMMENT", "Dataset", "Sw", "Sf", "L_name", "P_name", "W_name", "B_name", "E_name", "J_name", "U_name", "Vol", "Int", "Stat", "Comment", "Flag0", "Simple_name_LA", - "Float_LA", "SPACE_LA", "RETURN_LA" ] + "Float_LA", "SPACE_LA", "RETURN_LA", "ENCLOSE_DATA_LA" ] ruleNames = [ "Label", "Integer", "Float", "Real", "DEC_DOT_DEC", "DEC_DIGIT", "DECIMAL", "SHARP_COMMENT", "EXCLM_COMMENT", "SMCLN_COMMENT", "Simple_name", "ALPHA", "ALPHA_NUM", "START_CHAR", "NAME_CHAR", - "SIMPLE_NAME", "SPACE", "ENCLOSE_COMMENT", "SECTION_COMMENT", + "SIMPLE_NAME", "SPACE", "RETURN", "ENCLOSE_DATA", "SECTION_COMMENT", "LINE_COMMENT", "Dataset", "Sw", "Sf", "L_name", "P_name", "W_name", "B_name", "E_name", "J_name", "U_name", "Vol", "Int", "Stat", "Comment", "Flag0", "Simple_name_LA", "Float_LA", - "SPACE_LA", "RETURN_LA" ] + "SPACE_LA", "RETURN_LA", "ENCLOSE_DATA_LA" ] grammarFileName = "NmrViewPKLexer.g4" diff --git a/wwpdb/utils/nmr/pk/NmrViewPKParser.py b/wwpdb/utils/nmr/pk/NmrViewPKParser.py index 9050fcf7d..748ccc965 100644 --- a/wwpdb/utils/nmr/pk/NmrViewPKParser.py +++ b/wwpdb/utils/nmr/pk/NmrViewPKParser.py @@ -10,56 +10,146 @@ def serializedATN(): return [ - 4,1,31,165,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, - 6,2,7,7,7,2,8,7,8,2,9,7,9,1,0,1,0,1,0,1,0,5,0,25,8,0,10,0,12,0,28, - 9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,2,4,2,48,8,2,11,2,12,2,49,1,3,4,3,53,8,3,11,3,12,3,54, - 1,4,4,4,58,8,4,11,4,12,4,59,1,5,4,5,63,8,5,11,5,12,5,64,1,5,1,5, - 1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7, - 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, - 1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, - 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9, - 1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9, - 1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9, - 1,9,0,0,10,0,2,4,6,8,10,12,14,16,18,0,0,162,0,26,1,0,0,0,2,31,1, - 0,0,0,4,47,1,0,0,0,6,52,1,0,0,0,8,57,1,0,0,0,10,62,1,0,0,0,12,72, - 1,0,0,0,14,80,1,0,0,0,16,101,1,0,0,0,18,129,1,0,0,0,20,25,3,2,1, - 0,21,25,3,14,7,0,22,25,3,16,8,0,23,25,3,18,9,0,24,20,1,0,0,0,24, - 21,1,0,0,0,24,22,1,0,0,0,24,23,1,0,0,0,25,28,1,0,0,0,26,24,1,0,0, - 0,26,27,1,0,0,0,27,29,1,0,0,0,28,26,1,0,0,0,29,30,5,0,0,1,30,1,1, - 0,0,0,31,32,5,1,0,0,32,33,5,13,0,0,33,34,5,14,0,0,34,35,5,15,0,0, - 35,36,5,31,0,0,36,37,3,4,2,0,37,38,5,31,0,0,38,39,5,28,0,0,39,40, - 5,31,0,0,40,41,3,6,3,0,41,42,5,31,0,0,42,43,3,8,4,0,43,44,5,31,0, - 0,44,45,3,10,5,0,45,3,1,0,0,0,46,48,5,28,0,0,47,46,1,0,0,0,48,49, - 1,0,0,0,49,47,1,0,0,0,49,50,1,0,0,0,50,5,1,0,0,0,51,53,5,29,0,0, - 52,51,1,0,0,0,53,54,1,0,0,0,54,52,1,0,0,0,54,55,1,0,0,0,55,7,1,0, - 0,0,56,58,5,29,0,0,57,56,1,0,0,0,58,59,1,0,0,0,59,57,1,0,0,0,59, - 60,1,0,0,0,60,9,1,0,0,0,61,63,3,12,6,0,62,61,1,0,0,0,63,64,1,0,0, - 0,64,62,1,0,0,0,64,65,1,0,0,0,65,66,1,0,0,0,66,67,5,23,0,0,67,68, - 5,24,0,0,68,69,5,25,0,0,69,70,5,26,0,0,70,71,5,27,0,0,71,11,1,0, - 0,0,72,73,5,16,0,0,73,74,5,17,0,0,74,75,5,18,0,0,75,76,5,19,0,0, - 76,77,5,20,0,0,77,78,5,21,0,0,78,79,5,22,0,0,79,13,1,0,0,0,80,81, - 5,2,0,0,81,82,5,10,0,0,82,83,5,3,0,0,83,84,5,3,0,0,84,85,5,3,0,0, - 85,86,5,8,0,0,86,87,5,10,0,0,87,88,5,10,0,0,88,89,5,10,0,0,89,90, - 5,3,0,0,90,91,5,3,0,0,91,92,5,3,0,0,92,93,5,8,0,0,93,94,5,10,0,0, - 94,95,5,10,0,0,95,96,5,3,0,0,96,97,5,3,0,0,97,98,5,2,0,0,98,99,5, - 10,0,0,99,100,5,2,0,0,100,15,1,0,0,0,101,102,5,2,0,0,102,103,5,10, - 0,0,103,104,5,3,0,0,104,105,5,3,0,0,105,106,5,3,0,0,106,107,5,8, - 0,0,107,108,5,10,0,0,108,109,5,10,0,0,109,110,5,10,0,0,110,111,5, - 3,0,0,111,112,5,3,0,0,112,113,5,3,0,0,113,114,5,8,0,0,114,115,5, - 10,0,0,115,116,5,10,0,0,116,117,5,10,0,0,117,118,5,3,0,0,118,119, - 5,3,0,0,119,120,5,3,0,0,120,121,5,8,0,0,121,122,5,10,0,0,122,123, - 5,10,0,0,123,124,5,3,0,0,124,125,5,3,0,0,125,126,5,2,0,0,126,127, - 5,10,0,0,127,128,5,2,0,0,128,17,1,0,0,0,129,130,5,2,0,0,130,131, - 5,10,0,0,131,132,5,3,0,0,132,133,5,3,0,0,133,134,5,3,0,0,134,135, - 5,8,0,0,135,136,5,10,0,0,136,137,5,10,0,0,137,138,5,10,0,0,138,139, - 5,3,0,0,139,140,5,3,0,0,140,141,5,3,0,0,141,142,5,8,0,0,142,143, - 5,10,0,0,143,144,5,10,0,0,144,145,5,10,0,0,145,146,5,3,0,0,146,147, - 5,3,0,0,147,148,5,3,0,0,148,149,5,8,0,0,149,150,5,10,0,0,150,151, - 5,10,0,0,151,152,5,10,0,0,152,153,5,3,0,0,153,154,5,3,0,0,154,155, - 5,3,0,0,155,156,5,8,0,0,156,157,5,10,0,0,157,158,5,10,0,0,158,159, - 5,3,0,0,159,160,5,3,0,0,160,161,5,2,0,0,161,162,5,10,0,0,162,163, - 5,2,0,0,163,19,1,0,0,0,6,24,26,49,54,59,64 + 4,1,33,416,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13, + 2,14,7,14,2,15,7,15,1,0,1,0,1,0,1,0,1,0,1,0,1,0,5,0,40,8,0,10,0, + 12,0,43,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,2,4,2,62,8,2,11,2,12,2,63,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,84,8,3,1,3,1, + 3,3,3,88,8,3,1,3,4,3,91,8,3,11,3,12,3,92,1,4,1,4,1,4,1,4,1,4,1,4, + 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,114,8,4, + 1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,144,8,5,1,5, + 1,5,3,5,148,8,5,1,5,4,5,151,8,5,11,5,12,5,152,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,1,6,1,6,1,6,3,6,181,8,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,218,8,7,1,7,1, + 7,3,7,222,8,7,1,7,4,7,225,8,7,11,7,12,7,226,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,3,8,262,8,8,1,8, + 1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,279, + 8,9,1,9,1,9,3,9,283,8,9,1,9,4,9,286,8,9,11,9,12,9,287,1,10,1,10, + 1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,3,10,303, + 8,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11, + 1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,324,8,11,1,11,1,11,3,11, + 328,8,11,1,11,4,11,331,8,11,11,11,12,11,332,1,12,1,12,1,12,1,12, + 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12, + 3,12,352,8,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, + 3,13,377,8,13,1,13,1,13,3,13,381,8,13,1,13,4,13,384,8,13,11,13,12, + 13,385,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,3,14,409,8,14,1, + 14,1,14,1,14,1,15,1,15,1,15,0,0,16,0,2,4,6,8,10,12,14,16,18,20,22, + 24,26,28,30,0,1,2,0,29,30,33,33,431,0,41,1,0,0,0,2,46,1,0,0,0,4, + 61,1,0,0,0,6,65,1,0,0,0,8,94,1,0,0,0,10,118,1,0,0,0,12,154,1,0,0, + 0,14,185,1,0,0,0,16,228,1,0,0,0,18,266,1,0,0,0,20,289,1,0,0,0,22, + 307,1,0,0,0,24,334,1,0,0,0,26,356,1,0,0,0,28,387,1,0,0,0,30,413, + 1,0,0,0,32,40,3,2,1,0,33,40,3,6,3,0,34,40,3,10,5,0,35,40,3,14,7, + 0,36,40,3,18,9,0,37,40,3,22,11,0,38,40,3,26,13,0,39,32,1,0,0,0,39, + 33,1,0,0,0,39,34,1,0,0,0,39,35,1,0,0,0,39,36,1,0,0,0,39,37,1,0,0, + 0,39,38,1,0,0,0,40,43,1,0,0,0,41,39,1,0,0,0,41,42,1,0,0,0,42,44, + 1,0,0,0,43,41,1,0,0,0,44,45,5,0,0,1,45,1,1,0,0,0,46,47,5,1,0,0,47, + 48,5,14,0,0,48,49,5,15,0,0,49,50,5,16,0,0,50,51,5,32,0,0,51,52,3, + 4,2,0,52,53,5,32,0,0,53,54,5,29,0,0,54,55,5,32,0,0,55,56,3,4,2,0, + 56,57,5,32,0,0,57,58,3,4,2,0,58,59,5,32,0,0,59,3,1,0,0,0,60,62,3, + 30,15,0,61,60,1,0,0,0,62,63,1,0,0,0,63,61,1,0,0,0,63,64,1,0,0,0, + 64,5,1,0,0,0,65,66,5,17,0,0,66,67,5,18,0,0,67,68,5,19,0,0,68,69, + 5,20,0,0,69,70,5,21,0,0,70,71,5,22,0,0,71,72,5,23,0,0,72,73,5,17, + 0,0,73,74,5,18,0,0,74,75,5,19,0,0,75,76,5,20,0,0,76,77,5,21,0,0, + 77,78,5,22,0,0,78,79,5,23,0,0,79,80,5,24,0,0,80,81,5,25,0,0,81,83, + 5,26,0,0,82,84,5,27,0,0,83,82,1,0,0,0,83,84,1,0,0,0,84,85,1,0,0, + 0,85,87,5,28,0,0,86,88,5,10,0,0,87,86,1,0,0,0,87,88,1,0,0,0,88,90, + 1,0,0,0,89,91,3,8,4,0,90,89,1,0,0,0,91,92,1,0,0,0,92,90,1,0,0,0, + 92,93,1,0,0,0,93,7,1,0,0,0,94,95,5,2,0,0,95,96,5,11,0,0,96,97,5, + 3,0,0,97,98,5,3,0,0,98,99,5,3,0,0,99,100,5,8,0,0,100,101,5,11,0, + 0,101,102,5,11,0,0,102,103,5,11,0,0,103,104,5,3,0,0,104,105,5,3, + 0,0,105,106,5,3,0,0,106,107,5,8,0,0,107,108,5,11,0,0,108,109,5,11, + 0,0,109,110,5,3,0,0,110,111,5,3,0,0,111,113,5,2,0,0,112,114,5,11, + 0,0,113,112,1,0,0,0,113,114,1,0,0,0,114,115,1,0,0,0,115,116,5,2, + 0,0,116,117,5,10,0,0,117,9,1,0,0,0,118,119,5,17,0,0,119,120,5,18, + 0,0,120,121,5,19,0,0,121,122,5,20,0,0,122,123,5,21,0,0,123,124,5, + 22,0,0,124,125,5,23,0,0,125,126,5,17,0,0,126,127,5,18,0,0,127,128, + 5,19,0,0,128,129,5,20,0,0,129,130,5,21,0,0,130,131,5,22,0,0,131, + 132,5,23,0,0,132,133,5,17,0,0,133,134,5,18,0,0,134,135,5,19,0,0, + 135,136,5,20,0,0,136,137,5,21,0,0,137,138,5,22,0,0,138,139,5,23, + 0,0,139,140,5,24,0,0,140,141,5,25,0,0,141,143,5,26,0,0,142,144,5, + 27,0,0,143,142,1,0,0,0,143,144,1,0,0,0,144,145,1,0,0,0,145,147,5, + 28,0,0,146,148,5,10,0,0,147,146,1,0,0,0,147,148,1,0,0,0,148,150, + 1,0,0,0,149,151,3,12,6,0,150,149,1,0,0,0,151,152,1,0,0,0,152,150, + 1,0,0,0,152,153,1,0,0,0,153,11,1,0,0,0,154,155,5,2,0,0,155,156,5, + 11,0,0,156,157,5,3,0,0,157,158,5,3,0,0,158,159,5,3,0,0,159,160,5, + 8,0,0,160,161,5,11,0,0,161,162,5,11,0,0,162,163,5,11,0,0,163,164, + 5,3,0,0,164,165,5,3,0,0,165,166,5,3,0,0,166,167,5,8,0,0,167,168, + 5,11,0,0,168,169,5,11,0,0,169,170,5,11,0,0,170,171,5,3,0,0,171,172, + 5,3,0,0,172,173,5,3,0,0,173,174,5,8,0,0,174,175,5,11,0,0,175,176, + 5,11,0,0,176,177,5,3,0,0,177,178,5,3,0,0,178,180,5,2,0,0,179,181, + 5,11,0,0,180,179,1,0,0,0,180,181,1,0,0,0,181,182,1,0,0,0,182,183, + 5,2,0,0,183,184,5,10,0,0,184,13,1,0,0,0,185,186,5,17,0,0,186,187, + 5,18,0,0,187,188,5,19,0,0,188,189,5,20,0,0,189,190,5,21,0,0,190, + 191,5,22,0,0,191,192,5,23,0,0,192,193,5,17,0,0,193,194,5,18,0,0, + 194,195,5,19,0,0,195,196,5,20,0,0,196,197,5,21,0,0,197,198,5,22, + 0,0,198,199,5,23,0,0,199,200,5,17,0,0,200,201,5,18,0,0,201,202,5, + 19,0,0,202,203,5,20,0,0,203,204,5,21,0,0,204,205,5,22,0,0,205,206, + 5,23,0,0,206,207,5,17,0,0,207,208,5,18,0,0,208,209,5,19,0,0,209, + 210,5,20,0,0,210,211,5,21,0,0,211,212,5,22,0,0,212,213,5,23,0,0, + 213,214,5,24,0,0,214,215,5,25,0,0,215,217,5,26,0,0,216,218,5,27, + 0,0,217,216,1,0,0,0,217,218,1,0,0,0,218,219,1,0,0,0,219,221,5,28, + 0,0,220,222,5,10,0,0,221,220,1,0,0,0,221,222,1,0,0,0,222,224,1,0, + 0,0,223,225,3,16,8,0,224,223,1,0,0,0,225,226,1,0,0,0,226,224,1,0, + 0,0,226,227,1,0,0,0,227,15,1,0,0,0,228,229,5,2,0,0,229,230,5,11, + 0,0,230,231,5,3,0,0,231,232,5,3,0,0,232,233,5,3,0,0,233,234,5,8, + 0,0,234,235,5,11,0,0,235,236,5,11,0,0,236,237,5,11,0,0,237,238,5, + 3,0,0,238,239,5,3,0,0,239,240,5,3,0,0,240,241,5,8,0,0,241,242,5, + 11,0,0,242,243,5,11,0,0,243,244,5,11,0,0,244,245,5,3,0,0,245,246, + 5,3,0,0,246,247,5,3,0,0,247,248,5,8,0,0,248,249,5,11,0,0,249,250, + 5,11,0,0,250,251,5,11,0,0,251,252,5,3,0,0,252,253,5,3,0,0,253,254, + 5,3,0,0,254,255,5,8,0,0,255,256,5,11,0,0,256,257,5,11,0,0,257,258, + 5,3,0,0,258,259,5,3,0,0,259,261,5,2,0,0,260,262,5,11,0,0,261,260, + 1,0,0,0,261,262,1,0,0,0,262,263,1,0,0,0,263,264,5,2,0,0,264,265, + 5,10,0,0,265,17,1,0,0,0,266,267,5,17,0,0,267,268,5,18,0,0,268,269, + 5,19,0,0,269,270,5,20,0,0,270,271,5,17,0,0,271,272,5,18,0,0,272, + 273,5,19,0,0,273,274,5,20,0,0,274,275,5,24,0,0,275,276,5,25,0,0, + 276,278,5,26,0,0,277,279,5,27,0,0,278,277,1,0,0,0,278,279,1,0,0, + 0,279,280,1,0,0,0,280,282,5,28,0,0,281,283,5,10,0,0,282,281,1,0, + 0,0,282,283,1,0,0,0,283,285,1,0,0,0,284,286,3,20,10,0,285,284,1, + 0,0,0,286,287,1,0,0,0,287,285,1,0,0,0,287,288,1,0,0,0,288,19,1,0, + 0,0,289,290,5,2,0,0,290,291,5,11,0,0,291,292,5,3,0,0,292,293,5,3, + 0,0,293,294,5,3,0,0,294,295,5,11,0,0,295,296,5,3,0,0,296,297,5,3, + 0,0,297,298,5,3,0,0,298,299,5,3,0,0,299,300,5,3,0,0,300,302,5,2, + 0,0,301,303,5,11,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,304,1,0, + 0,0,304,305,5,2,0,0,305,306,5,10,0,0,306,21,1,0,0,0,307,308,5,17, + 0,0,308,309,5,18,0,0,309,310,5,19,0,0,310,311,5,20,0,0,311,312,5, + 17,0,0,312,313,5,18,0,0,313,314,5,19,0,0,314,315,5,20,0,0,315,316, + 5,17,0,0,316,317,5,18,0,0,317,318,5,19,0,0,318,319,5,20,0,0,319, + 320,5,24,0,0,320,321,5,25,0,0,321,323,5,26,0,0,322,324,5,27,0,0, + 323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0,325,327,5,28,0,0, + 326,328,5,10,0,0,327,326,1,0,0,0,327,328,1,0,0,0,328,330,1,0,0,0, + 329,331,3,24,12,0,330,329,1,0,0,0,331,332,1,0,0,0,332,330,1,0,0, + 0,332,333,1,0,0,0,333,23,1,0,0,0,334,335,5,2,0,0,335,336,5,11,0, + 0,336,337,5,3,0,0,337,338,5,3,0,0,338,339,5,3,0,0,339,340,5,11,0, + 0,340,341,5,3,0,0,341,342,5,3,0,0,342,343,5,3,0,0,343,344,5,11,0, + 0,344,345,5,3,0,0,345,346,5,3,0,0,346,347,5,3,0,0,347,348,5,3,0, + 0,348,349,5,3,0,0,349,351,5,2,0,0,350,352,5,11,0,0,351,350,1,0,0, + 0,351,352,1,0,0,0,352,353,1,0,0,0,353,354,5,2,0,0,354,355,5,10,0, + 0,355,25,1,0,0,0,356,357,5,17,0,0,357,358,5,18,0,0,358,359,5,19, + 0,0,359,360,5,20,0,0,360,361,5,17,0,0,361,362,5,18,0,0,362,363,5, + 19,0,0,363,364,5,20,0,0,364,365,5,17,0,0,365,366,5,18,0,0,366,367, + 5,19,0,0,367,368,5,20,0,0,368,369,5,17,0,0,369,370,5,18,0,0,370, + 371,5,19,0,0,371,372,5,20,0,0,372,373,5,24,0,0,373,374,5,25,0,0, + 374,376,5,26,0,0,375,377,5,27,0,0,376,375,1,0,0,0,376,377,1,0,0, + 0,377,378,1,0,0,0,378,380,5,28,0,0,379,381,5,10,0,0,380,379,1,0, + 0,0,380,381,1,0,0,0,381,383,1,0,0,0,382,384,3,28,14,0,383,382,1, + 0,0,0,384,385,1,0,0,0,385,383,1,0,0,0,385,386,1,0,0,0,386,27,1,0, + 0,0,387,388,5,2,0,0,388,389,5,11,0,0,389,390,5,3,0,0,390,391,5,3, + 0,0,391,392,5,3,0,0,392,393,5,11,0,0,393,394,5,3,0,0,394,395,5,3, + 0,0,395,396,5,3,0,0,396,397,5,11,0,0,397,398,5,3,0,0,398,399,5,3, + 0,0,399,400,5,3,0,0,400,401,5,11,0,0,401,402,5,3,0,0,402,403,5,3, + 0,0,403,404,5,3,0,0,404,405,5,3,0,0,405,406,5,3,0,0,406,408,5,2, + 0,0,407,409,5,11,0,0,408,407,1,0,0,0,408,409,1,0,0,0,409,410,1,0, + 0,0,410,411,5,2,0,0,411,412,5,10,0,0,412,29,1,0,0,0,413,414,7,0, + 0,0,414,31,1,0,0,0,27,39,41,63,83,87,92,113,143,147,152,180,217, + 221,226,261,278,282,287,302,323,327,332,351,376,380,385,408 ] class NmrViewPKParser ( Parser ): @@ -75,32 +165,42 @@ class NmrViewPKParser ( Parser ): literalNames = [ "", "'label'", "", "", "", "", "", "", "", "", "", "", "", - "'dataset'", "'sw'", "'sf'", "", "", + "", "'dataset'", "'sw'", "'sf'", "", "", "", "", "", - "", "'vol'", "'int'", "'stat'", "'comment'" ] + "", "", "'vol'", "'int'", "'stat'", + "'comment'" ] symbolicNames = [ "", "Label", "Integer", "Float", "Real", "SHARP_COMMENT", "EXCLM_COMMENT", "SMCLN_COMMENT", - "Simple_name", "SPACE", "ENCLOSE_COMMENT", "SECTION_COMMENT", - "LINE_COMMENT", "Dataset", "Sw", "Sf", "L_name", "P_name", - "W_name", "B_name", "E_name", "J_name", "U_name", - "Vol", "Int", "Stat", "Comment", "Flag0", "Simple_name_LA", - "Float_LA", "SPACE_LA", "RETURN_LA" ] + "Simple_name", "SPACE", "RETURN", "ENCLOSE_DATA", + "SECTION_COMMENT", "LINE_COMMENT", "Dataset", "Sw", + "Sf", "L_name", "P_name", "W_name", "B_name", "E_name", + "J_name", "U_name", "Vol", "Int", "Stat", "Comment", + "Flag0", "Simple_name_LA", "Float_LA", "SPACE_LA", + "RETURN_LA", "ENCLOSE_DATA_LA" ] RULE_nmrview_pk = 0 RULE_data_label = 1 RULE_labels = 2 - RULE_widths = 3 - RULE_freqs = 4 - RULE_vars = 5 - RULE_vars_per_axis = 6 - RULE_peak_list_2d = 7 - RULE_peak_list_3d = 8 - RULE_peak_list_4d = 9 - - ruleNames = [ "nmrview_pk", "data_label", "labels", "widths", "freqs", - "vars", "vars_per_axis", "peak_list_2d", "peak_list_3d", - "peak_list_4d" ] + RULE_peak_list_2d = 3 + RULE_peak_2d = 4 + RULE_peak_list_3d = 5 + RULE_peak_3d = 6 + RULE_peak_list_4d = 7 + RULE_peak_4d = 8 + RULE_peak_list_wo_eju_2d = 9 + RULE_peak_wo_eju_2d = 10 + RULE_peak_list_wo_eju_3d = 11 + RULE_peak_wo_eju_3d = 12 + RULE_peak_list_wo_eju_4d = 13 + RULE_peak_wo_eju_4d = 14 + RULE_label = 15 + + ruleNames = [ "nmrview_pk", "data_label", "labels", "peak_list_2d", + "peak_2d", "peak_list_3d", "peak_3d", "peak_list_4d", + "peak_4d", "peak_list_wo_eju_2d", "peak_wo_eju_2d", "peak_list_wo_eju_3d", + "peak_wo_eju_3d", "peak_list_wo_eju_4d", "peak_wo_eju_4d", + "label" ] EOF = Token.EOF Label=1 @@ -112,28 +212,30 @@ class NmrViewPKParser ( Parser ): SMCLN_COMMENT=7 Simple_name=8 SPACE=9 - ENCLOSE_COMMENT=10 - SECTION_COMMENT=11 - LINE_COMMENT=12 - Dataset=13 - Sw=14 - Sf=15 - L_name=16 - P_name=17 - W_name=18 - B_name=19 - E_name=20 - J_name=21 - U_name=22 - Vol=23 - Int=24 - Stat=25 - Comment=26 - Flag0=27 - Simple_name_LA=28 - Float_LA=29 - SPACE_LA=30 - RETURN_LA=31 + RETURN=10 + ENCLOSE_DATA=11 + SECTION_COMMENT=12 + LINE_COMMENT=13 + Dataset=14 + Sw=15 + Sf=16 + L_name=17 + P_name=18 + W_name=19 + B_name=20 + E_name=21 + J_name=22 + U_name=23 + Vol=24 + Int=25 + Stat=26 + Comment=27 + Flag0=28 + Simple_name_LA=29 + Float_LA=30 + SPACE_LA=31 + RETURN_LA=32 + ENCLOSE_DATA_LA=33 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -182,6 +284,27 @@ def peak_list_4d(self, i:int=None): return self.getTypedRuleContext(NmrViewPKParser.Peak_list_4dContext,i) + def peak_list_wo_eju_2d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_list_wo_eju_2dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_list_wo_eju_2dContext,i) + + + def peak_list_wo_eju_3d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_list_wo_eju_3dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_list_wo_eju_3dContext,i) + + + def peak_list_wo_eju_4d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_list_wo_eju_4dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_list_wo_eju_4dContext,i) + + def getRuleIndex(self): return NmrViewPKParser.RULE_nmrview_pk @@ -203,39 +326,54 @@ def nmrview_pk(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 26 + self.state = 41 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==1 or _la==2: - self.state = 24 + while _la==1 or _la==17: + self.state = 39 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,0,self._ctx) if la_ == 1: - self.state = 20 + self.state = 32 self.data_label() pass elif la_ == 2: - self.state = 21 + self.state = 33 self.peak_list_2d() pass elif la_ == 3: - self.state = 22 + self.state = 34 self.peak_list_3d() pass elif la_ == 4: - self.state = 23 + self.state = 35 self.peak_list_4d() pass + elif la_ == 5: + self.state = 36 + self.peak_list_wo_eju_2d() + pass + + elif la_ == 6: + self.state = 37 + self.peak_list_wo_eju_3d() + pass + + elif la_ == 7: + self.state = 38 + self.peak_list_wo_eju_4d() + pass + - self.state = 28 + self.state = 43 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 29 + self.state = 44 self.match(NmrViewPKParser.EOF) except RecognitionException as re: localctx.exception = re @@ -271,25 +409,16 @@ def RETURN_LA(self, i:int=None): else: return self.getToken(NmrViewPKParser.RETURN_LA, i) - def labels(self): - return self.getTypedRuleContext(NmrViewPKParser.LabelsContext,0) + def labels(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.LabelsContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.LabelsContext,i) def Simple_name_LA(self): return self.getToken(NmrViewPKParser.Simple_name_LA, 0) - def widths(self): - return self.getTypedRuleContext(NmrViewPKParser.WidthsContext,0) - - - def freqs(self): - return self.getTypedRuleContext(NmrViewPKParser.FreqsContext,0) - - - def vars_(self): - return self.getTypedRuleContext(NmrViewPKParser.VarsContext,0) - - def getRuleIndex(self): return NmrViewPKParser.RULE_data_label @@ -310,34 +439,32 @@ def data_label(self): self.enterRule(localctx, 2, self.RULE_data_label) try: self.enterOuterAlt(localctx, 1) - self.state = 31 + self.state = 46 self.match(NmrViewPKParser.Label) - self.state = 32 + self.state = 47 self.match(NmrViewPKParser.Dataset) - self.state = 33 + self.state = 48 self.match(NmrViewPKParser.Sw) - self.state = 34 + self.state = 49 self.match(NmrViewPKParser.Sf) - self.state = 35 + self.state = 50 self.match(NmrViewPKParser.RETURN_LA) - self.state = 36 + self.state = 51 self.labels() - self.state = 37 + self.state = 52 self.match(NmrViewPKParser.RETURN_LA) - self.state = 38 + self.state = 53 self.match(NmrViewPKParser.Simple_name_LA) - self.state = 39 + self.state = 54 self.match(NmrViewPKParser.RETURN_LA) - self.state = 40 - self.widths() - self.state = 41 + self.state = 55 + self.labels() + self.state = 56 self.match(NmrViewPKParser.RETURN_LA) - self.state = 42 - self.freqs() - self.state = 43 + self.state = 57 + self.labels() + self.state = 58 self.match(NmrViewPKParser.RETURN_LA) - self.state = 44 - self.vars_() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -354,11 +481,12 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def Simple_name_LA(self, i:int=None): + def label(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Simple_name_LA) + return self.getTypedRuleContexts(NmrViewPKParser.LabelContext) else: - return self.getToken(NmrViewPKParser.Simple_name_LA, i) + return self.getTypedRuleContext(NmrViewPKParser.LabelContext,i) + def getRuleIndex(self): return NmrViewPKParser.RULE_labels @@ -381,16 +509,16 @@ def labels(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 47 + self.state = 61 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 46 - self.match(NmrViewPKParser.Simple_name_LA) - self.state = 49 + self.state = 60 + self.label() + self.state = 63 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==28): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 10200547328) != 0)): break except RecognitionException as re: @@ -402,122 +530,54 @@ def labels(self): return localctx - class WidthsContext(ParserRuleContext): + class Peak_list_2dContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def Float_LA(self, i:int=None): + def L_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Float_LA) + return self.getTokens(NmrViewPKParser.L_name) else: - return self.getToken(NmrViewPKParser.Float_LA, i) - - def getRuleIndex(self): - return NmrViewPKParser.RULE_widths - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterWidths" ): - listener.enterWidths(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitWidths" ): - listener.exitWidths(self) - - - - - def widths(self): - - localctx = NmrViewPKParser.WidthsContext(self, self._ctx, self.state) - self.enterRule(localctx, 6, self.RULE_widths) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 52 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 51 - self.match(NmrViewPKParser.Float_LA) - self.state = 54 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==29): - break - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class FreqsContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser + return self.getToken(NmrViewPKParser.L_name, i) - def Float_LA(self, i:int=None): + def P_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Float_LA) + return self.getTokens(NmrViewPKParser.P_name) else: - return self.getToken(NmrViewPKParser.Float_LA, i) - - def getRuleIndex(self): - return NmrViewPKParser.RULE_freqs - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFreqs" ): - listener.enterFreqs(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFreqs" ): - listener.exitFreqs(self) - + return self.getToken(NmrViewPKParser.P_name, i) + def W_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.W_name) + else: + return self.getToken(NmrViewPKParser.W_name, i) + def B_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.B_name) + else: + return self.getToken(NmrViewPKParser.B_name, i) - def freqs(self): - - localctx = NmrViewPKParser.FreqsContext(self, self._ctx, self.state) - self.enterRule(localctx, 8, self.RULE_freqs) - self._la = 0 # Token type - try: - self.enterOuterAlt(localctx, 1) - self.state = 57 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 56 - self.match(NmrViewPKParser.Float_LA) - self.state = 59 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==29): - break - - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - + def E_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.E_name) + else: + return self.getToken(NmrViewPKParser.E_name, i) - class VarsContext(ParserRuleContext): - __slots__ = 'parser' + def J_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.J_name) + else: + return self.getToken(NmrViewPKParser.J_name, i) - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser + def U_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.U_name) + else: + return self.getToken(NmrViewPKParser.U_name, i) def Vol(self): return self.getToken(NmrViewPKParser.Vol, 0) @@ -528,119 +588,57 @@ def Int(self): def Stat(self): return self.getToken(NmrViewPKParser.Stat, 0) + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + def Comment(self): return self.getToken(NmrViewPKParser.Comment, 0) - def Flag0(self): - return self.getToken(NmrViewPKParser.Flag0, 0) + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) - def vars_per_axis(self, i:int=None): + def peak_2d(self, i:int=None): if i is None: - return self.getTypedRuleContexts(NmrViewPKParser.Vars_per_axisContext) + return self.getTypedRuleContexts(NmrViewPKParser.Peak_2dContext) else: - return self.getTypedRuleContext(NmrViewPKParser.Vars_per_axisContext,i) + return self.getTypedRuleContext(NmrViewPKParser.Peak_2dContext,i) def getRuleIndex(self): - return NmrViewPKParser.RULE_vars + return NmrViewPKParser.RULE_peak_list_2d def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVars" ): - listener.enterVars(self) + if hasattr( listener, "enterPeak_list_2d" ): + listener.enterPeak_list_2d(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVars" ): - listener.exitVars(self) + if hasattr( listener, "exitPeak_list_2d" ): + listener.exitPeak_list_2d(self) - def vars_(self): + def peak_list_2d(self): - localctx = NmrViewPKParser.VarsContext(self, self._ctx, self.state) - self.enterRule(localctx, 10, self.RULE_vars) + localctx = NmrViewPKParser.Peak_list_2dContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_peak_list_2d) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 62 - self._errHandler.sync(self) - _la = self._input.LA(1) - while True: - self.state = 61 - self.vars_per_axis() - self.state = 64 - self._errHandler.sync(self) - _la = self._input.LA(1) - if not (_la==16): - break - + self.state = 65 + self.match(NmrViewPKParser.L_name) self.state = 66 - self.match(NmrViewPKParser.Vol) + self.match(NmrViewPKParser.P_name) self.state = 67 - self.match(NmrViewPKParser.Int) + self.match(NmrViewPKParser.W_name) self.state = 68 - self.match(NmrViewPKParser.Stat) + self.match(NmrViewPKParser.B_name) self.state = 69 - self.match(NmrViewPKParser.Comment) + self.match(NmrViewPKParser.E_name) self.state = 70 - self.match(NmrViewPKParser.Flag0) - except RecognitionException as re: - localctx.exception = re - self._errHandler.reportError(self, re) - self._errHandler.recover(self, re) - finally: - self.exitRule() - return localctx - - - class Vars_per_axisContext(ParserRuleContext): - __slots__ = 'parser' - - def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): - super().__init__(parent, invokingState) - self.parser = parser - - def L_name(self): - return self.getToken(NmrViewPKParser.L_name, 0) - - def P_name(self): - return self.getToken(NmrViewPKParser.P_name, 0) - - def W_name(self): - return self.getToken(NmrViewPKParser.W_name, 0) - - def B_name(self): - return self.getToken(NmrViewPKParser.B_name, 0) - - def E_name(self): - return self.getToken(NmrViewPKParser.E_name, 0) - - def J_name(self): - return self.getToken(NmrViewPKParser.J_name, 0) - - def U_name(self): - return self.getToken(NmrViewPKParser.U_name, 0) - - def getRuleIndex(self): - return NmrViewPKParser.RULE_vars_per_axis - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterVars_per_axis" ): - listener.enterVars_per_axis(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitVars_per_axis" ): - listener.exitVars_per_axis(self) - - - - - def vars_per_axis(self): - - localctx = NmrViewPKParser.Vars_per_axisContext(self, self._ctx, self.state) - self.enterRule(localctx, 12, self.RULE_vars_per_axis) - try: - self.enterOuterAlt(localctx, 1) + self.match(NmrViewPKParser.J_name) + self.state = 71 + self.match(NmrViewPKParser.U_name) self.state = 72 self.match(NmrViewPKParser.L_name) self.state = 73 @@ -655,6 +653,42 @@ def vars_per_axis(self): self.match(NmrViewPKParser.J_name) self.state = 78 self.match(NmrViewPKParser.U_name) + self.state = 79 + self.match(NmrViewPKParser.Vol) + self.state = 80 + self.match(NmrViewPKParser.Int) + self.state = 81 + self.match(NmrViewPKParser.Stat) + self.state = 83 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 82 + self.match(NmrViewPKParser.Comment) + + + self.state = 85 + self.match(NmrViewPKParser.Flag0) + self.state = 87 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 86 + self.match(NmrViewPKParser.RETURN) + + + self.state = 90 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 89 + self.peak_2d() + self.state = 92 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -664,7 +698,7 @@ def vars_per_axis(self): return localctx - class Peak_list_2dContext(ParserRuleContext): + class Peak_2dContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -677,11 +711,11 @@ def Integer(self, i:int=None): else: return self.getToken(NmrViewPKParser.Integer, i) - def ENCLOSE_COMMENT(self, i:int=None): + def ENCLOSE_DATA(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.ENCLOSE_COMMENT) + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) else: - return self.getToken(NmrViewPKParser.ENCLOSE_COMMENT, i) + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) def Float(self, i:int=None): if i is None: @@ -695,66 +729,78 @@ def Simple_name(self, i:int=None): else: return self.getToken(NmrViewPKParser.Simple_name, i) + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + def getRuleIndex(self): - return NmrViewPKParser.RULE_peak_list_2d + return NmrViewPKParser.RULE_peak_2d def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPeak_list_2d" ): - listener.enterPeak_list_2d(self) + if hasattr( listener, "enterPeak_2d" ): + listener.enterPeak_2d(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPeak_list_2d" ): - listener.exitPeak_list_2d(self) + if hasattr( listener, "exitPeak_2d" ): + listener.exitPeak_2d(self) - def peak_list_2d(self): + def peak_2d(self): - localctx = NmrViewPKParser.Peak_list_2dContext(self, self._ctx, self.state) - self.enterRule(localctx, 14, self.RULE_peak_list_2d) + localctx = NmrViewPKParser.Peak_2dContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_peak_2d) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 80 + self.state = 94 self.match(NmrViewPKParser.Integer) - self.state = 81 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 82 + self.state = 95 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 96 self.match(NmrViewPKParser.Float) - self.state = 83 + self.state = 97 self.match(NmrViewPKParser.Float) - self.state = 84 + self.state = 98 self.match(NmrViewPKParser.Float) - self.state = 85 + self.state = 99 self.match(NmrViewPKParser.Simple_name) - self.state = 86 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 87 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 88 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 89 + self.state = 100 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 101 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 102 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 103 self.match(NmrViewPKParser.Float) - self.state = 90 + self.state = 104 self.match(NmrViewPKParser.Float) - self.state = 91 + self.state = 105 self.match(NmrViewPKParser.Float) - self.state = 92 + self.state = 106 self.match(NmrViewPKParser.Simple_name) - self.state = 93 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 94 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 95 + self.state = 107 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 108 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 109 self.match(NmrViewPKParser.Float) - self.state = 96 + self.state = 110 self.match(NmrViewPKParser.Float) - self.state = 97 + self.state = 111 self.match(NmrViewPKParser.Integer) - self.state = 98 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 99 + self.state = 113 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 112 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 115 self.match(NmrViewPKParser.Integer) + self.state = 116 + self.match(NmrViewPKParser.RETURN) except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -771,34 +817,77 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def Integer(self, i:int=None): + def L_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Integer) + return self.getTokens(NmrViewPKParser.L_name) else: - return self.getToken(NmrViewPKParser.Integer, i) + return self.getToken(NmrViewPKParser.L_name, i) - def ENCLOSE_COMMENT(self, i:int=None): + def P_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.ENCLOSE_COMMENT) + return self.getTokens(NmrViewPKParser.P_name) else: - return self.getToken(NmrViewPKParser.ENCLOSE_COMMENT, i) + return self.getToken(NmrViewPKParser.P_name, i) - def Float(self, i:int=None): + def W_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Float) + return self.getTokens(NmrViewPKParser.W_name) else: - return self.getToken(NmrViewPKParser.Float, i) + return self.getToken(NmrViewPKParser.W_name, i) - def Simple_name(self, i:int=None): + def B_name(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.Simple_name) + return self.getTokens(NmrViewPKParser.B_name) else: - return self.getToken(NmrViewPKParser.Simple_name, i) + return self.getToken(NmrViewPKParser.B_name, i) - def getRuleIndex(self): - return NmrViewPKParser.RULE_peak_list_3d + def E_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.E_name) + else: + return self.getToken(NmrViewPKParser.E_name, i) - def enterRule(self, listener:ParseTreeListener): + def J_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.J_name) + else: + return self.getToken(NmrViewPKParser.J_name, i) + + def U_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.U_name) + else: + return self.getToken(NmrViewPKParser.U_name, i) + + def Vol(self): + return self.getToken(NmrViewPKParser.Vol, 0) + + def Int(self): + return self.getToken(NmrViewPKParser.Int, 0) + + def Stat(self): + return self.getToken(NmrViewPKParser.Stat, 0) + + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + + def Comment(self): + return self.getToken(NmrViewPKParser.Comment, 0) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def peak_3d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_3dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_3dContext,i) + + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_list_3d + + def enterRule(self, listener:ParseTreeListener): if hasattr( listener, "enterPeak_list_3d" ): listener.enterPeak_list_3d(self) @@ -812,63 +901,88 @@ def exitRule(self, listener:ParseTreeListener): def peak_list_3d(self): localctx = NmrViewPKParser.Peak_list_3dContext(self, self._ctx, self.state) - self.enterRule(localctx, 16, self.RULE_peak_list_3d) + self.enterRule(localctx, 10, self.RULE_peak_list_3d) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 101 - self.match(NmrViewPKParser.Integer) - self.state = 102 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 103 - self.match(NmrViewPKParser.Float) - self.state = 104 - self.match(NmrViewPKParser.Float) - self.state = 105 - self.match(NmrViewPKParser.Float) - self.state = 106 - self.match(NmrViewPKParser.Simple_name) - self.state = 107 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 108 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 109 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 110 - self.match(NmrViewPKParser.Float) - self.state = 111 - self.match(NmrViewPKParser.Float) - self.state = 112 - self.match(NmrViewPKParser.Float) - self.state = 113 - self.match(NmrViewPKParser.Simple_name) - self.state = 114 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 115 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 116 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 117 - self.match(NmrViewPKParser.Float) self.state = 118 - self.match(NmrViewPKParser.Float) + self.match(NmrViewPKParser.L_name) self.state = 119 - self.match(NmrViewPKParser.Float) + self.match(NmrViewPKParser.P_name) self.state = 120 - self.match(NmrViewPKParser.Simple_name) + self.match(NmrViewPKParser.W_name) self.state = 121 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) + self.match(NmrViewPKParser.B_name) self.state = 122 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) + self.match(NmrViewPKParser.E_name) self.state = 123 - self.match(NmrViewPKParser.Float) + self.match(NmrViewPKParser.J_name) self.state = 124 - self.match(NmrViewPKParser.Float) + self.match(NmrViewPKParser.U_name) self.state = 125 - self.match(NmrViewPKParser.Integer) + self.match(NmrViewPKParser.L_name) self.state = 126 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) + self.match(NmrViewPKParser.P_name) self.state = 127 - self.match(NmrViewPKParser.Integer) + self.match(NmrViewPKParser.W_name) + self.state = 128 + self.match(NmrViewPKParser.B_name) + self.state = 129 + self.match(NmrViewPKParser.E_name) + self.state = 130 + self.match(NmrViewPKParser.J_name) + self.state = 131 + self.match(NmrViewPKParser.U_name) + self.state = 132 + self.match(NmrViewPKParser.L_name) + self.state = 133 + self.match(NmrViewPKParser.P_name) + self.state = 134 + self.match(NmrViewPKParser.W_name) + self.state = 135 + self.match(NmrViewPKParser.B_name) + self.state = 136 + self.match(NmrViewPKParser.E_name) + self.state = 137 + self.match(NmrViewPKParser.J_name) + self.state = 138 + self.match(NmrViewPKParser.U_name) + self.state = 139 + self.match(NmrViewPKParser.Vol) + self.state = 140 + self.match(NmrViewPKParser.Int) + self.state = 141 + self.match(NmrViewPKParser.Stat) + self.state = 143 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 142 + self.match(NmrViewPKParser.Comment) + + + self.state = 145 + self.match(NmrViewPKParser.Flag0) + self.state = 147 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 146 + self.match(NmrViewPKParser.RETURN) + + + self.state = 150 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 149 + self.peak_3d() + self.state = 152 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -878,7 +992,7 @@ def peak_list_3d(self): return localctx - class Peak_list_4dContext(ParserRuleContext): + class Peak_3dContext(ParserRuleContext): __slots__ = 'parser' def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): @@ -891,11 +1005,11 @@ def Integer(self, i:int=None): else: return self.getToken(NmrViewPKParser.Integer, i) - def ENCLOSE_COMMENT(self, i:int=None): + def ENCLOSE_DATA(self, i:int=None): if i is None: - return self.getTokens(NmrViewPKParser.ENCLOSE_COMMENT) + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) else: - return self.getToken(NmrViewPKParser.ENCLOSE_COMMENT, i) + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) def Float(self, i:int=None): if i is None: @@ -909,94 +1023,1225 @@ def Simple_name(self, i:int=None): else: return self.getToken(NmrViewPKParser.Simple_name, i) + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + def getRuleIndex(self): - return NmrViewPKParser.RULE_peak_list_4d + return NmrViewPKParser.RULE_peak_3d def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterPeak_list_4d" ): - listener.enterPeak_list_4d(self) + if hasattr( listener, "enterPeak_3d" ): + listener.enterPeak_3d(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitPeak_list_4d" ): - listener.exitPeak_list_4d(self) + if hasattr( listener, "exitPeak_3d" ): + listener.exitPeak_3d(self) - def peak_list_4d(self): + def peak_3d(self): - localctx = NmrViewPKParser.Peak_list_4dContext(self, self._ctx, self.state) - self.enterRule(localctx, 18, self.RULE_peak_list_4d) + localctx = NmrViewPKParser.Peak_3dContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_peak_3d) + self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 129 + self.state = 154 self.match(NmrViewPKParser.Integer) - self.state = 130 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 131 - self.match(NmrViewPKParser.Float) - self.state = 132 - self.match(NmrViewPKParser.Float) - self.state = 133 - self.match(NmrViewPKParser.Float) - self.state = 134 - self.match(NmrViewPKParser.Simple_name) - self.state = 135 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 136 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 137 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 138 + self.state = 155 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 156 self.match(NmrViewPKParser.Float) - self.state = 139 + self.state = 157 self.match(NmrViewPKParser.Float) - self.state = 140 + self.state = 158 self.match(NmrViewPKParser.Float) - self.state = 141 + self.state = 159 self.match(NmrViewPKParser.Simple_name) - self.state = 142 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 143 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 144 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 145 + self.state = 160 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 161 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 162 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 163 self.match(NmrViewPKParser.Float) - self.state = 146 + self.state = 164 self.match(NmrViewPKParser.Float) - self.state = 147 + self.state = 165 self.match(NmrViewPKParser.Float) - self.state = 148 + self.state = 166 self.match(NmrViewPKParser.Simple_name) - self.state = 149 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 150 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 151 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 152 + self.state = 167 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 168 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 169 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 170 self.match(NmrViewPKParser.Float) - self.state = 153 + self.state = 171 self.match(NmrViewPKParser.Float) - self.state = 154 + self.state = 172 self.match(NmrViewPKParser.Float) - self.state = 155 + self.state = 173 self.match(NmrViewPKParser.Simple_name) - self.state = 156 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 157 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 158 + self.state = 174 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 175 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 176 self.match(NmrViewPKParser.Float) - self.state = 159 + self.state = 177 self.match(NmrViewPKParser.Float) - self.state = 160 + self.state = 178 self.match(NmrViewPKParser.Integer) - self.state = 161 - self.match(NmrViewPKParser.ENCLOSE_COMMENT) - self.state = 162 + self.state = 180 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 179 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 182 self.match(NmrViewPKParser.Integer) + self.state = 183 + self.match(NmrViewPKParser.RETURN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_list_4dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def L_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.L_name) + else: + return self.getToken(NmrViewPKParser.L_name, i) + + def P_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.P_name) + else: + return self.getToken(NmrViewPKParser.P_name, i) + + def W_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.W_name) + else: + return self.getToken(NmrViewPKParser.W_name, i) + + def B_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.B_name) + else: + return self.getToken(NmrViewPKParser.B_name, i) + + def E_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.E_name) + else: + return self.getToken(NmrViewPKParser.E_name, i) + + def J_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.J_name) + else: + return self.getToken(NmrViewPKParser.J_name, i) + + def U_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.U_name) + else: + return self.getToken(NmrViewPKParser.U_name, i) + + def Vol(self): + return self.getToken(NmrViewPKParser.Vol, 0) + + def Int(self): + return self.getToken(NmrViewPKParser.Int, 0) + + def Stat(self): + return self.getToken(NmrViewPKParser.Stat, 0) + + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + + def Comment(self): + return self.getToken(NmrViewPKParser.Comment, 0) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def peak_4d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_4dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_4dContext,i) + + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_list_4d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_list_4d" ): + listener.enterPeak_list_4d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_list_4d" ): + listener.exitPeak_list_4d(self) + + + + + def peak_list_4d(self): + + localctx = NmrViewPKParser.Peak_list_4dContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_peak_list_4d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 185 + self.match(NmrViewPKParser.L_name) + self.state = 186 + self.match(NmrViewPKParser.P_name) + self.state = 187 + self.match(NmrViewPKParser.W_name) + self.state = 188 + self.match(NmrViewPKParser.B_name) + self.state = 189 + self.match(NmrViewPKParser.E_name) + self.state = 190 + self.match(NmrViewPKParser.J_name) + self.state = 191 + self.match(NmrViewPKParser.U_name) + self.state = 192 + self.match(NmrViewPKParser.L_name) + self.state = 193 + self.match(NmrViewPKParser.P_name) + self.state = 194 + self.match(NmrViewPKParser.W_name) + self.state = 195 + self.match(NmrViewPKParser.B_name) + self.state = 196 + self.match(NmrViewPKParser.E_name) + self.state = 197 + self.match(NmrViewPKParser.J_name) + self.state = 198 + self.match(NmrViewPKParser.U_name) + self.state = 199 + self.match(NmrViewPKParser.L_name) + self.state = 200 + self.match(NmrViewPKParser.P_name) + self.state = 201 + self.match(NmrViewPKParser.W_name) + self.state = 202 + self.match(NmrViewPKParser.B_name) + self.state = 203 + self.match(NmrViewPKParser.E_name) + self.state = 204 + self.match(NmrViewPKParser.J_name) + self.state = 205 + self.match(NmrViewPKParser.U_name) + self.state = 206 + self.match(NmrViewPKParser.L_name) + self.state = 207 + self.match(NmrViewPKParser.P_name) + self.state = 208 + self.match(NmrViewPKParser.W_name) + self.state = 209 + self.match(NmrViewPKParser.B_name) + self.state = 210 + self.match(NmrViewPKParser.E_name) + self.state = 211 + self.match(NmrViewPKParser.J_name) + self.state = 212 + self.match(NmrViewPKParser.U_name) + self.state = 213 + self.match(NmrViewPKParser.Vol) + self.state = 214 + self.match(NmrViewPKParser.Int) + self.state = 215 + self.match(NmrViewPKParser.Stat) + self.state = 217 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 216 + self.match(NmrViewPKParser.Comment) + + + self.state = 219 + self.match(NmrViewPKParser.Flag0) + self.state = 221 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 220 + self.match(NmrViewPKParser.RETURN) + + + self.state = 224 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 223 + self.peak_4d() + self.state = 226 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_4dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Integer) + else: + return self.getToken(NmrViewPKParser.Integer, i) + + def ENCLOSE_DATA(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) + else: + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) + + def Float(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Float) + else: + return self.getToken(NmrViewPKParser.Float, i) + + def Simple_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Simple_name) + else: + return self.getToken(NmrViewPKParser.Simple_name, i) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_4d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_4d" ): + listener.enterPeak_4d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_4d" ): + listener.exitPeak_4d(self) + + + + + def peak_4d(self): + + localctx = NmrViewPKParser.Peak_4dContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_peak_4d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 228 + self.match(NmrViewPKParser.Integer) + self.state = 229 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 230 + self.match(NmrViewPKParser.Float) + self.state = 231 + self.match(NmrViewPKParser.Float) + self.state = 232 + self.match(NmrViewPKParser.Float) + self.state = 233 + self.match(NmrViewPKParser.Simple_name) + self.state = 234 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 235 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 236 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 237 + self.match(NmrViewPKParser.Float) + self.state = 238 + self.match(NmrViewPKParser.Float) + self.state = 239 + self.match(NmrViewPKParser.Float) + self.state = 240 + self.match(NmrViewPKParser.Simple_name) + self.state = 241 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 242 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 243 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 244 + self.match(NmrViewPKParser.Float) + self.state = 245 + self.match(NmrViewPKParser.Float) + self.state = 246 + self.match(NmrViewPKParser.Float) + self.state = 247 + self.match(NmrViewPKParser.Simple_name) + self.state = 248 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 249 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 250 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 251 + self.match(NmrViewPKParser.Float) + self.state = 252 + self.match(NmrViewPKParser.Float) + self.state = 253 + self.match(NmrViewPKParser.Float) + self.state = 254 + self.match(NmrViewPKParser.Simple_name) + self.state = 255 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 256 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 257 + self.match(NmrViewPKParser.Float) + self.state = 258 + self.match(NmrViewPKParser.Float) + self.state = 259 + self.match(NmrViewPKParser.Integer) + self.state = 261 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 260 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 263 + self.match(NmrViewPKParser.Integer) + self.state = 264 + self.match(NmrViewPKParser.RETURN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_list_wo_eju_2dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def L_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.L_name) + else: + return self.getToken(NmrViewPKParser.L_name, i) + + def P_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.P_name) + else: + return self.getToken(NmrViewPKParser.P_name, i) + + def W_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.W_name) + else: + return self.getToken(NmrViewPKParser.W_name, i) + + def B_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.B_name) + else: + return self.getToken(NmrViewPKParser.B_name, i) + + def Vol(self): + return self.getToken(NmrViewPKParser.Vol, 0) + + def Int(self): + return self.getToken(NmrViewPKParser.Int, 0) + + def Stat(self): + return self.getToken(NmrViewPKParser.Stat, 0) + + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + + def Comment(self): + return self.getToken(NmrViewPKParser.Comment, 0) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def peak_wo_eju_2d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_wo_eju_2dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_wo_eju_2dContext,i) + + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_list_wo_eju_2d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_list_wo_eju_2d" ): + listener.enterPeak_list_wo_eju_2d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_list_wo_eju_2d" ): + listener.exitPeak_list_wo_eju_2d(self) + + + + + def peak_list_wo_eju_2d(self): + + localctx = NmrViewPKParser.Peak_list_wo_eju_2dContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_peak_list_wo_eju_2d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 266 + self.match(NmrViewPKParser.L_name) + self.state = 267 + self.match(NmrViewPKParser.P_name) + self.state = 268 + self.match(NmrViewPKParser.W_name) + self.state = 269 + self.match(NmrViewPKParser.B_name) + self.state = 270 + self.match(NmrViewPKParser.L_name) + self.state = 271 + self.match(NmrViewPKParser.P_name) + self.state = 272 + self.match(NmrViewPKParser.W_name) + self.state = 273 + self.match(NmrViewPKParser.B_name) + self.state = 274 + self.match(NmrViewPKParser.Vol) + self.state = 275 + self.match(NmrViewPKParser.Int) + self.state = 276 + self.match(NmrViewPKParser.Stat) + self.state = 278 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 277 + self.match(NmrViewPKParser.Comment) + + + self.state = 280 + self.match(NmrViewPKParser.Flag0) + self.state = 282 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 281 + self.match(NmrViewPKParser.RETURN) + + + self.state = 285 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 284 + self.peak_wo_eju_2d() + self.state = 287 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_wo_eju_2dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Integer) + else: + return self.getToken(NmrViewPKParser.Integer, i) + + def ENCLOSE_DATA(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) + else: + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) + + def Float(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Float) + else: + return self.getToken(NmrViewPKParser.Float, i) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_wo_eju_2d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_wo_eju_2d" ): + listener.enterPeak_wo_eju_2d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_wo_eju_2d" ): + listener.exitPeak_wo_eju_2d(self) + + + + + def peak_wo_eju_2d(self): + + localctx = NmrViewPKParser.Peak_wo_eju_2dContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_peak_wo_eju_2d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 289 + self.match(NmrViewPKParser.Integer) + self.state = 290 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 291 + self.match(NmrViewPKParser.Float) + self.state = 292 + self.match(NmrViewPKParser.Float) + self.state = 293 + self.match(NmrViewPKParser.Float) + self.state = 294 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 295 + self.match(NmrViewPKParser.Float) + self.state = 296 + self.match(NmrViewPKParser.Float) + self.state = 297 + self.match(NmrViewPKParser.Float) + self.state = 298 + self.match(NmrViewPKParser.Float) + self.state = 299 + self.match(NmrViewPKParser.Float) + self.state = 300 + self.match(NmrViewPKParser.Integer) + self.state = 302 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 301 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 304 + self.match(NmrViewPKParser.Integer) + self.state = 305 + self.match(NmrViewPKParser.RETURN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_list_wo_eju_3dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def L_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.L_name) + else: + return self.getToken(NmrViewPKParser.L_name, i) + + def P_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.P_name) + else: + return self.getToken(NmrViewPKParser.P_name, i) + + def W_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.W_name) + else: + return self.getToken(NmrViewPKParser.W_name, i) + + def B_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.B_name) + else: + return self.getToken(NmrViewPKParser.B_name, i) + + def Vol(self): + return self.getToken(NmrViewPKParser.Vol, 0) + + def Int(self): + return self.getToken(NmrViewPKParser.Int, 0) + + def Stat(self): + return self.getToken(NmrViewPKParser.Stat, 0) + + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + + def Comment(self): + return self.getToken(NmrViewPKParser.Comment, 0) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def peak_wo_eju_3d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_wo_eju_3dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_wo_eju_3dContext,i) + + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_list_wo_eju_3d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_list_wo_eju_3d" ): + listener.enterPeak_list_wo_eju_3d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_list_wo_eju_3d" ): + listener.exitPeak_list_wo_eju_3d(self) + + + + + def peak_list_wo_eju_3d(self): + + localctx = NmrViewPKParser.Peak_list_wo_eju_3dContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_peak_list_wo_eju_3d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 307 + self.match(NmrViewPKParser.L_name) + self.state = 308 + self.match(NmrViewPKParser.P_name) + self.state = 309 + self.match(NmrViewPKParser.W_name) + self.state = 310 + self.match(NmrViewPKParser.B_name) + self.state = 311 + self.match(NmrViewPKParser.L_name) + self.state = 312 + self.match(NmrViewPKParser.P_name) + self.state = 313 + self.match(NmrViewPKParser.W_name) + self.state = 314 + self.match(NmrViewPKParser.B_name) + self.state = 315 + self.match(NmrViewPKParser.L_name) + self.state = 316 + self.match(NmrViewPKParser.P_name) + self.state = 317 + self.match(NmrViewPKParser.W_name) + self.state = 318 + self.match(NmrViewPKParser.B_name) + self.state = 319 + self.match(NmrViewPKParser.Vol) + self.state = 320 + self.match(NmrViewPKParser.Int) + self.state = 321 + self.match(NmrViewPKParser.Stat) + self.state = 323 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 322 + self.match(NmrViewPKParser.Comment) + + + self.state = 325 + self.match(NmrViewPKParser.Flag0) + self.state = 327 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 326 + self.match(NmrViewPKParser.RETURN) + + + self.state = 330 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 329 + self.peak_wo_eju_3d() + self.state = 332 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_wo_eju_3dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Integer) + else: + return self.getToken(NmrViewPKParser.Integer, i) + + def ENCLOSE_DATA(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) + else: + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) + + def Float(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Float) + else: + return self.getToken(NmrViewPKParser.Float, i) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_wo_eju_3d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_wo_eju_3d" ): + listener.enterPeak_wo_eju_3d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_wo_eju_3d" ): + listener.exitPeak_wo_eju_3d(self) + + + + + def peak_wo_eju_3d(self): + + localctx = NmrViewPKParser.Peak_wo_eju_3dContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_peak_wo_eju_3d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 334 + self.match(NmrViewPKParser.Integer) + self.state = 335 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 336 + self.match(NmrViewPKParser.Float) + self.state = 337 + self.match(NmrViewPKParser.Float) + self.state = 338 + self.match(NmrViewPKParser.Float) + self.state = 339 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 340 + self.match(NmrViewPKParser.Float) + self.state = 341 + self.match(NmrViewPKParser.Float) + self.state = 342 + self.match(NmrViewPKParser.Float) + self.state = 343 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 344 + self.match(NmrViewPKParser.Float) + self.state = 345 + self.match(NmrViewPKParser.Float) + self.state = 346 + self.match(NmrViewPKParser.Float) + self.state = 347 + self.match(NmrViewPKParser.Float) + self.state = 348 + self.match(NmrViewPKParser.Float) + self.state = 349 + self.match(NmrViewPKParser.Integer) + self.state = 351 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 350 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 353 + self.match(NmrViewPKParser.Integer) + self.state = 354 + self.match(NmrViewPKParser.RETURN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_list_wo_eju_4dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def L_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.L_name) + else: + return self.getToken(NmrViewPKParser.L_name, i) + + def P_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.P_name) + else: + return self.getToken(NmrViewPKParser.P_name, i) + + def W_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.W_name) + else: + return self.getToken(NmrViewPKParser.W_name, i) + + def B_name(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.B_name) + else: + return self.getToken(NmrViewPKParser.B_name, i) + + def Vol(self): + return self.getToken(NmrViewPKParser.Vol, 0) + + def Int(self): + return self.getToken(NmrViewPKParser.Int, 0) + + def Stat(self): + return self.getToken(NmrViewPKParser.Stat, 0) + + def Flag0(self): + return self.getToken(NmrViewPKParser.Flag0, 0) + + def Comment(self): + return self.getToken(NmrViewPKParser.Comment, 0) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def peak_wo_eju_4d(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(NmrViewPKParser.Peak_wo_eju_4dContext) + else: + return self.getTypedRuleContext(NmrViewPKParser.Peak_wo_eju_4dContext,i) + + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_list_wo_eju_4d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_list_wo_eju_4d" ): + listener.enterPeak_list_wo_eju_4d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_list_wo_eju_4d" ): + listener.exitPeak_list_wo_eju_4d(self) + + + + + def peak_list_wo_eju_4d(self): + + localctx = NmrViewPKParser.Peak_list_wo_eju_4dContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_peak_list_wo_eju_4d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 356 + self.match(NmrViewPKParser.L_name) + self.state = 357 + self.match(NmrViewPKParser.P_name) + self.state = 358 + self.match(NmrViewPKParser.W_name) + self.state = 359 + self.match(NmrViewPKParser.B_name) + self.state = 360 + self.match(NmrViewPKParser.L_name) + self.state = 361 + self.match(NmrViewPKParser.P_name) + self.state = 362 + self.match(NmrViewPKParser.W_name) + self.state = 363 + self.match(NmrViewPKParser.B_name) + self.state = 364 + self.match(NmrViewPKParser.L_name) + self.state = 365 + self.match(NmrViewPKParser.P_name) + self.state = 366 + self.match(NmrViewPKParser.W_name) + self.state = 367 + self.match(NmrViewPKParser.B_name) + self.state = 368 + self.match(NmrViewPKParser.L_name) + self.state = 369 + self.match(NmrViewPKParser.P_name) + self.state = 370 + self.match(NmrViewPKParser.W_name) + self.state = 371 + self.match(NmrViewPKParser.B_name) + self.state = 372 + self.match(NmrViewPKParser.Vol) + self.state = 373 + self.match(NmrViewPKParser.Int) + self.state = 374 + self.match(NmrViewPKParser.Stat) + self.state = 376 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==27: + self.state = 375 + self.match(NmrViewPKParser.Comment) + + + self.state = 378 + self.match(NmrViewPKParser.Flag0) + self.state = 380 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==10: + self.state = 379 + self.match(NmrViewPKParser.RETURN) + + + self.state = 383 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 382 + self.peak_wo_eju_4d() + self.state = 385 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==2): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Peak_wo_eju_4dContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Integer(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Integer) + else: + return self.getToken(NmrViewPKParser.Integer, i) + + def ENCLOSE_DATA(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.ENCLOSE_DATA) + else: + return self.getToken(NmrViewPKParser.ENCLOSE_DATA, i) + + def Float(self, i:int=None): + if i is None: + return self.getTokens(NmrViewPKParser.Float) + else: + return self.getToken(NmrViewPKParser.Float, i) + + def RETURN(self): + return self.getToken(NmrViewPKParser.RETURN, 0) + + def getRuleIndex(self): + return NmrViewPKParser.RULE_peak_wo_eju_4d + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPeak_wo_eju_4d" ): + listener.enterPeak_wo_eju_4d(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPeak_wo_eju_4d" ): + listener.exitPeak_wo_eju_4d(self) + + + + + def peak_wo_eju_4d(self): + + localctx = NmrViewPKParser.Peak_wo_eju_4dContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_peak_wo_eju_4d) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 387 + self.match(NmrViewPKParser.Integer) + self.state = 388 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 389 + self.match(NmrViewPKParser.Float) + self.state = 390 + self.match(NmrViewPKParser.Float) + self.state = 391 + self.match(NmrViewPKParser.Float) + self.state = 392 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 393 + self.match(NmrViewPKParser.Float) + self.state = 394 + self.match(NmrViewPKParser.Float) + self.state = 395 + self.match(NmrViewPKParser.Float) + self.state = 396 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 397 + self.match(NmrViewPKParser.Float) + self.state = 398 + self.match(NmrViewPKParser.Float) + self.state = 399 + self.match(NmrViewPKParser.Float) + self.state = 400 + self.match(NmrViewPKParser.ENCLOSE_DATA) + self.state = 401 + self.match(NmrViewPKParser.Float) + self.state = 402 + self.match(NmrViewPKParser.Float) + self.state = 403 + self.match(NmrViewPKParser.Float) + self.state = 404 + self.match(NmrViewPKParser.Float) + self.state = 405 + self.match(NmrViewPKParser.Float) + self.state = 406 + self.match(NmrViewPKParser.Integer) + self.state = 408 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==11: + self.state = 407 + self.match(NmrViewPKParser.ENCLOSE_DATA) + + + self.state = 410 + self.match(NmrViewPKParser.Integer) + self.state = 411 + self.match(NmrViewPKParser.RETURN) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabelContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Float_LA(self): + return self.getToken(NmrViewPKParser.Float_LA, 0) + + def Simple_name_LA(self): + return self.getToken(NmrViewPKParser.Simple_name_LA, 0) + + def ENCLOSE_DATA_LA(self): + return self.getToken(NmrViewPKParser.ENCLOSE_DATA_LA, 0) + + def getRuleIndex(self): + return NmrViewPKParser.RULE_label + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLabel" ): + listener.enterLabel(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLabel" ): + listener.exitLabel(self) + + + + + def label(self): + + localctx = NmrViewPKParser.LabelContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_label) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 413 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 10200547328) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) diff --git a/wwpdb/utils/nmr/pk/NmrViewPKParserListener.py b/wwpdb/utils/nmr/pk/NmrViewPKParserListener.py index 808b90ccd..f7e6eeb58 100644 --- a/wwpdb/utils/nmr/pk/NmrViewPKParserListener.py +++ b/wwpdb/utils/nmr/pk/NmrViewPKParserListener.py @@ -1,102 +1,1540 @@ -# Generated from NmrViewPKParser.g4 by ANTLR 4.13.0 -from antlr4 import * -if "." in __name__: - from .NmrViewPKParser import NmrViewPKParser -else: - from NmrViewPKParser import NmrViewPKParser +## +# File: NmrViewPKParserListener.py +# Date: 03-Dec-2024 +# +# Updates: +""" ParserLister class for NMRVIEW PK files. + @author: Masashi Yokochi +""" +import sys +import re +import copy +import collections +import numpy as np + +from antlr4 import ParseTreeListener + +try: + from wwpdb.utils.nmr.pk.NmrViewPKParser import NmrViewPKParser + from wwpdb.utils.nmr.pk.BasePKParserListener import BasePKParserListener + from wwpdb.utils.nmr.mr.ParserListenerUtil import (ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS, + REPRESENTATIVE_MODEL_ID, + REPRESENTATIVE_ALT_ID, + SPECTRAL_DIM_TEMPLATE, + isCyclicPolymer, + extractPeakAssignment, + getPkRow) + from wwpdb.utils.nmr.AlignUtil import (emptyValue, + sortPolySeqRst, + syncCompIdOfPolySeqRst, + alignPolymerSequence, + assignPolymerSequence, + trimSequenceAlignment, + splitPolySeqRstForMultimers, + splitPolySeqRstForExactNoes, + splitPolySeqRstForNonPoly, + splitPolySeqRstForBranched) + +except ImportError: + from nmr.pk.NmrViewPKParser import NmrViewPKParser + from nmr.pk.BasePKParserListener import BasePKParserListener + from nmr.mr.ParserListenerUtil import (ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS, + REPRESENTATIVE_MODEL_ID, + REPRESENTATIVE_ALT_ID, + SPECTRAL_DIM_TEMPLATE, + isCyclicPolymer, + extractPeakAssignment, + getPkRow) + from nmr.AlignUtil import (emptyValue, + sortPolySeqRst, + syncCompIdOfPolySeqRst, + alignPolymerSequence, + assignPolymerSequence, + trimSequenceAlignment, + splitPolySeqRstForMultimers, + splitPolySeqRstForExactNoes, + splitPolySeqRstForNonPoly, + splitPolySeqRstForBranched) + # This class defines a complete listener for a parse tree produced by NmrViewPKParser. -class NmrViewPKParserListener(ParseTreeListener): +class NmrViewPKParserListener(ParseTreeListener, BasePKParserListener): + + __cur_label_type = None + + __labels = None + + def __init__(self, verbose=True, log=sys.stdout, + representativeModelId=REPRESENTATIVE_MODEL_ID, + representativeAltId=REPRESENTATIVE_ALT_ID, + mrAtomNameMapping=None, + cR=None, caC=None, ccU=None, csStat=None, nefT=None, + reasons=None): + super().__init__(verbose, log, representativeModelId, representativeAltId, + mrAtomNameMapping, cR, caC, ccU, csStat, nefT, reasons) + + self.file_type = 'nm-pea-view' + self.software_name = 'NMRVIEW' # Enter a parse tree produced by NmrViewPKParser#nmrview_pk. - def enterNmrview_pk(self, ctx:NmrViewPKParser.Nmrview_pkContext): - pass + def enterNmrview_pk(self, ctx: NmrViewPKParser.Nmrview_pkContext): # pylint: disable=unused-argument + self.num_of_dim = -1 + self.spectral_dim = {} + self.listIdInternal = {} + self.chainNumberDict = {} + self.extResKey = [] + self.polySeqRst = [] + self.polySeqRstFailed = [] + self.polySeqRstFailedAmbig = [] + self.compIdMap = {} + self.f = [] # Exit a parse tree produced by NmrViewPKParser#nmrview_pk. - def exitNmrview_pk(self, ctx:NmrViewPKParser.Nmrview_pkContext): - pass + def exitNmrview_pk(self, ctx: NmrViewPKParser.Nmrview_pkContext): # pylint: disable=unused-argument + + try: + + if self.hasPolySeq and self.polySeqRst is not None: + sortPolySeqRst(self.polySeqRst, + None if self.reasons is None else self.reasons.get('non_poly_remap')) + + self.seqAlign, _ = alignPolymerSequence(self.pA, self.polySeq, self.polySeqRst, + resolvedMultimer=self.reasons is not None) + self.chainAssign, message = assignPolymerSequence(self.pA, self.ccU, self.file_type, self.polySeq, self.polySeqRst, self.seqAlign) + + if len(message) > 0: + self.f.extend(message) + + if self.chainAssign is not None: + + if len(self.polySeq) == len(self.polySeqRst): + + chain_mapping = {} + + for ca in self.chainAssign: + ref_chain_id = ca['ref_chain_id'] + test_chain_id = ca['test_chain_id'] + + if ref_chain_id != test_chain_id: + chain_mapping[test_chain_id] = ref_chain_id + + if len(chain_mapping) == len(self.polySeq): + + for ps in self.polySeqRst: + if ps['chain_id'] in chain_mapping: + ps['chain_id'] = chain_mapping[ps['chain_id']] + + self.seqAlign, _ = alignPolymerSequence(self.pA, self.polySeq, self.polySeqRst, + resolvedMultimer=self.reasons is not None) + self.chainAssign, _ = assignPolymerSequence(self.pA, self.ccU, self.file_type, self.polySeq, self.polySeqRst, self.seqAlign) + + trimSequenceAlignment(self.seqAlign, self.chainAssign) + + if self.reasons is None and any(f for f in self.f + if '[Atom not found]' in f or '[Sequence mismatch]' in f): + + seqIdRemap = [] + + cyclicPolymer = {} + + for ca in self.chainAssign: + ref_chain_id = ca['ref_chain_id'] + test_chain_id = ca['test_chain_id'] + + sa = next(sa for sa in self.seqAlign + if sa['ref_chain_id'] == ref_chain_id + and sa['test_chain_id'] == test_chain_id) + + poly_seq_model = next(ps for ps in self.polySeq + if ps['auth_chain_id'] == ref_chain_id) + poly_seq_rst = next(ps for ps in self.polySeqRst + if ps['chain_id'] == test_chain_id) + + seq_id_mapping = {} + offset = None + for ref_seq_id, mid_code, test_seq_id in zip(sa['ref_seq_id'], sa['mid_code'], sa['test_seq_id']): + if test_seq_id is None: + continue + if mid_code == '|': + try: + seq_id_mapping[test_seq_id] = next(auth_seq_id for auth_seq_id, seq_id + in zip(poly_seq_model['auth_seq_id'], poly_seq_model['seq_id']) + if seq_id == ref_seq_id and isinstance(auth_seq_id, int)) + if offset is None: + offset = seq_id_mapping[test_seq_id] - test_seq_id + except StopIteration: + pass + elif mid_code == ' ' and test_seq_id in poly_seq_rst['seq_id']: + idx = poly_seq_rst['seq_id'].index(test_seq_id) + if poly_seq_rst['comp_id'][idx] == '.' and poly_seq_rst['auth_comp_id'][idx] not in emptyValue: + seq_id_mapping[test_seq_id] = next(auth_seq_id for auth_seq_id, seq_id + in zip(poly_seq_model['auth_seq_id'], poly_seq_model['seq_id']) + if seq_id == ref_seq_id and isinstance(auth_seq_id, int)) + + if offset is not None and all(v - k == offset for k, v in seq_id_mapping.items()): + test_seq_id_list = list(seq_id_mapping.keys()) + min_test_seq_id = min(test_seq_id_list) + max_test_seq_id = max(test_seq_id_list) + for test_seq_id in range(min_test_seq_id + 1, max_test_seq_id): + if test_seq_id not in seq_id_mapping: + seq_id_mapping[test_seq_id] = test_seq_id + offset + + if ref_chain_id not in cyclicPolymer: + cyclicPolymer[ref_chain_id] =\ + isCyclicPolymer(self.cR, self.polySeq, ref_chain_id, + self.representativeModelId, self.representativeAltId, self.modelNumName) + + if cyclicPolymer[ref_chain_id]: + + poly_seq_model = next(ps for ps in self.polySeq + if ps['auth_chain_id'] == ref_chain_id) + + offset = None + for seq_id, comp_id in zip(poly_seq_rst['seq_id'], poly_seq_rst['comp_id']): + if seq_id is not None and seq_id not in seq_id_mapping: + _seq_id = next((_seq_id for _seq_id, _comp_id in zip(poly_seq_model['seq_id'], poly_seq_model['comp_id']) + if _seq_id not in seq_id_mapping.values() and _comp_id == comp_id), None) + if _seq_id is not None: + offset = seq_id - _seq_id + break + + if offset is not None: + for seq_id in poly_seq_rst['seq_id']: + if seq_id is not None and seq_id not in seq_id_mapping: + seq_id_mapping[seq_id] = seq_id - offset + + if any(k for k, v in seq_id_mapping.items() if k != v)\ + and not any(k for k, v in seq_id_mapping.items() + if v in poly_seq_model['seq_id'] + and k == poly_seq_model['auth_seq_id'][poly_seq_model['seq_id'].index(v)]): + seqIdRemap.append({'chain_id': test_chain_id, 'seq_id_dict': seq_id_mapping}) + + if len(seqIdRemap) > 0: + if 'seq_id_remap' not in self.reasonsForReParsing: + self.reasonsForReParsing['seq_id_remap'] = seqIdRemap + + if any(ps for ps in self.polySeq if 'identical_chain_id' in ps): + polySeqRst, chainIdMapping = splitPolySeqRstForMultimers(self.pA, self.polySeq, self.polySeqRst, self.chainAssign) + + if polySeqRst is not None and (not self.hasNonPoly or len(self.polySeq) // len(self.nonPoly) in (1, 2)): + self.polySeqRst = polySeqRst + if 'chain_id_remap' not in self.reasonsForReParsing: + self.reasonsForReParsing['chain_id_remap'] = chainIdMapping + + if len(self.polySeq) == 1 and len(self.polySeqRst) == 1: + polySeqRst, chainIdMapping, _ =\ + splitPolySeqRstForExactNoes(self.pA, self.polySeq, self.polySeqRst, self.chainAssign) + + if polySeqRst is not None: + self.polySeqRst = polySeqRst + if 'chain_id_clone' not in self.reasonsForReParsing: + self.reasonsForReParsing['chain_id_clone'] = chainIdMapping + + if self.hasNonPoly: + polySeqRst, nonPolyMapping = splitPolySeqRstForNonPoly(self.ccU, self.nonPoly, self.polySeqRst, + self.seqAlign, self.chainAssign) + + if polySeqRst is not None: + self.polySeqRst = polySeqRst + if 'non_poly_remap' not in self.reasonsForReParsing: + self.reasonsForReParsing['non_poly_remap'] = nonPolyMapping + + if self.hasBranched: + polySeqRst, branchedMapping = splitPolySeqRstForBranched(self.pA, self.polySeq, self.branched, self.polySeqRst, + self.chainAssign) + + if polySeqRst is not None: + self.polySeqRst = polySeqRst + if 'branched_remap' not in self.reasonsForReParsing: + self.reasonsForReParsing['branched_remap'] = branchedMapping + + if len(self.polySeqRstFailed) > 0: + sortPolySeqRst(self.polySeqRstFailed) + if not any(f for f in self.f if '[Sequence mismatch]' in f): # 2n6y + syncCompIdOfPolySeqRst(self.polySeqRstFailed, self.compIdMap) # 2mx9 + + seqAlignFailed, _ = alignPolymerSequence(self.pA, self.polySeq, self.polySeqRstFailed) + chainAssignFailed, _ = assignPolymerSequence(self.pA, self.ccU, self.file_type, + self.polySeq, self.polySeqRstFailed, seqAlignFailed) + + if chainAssignFailed is not None: + seqIdRemapFailed = [] + + uniq_ps = not any('identical_chain_id' in ps for ps in self.polySeq) + + for ca in chainAssignFailed: + if ca['conflict'] > 0: + continue + ref_chain_id = ca['ref_chain_id'] + test_chain_id = ca['test_chain_id'] + + sa = next((sa for sa in seqAlignFailed + if sa['ref_chain_id'] == ref_chain_id + and sa['test_chain_id'] == test_chain_id), None) + + if sa is None: + continue + + poly_seq_model = next(ps for ps in self.polySeq + if ps['auth_chain_id'] == ref_chain_id) + + seq_id_mapping = {} + for ref_seq_id, mid_code, test_seq_id in zip(sa['ref_seq_id'], sa['mid_code'], sa['test_seq_id']): + if test_seq_id is None: + continue + if mid_code == '|': + try: + seq_id_mapping[test_seq_id] = next(auth_seq_id for auth_seq_id, seq_id + in zip(poly_seq_model['auth_seq_id'], poly_seq_model['seq_id']) + if seq_id == ref_seq_id and isinstance(auth_seq_id, int)) + except StopIteration: + if uniq_ps: + seq_id_mapping[test_seq_id] = ref_seq_id + + offset = None + offsets = [v - k for k, v in seq_id_mapping.items()] + if len(offsets) > 0 and ('gap_in_auth_seq' not in poly_seq_model or not poly_seq_model['gap_in_auth_seq']): + offsets = collections.Counter(offsets).most_common() + if len(offsets) > 1: + offset = offsets[0][0] + for k, v in seq_id_mapping.items(): + if v - k != offset: + seq_id_mapping[k] = k + offset + + if uniq_ps and offset is not None and len(seq_id_mapping) > 0\ + and ('gap_in_auth_seq' not in poly_seq_model or not poly_seq_model['gap_in_auth_seq']): + for ref_seq_id, mid_code, test_seq_id, ref_code, test_code in zip(sa['ref_seq_id'], sa['mid_code'], sa['test_seq_id'], + sa['ref_code'], sa['test_code']): + if test_seq_id is None: + continue + if mid_code == '|' and test_seq_id not in seq_id_mapping: + seq_id_mapping[test_seq_id] = test_seq_id + offset + elif ref_code != '.' and test_code == '.': + seq_id_mapping[test_seq_id] = test_seq_id + offset + + if any(k for k, v in seq_id_mapping.items() if k != v)\ + and not any(k for k, v in seq_id_mapping.items() + if v in poly_seq_model['seq_id'] + and k == poly_seq_model['auth_seq_id'][poly_seq_model['seq_id'].index(v)]): + seqIdRemapFailed.append({'chain_id': ref_chain_id, 'seq_id_dict': seq_id_mapping, + 'comp_id_set': list(set(poly_seq_model['comp_id']))}) + + if len(seqIdRemapFailed) > 0: + if 'chain_seq_id_remap' not in self.reasonsForReParsing: + seqIdRemap = self.reasonsForReParsing['seq_id_remap'] if 'seq_id_remap' in self.reasonsForReParsing else [] + if len(seqIdRemap) != len(seqIdRemapFailed)\ + or seqIdRemap[0]['chain_id'] != seqIdRemapFailed[0]['chain_id']\ + or not all(src_seq_id in seqIdRemap[0] for src_seq_id in seqIdRemapFailed[0]): + self.reasonsForReParsing['chain_seq_id_remap'] = seqIdRemapFailed + + else: + for ps in self.polySeqRstFailed: + for ca in self.chainAssign: + ref_chain_id = ca['ref_chain_id'] + test_chain_id = ca['test_chain_id'] + + if test_chain_id != ps['chain_id']: + continue + + sa = next(sa for sa in self.seqAlign + if sa['ref_chain_id'] == ref_chain_id + and sa['test_chain_id'] == test_chain_id) + + if len(sa['test_seq_id']) != len(sa['ref_seq_id']): + continue + + poly_seq_model = next(ps for ps in self.polySeq + if ps['auth_chain_id'] == ref_chain_id) + + seq_id_mapping, comp_id_mapping = {}, {} + + for seq_id, comp_id in zip(ps['seq_id'], ps['comp_id']): + if seq_id in sa['test_seq_id']: + idx = sa['test_seq_id'].index(seq_id) + auth_seq_id = sa['ref_seq_id'][idx] + seq_id_mapping[seq_id] = auth_seq_id + comp_id_mapping[seq_id] = comp_id + if any(k for k, v in seq_id_mapping.items() if k != v)\ + or ('label_seq_scheme' not in self.reasonsForReParsing + and all(v not in poly_seq_model['auth_seq_id'] for v in seq_id_mapping.values())): + seqIdRemapFailed.append({'chain_id': ref_chain_id, 'seq_id_dict': seq_id_mapping, + 'comp_id_dict': comp_id_mapping}) + + if len(seqIdRemapFailed) > 0: + if 'ext_chain_seq_id_remap' not in self.reasonsForReParsing: + seqIdRemap = self.reasonsForReParsing['seq_id_remap'] if 'seq_id_remap' in self.reasonsForReParsing else [] + if len(seqIdRemap) != len(seqIdRemapFailed)\ + or seqIdRemap[0]['chain_id'] != seqIdRemapFailed[0]['chain_id']\ + or not all(src_seq_id in seqIdRemap[0] for src_seq_id in seqIdRemapFailed[0]): + self.reasonsForReParsing['ext_chain_seq_id_remap'] = seqIdRemapFailed + + if 'local_seq_scheme' in self.reasonsForReParsing: + if 'non_poly_remap' in self.reasonsForReParsing or 'branched_remap' in self.reasonsForReParsing: + del self.reasonsForReParsing['local_seq_scheme'] + elif 'seq_id_remap' in self.reasonsForReParsing: + del self.reasonsForReParsing['local_seq_scheme'] + elif 'chain_seq_id_remap' in self.reasonsForReParsing: + del self.reasonsForReParsing['local_seq_scheme'] + elif 'ext_chain_seq_id_remap' in self.reasonsForReParsing: + del self.reasonsForReParsing['local_seq_scheme'] + + if 'local_seq_scheme' in self.reasonsForReParsing and len(self.reasonsForReParsing) == 1: + sortPolySeqRst(self.polySeqRstFailed) + if len(self.polySeqRstFailed) > 0: + self.reasonsForReParsing['extend_seq_scheme'] = self.polySeqRstFailed + del self.reasonsForReParsing['local_seq_scheme'] + + if len(self.spectral_dim) > 0: + for d, v in self.spectral_dim.items(): + for _v in v.values(): + for __d, __v in _v.items(): + if 'freq_hint' in __v: + if len(__v['freq_hint']) > 0 and d > 2 and __d >= 2\ + and self.exptlMethod != 'SOLID-STATE NMR' and __v['atom_isotope_number'] == 13: + center = np.mean(np.array(__v['freq_hint'])) + if center < 100.0 and __v['sweep_width'] / __v['spectrometer_frequency'] < 50.0: + __v['under_sampling_type'] = 'fold' + del __v['freq_hint'] + finally: + self.warningMessage = sorted(list(set(self.f)), key=self.f.index) # Enter a parse tree produced by NmrViewPKParser#data_label. - def enterData_label(self, ctx:NmrViewPKParser.Data_labelContext): - pass + def enterData_label(self, ctx: NmrViewPKParser.Data_labelContext): # pylint: disable=unused-argument + self.__labels = {} + self.__cur_label_type = None # Exit a parse tree produced by NmrViewPKParser#data_label. - def exitData_label(self, ctx:NmrViewPKParser.Data_labelContext): - pass - + def exitData_label(self, ctx: NmrViewPKParser.Data_labelContext): # pylint: disable=unused-argument + self.__labels = None + self.__cur_label_type = None # Enter a parse tree produced by NmrViewPKParser#labels. - def enterLabels(self, ctx:NmrViewPKParser.LabelsContext): - pass + def enterLabels(self, ctx: NmrViewPKParser.LabelsContext): # pylint: disable=unused-argument: + if self.__cur_label_type is None: + self.__cur_label_type = 'label' + elif self.__cur_label_type == 'label': + self.__cur_label_type = 'sw' + elif self.__cur_label_type == 'sw': + self.__cur_label_type = 'sf' + else: + self.__cur_label_type = None + return + if self.__cur_label_type not in self.__labels: + self.__labels[self.__cur_label_type] = [] # Exit a parse tree produced by NmrViewPKParser#labels. - def exitLabels(self, ctx:NmrViewPKParser.LabelsContext): - pass + def exitLabels(self, ctx: NmrViewPKParser.LabelsContext): # pylint: disable=unused-argument: + labels = self.__labels[self.__cur_label_type] - # Enter a parse tree produced by NmrViewPKParser#widths. - def enterWidths(self, ctx:NmrViewPKParser.WidthsContext): - pass + if self.__cur_label_type == 'label': - # Exit a parse tree produced by NmrViewPKParser#widths. - def exitWidths(self, ctx:NmrViewPKParser.WidthsContext): - pass + self.num_of_dim = len(labels) + for _dim_id, _axis_code in enumerate(labels, start=1): + if _dim_id not in self.cur_spectral_dim: + cur_spectral_dim = copy.copy(SPECTRAL_DIM_TEMPLATE) - # Enter a parse tree produced by NmrViewPKParser#freqs. - def enterFreqs(self, ctx:NmrViewPKParser.FreqsContext): - pass + cur_spectral_dim['axis_code'] = _axis_code - # Exit a parse tree produced by NmrViewPKParser#freqs. - def exitFreqs(self, ctx:NmrViewPKParser.FreqsContext): - pass + digits = re.findall(r'\d+', _axis_code) + for digit in digits: + num = int(digit) + nuc = next((k for k, v in ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS.items() if num == v[0]), None) + if nuc is not None: + cur_spectral_dim['atom_type'] = nuc + cur_spectral_dim['atom_isotope_number'] = num + break + if cur_spectral_dim['atom_type'] is None: + for a in _axis_code: + a = a.upper() + if a in ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS: + cur_spectral_dim['atom_type'] = a + cur_spectral_dim['atom_isotope_number'] = ISOTOPE_NUMBERS_OF_NMR_OBS_NUCS[a][0] + break + isotope_number = cur_spectral_dim['atom_isotope_number'] - # Enter a parse tree produced by NmrViewPKParser#vars. - def enterVars(self, ctx:NmrViewPKParser.VarsContext): - pass + cur_spectral_dim['acquisition'] = 'yes' if _dim_id == 1 and (isotope_number == 1 + or (isotope_number == 13 + and self.exptlMethod == 'SOLID-STATE NMR')) else 'no' + cur_spectral_dim['under_sampling_type'] = 'not observed' if cur_spectral_dim['acquisition'] == 'yes' else 'aliased' - # Exit a parse tree produced by NmrViewPKParser#vars. - def exitVars(self, ctx:NmrViewPKParser.VarsContext): - pass + self.cur_spectral_dim[_dim_id] = cur_spectral_dim + elif self.__cur_label_type == 'sw': - # Enter a parse tree produced by NmrViewPKParser#vars_per_axis. - def enterVars_per_axis(self, ctx:NmrViewPKParser.Vars_per_axisContext): - pass + for _dim_id, _spectral_width in enumerate(labels, start=1): + self.cur_spectral_dim[_dim_id]['sweep_width'] = _spectral_width + self.cur_spectral_dim[_dim_id]['sweep_width_unit'] = 'Hz' - # Exit a parse tree produced by NmrViewPKParser#vars_per_axis. - def exitVars_per_axis(self, ctx:NmrViewPKParser.Vars_per_axisContext): - pass + elif self.__cur_label_type == 'sf': + for _dim_id, _freq in enumerate(labels, start=1): + self.cur_spectral_dim[_dim_id]['spectrometer_frequency'] = _freq # Enter a parse tree produced by NmrViewPKParser#peak_list_2d. - def enterPeak_list_2d(self, ctx:NmrViewPKParser.Peak_list_2dContext): - pass + def enterPeak_list_2d(self, ctx: NmrViewPKParser.Peak_list_2dContext): # pylint: disable=unused-argument + self.num_of_dim = 2 + self.cur_subtype = 'peak2d' + if self.num_of_dim not in self.listIdInternal: + self.listIdInternal[self.num_of_dim] = 0 + self.listIdInternal[self.num_of_dim] += 1 + self.cur_list_id = self.listIdInternal[self.num_of_dim] + if self.num_of_dim not in self.spectral_dim: + self.spectral_dim[self.num_of_dim] = {} + if self.cur_list_id not in self.spectral_dim[self.num_of_dim]: + self.spectral_dim[self.num_of_dim][self.cur_list_id] = {} + for _dim_id in range(1, self.num_of_dim + 1): + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id] =\ + copy.copy(SPECTRAL_DIM_TEMPLATE + if len(self.cur_spectral_dim) == 0 + or _dim_id not in self.cur_spectral_dim + else self.cur_spectral_dim[_dim_id]) + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id]['freq_hint'] = [] + self.peaks2D = 0 + self.cur_spectral_dim = {} # Exit a parse tree produced by NmrViewPKParser#peak_list_2d. - def exitPeak_list_2d(self, ctx:NmrViewPKParser.Peak_list_2dContext): + def exitPeak_list_2d(self, ctx: NmrViewPKParser.Peak_list_2dContext): # pylint: disable=unused-argument pass + # Enter a parse tree produced by NmrViewPKParser#peak_2d. + def enterPeak_2d(self, ctx: NmrViewPKParser.Peak_2dContext): # pylint: disable=unused-argument + self.peaks2D += 1 + + self.atomSelectionSet.clear() + + # Exit a parse tree produced by NmrViewPKParser#peak_2d. + def exitPeak_2d(self, ctx: NmrViewPKParser.Peak_2dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + # E1 = str(ctx.Simple_name(0)) + # J1 = str(ctx.ENCLOSE_DATA(1))[1:-1] + # U1 = str(ctx.ENCLOSE_DATA(2))[1:-1] + + L2 = str(ctx.ENCLOSE_DATA(3))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + # E2 = str(ctx.Simple_name(1)) + # J2 = str(ctx.ENCLOSE_DATA(4))[1:-1] + # U2 = str(ctx.ENCLOSE_DATA(5))[1:-1] + + vol = float(str(ctx.Float(6))) + _int = float(str(ctx.Float(7))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(6): + comment = str(ctx.ENCLOSE_DATA(6))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or stat != 0: + self.peaks2D -= 1 + return + + dstFunc = self.validatePeak2D(index, P1, P2, B1, B2, W1, W2, + None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks2D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + + has_assignments = False + + if L1 is not None and L2 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + asis1 = asis2 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + asis1 = asis2 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0: + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks2D} (index={index}) " + f"{L1}, {L2} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + else: + atom1 = atom2 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, asis1=asis1, asis2=asis2, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, + details=comment) + sf['loop'].add_data(row) # Enter a parse tree produced by NmrViewPKParser#peak_list_3d. - def enterPeak_list_3d(self, ctx:NmrViewPKParser.Peak_list_3dContext): - pass + def enterPeak_list_3d(self, ctx: NmrViewPKParser.Peak_list_3dContext): # pylint: disable=unused-argument + self.num_of_dim = 3 + self.cur_subtype = 'peak3d' + if self.num_of_dim not in self.listIdInternal: + self.listIdInternal[self.num_of_dim] = 0 + self.listIdInternal[self.num_of_dim] += 1 + self.cur_list_id = self.listIdInternal[self.num_of_dim] + if self.num_of_dim not in self.spectral_dim: + self.spectral_dim[self.num_of_dim] = {} + if self.cur_list_id not in self.spectral_dim[self.num_of_dim]: + self.spectral_dim[self.num_of_dim][self.cur_list_id] = {} + for _dim_id in range(1, self.num_of_dim + 1): + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id] =\ + copy.copy(SPECTRAL_DIM_TEMPLATE + if len(self.cur_spectral_dim) == 0 + or _dim_id not in self.cur_spectral_dim + else self.cur_spectral_dim[_dim_id]) + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id]['freq_hint'] = [] + self.peaks3D = 0 + self.cur_spectral_dim = {} # Exit a parse tree produced by NmrViewPKParser#peak_list_3d. - def exitPeak_list_3d(self, ctx:NmrViewPKParser.Peak_list_3dContext): + def exitPeak_list_3d(self, ctx: NmrViewPKParser.Peak_list_3dContext): # pylint: disable=unused-argument pass + # Enter a parse tree produced by NmrViewPKParser#peak_3d. + def enterPeak_3d(self, ctx: NmrViewPKParser.Peak_3dContext): # pylint: disable=unused-argument + self.peaks3D += 1 + + self.atomSelectionSet.clear() + + # Exit a parse tree produced by NmrViewPKParser#peak_3d. + def exitPeak_3d(self, ctx: NmrViewPKParser.Peak_3dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + # E1 = str(ctx.Simple_name(0)) + # J1 = str(ctx.ENCLOSE_DATA(1))[1:-1] + # U1 = str(ctx.ENCLOSE_DATA(2))[1:-1] + + L2 = str(ctx.ENCLOSE_DATA(3))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + # E2 = str(ctx.Simple_name(1)) + # J2 = str(ctx.ENCLOSE_DATA(4))[1:-1] + # U2 = str(ctx.ENCLOSE_DATA(5))[1:-1] + + L3 = str(ctx.ENCLOSE_DATA(6))[1:-1] + P3 = float(str(ctx.Float(6))) + W3 = float(str(ctx.Float(7))) + B3 = float(str(ctx.Float(8))) + # E3 = str(ctx.Simple_name(2)) + # J3 = str(ctx.ENCLOSE_DATA(7))[1:-1] + # U3 = str(ctx.ENCLOSE_DATA(8))[1:-1] + + vol = float(str(ctx.Float(9))) + _int = float(str(ctx.Float(10))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(9): + comment = str(ctx.ENCLOSE_DATA(9))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + if L3 in emptyValue: + L3 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or P3 is None or stat != 0: + self.peaks3D -= 1 + return + + dstFunc = self.validatePeak3D(index, P1, P2, P3, B1, B2, B3, W1, W2, W3, + None, None, None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks3D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + cur_spectral_dim[3]['freq_hint'].append(P3) + + has_assignments = False + + if L1 is not None and L2 is not None and L3 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[2] = extractPeakAssignment(1, L3, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + a3 = assignments[2] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequenceWithChainId(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a3['chain_id'], a3['seq_id'], a3['atom_id'], index) + asis1 = asis2 = asis3 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequence(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithoutCompId(a3['seq_id'], a3['atom_id'], index) + asis1 = asis2 = asis3 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0 and len(chainAssign3) > 0: + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + self.selectCoordAtoms(chainAssign3, a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks3D} (index={index}) " + f"{L1}, {L2}, {L3} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} " + f"{self.atomSelectionSet[2] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + atom3 = self.atomSelectionSet[2][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + if len(self.atomSelectionSet[2]) > 1: + ambig_code3 = self.csStat.getMaxAmbigCodeWoSetId(atom3['comp_id'], atom3['atom_id']) + if ambig_code3 == 0: + ambig_code3 = None + else: + atom1 = atom2 = atom3 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, atom3, asis1=asis1, asis2=asis2, asis3=asis3, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, ambig_code3=ambig_code3, + details=comment) + sf['loop'].add_data(row) # Enter a parse tree produced by NmrViewPKParser#peak_list_4d. - def enterPeak_list_4d(self, ctx:NmrViewPKParser.Peak_list_4dContext): - pass + def enterPeak_list_4d(self, ctx: NmrViewPKParser.Peak_list_4dContext): # pylint: disable=unused-argument + self.num_of_dim = 4 + self.cur_subtype = 'peak4d' + if self.num_of_dim not in self.listIdInternal: + self.listIdInternal[self.num_of_dim] = 0 + self.listIdInternal[self.num_of_dim] += 1 + self.cur_list_id = self.listIdInternal[self.num_of_dim] + if self.num_of_dim not in self.spectral_dim: + self.spectral_dim[self.num_of_dim] = {} + if self.cur_list_id not in self.spectral_dim[self.num_of_dim]: + self.spectral_dim[self.num_of_dim][self.cur_list_id] = {} + for _dim_id in range(1, self.num_of_dim + 1): + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id] =\ + copy.copy(SPECTRAL_DIM_TEMPLATE + if len(self.cur_spectral_dim) == 0 + or _dim_id not in self.cur_spectral_dim + else self.cur_spectral_dim[_dim_id]) + self.spectral_dim[self.num_of_dim][self.cur_list_id][_dim_id]['freq_hint'] = [] + self.peaks4D = 0 + self.cur_spectral_dim = {} # Exit a parse tree produced by NmrViewPKParser#peak_list_4d. - def exitPeak_list_4d(self, ctx:NmrViewPKParser.Peak_list_4dContext): + def exitPeak_list_4d(self, ctx: NmrViewPKParser.Peak_list_4dContext): # pylint: disable=unused-argument + pass + + # Enter a parse tree produced by NmrViewPKParser#peak_4d. + def enterPeak_4d(self, ctx: NmrViewPKParser.Peak_4dContext): # pylint: disable=unused-argument + self.peaks4D += 1 + + self.atomSelectionSet.clear() + + # Exit a parse tree produced by NmrViewPKParser#peak_4d. + def exitPeak_4d(self, ctx: NmrViewPKParser.Peak_4dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + # E1 = str(ctx.Simple_name(0)) + # J1 = str(ctx.ENCLOSE_DATA(1))[1:-1] + # U1 = str(ctx.ENCLOSE_DATA(2))[1:-1] + + L2 = str(ctx.ENCLOSE_DATA(3))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + # E2 = str(ctx.Simple_name(1)) + # J2 = str(ctx.ENCLOSE_DATA(4))[1:-1] + # U2 = str(ctx.ENCLOSE_DATA(5))[1:-1] + + L3 = str(ctx.ENCLOSE_DATA(6))[1:-1] + P3 = float(str(ctx.Float(6))) + W3 = float(str(ctx.Float(7))) + B3 = float(str(ctx.Float(8))) + # E3 = str(ctx.Simple_name(2)) + # J3 = str(ctx.ENCLOSE_DATA(7))[1:-1] + # U3 = str(ctx.ENCLOSE_DATA(8))[1:-1] + + L4 = str(ctx.ENCLOSE_DATA(9))[1:-1] + P4 = float(str(ctx.Float(9))) + W4 = float(str(ctx.Float(10))) + B4 = float(str(ctx.Float(11))) + # E4 = str(ctx.Simple_name(3)) + # J4 = str(ctx.ENCLOSE_DATA(10))[1:-1] + # U4 = str(ctx.ENCLOSE_DATA(11))[1:-1] + + vol = float(str(ctx.Float(12))) + _int = float(str(ctx.Float(13))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(12): + comment = str(ctx.ENCLOSE_DATA(12))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + if L3 in emptyValue: + L3 = None + if L4 in emptyValue: + L4 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or P3 is None or P4 is None or stat != 0: + self.peaks4D -= 1 + return + + dstFunc = self.validatePeak4D(index, P1, P2, P3, P4, B1, B2, B3, B4, W1, W2, W3, W4, + None, None, None, None, None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks4D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + cur_spectral_dim[3]['freq_hint'].append(P3) + cur_spectral_dim[4]['freq_hint'].append(P4) + + has_assignments = False + + if L1 is not None and L2 is not None and L3 is not None and L4 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[2] = extractPeakAssignment(1, L3, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[3] = extractPeakAssignment(1, L4, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + a3 = assignments[2] + a4 = assignments[3] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequenceWithChainId(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + chainAssign4, asis4 = self.assignCoordPolymerSequenceWithChainId(a4['chain_id'], a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a3['chain_id'], a3['seq_id'], a3['atom_id'], index) + chainAssign4 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a4['chain_id'], a4['seq_id'], a4['atom_id'], index) + asis1 = asis2 = asis3 = asis4 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequence(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + chainAssign4, asis4 = self.assignCoordPolymerSequence(a4['chain_id'], a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithoutCompId(a3['seq_id'], a3['atom_id'], index) + chainAssign4 = self.assignCoordPolymerSequenceWithoutCompId(a4['seq_id'], a4['atom_id'], index) + asis1 = asis2 = asis3 = asis4 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0 and len(chainAssign3) > 0 and len(chainAssign4): + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + self.selectCoordAtoms(chainAssign3, a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + self.selectCoordAtoms(chainAssign4, a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks4D} (index={index}) " + f"{L1}, {L2}, {L3}, {L4} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} " + f"{self.atomSelectionSet[2] if has_assignments else None} {self.atomSelectionSet[3] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = ambig_code4 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + atom3 = self.atomSelectionSet[2][0] + atom4 = self.atomSelectionSet[3][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + if len(self.atomSelectionSet[2]) > 1: + ambig_code3 = self.csStat.getMaxAmbigCodeWoSetId(atom3['comp_id'], atom3['atom_id']) + if ambig_code3 == 0: + ambig_code3 = None + if len(self.atomSelectionSet[3]) > 1: + ambig_code4 = self.csStat.getMaxAmbigCodeWoSetId(atom4['comp_id'], atom4['atom_id']) + if ambig_code4 == 0: + ambig_code4 = None + else: + atom1 = atom2 = atom3 = atom4 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, atom3, atom4, asis1=asis1, asis2=asis2, asis3=asis3, asis4=asis4, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, ambig_code3=ambig_code3, ambig_code4=ambig_code4, + details=comment) + sf['loop'].add_data(row) + + # Enter a parse tree produced by NmrViewPKParser#peak_list_wo_eju_2d. + def enterPeak_list_wo_eju_2d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_2dContext): # pylint: disable=unused-argument + self.enterPeak_list_2d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_list_wo_eju_2d. + def exitPeak_list_wo_eju_2d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_2dContext): # pylint: disable=unused-argument pass + # Enter a parse tree produced by NmrViewPKParser#peak_wo_eju_2d. + def enterPeak_wo_eju_2d(self, ctx: NmrViewPKParser.Peak_wo_eju_2dContext): # pylint: disable=unused-argument + self.enterPeak_2d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_wo_eju_2d. + def exitPeak_wo_eju_2d(self, ctx: NmrViewPKParser.Peak_wo_eju_2dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + + L2 = str(ctx.ENCLOSE_DATA(1))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + + vol = float(str(ctx.Float(6))) + _int = float(str(ctx.Float(7))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(2): + comment = str(ctx.ENCLOSE_DATA(2))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or stat != 0: + self.peaks2D -= 1 + return + + dstFunc = self.validatePeak2D(index, P1, P2, B1, B2, W1, W2, + None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks2D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + + has_assignments = False + + if L1 is not None and L2 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + asis1 = asis2 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + asis1 = asis2 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0: + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks2D} (index={index}) " + f"{L1}, {L2} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + else: + atom1 = atom2 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, asis1=asis1, asis2=asis2, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, + details=comment) + sf['loop'].add_data(row) + + # Enter a parse tree produced by NmrViewPKParser#peak_list_wo_eju_3d. + def enterPeak_list_wo_eju_3d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_3dContext): # pylint: disable=unused-argument + self.enterPeak_list_3d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_list_wo_eju_3d. + def exitPeak_list_wo_eju_3d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_3dContext): # pylint: disable=unused-argument + pass + + # Enter a parse tree produced by NmrViewPKParser#peak_wo_eju_3d. + def enterPeak_wo_eju_3d(self, ctx: NmrViewPKParser.Peak_wo_eju_3dContext): # pylint: disable=unused-argument + self.enterPeak_3d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_wo_eju_3d. + def exitPeak_wo_eju_3d(self, ctx: NmrViewPKParser.Peak_wo_eju_3dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + + L2 = str(ctx.ENCLOSE_DATA(1))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + + L3 = str(ctx.ENCLOSE_DATA(2))[1:-1] + P3 = float(str(ctx.Float(6))) + W3 = float(str(ctx.Float(7))) + B3 = float(str(ctx.Float(8))) + + vol = float(str(ctx.Float(9))) + _int = float(str(ctx.Float(10))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(3): + comment = str(ctx.ENCLOSE_DATA(3))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + if L3 in emptyValue: + L3 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or P3 is None or stat != 0: + self.peaks3D -= 1 + return + + dstFunc = self.validatePeak3D(index, P1, P2, P3, B1, B2, B3, W1, W2, W3, + None, None, None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks3D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + cur_spectral_dim[3]['freq_hint'].append(P3) + + has_assignments = False + + if L1 is not None and L2 is not None and L3 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[2] = extractPeakAssignment(1, L3, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + a3 = assignments[2] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequenceWithChainId(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a3['chain_id'], a3['seq_id'], a3['atom_id'], index) + asis1 = asis2 = asis3 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequence(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithoutCompId(a3['seq_id'], a3['atom_id'], index) + asis1 = asis2 = asis3 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0 and len(chainAssign3) > 0: + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + self.selectCoordAtoms(chainAssign3, a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks3D} (index={index}) " + f"{L1}, {L2}, {L3} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} " + f"{self.atomSelectionSet[2] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + atom3 = self.atomSelectionSet[2][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + if len(self.atomSelectionSet[2]) > 1: + ambig_code3 = self.csStat.getMaxAmbigCodeWoSetId(atom3['comp_id'], atom3['atom_id']) + if ambig_code3 == 0: + ambig_code3 = None + else: + atom1 = atom2 = atom3 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, atom3, asis1=asis1, asis2=asis2, asis3=asis3, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, ambig_code3=ambig_code3, + details=comment) + sf['loop'].add_data(row) + + # Enter a parse tree produced by NmrViewPKParser#peak_list_wo_eju_4d. + def enterPeak_list_wo_eju_4d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_4dContext): # pylint: disable=unused-argument + self.enterPeak_list_4d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_list_wo_eju_4d. + def exitPeak_list_wo_eju_4d(self, ctx: NmrViewPKParser.Peak_list_wo_eju_4dContext): # pylint: disable=unused-argument + pass + + # Enter a parse tree produced by NmrViewPKParser#peak_wo_eju_4d. + def enterPeak_wo_eju_4d(self, ctx: NmrViewPKParser.Peak_wo_eju_4dContext): # pylint: disable=unused-argument + self.enterPeak_4d(ctx) + + # Exit a parse tree produced by NmrViewPKParser#peak_wo_eju_4d. + def exitPeak_wo_eju_4d(self, ctx: NmrViewPKParser.Peak_wo_eju_4dContext): + + index = int(str(ctx.Integer(0))) + + L1 = str(ctx.ENCLOSE_DATA(0))[1:-1] + P1 = float(str(ctx.Float(0))) + W1 = float(str(ctx.Float(1))) + B1 = float(str(ctx.Float(2))) + + L2 = str(ctx.ENCLOSE_DATA(1))[1:-1] + P2 = float(str(ctx.Float(3))) + W2 = float(str(ctx.Float(4))) + B2 = float(str(ctx.Float(5))) + + L3 = str(ctx.ENCLOSE_DATA(2))[1:-1] + P3 = float(str(ctx.Float(6))) + W3 = float(str(ctx.Float(7))) + B3 = float(str(ctx.Float(8))) + + L4 = str(ctx.ENCLOSE_DATA(3))[1:-1] + P4 = float(str(ctx.Float(9))) + W4 = float(str(ctx.Float(10))) + B4 = float(str(ctx.Float(11))) + + vol = float(str(ctx.Float(12))) + _int = float(str(ctx.Float(13))) + stat = int(str(ctx.Integer(1))) + if ctx.ENCLOSE_DATA(4): + comment = str(ctx.ENCLOSE_DATA(4))[1:-1] + if comment in emptyValue: + comment = None + else: + comment = None + # flag0 = int(str(ctx.Integer(2))) + + if L1 in emptyValue: + L1 = None + if L2 in emptyValue: + L2 = None + if L3 in emptyValue: + L3 = None + if L4 in emptyValue: + L4 = None + + if not self.hasPolySeq and not self.hasNonPolySeq: + return + + if P1 is None or P2 is None or P3 is None or P4 is None or stat != 0: + self.peaks4D -= 1 + return + + dstFunc = self.validatePeak4D(index, P1, P2, P3, P4, B1, B2, B3, B4, W1, W2, W3, W4, + None, None, None, None, None, None, None, None, _int, None, vol) + + if dstFunc is None: + self.peaks4D -= 1 + return + + cur_spectral_dim = self.spectral_dim[self.num_of_dim][self.cur_list_id] + + cur_spectral_dim[1]['freq_hint'].append(P1) + cur_spectral_dim[2]['freq_hint'].append(P2) + cur_spectral_dim[3]['freq_hint'].append(P3) + cur_spectral_dim[4]['freq_hint'].append(P4) + + has_assignments = False + + if L1 is not None and L2 is not None and L3 is not None and L4 is not None: + assignments = [None] * self.num_of_dim + assignments[0] = extractPeakAssignment(1, L1, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[1] = extractPeakAssignment(1, L2, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[2] = extractPeakAssignment(1, L3, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + assignments[3] = extractPeakAssignment(1, L4, self.authAsymIdSet, self.compIdSet, self.altCompIdSet, + self.polyPeptide, self.polyDeoxyribonucleotide, self.polyRibonucleotide, self.nefT) + + if all(a is not None for a in assignments): + + self.retrieveLocalSeqScheme() + + hasChainId = all(a['chain_id'] is not None for a in assignments) + hasCompId = all(a['comp_id'] is not None for a in assignments) + + a1 = assignments[0] + a2 = assignments[1] + a3 = assignments[2] + a4 = assignments[3] + + if hasChainId and hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequenceWithChainId(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequenceWithChainId(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequenceWithChainId(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + chainAssign4, asis4 = self.assignCoordPolymerSequenceWithChainId(a4['chain_id'], a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + elif hasChainId: + chainAssign1 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a1['chain_id'], a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a2['chain_id'], a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a3['chain_id'], a3['seq_id'], a3['atom_id'], index) + chainAssign4 = self.assignCoordPolymerSequenceWithChainIdWithoutCompId(a4['chain_id'], a4['seq_id'], a4['atom_id'], index) + asis1 = asis2 = asis3 = asis4 = False + + elif hasCompId: + chainAssign1, asis1 = self.assignCoordPolymerSequence(a1['chain_id'], a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + chainAssign2, asis2 = self.assignCoordPolymerSequence(a2['chain_id'], a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + chainAssign3, asis3 = self.assignCoordPolymerSequence(a3['chain_id'], a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + chainAssign4, asis4 = self.assignCoordPolymerSequence(a4['chain_id'], a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + else: + chainAssign1 = self.assignCoordPolymerSequenceWithoutCompId(a1['seq_id'], a1['atom_id'], index) + chainAssign2 = self.assignCoordPolymerSequenceWithoutCompId(a2['seq_id'], a2['atom_id'], index) + chainAssign3 = self.assignCoordPolymerSequenceWithoutCompId(a3['seq_id'], a3['atom_id'], index) + chainAssign4 = self.assignCoordPolymerSequenceWithoutCompId(a4['seq_id'], a4['atom_id'], index) + asis1 = asis2 = asis3 = asis4 = False + + if len(chainAssign1) > 0 and len(chainAssign2) > 0 and len(chainAssign3) > 0 and len(chainAssign4): + self.selectCoordAtoms(chainAssign1, a1['seq_id'], a1['comp_id'], a1['atom_id'], index) + self.selectCoordAtoms(chainAssign2, a2['seq_id'], a2['comp_id'], a2['atom_id'], index) + self.selectCoordAtoms(chainAssign3, a3['seq_id'], a3['comp_id'], a3['atom_id'], index) + self.selectCoordAtoms(chainAssign4, a4['seq_id'], a4['comp_id'], a4['atom_id'], index) + + if len(self.atomSelectionSet) == self.num_of_dim: + has_assignments = True + + if self.createSfDict__: + sf = self.getSf() + + if self.debug: + print(f"subtype={self.cur_subtype} id={self.peaks4D} (index={index}) " + f"{L1}, {L2}, {L3}, {L4} -> {self.atomSelectionSet[0] if has_assignments else None} {self.atomSelectionSet[1] if has_assignments else None} " + f"{self.atomSelectionSet[2] if has_assignments else None} {self.atomSelectionSet[3] if has_assignments else None} {dstFunc}") + + if self.createSfDict__ and sf is not None: + sf['index_id'] += 1 + ambig_code1 = ambig_code2 = ambig_code3 = ambig_code4 = None + if has_assignments: + atom1 = self.atomSelectionSet[0][0] + atom2 = self.atomSelectionSet[1][0] + atom3 = self.atomSelectionSet[2][0] + atom4 = self.atomSelectionSet[3][0] + if len(self.atomSelectionSet[0]) > 1: + ambig_code1 = self.csStat.getMaxAmbigCodeWoSetId(atom1['comp_id'], atom1['atom_id']) + if ambig_code1 == 0: + ambig_code1 = None + if len(self.atomSelectionSet[1]) > 1: + ambig_code2 = self.csStat.getMaxAmbigCodeWoSetId(atom2['comp_id'], atom2['atom_id']) + if ambig_code2 == 0: + ambig_code2 = None + if len(self.atomSelectionSet[2]) > 1: + ambig_code3 = self.csStat.getMaxAmbigCodeWoSetId(atom3['comp_id'], atom3['atom_id']) + if ambig_code3 == 0: + ambig_code3 = None + if len(self.atomSelectionSet[3]) > 1: + ambig_code4 = self.csStat.getMaxAmbigCodeWoSetId(atom4['comp_id'], atom4['atom_id']) + if ambig_code4 == 0: + ambig_code4 = None + else: + atom1 = atom2 = atom3 = atom4 = None + + row = getPkRow(self.cur_subtype, sf['id'], sf['index_id'], + sf['list_id'], self.entryId, dstFunc, + self.authToStarSeq, self.authToOrigSeq, self.offsetHolder, + atom1, atom2, atom3, atom4, asis1=asis1, asis2=asis2, asis3=asis3, asis4=asis4, + ambig_code1=ambig_code1, ambig_code2=ambig_code2, ambig_code3=ambig_code3, ambig_code4=ambig_code4, + details=comment) + sf['loop'].add_data(row) + + # Enter a parse tree produced by NmrViewPKParser#label. + def enterLabel(self, ctx: NmrViewPKParser.LabelContext): + if ctx.Float_LA(): + self.__labels[self.__cur_label_type].append(float(str(ctx.Float_LA()))) + elif ctx.Simple_name_LA(): + self.__labels[self.__cur_label_type].append(str(ctx.Simple_name_LA())) + else: + value = str(ctx.ENCLOSE_DATA_LA())[1:-1].strip() + if self.__cur_label_type == 'label': + self.__labels[self.__cur_label_type].append(value) + else: + self.__labels[self.__cur_label_type].append(float(value)) + + # Exit a parse tree produced by NmrViewPKParser#label. + def exitLabel(self, ctx: NmrViewPKParser.LabelContext): + pass -del NmrViewPKParser \ No newline at end of file +# del NmrViewPKParser diff --git a/wwpdb/utils/nmr/pk/NmrViewPKReader.py b/wwpdb/utils/nmr/pk/NmrViewPKReader.py new file mode 100644 index 000000000..5df32cbc4 --- /dev/null +++ b/wwpdb/utils/nmr/pk/NmrViewPKReader.py @@ -0,0 +1,216 @@ +## +# NmrViewPKReader.py +# +# Update: +## +""" A collection of classes for parsing NMRVIEW PK files. +""" +import sys +import os + +from antlr4 import InputStream, CommonTokenStream, ParseTreeWalker + +try: + from wwpdb.utils.nmr.mr.LexerErrorListener import LexerErrorListener + from wwpdb.utils.nmr.mr.ParserErrorListener import ParserErrorListener + from wwpdb.utils.nmr.pk.NmrViewPKLexer import NmrViewPKLexer + from wwpdb.utils.nmr.pk.NmrViewPKParser import NmrViewPKParser + from wwpdb.utils.nmr.pk.NmrViewPKParserListener import NmrViewPKParserListener + from wwpdb.utils.nmr.mr.ParserListenerUtil import (coordAssemblyChecker, + MAX_ERROR_REPORT, + REPRESENTATIVE_MODEL_ID, + REPRESENTATIVE_ALT_ID) + from wwpdb.utils.nmr.io.CifReader import CifReader + from wwpdb.utils.nmr.ChemCompUtil import ChemCompUtil + from wwpdb.utils.nmr.BMRBChemShiftStat import BMRBChemShiftStat + from wwpdb.utils.nmr.NEFTranslator.NEFTranslator import NEFTranslator +except ImportError: + from nmr.mr.LexerErrorListener import LexerErrorListener + from nmr.mr.ParserErrorListener import ParserErrorListener + from nmr.pk.NmrViewPKLexer import NmrViewPKLexer + from nmr.pk.NmrViewPKParser import NmrViewPKParser + from nmr.pk.NmrViewPKParserListener import NmrViewPKParserListener + from nmr.mr.ParserListenerUtil import (coordAssemblyChecker, + MAX_ERROR_REPORT, + REPRESENTATIVE_MODEL_ID, + REPRESENTATIVE_ALT_ID) + from nmr.io.CifReader import CifReader + from nmr.ChemCompUtil import ChemCompUtil + from nmr.BMRBChemShiftStat import BMRBChemShiftStat + from nmr.NEFTranslator.NEFTranslator import NEFTranslator + + +class NmrViewPKReader: + """ Accessor methods for parsing NMRVIEW PK files. + """ + + def __init__(self, verbose=True, log=sys.stdout, + representativeModelId=REPRESENTATIVE_MODEL_ID, + representativeAltId=REPRESENTATIVE_ALT_ID, + mrAtomNameMapping=None, + cR=None, caC=None, ccU=None, csStat=None, nefT=None, + reasons=None): + self.__verbose = verbose + self.__lfh = log + self.__debug = False + + self.__maxLexerErrorReport = MAX_ERROR_REPORT + self.__maxParserErrorReport = MAX_ERROR_REPORT + + self.__representativeModelId = representativeModelId + self.__representativeAltId = representativeAltId + self.__mrAtomNameMapping = mrAtomNameMapping + + # CCD accessing utility + self.__ccU = ChemCompUtil(verbose, log) if ccU is None else ccU + + if cR is not None and caC is None: + caC = coordAssemblyChecker(verbose, log, representativeModelId, representativeAltId, + cR, self.__ccU, None, None, fullCheck=False) + + self.__cR = cR + self.__caC = caC + + # BMRB chemical shift statistics + self.__csStat = BMRBChemShiftStat(verbose, log, self.__ccU) if csStat is None else csStat + + # NEFTranslator + self.__nefT = NEFTranslator(verbose, log, self.__ccU, self.__csStat) if nefT is None else nefT + if nefT is None: + self.__nefT.set_remediation_mode(True) + + # reasons for re-parsing request from the previous trial + self.__reasons = reasons + + def setDebugMode(self, debug): + self.__debug = debug + + def setLexerMaxErrorReport(self, maxErrReport): + self.__maxLexerErrorReport = maxErrReport + + def setParserMaxErrorReport(self, maxErrReport): + self.__maxParserErrorReport = maxErrReport + + def parse(self, pkFilePath, cifFilePath=None, isFilePath=True, + createSfDict=False, originalFileName=None, listIdCounter=None, entryId=None): + """ Parse NMRVIEW PK file. + @return: NmrViewPKParserListener for success or None otherwise, ParserErrorListener, LexerErrorListener. + """ + + ifh = None + + try: + + if isFilePath: + pkString = None + + if not os.access(pkFilePath, os.R_OK): + if self.__verbose: + self.__lfh.write(f"NmrViewPKReader.parse() {pkFilePath} is not accessible.\n") + return None, None, None + + ifh = open(pkFilePath, 'r') # pylint: disable=consider-using-with + input = InputStream(ifh.read()) + + else: + pkFilePath, pkString = None, pkFilePath + + if pkString is None or len(pkString) == 0: + if self.__verbose: + self.__lfh.write("NmrViewPKReader.parse() Empty string.\n") + return None, None, None + + input = InputStream(pkString) + + if cifFilePath is not None: + if not os.access(cifFilePath, os.R_OK): + if self.__verbose: + self.__lfh.write(f"NmrViewPKReader.parse() {cifFilePath} is not accessible.\n") + return None, None, None + + if self.__cR is None: + self.__cR = CifReader(self.__verbose, self.__lfh) + if not self.__cR.parse(cifFilePath): + return None, None, None + + lexer = NmrViewPKLexer(input) + lexer.removeErrorListeners() + + lexer_error_listener = LexerErrorListener(pkFilePath, maxErrorReport=self.__maxLexerErrorReport) + lexer.addErrorListener(lexer_error_listener) + + messageList = lexer_error_listener.getMessageList() + + if messageList is not None and self.__verbose: + for description in messageList: + self.__lfh.write(f"[Syntax error] line {description['line_number']}:{description['column_position']} {description['message']}\n") + if 'input' in description: + self.__lfh.write(f"{description['input']}\n") + self.__lfh.write(f"{description['marker']}\n") + + stream = CommonTokenStream(lexer) + parser = NmrViewPKParser(stream) + # try with simpler/faster SLL prediction mode + # parser._interp.predictionMode = PredictionMode.SLL # pylint: disable=protected-access + parser.removeErrorListeners() + parser_error_listener = ParserErrorListener(pkFilePath, maxErrorReport=self.__maxParserErrorReport) + parser.addErrorListener(parser_error_listener) + tree = parser.nmrview_pk() + + walker = ParseTreeWalker() + listener = NmrViewPKParserListener(self.__verbose, self.__lfh, + self.__representativeModelId, + self.__representativeAltId, + self.__mrAtomNameMapping, + self.__cR, self.__caC, + self.__ccU, self.__csStat, self.__nefT, + self.__reasons) + listener.setDebugMode(self.__debug) + listener.createSfDict(createSfDict) + if createSfDict: + if originalFileName is not None: + listener.setOriginaFileName(originalFileName) + if listIdCounter is not None: + listener.setListIdCounter(listIdCounter) + if entryId is not None: + listener.setEntryId(entryId) + walker.walk(listener, tree) + + messageList = parser_error_listener.getMessageList() + + if messageList is not None and self.__verbose: + for description in messageList: + self.__lfh.write(f"[Syntax error] line {description['line_number']}:{description['column_position']} {description['message']}\n") + if 'input' in description: + self.__lfh.write(f"{description['input']}\n") + self.__lfh.write(f"{description['marker']}\n") + + if self.__verbose: + if listener.warningMessage is not None and len(listener.warningMessage) > 0: + print('\n'.join(listener.warningMessage)) + if isFilePath: + print(listener.getContentSubtype()) + + return listener, parser_error_listener, lexer_error_listener + + except IOError as e: + if self.__verbose: + self.__lfh.write(f"+NmrViewPKReader.parse() ++ Error - {str(e)}\n") + return None, None, None + # pylint: disable=unreachable + """ debug code + except Exception as e: + if self.__verbose and isFilePath: + self.__lfh.write(f"+NmrViewPKReader.parse() ++ Error - {pkFilePath!r} - {str(e)}\n") + return None, None, None + """ + finally: + if isFilePath and ifh is not None: + ifh.close() + + +if __name__ == "__main__": + reader = NmrViewPKReader(True) + reader.setDebugMode(True) + reader.parse('../../tests-nmr/mock-data-remediation/6iws/e170209_15n_noesy.xpk', + '../../tests-nmr/mock-data-remediation/6iws/6iws.cif') diff --git a/wwpdb/utils/nmr/pk/SparkyPKLexer.py b/wwpdb/utils/nmr/pk/SparkyPKLexer.py index c6c7ea6c9..43b60e426 100644 --- a/wwpdb/utils/nmr/pk/SparkyPKLexer.py +++ b/wwpdb/utils/nmr/pk/SparkyPKLexer.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,26,416,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5, + 4,0,26,392,6,-1,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5, 7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -34,141 +34,130 @@ def serializedATN(): 1,22,1,22,1,22,5,22,261,8,22,10,22,12,22,264,9,22,1,22,1,22,1,23, 1,23,1,23,4,23,271,8,23,11,23,12,23,272,1,23,1,23,4,23,277,8,23, 11,23,12,23,278,1,23,1,23,4,23,283,8,23,11,23,12,23,284,1,23,1,23, - 4,23,289,8,23,11,23,12,23,290,1,23,1,23,4,23,295,8,23,11,23,12,23, - 296,1,23,1,23,1,23,1,23,1,23,1,23,3,23,305,8,23,1,23,5,23,308,8, - 23,10,23,12,23,311,9,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,4,24, - 320,8,24,11,24,12,24,321,1,24,1,24,4,24,326,8,24,11,24,12,24,327, - 1,24,1,24,4,24,332,8,24,11,24,12,24,333,1,24,1,24,4,24,338,8,24, - 11,24,12,24,339,1,24,1,24,4,24,344,8,24,11,24,12,24,345,1,24,1,24, - 1,24,1,24,1,24,1,24,3,24,354,8,24,1,24,5,24,357,8,24,10,24,12,24, - 360,9,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26,1,26,1,27, - 1,27,1,27,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,3,29,383,8,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,31,1,31,1,31,1,31,1,32,4,32,404,8,32,11,32,12,32,405,1,32, - 1,32,1,33,4,33,411,8,33,11,33,12,33,412,1,33,1,33,1,262,0,34,2,1, - 4,2,6,3,8,4,10,5,12,0,14,0,16,0,18,6,20,7,22,8,24,9,26,10,28,11, - 30,12,32,0,34,0,36,0,38,0,40,0,42,13,44,14,46,15,48,16,50,17,52, - 18,54,19,56,20,58,21,60,22,62,23,64,24,66,25,68,26,2,0,1,9,2,0,43, - 43,45,45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13,2,0,65,90,97, - 122,5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39,39,2,0,9,9,32, - 32,5,0,33,33,35,35,38,38,59,59,92,92,462,0,2,1,0,0,0,0,4,1,0,0,0, - 0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0, - 22,1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0, - 42,1,0,0,0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,1, - 52,1,0,0,0,1,54,1,0,0,0,1,56,1,0,0,0,1,58,1,0,0,0,1,60,1,0,0,0,1, - 62,1,0,0,0,1,64,1,0,0,0,1,66,1,0,0,0,1,68,1,0,0,0,2,70,1,0,0,0,4, - 83,1,0,0,0,6,89,1,0,0,0,8,94,1,0,0,0,10,101,1,0,0,0,12,120,1,0,0, - 0,14,122,1,0,0,0,16,125,1,0,0,0,18,130,1,0,0,0,20,155,1,0,0,0,22, - 180,1,0,0,0,24,204,1,0,0,0,26,208,1,0,0,0,28,214,1,0,0,0,30,222, - 1,0,0,0,32,224,1,0,0,0,34,228,1,0,0,0,36,232,1,0,0,0,38,236,1,0, - 0,0,40,238,1,0,0,0,42,246,1,0,0,0,44,253,1,0,0,0,46,257,1,0,0,0, - 48,304,1,0,0,0,50,353,1,0,0,0,52,365,1,0,0,0,54,368,1,0,0,0,56,371, - 1,0,0,0,58,374,1,0,0,0,60,382,1,0,0,0,62,391,1,0,0,0,64,398,1,0, - 0,0,66,403,1,0,0,0,68,410,1,0,0,0,70,71,5,65,0,0,71,72,5,115,0,0, - 72,73,5,115,0,0,73,74,5,105,0,0,74,75,5,103,0,0,75,76,5,110,0,0, - 76,77,5,109,0,0,77,78,5,101,0,0,78,79,5,110,0,0,79,80,5,116,0,0, - 80,81,1,0,0,0,81,82,6,0,0,0,82,3,1,0,0,0,83,84,5,119,0,0,84,85,5, - 49,0,0,85,86,1,0,0,0,86,87,6,1,0,0,87,5,1,0,0,0,88,90,7,0,0,0,89, - 88,1,0,0,0,89,90,1,0,0,0,90,91,1,0,0,0,91,92,3,16,7,0,92,7,1,0,0, - 0,93,95,7,0,0,0,94,93,1,0,0,0,94,95,1,0,0,0,95,98,1,0,0,0,96,99, - 3,16,7,0,97,99,3,12,5,0,98,96,1,0,0,0,98,97,1,0,0,0,99,9,1,0,0,0, - 100,102,7,0,0,0,101,100,1,0,0,0,101,102,1,0,0,0,102,105,1,0,0,0, - 103,106,3,16,7,0,104,106,3,12,5,0,105,103,1,0,0,0,105,104,1,0,0, - 0,106,112,1,0,0,0,107,109,7,1,0,0,108,110,7,0,0,0,109,108,1,0,0, - 0,109,110,1,0,0,0,110,111,1,0,0,0,111,113,3,16,7,0,112,107,1,0,0, - 0,112,113,1,0,0,0,113,11,1,0,0,0,114,115,3,16,7,0,115,116,5,46,0, - 0,116,117,3,16,7,0,117,121,1,0,0,0,118,119,5,46,0,0,119,121,3,16, - 7,0,120,114,1,0,0,0,120,118,1,0,0,0,121,13,1,0,0,0,122,123,7,2,0, - 0,123,15,1,0,0,0,124,126,3,14,6,0,125,124,1,0,0,0,126,127,1,0,0, - 0,127,125,1,0,0,0,127,128,1,0,0,0,128,17,1,0,0,0,129,131,5,35,0, - 0,130,129,1,0,0,0,131,132,1,0,0,0,132,130,1,0,0,0,132,133,1,0,0, - 0,133,137,1,0,0,0,134,136,8,3,0,0,135,134,1,0,0,0,136,139,1,0,0, - 0,137,135,1,0,0,0,137,138,1,0,0,0,138,143,1,0,0,0,139,137,1,0,0, - 0,140,142,5,35,0,0,141,140,1,0,0,0,142,145,1,0,0,0,143,141,1,0,0, - 0,143,144,1,0,0,0,144,149,1,0,0,0,145,143,1,0,0,0,146,148,8,3,0, - 0,147,146,1,0,0,0,148,151,1,0,0,0,149,147,1,0,0,0,149,150,1,0,0, - 0,150,152,1,0,0,0,151,149,1,0,0,0,152,153,6,8,1,0,153,19,1,0,0,0, - 154,156,5,33,0,0,155,154,1,0,0,0,156,157,1,0,0,0,157,155,1,0,0,0, - 157,158,1,0,0,0,158,162,1,0,0,0,159,161,8,3,0,0,160,159,1,0,0,0, - 161,164,1,0,0,0,162,160,1,0,0,0,162,163,1,0,0,0,163,168,1,0,0,0, - 164,162,1,0,0,0,165,167,5,33,0,0,166,165,1,0,0,0,167,170,1,0,0,0, - 168,166,1,0,0,0,168,169,1,0,0,0,169,174,1,0,0,0,170,168,1,0,0,0, - 171,173,8,3,0,0,172,171,1,0,0,0,173,176,1,0,0,0,174,172,1,0,0,0, - 174,175,1,0,0,0,175,177,1,0,0,0,176,174,1,0,0,0,177,178,6,9,1,0, - 178,21,1,0,0,0,179,181,5,59,0,0,180,179,1,0,0,0,181,182,1,0,0,0, - 182,180,1,0,0,0,182,183,1,0,0,0,183,187,1,0,0,0,184,186,8,3,0,0, - 185,184,1,0,0,0,186,189,1,0,0,0,187,185,1,0,0,0,187,188,1,0,0,0, - 188,193,1,0,0,0,189,187,1,0,0,0,190,192,5,59,0,0,191,190,1,0,0,0, - 192,195,1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,199,1,0,0,0, - 195,193,1,0,0,0,196,198,8,3,0,0,197,196,1,0,0,0,198,201,1,0,0,0, - 199,197,1,0,0,0,199,200,1,0,0,0,200,202,1,0,0,0,201,199,1,0,0,0, - 202,203,6,10,1,0,203,23,1,0,0,0,204,205,3,40,19,0,205,206,5,45,0, - 0,206,207,3,40,19,0,207,25,1,0,0,0,208,209,3,40,19,0,209,210,5,45, - 0,0,210,211,3,40,19,0,211,212,5,45,0,0,212,213,3,40,19,0,213,27, - 1,0,0,0,214,215,3,40,19,0,215,216,5,45,0,0,216,217,3,40,19,0,217, - 218,5,45,0,0,218,219,3,40,19,0,219,220,5,45,0,0,220,221,3,40,19, - 0,221,29,1,0,0,0,222,223,3,40,19,0,223,31,1,0,0,0,224,225,7,4,0, - 0,225,33,1,0,0,0,226,229,3,32,15,0,227,229,3,14,6,0,228,226,1,0, - 0,0,228,227,1,0,0,0,229,35,1,0,0,0,230,233,3,34,16,0,231,233,7,5, - 0,0,232,230,1,0,0,0,232,231,1,0,0,0,233,37,1,0,0,0,234,237,3,36, - 17,0,235,237,7,6,0,0,236,234,1,0,0,0,236,235,1,0,0,0,237,39,1,0, - 0,0,238,242,3,36,17,0,239,241,3,38,18,0,240,239,1,0,0,0,241,244, - 1,0,0,0,242,240,1,0,0,0,242,243,1,0,0,0,243,41,1,0,0,0,244,242,1, - 0,0,0,245,247,7,7,0,0,246,245,1,0,0,0,247,248,1,0,0,0,248,246,1, - 0,0,0,248,249,1,0,0,0,249,250,1,0,0,0,250,251,6,20,2,0,251,43,1, - 0,0,0,252,254,7,3,0,0,253,252,1,0,0,0,254,255,1,0,0,0,255,253,1, - 0,0,0,255,256,1,0,0,0,256,45,1,0,0,0,257,262,5,123,0,0,258,261,3, - 8,3,0,259,261,3,40,19,0,260,258,1,0,0,0,260,259,1,0,0,0,261,264, - 1,0,0,0,262,263,1,0,0,0,262,260,1,0,0,0,263,265,1,0,0,0,264,262, - 1,0,0,0,265,266,5,125,0,0,266,47,1,0,0,0,267,305,7,8,0,0,268,270, - 5,47,0,0,269,271,5,47,0,0,270,269,1,0,0,0,271,272,1,0,0,0,272,270, - 1,0,0,0,272,273,1,0,0,0,273,305,1,0,0,0,274,276,5,42,0,0,275,277, - 5,42,0,0,276,275,1,0,0,0,277,278,1,0,0,0,278,276,1,0,0,0,278,279, - 1,0,0,0,279,305,1,0,0,0,280,282,5,45,0,0,281,283,5,45,0,0,282,281, - 1,0,0,0,283,284,1,0,0,0,284,282,1,0,0,0,284,285,1,0,0,0,285,305, - 1,0,0,0,286,288,5,43,0,0,287,289,5,43,0,0,288,287,1,0,0,0,289,290, - 1,0,0,0,290,288,1,0,0,0,290,291,1,0,0,0,291,305,1,0,0,0,292,294, - 5,61,0,0,293,295,5,61,0,0,294,293,1,0,0,0,295,296,1,0,0,0,296,294, - 1,0,0,0,296,297,1,0,0,0,297,305,1,0,0,0,298,299,5,82,0,0,299,300, - 5,69,0,0,300,301,5,77,0,0,301,302,5,65,0,0,302,303,5,82,0,0,303, - 305,5,75,0,0,304,267,1,0,0,0,304,268,1,0,0,0,304,274,1,0,0,0,304, - 280,1,0,0,0,304,286,1,0,0,0,304,292,1,0,0,0,304,298,1,0,0,0,305, - 309,1,0,0,0,306,308,5,32,0,0,307,306,1,0,0,0,308,311,1,0,0,0,309, - 307,1,0,0,0,309,310,1,0,0,0,310,312,1,0,0,0,311,309,1,0,0,0,312, - 313,3,44,21,0,313,314,1,0,0,0,314,315,6,23,1,0,315,49,1,0,0,0,316, - 354,7,8,0,0,317,319,5,47,0,0,318,320,5,47,0,0,319,318,1,0,0,0,320, - 321,1,0,0,0,321,319,1,0,0,0,321,322,1,0,0,0,322,354,1,0,0,0,323, - 325,5,42,0,0,324,326,5,42,0,0,325,324,1,0,0,0,326,327,1,0,0,0,327, - 325,1,0,0,0,327,328,1,0,0,0,328,354,1,0,0,0,329,331,5,45,0,0,330, - 332,5,45,0,0,331,330,1,0,0,0,332,333,1,0,0,0,333,331,1,0,0,0,333, - 334,1,0,0,0,334,354,1,0,0,0,335,337,5,43,0,0,336,338,5,43,0,0,337, - 336,1,0,0,0,338,339,1,0,0,0,339,337,1,0,0,0,339,340,1,0,0,0,340, - 354,1,0,0,0,341,343,5,61,0,0,342,344,5,61,0,0,343,342,1,0,0,0,344, - 345,1,0,0,0,345,343,1,0,0,0,345,346,1,0,0,0,346,354,1,0,0,0,347, - 348,5,82,0,0,348,349,5,69,0,0,349,350,5,77,0,0,350,351,5,65,0,0, - 351,352,5,82,0,0,352,354,5,75,0,0,353,316,1,0,0,0,353,317,1,0,0, - 0,353,323,1,0,0,0,353,329,1,0,0,0,353,335,1,0,0,0,353,341,1,0,0, - 0,353,347,1,0,0,0,354,358,1,0,0,0,355,357,8,3,0,0,356,355,1,0,0, - 0,357,360,1,0,0,0,358,356,1,0,0,0,358,359,1,0,0,0,359,361,1,0,0, - 0,360,358,1,0,0,0,361,362,3,44,21,0,362,363,1,0,0,0,363,364,6,24, - 1,0,364,51,1,0,0,0,365,366,5,119,0,0,366,367,5,49,0,0,367,53,1,0, - 0,0,368,369,5,119,0,0,369,370,5,50,0,0,370,55,1,0,0,0,371,372,5, - 119,0,0,372,373,5,51,0,0,373,57,1,0,0,0,374,375,5,119,0,0,375,376, - 5,52,0,0,376,59,1,0,0,0,377,378,5,68,0,0,378,379,5,97,0,0,379,380, - 5,116,0,0,380,381,5,97,0,0,381,383,5,32,0,0,382,377,1,0,0,0,382, - 383,1,0,0,0,383,384,1,0,0,0,384,385,5,72,0,0,385,386,5,101,0,0,386, - 387,5,105,0,0,387,388,5,103,0,0,388,389,5,104,0,0,389,390,5,116, - 0,0,390,61,1,0,0,0,391,392,5,86,0,0,392,393,5,111,0,0,393,394,5, - 108,0,0,394,395,5,117,0,0,395,396,5,109,0,0,396,397,5,101,0,0,397, - 63,1,0,0,0,398,399,5,83,0,0,399,400,5,47,0,0,400,401,5,78,0,0,401, - 65,1,0,0,0,402,404,7,7,0,0,403,402,1,0,0,0,404,405,1,0,0,0,405,403, - 1,0,0,0,405,406,1,0,0,0,406,407,1,0,0,0,407,408,6,32,2,0,408,67, - 1,0,0,0,409,411,7,3,0,0,410,409,1,0,0,0,411,412,1,0,0,0,412,410, - 1,0,0,0,412,413,1,0,0,0,413,414,1,0,0,0,414,415,6,33,3,0,415,69, - 1,0,0,0,48,0,1,89,94,98,101,105,109,112,120,127,132,137,143,149, - 157,162,168,174,182,187,193,199,228,232,236,242,248,255,260,262, - 272,278,284,290,296,304,309,321,327,333,339,345,353,358,382,405, - 412,4,5,1,0,0,1,0,6,0,0,4,0,0 + 1,23,1,23,1,23,1,23,3,23,293,8,23,1,23,5,23,296,8,23,10,23,12,23, + 299,9,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,4,24,308,8,24,11,24, + 12,24,309,1,24,1,24,4,24,314,8,24,11,24,12,24,315,1,24,1,24,4,24, + 320,8,24,11,24,12,24,321,1,24,1,24,1,24,1,24,1,24,1,24,3,24,330, + 8,24,1,24,5,24,333,8,24,10,24,12,24,336,9,24,1,24,1,24,1,24,1,24, + 1,25,1,25,1,25,1,26,1,26,1,26,1,27,1,27,1,27,1,28,1,28,1,28,1,29, + 1,29,1,29,1,29,1,29,3,29,359,8,29,1,29,1,29,1,29,1,29,1,29,1,29, + 1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32, + 4,32,380,8,32,11,32,12,32,381,1,32,1,32,1,33,4,33,387,8,33,11,33, + 12,33,388,1,33,1,33,1,262,0,34,2,1,4,2,6,3,8,4,10,5,12,0,14,0,16, + 0,18,6,20,7,22,8,24,9,26,10,28,11,30,12,32,0,34,0,36,0,38,0,40,0, + 42,13,44,14,46,15,48,16,50,17,52,18,54,19,56,20,58,21,60,22,62,23, + 64,24,66,25,68,26,2,0,1,9,2,0,43,43,45,45,2,0,69,69,101,101,1,0, + 48,57,2,0,10,10,13,13,2,0,65,90,97,122,5,0,35,35,42,43,45,46,63, + 63,95,95,2,0,34,34,39,39,2,0,9,9,32,32,5,0,33,33,35,35,38,38,59, + 59,92,92,430,0,2,1,0,0,0,0,4,1,0,0,0,0,6,1,0,0,0,0,8,1,0,0,0,0,10, + 1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22,1,0,0,0,0,24,1,0,0,0,0,26, + 1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,42,1,0,0,0,0,44,1,0,0,0,0,46, + 1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,1,52,1,0,0,0,1,54,1,0,0,0,1,56, + 1,0,0,0,1,58,1,0,0,0,1,60,1,0,0,0,1,62,1,0,0,0,1,64,1,0,0,0,1,66, + 1,0,0,0,1,68,1,0,0,0,2,70,1,0,0,0,4,83,1,0,0,0,6,89,1,0,0,0,8,94, + 1,0,0,0,10,101,1,0,0,0,12,120,1,0,0,0,14,122,1,0,0,0,16,125,1,0, + 0,0,18,130,1,0,0,0,20,155,1,0,0,0,22,180,1,0,0,0,24,204,1,0,0,0, + 26,208,1,0,0,0,28,214,1,0,0,0,30,222,1,0,0,0,32,224,1,0,0,0,34,228, + 1,0,0,0,36,232,1,0,0,0,38,236,1,0,0,0,40,238,1,0,0,0,42,246,1,0, + 0,0,44,253,1,0,0,0,46,257,1,0,0,0,48,292,1,0,0,0,50,329,1,0,0,0, + 52,341,1,0,0,0,54,344,1,0,0,0,56,347,1,0,0,0,58,350,1,0,0,0,60,358, + 1,0,0,0,62,367,1,0,0,0,64,374,1,0,0,0,66,379,1,0,0,0,68,386,1,0, + 0,0,70,71,5,65,0,0,71,72,5,115,0,0,72,73,5,115,0,0,73,74,5,105,0, + 0,74,75,5,103,0,0,75,76,5,110,0,0,76,77,5,109,0,0,77,78,5,101,0, + 0,78,79,5,110,0,0,79,80,5,116,0,0,80,81,1,0,0,0,81,82,6,0,0,0,82, + 3,1,0,0,0,83,84,5,119,0,0,84,85,5,49,0,0,85,86,1,0,0,0,86,87,6,1, + 0,0,87,5,1,0,0,0,88,90,7,0,0,0,89,88,1,0,0,0,89,90,1,0,0,0,90,91, + 1,0,0,0,91,92,3,16,7,0,92,7,1,0,0,0,93,95,7,0,0,0,94,93,1,0,0,0, + 94,95,1,0,0,0,95,98,1,0,0,0,96,99,3,16,7,0,97,99,3,12,5,0,98,96, + 1,0,0,0,98,97,1,0,0,0,99,9,1,0,0,0,100,102,7,0,0,0,101,100,1,0,0, + 0,101,102,1,0,0,0,102,105,1,0,0,0,103,106,3,16,7,0,104,106,3,12, + 5,0,105,103,1,0,0,0,105,104,1,0,0,0,106,112,1,0,0,0,107,109,7,1, + 0,0,108,110,7,0,0,0,109,108,1,0,0,0,109,110,1,0,0,0,110,111,1,0, + 0,0,111,113,3,16,7,0,112,107,1,0,0,0,112,113,1,0,0,0,113,11,1,0, + 0,0,114,115,3,16,7,0,115,116,5,46,0,0,116,117,3,16,7,0,117,121,1, + 0,0,0,118,119,5,46,0,0,119,121,3,16,7,0,120,114,1,0,0,0,120,118, + 1,0,0,0,121,13,1,0,0,0,122,123,7,2,0,0,123,15,1,0,0,0,124,126,3, + 14,6,0,125,124,1,0,0,0,126,127,1,0,0,0,127,125,1,0,0,0,127,128,1, + 0,0,0,128,17,1,0,0,0,129,131,5,35,0,0,130,129,1,0,0,0,131,132,1, + 0,0,0,132,130,1,0,0,0,132,133,1,0,0,0,133,137,1,0,0,0,134,136,8, + 3,0,0,135,134,1,0,0,0,136,139,1,0,0,0,137,135,1,0,0,0,137,138,1, + 0,0,0,138,143,1,0,0,0,139,137,1,0,0,0,140,142,5,35,0,0,141,140,1, + 0,0,0,142,145,1,0,0,0,143,141,1,0,0,0,143,144,1,0,0,0,144,149,1, + 0,0,0,145,143,1,0,0,0,146,148,8,3,0,0,147,146,1,0,0,0,148,151,1, + 0,0,0,149,147,1,0,0,0,149,150,1,0,0,0,150,152,1,0,0,0,151,149,1, + 0,0,0,152,153,6,8,1,0,153,19,1,0,0,0,154,156,5,33,0,0,155,154,1, + 0,0,0,156,157,1,0,0,0,157,155,1,0,0,0,157,158,1,0,0,0,158,162,1, + 0,0,0,159,161,8,3,0,0,160,159,1,0,0,0,161,164,1,0,0,0,162,160,1, + 0,0,0,162,163,1,0,0,0,163,168,1,0,0,0,164,162,1,0,0,0,165,167,5, + 33,0,0,166,165,1,0,0,0,167,170,1,0,0,0,168,166,1,0,0,0,168,169,1, + 0,0,0,169,174,1,0,0,0,170,168,1,0,0,0,171,173,8,3,0,0,172,171,1, + 0,0,0,173,176,1,0,0,0,174,172,1,0,0,0,174,175,1,0,0,0,175,177,1, + 0,0,0,176,174,1,0,0,0,177,178,6,9,1,0,178,21,1,0,0,0,179,181,5,59, + 0,0,180,179,1,0,0,0,181,182,1,0,0,0,182,180,1,0,0,0,182,183,1,0, + 0,0,183,187,1,0,0,0,184,186,8,3,0,0,185,184,1,0,0,0,186,189,1,0, + 0,0,187,185,1,0,0,0,187,188,1,0,0,0,188,193,1,0,0,0,189,187,1,0, + 0,0,190,192,5,59,0,0,191,190,1,0,0,0,192,195,1,0,0,0,193,191,1,0, + 0,0,193,194,1,0,0,0,194,199,1,0,0,0,195,193,1,0,0,0,196,198,8,3, + 0,0,197,196,1,0,0,0,198,201,1,0,0,0,199,197,1,0,0,0,199,200,1,0, + 0,0,200,202,1,0,0,0,201,199,1,0,0,0,202,203,6,10,1,0,203,23,1,0, + 0,0,204,205,3,40,19,0,205,206,5,45,0,0,206,207,3,40,19,0,207,25, + 1,0,0,0,208,209,3,40,19,0,209,210,5,45,0,0,210,211,3,40,19,0,211, + 212,5,45,0,0,212,213,3,40,19,0,213,27,1,0,0,0,214,215,3,40,19,0, + 215,216,5,45,0,0,216,217,3,40,19,0,217,218,5,45,0,0,218,219,3,40, + 19,0,219,220,5,45,0,0,220,221,3,40,19,0,221,29,1,0,0,0,222,223,3, + 40,19,0,223,31,1,0,0,0,224,225,7,4,0,0,225,33,1,0,0,0,226,229,3, + 32,15,0,227,229,3,14,6,0,228,226,1,0,0,0,228,227,1,0,0,0,229,35, + 1,0,0,0,230,233,3,34,16,0,231,233,7,5,0,0,232,230,1,0,0,0,232,231, + 1,0,0,0,233,37,1,0,0,0,234,237,3,36,17,0,235,237,7,6,0,0,236,234, + 1,0,0,0,236,235,1,0,0,0,237,39,1,0,0,0,238,242,3,36,17,0,239,241, + 3,38,18,0,240,239,1,0,0,0,241,244,1,0,0,0,242,240,1,0,0,0,242,243, + 1,0,0,0,243,41,1,0,0,0,244,242,1,0,0,0,245,247,7,7,0,0,246,245,1, + 0,0,0,247,248,1,0,0,0,248,246,1,0,0,0,248,249,1,0,0,0,249,250,1, + 0,0,0,250,251,6,20,2,0,251,43,1,0,0,0,252,254,7,3,0,0,253,252,1, + 0,0,0,254,255,1,0,0,0,255,253,1,0,0,0,255,256,1,0,0,0,256,45,1,0, + 0,0,257,262,5,123,0,0,258,261,3,8,3,0,259,261,3,40,19,0,260,258, + 1,0,0,0,260,259,1,0,0,0,261,264,1,0,0,0,262,263,1,0,0,0,262,260, + 1,0,0,0,263,265,1,0,0,0,264,262,1,0,0,0,265,266,5,125,0,0,266,47, + 1,0,0,0,267,293,7,8,0,0,268,270,5,47,0,0,269,271,5,47,0,0,270,269, + 1,0,0,0,271,272,1,0,0,0,272,270,1,0,0,0,272,273,1,0,0,0,273,293, + 1,0,0,0,274,276,5,42,0,0,275,277,5,42,0,0,276,275,1,0,0,0,277,278, + 1,0,0,0,278,276,1,0,0,0,278,279,1,0,0,0,279,293,1,0,0,0,280,282, + 5,61,0,0,281,283,5,61,0,0,282,281,1,0,0,0,283,284,1,0,0,0,284,282, + 1,0,0,0,284,285,1,0,0,0,285,293,1,0,0,0,286,287,5,82,0,0,287,288, + 5,69,0,0,288,289,5,77,0,0,289,290,5,65,0,0,290,291,5,82,0,0,291, + 293,5,75,0,0,292,267,1,0,0,0,292,268,1,0,0,0,292,274,1,0,0,0,292, + 280,1,0,0,0,292,286,1,0,0,0,293,297,1,0,0,0,294,296,5,32,0,0,295, + 294,1,0,0,0,296,299,1,0,0,0,297,295,1,0,0,0,297,298,1,0,0,0,298, + 300,1,0,0,0,299,297,1,0,0,0,300,301,3,44,21,0,301,302,1,0,0,0,302, + 303,6,23,1,0,303,49,1,0,0,0,304,330,7,8,0,0,305,307,5,47,0,0,306, + 308,5,47,0,0,307,306,1,0,0,0,308,309,1,0,0,0,309,307,1,0,0,0,309, + 310,1,0,0,0,310,330,1,0,0,0,311,313,5,42,0,0,312,314,5,42,0,0,313, + 312,1,0,0,0,314,315,1,0,0,0,315,313,1,0,0,0,315,316,1,0,0,0,316, + 330,1,0,0,0,317,319,5,61,0,0,318,320,5,61,0,0,319,318,1,0,0,0,320, + 321,1,0,0,0,321,319,1,0,0,0,321,322,1,0,0,0,322,330,1,0,0,0,323, + 324,5,82,0,0,324,325,5,69,0,0,325,326,5,77,0,0,326,327,5,65,0,0, + 327,328,5,82,0,0,328,330,5,75,0,0,329,304,1,0,0,0,329,305,1,0,0, + 0,329,311,1,0,0,0,329,317,1,0,0,0,329,323,1,0,0,0,330,334,1,0,0, + 0,331,333,8,3,0,0,332,331,1,0,0,0,333,336,1,0,0,0,334,332,1,0,0, + 0,334,335,1,0,0,0,335,337,1,0,0,0,336,334,1,0,0,0,337,338,3,44,21, + 0,338,339,1,0,0,0,339,340,6,24,1,0,340,51,1,0,0,0,341,342,5,119, + 0,0,342,343,5,49,0,0,343,53,1,0,0,0,344,345,5,119,0,0,345,346,5, + 50,0,0,346,55,1,0,0,0,347,348,5,119,0,0,348,349,5,51,0,0,349,57, + 1,0,0,0,350,351,5,119,0,0,351,352,5,52,0,0,352,59,1,0,0,0,353,354, + 5,68,0,0,354,355,5,97,0,0,355,356,5,116,0,0,356,357,5,97,0,0,357, + 359,5,32,0,0,358,353,1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360, + 361,5,72,0,0,361,362,5,101,0,0,362,363,5,105,0,0,363,364,5,103,0, + 0,364,365,5,104,0,0,365,366,5,116,0,0,366,61,1,0,0,0,367,368,5,86, + 0,0,368,369,5,111,0,0,369,370,5,108,0,0,370,371,5,117,0,0,371,372, + 5,109,0,0,372,373,5,101,0,0,373,63,1,0,0,0,374,375,5,83,0,0,375, + 376,5,47,0,0,376,377,5,78,0,0,377,65,1,0,0,0,378,380,7,7,0,0,379, + 378,1,0,0,0,380,381,1,0,0,0,381,379,1,0,0,0,381,382,1,0,0,0,382, + 383,1,0,0,0,383,384,6,32,2,0,384,67,1,0,0,0,385,387,7,3,0,0,386, + 385,1,0,0,0,387,388,1,0,0,0,388,386,1,0,0,0,388,389,1,0,0,0,389, + 390,1,0,0,0,390,391,6,33,3,0,391,69,1,0,0,0,44,0,1,89,94,98,101, + 105,109,112,120,127,132,137,143,149,157,162,168,174,182,187,193, + 199,228,232,236,242,248,255,260,262,272,278,284,292,297,309,315, + 321,329,334,358,381,388,4,5,1,0,0,1,0,6,0,0,4,0,0 ] class SparkyPKLexer(Lexer): diff --git a/wwpdb/utils/nmr/pk/XeasyPKLexer.py b/wwpdb/utils/nmr/pk/XeasyPKLexer.py index d25abbe2c..6a41d3dff 100644 --- a/wwpdb/utils/nmr/pk/XeasyPKLexer.py +++ b/wwpdb/utils/nmr/pk/XeasyPKLexer.py @@ -10,214 +10,205 @@ def serializedATN(): return [ - 4,0,36,545,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2, + 4,0,37,527,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,6,-1,2,0,7,0,2,1,7,1,2, 2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2, 10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7, 16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2, 23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7,28,2,29,7, 29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,7,35,2, 36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7, - 42,2,43,7,43,1,0,1,0,5,0,98,8,0,10,0,12,0,101,9,0,1,0,1,0,1,0,1, - 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, - 0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, - 4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,6,3, - 6,186,8,6,1,6,1,6,1,7,3,7,191,8,7,1,7,1,7,3,7,195,8,7,1,8,3,8,198, - 8,8,1,8,1,8,3,8,202,8,8,1,8,1,8,3,8,206,8,8,1,8,3,8,209,8,8,1,9, - 1,9,1,9,1,9,1,9,1,9,3,9,217,8,9,1,10,1,10,1,11,4,11,222,8,11,11, - 11,12,11,223,1,12,4,12,227,8,12,11,12,12,12,228,1,12,5,12,232,8, - 12,10,12,12,12,235,9,12,1,12,5,12,238,8,12,10,12,12,12,241,9,12, - 1,12,5,12,244,8,12,10,12,12,12,247,9,12,1,12,1,12,1,13,4,13,252, - 8,13,11,13,12,13,253,1,13,5,13,257,8,13,10,13,12,13,260,9,13,1,13, - 5,13,263,8,13,10,13,12,13,266,9,13,1,13,5,13,269,8,13,10,13,12,13, - 272,9,13,1,13,1,13,1,14,4,14,277,8,14,11,14,12,14,278,1,14,5,14, - 282,8,14,10,14,12,14,285,9,14,1,14,5,14,288,8,14,10,14,12,14,291, - 9,14,1,14,5,14,294,8,14,10,14,12,14,297,9,14,1,14,1,14,1,15,1,15, - 1,16,1,16,1,17,1,17,3,17,307,8,17,1,18,1,18,3,18,311,8,18,1,19,1, - 19,3,19,315,8,19,1,20,1,20,5,20,319,8,20,10,20,12,20,322,9,20,1, - 21,4,21,325,8,21,11,21,12,21,326,1,21,1,21,1,22,1,22,1,22,5,22,334, - 8,22,10,22,12,22,337,9,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,4,23, - 346,8,23,11,23,12,23,347,1,23,1,23,4,23,352,8,23,11,23,12,23,353, - 1,23,1,23,4,23,358,8,23,11,23,12,23,359,1,23,1,23,4,23,364,8,23, - 11,23,12,23,365,1,23,1,23,4,23,370,8,23,11,23,12,23,371,1,23,1,23, - 1,23,1,23,1,23,1,23,3,23,380,8,23,1,23,5,23,383,8,23,10,23,12,23, - 386,9,23,1,23,4,23,389,8,23,11,23,12,23,390,1,23,1,23,1,24,1,24, - 1,24,4,24,398,8,24,11,24,12,24,399,1,24,1,24,4,24,404,8,24,11,24, - 12,24,405,1,24,1,24,4,24,410,8,24,11,24,12,24,411,1,24,1,24,4,24, - 416,8,24,11,24,12,24,417,1,24,1,24,4,24,422,8,24,11,24,12,24,423, - 1,24,1,24,1,24,1,24,1,24,1,24,3,24,432,8,24,1,24,5,24,435,8,24,10, - 24,12,24,438,9,24,1,24,1,24,1,25,3,25,443,8,25,1,25,1,25,1,26,4, - 26,448,8,26,11,26,12,26,449,1,26,1,26,1,27,4,27,455,8,27,11,27,12, - 27,456,1,27,1,27,1,28,1,28,1,29,4,29,464,8,29,11,29,12,29,465,1, - 29,1,29,1,30,4,30,471,8,30,11,30,12,30,472,1,30,1,30,1,31,3,31,478, - 8,31,1,31,1,31,1,32,1,32,1,33,4,33,485,8,33,11,33,12,33,486,1,33, - 1,33,1,34,4,34,492,8,34,11,34,12,34,493,1,34,1,34,1,35,1,35,1,36, - 4,36,501,8,36,11,36,12,36,502,1,36,1,36,1,37,4,37,508,8,37,11,37, - 12,37,509,1,37,1,37,1,38,1,38,1,39,4,39,517,8,39,11,39,12,39,518, - 1,39,1,39,1,40,4,40,524,8,40,11,40,12,40,525,1,40,1,40,1,41,1,41, - 1,42,4,42,533,8,42,11,42,12,42,534,1,42,1,42,1,43,4,43,540,8,43, - 11,43,12,43,541,1,43,1,43,1,335,0,44,7,1,9,2,11,3,13,4,15,5,17,6, + 42,2,43,7,43,2,44,7,44,1,0,1,0,5,0,100,8,0,10,0,12,0,103,9,0,1,0, + 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4, + 1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5, + 1,5,1,6,3,6,188,8,6,1,6,1,6,1,7,3,7,193,8,7,1,7,1,7,3,7,197,8,7, + 1,8,3,8,200,8,8,1,8,1,8,3,8,204,8,8,1,8,1,8,3,8,208,8,8,1,8,3,8, + 211,8,8,1,9,1,9,1,9,1,9,1,9,1,9,3,9,219,8,9,1,10,1,10,1,11,4,11, + 224,8,11,11,11,12,11,225,1,12,4,12,229,8,12,11,12,12,12,230,1,12, + 5,12,234,8,12,10,12,12,12,237,9,12,1,12,5,12,240,8,12,10,12,12,12, + 243,9,12,1,12,5,12,246,8,12,10,12,12,12,249,9,12,1,12,1,12,1,13, + 4,13,254,8,13,11,13,12,13,255,1,13,5,13,259,8,13,10,13,12,13,262, + 9,13,1,13,5,13,265,8,13,10,13,12,13,268,9,13,1,13,5,13,271,8,13, + 10,13,12,13,274,9,13,1,13,1,13,1,14,4,14,279,8,14,11,14,12,14,280, + 1,14,5,14,284,8,14,10,14,12,14,287,9,14,1,14,5,14,290,8,14,10,14, + 12,14,293,9,14,1,14,5,14,296,8,14,10,14,12,14,299,9,14,1,14,1,14, + 1,15,1,15,1,16,1,16,1,17,1,17,3,17,309,8,17,1,18,1,18,3,18,313,8, + 18,1,19,1,19,3,19,317,8,19,1,20,1,20,5,20,321,8,20,10,20,12,20,324, + 9,20,1,21,4,21,327,8,21,11,21,12,21,328,1,21,1,21,1,22,4,22,334, + 8,22,11,22,12,22,335,1,23,1,23,1,23,5,23,341,8,23,10,23,12,23,344, + 9,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,4,24,353,8,24,11,24,12,24, + 354,1,24,1,24,4,24,359,8,24,11,24,12,24,360,1,24,1,24,4,24,365,8, + 24,11,24,12,24,366,1,24,1,24,1,24,1,24,1,24,1,24,3,24,375,8,24,1, + 24,5,24,378,8,24,10,24,12,24,381,9,24,1,24,1,24,1,24,1,24,1,25,1, + 25,1,25,4,25,390,8,25,11,25,12,25,391,1,25,1,25,4,25,396,8,25,11, + 25,12,25,397,1,25,1,25,4,25,402,8,25,11,25,12,25,403,1,25,1,25,1, + 25,1,25,1,25,1,25,3,25,412,8,25,1,25,5,25,415,8,25,10,25,12,25,418, + 9,25,1,25,1,25,1,25,1,25,1,26,3,26,425,8,26,1,26,1,26,1,27,4,27, + 430,8,27,11,27,12,27,431,1,27,1,27,1,28,4,28,437,8,28,11,28,12,28, + 438,1,28,1,28,1,29,1,29,1,30,4,30,446,8,30,11,30,12,30,447,1,30, + 1,30,1,31,4,31,453,8,31,11,31,12,31,454,1,31,1,31,1,32,3,32,460, + 8,32,1,32,1,32,1,33,1,33,1,34,4,34,467,8,34,11,34,12,34,468,1,34, + 1,34,1,35,4,35,474,8,35,11,35,12,35,475,1,35,1,35,1,36,1,36,1,37, + 4,37,483,8,37,11,37,12,37,484,1,37,1,37,1,38,4,38,490,8,38,11,38, + 12,38,491,1,38,1,38,1,39,1,39,1,40,4,40,499,8,40,11,40,12,40,500, + 1,40,1,40,1,41,4,41,506,8,41,11,41,12,41,507,1,41,1,41,1,42,1,42, + 1,43,4,43,515,8,43,11,43,12,43,516,1,43,1,43,1,44,4,44,522,8,44, + 11,44,12,44,523,1,44,1,44,1,342,0,45,7,1,9,2,11,3,13,4,15,5,17,6, 19,7,21,8,23,9,25,0,27,0,29,0,31,10,33,11,35,12,37,13,39,0,41,0, 43,0,45,0,47,0,49,14,51,15,53,16,55,17,57,18,59,19,61,20,63,21,65, 22,67,23,69,24,71,25,73,26,75,27,77,28,79,29,81,30,83,31,85,32,87, - 33,89,34,91,35,93,36,7,0,1,2,3,4,5,6,11,2,0,9,10,13,13,2,0,43,43, - 45,45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13,2,0,65,90,97,122, - 5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39,39,3,0,9,10,13,13, - 32,32,5,0,33,33,35,35,38,38,59,59,92,92,2,0,9,9,32,32,598,0,7,1, - 0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1, - 0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,31,1,0,0,0,0,33,1, - 0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1, - 0,0,0,0,55,1,0,0,0,1,57,1,0,0,0,1,59,1,0,0,0,1,61,1,0,0,0,2,63,1, - 0,0,0,2,65,1,0,0,0,2,67,1,0,0,0,3,69,1,0,0,0,3,71,1,0,0,0,3,73,1, - 0,0,0,3,75,1,0,0,0,4,77,1,0,0,0,4,79,1,0,0,0,4,81,1,0,0,0,5,83,1, - 0,0,0,5,85,1,0,0,0,5,87,1,0,0,0,6,89,1,0,0,0,6,91,1,0,0,0,6,93,1, - 0,0,0,7,95,1,0,0,0,9,125,1,0,0,0,11,135,1,0,0,0,13,144,1,0,0,0,15, - 159,1,0,0,0,17,171,1,0,0,0,19,185,1,0,0,0,21,190,1,0,0,0,23,197, - 1,0,0,0,25,216,1,0,0,0,27,218,1,0,0,0,29,221,1,0,0,0,31,226,1,0, - 0,0,33,251,1,0,0,0,35,276,1,0,0,0,37,300,1,0,0,0,39,302,1,0,0,0, - 41,306,1,0,0,0,43,310,1,0,0,0,45,314,1,0,0,0,47,316,1,0,0,0,49,324, - 1,0,0,0,51,330,1,0,0,0,53,379,1,0,0,0,55,431,1,0,0,0,57,442,1,0, - 0,0,59,447,1,0,0,0,61,454,1,0,0,0,63,460,1,0,0,0,65,463,1,0,0,0, - 67,470,1,0,0,0,69,477,1,0,0,0,71,481,1,0,0,0,73,484,1,0,0,0,75,491, - 1,0,0,0,77,497,1,0,0,0,79,500,1,0,0,0,81,507,1,0,0,0,83,513,1,0, - 0,0,85,516,1,0,0,0,87,523,1,0,0,0,89,529,1,0,0,0,91,532,1,0,0,0, - 93,539,1,0,0,0,95,99,5,35,0,0,96,98,8,0,0,0,97,96,1,0,0,0,98,101, - 1,0,0,0,99,97,1,0,0,0,99,100,1,0,0,0,100,102,1,0,0,0,101,99,1,0, - 0,0,102,103,5,78,0,0,103,104,5,117,0,0,104,105,5,109,0,0,105,106, - 5,98,0,0,106,107,5,101,0,0,107,108,5,114,0,0,108,109,5,32,0,0,109, - 110,5,111,0,0,110,111,5,102,0,0,111,112,5,32,0,0,112,113,5,100,0, - 0,113,114,5,105,0,0,114,115,5,109,0,0,115,116,5,101,0,0,116,117, - 5,110,0,0,117,118,5,115,0,0,118,119,5,105,0,0,119,120,5,111,0,0, - 120,121,5,110,0,0,121,122,5,115,0,0,122,123,1,0,0,0,123,124,6,0, - 0,0,124,8,1,0,0,0,125,126,5,35,0,0,126,127,5,70,0,0,127,128,5,79, - 0,0,128,129,5,82,0,0,129,130,5,77,0,0,130,131,5,65,0,0,131,132,5, - 84,0,0,132,133,1,0,0,0,133,134,6,1,1,0,134,10,1,0,0,0,135,136,5, - 35,0,0,136,137,5,73,0,0,137,138,5,78,0,0,138,139,5,65,0,0,139,140, - 5,77,0,0,140,141,5,69,0,0,141,142,1,0,0,0,142,143,6,2,2,0,143,12, - 1,0,0,0,144,145,5,35,0,0,145,146,5,67,0,0,146,147,5,89,0,0,147,148, - 5,65,0,0,148,149,5,78,0,0,149,150,5,65,0,0,150,151,5,70,0,0,151, - 152,5,79,0,0,152,153,5,82,0,0,153,154,5,77,0,0,154,155,5,65,0,0, - 155,156,5,84,0,0,156,157,1,0,0,0,157,158,6,3,3,0,158,14,1,0,0,0, - 159,160,5,35,0,0,160,161,5,83,0,0,161,162,5,80,0,0,162,163,5,69, - 0,0,163,164,5,67,0,0,164,165,5,84,0,0,165,166,5,82,0,0,166,167,5, - 85,0,0,167,168,5,77,0,0,168,169,1,0,0,0,169,170,6,4,4,0,170,16,1, - 0,0,0,171,172,5,35,0,0,172,173,5,84,0,0,173,174,5,79,0,0,174,175, - 5,76,0,0,175,176,5,69,0,0,176,177,5,82,0,0,177,178,5,65,0,0,178, - 179,5,78,0,0,179,180,5,67,0,0,180,181,5,69,0,0,181,182,1,0,0,0,182, - 183,6,5,5,0,183,18,1,0,0,0,184,186,7,1,0,0,185,184,1,0,0,0,185,186, - 1,0,0,0,186,187,1,0,0,0,187,188,3,29,11,0,188,20,1,0,0,0,189,191, - 7,1,0,0,190,189,1,0,0,0,190,191,1,0,0,0,191,194,1,0,0,0,192,195, - 3,29,11,0,193,195,3,25,9,0,194,192,1,0,0,0,194,193,1,0,0,0,195,22, - 1,0,0,0,196,198,7,1,0,0,197,196,1,0,0,0,197,198,1,0,0,0,198,201, - 1,0,0,0,199,202,3,29,11,0,200,202,3,25,9,0,201,199,1,0,0,0,201,200, - 1,0,0,0,202,208,1,0,0,0,203,205,7,2,0,0,204,206,7,1,0,0,205,204, - 1,0,0,0,205,206,1,0,0,0,206,207,1,0,0,0,207,209,3,29,11,0,208,203, - 1,0,0,0,208,209,1,0,0,0,209,24,1,0,0,0,210,211,3,29,11,0,211,212, - 5,46,0,0,212,213,3,29,11,0,213,217,1,0,0,0,214,215,5,46,0,0,215, - 217,3,29,11,0,216,210,1,0,0,0,216,214,1,0,0,0,217,26,1,0,0,0,218, - 219,7,3,0,0,219,28,1,0,0,0,220,222,3,27,10,0,221,220,1,0,0,0,222, - 223,1,0,0,0,223,221,1,0,0,0,223,224,1,0,0,0,224,30,1,0,0,0,225,227, - 5,35,0,0,226,225,1,0,0,0,227,228,1,0,0,0,228,226,1,0,0,0,228,229, - 1,0,0,0,229,233,1,0,0,0,230,232,8,4,0,0,231,230,1,0,0,0,232,235, - 1,0,0,0,233,231,1,0,0,0,233,234,1,0,0,0,234,239,1,0,0,0,235,233, - 1,0,0,0,236,238,5,35,0,0,237,236,1,0,0,0,238,241,1,0,0,0,239,237, - 1,0,0,0,239,240,1,0,0,0,240,245,1,0,0,0,241,239,1,0,0,0,242,244, - 8,4,0,0,243,242,1,0,0,0,244,247,1,0,0,0,245,243,1,0,0,0,245,246, - 1,0,0,0,246,248,1,0,0,0,247,245,1,0,0,0,248,249,6,12,6,0,249,32, - 1,0,0,0,250,252,5,33,0,0,251,250,1,0,0,0,252,253,1,0,0,0,253,251, - 1,0,0,0,253,254,1,0,0,0,254,258,1,0,0,0,255,257,8,4,0,0,256,255, - 1,0,0,0,257,260,1,0,0,0,258,256,1,0,0,0,258,259,1,0,0,0,259,264, - 1,0,0,0,260,258,1,0,0,0,261,263,5,33,0,0,262,261,1,0,0,0,263,266, - 1,0,0,0,264,262,1,0,0,0,264,265,1,0,0,0,265,270,1,0,0,0,266,264, - 1,0,0,0,267,269,8,4,0,0,268,267,1,0,0,0,269,272,1,0,0,0,270,268, - 1,0,0,0,270,271,1,0,0,0,271,273,1,0,0,0,272,270,1,0,0,0,273,274, - 6,13,6,0,274,34,1,0,0,0,275,277,5,59,0,0,276,275,1,0,0,0,277,278, - 1,0,0,0,278,276,1,0,0,0,278,279,1,0,0,0,279,283,1,0,0,0,280,282, - 8,4,0,0,281,280,1,0,0,0,282,285,1,0,0,0,283,281,1,0,0,0,283,284, - 1,0,0,0,284,289,1,0,0,0,285,283,1,0,0,0,286,288,5,59,0,0,287,286, - 1,0,0,0,288,291,1,0,0,0,289,287,1,0,0,0,289,290,1,0,0,0,290,295, - 1,0,0,0,291,289,1,0,0,0,292,294,8,4,0,0,293,292,1,0,0,0,294,297, - 1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0,296,298,1,0,0,0,297,295, - 1,0,0,0,298,299,6,14,6,0,299,36,1,0,0,0,300,301,3,47,20,0,301,38, - 1,0,0,0,302,303,7,5,0,0,303,40,1,0,0,0,304,307,3,39,16,0,305,307, - 3,27,10,0,306,304,1,0,0,0,306,305,1,0,0,0,307,42,1,0,0,0,308,311, - 3,41,17,0,309,311,7,6,0,0,310,308,1,0,0,0,310,309,1,0,0,0,311,44, - 1,0,0,0,312,315,3,43,18,0,313,315,7,7,0,0,314,312,1,0,0,0,314,313, - 1,0,0,0,315,46,1,0,0,0,316,320,3,43,18,0,317,319,3,45,19,0,318,317, - 1,0,0,0,319,322,1,0,0,0,320,318,1,0,0,0,320,321,1,0,0,0,321,48,1, - 0,0,0,322,320,1,0,0,0,323,325,7,8,0,0,324,323,1,0,0,0,325,326,1, - 0,0,0,326,324,1,0,0,0,326,327,1,0,0,0,327,328,1,0,0,0,328,329,6, - 21,7,0,329,50,1,0,0,0,330,335,5,123,0,0,331,334,3,51,22,0,332,334, - 9,0,0,0,333,331,1,0,0,0,333,332,1,0,0,0,334,337,1,0,0,0,335,336, - 1,0,0,0,335,333,1,0,0,0,336,338,1,0,0,0,337,335,1,0,0,0,338,339, - 5,125,0,0,339,340,1,0,0,0,340,341,6,22,6,0,341,52,1,0,0,0,342,380, - 7,9,0,0,343,345,5,47,0,0,344,346,5,47,0,0,345,344,1,0,0,0,346,347, - 1,0,0,0,347,345,1,0,0,0,347,348,1,0,0,0,348,380,1,0,0,0,349,351, - 5,42,0,0,350,352,5,42,0,0,351,350,1,0,0,0,352,353,1,0,0,0,353,351, - 1,0,0,0,353,354,1,0,0,0,354,380,1,0,0,0,355,357,5,45,0,0,356,358, - 5,45,0,0,357,356,1,0,0,0,358,359,1,0,0,0,359,357,1,0,0,0,359,360, - 1,0,0,0,360,380,1,0,0,0,361,363,5,43,0,0,362,364,5,43,0,0,363,362, - 1,0,0,0,364,365,1,0,0,0,365,363,1,0,0,0,365,366,1,0,0,0,366,380, - 1,0,0,0,367,369,5,61,0,0,368,370,5,61,0,0,369,368,1,0,0,0,370,371, - 1,0,0,0,371,369,1,0,0,0,371,372,1,0,0,0,372,380,1,0,0,0,373,374, - 5,82,0,0,374,375,5,69,0,0,375,376,5,77,0,0,376,377,5,65,0,0,377, - 378,5,82,0,0,378,380,5,75,0,0,379,342,1,0,0,0,379,343,1,0,0,0,379, - 349,1,0,0,0,379,355,1,0,0,0,379,361,1,0,0,0,379,367,1,0,0,0,379, - 373,1,0,0,0,380,384,1,0,0,0,381,383,5,32,0,0,382,381,1,0,0,0,383, - 386,1,0,0,0,384,382,1,0,0,0,384,385,1,0,0,0,385,388,1,0,0,0,386, - 384,1,0,0,0,387,389,7,4,0,0,388,387,1,0,0,0,389,390,1,0,0,0,390, - 388,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0,392,393,6,23,6,0,393, - 54,1,0,0,0,394,432,7,9,0,0,395,397,5,47,0,0,396,398,5,47,0,0,397, - 396,1,0,0,0,398,399,1,0,0,0,399,397,1,0,0,0,399,400,1,0,0,0,400, - 432,1,0,0,0,401,403,5,42,0,0,402,404,5,42,0,0,403,402,1,0,0,0,404, - 405,1,0,0,0,405,403,1,0,0,0,405,406,1,0,0,0,406,432,1,0,0,0,407, - 409,5,45,0,0,408,410,5,45,0,0,409,408,1,0,0,0,410,411,1,0,0,0,411, - 409,1,0,0,0,411,412,1,0,0,0,412,432,1,0,0,0,413,415,5,43,0,0,414, - 416,5,43,0,0,415,414,1,0,0,0,416,417,1,0,0,0,417,415,1,0,0,0,417, - 418,1,0,0,0,418,432,1,0,0,0,419,421,5,61,0,0,420,422,5,61,0,0,421, - 420,1,0,0,0,422,423,1,0,0,0,423,421,1,0,0,0,423,424,1,0,0,0,424, - 432,1,0,0,0,425,426,5,82,0,0,426,427,5,69,0,0,427,428,5,77,0,0,428, - 429,5,65,0,0,429,430,5,82,0,0,430,432,5,75,0,0,431,394,1,0,0,0,431, - 395,1,0,0,0,431,401,1,0,0,0,431,407,1,0,0,0,431,413,1,0,0,0,431, - 419,1,0,0,0,431,425,1,0,0,0,432,436,1,0,0,0,433,435,8,4,0,0,434, - 433,1,0,0,0,435,438,1,0,0,0,436,434,1,0,0,0,436,437,1,0,0,0,437, - 439,1,0,0,0,438,436,1,0,0,0,439,440,6,24,6,0,440,56,1,0,0,0,441, - 443,7,1,0,0,442,441,1,0,0,0,442,443,1,0,0,0,443,444,1,0,0,0,444, - 445,3,29,11,0,445,58,1,0,0,0,446,448,7,10,0,0,447,446,1,0,0,0,448, - 449,1,0,0,0,449,447,1,0,0,0,449,450,1,0,0,0,450,451,1,0,0,0,451, - 452,6,26,7,0,452,60,1,0,0,0,453,455,7,4,0,0,454,453,1,0,0,0,455, - 456,1,0,0,0,456,454,1,0,0,0,456,457,1,0,0,0,457,458,1,0,0,0,458, - 459,6,27,8,0,459,62,1,0,0,0,460,461,3,47,20,0,461,64,1,0,0,0,462, - 464,7,10,0,0,463,462,1,0,0,0,464,465,1,0,0,0,465,463,1,0,0,0,465, - 466,1,0,0,0,466,467,1,0,0,0,467,468,6,29,7,0,468,66,1,0,0,0,469, - 471,7,4,0,0,470,469,1,0,0,0,471,472,1,0,0,0,472,470,1,0,0,0,472, - 473,1,0,0,0,473,474,1,0,0,0,474,475,6,30,8,0,475,68,1,0,0,0,476, - 478,7,1,0,0,477,476,1,0,0,0,477,478,1,0,0,0,478,479,1,0,0,0,479, - 480,3,29,11,0,480,70,1,0,0,0,481,482,3,47,20,0,482,72,1,0,0,0,483, - 485,7,10,0,0,484,483,1,0,0,0,485,486,1,0,0,0,486,484,1,0,0,0,486, - 487,1,0,0,0,487,488,1,0,0,0,488,489,6,33,7,0,489,74,1,0,0,0,490, - 492,7,4,0,0,491,490,1,0,0,0,492,493,1,0,0,0,493,491,1,0,0,0,493, - 494,1,0,0,0,494,495,1,0,0,0,495,496,6,34,8,0,496,76,1,0,0,0,497, - 498,3,47,20,0,498,78,1,0,0,0,499,501,7,10,0,0,500,499,1,0,0,0,501, - 502,1,0,0,0,502,500,1,0,0,0,502,503,1,0,0,0,503,504,1,0,0,0,504, - 505,6,36,7,0,505,80,1,0,0,0,506,508,7,4,0,0,507,506,1,0,0,0,508, - 509,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0,510,511,1,0,0,0,511, - 512,6,37,8,0,512,82,1,0,0,0,513,514,3,47,20,0,514,84,1,0,0,0,515, - 517,7,10,0,0,516,515,1,0,0,0,517,518,1,0,0,0,518,516,1,0,0,0,518, - 519,1,0,0,0,519,520,1,0,0,0,520,521,6,39,7,0,521,86,1,0,0,0,522, - 524,7,4,0,0,523,522,1,0,0,0,524,525,1,0,0,0,525,523,1,0,0,0,525, - 526,1,0,0,0,526,527,1,0,0,0,527,528,6,40,8,0,528,88,1,0,0,0,529, - 530,3,21,7,0,530,90,1,0,0,0,531,533,7,10,0,0,532,531,1,0,0,0,533, - 534,1,0,0,0,534,532,1,0,0,0,534,535,1,0,0,0,535,536,1,0,0,0,536, - 537,6,42,7,0,537,92,1,0,0,0,538,540,7,4,0,0,539,538,1,0,0,0,540, - 541,1,0,0,0,541,539,1,0,0,0,541,542,1,0,0,0,542,543,1,0,0,0,543, - 544,6,43,8,0,544,94,1,0,0,0,65,0,1,2,3,4,5,6,99,185,190,194,197, - 201,205,208,216,223,228,233,239,245,253,258,264,270,278,283,289, - 295,306,310,314,320,326,333,335,347,353,359,365,371,379,384,390, - 399,405,411,417,423,431,436,442,449,456,465,472,477,486,493,502, - 509,518,525,534,541,9,5,1,0,5,2,0,5,3,0,5,4,0,5,5,0,5,6,0,0,1,0, - 6,0,0,4,0,0 + 33,89,34,91,35,93,36,95,37,7,0,1,2,3,4,5,6,11,2,0,9,10,13,13,2,0, + 43,43,45,45,2,0,69,69,101,101,1,0,48,57,2,0,10,10,13,13,2,0,65,90, + 97,122,5,0,35,35,42,43,45,46,63,63,95,95,2,0,34,34,39,39,3,0,9,10, + 13,13,32,32,5,0,33,33,35,35,38,38,59,59,92,92,2,0,9,9,32,32,572, + 0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0, + 17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,31,1,0,0,0,0, + 33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0, + 53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,1,59,1,0,0,0,1,61,1,0,0,0,1, + 63,1,0,0,0,2,65,1,0,0,0,2,67,1,0,0,0,2,69,1,0,0,0,3,71,1,0,0,0,3, + 73,1,0,0,0,3,75,1,0,0,0,3,77,1,0,0,0,4,79,1,0,0,0,4,81,1,0,0,0,4, + 83,1,0,0,0,5,85,1,0,0,0,5,87,1,0,0,0,5,89,1,0,0,0,6,91,1,0,0,0,6, + 93,1,0,0,0,6,95,1,0,0,0,7,97,1,0,0,0,9,127,1,0,0,0,11,137,1,0,0, + 0,13,146,1,0,0,0,15,161,1,0,0,0,17,173,1,0,0,0,19,187,1,0,0,0,21, + 192,1,0,0,0,23,199,1,0,0,0,25,218,1,0,0,0,27,220,1,0,0,0,29,223, + 1,0,0,0,31,228,1,0,0,0,33,253,1,0,0,0,35,278,1,0,0,0,37,302,1,0, + 0,0,39,304,1,0,0,0,41,308,1,0,0,0,43,312,1,0,0,0,45,316,1,0,0,0, + 47,318,1,0,0,0,49,326,1,0,0,0,51,333,1,0,0,0,53,337,1,0,0,0,55,374, + 1,0,0,0,57,411,1,0,0,0,59,424,1,0,0,0,61,429,1,0,0,0,63,436,1,0, + 0,0,65,442,1,0,0,0,67,445,1,0,0,0,69,452,1,0,0,0,71,459,1,0,0,0, + 73,463,1,0,0,0,75,466,1,0,0,0,77,473,1,0,0,0,79,479,1,0,0,0,81,482, + 1,0,0,0,83,489,1,0,0,0,85,495,1,0,0,0,87,498,1,0,0,0,89,505,1,0, + 0,0,91,511,1,0,0,0,93,514,1,0,0,0,95,521,1,0,0,0,97,101,5,35,0,0, + 98,100,8,0,0,0,99,98,1,0,0,0,100,103,1,0,0,0,101,99,1,0,0,0,101, + 102,1,0,0,0,102,104,1,0,0,0,103,101,1,0,0,0,104,105,5,78,0,0,105, + 106,5,117,0,0,106,107,5,109,0,0,107,108,5,98,0,0,108,109,5,101,0, + 0,109,110,5,114,0,0,110,111,5,32,0,0,111,112,5,111,0,0,112,113,5, + 102,0,0,113,114,5,32,0,0,114,115,5,100,0,0,115,116,5,105,0,0,116, + 117,5,109,0,0,117,118,5,101,0,0,118,119,5,110,0,0,119,120,5,115, + 0,0,120,121,5,105,0,0,121,122,5,111,0,0,122,123,5,110,0,0,123,124, + 5,115,0,0,124,125,1,0,0,0,125,126,6,0,0,0,126,8,1,0,0,0,127,128, + 5,35,0,0,128,129,5,70,0,0,129,130,5,79,0,0,130,131,5,82,0,0,131, + 132,5,77,0,0,132,133,5,65,0,0,133,134,5,84,0,0,134,135,1,0,0,0,135, + 136,6,1,1,0,136,10,1,0,0,0,137,138,5,35,0,0,138,139,5,73,0,0,139, + 140,5,78,0,0,140,141,5,65,0,0,141,142,5,77,0,0,142,143,5,69,0,0, + 143,144,1,0,0,0,144,145,6,2,2,0,145,12,1,0,0,0,146,147,5,35,0,0, + 147,148,5,67,0,0,148,149,5,89,0,0,149,150,5,65,0,0,150,151,5,78, + 0,0,151,152,5,65,0,0,152,153,5,70,0,0,153,154,5,79,0,0,154,155,5, + 82,0,0,155,156,5,77,0,0,156,157,5,65,0,0,157,158,5,84,0,0,158,159, + 1,0,0,0,159,160,6,3,3,0,160,14,1,0,0,0,161,162,5,35,0,0,162,163, + 5,83,0,0,163,164,5,80,0,0,164,165,5,69,0,0,165,166,5,67,0,0,166, + 167,5,84,0,0,167,168,5,82,0,0,168,169,5,85,0,0,169,170,5,77,0,0, + 170,171,1,0,0,0,171,172,6,4,4,0,172,16,1,0,0,0,173,174,5,35,0,0, + 174,175,5,84,0,0,175,176,5,79,0,0,176,177,5,76,0,0,177,178,5,69, + 0,0,178,179,5,82,0,0,179,180,5,65,0,0,180,181,5,78,0,0,181,182,5, + 67,0,0,182,183,5,69,0,0,183,184,1,0,0,0,184,185,6,5,5,0,185,18,1, + 0,0,0,186,188,7,1,0,0,187,186,1,0,0,0,187,188,1,0,0,0,188,189,1, + 0,0,0,189,190,3,29,11,0,190,20,1,0,0,0,191,193,7,1,0,0,192,191,1, + 0,0,0,192,193,1,0,0,0,193,196,1,0,0,0,194,197,3,29,11,0,195,197, + 3,25,9,0,196,194,1,0,0,0,196,195,1,0,0,0,197,22,1,0,0,0,198,200, + 7,1,0,0,199,198,1,0,0,0,199,200,1,0,0,0,200,203,1,0,0,0,201,204, + 3,29,11,0,202,204,3,25,9,0,203,201,1,0,0,0,203,202,1,0,0,0,204,210, + 1,0,0,0,205,207,7,2,0,0,206,208,7,1,0,0,207,206,1,0,0,0,207,208, + 1,0,0,0,208,209,1,0,0,0,209,211,3,29,11,0,210,205,1,0,0,0,210,211, + 1,0,0,0,211,24,1,0,0,0,212,213,3,29,11,0,213,214,5,46,0,0,214,215, + 3,29,11,0,215,219,1,0,0,0,216,217,5,46,0,0,217,219,3,29,11,0,218, + 212,1,0,0,0,218,216,1,0,0,0,219,26,1,0,0,0,220,221,7,3,0,0,221,28, + 1,0,0,0,222,224,3,27,10,0,223,222,1,0,0,0,224,225,1,0,0,0,225,223, + 1,0,0,0,225,226,1,0,0,0,226,30,1,0,0,0,227,229,5,35,0,0,228,227, + 1,0,0,0,229,230,1,0,0,0,230,228,1,0,0,0,230,231,1,0,0,0,231,235, + 1,0,0,0,232,234,8,4,0,0,233,232,1,0,0,0,234,237,1,0,0,0,235,233, + 1,0,0,0,235,236,1,0,0,0,236,241,1,0,0,0,237,235,1,0,0,0,238,240, + 5,35,0,0,239,238,1,0,0,0,240,243,1,0,0,0,241,239,1,0,0,0,241,242, + 1,0,0,0,242,247,1,0,0,0,243,241,1,0,0,0,244,246,8,4,0,0,245,244, + 1,0,0,0,246,249,1,0,0,0,247,245,1,0,0,0,247,248,1,0,0,0,248,250, + 1,0,0,0,249,247,1,0,0,0,250,251,6,12,6,0,251,32,1,0,0,0,252,254, + 5,33,0,0,253,252,1,0,0,0,254,255,1,0,0,0,255,253,1,0,0,0,255,256, + 1,0,0,0,256,260,1,0,0,0,257,259,8,4,0,0,258,257,1,0,0,0,259,262, + 1,0,0,0,260,258,1,0,0,0,260,261,1,0,0,0,261,266,1,0,0,0,262,260, + 1,0,0,0,263,265,5,33,0,0,264,263,1,0,0,0,265,268,1,0,0,0,266,264, + 1,0,0,0,266,267,1,0,0,0,267,272,1,0,0,0,268,266,1,0,0,0,269,271, + 8,4,0,0,270,269,1,0,0,0,271,274,1,0,0,0,272,270,1,0,0,0,272,273, + 1,0,0,0,273,275,1,0,0,0,274,272,1,0,0,0,275,276,6,13,6,0,276,34, + 1,0,0,0,277,279,5,59,0,0,278,277,1,0,0,0,279,280,1,0,0,0,280,278, + 1,0,0,0,280,281,1,0,0,0,281,285,1,0,0,0,282,284,8,4,0,0,283,282, + 1,0,0,0,284,287,1,0,0,0,285,283,1,0,0,0,285,286,1,0,0,0,286,291, + 1,0,0,0,287,285,1,0,0,0,288,290,5,59,0,0,289,288,1,0,0,0,290,293, + 1,0,0,0,291,289,1,0,0,0,291,292,1,0,0,0,292,297,1,0,0,0,293,291, + 1,0,0,0,294,296,8,4,0,0,295,294,1,0,0,0,296,299,1,0,0,0,297,295, + 1,0,0,0,297,298,1,0,0,0,298,300,1,0,0,0,299,297,1,0,0,0,300,301, + 6,14,6,0,301,36,1,0,0,0,302,303,3,47,20,0,303,38,1,0,0,0,304,305, + 7,5,0,0,305,40,1,0,0,0,306,309,3,39,16,0,307,309,3,27,10,0,308,306, + 1,0,0,0,308,307,1,0,0,0,309,42,1,0,0,0,310,313,3,41,17,0,311,313, + 7,6,0,0,312,310,1,0,0,0,312,311,1,0,0,0,313,44,1,0,0,0,314,317,3, + 43,18,0,315,317,7,7,0,0,316,314,1,0,0,0,316,315,1,0,0,0,317,46,1, + 0,0,0,318,322,3,43,18,0,319,321,3,45,19,0,320,319,1,0,0,0,321,324, + 1,0,0,0,322,320,1,0,0,0,322,323,1,0,0,0,323,48,1,0,0,0,324,322,1, + 0,0,0,325,327,7,8,0,0,326,325,1,0,0,0,327,328,1,0,0,0,328,326,1, + 0,0,0,328,329,1,0,0,0,329,330,1,0,0,0,330,331,6,21,7,0,331,50,1, + 0,0,0,332,334,7,4,0,0,333,332,1,0,0,0,334,335,1,0,0,0,335,333,1, + 0,0,0,335,336,1,0,0,0,336,52,1,0,0,0,337,342,5,123,0,0,338,341,3, + 53,23,0,339,341,9,0,0,0,340,338,1,0,0,0,340,339,1,0,0,0,341,344, + 1,0,0,0,342,343,1,0,0,0,342,340,1,0,0,0,343,345,1,0,0,0,344,342, + 1,0,0,0,345,346,5,125,0,0,346,347,1,0,0,0,347,348,6,23,6,0,348,54, + 1,0,0,0,349,375,7,9,0,0,350,352,5,47,0,0,351,353,5,47,0,0,352,351, + 1,0,0,0,353,354,1,0,0,0,354,352,1,0,0,0,354,355,1,0,0,0,355,375, + 1,0,0,0,356,358,5,42,0,0,357,359,5,42,0,0,358,357,1,0,0,0,359,360, + 1,0,0,0,360,358,1,0,0,0,360,361,1,0,0,0,361,375,1,0,0,0,362,364, + 5,61,0,0,363,365,5,61,0,0,364,363,1,0,0,0,365,366,1,0,0,0,366,364, + 1,0,0,0,366,367,1,0,0,0,367,375,1,0,0,0,368,369,5,82,0,0,369,370, + 5,69,0,0,370,371,5,77,0,0,371,372,5,65,0,0,372,373,5,82,0,0,373, + 375,5,75,0,0,374,349,1,0,0,0,374,350,1,0,0,0,374,356,1,0,0,0,374, + 362,1,0,0,0,374,368,1,0,0,0,375,379,1,0,0,0,376,378,5,32,0,0,377, + 376,1,0,0,0,378,381,1,0,0,0,379,377,1,0,0,0,379,380,1,0,0,0,380, + 382,1,0,0,0,381,379,1,0,0,0,382,383,3,51,22,0,383,384,1,0,0,0,384, + 385,6,24,6,0,385,56,1,0,0,0,386,412,7,9,0,0,387,389,5,47,0,0,388, + 390,5,47,0,0,389,388,1,0,0,0,390,391,1,0,0,0,391,389,1,0,0,0,391, + 392,1,0,0,0,392,412,1,0,0,0,393,395,5,42,0,0,394,396,5,42,0,0,395, + 394,1,0,0,0,396,397,1,0,0,0,397,395,1,0,0,0,397,398,1,0,0,0,398, + 412,1,0,0,0,399,401,5,61,0,0,400,402,5,61,0,0,401,400,1,0,0,0,402, + 403,1,0,0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,412,1,0,0,0,405, + 406,5,82,0,0,406,407,5,69,0,0,407,408,5,77,0,0,408,409,5,65,0,0, + 409,410,5,82,0,0,410,412,5,75,0,0,411,386,1,0,0,0,411,387,1,0,0, + 0,411,393,1,0,0,0,411,399,1,0,0,0,411,405,1,0,0,0,412,416,1,0,0, + 0,413,415,8,4,0,0,414,413,1,0,0,0,415,418,1,0,0,0,416,414,1,0,0, + 0,416,417,1,0,0,0,417,419,1,0,0,0,418,416,1,0,0,0,419,420,3,51,22, + 0,420,421,1,0,0,0,421,422,6,25,6,0,422,58,1,0,0,0,423,425,7,1,0, + 0,424,423,1,0,0,0,424,425,1,0,0,0,425,426,1,0,0,0,426,427,3,29,11, + 0,427,60,1,0,0,0,428,430,7,10,0,0,429,428,1,0,0,0,430,431,1,0,0, + 0,431,429,1,0,0,0,431,432,1,0,0,0,432,433,1,0,0,0,433,434,6,27,7, + 0,434,62,1,0,0,0,435,437,7,4,0,0,436,435,1,0,0,0,437,438,1,0,0,0, + 438,436,1,0,0,0,438,439,1,0,0,0,439,440,1,0,0,0,440,441,6,28,8,0, + 441,64,1,0,0,0,442,443,3,47,20,0,443,66,1,0,0,0,444,446,7,10,0,0, + 445,444,1,0,0,0,446,447,1,0,0,0,447,445,1,0,0,0,447,448,1,0,0,0, + 448,449,1,0,0,0,449,450,6,30,7,0,450,68,1,0,0,0,451,453,7,4,0,0, + 452,451,1,0,0,0,453,454,1,0,0,0,454,452,1,0,0,0,454,455,1,0,0,0, + 455,456,1,0,0,0,456,457,6,31,8,0,457,70,1,0,0,0,458,460,7,1,0,0, + 459,458,1,0,0,0,459,460,1,0,0,0,460,461,1,0,0,0,461,462,3,29,11, + 0,462,72,1,0,0,0,463,464,3,47,20,0,464,74,1,0,0,0,465,467,7,10,0, + 0,466,465,1,0,0,0,467,468,1,0,0,0,468,466,1,0,0,0,468,469,1,0,0, + 0,469,470,1,0,0,0,470,471,6,34,7,0,471,76,1,0,0,0,472,474,7,4,0, + 0,473,472,1,0,0,0,474,475,1,0,0,0,475,473,1,0,0,0,475,476,1,0,0, + 0,476,477,1,0,0,0,477,478,6,35,8,0,478,78,1,0,0,0,479,480,3,47,20, + 0,480,80,1,0,0,0,481,483,7,10,0,0,482,481,1,0,0,0,483,484,1,0,0, + 0,484,482,1,0,0,0,484,485,1,0,0,0,485,486,1,0,0,0,486,487,6,37,7, + 0,487,82,1,0,0,0,488,490,7,4,0,0,489,488,1,0,0,0,490,491,1,0,0,0, + 491,489,1,0,0,0,491,492,1,0,0,0,492,493,1,0,0,0,493,494,6,38,8,0, + 494,84,1,0,0,0,495,496,3,47,20,0,496,86,1,0,0,0,497,499,7,10,0,0, + 498,497,1,0,0,0,499,500,1,0,0,0,500,498,1,0,0,0,500,501,1,0,0,0, + 501,502,1,0,0,0,502,503,6,40,7,0,503,88,1,0,0,0,504,506,7,4,0,0, + 505,504,1,0,0,0,506,507,1,0,0,0,507,505,1,0,0,0,507,508,1,0,0,0, + 508,509,1,0,0,0,509,510,6,41,8,0,510,90,1,0,0,0,511,512,3,21,7,0, + 512,92,1,0,0,0,513,515,7,10,0,0,514,513,1,0,0,0,515,516,1,0,0,0, + 516,514,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0,0,518,519,6,43,7,0, + 519,94,1,0,0,0,520,522,7,4,0,0,521,520,1,0,0,0,522,523,1,0,0,0,523, + 521,1,0,0,0,523,524,1,0,0,0,524,525,1,0,0,0,525,526,6,44,8,0,526, + 96,1,0,0,0,61,0,1,2,3,4,5,6,101,187,192,196,199,203,207,210,218, + 225,230,235,241,247,255,260,266,272,280,285,291,297,308,312,316, + 322,328,335,340,342,354,360,366,374,379,391,397,403,411,416,424, + 431,438,447,454,459,468,475,484,491,500,507,516,523,9,5,1,0,5,2, + 0,5,3,0,5,4,0,5,5,0,5,6,0,0,1,0,6,0,0,4,0,0 ] class XeasyPKLexer(Lexer): @@ -247,28 +238,29 @@ class XeasyPKLexer(Lexer): SMCLN_COMMENT = 12 Simple_name = 13 SPACE = 14 - ENCLOSE_COMMENT = 15 - SECTION_COMMENT = 16 - LINE_COMMENT = 17 - Integer_ND = 18 - SPACE_ND = 19 - RETURN_ND = 20 - Simple_name_FO = 21 - SPACE_FO = 22 - RETURN_FO = 23 - Integer_IN = 24 - Simple_name_IN = 25 - SPACE_IN = 26 - RETURN_IN = 27 - Simple_name_CY = 28 - SPACE_CY = 29 - RETURN_CY = 30 - Simple_name_SP = 31 - SPACE_SP = 32 - RETURN_SP = 33 - Float_TO = 34 - TOACE_TO = 35 - RETURN_TO = 36 + RETURN = 15 + ENCLOSE_COMMENT = 16 + SECTION_COMMENT = 17 + LINE_COMMENT = 18 + Integer_ND = 19 + SPACE_ND = 20 + RETURN_ND = 21 + Simple_name_FO = 22 + SPACE_FO = 23 + RETURN_FO = 24 + Integer_IN = 25 + Simple_name_IN = 26 + SPACE_IN = 27 + RETURN_IN = 28 + Simple_name_CY = 29 + SPACE_CY = 30 + RETURN_CY = 31 + Simple_name_SP = 32 + SPACE_SP = 33 + RETURN_SP = 34 + Float_TO = 35 + TOACE_TO = 36 + RETURN_TO = 37 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -281,7 +273,7 @@ class XeasyPKLexer(Lexer): symbolicNames = [ "", "Num_of_dim", "Format", "Iname", "Cyana_format", "Spectrum", "Tolerance", "Integer", "Float", "Real", "SHARP_COMMENT", "EXCLM_COMMENT", - "SMCLN_COMMENT", "Simple_name", "SPACE", "ENCLOSE_COMMENT", + "SMCLN_COMMENT", "Simple_name", "SPACE", "RETURN", "ENCLOSE_COMMENT", "SECTION_COMMENT", "LINE_COMMENT", "Integer_ND", "SPACE_ND", "RETURN_ND", "Simple_name_FO", "SPACE_FO", "RETURN_FO", "Integer_IN", "Simple_name_IN", "SPACE_IN", "RETURN_IN", "Simple_name_CY", @@ -292,12 +284,13 @@ class XeasyPKLexer(Lexer): "Tolerance", "Integer", "Float", "Real", "DEC_DOT_DEC", "DEC_DIGIT", "DECIMAL", "SHARP_COMMENT", "EXCLM_COMMENT", "SMCLN_COMMENT", "Simple_name", "ALPHA", "ALPHA_NUM", - "START_CHAR", "NAME_CHAR", "SIMPLE_NAME", "SPACE", "ENCLOSE_COMMENT", - "SECTION_COMMENT", "LINE_COMMENT", "Integer_ND", "SPACE_ND", - "RETURN_ND", "Simple_name_FO", "SPACE_FO", "RETURN_FO", - "Integer_IN", "Simple_name_IN", "SPACE_IN", "RETURN_IN", - "Simple_name_CY", "SPACE_CY", "RETURN_CY", "Simple_name_SP", - "SPACE_SP", "RETURN_SP", "Float_TO", "TOACE_TO", "RETURN_TO" ] + "START_CHAR", "NAME_CHAR", "SIMPLE_NAME", "SPACE", "RETURN", + "ENCLOSE_COMMENT", "SECTION_COMMENT", "LINE_COMMENT", + "Integer_ND", "SPACE_ND", "RETURN_ND", "Simple_name_FO", + "SPACE_FO", "RETURN_FO", "Integer_IN", "Simple_name_IN", + "SPACE_IN", "RETURN_IN", "Simple_name_CY", "SPACE_CY", + "RETURN_CY", "Simple_name_SP", "SPACE_SP", "RETURN_SP", + "Float_TO", "TOACE_TO", "RETURN_TO" ] grammarFileName = "XeasyPKLexer.g4" diff --git a/wwpdb/utils/nmr/pk/XeasyPKParser.py b/wwpdb/utils/nmr/pk/XeasyPKParser.py index b45c87402..69abac5b4 100644 --- a/wwpdb/utils/nmr/pk/XeasyPKParser.py +++ b/wwpdb/utils/nmr/pk/XeasyPKParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,36,136,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 4,1,37,136,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13, 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,5,0,37,8,0,10,0,12,0,40,9,0,1,0, 1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4, @@ -29,13 +29,13 @@ def serializedATN(): 0,0,36,29,1,0,0,0,36,30,1,0,0,0,36,31,1,0,0,0,36,32,1,0,0,0,36,33, 1,0,0,0,36,34,1,0,0,0,36,35,1,0,0,0,37,40,1,0,0,0,38,36,1,0,0,0, 38,39,1,0,0,0,39,41,1,0,0,0,40,38,1,0,0,0,41,42,5,0,0,1,42,1,1,0, - 0,0,43,44,5,1,0,0,44,45,5,18,0,0,45,46,5,20,0,0,46,3,1,0,0,0,47, - 48,5,3,0,0,48,49,5,24,0,0,49,50,5,25,0,0,50,51,5,27,0,0,51,5,1,0, - 0,0,52,53,5,4,0,0,53,54,5,28,0,0,54,55,5,30,0,0,55,7,1,0,0,0,56, - 58,5,5,0,0,57,59,5,31,0,0,58,57,1,0,0,0,59,60,1,0,0,0,60,58,1,0, - 0,0,60,61,1,0,0,0,61,62,1,0,0,0,62,63,5,33,0,0,63,9,1,0,0,0,64,66, - 5,6,0,0,65,67,5,34,0,0,66,65,1,0,0,0,67,68,1,0,0,0,68,66,1,0,0,0, - 68,69,1,0,0,0,69,70,1,0,0,0,70,71,5,36,0,0,71,11,1,0,0,0,72,74,3, + 0,0,43,44,5,1,0,0,44,45,5,19,0,0,45,46,5,21,0,0,46,3,1,0,0,0,47, + 48,5,3,0,0,48,49,5,25,0,0,49,50,5,26,0,0,50,51,5,28,0,0,51,5,1,0, + 0,0,52,53,5,4,0,0,53,54,5,29,0,0,54,55,5,31,0,0,55,7,1,0,0,0,56, + 58,5,5,0,0,57,59,5,32,0,0,58,57,1,0,0,0,59,60,1,0,0,0,60,58,1,0, + 0,0,60,61,1,0,0,0,61,62,1,0,0,0,62,63,5,34,0,0,63,9,1,0,0,0,64,66, + 5,6,0,0,65,67,5,35,0,0,66,65,1,0,0,0,67,68,1,0,0,0,68,66,1,0,0,0, + 68,69,1,0,0,0,69,70,1,0,0,0,70,71,5,37,0,0,71,11,1,0,0,0,72,74,3, 14,7,0,73,72,1,0,0,0,74,75,1,0,0,0,75,73,1,0,0,0,75,76,1,0,0,0,76, 13,1,0,0,0,77,78,5,7,0,0,78,79,5,8,0,0,79,80,5,8,0,0,80,81,5,7,0, 0,81,82,5,13,0,0,82,83,3,24,12,0,83,84,3,24,12,0,84,85,5,13,0,0, @@ -71,12 +71,12 @@ class XeasyPKParser ( Parser ): symbolicNames = [ "", "Num_of_dim", "Format", "Iname", "Cyana_format", "Spectrum", "Tolerance", "Integer", "Float", "Real", "SHARP_COMMENT", "EXCLM_COMMENT", "SMCLN_COMMENT", - "Simple_name", "SPACE", "ENCLOSE_COMMENT", "SECTION_COMMENT", - "LINE_COMMENT", "Integer_ND", "SPACE_ND", "RETURN_ND", - "Simple_name_FO", "SPACE_FO", "RETURN_FO", "Integer_IN", - "Simple_name_IN", "SPACE_IN", "RETURN_IN", "Simple_name_CY", - "SPACE_CY", "RETURN_CY", "Simple_name_SP", "SPACE_SP", - "RETURN_SP", "Float_TO", "TOACE_TO", "RETURN_TO" ] + "Simple_name", "SPACE", "RETURN", "ENCLOSE_COMMENT", + "SECTION_COMMENT", "LINE_COMMENT", "Integer_ND", "SPACE_ND", + "RETURN_ND", "Simple_name_FO", "SPACE_FO", "RETURN_FO", + "Integer_IN", "Simple_name_IN", "SPACE_IN", "RETURN_IN", + "Simple_name_CY", "SPACE_CY", "RETURN_CY", "Simple_name_SP", + "SPACE_SP", "RETURN_SP", "Float_TO", "TOACE_TO", "RETURN_TO" ] RULE_xeasy_pk = 0 RULE_dimension = 1 @@ -112,28 +112,29 @@ class XeasyPKParser ( Parser ): SMCLN_COMMENT=12 Simple_name=13 SPACE=14 - ENCLOSE_COMMENT=15 - SECTION_COMMENT=16 - LINE_COMMENT=17 - Integer_ND=18 - SPACE_ND=19 - RETURN_ND=20 - Simple_name_FO=21 - SPACE_FO=22 - RETURN_FO=23 - Integer_IN=24 - Simple_name_IN=25 - SPACE_IN=26 - RETURN_IN=27 - Simple_name_CY=28 - SPACE_CY=29 - RETURN_CY=30 - Simple_name_SP=31 - SPACE_SP=32 - RETURN_SP=33 - Float_TO=34 - TOACE_TO=35 - RETURN_TO=36 + RETURN=15 + ENCLOSE_COMMENT=16 + SECTION_COMMENT=17 + LINE_COMMENT=18 + Integer_ND=19 + SPACE_ND=20 + RETURN_ND=21 + Simple_name_FO=22 + SPACE_FO=23 + RETURN_FO=24 + Integer_IN=25 + Simple_name_IN=26 + SPACE_IN=27 + RETURN_IN=28 + Simple_name_CY=29 + SPACE_CY=30 + RETURN_CY=31 + Simple_name_SP=32 + SPACE_SP=33 + RETURN_SP=34 + Float_TO=35 + TOACE_TO=36 + RETURN_TO=37 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -503,7 +504,7 @@ def spectrum(self): self.state = 60 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==31): + if not (_la==32): break self.state = 62 @@ -568,7 +569,7 @@ def tolerance(self): self.state = 68 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==34): + if not (_la==35): break self.state = 70 diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKLexer.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKLexer.g4 index a943eff77..c24242ed7 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKLexer.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKLexer.g4 @@ -56,8 +56,8 @@ SPACE: [ \t]+ -> skip; RETURN: [\r\n]+; ENCLOSE_COMMENT: '{' (ENCLOSE_COMMENT | .)*? '}' -> channel(HIDDEN); -SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); -LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); +SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); +LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); mode DATA_MODE; diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKParser.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKParser.g4 index bcd232612..6072d9c62 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKParser.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrPipePKParser.g4 @@ -47,7 +47,7 @@ peak_list_2d: Xw_hz Yw_hz X1 X3 Y1 Y3 Height DHeight Vol - Pchi2 Type Ass + Pchi2 Type Ass? ClustId Memcnt Trouble? RETURN_VA Format Format_code Format_code Format_code @@ -58,7 +58,7 @@ peak_list_2d: Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code - Format_code Format_code Format_code + Format_code Format_code Format_code? Format_code Format_code Format_code? RETURN_FO (Null_value Any_name_NV RETURN_NV)? (Null_string Any_name_NS RETURN_NS)? @@ -74,7 +74,7 @@ peak_2d: number number Integer Integer Integer Integer number number number - number Integer Any_name + number Integer Any_name? Integer Integer Integer? RETURN; peak_list_3d: @@ -88,7 +88,7 @@ peak_list_3d: Xw_hz Yw_hz Zw_hz X1 X3 Y1 Y3 Z1 Z3 Height DHeight Vol - Pchi2 Type Ass + Pchi2 Type Ass? ClustId Memcnt Trouble? RETURN_VA Format Format_code Format_code Format_code Format_code @@ -99,7 +99,7 @@ peak_list_3d: Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code - Format_code Format_code Format_code + Format_code Format_code Format_code? Format_code Format_code Format_code? RETURN_FO (Null_value Any_name_NV RETURN_NV)? (Null_string Any_name_NS RETURN_NS)? @@ -115,7 +115,7 @@ peak_3d: number number number Integer Integer Integer Integer Integer Integer number number number - number Integer Any_name + number Integer Any_name? Integer Integer Integer? RETURN; peak_list_4d: @@ -129,7 +129,7 @@ peak_list_4d: Xw_hz Yw_hz Zw_hz Aw_hz X1 X3 Y1 Y3 Z1 Z3 A1 A3 Height DHeight Vol - Pchi2 Type Ass + Pchi2 Type Ass? ClustId Memcnt Trouble? RETURN_VA Format Format_code Format_code Format_code Format_code Format_code @@ -140,7 +140,7 @@ peak_list_4d: Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code Format_code - Format_code Format_code Format_code + Format_code Format_code Format_code? Format_code Format_code Format_code? RETURN_FO (Null_value Any_name_NV RETURN_NV)? (Null_string Any_name_NS RETURN_NS)? @@ -156,7 +156,7 @@ peak_4d: number number number number Integer Integer Integer Integer Integer Integer Integer Integer number number number - number Integer Any_name + number Integer Any_name? Integer Integer Integer? RETURN; /* number expression in peak list */ diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKLexer.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKLexer.g4 index c5d82873b..82c4e3a88 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKLexer.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKLexer.g4 @@ -41,10 +41,16 @@ fragment NAME_CHAR: START_CHAR | '\'' | '"'; //fragment ATM_NAME_CHAR: ALPHA_NUM | '\''; fragment SIMPLE_NAME: START_CHAR NAME_CHAR*; -SPACE: [ \t\r\n]+ -> skip; -ENCLOSE_COMMENT: '{' (Float | SIMPLE_NAME)*? '}'; -SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ' '* [\r\n]+ -> channel(HIDDEN); -LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ~[\r\n]* -> channel(HIDDEN); +SPACE: [ \t]+ -> skip; +RETURN: [\r\n]+; + +ENCLOSE_DATA: '{' ' '* (Float | (SIMPLE_NAME | ' ')*?) ' '* '}'; +SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); +LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); + +/* NMRView: Peak list format + See also https://github.com/onemoonsci/nmrfxprocessordocs/blob/master/pages/02.viewer/08.refcmds/01.ref/docs.md +*/ mode LABEL_MODE; @@ -58,7 +64,7 @@ W_name: Simple_name '.W'; B_name: Simple_name '.B'; E_name: Simple_name '.E'; J_name: Simple_name '.J'; -U_name: Simple_name ',U'; +U_name: Simple_name '.U'; Vol: 'vol'; Int: 'int'; @@ -72,3 +78,5 @@ Float_LA: Float; SPACE_LA: [ \t]+ -> skip; RETURN_LA: [\r\n]+; +ENCLOSE_DATA_LA: '{' ' '* (Float | (SIMPLE_NAME | ' ')*?) ' '* '}'; + diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKParser.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKParser.g4 index 78d4d415d..5f490bfda 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKParser.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/NmrViewPKParser.g4 @@ -23,52 +23,111 @@ nmrview_pk: data_label | peak_list_2d | peak_list_3d | - peak_list_4d + peak_list_4d | + peak_list_wo_eju_2d | + peak_list_wo_eju_3d | + peak_list_wo_eju_4d )* EOF; +/* NMRView: Peak list format + See also https://github.com/onemoonsci/nmrfxprocessordocs/blob/master/pages/02.viewer/08.refcmds/01.ref/docs.md +*/ + data_label: Label Dataset Sw Sf RETURN_LA labels RETURN_LA Simple_name_LA RETURN_LA - widths RETURN_LA - freqs RETURN_LA - vars; + labels RETURN_LA + labels RETURN_LA; labels: - Simple_name_LA+; - -widths: - Float_LA+; - -freqs: - Float_LA+; - -vars: - vars_per_axis+ - Vol Int Stat Comment Flag0; - -vars_per_axis: - L_name P_name W_name B_name E_name J_name U_name; + label+; peak_list_2d: + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + Vol Int Stat Comment? Flag0 RETURN? + peak_2d+; + +peak_2d: Integer - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - Float Float Integer ENCLOSE_COMMENT Integer; + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + Float Float Integer ENCLOSE_DATA? Integer RETURN; peak_list_3d: + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + Vol Int Stat Comment? Flag0 RETURN? + peak_3d+; + +peak_3d: Integer - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - Float Float Integer ENCLOSE_COMMENT Integer; + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + Float Float Integer ENCLOSE_DATA? Integer RETURN; peak_list_4d: + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + L_name P_name W_name B_name E_name J_name U_name + Vol Int Stat Comment? Flag0 RETURN? + peak_4d+; + +peak_4d: + Integer + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + ENCLOSE_DATA Float Float Float Simple_name ENCLOSE_DATA ENCLOSE_DATA + Float Float Integer ENCLOSE_DATA? Integer RETURN; + +peak_list_wo_eju_2d: + L_name P_name W_name B_name + L_name P_name W_name B_name + Vol Int Stat Comment? Flag0 RETURN? + peak_wo_eju_2d+; + +peak_wo_eju_2d: + Integer + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + Float Float Integer ENCLOSE_DATA? Integer RETURN; + +peak_list_wo_eju_3d: + L_name P_name W_name B_name + L_name P_name W_name B_name + L_name P_name W_name B_name + Vol Int Stat Comment? Flag0 RETURN? + peak_wo_eju_3d+; + +peak_wo_eju_3d: + Integer + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + Float Float Integer ENCLOSE_DATA? Integer RETURN; + +peak_list_wo_eju_4d: + L_name P_name W_name B_name + L_name P_name W_name B_name + L_name P_name W_name B_name + L_name P_name W_name B_name + Vol Int Stat Comment? Flag0 RETURN? + peak_wo_eju_4d+; + +peak_wo_eju_4d: Integer - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - ENCLOSE_COMMENT Float Float Float Simple_name ENCLOSE_COMMENT ENCLOSE_COMMENT - Float Float Integer ENCLOSE_COMMENT Integer; + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + ENCLOSE_DATA Float Float Float + Float Float Integer ENCLOSE_DATA? Integer RETURN; + +label: + Float_LA | Simple_name_LA | ENCLOSE_DATA_LA; diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/SparkyPKLexer.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/SparkyPKLexer.g4 index 75dd4989f..1341df44c 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/SparkyPKLexer.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/SparkyPKLexer.g4 @@ -48,9 +48,10 @@ fragment SIMPLE_NAME: START_CHAR NAME_CHAR*; SPACE: [ \t]+ -> skip; RETURN: [\r\n]+; + ENCLOSE_COMMENT: '{' (Float | SIMPLE_NAME)*? '}'; -SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); -LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); +SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); +LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); mode LABEL_MODE; diff --git a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/XeasyPKLexer.g4 b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/XeasyPKLexer.g4 index b4081ae73..8a0fdfc35 100644 --- a/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/XeasyPKLexer.g4 +++ b/wwpdb/utils/tests-nmr/antlr-grammars-v4.10/XeasyPKLexer.g4 @@ -52,9 +52,11 @@ fragment NAME_CHAR: START_CHAR | '\'' | '"'; fragment SIMPLE_NAME: START_CHAR NAME_CHAR*; SPACE: [ \t\r\n]+ -> skip; +RETURN: [\r\n]+; + ENCLOSE_COMMENT: '{' (ENCLOSE_COMMENT | .)*? '}' -> channel(HIDDEN); -SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ' '* [\r\n]+ -> channel(HIDDEN); -LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '-' '-'+ | '+' '+'+ | '=' '='+ | 'REMARK') ~[\r\n]* -> channel(HIDDEN); +SECTION_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ' '* RETURN -> channel(HIDDEN); +LINE_COMMENT: ('#' | '!' | ';' | '\\' | '&' | '/' '/'+ | '*' '*'+ | '=' '='+ | 'REMARK') ~[\r\n]* RETURN -> channel(HIDDEN); mode NUM_OF_DIM_MODE;