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