public static IEnumerable <TItem> EnumRange <TItem>(IMzLiteArray <TItem> items, IndexRange range) { for (int i = range.Low; i <= range.Heigh; i++) { yield return(items[i]); } }
/// <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 static T[] ToCLRArray <T>(this IMzLiteArray <T> array) { T[] copy = new T[array.Length]; for (int i = 0; i < array.Length; i++) { copy[i] = array[i]; } return(copy); }
/// <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 static IEnumerable <TItem> Search <TItem, TQuery>( IMzLiteArray <TItem> items, TQuery query, Func <TItem, TQuery, int> searchCompare) { IndexRange result; if (Search(items, query, searchCompare, out result)) { return(IndexRange.EnumRange(items, result)); } else { return(Enumerable.Empty <TItem>()); } }
public static bool Search <TItem, TQuery>( IMzLiteArray <TItem> items, TQuery query, Func <TItem, TQuery, int> searchCompare, out IndexRange result) { int lo = 0; int hi = items.Length - 1; while (lo <= hi) { int mid = lo + ((hi - lo) >> 1); int c = searchCompare(items[mid], query); if (c == 0) { int resultLow = mid; int resultHeigh = mid; // search tees low for (int i = mid - 1; i >= 0; i--) { if (searchCompare(items[i], query) == 0) { resultLow = i; } else { break; } } // search tees heigh for (int i = mid + 1; i < items.Length; i++) { if (searchCompare(items[i], query) == 0) { resultHeigh = i; } else { break; } } result = new IndexRange(resultLow, resultHeigh); return(true); } if (c < 0) { lo = mid + 1; } else { hi = mid - 1; } } result = null; return(false); }