private void ReadFrameMsMidacSpecData(MidacSpecFormat specFormat, ref Stopwatch sw, int[] frameNumbers, int numDriftBins) { sw.Start(); int minDBin = 0; int maxDBin = numDriftBins - 1; for (int i = 0; i < frameNumbers.Length; i++) { int frame = frameNumbers[i]; for (int dbin = minDBin; dbin <= maxDBin; dbin++) { IMidacSpecDataMs specData = m_reader.FrameMs(frame, dbin, specFormat, true) as IMidacSpecDataMs; // To access the CE range: // IDoubleRange ceRange = specData.FragmentationEnergyRange; AnalyzeSpectrum(specData); } } sw.Stop(); }
private void ReadFrameMsReuseMidacSpecData(MidacSpecFormat specFormat, ref Stopwatch sw, int[] frameNumbers, int driftBins) { sw.Start(); int minDBin = 0; int maxDBin = driftBins - 1; IMidacSpecDataMs specData = null; for (int i = 0; i < frameNumbers.Length; i++) { int frame = frameNumbers[i]; for (int dbin = minDBin; dbin <= maxDBin; dbin++) { m_reader.FrameMs(frame, dbin, specFormat, true, ref specData); AnalyzeSpectrum(specData); } } sw.Stop(); }
private void ReadProfTfsMidacSpecDataExternal(MidacSpecFormat specFmt, ref Stopwatch sw, int[] frameNumbers) { sw.Start(); int lastLength = -1; IIntRange[] xIdxRanges = null; bool doSum = chkTfsDoSumming.Checked; int nFrames = 0; int nDummy = 0; List <IDoubleRange> mzRanges = new List <IDoubleRange>(); for (int i = 0; i < frameNumbers.Length; i++) { int frame = frameNumbers[i]; double tic = 0; // get the TFS IMidacSpecDataMs specData = m_reader.ProfileTotalFrameMs(specFmt, frame); ++nFrames; if (specFmt == MidacSpecFormat.Metadata) { if (specData != null) { if (specData.NonZeroPoints > 0) { ++m_msCount; m_sumNzPoints += specData.NonZeroPoints; // For testing, we don't want the maximum array size, we want the number of points // actually returned -- which is zero for Metadata only calls. // m_sumPoints += specData.MaxProfilePoints; } } } else { if (frame == 1 || frame == 17 || frame == 18 || frame == 96 || frame == 97 || frame == 122) { nDummy = frame; } // Sum abundances over specified range(s) if (specData != null && specData.XArray != null && specData.XArray.Length > 0) { ++m_msCount; m_sumNzPoints += specData.NonZeroPoints; // Again, actually returned points, not maximum number for zero-filled spectra m_sumPoints += specData.XArray.Length; if (doSum) { if (specFmt == MidacSpecFormat.Profile) { // We can pre-calculate array index values corresponding to the m/z // inclusion limits. if (lastLength != specData.XArray.Length) { // convert ranges to x- and y-array index equivalent xIdxRanges = GetXIndexRanges(specData.XArray[0], specData.XArray.Length, m_ftBinRanges); lastLength = specData.XArray.Length; } // sum all ion abundances falling in each m/z range foreach (IIntRange xIdxRange in xIdxRanges) { for (int j = xIdxRange.Min; j <= xIdxRange.Max; j++) { tic += specData.YArray[j]; } } } else { // With sparse arrays, we cannot. double[] xArray = specData.XArray; float[] yArray = specData.YArray; int nextIdx = 0; int maxIdx = xArray.Length - 1; // ToDo: if there are multiple m/z ranges, sort them in increasing m/z and // coalesce any that overlap foreach (IDoubleRange mzRange in m_mzRanges) { double min = mzRange.Min; double max = mzRange.Max; do { double mz = xArray[nextIdx]; if (mz < min) { ++nextIdx; } else if (mz > max) { break; } else { tic += yArray[nextIdx++]; } } while (nextIdx <= maxIdx); } } } } m_tic += tic; } } sw.Stop(); }