internal static IEnumerable<string> GetHeader(IList<MzTabPSM> psms)
{
List<string> headers = new List<string>();
headers.Add(Sequence);
headers.Add(ID);
headers.Add(Accession);
headers.Add(Unique);
headers.Add(Database);
headers.Add(DatabaseVersion);
headers.Add(SearchEngine);
headers.AddRange(GetHeaders(psms, SearchEngineScore, (psm => psm.SearchEngineScores)));
// Only report reliability if one psm has a non-null reliability score
if (psms.Any(psm => psm.Reliability != MzTab.ReliabilityScore.NotSet))
headers.Add(Reliability);
headers.Add(Modifications);
headers.Add(RetentionTime);
headers.Add(Charge);
headers.Add(ExperimentalMZ);
headers.Add(TheoreticalMZ);
if (psms.Any(psm => psm.Uri != null))
headers.Add(Uri);
headers.Add(SpectraReference);
headers.Add(PreviousAminoAcid);
headers.Add(FollowingAminoAcid);
headers.Add(StartResidue);
headers.Add(EndResidue);
return headers;
}