Git Product home page Git Product logo

ms_deisotope's Introduction

https://raw.githubusercontent.com/mobiusklein/ms_deisotope/master/docs/_static/logo.png

Documentation | PYPIBADGE | GHAB

A Library for Deisotoping and Charge State Deconvolution For Mass Spectrometry

This library combines brainpy and ms_peak_picker to build a toolkit for MS and MS/MS data. The goal of these libraries is to provide pieces of the puzzle for evaluating MS data modularly. The goal of this library is to combine the modules to streamline processing raw data.

Deconvolution

The general-purpose averagine-based deconvolution procedure can be called by using the high level API function deconvolute_peaks, which takes a sequence of peaks, an averagine model, and a isotopic goodness-of-fit scorer:

import ms_deisotope

deconvoluted_peaks, _ = ms_deisotope.deconvolute_peaks(peaks, averagine=ms_deisotope.peptide,
                                                       scorer=ms_deisotope.MSDeconVFitter(10.))

The result is a deisotoped and charge state deconvoluted peak list where each peak's neutral mass is known and the fitted charge state is recorded along with the isotopic peaks that gave rise to the fit.

Refer to the Documentation for a deeper description of isotopic pattern fitting.

Averagine

An "Averagine" model is used to describe the composition of an "average amino acid", which can then be used to approximate the composition and isotopic abundance of a combination of specific amino acids. Given that often the only solution available is to guess at the composition of a particular m/z because there are too many possible elemental compositions, this is the only tractable solution.

This library supports arbitrary Averagine formulae, but the Senko Averagine is provided by default: {"C": 4.9384, "H": 7.7583, "N": 1.3577, "O": 1.4773, "S": 0.0417}

from ms_deisotope import Averagine
from ms_deisotope import plot

peptide_averagine = Averagine({"C": 4.9384, "H": 7.7583, "N": 1.3577, "O": 1.4773, "S": 0.0417})

plot.draw_peaklist(peptide_averagine.isotopic_cluster(1266.321, charge=1))
ms_deisotope includes several pre-defined averagines (or "averagoses" as may be more appropriate):
  1. Senko's peptide - ms_deisotope.peptide
  2. Native N- and O-glycan - ms_deisotope.glycan
  3. Permethylated glycan - ms_deisotope.permethylated_glycan
  4. Glycopeptide - ms_deisotope.glycopeptide
  5. Sulfated Glycosaminoglycan - ms_deisotope.heparan_sulfate
  6. Unsulfated Glycosaminoglycan - ms_deisotope.heparin

Please see the Documentation for more information on mass spectrum data file reading/writing, peak sets, and lower-level signal processing tools.

Installing

ms_deisotope uses PEP 517 and 518 build system definition and isolation to ensure all of its compile-time dependencies are installed prior to building. Normal installation should work with pip, and pre-built wheels are available for Windows.

$ pip install ms_deisotope

C Extensions

ms_deisotope and several of its dependencies use C extensions to make iterative operations much faster. If you plan to use this library on a large amount of data, I highly recommend you ensure they are installed:

>>> import ms_deisotope
>>> ms_deisotope.DeconvolutedPeak
<type 'ms_deisotope._c.peak_set.DeconvolutedPeak'>

Building C extensions from source requires a version of Cython >= 0.27.0

Compiling C extensions requires that numpy, brain-isotopic-distribution, and ms_peak_picker be compiled and installed prior to building ms_deisotope:

pip install numpy
pip install -v brain-isotopic-distribution ms_peak_picker
pip install -v ms_deisotope

If these libraries are not installed, ms_deisotope will fall back to using pure Python implementations, which are much slower.

ms_deisotope's People

Contributors

armonyg avatar heckendorfc avatar lukauskas avatar mobiusklein avatar mstim avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ms_deisotope's Issues

AttributeError: 'PeakDependenceGraph' object has no attribute 'best_exact_fits'

I'm trying to run this code

from ms_deisotope.deconvolution import deconvolute_peaks
from ms_peak_picker import simple_peak

peaks = [(200, 10000), (203.12312, 3132132)] # example data
peaks = [simple_peak(p[0], p[1], 0.01) for p in peaks]
decon_result = deconvolute_peaks(peaks, *args, **kwargs)

which always worked for me, but started failing with ms_deisotope==0.0.13 under linux with python >3.5, under windows it works fine for me.

Can you tell me if I need to adapt my code or if there is a bug in ms_deisotope?

Importing mzML file with only ms1 data

Hello,

I wanted to experiment with this deconvolution package. I'm looking at some ms1 level data and I'm having trouble importing it.

Using MSFileLoader I'm able to import a file with ms2 results just fine, giving ms_deisotope.data_source.scan.scan.Scan objects. Using the same workflow on an mzML file with only ms1, or ms1 and ms2 data seems to derive a different class whenever there's an ms1 scan, ms_deisotope.data_source.scan.base.ScanBunch, and I'm not seeing any output data resulting from this, just an empty ScanBunch.

ScanBunch(
precursor=
Scan('controllerType=0 controllerNumber=1 scan=1', index=0, time=0.0022, ms_level=1),
products=
[])

I can import the same mzML files that include the ms1 scans using mzml.mzml.read or mzml.mzml.MzML with the desired output. But those output dicts and not Scan objects, which don't seem to work with the deconvolution bits.

Is there a better way to do this?

Edit: I had to re-write some of this I made minor mistakes in the original message.

Wrong case for keys in "inlet_map"

Our version of Agilent MassHunter produces ".d" files where the value for the inlet is "ESI", but the key in the inlet_map dictionary (ms_deisotope/data_source/_vendor/AgilentD.py, line 161) is "Esi", so the lookup fails.

The ionization_map dictionary in the same file has "ESI" in capitals, which makes me think this is just a typo. As far as I can tell the same value gets used for the lookups in both dictionaries, so the keys should match in both dicts, and indeed the rest of the keys do.

Happy to submit a pull request for this if it will help.

Could not be located in the test suite's data package

from ms_deisotope.test.common import datafile

%matplotlib inline

from matplotlib import pyplot as plt, rcParams
rcParams['figure.figsize'] = 16, 4

# We'll use the datafile helper to locate the package test data for demonstration purposes
path = datafile("three_test_scans.mzML")
reader = ms_deisotope.MSFileLoader(path)

Exception: The path '/home/xcq/anaconda3/envs/diapasef_proc/lib/python3.8/site-packages/ms_deisotope/test/test_data/three_test_scans.mzML' could not be located in the test suite's data package.If you are NOT running the ms_deisotope test suite, you should not be using this function.

Processing ms2 scans

Thanks for sharing this code. I'd like to use it to deconvolve and deisotope my ms2 spectra, but I'm having trouble working out how to do that when it's not accompanied by an ms1 scan.

My MGF follows:

BEGIN IONS
PEPMASS=1247.602054 6018645
TITLE=RawFile: HeLa_20KInt Index: 1 precursor: 26579 Charge: 2 FeatureIntensity: 6018645 Feature#: 2 RtApex: 1085.76696854
RTINSECONDS=1085.76696854
INSTRUMENT=ESI-QUAD-TOF
CHARGE=2+
SCANS=1085
1036.442 8882
1037.446 5433
675.343 2306
1038.448 2278
892.392 2049
448.212 1783
979.423 1645
835.367 1472
676.34 1379
333.185 1363
561.295 1339
1036.415 1261
893.392 1220
980.425 1152
1019.423 873
1149.517 769
602.331 680
893.381 667
1018.426 655
789.43 641
892.381 605
1019.414 602
562.3 584
981.428 548
448.219 542
1037.403 528
836.378 502
894.391 500
1039.452 497
575.27 469
503.263 439
509.724 427
449.22 421
566.762 401
1150.543 350
788.429 349
658.315 343
575.767 329
518.725 317
566.255 297
1149.487 283
589.243 266
244.164 249
893.409 246
1020.431 226
801.382 209
362.11 184
511.177 168
836.361 168
837.387 132
1004.499 131
442.161 125
1001.412 111
1001.4 88
END IONS

To process it, I tried:
reader = ms_deisotope.MSFileLoader(datafile('feature-2-precursor-26579.mgf'))
bunch = next(reader)

And bunch is:
Scan(u'RawFile: HeLa_20KInt Index: 1 precursor: 26579 Charge: 2 FeatureIntensity: 6018645 Feature#: 2 RtApex: 1085.76696854', index=0, time=18.0961, ms_level=2, PrecursorInformation(mz=1247.6021/0.0000, intensity=6018645.0000/0.0000, charge=2/0.0, scan_id=None))

I was expecting the product ions to be in the Scan object. What am I missing?

Deisotope on ms peak picker peaklist

Hello,
I used your ms_peak_picker repo to pick some peaks on my metabolite data sets. The data origins from either MALDI-TOF or MALDI-Orbitrap instruments and is converted from imzML to HDF5 to a simple Pandas DataFrame. I used the picker on the mean and median spectrum.
Is it possible to use your deconvolute_peaks method on the DataFrame or the picked peaklist? I tried a few things but I either got the error TypeError: __init__() got multiple values for argument 'use_subtraction' or my deconvoluted peak set is empty.
Is it just not applicable to this type of data or do I have to use some special configurations?

Unable to run on Apache Spark

I get this error when trying to us the ms_deisotope package in the spark context

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.

def deconv_spark(peak_list): import ms_deisotope from lib.componentdetection.pdata import Feature feature_list = [] # To return a new list, use the sorted() built-in function... sorted_peak_list = sorted(peak_list[1], key=lambda p: p.MZ, reverse=False) group = [] for peak in sorted_peak_list: group.append((peak.MZ,peak.Intensity,peak.RT)) deconvoluted_peaks, targeted = ms_deisotope.deconvolute_peaks(group, averagine=ms_deisotope.peptide, scorer=ms_deisotope.MSDeconVFitter(10.)) if deconvoluted_peaks.peaks > 0: for peak in deconvoluted_peaks.peaks: f = Feature() f.RT = np.median([x[2] for x in group]) f.DeconvolutedMass = peak.neutral_mass feature_list.append(f) return feature_list else: return []

Error in MzMLSerializer

Hi @mobiusklein

in the mzML writer example in the link

import ms_deisotope
from ms_deisotope.test.common import datafile
from ms_deisotope.output.mzml import MzMLSerializer

reader = ms_deisotope.MSFileLoader(datafile("small.mzML"))
with open("small.deconvoluted.mzML", 'wb') as fh:
    writer = MzMLSerializer(fh, n_spectra=len(reader))

    writer.copy_metadata_from(reader)
    for bunch in reader:
        bunch.precursor.pick_peaks()
        bunch.precursor.deconvolute()
        for product in bunch.products:
            product.pick_peaks()
            product.deconvolute()
        writer.save(bunch)

    writer.complete()
    writer.format()

I get this error

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-488-fc7db1835dfd> in <module>()
      6 with open("/home/ubuntu/playground/XIC_HelaEcoli_11_1_decon.mzML", 'wb') as fh:
      7 
----> 8     writer = MzMLSerializer(fh, n_spectra=len(reader))
      9 
     10     writer.copy_metadata_from(reader)

/opt/anaconda3/lib/python3.6/site-packages/ms_deisotope-0.0.6-py3.6-linux-x86_64.egg/ms_deisotope/output/mzml.py in __init__(self, handle, n_spectra, compression, deconvoluted, sample_name, build_extra_index, data_encoding)
    197         if data_encoding is None:
    198             data_encoding = {
--> 199                 writer.MZ_ARRAY: np.float64,
    200                 writer.INTENSITY_ARRAY: np.float32,
    201                 writer.CHARGE_ARRAY: np.int32,

AttributeError: 'NoneType' object has no attribute 'MZ_ARRAY'

The same happens with my own file.

Cheers,

Giuseppe

Installing ms_deisotope, get warning "The C extension could not be compiled"

I am trying to install ms_deisotope on my ubuntu machine, using python3.6. I checkout the code and run:

python3 setup.py install

results in:

Version is: '0.0.6'
local variable 'macros' referenced before assignment
Version is: '0.0.6'
/usr/lib/python3.6/distutils/dist.py:261: UserWarning: Unknown distribution option: 'project_urls'
  warnings.warn(msg)
running install
running bdist_egg
running egg_info

...

Using /home/ubuntu/.local/lib/python3.6/site-packages
Finished processing dependencies for ms-deisotope==0.0.6
***************************************************************************
WARNING: The C extension could not be compiled, speedups are not enabled.
Plain-Python build succeeded.
***************************************************************************

How do I install ms_deisotope on my machine, with C extensions compiled?

Creating a release of ms_deisotope

Hello!

Just for some context, I have been working with @infusini to get ms_deisotope working for our project.

I have been working off master, though I noticed there have been commits going into master. This introduces a problem for me. I automatically checkout and build ms_deisotope, and without a release/tag there is a risk that I will be checking out new changes which may break how I use ms_deisotope.

Are you able to create a release and/or tag a version of ms_deisotope? This will allow me to checkout that version and know it is consistent, and gives me the flexibility to opt-in to new changes that you create.

Thanks for your time!

Can't build ms_deisotope on 32-bit Python

ms_deisotope depends on brain-isotopic-distribution, and ms_peak_picker. However we have a problem building ms_peak_picker.

We are using Python v3.8.10 32-bit running on Windows 7. I understand that a prebuilt wheel is available for 64-bit Python? Unfortunately for various reasons, we can only use 32-bit Python on this machine.

I'm using Poetry to manage my virtual environment. Here's a minimal pyproject.toml file that I used to set up the virtual environment with Poetry:

[tool.poetry]
name = "vimms-fusion"
version = "2.0.0"
description = ""
authors = ["Joe Wandy <[email protected]>"]
readme = "README.md"
packages = [{include = "vimms_fusion"}]

[tool.poetry.dependencies]
python = ">3.8,<3.12"
ms-peak-picker = "*"
brain-isotopic-distribution = "*"
ms-deisotope = "*"
numpy = "*"
scipy = { url = "https://download.lfd.uci.edu/pythonlibs/archived/SciPy-1.8.1-cp38-cp38-win32.whl" }

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

And we get this error when doing poetry install:

Updating dependencies
Resolving dependencies... (0.5s)

Package operations: 4 installs, 0 updates, 0 removals

  • Installing numpy (1.24.4)
  • Installing scipy (1.8.1 https://download.lfd.uci.edu/pythonlibs/archived/SciPy-1.8.1-cp38-cp38-win32.whl)
  • Installing six (1.16.0)
  • Installing ms-peak-picker (0.1.41): Failed

  ChefBuildError

  Backend subprocess exited when trying to invoke get_requires_for_build_wheel

  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\double_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\fft_patterson_charge_state.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\fticr_denoising.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\interval_t_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\interval_t_vector.pyx:68:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  warning: src\ms_peak_picker\_c\interval_t_vector.pyx:69:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_index.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_picker.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_set.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\peak_statistics.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\peak_statistics.pyx:726:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\scan_averaging.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\search.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Compiler\Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: C:\Users\joewa\AppData\Local\Temp\tmprdtlp9eu\ms_peak_picker-0.1.41\src\ms_peak_picker\_c\size_t_vector.pxd
    tree = Parsing.p_module(s, pxd, full_module_name)
  warning: src\ms_peak_picker\_c\size_t_vector.pyx:43:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310
  warning: src\ms_peak_picker\_c\size_t_vector.pyx:44:0: The 'DEF' statement is deprecated and will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310

  Error compiling Cython file:
  ------------------------------------------------------------
  ...
          PyObject_Free(info.shape)


      cpdef void qsort(self, bint reverse=False) nogil:
          if reverse:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t_reverse)
                                                                  ^
  ------------------------------------------------------------

  src\ms_peak_picker\_c\size_t_vector.pyx:331:64: Cannot assign type 'int (const void *, const void *) except? -1 nogil' to 'int (*)(void *, void *) noexcept nogil'

  Error compiling Cython file:
  ------------------------------------------------------------
  ...

      cpdef void qsort(self, bint reverse=False) nogil:
          if reverse:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t_reverse)
          else:
              qsort(self.get_data(), self.size(), sizeof(size_t), compare_value_size_t)
                                                                  ^
  ------------------------------------------------------------

  src\ms_peak_picker\_c\size_t_vector.pyx:333:64: Cannot assign type 'int (const void *, const void *) except? -1 nogil' to 'int (*)(void *, void *) noexcept nogil'
  Traceback (most recent call last):
    File "<string>", line 235, in <module>
    File "<string>", line 213, in run_setup
    File "<string>", line 82, in make_cextensions
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1134, in cythonize
      cythonize_one(*args)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1301, in cythonize_one
      raise CompileError(None, pyx_file)
  Cython.Compiler.Errors.CompileError: src/ms_peak_picker/_c/size_t_vector.pyx
  Building with OpenMP? True
  Version is: '0.1.41'
  Using Directives {'embedsignature': True, 'profile': False}
  Compiling src/ms_peak_picker/_c/peak_statistics.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_set.pyx because it changed.
  Compiling src/ms_peak_picker/_c/fft_patterson_charge_state.pyx because it changed.
  Compiling src/ms_peak_picker/_c/search.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_index.pyx because it changed.
  Compiling src/ms_peak_picker/_c/double_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/size_t_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/interval_t_vector.pyx because it changed.
  Compiling src/ms_peak_picker/_c/smoother.pyx because it changed.
  Compiling src/ms_peak_picker/_c/scan_averaging.pyx because it changed.
  Compiling src/ms_peak_picker/_c/fticr_denoising.pyx because it changed.
  Compiling src/ms_peak_picker/_c/peak_picker.pyx because it changed.
  [ 1/12] Cythonizing src/ms_peak_picker/_c/double_vector.pyx
  [ 2/12] Cythonizing src/ms_peak_picker/_c/fft_patterson_charge_state.pyx
  [ 3/12] Cythonizing src/ms_peak_picker/_c/fticr_denoising.pyx
  [ 4/12] Cythonizing src/ms_peak_picker/_c/interval_t_vector.pyx
  [ 5/12] Cythonizing src/ms_peak_picker/_c/peak_index.pyx
  [ 6/12] Cythonizing src/ms_peak_picker/_c/peak_picker.pyx
  [ 7/12] Cythonizing src/ms_peak_picker/_c/peak_set.pyx
  [ 8/12] Cythonizing src/ms_peak_picker/_c/peak_statistics.pyx
  [ 9/12] Cythonizing src/ms_peak_picker/_c/scan_averaging.pyx
  [10/12] Cythonizing src/ms_peak_picker/_c/search.pyx
  [11/12] Cythonizing src/ms_peak_picker/_c/size_t_vector.pyx
  Traceback (most recent call last):
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
      main()
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 335, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "C:\Users\joewa\AppData\Roaming\pypoetry\venv\lib\site-packages\pyproject_hooks\_in_process\_in_process.py", line 118, in get_requires_for_build_wheel
      return hook(config_settings)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 341, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=['wheel'])
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 323, in _get_build_requires
      self.run_setup()
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 487, in run_setup
      super(_BuildMetaLegacyBackend,
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\setuptools\build_meta.py", line 338, in run_setup
      exec(code, locals())
    File "<string>", line 235, in <module>
    File "<string>", line 213, in run_setup
    File "<string>", line 82, in make_cextensions
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1134, in cythonize
      cythonize_one(*args)
    File "C:\Users\joewa\AppData\Local\Temp\tmpsjq_pwk8\.venv\lib\site-packages\Cython\Build\Dependencies.py", line 1301, in cythonize_one
      raise CompileError(None, pyx_file)
  Cython.Compiler.Errors.CompileError: src/ms_peak_picker/_c/size_t_vector.pyx


  at ~\AppData\Roaming\pypoetry\venv\lib\site-packages\poetry\installation\chef.py:147 in _prepare
      143│
      144│                 error = ChefBuildError("\n\n".join(message_parts))
      145│
      146│             if error is not None:
    → 147│                 raise error from None
      148│
      149│             return path
      150│
      151│     def _prepare_sdist(self, archive: Path, destination: Path | None = None) -> Path:

Note: This error originates from the build backend, and is likely not a problem with poetry but with ms-peak-picker (0.1.41) not supporting PEP 517 builds. You can verify this by running 'pip wheel --use-pep517 "ms-peak-picker (==0.1.41)"'.

This problem doesn't occur when I tested on Python v3.8.10 64-bit, so I'm thinking the above compilation error is specific to 32-bit Python. Any help or advice on how to fix this would be appreciated. Thanks a million!

Errors on import

I did a plain Python install on Python 2.7, and when I do the import I get these errors:

>>> import ms_deisotope
No module named composition
(ImportError('No module named averagine',), 'averagine')
No module named scoring

Have I missed a step somewhere?

erron on import

Hi @mobiusklein,

Sorry to bother you with this, but I'm having trouble installing the repo with the latest releases.

Below is the error:

(ms_deiso_new) [ms_deisotope-0.0.8]$ python -c "import ms_deisotope"                                                                                                                              │
No module named 'ms_deisotope._c.averagine' averagine                                                                                                                                                                 │
No module named 'ms_deisotope._c.scoring'                                                                                                                                                                             │
No module named 'ms_deisotope._c.deconvoluter_base'                                                                                                                                                                   │
No module named 'ms_deisotope._c.deconvoluter_base'                                                                                                                                                                   │
No module named 'ms_deisotope._c.deconvoluter_base'

this is from a fresh install of python (anaconda 2019.03) on CentOS 7. All the

Any insights/ideas would be greatly appreciated.

Cheers

deconvolute_peaks throws error when retention_strategy is specified

Hi @mobiusklein ,

I've been using deconvolute_peaks which has been fine until I tried to specified a retention strategy, as in the following call:

ms2_deconvoluted_peaks, _ = deconvolute_peaks(ms2_peaks_l, averagine=averagine.peptide, charge_range=(1,5), scorer=scoring.MSDeconVFitter(minimum_score=8, mass_error_tolerance=0.1), error_tolerance=4e-5, truncate_after=0.6, retention_strategy=peak_retention_strategy.TopNRetentionStrategy(n_peaks=50, base_peak_coefficient=0.05, max_mass=850.0))

and it throws this error:

ms2_deconvoluted_peaks, _ = deconvolute_peaks(ms2_peaks_l, averagine=averagine.peptide, charge_range=(1,5), scorer=scoring.MSDeconVFitter(minimum_score=8, mass_error_tolerance=0.1), error_tolerance=4e-5, truncate_after=0.6, retention_strategy=peak_retention_strategy.TopNRetentionStrategy(n_peaks=50, base_peak_coefficient=0.05, max_mass=850.0))
  File "/home/ubuntu/anaconda3/envs/py36/lib/python3.6/site-packages/ms_deisotope-0.0.9-py3.6-linux-x86_64.egg/ms_deisotope/deconvolution/api.py", line 155, in deconvolute_peaks
    decon.peaklist, peaklist, charge_range, deconvoluted_peaks)
  File "/home/ubuntu/anaconda3/envs/py36/lib/python3.6/site-packages/ms_deisotope-0.0.9-py3.6-linux-x86_64.egg/ms_deisotope/deconvolution/peak_retention_strategy.py", line 112, in __call__
    return self.retain_peaks(peaklist, original_peaklist, charge_range)
  File "/home/ubuntu/anaconda3/envs/py36/lib/python3.6/site-packages/ms_deisotope-0.0.9-py3.6-linux-x86_64.egg/ms_deisotope/deconvolution/peak_retention_strategy.py", line 174, in retain_peaks
    base_peak = max([peak.intensity for peak in base_peak_sequence])
  File "/home/ubuntu/anaconda3/envs/py36/lib/python3.6/site-packages/ms_deisotope-0.0.9-py3.6-linux-x86_64.egg/ms_deisotope/deconvolution/peak_retention_strategy.py", line 174, in <listcomp>
    base_peak = max([peak.intensity for peak in base_peak_sequence])
AttributeError: 'tuple' object has no attribute 'intensity'

I'm wondering whether this is because I'm using a list of (mz,intensity) tuples and the prepare_peaklist coercion didn't work properly, and when the retention strategy tries to access peak.intensity it's not there?

Exporting deconvoluted peak lists from a standalone MS2 scan

Thank you for this fantastic library.
Briefly what works:

  • loading a mzML file corresponding to a single MS2 scan
  • deconvolution using
    bunch.deconvolute(averagine=ms_deisotope.peptide, scorer=ms_deisotope.PenalizedMSDeconVFitter(20., 3.0), truncate_after=0.95, ignore_below=0.0, charge_range=(1, 13))
  • plotting annotated data: the isotopic distributions corresponding to different charge states are correctly identified, displayed and labelled.

What I have issues with is exporting a mzML file of the deconvoluted data.
While my knowledge of mzML is limited I tried the following to address the fact that I have no MS1 scan and no precursor list (the graphical output seems to work so I focused on the writer part)

with open("Output_deconvoluted.mzML", 'wb') as fh:
    writer = MzMLSerializer(fh, n_spectra=len(reader))  # is len(reader) correct here?
    writer.copy_metadata_from(reader)
    writer.save_scan_bunch2(bunch)
    writer.close()

Where save_scan_bunch2() is a method where I edited "precursor" out:

    def save_scan_bunch2(self, bunch, **kwargs):
        if bunch is not None:
            self.save_scan2(bunch, deconvoluted=True)
        if self.indexer is not None:
            self.indexer.add_scan_bunch2(bunch)

In save_scan2(), I just commented out the bloc staring with
if scan.precursor_information:

Now my problems really start:
The edited add_scan_bunch() so that add_scan_bunch2() looks like

    def add_scan_bunch2(self, bunch):
        if bunch is not None:
            package = {
 #                "scan_time": bunch.precursor.scan_time,
 #                "product_scan_ids": [
 #                    product.id for product in bunch.products
 #                ],
                "msms_peaks": [
                    p.index.neutral_mass for p in bunch.deconvoluted_peak_set
                    if p.chosen_for_msms
                ] if bunch.deconvoluted_peak_set is not None else [],
            }
            if bunch.has_ion_mobility():
                package['drift_time'] = bunch.drift_time
 #            self.ms1_ids[bunch.id] = MS1Record(**package)
 #        for product in bunch.products:
 #            self.msn_ids[product.id] = MSnRecord(**self._package_precursor_information(product))

All this yields a mzML file which displays using openMS as centroided deisotope peaks ( nothing else), see file at the end.

First I believe I might have an indexation problem but I am not sure.
Could it be that the issue stems from the binaryDataArrayList breaking the data into 5 parts.

Ultimately what I would like is export a charge deconvoluted spectrum (everything converted to MH+ ions, no higher charge states) and if possible a list of the isotope distributions extracted (ideally MH+) also. Perhaps it would be possible to create a new method to export an extracted isotope distribution and find a way to append them in a single mzML file?

Any help would be very much appreciated!
Many thanks,
With my best wishes,
Jeff

If it is any help I can provide a MS2 single scan data file. The output written out is below.

<?xml version='1.0' encoding='utf-8'?>
<indexedmzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.2_idx.xsd">
  <mzML xmlns="http://psi.hupo.org/ms/mzml" version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd">
    <cvList count="2">
      <cv URI="https://raw.githubusercontent.com/HUPO-PSI/psi-ms-CV/master/psi-ms.obo" fullName="PSI-MS" id="PSI-MS" version="4.1.28"/>
      <cv URI="http://ontologies.berkeleybop.org/uo.obo" fullName="UNIT-ONTOLOGY" id="UO" version="releases/2019-03-29"/>
    </cvList>
    <fileDescription>
      <fileContent>
        <cvParam accession="MS:1000580" cvRef="PSI-MS" name="MSn spectrum" value=""/>
      </fileContent>
      <sourceFileList count="1">
        <sourceFile location="D:/test" name="20190116_EMR1_22h02_Com0-300_part.mzML" id="sf_ru_0">
          <cvParam accession="MS:1000569" cvRef="PSI-MS" name="SHA-1" value="178307a241cda7a75aa85fb1ea77fc9f6a20af13"/>
          <cvParam accession="MS:1000777" cvRef="PSI-MS" name="spectrum identifier nativeID format" value=""/>
          <cvParam accession="MS:1000584" cvRef="PSI-MS" name="mzML format" value=""/>
        </sourceFile>
      </sourceFileList>
    </fileDescription>
    <sampleList count="1">
      <sample name="sample_1" id="sample_1">
        <userParam name="SampleRun-UUID" value="8e4141e0-202a-475d-8461-cffd8674c822"/>
      </sample>
    </sampleList>
    <softwareList count="7">
      <software version="2.3-170371/2.3.0.1765" id="so_in_0">
        <cvParam accession="MS:1000532" cvRef="PSI-MS" name="Xcalibur" value=""/>
      </software>
      <software version="" id="so_default">
        <cvParam accession="MS:1000799" cvRef="PSI-MS" name="custom unreleased software tool" value=""/>
      </software>
      <software version="3.0.19011" id="so_dp_sp_0_pm_0">
        <cvParam accession="MS:1000615" cvRef="PSI-MS" name="ProteoWizard software" value=""/>
      </software>
      <software version="2.4.0-HEAD-2019-02-07" id="so_dp_sp_0_pm_1">
        <cvParam accession="MS:1000753" cvRef="PSI-MS" name="BaselineFilter" value=""/>
      </software>
      <software version="2.4.0-HEAD-2019-02-07" id="so_dp_sp_0_pm_2">
        <cvParam accession="MS:1000799" cvRef="PSI-MS" name="custom unreleased software tool" value=""/>
      </software>
      <software version="2.4.0-HEAD-2019-02-07" id="so_dp_sp_0_pm_3">
        <cvParam accession="MS:1000799" cvRef="PSI-MS" name="custom unreleased software tool" value=""/>
      </software>
      <software version="0.0.9" id="ms_deisotope_1">
        <cvParam accession="MS:1002990" cvRef="PSI-MS" name="ms_deisotope" value=""/>
      </software>
    </softwareList>
    <instrumentConfigurationList count="1">
      <instrumentConfiguration id="ic_0">
        <componentList count="4">
          <source order="1">
            <cvParam accession="MS:1000485" cvRef="PSI-MS" name="nanospray inlet" value=""/>
            <cvParam accession="MS:1000398" cvRef="PSI-MS" name="nanoelectrospray" value=""/>
          </source>
          <analyzer order="2">
            <cvParam accession="MS:1000014" cvRef="PSI-MS" name="accuracy" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value=""/>
            <cvParam accession="MS:1000022" cvRef="PSI-MS" name="TOF Total Path Length" unitAccession="UO:0000008" unitCvRef="UO" unitName="meter" value=""/>
            <cvParam accession="MS:1000024" cvRef="PSI-MS" name="final MS exponent" value=""/>
            <cvParam accession="MS:1000025" cvRef="PSI-MS" name="magnetic field strength" unitAccession="UO:0000228" unitCvRef="UO" unitName="tesla" value=""/>
            <cvParam accession="MS:1000081" cvRef="PSI-MS" name="quadrupole" value=""/>
          </analyzer>
          <analyzer order="3">
            <cvParam accession="MS:1000014" cvRef="PSI-MS" name="accuracy" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value=""/>
            <cvParam accession="MS:1000022" cvRef="PSI-MS" name="TOF Total Path Length" unitAccession="UO:0000008" unitCvRef="UO" unitName="meter" value=""/>
            <cvParam accession="MS:1000024" cvRef="PSI-MS" name="final MS exponent" value=""/>
            <cvParam accession="MS:1000025" cvRef="PSI-MS" name="magnetic field strength" unitAccession="UO:0000228" unitCvRef="UO" unitName="tesla" value=""/>
            <cvParam accession="MS:1000484" cvRef="PSI-MS" name="orbitrap" value=""/>
          </analyzer>
          <detector order="4">
            <cvParam accession="MS:1000028" cvRef="PSI-MS" name="detector resolution" value=""/>
            <cvParam accession="MS:1000029" cvRef="PSI-MS" name="sampling frequency" unitAccession="UO:0000106" unitCvRef="UO" unitName="hertz" value=""/>
            <cvParam accession="MS:1000624" cvRef="PSI-MS" name="inductive detector" value=""/>
          </detector>
        </componentList>
      </instrumentConfiguration>
    </instrumentConfigurationList>
    <dataProcessingList count="1">
      <dataProcessing id="dp_sp_0">
        <processingMethod order="0" softwareRef="so_dp_sp_0_pm_0">
          <cvParam accession="MS:1000544" cvRef="PSI-MS" name="Conversion to mzML" value=""/>
        </processingMethod>
        <processingMethod order="0" softwareRef="so_dp_sp_0_pm_1">
          <cvParam accession="MS:1000593" cvRef="PSI-MS" name="baseline reduction" value=""/>
          <cvParam accession="MS:1000747" cvRef="PSI-MS" name="completion time" value="2019-07-19+16:13"/>
          <userParam name="parameter: in" value="C:/Users/Greis002/AppData/Local/Temp/TOPPView_20190719_161335_BMS-2YZBKY1_4624_1_in"/>
          <userParam name="parameter: out" value="C:/Users/Greis002/AppData/Local/Temp/TOPPView_20190719_161335_BMS-2YZBKY1_4624_1_out"/>
          <userParam name="parameter: struc_elem_length" value="3.0"/>
          <userParam name="parameter: struc_elem_unit" value="Thomson"/>
          <userParam name="parameter: method" value="tophat"/>
          <userParam name="parameter: log" value=""/>
          <userParam name="parameter: debug" value="0.0"/>
          <userParam name="parameter: threads" value="1.0"/>
          <userParam name="parameter: no_progress" value="true"/>
          <userParam name="parameter: force" value="false"/>
          <userParam name="parameter: test" value="false"/>
        </processingMethod>
        <processingMethod order="0" softwareRef="so_dp_sp_0_pm_2">
          <cvParam accession="MS:1001486" cvRef="PSI-MS" name="data filtering" value=""/>
          <cvParam accession="MS:1000747" cvRef="PSI-MS" name="completion time" value="2019-07-19+16:16"/>
        </processingMethod>
        <processingMethod order="0" softwareRef="so_dp_sp_0_pm_3">
          <cvParam accession="MS:1001486" cvRef="PSI-MS" name="data filtering" value=""/>
          <cvParam accession="MS:1000747" cvRef="PSI-MS" name="completion time" value="2019-07-19+19:26"/>
        </processingMethod>
      </dataProcessing>
    </dataProcessingList>
    <run defaultInstrumentConfigurationRef="ic_0" sampleRef="sample_1" id="RUN_1">
      <spectrumList count="1" defaultDataProcessingRef="dp_sp_0">
        <spectrum index="0" defaultArrayLength="23" id="controllerType=0 controllerNumber=1 scan=1">
          <cvParam accession="MS:1000511" cvRef="PSI-MS" name="ms level" value="2"/>
          <cvParam accession="MS:1000580" cvRef="PSI-MS" name="MSn spectrum" value=""/>
          <cvParam accession="MS:1000504" cvRef="PSI-MS" name="base peak m/z" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value="2024.3660346586512"/>
          <cvParam accession="MS:1000505" cvRef="PSI-MS" name="base peak intensity" unitAccession="MS:1000131" unitCvRef="PSI-MS" unitName="number of detector counts" value="12599.448654174805"/>
          <cvParam accession="MS:1000285" cvRef="PSI-MS" name="total ion current" value="79548.09947953442"/>
          <cvParam accession="MS:1000528" cvRef="PSI-MS" name="lowest observed m/z" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value="1998.7206726276697"/>
          <cvParam accession="MS:1000527" cvRef="PSI-MS" name="highest observed m/z" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value="2096.0621316761285"/>
          <cvParam accession="MS:1000130" cvRef="PSI-MS" name="positive scan" value=""/>
          <cvParam accession="MS:1000127" cvRef="PSI-MS" name="centroid spectrum" value=""/>
          <scanList count="1">
            <cvParam accession="MS:1000795" cvRef="PSI-MS" name="no combination" value=""/>
            <scan instrumentConfigurationRef="ic_0">
              <cvParam accession="MS:1000927" cvRef="PSI-MS" name="ion injection time" unitAccession="UO:0000028" unitCvRef="UO" unitName="millisecond" value="0"/>
              <cvParam accession="MS:1000927" cvRef="PSI-MS" name="ion injection time" unitAccession="UO:0000028" unitCvRef="UO" unitName="millisecond" value="249.999999254942"/>
              <cvParam accession="MS:1000016" cvRef="PSI-MS" name="scan start time" unitAccession="UO:0000031" unitCvRef="UO" unitName="minute" value="0.043343780000000005"/>
              <userParam name="[Thermo Trailer Extra]Monoisotopic M/Z:" value="0.0"/>
              <scanWindowList count="1">
                <scanWindow>
                  <cvParam accession="MS:1000501" cvRef="PSI-MS" name="scan window lower limit" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value="297.016078153813"/>
                  <cvParam accession="MS:1000500" cvRef="PSI-MS" name="scan window upper limit" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value="20202.6853922973"/>
                </scanWindow>
              </scanWindowList>
            </scan>
          </scanList>
          <binaryDataArrayList count="5">
            <binaryDataArray encodedLength="260">
              <cvParam accession="MS:1000514" cvRef="PSI-MS" name="m/z array" unitAccession="MS:1000040" unitCvRef="PSI-MS" unitName="m/z" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000523" cvRef="PSI-MS" name="64-bit float" value=""/>
              <binary>
                eJwBuABH/y64e2RoQ59AfFj/GxKEn0APF53UdZGfQLkMHhsRlJ9AabDZpw/En0Co5SD8G+SfQDnx87TW5J9A4IfUvBM8oECwohMfG1igQNF/gsJ7WKBAMWHMT7xCn0AQfy7HHI6fQPxFr5m1G6BAOzS5zhZRoEBgfCo7mHGfQMjHCajYAqBA1L73xqMJoEB6xPiL1hSgQMYmdJjdMKBAcCDK0Xahn0AJGrnPH2CgQNtbAfjhOp9AzFsS3vPan0BWKljD
              </binary>
            </binaryDataArray>
            <binaryDataArray encodedLength="140">
              <cvParam accession="MS:1000515" cvRef="PSI-MS" name="intensity array" unitAccession="MS:1000131" unitCvRef="PSI-MS" unitName="number of detector counts" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <binary>
                eJwBXACj//yAhUTheKFEhJMXRFrvokQMsT9FsaLTRJFNgUQ2I5JERxZ2RFrfWETRQnBExlKxRNOSdkQTiypE8R2tRW8B30SkPwBGOAgMRcleNkbL3URGwhO+RaCpIUahanZFXB0m/Q==
              </binary>
            </binaryDataArray>
            <binaryDataArray encodedLength="36">
              <cvParam accession="MS:1000516" cvRef="PSI-MS" name="charge array" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000519" cvRef="PSI-MS" name="32-bit integer" value=""/>
              <binary>
                eJxjZGBgYCQCMwExMxJmxYLZoJgdigEI7ABJ
              </binary>
            </binaryDataArray>
            <binaryDataArray encodedLength="140">
              <cvParam accession="MS:1000786" cvRef="PSI-MS" name="non-standard data array" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <userParam name="deconvolution score array" value=""/>
              <binary>
                eJwBXACj/2T82kEPjKpBMWSyQUAftUFgs4lCFDHZQQk0u0ElUrtBf/HVQbeI7UHjwcJB0ngPQrsqp0Eiy8FB5IPjQWuBSUJvtSJD66kXQlr3O0MSW5BDUvjhQiReWEPbMPlBmi8qDw==
              </binary>
            </binaryDataArray>
            <binaryDataArray arrayLength="448" encodedLength="2056">
              <cvParam accession="MS:1000786" cvRef="PSI-MS" name="non-standard data array" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <userParam name="isotopic envelopes array" value=""/>
              <binary>
                eJxVlHtYlVUWxvf5jlpgmkbDJRRhTEa8VY+GF7zAXu+ysDTDxriMis1oCoMSSpphkAPk4BUwvDOkgiOCaVwUjYQkFJEnUhIBUxy8gD7HC47B+c73nTPHytMz+5/9z2+971pr77WE+PXEeqp4d20qzQtQsTf2BoVGqFhx24kWfKyi/+R2OXanisvuBfI3XKR7a9hUUk8lgRp25x6ktEgNdxJW0sEkDW3BG6gxR4MQSVOe8GfXaYj+1IXOHtQw6/hUKqvV8Oy9s/LQHQ0D512RR3vreFAwyaH/yB7/algzpVZomB6ykypaNeRTNX0ldKzaNYi+99b/T3+1txVffzYC2wKtKAtIRkGkFf8454nqJCvi5l2kizlWbE5PoSd8bx8bvj9+nCyBNhQ49URVpA3pz+yhR0k2PFiSQtdybBizBg4+wdeGkK/WUsNUG17ruEWmhTYolU9TXqoNMQ1b5L08G8Y+/3t/DrQaOG7lUCq4b+Am33v0rVD4i2n/ovx+Cr+ZcF8e9bbfYr+Db6pQuGlCMJ2vV7g7o5b+26pwyOEXSbuvsIt+XV4VRjZlVDr4K6cUvtK1jUwXFN6vZtC5NoUTLvegmocK952TLHcZjXzshX86ePPzKroybwRtH6IiJfIdsr6qInjYGtLZ/u4PUihrtoprcdny5AIVn65Jl/eWqxjnMej3/GI1hHT2lzs+1lCa96UcmapBLwknY7qGH48NpWM7NRR/tJ3m5mlImVxBzxzR4FXag0pOaDgxP9ehs+snwZsCAuTSNsF9d34t57cL/jz6G1llEpyaO5OmPBT8odtrFNMtOK2+VF7VBR9aXSO3GA28b5pC8582cENIdtATvfVrFY4Pqg1q36Dw6aP1MipT4UY/s8zfpvDSpe2yT7bC/oHNsnCvwrffKpPX/q1wVEZLkMshe58WDJDHixT+YdBIR36B6y3w+mCTHJVpwR/ivpQ/bLegYeg4Cs+xYN4wRkKeBSWLE/FcoQVD/nKXZhVZcGT4MFSUWeC/uoYSKywYvWQVVlRboG1xQ905C0J6VcjXL1jw6FSnw+c7V8GP/2+Th+DL3m/LVwYKbikOl+97Cy6YvZgSBwtOr4mgo76CV0RLMvkJ9gwOp+EjBbt2vETRLws+0ZFGKaMFT7oyg/b5C37qZrmsGy+4sG6uw8dr+q8+yTMFu0/YRGmzBA//uYHOzhY8sLudtDDBy9tCMWaO4HxTNOIjBYdcKsSBvwr+u7oRPy4UHJMbhaeiBJs+I8gYwc037tInsYLfye50zEdunuDS996Utw/Y9Wvy5exCwRETw2TiYbt+ZjRtLBI8N2sZnS4VvPdqKFnKBKtn1tGUcsG314Ta+yZ4xIgzlHVK8IzixVReLXjPgJuyuUbwN5ZLjnpMqYZf6vFMM3DYlo0UtsHALyU4Y/dmA2dlVqIu08DZsg29txo4flUF/HcYeNyGM1i028Avby/CnhwDZ7h/gYt7DeznEYEe+w3sEthJ/vkGtvpHO+p5vI+SmxfJrn46vN4ol2+56oifMp6KPXVMvtRAzj460pbNxQpfHa9P3Iqa4Tqqph/DC6/oKK+rxYf+OsY0nkZ9gI51F77Fn4LscScPIHGqjtrQZDS9oWPJYG8MeVuHX0C9w/fxnFfV1fwyv9VDK2VoLyNP/luFdHYy8oSk+VTZ28gL2ytpdV8j+z07Bl79jbwg/AOcdzFye2EoUlyNvKpwNAZ7GPnWUlec97RzETfoEy8jlyw7Qh4+Rp5myKCmwUYe2YsdvsMazSjq/rOc0WJG0nutcmKrGSXxMVR+3Qyv78bSpA4zYnwaqdVkRvmhF7G804ye4+PQr8uMAVuzsMtiRq17HkYLFR91HkZlDxUNCZvxrpOK3KvxeNBHhVPVKKx+TsWdm87wdVOhBxQ5/H9qtOKP1SeCSlqseLQ8Sta2WvGfn4Mp9aYVobVHpN5hRaxxn9xx14o+iSZJD+37/NZWutBlRffKYgrXrCjxuUSdwobd74/C+p42XLZcJ3dnG1q86ulkXxs+n5NBM11sOGdOJJObDQ8XudH/ALkT1hs=
              </binary>
            </binaryDataArray>
          </binaryDataArrayList>
        </spectrum>
      </spectrumList>
      <chromatogramList count="2" defaultDataProcessingRef="dp_sp_0">
        <chromatogram index="0" defaultArrayLength="1" id="TIC">
          <cvParam accession="MS:1000235" cvRef="PSI-MS" name="total ion current chromatogram" value=""/>
          <binaryDataArrayList count="2">
            <binaryDataArray encodedLength="16">
              <cvParam accession="MS:1000595" cvRef="PSI-MS" name="time array" unitAccession="UO:0000031" unitCvRef="UO" unitName="minute" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <binary>
                eJyz7zS0BQADOgE3
              </binary>
            </binaryDataArray>
            <binaryDataArray encodedLength="16">
              <cvParam accession="MS:1000515" cvRef="PSI-MS" name="intensity array" unitAccession="MS:1000131" unitCvRef="PSI-MS" unitName="number of detector counts" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <binary>
                eJzjjZvtDgACzwFO
              </binary>
            </binaryDataArray>
          </binaryDataArrayList>
        </chromatogram>
        <chromatogram index="1" defaultArrayLength="1" id="BPC">
          <cvParam accession="MS:1000628" cvRef="PSI-MS" name="basepeak chromatogram" value=""/>
          <binaryDataArrayList count="2">
            <binaryDataArray encodedLength="16">
              <cvParam accession="MS:1000595" cvRef="PSI-MS" name="time array" unitAccession="UO:0000031" unitCvRef="UO" unitName="minute" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <binary>
                eJyz7zS0BQADOgE3
              </binary>
            </binaryDataArray>
            <binaryDataArray encodedLength="16">
              <cvParam accession="MS:1000515" cvRef="PSI-MS" name="intensity array" unitAccession="MS:1000131" unitCvRef="PSI-MS" unitName="number of detector counts" value=""/>
              <cvParam accession="MS:1000574" cvRef="PSI-MS" name="zlib compression" value=""/>
              <cvParam accession="MS:1000521" cvRef="PSI-MS" name="32-bit float" value=""/>
              <binary>
                eJw7fdfFDQAGlQIz
              </binary>
            </binaryDataArray>
          </binaryDataArrayList>
        </chromatogram>
      </chromatogramList>
    </run>
  </mzML>
  <indexList count="2">
    <index name="spectrum">
      <offset idRef="controllerType=0 controllerNumber=1 scan=1">7327</offset>
    </index>
    <index name="chromatogram">
      <offset idRef="TIC">15195</offset>
      <offset idRef="BPC">16489</offset>
    </index>
  </indexList>
  <indexListOffset>17812</indexListOffset>
  <fileChecksum>2960f08c3755eea9876157ad8d8e1ad5d7501322</fileChecksum>
</indexedmzML>


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.