コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
        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;
        }
コード例 #5
0
 private static int MzRangeCompare(Peak1D p, RangeQuery mzRange)
 {
     if (p.Mz < mzRange.LowValue)
     {
         return(-1);
     }
     if (p.Mz > mzRange.HighValue)
     {
         return(1);
     }
     return(0);
 }
コード例 #6
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);
 }
コード例 #7
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);
 }
コード例 #8
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);
        }
コード例 #9
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);
        }
コード例 #10
0
        //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)));
        }