public GlycanComposition(GlycanComposition other) { //Components are not reference types, and so they will be copied by value this.ElementalComposition = new Dictionary<string, int>(other.ElementalComposition); this.MolecularComposition = new Dictionary<string, int>(other.MolecularComposition); this.MassWeight = other.MassWeight; this.AdductAmount = other.AdductAmount; this.AdductReplaces = other.AdductReplaces; this.Annotation = other.Annotation; }
/// <summary> /// Incorporate the components of a GlycanComposition object into /// this glycopeptide. /// </summary> /// <param name="glycanComposition"></param> public void AttachGlycan(GlycanComposition glycanComposition) { this.MassWeight += glycanComposition.MassWeight - WaterMass - glycanComposition.AdductMass; this.GlycosylationCount++; foreach (KeyValuePair<string, int> kvp in glycanComposition.ElementalComposition) { if (!ElementalComposition.ContainsKey(kvp.Key)) { ElementalComposition[kvp.Key] = kvp.Value; } else { ElementalComposition[kvp.Key] += kvp.Value; } } foreach (KeyValuePair<string, int> kvp in glycanComposition.MolecularComposition) { if (!MolecularComposition.ContainsKey(kvp.Key)) { MolecularComposition[kvp.Key] = kvp.Value; } else { MolecularComposition[kvp.Key] += kvp.Value; } } if (MolecularComposition.ContainsKey("Water")) { MolecularComposition["Water"] -= 1; } else { Console.WriteLine(JsonConvert.SerializeObject(this)); throw new Exception("No water found to remove!"); } if (ElementalComposition.ContainsKey("O")) { ElementalComposition["O"] -= 1; ElementalComposition["H"] -= 2; } //Adduct information is a singleton despite there being multiple glycans per peptide. //Is this actually correct chemically? this.AdductReplaces = glycanComposition.AdductReplaces; this.AdductAmount = glycanComposition.AdductAmount; }
/// <summary> /// Combination Cosntructor /// </summary> /// <param name="glycanComposition"></param> /// <param name="peptide"></param> public GlycopeptideComposition(GlycanComposition glycanComposition, MSDigestPeptide peptide) : base(glycanComposition) { this.PeptideSequence = peptide.Sequence; this.PeptideModification = peptide.Modifications; this.StartAA = peptide.StartAA; this.EndAA = peptide.EndAA; this.GlycosylationCount = peptide.NumGlycosylations; this.MassWeight += peptide.Mass - WaterMass - glycanComposition.AdductMass; MolecularComposition["Water"] -= 1; if (ElementalComposition.ContainsKey("O")) { ElementalComposition["O"] -= 1; ElementalComposition["H"] -= 2; } this.ProteinID = peptide.ProteinID; AdductAmount = 0; AdductReplaces = ""; }