1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
cimport numpy as np
import numpy as np
def get_peaks(self):
cdef _MSSpectrum[_Peak1D] * spec_ = self.inst.get()
cdef unsigned int n = spec_.size()
cdef np.ndarray[np.float32_t, ndim=2] peaks
peaks = np.zeros( [n,2], dtype=np.float32)
cdef _Peak1D p
cdef libcpp_vector[_Peak1D].iterator it = spec_.begin()
cdef int i = 0
while it != spec_.end():
peaks[i,0] = deref(it).getMZ()
peaks[i,1] = deref(it).getIntensity()
inc(it)
i += 1
return peaks
def set_peaks(self, np.ndarray[np.float32_t, ndim=2] peaks):
cdef _MSSpectrum[_Peak1D] * spec_ = self.inst.get()
spec_.clear(0) # emtpy vector , keep meta data
cdef _Peak1D p = _Peak1D()
cdef double mz
cdef float I
cdef int N
N = peaks.shape[0]
for i in range(N):
mz = peaks[i,0]
I = peaks[i,1]
p.setMZ(mz)
p.setIntensity(<float>I)
spec_.push_back(p)
spec_.updateRanges()
def intensityInRange(self, float mzmin, float mzmax):
cdef int n
cdef double I
cdef _MSSpectrum[_Peak1D] * spec_ = self.inst.get()
cdef int N = spec_.size()
I = 0
for i in range(N):
if deref(spec_)[i].getMZ() >= mzmin:
break
cdef _Peak1D * p
for j in range(i, N):
p = address(deref(spec_)[i])
if p.getMZ() > mzmax:
break
I += p.getIntensity()
return I
|