예제 #1
0
 public CentroidStreamData(CentroidStream centroidStream)
 {
     if (centroidStream.Length > 0)
     {
         Masses        = centroidStream.Masses;
         Intensities   = centroidStream.Intensities;
         Resolutions   = centroidStream.Resolutions;
         Noises        = centroidStream.Noises;
         Baselines     = centroidStream.Baselines;
         SignalToNoise = new double[Intensities.Length];
         for (int i = 0; i < SignalToNoise.Length; i++)
         {
             SignalToNoise[i] = Intensities[i] / Noises[i];
         }
     }
     else
     {
         Masses        = new double[0];
         Intensities   = new double[0];
         Resolutions   = new double[0];
         Noises        = new double[0];
         Baselines     = new double[0];
         SignalToNoise = new double[0];
     }
 }
예제 #2
0
        private static PScan GetPScan(ScanStatistics scanStats, CentroidStream centroidStream, int msOrder,
                                      string fileName, double?precursorMz = null, int?precursorCharge = null)
        {
            var scan = new PScan
            {
                FileName          = fileName,
                BasePeakMass      = scanStats.BasePeakMass,
                ScanType          = scanStats.ScanType,
                BasePeakIntensity = scanStats.BasePeakIntensity,
                PacketType        = scanStats.PacketType,
                ScanNumber        = scanStats.ScanNumber,
                RetentionTime     = scanStats.StartTime,
                Masses            = centroidStream.Masses.ToArray(),
                Intensities       = centroidStream.Intensities.ToArray(),
                LowMass           = scanStats.LowMass,
                HighMass          = scanStats.HighMass,
                TIC             = scanStats.TIC,
                FileId          = fileName + ".raw",
                PrecursorMz     = precursorMz,
                PrecursorCharge = precursorCharge,
                MsOrder         = msOrder
            };

            return(scan);
        }
예제 #3
0
        private static void WritePScans(string fileName,
                                        IRawDataPlus raw,
                                        List <PScan> scans)
        {
            var enumerator = raw.GetFilteredScanEnumerator(" ");

            foreach (var scanNumber in enumerator) // note in my tests serial is faster than Parallel.Foreach() (this involves disk access, so it makes sense)
            {
                //trailer iinformation is extracted via index
                var    trailers      = raw.GetTrailerExtraValues(scanNumber);
                var    trailerLabels = raw.GetTrailerExtraInformation(scanNumber);
                object chargeState   = 0;
                for (int i = 0; i < trailerLabels.Labels.Length; i++)
                {
                    if (trailerLabels.Labels[i] == "Charge State:")
                    {
                        chargeState = raw.GetTrailerExtraValue(scanNumber, i);
                        break;
                    }
                }
                var scanFilter = raw.GetFilterForScanNumber(scanNumber);
                var scanStats  = raw.GetScanStatsForScanNumber(scanNumber);

                CentroidStream centroidStream = new CentroidStream();

                //check for FT mass analyzer data
                if (scanFilter.MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS)
                {
                    centroidStream = raw.GetCentroidStream(scanNumber, false);
                }
                //check for IT mass analyzer data
                if (scanFilter.MassAnalyzer == MassAnalyzerType.MassAnalyzerITMS)
                {
                    var scanData = raw.GetSimplifiedScan(scanNumber);
                    centroidStream.Masses      = scanData.Masses;
                    centroidStream.Intensities = scanData.Intensities;
                }

                var msOrder = raw.GetScanEventForScanNumber(scanNumber).MSOrder;

                if (msOrder == MSOrderType.Ms)
                {
                    var pscan = GetPScan(scanStats, centroidStream, 1, fileName, Convert.ToInt32(chargeState));
                    scans.Add(pscan);
                }
                if (msOrder == MSOrderType.Ms2)
                {
                    var precursorMz = raw.GetScanEventForScanNumber(scanNumber).GetReaction(0).PrecursorMass;
                    var pscan       = GetPScan(scanStats, centroidStream, 2, fileName, precursorMz, Convert.ToInt32(chargeState));
                    scans.Add(pscan);
                }

                var t = raw.GetTrailerExtraValues(scanNumber);
            }

            WriteScans(scans, fileName);
        }
예제 #4
0
        public Spectrum(CentroidStream centroidStream)
        {
            Ions = new List <Ion>();

            for (int i = 0; i < centroidStream.Length; i++)
            {
                Ions.Add(new Ion(centroidStream.Masses[i], centroidStream.Intensities[i]));
            }

            MaximumMass      = (from x in Ions select x.Mass).Max();
            MinimumMass      = (from x in Ions select x.Mass).Min();
            SummedIntensity  = (from x in Ions select x.Intensity).Sum();
            MaximumIntensity = (from x in Ions select x.Intensity).Max();
        }