/// <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); }
/// <summary> /// Get all peaks by rt range. /// </summary> public static IEnumerable <TPeak> RtSearch <TPeak>( this IMzLiteArray <TPeak> peaks, RangeQuery rtRange) where TPeak : Peak2D { if (peaks == null) { throw new ArgumentNullException("peaks"); } return(BinarySearch.Search(peaks, rtRange, RtSearchCompare)); }
/// <summary> /// Get all rt index entries by rt range. /// </summary> public static IEnumerable <RtIndexEntry> Search( this IMzLiteArray <RtIndexEntry> rti, RangeQuery rtRange) { if (rti == null) { throw new ArgumentNullException("rti"); } return(BinarySearch.Search(rti, rtRange, RtSearchCompare)); }
public SwathQuery(double targetMz, RangeQuery rtRange, params RangeQuery[] ms2Masses) { if (ms2Masses == null) { throw new ArgumentNullException("ms2Masses"); } this.targetMz = targetMz; this.rtRange = rtRange; this.ms2Masses = ms2Masses; }
private static int MzRangeCompare(Peak1D p, RangeQuery mzRange) { if (p.Mz < mzRange.LowValue) { return(-1); } if (p.Mz > mzRange.HighValue) { return(1); } return(0); }
private static int RtSearchCompare <TPeak>( TPeak p, RangeQuery rtRange) where TPeak : Peak2D { if (p.Rt < rtRange.LowValue) { return(-1); } if (p.Rt > rtRange.HighValue) { return(1); } return(0); }
private static int MzSearchCompare <TPeak>( TPeak p, RangeQuery mzRange) where TPeak : Peak1D { if (p.Mz < mzRange.LowValue) { return(-1); } if (p.Mz > mzRange.HighValue) { return(1); } return(0); }
private static int RtSearchCompare( RtIndexEntry entry, RangeQuery rtRange) { if (entry.Rt < rtRange.LowValue) { return(-1); } if (entry.Rt > rtRange.HighValue) { return(1); } return(0); }
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); }
//public Peak2D[,] GetRTProfiles( // IMzLiteDataReader dataReader, // SwathQuery query, // bool getLockMz, // Func<Peak1DArray, RangeQuery, Peak1D> mzRangeSelector) //{ // var swathSpectra = swathList.SearchAllTargetMz(query) // .SelectMany(x => x.SearchAllRt(query)) // .ToArray(); // if (swathSpectra.Length > 0) // { // Peak2D[,] profile = new Peak2D[query.CountMS2Masses, swathSpectra.Length]; // for (int specIdx = 0; specIdx < swathSpectra.Length; specIdx++) // { // var swathSpec = swathSpectra[specIdx]; // var pa = dataReader.ReadSpectrumPeaks(swathSpec.SpectrumID); // for (int ms2MassIndex = 0; ms2MassIndex < query.CountMS2Masses; ms2MassIndex++) // { // RangeQuery mzRange = query[ms2MassIndex]; // Peak1D p = mzRangeSelector(pa, mzRange); // if (getLockMz) // { // profile[ms2MassIndex, specIdx] = new Peak2D(p.Intensity, mzRange.LockValue, swathSpec.Rt); // } // else // { // profile[ms2MassIndex, specIdx] = new Peak2D(p.Intensity, p.Mz, swathSpec.Rt); // } // } // } // return profile; // } // else // { // return empty2D; // } //} /// <summary> /// The default mz range peak selector function. /// </summary> private static Peak1D GetClosestMz(IEnumerable <Peak1D> peaks, RangeQuery mzRange) { return(peaks .DefaultIfEmpty(new Peak1D(0, mzRange.LockValue)) .ItemAtMin(x => Math.Abs(x.Mz - mzRange.LockValue))); }