Skip to content

Commit

Permalink
Add XWINNMR peak list lexer, parser, parserlistener, and reader
Browse files Browse the repository at this point in the history
  • Loading branch information
yokochi47 committed Dec 5, 2024
1 parent 598240a commit 81b2c4c
Show file tree
Hide file tree
Showing 9 changed files with 1,613 additions and 30 deletions.
30 changes: 28 additions & 2 deletions wwpdb/utils/nmr/pk/BasePKParserListener.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
MAX_PREF_LABEL_SCHEME_COUNT,
MAX_ALLOWED_EXT_SEQ,
UNREAL_AUTH_SEQ_NUM,
HEME_LIKE_RES_NAMES)
HEME_LIKE_RES_NAMES,
SPECTRAL_DIM_TEMPLATE)
from wwpdb.utils.nmr.ChemCompUtil import ChemCompUtil
from wwpdb.utils.nmr.BMRBChemShiftStat import BMRBChemShiftStat
from wwpdb.utils.nmr.NEFTranslator.NEFTranslator import NEFTranslator
Expand Down Expand Up @@ -95,7 +96,8 @@
MAX_PREF_LABEL_SCHEME_COUNT,
MAX_ALLOWED_EXT_SEQ,
UNREAL_AUTH_SEQ_NUM,
HEME_LIKE_RES_NAMES)
HEME_LIKE_RES_NAMES,
SPECTRAL_DIM_TEMPLATE)
from nmr.ChemCompUtil import ChemCompUtil
from nmr.BMRBChemShiftStat import BMRBChemShiftStat
from nmr.NEFTranslator.NEFTranslator import NEFTranslator
Expand Down Expand Up @@ -711,6 +713,30 @@ def exit(self):
finally:
self.warningMessage = sorted(list(set(self.f)), key=self.f.index)

def fillCurrentSpectralDim(self):
self.cur_subtype = f'peak{self.num_of_dim}d'
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'] = []
if self.num_of_dim == 2:
self.peaks2D = 0
if self.num_of_dim == 3:
self.peaks3D = 0
if self.num_of_dim == 4:
self.peaks4D = 0

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],
Expand Down
27 changes: 0 additions & 27 deletions wwpdb/utils/nmr/pk/SparkyPKParserListener.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
@author: Masashi Yokochi
"""
import sys
import copy
import numpy as np

from antlr4 import ParseTreeListener
Expand All @@ -17,15 +16,13 @@
from wwpdb.utils.nmr.pk.BasePKParserListener import BasePKParserListener
from wwpdb.utils.nmr.mr.ParserListenerUtil import (REPRESENTATIVE_MODEL_ID,
REPRESENTATIVE_ALT_ID,
SPECTRAL_DIM_TEMPLATE,
getPkRow)

except ImportError:
from nmr.pk.SparkyPKParser import SparkyPKParser
from nmr.pk.BasePKParserListener import BasePKParserListener
from nmr.mr.ParserListenerUtil import (REPRESENTATIVE_MODEL_ID,
REPRESENTATIVE_ALT_ID,
SPECTRAL_DIM_TEMPLATE,
getPkRow)


Expand Down Expand Up @@ -798,29 +795,5 @@ def enterNumber(self, ctx: SparkyPKParser.NumberContext):
def exitNumber(self, ctx: SparkyPKParser.NumberContext): # pylint: disable=unused-argument
pass

def fillCurrentSpectralDim(self):
self.cur_subtype = f'peak{self.num_of_dim}d'
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'] = []
if self.num_of_dim == 2:
self.peaks2D = 0
if self.num_of_dim == 3:
self.peaks3D = 0
if self.num_of_dim == 4:
self.peaks4D = 0


# del SparkyPKParser
175 changes: 175 additions & 0 deletions wwpdb/utils/nmr/pk/XwinNmrPKLexer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# Generated from XwinNmrPKLexer.g4 by ANTLR 4.13.0
from antlr4 import *
from io import StringIO
import sys
if sys.version_info[1] > 5:
from typing import TextIO
else:
from typing.io import TextIO


def serializedATN():
return [
4,0,15,280,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,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,
3,1,72,8,1,1,1,1,1,1,2,3,2,77,8,2,1,2,1,2,3,2,81,8,2,1,3,1,3,1,3,
1,3,1,3,1,3,3,3,89,8,3,1,4,1,4,1,5,4,5,94,8,5,11,5,12,5,95,1,6,4,
6,99,8,6,11,6,12,6,100,1,6,1,6,1,7,1,7,1,8,1,8,3,8,109,8,8,1,9,1,
9,3,9,113,8,9,1,10,1,10,3,10,117,8,10,1,11,4,11,120,8,11,11,11,12,
11,121,1,11,1,11,1,12,4,12,127,8,12,11,12,12,12,128,1,13,1,13,1,
13,4,13,134,8,13,11,13,12,13,135,1,13,1,13,4,13,140,8,13,11,13,12,
13,141,1,13,1,13,4,13,146,8,13,11,13,12,13,147,1,13,1,13,4,13,152,
8,13,11,13,12,13,153,1,13,1,13,4,13,158,8,13,11,13,12,13,159,1,13,
1,13,4,13,164,8,13,11,13,12,13,165,1,13,1,13,1,13,1,13,1,13,1,13,
3,13,174,8,13,1,13,5,13,177,8,13,10,13,12,13,180,9,13,1,13,1,13,
1,13,1,13,1,14,1,14,1,14,4,14,189,8,14,11,14,12,14,190,1,14,1,14,
4,14,195,8,14,11,14,12,14,196,1,14,1,14,4,14,201,8,14,11,14,12,14,
202,1,14,1,14,4,14,207,8,14,11,14,12,14,208,1,14,1,14,4,14,213,8,
14,11,14,12,14,214,1,14,1,14,4,14,219,8,14,11,14,12,14,220,1,14,
1,14,1,14,1,14,1,14,1,14,3,14,229,8,14,1,14,5,14,232,8,14,10,14,
12,14,235,9,14,1,14,1,14,1,14,1,14,1,15,4,15,242,8,15,11,15,12,15,
243,1,16,1,16,1,17,4,17,249,8,17,11,17,12,17,250,1,17,1,17,1,18,
4,18,256,8,18,11,18,12,18,257,1,18,1,18,1,19,4,19,263,8,19,11,19,
12,19,264,1,20,4,20,268,8,20,11,20,12,20,269,1,20,1,20,1,21,4,21,
275,8,21,11,21,12,21,276,1,21,1,21,0,0,22,3,1,5,2,7,3,9,0,11,0,13,
0,15,4,17,0,19,0,21,0,23,0,25,5,27,6,29,7,31,8,33,9,35,10,37,11,
39,12,41,13,43,14,45,15,3,0,1,2,10,2,0,43,43,45,45,1,0,48,57,3,0,
33,33,35,35,42,42,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,2,0,10,10,13,13,2,0,59,59,92,92,
3,0,9,10,13,13,32,32,315,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,15,
1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,
1,0,0,0,1,35,1,0,0,0,1,37,1,0,0,0,1,39,1,0,0,0,2,41,1,0,0,0,2,43,
1,0,0,0,2,45,1,0,0,0,3,47,1,0,0,0,5,71,1,0,0,0,7,76,1,0,0,0,9,88,
1,0,0,0,11,90,1,0,0,0,13,93,1,0,0,0,15,98,1,0,0,0,17,104,1,0,0,0,
19,108,1,0,0,0,21,112,1,0,0,0,23,116,1,0,0,0,25,119,1,0,0,0,27,126,
1,0,0,0,29,173,1,0,0,0,31,228,1,0,0,0,33,241,1,0,0,0,35,245,1,0,
0,0,37,248,1,0,0,0,39,255,1,0,0,0,41,262,1,0,0,0,43,267,1,0,0,0,
45,274,1,0,0,0,47,48,5,35,0,0,48,49,5,32,0,0,49,50,5,80,0,0,50,51,
5,69,0,0,51,52,5,65,0,0,52,53,5,75,0,0,53,54,5,76,0,0,54,55,5,73,
0,0,55,56,5,83,0,0,56,57,5,84,0,0,57,58,5,95,0,0,58,59,5,68,0,0,
59,60,5,73,0,0,60,61,5,77,0,0,61,62,5,69,0,0,62,63,5,78,0,0,63,64,
5,83,0,0,64,65,5,73,0,0,65,66,5,79,0,0,66,67,5,78,0,0,67,68,1,0,
0,0,68,69,6,0,0,0,69,4,1,0,0,0,70,72,7,0,0,0,71,70,1,0,0,0,71,72,
1,0,0,0,72,73,1,0,0,0,73,74,3,13,5,0,74,6,1,0,0,0,75,77,7,0,0,0,
76,75,1,0,0,0,76,77,1,0,0,0,77,80,1,0,0,0,78,81,3,13,5,0,79,81,3,
9,3,0,80,78,1,0,0,0,80,79,1,0,0,0,81,8,1,0,0,0,82,83,3,13,5,0,83,
84,5,46,0,0,84,85,3,13,5,0,85,89,1,0,0,0,86,87,5,46,0,0,87,89,3,
13,5,0,88,82,1,0,0,0,88,86,1,0,0,0,89,10,1,0,0,0,90,91,7,1,0,0,91,
12,1,0,0,0,92,94,3,11,4,0,93,92,1,0,0,0,94,95,1,0,0,0,95,93,1,0,
0,0,95,96,1,0,0,0,96,14,1,0,0,0,97,99,7,2,0,0,98,97,1,0,0,0,99,100,
1,0,0,0,100,98,1,0,0,0,100,101,1,0,0,0,101,102,1,0,0,0,102,103,6,
6,1,0,103,16,1,0,0,0,104,105,7,3,0,0,105,18,1,0,0,0,106,109,3,17,
7,0,107,109,3,11,4,0,108,106,1,0,0,0,108,107,1,0,0,0,109,20,1,0,
0,0,110,113,3,19,8,0,111,113,7,4,0,0,112,110,1,0,0,0,112,111,1,0,
0,0,113,22,1,0,0,0,114,117,3,21,9,0,115,117,7,5,0,0,116,114,1,0,
0,0,116,115,1,0,0,0,117,24,1,0,0,0,118,120,7,6,0,0,119,118,1,0,0,
0,120,121,1,0,0,0,121,119,1,0,0,0,121,122,1,0,0,0,122,123,1,0,0,
0,123,124,6,11,2,0,124,26,1,0,0,0,125,127,7,7,0,0,126,125,1,0,0,
0,127,128,1,0,0,0,128,126,1,0,0,0,128,129,1,0,0,0,129,28,1,0,0,0,
130,174,7,8,0,0,131,133,5,47,0,0,132,134,5,47,0,0,133,132,1,0,0,
0,134,135,1,0,0,0,135,133,1,0,0,0,135,136,1,0,0,0,136,174,1,0,0,
0,137,139,5,42,0,0,138,140,5,42,0,0,139,138,1,0,0,0,140,141,1,0,
0,0,141,139,1,0,0,0,141,142,1,0,0,0,142,174,1,0,0,0,143,145,5,45,
0,0,144,146,5,45,0,0,145,144,1,0,0,0,146,147,1,0,0,0,147,145,1,0,
0,0,147,148,1,0,0,0,148,174,1,0,0,0,149,151,5,43,0,0,150,152,5,43,
0,0,151,150,1,0,0,0,152,153,1,0,0,0,153,151,1,0,0,0,153,154,1,0,
0,0,154,174,1,0,0,0,155,157,5,61,0,0,156,158,5,61,0,0,157,156,1,
0,0,0,158,159,1,0,0,0,159,157,1,0,0,0,159,160,1,0,0,0,160,174,1,
0,0,0,161,163,5,62,0,0,162,164,5,62,0,0,163,162,1,0,0,0,164,165,
1,0,0,0,165,163,1,0,0,0,165,166,1,0,0,0,166,174,1,0,0,0,167,168,
5,82,0,0,168,169,5,69,0,0,169,170,5,77,0,0,170,171,5,65,0,0,171,
172,5,82,0,0,172,174,5,75,0,0,173,130,1,0,0,0,173,131,1,0,0,0,173,
137,1,0,0,0,173,143,1,0,0,0,173,149,1,0,0,0,173,155,1,0,0,0,173,
161,1,0,0,0,173,167,1,0,0,0,174,178,1,0,0,0,175,177,5,32,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,3,27,12,0,182,183,1,0,0,0,183,
184,6,13,3,0,184,30,1,0,0,0,185,229,7,8,0,0,186,188,5,47,0,0,187,
189,5,47,0,0,188,187,1,0,0,0,189,190,1,0,0,0,190,188,1,0,0,0,190,
191,1,0,0,0,191,229,1,0,0,0,192,194,5,42,0,0,193,195,5,42,0,0,194,
193,1,0,0,0,195,196,1,0,0,0,196,194,1,0,0,0,196,197,1,0,0,0,197,
229,1,0,0,0,198,200,5,45,0,0,199,201,5,45,0,0,200,199,1,0,0,0,201,
202,1,0,0,0,202,200,1,0,0,0,202,203,1,0,0,0,203,229,1,0,0,0,204,
206,5,43,0,0,205,207,5,43,0,0,206,205,1,0,0,0,207,208,1,0,0,0,208,
206,1,0,0,0,208,209,1,0,0,0,209,229,1,0,0,0,210,212,5,61,0,0,211,
213,5,61,0,0,212,211,1,0,0,0,213,214,1,0,0,0,214,212,1,0,0,0,214,
215,1,0,0,0,215,229,1,0,0,0,216,218,5,62,0,0,217,219,5,62,0,0,218,
217,1,0,0,0,219,220,1,0,0,0,220,218,1,0,0,0,220,221,1,0,0,0,221,
229,1,0,0,0,222,223,5,82,0,0,223,224,5,69,0,0,224,225,5,77,0,0,225,
226,5,65,0,0,226,227,5,82,0,0,227,229,5,75,0,0,228,185,1,0,0,0,228,
186,1,0,0,0,228,192,1,0,0,0,228,198,1,0,0,0,228,204,1,0,0,0,228,
210,1,0,0,0,228,216,1,0,0,0,228,222,1,0,0,0,229,233,1,0,0,0,230,
232,8,7,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,236,1,0,0,0,235,233,1,0,0,0,236,237,3,27,12,0,237,
238,1,0,0,0,238,239,6,14,3,0,239,32,1,0,0,0,240,242,8,9,0,0,241,
240,1,0,0,0,242,243,1,0,0,0,243,241,1,0,0,0,243,244,1,0,0,0,244,
34,1,0,0,0,245,246,3,5,1,0,246,36,1,0,0,0,247,249,7,6,0,0,248,247,
1,0,0,0,249,250,1,0,0,0,250,248,1,0,0,0,250,251,1,0,0,0,251,252,
1,0,0,0,252,253,6,17,2,0,253,38,1,0,0,0,254,256,7,7,0,0,255,254,
1,0,0,0,256,257,1,0,0,0,257,255,1,0,0,0,257,258,1,0,0,0,258,259,
1,0,0,0,259,260,6,18,4,0,260,40,1,0,0,0,261,263,8,9,0,0,262,261,
1,0,0,0,263,264,1,0,0,0,264,262,1,0,0,0,264,265,1,0,0,0,265,42,1,
0,0,0,266,268,7,6,0,0,267,266,1,0,0,0,268,269,1,0,0,0,269,267,1,
0,0,0,269,270,1,0,0,0,270,271,1,0,0,0,271,272,6,20,2,0,272,44,1,
0,0,0,273,275,7,7,0,0,274,273,1,0,0,0,275,276,1,0,0,0,276,274,1,
0,0,0,276,277,1,0,0,0,277,278,1,0,0,0,278,279,6,21,4,0,279,46,1,
0,0,0,36,0,1,2,71,76,80,88,95,100,108,112,116,121,128,135,141,147,
153,159,165,173,178,190,196,202,208,214,220,228,233,243,250,257,
264,269,276,5,5,1,0,2,2,0,6,0,0,0,1,0,2,0,0
]

class XwinNmrPKLexer(Lexer):

atn = ATNDeserializer().deserialize(serializedATN())

decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

NUM_OF_DIM_MODE = 1
COMMENT_MODE = 2

Num_of_dim = 1
Integer = 2
Float = 3
COMMENT = 4
SPACE = 5
RETURN = 6
SECTION_COMMENT = 7
LINE_COMMENT = 8
Annotation = 9
Integer_ND = 10
SPACE_ND = 11
RETURN_ND = 12
Any_name = 13
SPACE_CM = 14
RETURN_CM = 15

channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]

modeNames = [ "DEFAULT_MODE", "NUM_OF_DIM_MODE", "COMMENT_MODE" ]

literalNames = [ "<INVALID>",
"'# PEAKLIST_DIMENSION'" ]

symbolicNames = [ "<INVALID>",
"Num_of_dim", "Integer", "Float", "COMMENT", "SPACE", "RETURN",
"SECTION_COMMENT", "LINE_COMMENT", "Annotation", "Integer_ND",
"SPACE_ND", "RETURN_ND", "Any_name", "SPACE_CM", "RETURN_CM" ]

ruleNames = [ "Num_of_dim", "Integer", "Float", "DEC_DOT_DEC", "DEC_DIGIT",
"DECIMAL", "COMMENT", "ALPHA", "ALPHA_NUM", "START_CHAR",
"NAME_CHAR", "SPACE", "RETURN", "SECTION_COMMENT", "LINE_COMMENT",
"Annotation", "Integer_ND", "SPACE_ND", "RETURN_ND", "Any_name",
"SPACE_CM", "RETURN_CM" ]

grammarFileName = "XwinNmrPKLexer.g4"

def __init__(self, input=None, output:TextIO = sys.stdout):
super().__init__(input, output)
self.checkVersion("4.13.0")
self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
self._actions = None
self._predicates = None


Loading

0 comments on commit 81b2c4c

Please sign in to comment.