Ejemplo n.º 1
0
        //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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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);
                     }
                 }
             }
         }
     }
 }