/// <summary> /// Extract a rt profile for specified target mass and rt range. /// Mz range peak aggregation is closest lock mz. /// </summary> /// <returns> /// Profile array with index corresponding to continous mass spectra over rt range and mz range given. /// </returns> public static Peak2D[] RtProfile( this IMzLiteDataReader dataReader, IMzLiteArray <RtIndexEntry> rtIndex, RangeQuery rtRange, RangeQuery mzRange) { if (dataReader == null) { throw new ArgumentNullException("dataReader"); } if (rtIndex == null) { throw new ArgumentNullException("rtIndex"); } var entries = rtIndex.Search(rtRange).ToArray(); var profile = new Peak2D[entries.Length]; for (int rtIdx = 0; rtIdx < entries.Length; rtIdx++) { var entry = entries[rtIdx]; var peaks = dataReader.ReadSpectrumPeaks(entry).Peaks; var p = peaks.MzSearch(mzRange) .DefaultIfEmpty(new Peak1D(0, mzRange.LockValue)) .ClosestMz(mzRange.LockValue) .AsPeak2D(entry.Rt); profile[rtIdx] = p; } return(profile); }
public Peak2D[] GetMS2( IMzLiteDataReader dataReader, SwathQuery query, Func <IEnumerable <Peak1D>, RangeQuery, Peak1D> mzRangeSelector = null) { if (dataReader == null) { throw new ArgumentNullException("dataReader"); } if (query == null) { throw new ArgumentNullException("query"); } if (mzRangeSelector == null) { mzRangeSelector = GetClosestMz; } MSSwath swath = swathList.SearchClosestTargetMz(query); if (swath == null) { return(new Peak2D[0]); } SwathSpectrumEntry swathSpec = swath.SearchClosestRt(query); if (swathSpec == null) { return(new Peak2D[0]); } Peak1DArray spectrumPeaks = dataReader.ReadSpectrumPeaks(swathSpec.SpectrumID); Peak2D[] ms2Peaks = new Peak2D[query.CountMS2Masses]; for (int i = 0; i < query.CountMS2Masses; i++) { RangeQuery mzRange = query[i]; IEnumerable <Peak1D> mzPeaks = BinarySearch.Search(spectrumPeaks.Peaks, mzRange, MzRangeCompare); Peak1D p = mzRangeSelector(mzPeaks, mzRange); ms2Peaks[i] = new Peak2D(p.Intensity, p.Mz, swathSpec.Rt); } return(ms2Peaks); }