internal static IEnumerable<string> GetHeader(IList<MzTabPeptide> peptides)
{
List<string> headers = new List<string>();
headers.Add(Sequence);
headers.Add(Accession);
headers.Add(Unique);
headers.Add(Database);
headers.Add(DatabaseVersion);
headers.Add(SearchEngine);
headers.AddRange(GetHeaders(peptides, BestSearchEngineScore, (peptide => peptide.BestSearchEngineScores)));
headers.AddRange(GetHeaders(peptides, SearchEngineScorePerMsRun, (peptide => peptide.BestSearchEngineScores)));
// Only report reliability if one psm has a non-null reliability score
if (peptides.Any(peptide => peptide.Reliability != MzTab.ReliabilityScore.NotSet))
headers.Add(Reliability);
headers.Add(Modifications);
headers.Add(RetentionTime);
headers.Add(RetentionTimeWindow);
headers.Add(Charge);
headers.Add(MZ);
if (peptides.Any(psm => psm.Uri != null))
headers.Add(Uri);
headers.Add(SpectraReference);
headers.AddRange(GetHeaders(peptides, AbundanceAssay, (peptide => peptide.AbundanceAssays)));
headers.AddRange(GetHeaders(peptides, AbundanceStudyVariable, (peptide => peptide.AbundanceStudyVariables)));
headers.AddRange(GetHeaders(peptides, AbundanceStDevStudyVariable, (peptide => peptide.AbundanceStdevStudyVariables)));
headers.AddRange(GetHeaders(peptides, AbudnanceStdErrorStudyVariable, (peptide => peptide.AbundanceStandardErrorStudyVariables)));
return headers;
}