public clsCorrelation(clsBinningOptions binningOptions) { mBinningOptions = binningOptions; NoiseThresholdIntensity = 0; mCoefficients = new[] { 76.180091729471457, -86.505320329416776, 24.014098240830911, -1.231739572450155, 0.001208650973866179, -0.000005395239384953 }; }
private float CompareSpectra( clsMSSpectrum fragSpectrum1, clsMSSpectrum fragSpectrum2, clsBinningOptions binningOptions, bool considerOffsetBinnedData = true) { // Compares the two spectra and returns a similarity score (ranging from 0 to 1) // Perfect match is 1; no similarity is 0 // Note that both the standard binned data and the offset binned data are compared // If considerOffsetBinnedData = True, then the larger of the two scores is returned // similarity scores is returned // // If an error, returns -1 var binnedSpectrum1 = new clsBinnedData(); var binnedSpectrum2 = new clsBinnedData(); try { var dataComparer = new clsCorrelation(binningOptions); RegisterEvents(dataComparer); const clsCorrelation.cmCorrelationMethodConstants eCorrelationMethod = clsCorrelation.cmCorrelationMethodConstants.Pearson; // Bin the data in the first spectrum var success = CompareSpectraBinData(dataComparer, fragSpectrum1, binnedSpectrum1); if (!success) { return(-1); } // Bin the data in the second spectrum success = CompareSpectraBinData(dataComparer, fragSpectrum2, binnedSpectrum2); if (!success) { return(-1); } // Now compare the binned spectra // Similarity will be 0 if either instance of BinnedIntensities has fewer than 5 data points var similarity1 = dataComparer.Correlate(binnedSpectrum1.BinnedIntensities, binnedSpectrum2.BinnedIntensities, eCorrelationMethod); if (!considerOffsetBinnedData) { return(similarity1); } var similarity2 = dataComparer.Correlate(binnedSpectrum1.BinnedIntensitiesOffset, binnedSpectrum2.BinnedIntensitiesOffset, eCorrelationMethod); return(Math.Max(similarity1, similarity2)); } catch (Exception ex) { ReportError("CompareSpectra: " + ex.Message, ex); return(-1); } }
private float CompareFragSpectraForParentIons( clsScanList scanList, clsSpectraCache spectraCache, int parentIonIndex1, int parentIonIndex2, clsBinningOptions binningOptions, MASICPeakFinder.clsBaselineNoiseOptions noiseThresholdOptions, DataInput.clsDataImport dataImportUtilities) { // Compare the fragmentation spectra for the two parent ions // Returns the highest similarity score (ranging from 0 to 1) // Returns 0 if no similarity or no spectra to compare // Returns -1 if an error float highestSimilarityScore; try { if (scanList.ParentIons[parentIonIndex1].CustomSICPeak || scanList.ParentIons[parentIonIndex2].CustomSICPeak) { // Custom SIC values do not have fragmentation spectra; nothing to compare highestSimilarityScore = 0; } else if (scanList.ParentIons[parentIonIndex1].MRMDaughterMZ > 0 || scanList.ParentIons[parentIonIndex2].MRMDaughterMZ > 0) { // MRM Spectra should not be compared highestSimilarityScore = 0; } else { highestSimilarityScore = 0; foreach (var fragSpectrumIndex1 in scanList.ParentIons[parentIonIndex1].FragScanIndices) { if (!spectraCache.GetSpectrum(scanList.FragScans[fragSpectrumIndex1].ScanNumber, out var spectrum1, false)) { SetLocalErrorCode(clsMASIC.eMasicErrorCodes.ErrorUncachingSpectrum); return(-1); } // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (!clsMASIC.DISCARD_LOW_INTENSITY_MSMS_DATA_ON_LOAD) #pragma warning disable 162 // ReSharper disable HeuristicUnreachableCode { dataImportUtilities.DiscardDataBelowNoiseThreshold(spectrum1, scanList.FragScans[fragSpectrumIndex1].BaselineNoiseStats.NoiseLevel, 0, 0, noiseThresholdOptions); } // ReSharper restore HeuristicUnreachableCode #pragma warning restore 162 foreach (var fragSpectrumIndex2 in scanList.ParentIons[parentIonIndex2].FragScanIndices) { if (!spectraCache.GetSpectrum(scanList.FragScans[fragSpectrumIndex2].ScanNumber, out var spectrum2, false)) { SetLocalErrorCode(clsMASIC.eMasicErrorCodes.ErrorUncachingSpectrum); return(-1); } // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (!clsMASIC.DISCARD_LOW_INTENSITY_MSMS_DATA_ON_LOAD) #pragma warning disable 162 // ReSharper disable HeuristicUnreachableCode { dataImportUtilities.DiscardDataBelowNoiseThreshold(spectrum2, scanList.FragScans[fragSpectrumIndex2].BaselineNoiseStats.NoiseLevel, 0, 0, noiseThresholdOptions); } // ReSharper restore HeuristicUnreachableCode #pragma warning restore 162 var similarityScore = CompareSpectra(spectrum1, spectrum2, binningOptions); if (similarityScore > highestSimilarityScore) { highestSimilarityScore = similarityScore; } } } } } catch (Exception ex) { ReportError("Error in CompareFragSpectraForParentIons", ex); return(-1); } return(highestSimilarityScore); }