diff --git a/pymzml/__init__.py b/pymzml/__init__.py index da0622c6..e8925903 100644 --- a/pymzml/__init__.py +++ b/pymzml/__init__.py @@ -37,4 +37,4 @@ import pymzml.spec import pymzml.obo import pymzml.minimum -import pymzml.plot +# import pymzml.plot diff --git a/pymzml/obo.py b/pymzml/obo.py index 46575655..c859c6c9 100755 --- a/pymzml/obo.py +++ b/pymzml/obo.py @@ -66,7 +66,7 @@ from __future__ import print_function import sys import os - +import codecs class oboTranslator(object): def __init__(self, version=None): @@ -138,7 +138,8 @@ def parseOBO(self): # Modify the root for cx_freeze if getattr(sys, 'frozen', False): - obo_root = os.path.dirname(sys.executable) + # obo_root = os.path.dirname(sys._MEIPASS) + obo_root = os.path.dirname(__file__) else: obo_root = os.path.dirname(__file__) @@ -149,7 +150,7 @@ def parseOBO(self): ) if os.path.exists(obo_file): - with open(obo_file) as obo: + with codecs.open( obo_file, 'r', encoding = 'utf-8' ) as obo: collections = {} collect = False for line in obo: diff --git a/pymzml/run.py b/pymzml/run.py index 6d74e28c..2b618d02 100644 --- a/pymzml/run.py +++ b/pymzml/run.py @@ -575,6 +575,13 @@ def __getitem__(self, value): if len(self.info['offsets']) == 0: raise IOError("File does support random access: index list missing...") + # Check for conversion of str/int issues + if not value in self.info['offsets']: + try: + value = int(value) + except Exception: + pass + if value in self.info['offsets']: startPos = self.info['offsets'][value] endPos_index = bisect.bisect_right( diff --git a/pymzml/spec.py b/pymzml/spec.py index 9b08284f..900e2e43 100755 --- a/pymzml/spec.py +++ b/pymzml/spec.py @@ -829,13 +829,25 @@ def _decodeNumpress(self, inData, compression): coder = pyopenms.MSNumpressCoder() np_config = pyopenms.NumpressConfig() np_config.estimate_fixed_point = True + zlib_compression = False if compression == 'ms-np-linear': np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR elif compression == 'ms-np-pic': np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC elif compression == 'ms-np-slof': np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF - coder.decodeNP(inData, result, False, np_config) + elif compression == 'zlib-ms-np-linear': + np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.LINEAR + zlib_compression = True + elif compression == 'zlib-ms-np-pic': + np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.PIC + zlib_compression = True + elif compression == 'zlib-ms-np-slof': + np_config.np_compression = pyopenms.MSNumpressCoder.NumpressCompression.SLOF + zlib_compression = True + + coder.decodeNP(inData, result, zlib_compression, np_config) + return result def _decode(self): @@ -885,6 +897,8 @@ def _decode(self): decodedData = zlib.decompress(decodedData) elif compression in ['ms-np-linear', 'ms-np-pic', 'ms-np-slof']: unpackedData = self._decodeNumpress(base64Data, compression) + elif compression in ['zlib-ms-np-linear', 'zlib-ms-np-pic', 'zlib-ms-np-slof']: + unpackedData = self._decodeNumpress(base64Data, compression) elif compression == 'no': pass else: @@ -1448,6 +1462,15 @@ def readAccession(self, parElement): accession = element.get('accession') self.ms[accession] = element if element.tag.endswith('cvParam'): + + # Combination of zlib + msnumpress + if accession == "MS:1002746": + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-linear')) + elif accession == "MS:1002747": + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-pic')) + elif accession == "MS:1002748": + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-slof')) + if accession in self.param['accessions']: for mzmlTag in self.param['accessions'][accession]['valuesToExtract']: try: @@ -1493,6 +1516,15 @@ def readAccession(self, parElement): elif self.param['accessions'][accession]['name'] == 'MS-Numpress short logged float compression': self['BinaryArrayOrder'].append(('compression', 'ms-np-slof')) + elif self.param['accessions'][accession]['name'] == 'MS-Numpress linear prediction compression followed by zlib compression': + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-linear')) + + elif self.param['accessions'][accession]['name'] == 'MS-Numpress positive integer compression followed by zlib compression': + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-pic')) + + elif self.param['accessions'][accession]['name'] == 'MS-Numpress short logged float compression followed by zlib compression': + self['BinaryArrayOrder'].append(('compression', 'zlib-ms-np-slof')) + elif element.tag.endswith('precursorList'): # TODO remove this completely? self['precursors'] = [] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..bd418099 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +nose +plotly \ No newline at end of file diff --git a/setup.py b/setup.py index ed8b9ea8..07e9b2f5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from distutils.core import setup setup(name='pymzml', - version='0.8.0', + version='0.8.1', packages = ['pymzml'], package_dir = {'pymzml': 'pymzml'}, package_data={'pymzml': ['obo/*.obo']},