public TrailerExtraIndices(IRawDataPlus rawFile) { HeaderItem[] header = rawFile.GetTrailerExtraHeaderInformation(); for (int i = 0; i < header.Length; i++) { //Console.WriteLine("{0} {1}", header[i].Label, i); if (header[i].Label.ToLower().Contains("injection time") & !header[i].Label.ToLower().Contains("reagent")) { InjectionTime = i; } if (header[i].Label.ToLower().Contains("master scan") | header[i].Label.ToLower().Contains("master index")) { MasterScan = i; } if (header[i].Label.ToLower().Contains("monoisotopic")) { MonoisotopicMZ = i; } if (header[i].Label.ToLower().Contains("charge state")) { ChargeState = i; } if (header[i].Label.ToLower().Contains("hcd energy") & !header[i].Label.ToLower().Contains("ev")) { HCDEnergy = i; } if (header[i].Label.ToLower().Contains("sps")) { SPSMasses.Add(i); } } }
public string GetMonoisotopicMz(int scanNumber) { var trailerFields = rawFile.GetTrailerExtraHeaderInformation(); var scanTrailer = rawFile.GetTrailerExtraInformation(scanNumber); try { var idx = trailerFields .Select((item, index) => new { name = item.Label.ToString().CleanRawfileTrailerHeader(), Position = index }) .First(x => x.name.Contains("MonoisotopicmZ")).Position; return(scanTrailer.Values.ToArray()[idx]); } catch { return(null); } }
/// <summary> /// implements /// https://github.com/fgcz/rawrr/issues/43 /// </summary> /// <param name="rawFile"></param> /// <param name="filename"></param> /// <param name="L"></param> public static void WriteCentroidSpectrumAsRcode(this IRawDataPlus rawFile, string filename, List <int> L) { int count = 1; var trailerFields = rawFile.GetTrailerExtraHeaderInformation(); int indexCharge = rawFile.GetIndexOfPattern("Charge State"); using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename)) { foreach (int scanNumber in L) { var scan = Scan.FromFile(rawFile, scanNumber); var scanStatistics = rawFile.GetScanStatsForScanNumber(scanNumber); var centroidStream = rawFile.GetCentroidStream(scanNumber, false); var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber); var scanTrailer = rawFile.GetTrailerExtraInformation(scanNumber); file.WriteLine("e$Spectrum[[{0}]] <- list(", count++); file.WriteLine("\tscan = {0},", scanNumber); file.WriteLine("\trtinseconds = {0},", Math.Round(scanStatistics.StartTime * 60 * 1000) / 1000); if (indexCharge > 0) { file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge])); } else { file.WriteLine("\tcharge = NA,"); } try{ var reaction0 = scanEvent.GetReaction(0); file.WriteLine("\tpepmass = {0},", reaction0.PrecursorMass); }catch { file.WriteLine("\tpepmass = NA,"); } if (scanStatistics.IsCentroidScan && centroidStream.Length > 0) { file.WriteLine("\tmZ = c(" + string.Join(", ", centroidStream.Masses) + "),"); file.WriteLine("\tintensity = c(" + string.Join(", ", centroidStream.Intensities) + ")"); } else { file.WriteLine("\tmZ = NULL,\n\tintensity = NULL"); } file.WriteLine("\t)"); } } }
private static int GetIndexOfPattern(this IRawDataPlus rawFile, string pattern = "Charge State") { var trailerFields = rawFile.GetTrailerExtraHeaderInformation(); int idx = -1; try { idx = trailerFields .Select((item, index) => new { name = item.Label.ToString(), Position = index }) .First(x => x.name.Contains(pattern)).Position; } catch { } return(idx); }
private static int GetChargeIdx(this IRawDataPlus rawFile) { var trailerFields = rawFile.GetTrailerExtraHeaderInformation(); int idx_CHARGE = -1; try { idx_CHARGE = trailerFields .Select((item, index) => new { name = item.Label.ToString(), Position = index }) .First(x => x.name.Contains("Charge State")).Position; } catch { } return(idx_CHARGE); }
/// <summary> /// </summary> /// <param name="rawFile"></param> /// <param name="filename"></param> /// <param name="L"></param> public static void WriteSpectrumAsRcode(this IRawDataPlus rawFile, string filename, List <int> L) { int count = 1; var trailerFields = rawFile.GetTrailerExtraHeaderInformation(); int indexCharge = rawFile.GetIndexOfPattern("Charge State"); int indexMonoisotopicmZ = rawFile.GetIndexOfPattern("MonoisotopicmZ"); using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename)) { foreach (int scanNumber in L) { var basepeakMass = -1.0; var basepeakIntensity = -1.0; var scanStatistics = rawFile.GetScanStatsForScanNumber(scanNumber); var centroidStream = rawFile.GetCentroidStream(scanNumber, false); var scanTrailer = rawFile.GetTrailerExtraInformation(scanNumber); var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber); var scan = Scan.FromFile(rawFile, scanNumber); file.WriteLine("e$Spectrum[[{0}]] <- list(", count++); file.WriteLine("\tscan = {0},", scanNumber); try { basepeakMass = (scanStatistics.BasePeakMass); basepeakIntensity = Math.Round(scanStatistics.BasePeakIntensity); file.WriteLine("\tbasePeak = c({0}, {1}),", basepeakMass, basepeakIntensity); } catch { file.WriteLine("\tbasePeak = c(NA, NA),"); } file.WriteLine("\tTIC = {0},", scanStatistics.TIC.ToString()); file.WriteLine("\tmassRange = c({0}, {1}),", scanStatistics.LowMass.ToString(), scanStatistics.HighMass.ToString()); file.WriteLine("\tscanType = \"{0}\",", scanStatistics.ScanType.ToString()); file.WriteLine("\trtinseconds = {0},", Math.Round(scanStatistics.StartTime * 60 * 1000) / 1000); try { var reaction0 = scanEvent.GetReaction(0); file.WriteLine("\tpepmass = {0},", reaction0.PrecursorMass); } catch { file.WriteLine("\tpepmass = NA,"); } if (scanStatistics.IsCentroidScan && centroidStream.Length > 0) { // Get the centroid (label) data from the RAW file for this scan file.WriteLine("\tcentroidStream = TRUE,"); file.WriteLine("\tHasCentroidStream = '{0}, Length={1}',", scan.HasCentroidStream, scan.CentroidScan.Length); if (scan.HasCentroidStream) { file.WriteLine("\tcentroid.mZ = c(" + string.Join(", ", scan.CentroidScan.Masses.ToArray()) + "),"); file.WriteLine("\tcentroid.intensity = c(" + string.Join(", ", scan.CentroidScan.Intensities.ToArray()) + "),"); } file.WriteLine("\ttitle = \"File: {0}; SpectrumID: {1}; scans: {2}\",", Path.GetFileName(rawFile.FileName), null, scanNumber); if (indexMonoisotopicmZ > 0) { file.WriteLine("\tmonoisotopicMz = {0},", Convert.ToDouble(scanTrailer.Values.ToArray()[indexMonoisotopicmZ])); } else { file.WriteLine("\tmonoisotopicMz = NA,"); } if (indexCharge > 0) { file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge])); } else { file.WriteLine("\tcharge = NA,"); } file.WriteLine("\tmZ = c(" + string.Join(", ", centroidStream.Masses) + "),"); file.WriteLine("\tintensity = c(" + string.Join(", ", centroidStream.Intensities) + "),"); file.WriteLine("\tnoises = c(" + string.Join(", ", centroidStream.Noises) + "),"); file.WriteLine("\tresolutions = c(" + string.Join(", ", centroidStream.Resolutions.ToArray()) + "),"); file.WriteLine("\tcharges = c(" + string.Join(", ", centroidStream.Charges) + "),"); file.WriteLine("\tbaselines = c(" + string.Join(", ", centroidStream.Baselines) + "),"); } else { file.WriteLine("\tcentroidStream = FALSE,"); file.WriteLine("\tHasCentroidStream = '{0}, Length={1}',", scan.HasCentroidStream, scan.CentroidScan.Length); if (scan.HasCentroidStream) { file.WriteLine("\tcentroid.mZ = c(" + string.Join(",", scan.CentroidScan.Masses.ToArray()) + "),"); file.WriteLine("\tcentroid.intensity = c(" + string.Join(",", scan.CentroidScan.Intensities.ToArray()) + "),"); } file.WriteLine("\ttitle = \"File: {0}; SpectrumID: {1}; scans: {2}\",", Path.GetFileName(rawFile.FileName), null, scanNumber); if (indexCharge > 0) { file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge])); } else { file.WriteLine("\tcharge = NA,"); } if (indexMonoisotopicmZ > 0) { file.WriteLine("\tmonoisotopicMz = {0},", Convert.ToDouble(scanTrailer.Values.ToArray()[indexMonoisotopicmZ])); } else { file.WriteLine("\tmonoisotopicMz = NA,"); } file.WriteLine("\tmZ = c(" + string.Join(",", scan.SegmentedScan.Positions) + "),"); file.WriteLine("\tintensity = c(" + string.Join(",", scan.SegmentedScan.Intensities) + "),"); // file.WriteLine("\tnoises = c(" + string.Join(",", scan.SegmentedScan.Noises) + "),"); } // ============= Instrument Data ============= // write scan Trailer var trailerValues = scanTrailer.Values; var trailerLabels = scanTrailer.Labels; var zipTrailer = trailerLabels.ToArray().Zip(trailerValues, (a, b) => string.Format("\t\"{0}\" = \"{1}\"", a, b)); file.WriteLine(string.Join(", \n", zipTrailer)); file.WriteLine(")"); } } return; }