private static void OutputResultsToMspLibrary(IEnumerable <LipidGroupSearchResult> lipidGroupSearchResults, string fileLocation) { using (TextWriter textWriter = new StreamWriter(fileLocation)) { foreach (var lipidGroupSearchResult in lipidGroupSearchResults) { var lipidTarget = lipidGroupSearchResult.LipidTarget; var spectrumSearchResult = lipidGroupSearchResult.SpectrumSearchResult; var massSpectrum = spectrumSearchResult.PrecursorSpectrum.Peaks; var targetMz = lipidTarget.MzRounded; var closestPeak = massSpectrum.OrderBy(x => Math.Abs(x.Mz - targetMz)).First(); var hcdResults = spectrumSearchResult.HcdSearchResultList; var cidResults = spectrumSearchResult.CidSearchResultList; var hcdSpectrum = spectrumSearchResult.HcdSpectrum; var cidSpectrum = spectrumSearchResult.CidSpectrum; var hcdCount = hcdSpectrum.Peaks.Length; var cidCount = cidSpectrum.Peaks.Length; var name = lipidTarget.StrippedDisplay; var firstLipid = lipidGroupSearchResult.LipidList.FirstOrDefault(); string adduct; if (firstLipid == null) { adduct = string.Empty; } else { adduct = firstLipid.AdductFull; } var observedMz = closestPeak.Mz; var formula = lipidTarget.EmpiricalFormula; var RT = spectrumSearchResult.RetentionTime; double MW = 0; if (lipidTarget.FragmentationMode == FragmentationMode.Positive) { MW = lipidTarget.Composition.Mass - LipidUtil.GetCompositionOfAdduct(lipidTarget.Adduct).Mass; } else if (lipidTarget.FragmentationMode == FragmentationMode.Negative) { MW = lipidTarget.Composition.Mass + LipidUtil.GetCompositionOfAdduct(lipidTarget.Adduct).Mass; } textWriter.WriteLine("Name: {0}; {1}", name, adduct); textWriter.WriteLine("MW: {0}", MW); textWriter.WriteLine("PRECURSORMZ: {0}", observedMz); textWriter.WriteLine("RETENTIONTIME: {0}", RT); textWriter.WriteLine("FORMULA: {0}", formula); textWriter.WriteLine("Comment: CID"); textWriter.WriteLine("Num Peaks: {0}", cidCount); foreach (var peak in cidSpectrum.Peaks) { var mz = peak.Mz; var intensity = peak.Intensity; var match = cidResults.Where(x => x.ObservedPeak != null).FirstOrDefault(x => x.ObservedPeak.Mz.Equals(peak.Mz)); if (match != null) { var annotation = match.TheoreticalPeak.DescriptionForUi; textWriter.WriteLine("{0} {1} \"{2}\"", mz, intensity, annotation); } else { textWriter.WriteLine("{0} {1}", mz, intensity); } } textWriter.WriteLine(); textWriter.WriteLine("Name: {0}; {1}", name, adduct); textWriter.WriteLine("MW: {0}", MW); textWriter.WriteLine("PRECURSORMZ: {0}", observedMz); textWriter.WriteLine("RETENTIONTIME: {0}", RT); textWriter.WriteLine("FORMULA: {0}", formula); textWriter.WriteLine("Comment: HCD"); textWriter.WriteLine("Num Peaks: {0}", hcdCount); foreach (var peak in hcdSpectrum.Peaks) { var mz = peak.Mz; var intensity = peak.Intensity; var match = hcdResults.Where(x => x.ObservedPeak != null).FirstOrDefault(x => x.ObservedPeak.Mz.Equals(peak.Mz)); if (match != null) { var annotation = match.TheoreticalPeak.DescriptionForUi; textWriter.WriteLine("{0} {1} \"{2}\"", mz, intensity, annotation); } else { textWriter.WriteLine("{0} {1}", mz, intensity); } } textWriter.WriteLine(); } } }