Beispiel #1
0
        private void EvaluateBestDriftTime(int msLevel, LibKey libKey, float tolerance, List<TransitionFullScanInfo> transitions)
        {
            double? driftTime = null;
            double maxIntensity = 0;

            // Avoid picking MS2 drift times wildly different from MS1 times
            double? ms1DriftTimeBest;
            if ((msLevel == 2) && _ms1DriftTimes.ContainsKey(libKey))
            {
                ms1DriftTimeBest =
                    _ms1DriftTimes[libKey].OrderByDescending(p => p.Intensity)
                        .FirstOrDefault()
                        .DriftTime;
            }
            else
            {
                ms1DriftTimeBest = null;
            }

            const int maxHighEnergyDriftOffsetMsec = 2; // CONSIDER(bspratt): user definable? or dynamically set by looking at scan to scan drift delta? Or resolving power?
            foreach (var scan in _msDataFileScanHelper.MsDataSpectra.Where(scan => scan != null))
            {
                if (!scan.DriftTimeMsec.HasValue || !scan.Mzs.Any())
                    continue;
                if (ms1DriftTimeBest.HasValue &&
                    (scan.DriftTimeMsec.Value <
                     ms1DriftTimeBest.Value - maxHighEnergyDriftOffsetMsec ||
                     scan.DriftTimeMsec.Value >
                     ms1DriftTimeBest.Value + maxHighEnergyDriftOffsetMsec))
                    continue;

                // Get the total intensity for all transitions of current msLevel
                double totalIntensity = 0;
                foreach (var t in transitions)
                {
                    var mzPeak = t.ProductMz;
                    var halfwin = (t.ExtractionWidth ?? tolerance)/2;
                    var mzLow = mzPeak - halfwin;
                    var mzHigh = mzPeak + halfwin;
                    var first = Array.BinarySearch(scan.Mzs, mzLow);
                    if (first < 0)
                        first = ~first;
                    for (var i = first; i < scan.Mzs.Length; i++)
                    {
                        if (scan.Mzs[i] > mzHigh)
                            break;
                        totalIntensity += scan.Intensities[i];
                    }
                }
                if (maxIntensity < totalIntensity)
                {
                    driftTime = scan.DriftTimeMsec;
                    maxIntensity = totalIntensity;
                }
            }
            if (driftTime.HasValue)
            {
                var dict = (msLevel == 1) ? _ms1DriftTimes : _ms2DriftTimes;
                var result = new DriftTimeIntensityPair
                {
                    DriftTime = driftTime.Value,
                    Intensity = maxIntensity
                };
                List<DriftTimeIntensityPair> listPairs;
                if (!dict.TryGetValue(libKey, out listPairs))
                {
                    listPairs = new List<DriftTimeIntensityPair>();
                    dict.Add(libKey, listPairs);
                }
                listPairs.Add(result);
            }
        }
Beispiel #2
0
        private void EvaluateBestDriftTime(int msLevel, LibKey libKey, float tolerance, List <TransitionFullScanInfo> transitions)
        {
            double?driftTime    = null;
            double maxIntensity = 0;

            // Avoid picking MS2 drift times wildly different from MS1 times
            double?ms1DriftTimeBest;

            if ((msLevel == 2) && _ms1DriftTimes.ContainsKey(libKey))
            {
                ms1DriftTimeBest =
                    _ms1DriftTimes[libKey].OrderByDescending(p => p.Intensity)
                    .FirstOrDefault()
                    .DriftTime;
            }
            else
            {
                ms1DriftTimeBest = null;
            }

            const int maxHighEnergyDriftOffsetMsec = 2; // CONSIDER(bspratt): user definable? or dynamically set by looking at scan to scan drift delta? Or resolving power?

            foreach (var scan in _msDataFileScanHelper.MsDataSpectra.Where(scan => scan != null))
            {
                if (!scan.DriftTimeMsec.HasValue || !scan.Mzs.Any())
                {
                    continue;
                }
                if (ms1DriftTimeBest.HasValue &&
                    (scan.DriftTimeMsec.Value <
                     ms1DriftTimeBest.Value - maxHighEnergyDriftOffsetMsec ||
                     scan.DriftTimeMsec.Value >
                     ms1DriftTimeBest.Value + maxHighEnergyDriftOffsetMsec))
                {
                    continue;
                }

                // Get the total intensity for all transitions of current msLevel
                double totalIntensity = 0;
                foreach (var t in transitions)
                {
                    var mzPeak  = t.ProductMz;
                    var halfwin = (t.ExtractionWidth ?? tolerance) / 2;
                    var mzLow   = mzPeak - halfwin;
                    var mzHigh  = mzPeak + halfwin;
                    var first   = Array.BinarySearch(scan.Mzs, mzLow);
                    if (first < 0)
                    {
                        first = ~first;
                    }
                    for (var i = first; i < scan.Mzs.Length; i++)
                    {
                        if (scan.Mzs[i] > mzHigh)
                        {
                            break;
                        }
                        totalIntensity += scan.Intensities[i];
                    }
                }
                if (maxIntensity < totalIntensity)
                {
                    driftTime    = scan.DriftTimeMsec;
                    maxIntensity = totalIntensity;
                }
            }
            if (driftTime.HasValue)
            {
                var dict   = (msLevel == 1) ? _ms1DriftTimes : _ms2DriftTimes;
                var result = new DriftTimeIntensityPair
                {
                    DriftTime = driftTime.Value,
                    Intensity = maxIntensity
                };
                List <DriftTimeIntensityPair> listPairs;
                if (!dict.TryGetValue(libKey, out listPairs))
                {
                    listPairs = new List <DriftTimeIntensityPair>();
                    dict.Add(libKey, listPairs);
                }
                listPairs.Add(result);
            }
        }