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]; } }
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); }
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); }
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(); }