//TO THINK: Is it reasonable to transfer Glycan to Modification the first time Glycan is read in? Which could save time. //Use glycan index and modification index to reduce space. public static Modification NGlycanToModification(Glycan glycan) { Dictionary <DissociationType, List <double> > neutralLosses = new Dictionary <DissociationType, List <double> >(); if (glycan.Ions != null) { List <double> lossMasses = glycan.Ions.Where(p => p.IonMass < 57000000).Select(p => (double)p.LossIonMass / 1E5).OrderBy(p => p).ToList(); //570 is a cutoff for glycan ion size 2N1H, which will generate fragment ions. neutralLosses.Add(DissociationType.HCD, lossMasses); neutralLosses.Add(DissociationType.CID, lossMasses); neutralLosses.Add(DissociationType.EThcD, lossMasses); } Dictionary <DissociationType, List <double> > diagnosticIons = new Dictionary <DissociationType, List <double> >(); diagnosticIons.Add(DissociationType.HCD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); diagnosticIons.Add(DissociationType.CID, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); diagnosticIons.Add(DissociationType.EThcD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); ModificationMotif.TryGetMotif("N", out ModificationMotif finalMotif); //TO DO: only one motif can be write here. var id = Glycan.GetKindString(glycan.Kind); Modification modification = new Modification( _originalId: id, _modificationType: "N-Glycosylation", _monoisotopicMass: (double)glycan.Mass / 1E5, _locationRestriction: "Anywhere.", _target: finalMotif, _neutralLosses: neutralLosses, _diagnosticIons: diagnosticIons ); return(modification); }
public static Modification OGlycanToModification(Glycan glycan) { //TO THINK: what the neutralLoss for O-Glyco? Dictionary <DissociationType, List <double> > neutralLosses = new Dictionary <DissociationType, List <double> >(); if (glycan.Ions != null) { List <double> lossMasses = glycan.Ions.Select(p => (double)p.LossIonMass / 1E5).OrderBy(p => p).ToList(); neutralLosses.Add(DissociationType.HCD, lossMasses); neutralLosses.Add(DissociationType.CID, lossMasses); neutralLosses.Add(DissociationType.EThcD, lossMasses); } Dictionary <DissociationType, List <double> > diagnosticIons = new Dictionary <DissociationType, List <double> >(); diagnosticIons.Add(DissociationType.HCD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); diagnosticIons.Add(DissociationType.CID, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); diagnosticIons.Add(DissociationType.EThcD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList()); ModificationMotif.TryGetMotif("X", out ModificationMotif finalMotif); //TO DO: only one motif can be write here. var id = Glycan.GetKindString(glycan.Kind); Modification modification = new Modification( _originalId: id, _modificationType: "O-Glycosylation", _monoisotopicMass: (double)glycan.Mass / 1E5, _locationRestriction: "Anywhere.", _target: finalMotif, _neutralLosses: neutralLosses, _diagnosticIons: diagnosticIons ); return(modification); }
private static void _GetCombinations(byte[] kind, List <byte[]> _kinds, HashSet <string> _keys) { if (kind.Sum(p => p) == 0) { return; } else { for (int i = 0; i < kind.Length; i++) { if (kind[i] >= 1) { byte[] akind = (byte[])kind.Clone(); akind[i]--; if (akind.Sum(p => p) != 0) { if (!_keys.Contains(Glycan.GetKindString(akind))) { _keys.Add(Glycan.GetKindString(akind)); _kinds.Add((byte[])akind.Clone()); _GetCombinations(akind, _kinds, _keys); } } } } } }