コード例 #1
0
ファイル: Form1.cs プロジェクト: aaustin9/MHDAC
        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();
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: aaustin9/MHDAC
        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();
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: aaustin9/MHDAC
        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();
        }