Пример #1
0
def getLocalMax(points, groupWidth, adaptiveNoise=False):
    """Get possible peaks from the points using local maxima.
        points: (numpy.array) spectrum points
        groupWidth: (float) peaks within this range will be grouped together
        adaptiveNoise: (bool) calculate noise level separately for each peak
    """
    
    groupWidth /= 2
    buff = []
    previous = None
    localMax = points[0]
    growing = True
    
    # get local maxima
    for point in points[1:]:
        
        # remember last maximum
        if localMax[1] <= point[1]:
            localMax = point
            growing = True
        
        # store local maximum
        elif growing and localMax[1] > point[1]:
                
            # try to group with previous or add new peak
            if previous!=None and (localMax[0]-groupWidth)<previous[0]:
                if localMax[1] > previous[1]:
                    buff[-1] = (objects.peak(mz=localMax[0], intensity=localMax[1]))
                    previous = localMax
            else:
                buff.append(objects.peak(mz=localMax[0], intensity=localMax[1]))
                previous = localMax
            
            localMax = point
            growing = False
        
        else:
            localMax = point
    
    # get baseline and s/n ratio
    noiseLevel, noiseWidth = getNoise(points)
    for peak in buff:
        if adaptiveNoise:
            noiseLevel, noiseWidth = getNoise(points, mz=peak.mz)
        peak.baseline = noiseLevel
        if noiseWidth != 0:
            sn = (peak.intensity-noiseLevel) / noiseWidth
            peak.sn = round(sn,3)
    
    return objects.peaklist(buff)
Пример #2
0
def findPoint(points, mz, adaptiveNoise=False):
    """Find peak for given m/z value.
        points: (numpy.array) spectrum points
        mz: (float) m/z value
        adaptiveNoise: (bool) calculate noise level separately for each peak
    """
    
    # get intensity
    i = _getIndex(points, mz)
    intensity = _interpolateLine(points[i], points[i-1], mz)
    
    # get noise
    if adaptiveNoise:
        noiseLevel, noiseWidth = getNoise(points, mz=mz)
    else:
        noiseLevel, noiseWidth = getNoise(points)
    
    # get S/N
    if noiseWidth != 0:
        sn = (intensity-noiseLevel) / noiseWidth
        sn = round(sn,3)
    else:
        sn = None
    
    # make peak
    if intensity > noiseLevel:
        peak = objects.peak(mz=mz, intensity=intensity, baseline=noiseLevel, sn=sn)
        return peak
    else:
        return False
Пример #3
0
def findPeak(points, mzRange, pickingHeight, adaptiveNoise=False):
    """Find one peak in given m/z range.
        points: (numpy.array) spectrum points
        mzRange: (list) m/z range where to find the peak
        pickingHeight: (float) peak intensity height where the mass is picked in %/100
        adaptiveNoise: (bool) calculate noise level separately for each peak
    """
    
    # get current selection
    i1 = _getIndex(points, mzRange[0])
    i2 = _getIndex(points, mzRange[1])
    selection = points[i1:i2]
    
    # get local max for current selection
    localMax = [0,0]
    for point in selection:
        if point[1] > localMax[1]:
            localMax = point
    
    # make peak
    peak = objects.peak(mz=localMax[0], intensity=localMax[1])
    
    # get centroid
    maxWidth = mzRange[1]-mzRange[0]
    centroids = getCentroids(points, [peak], pickingHeight, maxWidth, adaptiveNoise)
    
    if centroids:
        return centroids[0]
    else:
        return None
Пример #4
0
 def getSpectrum(self, discrete=False):
     """Get spectrum from document."""
     
     # parse data
     data = self._parseData()
     if not data:
         return False
     
     # parse data as peaklist (discrete points)
     if discrete:
         for x, p in enumerate(data):
             data[x] = objects.peak(p[0], p[1])
         spectrum = objects.scan(peaks=data)
     
     # parse data as spectrum (continuous line)
     else:
         spectrum = objects.scan(points=data)
     
     return spectrum
Пример #5
0
    def getSpectrum(self, discrete=False):
        """Get spectrum from document."""

        # parse data
        data = self._parseData()
        if not data:
            return False

        # parse data as peaklist (discrete points)
        if discrete:
            for x, p in enumerate(data):
                data[x] = objects.peak(p[0], p[1])
            spectrum = objects.scan(peaks=data)

        # parse data as spectrum (continuous line)
        else:
            spectrum = objects.scan(points=data)

        return spectrum
Пример #6
0
    def getSpectrum(self, scanNumber=None):
        """Get spectrum from document."""

        # init parser
        handler = scanHandler(scanNumber)
        parser = xml.sax.make_parser()
        parser.setContentHandler(handler)

        # parse document
        try:
            document = file(self.path)
            parser.parse(document)
            document.close()
            scan = handler.scan
        except stopParsing:
            scan = handler.scan
        except xml.sax.SAXException:
            return False

        # check data
        if not scan:
            return False

        # parse peaks
        try:
            points = self._parsePoints(scan)
        except:
            return False

        # parse data as peaklist (discrete points)
        if scan['spectrumType'] == 'discrete':
            for x, p in enumerate(points):
                points[x] = objects.peak(p[0], p[1])
            spectrum = objects.scan(peaks=points)

        # parse data as spectrum (continuous line)
        else:
            spectrum = objects.scan(points=points)

        # set metadata
        if scan['scanNumber']:
            spectrum.scanNumber = int(scan['scanNumber'])
        if scan['parentScanNumber']:
            spectrum.parentScanNumber = int(scan['parentScanNumber'])
        if scan['msLevel']:
            spectrum.msLevel = int(scan['msLevel'])
        if scan['polarity']:
            spectrum.polarity = scan['polarity']
        if scan['retentionTime']:
            spectrum.retentionTime = scan['retentionTime']
        if scan['totIonCurrent']:
            spectrum.totIonCurrent = float(scan['totIonCurrent'])
        if scan['basePeakMz']:
            spectrum.basePeakMZ = float(scan['basePeakMz'])
        if scan['basePeakIntensity']:
            spectrum.basePeakIntensity = float(scan['basePeakIntensity'])
        if scan['precursorMz']:
            spectrum.precursorMZ = float(scan['precursorMz'])
        if scan['precursorIntensity']:
            spectrum.precursorIntensity = float(scan['precursorIntensity'])

        return spectrum
Пример #7
0
 def getSpectrum(self, scanNumber=None):
     """Get spectrum from document."""
     
     # init parser
     handler = scanHandler(scanNumber)
     parser = xml.sax.make_parser()
     parser.setContentHandler(handler)
     
     # parse document
     try:
         document = file(self.path)
         parser.parse(document)
         document.close()
         scan = handler.scan
     except stopParsing:
         scan = handler.scan
     except xml.sax.SAXException:
         return False
     
     # check data
     if not scan:
         return False
     
     # parse peaks
     try:
         points = self._parsePoints(scan)
     except:
         return False
     
     # parse data as peaklist (discrete points)
     if scan['spectrumType'] == 'discrete':
         for x, p in enumerate(points):
             points[x] = objects.peak(p[0], p[1])
         spectrum = objects.scan(peaks=points)
     
     # parse data as spectrum (continuous line)
     else:
         spectrum = objects.scan(points=points)
     
     # set metadata
     if scan['scanNumber']:
         spectrum.scanNumber = int(scan['scanNumber'])
     if scan['parentScanNumber']:
         spectrum.parentScanNumber = int(scan['parentScanNumber'])
     if scan['msLevel']:
         spectrum.msLevel = int(scan['msLevel'])
     if scan['polarity']:
         spectrum.polarity = scan['polarity']
     if scan['retentionTime']:
         spectrum.retentionTime = scan['retentionTime']
     if scan['totIonCurrent']:
         spectrum.totIonCurrent = float(scan['totIonCurrent'])
     if scan['basePeakMz']:
         spectrum.basePeakMZ = float(scan['basePeakMz'])
     if scan['basePeakIntensity']:
         spectrum.basePeakIntensity = float(scan['basePeakIntensity'])
     if scan['precursorMz']:
         spectrum.precursorMZ = float(scan['precursorMz'])
     if scan['precursorIntensity']:
         spectrum.precursorIntensity = float(scan['precursorIntensity'])
     
     return spectrum