private List<Modification> GetModifications(bool fixedMod)
{
var modifications = new Dictionary<string, Modification>();
var node = _root.SelectSingleNode("//pepxml:search_summary", _nsmgr);
XmlNodeList nodes;
if (fixedMod)
{
nodes = node.SelectNodes("//pepxml:aminoacid_modification[@variable='N'] | //pepxml:terminal_modification[@variable='N']", _nsmgr);
}
else
{
nodes = node.SelectNodes("//pepxml:aminoacid_modification[@variable='Y'] | //pepxml:terminal_modification[@variable='Y']", _nsmgr);
}
foreach (XmlNode modNode in nodes)
{
string name = modNode.Attributes["description"].Value;
Modification mod = null;
if (!modifications.TryGetValue(name, out mod))
{
double mass = double.Parse(modNode.Attributes["massdiff"].Value);
mod = new Modification(mass, name);
modifications.Add(name, mod);
}
if (modNode.Name == "aminoacid_modification")
{
char position = modNode.Attributes["aminoacid"].Value[0];
mod.Sites = mod.Sites.Set(position);
}
else
{
string terminus = modNode.Attributes["terminus"].Value;
bool proteinOnly = modNode.Attributes["protein_terminus"].Value == "Y";
if (terminus == "N")
{
if (proteinOnly)
{
mod.Sites |= ModificationSites.NProt;
}
else
{
mod.Sites |= ModificationSites.NPep;
}
}
else
{
if (proteinOnly)
{
mod.Sites |= ModificationSites.ProtC;
}
else
{
mod.Sites |= ModificationSites.PepC;
}
}
}
}
return modifications.Values.ToList();
}