Exemple #1
0
        public override PrecursorInfo GetPrecursorInfo(int scanNum)
        {
            m_spec = m_reader.GetSpectrum(scanNum);

            var precursor = new PrecursorInfo();

            var level = m_spec.MSLevelInfo;

            if (level == MSLevel.MS)
            {
                precursor.MSLevel = 1;
            }
            else if (level == MSLevel.MSMS)
            {
                precursor.MSLevel = 2;
            }
            else
            {
                precursor.MSLevel = 1;
            }

            //this returns a list of precursor masses (not sure how there can be more than one)
            var precursorMZlist = m_spec.GetPrecursorIon(out var precursorMassCount);

            //if a mass is returned
            if (precursorMassCount == 1)
            {
                //mass
                precursor.PrecursorMZ = precursorMZlist[0];

                //intensity
                m_spec.GetPrecursorIntensity(out var precursorIntensity);
                precursor.PrecursorIntensity = (float)precursorIntensity;

                //charge
                m_spec.GetPrecursorCharge(out var precursorCharge);
                precursor.PrecursorCharge = precursorCharge;

                //adjust scan number if needed
                precursor.PrecursorScan = scanNum;

                // TODO: Only CID possible in Agilent files?
                precursor.FragmentationType = FragmentionType.CID;
            }
            else if (precursorMassCount > 1)
            {
                throw new NotImplementedException("Strange case where more than one precursor is used to generate one spectrum");
            }
            else
            {
                precursor.PrecursorMZ        = 0;
                precursor.PrecursorIntensity = 0;
                precursor.PrecursorCharge    = -1;
                precursor.PrecursorScan      = scanNum;
            }

            precursor.IonizationMode = m_spec.IonPolarity == IonPolarity.Negative ? IonizationMode.Negative : IonizationMode.Positive;

            return(precursor);
        }
        public double[] GetPrecursorInfo(int scanNum)
        {
            PrecursorInfo infos = raws.GetPrecursorInfo(scanNum, path);

            double[] mzCharge = new double[2];

            double mz     = infos.dMonoIsoMass;
            int    charge = infos.nChargeState;

            mzCharge[0] = mz;
            mzCharge[1] = charge;
            return(mzCharge);
        }
Exemple #3
0
        public override PrecursorInfo GetPrecursorInfo(int scanNum)
        {
            var scanInfo = GetScanInfo(scanNum);

            XRawFileIO.ExtractParentIonMZFromFilterText(scanInfo, out var precursorMz, out var msLevel, out var fragmentationType);
            var ionMode = XRawFileIO.DetermineIonizationMode(scanInfo);

            var precursor = new PrecursorInfo
            {
                MSLevel = msLevel
            };

            // Get Precursor MZ
            if (scanInfo == null)
            {
                precursor.PrecursorMZ = 0;
            }
            else
            {
                precursor.PrecursorMZ = precursorMz;
            }

            // Get the Parent scan if MS level is not MS1
            if (precursor.MSLevel > 1)
            {
                var stepBack = 0;
                while (scanNum - stepBack > 0)
                {
                    if (scanNum - stepBack > 0)
                    {
                        var testScanLevel = GetMSLevel(scanNum - stepBack);
                        stepBack++;
                        if (testScanLevel == 1) //the first precursor scan prior
                        {
                            break;
                        }
                    }
                }

                precursor.PrecursorScan = scanNum - (stepBack - 1);

                switch (fragmentationType)
                {
                case "hcd":
                    precursor.FragmentationType = FragmentionType.HCD;
                    break;

                case "etd":
                    precursor.FragmentationType = FragmentionType.ETD;
                    break;

                case "cid":
                    precursor.FragmentationType = FragmentionType.CID;
                    break;

                default:
                    precursor.FragmentationType = FragmentionType.None;
                    break;
                }
            }
            else
            {
                precursor.PrecursorScan     = scanNum;
                precursor.FragmentationType = FragmentionType.None;
            }

            precursor.IonizationMode = ionMode.Equals(IonModeConstants.Positive) ? IonizationMode.Positive : IonizationMode.Negative;

            //TODO: we still need to get charge
            //precursor.PrecursorCharge = 1;

            return(precursor);
        }