예제 #1
0
        public ChromData Truncate(double minTime, double maxTime)
        {
            if (!ReferenceEquals(Times, RawTimes))
            {
                throw new InvalidOperationException("Cannot truncate data set after interpolation"); // Not L10N
            }
            if (Peaks.Count > 0)
            {
                throw new InvalidOperationException("Cannot truncate after peak detection"); // Not L10N
            }
            // Avoid truncating chromatograms down to something less than half the window width.
            double minLength = (maxTime - minTime) / 2;

            minTime = Math.Min(minTime, Times[Times.Length - 1] - minLength);
            maxTime = Math.Max(maxTime, Times[0] + minLength);
            int firstIndex = Array.BinarySearch(Times, (float)minTime);

            if (firstIndex < 0)
            {
                firstIndex = ~firstIndex;
                firstIndex = Math.Max(firstIndex, 0);
            }
            int lastIndex = Array.BinarySearch(Times, (float)maxTime);

            if (lastIndex < 0)
            {
                lastIndex = ~lastIndex + 1;
                lastIndex = Math.Min(lastIndex, Times.Length - 1);
            }
            if (firstIndex >= lastIndex)
            {
                return(this);
            }
            if (firstIndex == 0 && lastIndex == Times.Length - 1)
            {
                return(this);
            }
            var newChromData = new ChromData(Key, ProviderId)
            {
                Extra = Extra,
            };

            newChromData.Times         = newChromData.RawTimes = SubArray(RawTimes, firstIndex, lastIndex);
            newChromData.ScanIndexes   = newChromData.RawScanIds = SubArray(RawScanIds, firstIndex, lastIndex);
            newChromData.Intensities   = newChromData.RawIntensities = SubArray(RawIntensities, firstIndex, lastIndex);
            newChromData.RawMassErrors = SubArray(RawMassErrors, firstIndex, lastIndex);
            newChromData.DocNode       = DocNode;
            return(newChromData);
        }
예제 #2
0
        /// <summary>
        /// Returns a ChromPeak and IFoundPeak that match the start and end times a particular other IFoundPeak
        /// that was found by Crawdad.
        /// </summary>
        public Tuple <ChromPeak, IFoundPeak> IntegrateFoundPeak(IFoundPeak peakMax, ChromPeak.FlagValues flags)
        {
            Assume.IsNotNull(PeakFinder);
            var interpolatedPeak = PeakFinder.GetPeak(peakMax.StartIndex, peakMax.EndIndex);

            if ((flags & ChromPeak.FlagValues.forced_integration) != 0 && ChromData.AreCoeluting(peakMax, interpolatedPeak))
            {
                flags &= ~ChromPeak.FlagValues.forced_integration;
            }

            var chromPeak = new ChromPeak(PeakFinder, interpolatedPeak, flags, InterpolatedTimeIntensities, RawTimeIntensities?.Times);

            if (TimeIntervals != null)
            {
                chromPeak = IntegratePeakWithoutBackground(InterpolatedTimeIntensities.Times[peakMax.StartIndex], InterpolatedTimeIntensities.Times[peakMax.EndIndex], flags);
            }

            return(Tuple.Create(chromPeak, interpolatedPeak));
        }
예제 #3
0
 public ChromDataPeak(ChromData data, CrawdadPeak peak)
 {
     Data      = data;
     _crawPeak = peak;
 }
예제 #4
0
 public ChromDataPeak(ChromData data, IFoundPeak peak)
 {
     Data      = data;
     _crawPeak = peak;
 }