pymzml / pymzML

pymzML - an interface between Python and mzML Mass spectrometry Files
https://pymzml.readthedocs.io/en/latest/
MIT License
160 stars 91 forks source link

Issue Averaging Two Spectra #240

Open michaelmarty opened 4 years ago

michaelmarty commented 4 years ago

I am trying to average together multiple scans into a single summed spectrum, and I'm having issues with the add function. Perhaps I'm using it wrong, but here is an example.

To Reproduce

import pymzml

path = "strep.mzML" msrun = pymzml.run.Reader(path)

spec1 = msrun[1] spec2 = msrun[2]

average_spec = spec1 + spec2

Expected behavior The average_spec is the sum of spec1 and spec2.

Console Output

Traceback (most recent call last): File "C:/Python/UniDec3/Scripts/MTM/mzml_test.py", line 9, in average_spec = spec1 + spec2 File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 505, in add for mz, i in other_spec.peaks("reprofiled"): File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 1046, in peaks self._peak_dict["reprofiled"] = self._reprofile_Peaks() File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 1202, in _reprofile_Peaks for mz, i in self.peaks("centroided"): File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 1044, in peaks self._peak_dict["centroided"] = self._centroid_peaks() File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 1158, in _centroid_peaks i_array = [i for mz, i in self.peaks("reprofiled")] File "C:\intelpython3\lib\site-packages\pymzml\spec.py", line 1057, in peaks peaks = list(self._peak_dict[peak_type].items()) AttributeError: 'numpy.ndarray' object has no attribute 'items'

Process finished with exit code 1

Desktop (please complete the following information):

Additional context I am happy to provide an example file via email. I tried to upload it, but it wouldn't accept files larger than 10 MB.

MKoesters commented 4 years ago

Hi,

sorry to hear that this does not work for you. I tried to reproduce your issue and it worked for most of the spectra I was testing, however I saw that it did not work for spectra with too few peaks. If you could send me the files via a filesharing website of your choice or via mail to manuel.koesters@dcb.unibe.ch, this would be helpful for debugging. Also, can you check the length of your centroided peaks like len(spec.peaks("centroided")) ?

Best, Manuel

fu commented 4 years ago

Hi Manuel, Michael's data can be found here https://www.dropbox.com/s/1hqn7ij2lvw2zo9/strep.mzML?dl=0. Let me know if you don't find time to look into this :) Cheers, .c

MKoesters commented 4 years ago

Hi,

I think I found the reason and solution for this problem, you can check it out here #244 . As soon as I checked for possible side effect and maybe added another test file with an appropiate test, I'll merge this fix into the dev branch

Best, Manuel