public void Write(PhosphoRSOutput output) { if (output == null) { throw new ArgumentNullException(nameof(output)); } _writer.WriteRow( "Spectrum.ID", "Spectrum.Name", "Spectrum.PrecursorCharge", "Spectrum.ActivationType", "Peptide.ID", "Peptide.Sequence", "Peptide.SitePrediction", "Isoform.ID", "Isoform.Sites", "Isoform.Score", "Isoform.Probability" ); string SitePredictionToString(Wrapper.PeptideResult peptide) { return(string.Join( " ", peptide.SitePrediction .Select(site => $"{peptide.Sequence[site.Position - 1]}{site.Position}({site.Probability.ToString("0.###")})") )); } output.Spectra.ForEach(spectrum => { spectrum.Peptides.ForEach(peptide => { peptide.Isoforms.ForEach(isoform => { _writer.WriteRow(new string[] { spectrum.ID.ToString(), spectrum.Name, spectrum.PrecursorCharge.ToString(), spectrum.ActivationType.ToString(), peptide.ID.ToString(), peptide.Sequence, SitePredictionToString(peptide), isoform.ID.ToString(), string.Join(" ", isoform.Sites.Select(site => $"{peptide.Sequence[site - 1]}{site}")), isoform.Score.ToString(), isoform.Probability.ToString() }); }); }); }); }