コード例 #1
0
        public void ModificationCollectionTest()
        {
            ModificationCollection a = new ModificationCollection(new OldSchoolModification(1, "Mod1"), new OldSchoolModification(2, "Mod2"));

            double      lala  = 0;
            IEnumerable aasdf = a;

            foreach (var jadfk in aasdf)
            {
                lala += (jadfk as IHasMass).MonoisotopicMass;
            }
            Assert.AreEqual(3, lala);

            Assert.AreEqual("Mod1 | Mod2", a.ToString());
            a.Add(new OldSchoolModification(3, "Mod3"));
            Assert.AreEqual("Mod1 | Mod2 | Mod3", a.ToString());
            Assert.IsTrue(a.Contains(new OldSchoolModification(2, "Mod2")));
            IHasMass[] myArray = new IHasMass[4];
            a.CopyTo(myArray, 1);
            Assert.AreEqual(3, myArray.Sum(b => b == null ? 0 : 1));
            Assert.AreEqual(3, a.Count());
            Assert.IsFalse(a.IsReadOnly);
            a.Remove(new OldSchoolModification(2, "Mod2"));
            Assert.AreEqual("Mod1 | Mod3", a.ToString());
            double ok = 0;

            foreach (var b in a)
            {
                ok += b.MonoisotopicMass;
            }
            Assert.AreEqual(4, ok);

            a.Clear();
            Assert.AreEqual("", a.ToString());
        }
コード例 #2
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Sets the modification at specific sites on this amino acid polymer
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="sites">The sites to set the modification at</param>
        /// <returns>The number of modifications added to this amino acid polymer</returns>
        public virtual int SetModification(IHasMass modification, ModificationSites sites)
        {
            int count = 0;

            if ((sites & ModificationSites.NPep) == ModificationSites.NPep)
            {
                NTerminusModification = modification;
                count++;
            }

            for (int i = 0; i < Length; i++)
            {
                ModificationSites site = residues[i].Site;
                if ((sites & site) == site)
                {
                    ReplaceMod(i + 1, modification);
                    count++;
                }
            }

            if ((sites & ModificationSites.PepC) == ModificationSites.PepC)
            {
                CTerminusModification = modification;
                count++;
            }

            return(count);
        }
コード例 #3
0
        public void TestNullArguments()
        {
            ChemicalFormula     formulaA = new ChemicalFormula("CO");
            IHasChemicalFormula ok       = null;

            Assert.AreEqual("item", Assert.Throws <ArgumentNullException>(() => { formulaA.Add(ok); }).ParamName);
            ChemicalFormula ok2 = null;

            Assert.AreEqual("formula", Assert.Throws <ArgumentNullException>(() => { formulaA.Add(ok2); }).ParamName);
            Assert.AreEqual("other", Assert.Throws <ArgumentNullException>(() => { new ChemicalFormula(ok2); }).ParamName);
            Element ok3 = null;

            Assert.AreEqual("element", Assert.Throws <ArgumentNullException>(() => { formulaA.AddPrincipalIsotopesOf(ok3, 0); }).ParamName);
            Assert.AreEqual("item", Assert.Throws <ArgumentNullException>(() => { formulaA.Remove(ok); }).ParamName);
            Assert.AreEqual("formula", Assert.Throws <ArgumentNullException>(() => { formulaA.Remove(ok2); }).ParamName);
            Assert.AreEqual("formula", Assert.Throws <ArgumentNullException>(() => { formulaA.IsSubsetOf(ok2); }).ParamName);
            Assert.AreEqual("formula", Assert.Throws <ArgumentNullException>(() => { formulaA.IsSupersetOf(ok2); }).ParamName);
            Assert.AreEqual("element", Assert.Throws <ArgumentNullException>(() => { formulaA.CountWithIsotopes(ok3); }).ParamName);
            Assert.AreEqual("element", Assert.Throws <ArgumentNullException>(() => { formulaA.CountSpecificIsotopes(ok3, 0); }).ParamName);
            Assert.IsFalse(formulaA.Equals(ok2));
            IEnumerable <IHasChemicalFormula> ok4 = null;

            Assert.AreEqual("formulas", Assert.Throws <ArgumentNullException>(() => { ChemicalFormula.Combine(ok4); }).ParamName);
            Assert.AreEqual("element", Assert.Throws <ArgumentNullException>(() => { PeriodicTable.Add(ok3); }).ParamName);

            Assert.AreEqual("formula", Assert.Throws <ArgumentNullException>(() => { new IsotopicDistribution(ok2); }).ParamName);

            IHasMass ok5 = null;

            Assert.AreEqual("objectWithMass", Assert.Throws <ArgumentNullException>(() => { ok5.ToMZ(0); }).ParamName);

            var ok7 = new PhysicalObjectWithChemicalFormula("C");
        }
コード例 #4
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Replaces a modification (if present) at the specific index in the residue (0-based for N and C termini)
        /// </summary>
        /// <param name="index">The residue index to replace at</param>
        /// <param name="mod">The modification to replace with</param>
        private void ReplaceMod(int index, IHasMass mod)
        {
            // No error checking here as all validation will occur before this method is call. This is to prevent
            // unneeded bounds checking

            if (_modifications == null)
            {
                _modifications = new IHasMass[Length + 2];
            }

            IHasMass oldMod = _modifications[index]; // Get the mod at the index, if present

            if (Equals(mod, oldMod))
            {
                return; // Same modifications, no change is required
            }
            if (oldMod != null)
            {
                MonoisotopicMass -= oldMod.MonoisotopicMass; // remove the old mod mass
            }
            _modifications[index] = mod;

            if (mod != null)
            {
                MonoisotopicMass += mod.MonoisotopicMass; // add the new mod mass
            }
        }
コード例 #5
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
 /// <summary>
 ///
 /// </summary>
 /// <param name="mod"></param>
 /// <param name="residueNumbers">(1-based) residue number</param>
 public void SetModification(IHasMass mod, params int[] residueNumbers)
 {
     foreach (int residueNumber in residueNumbers)
     {
         SetModification(mod, residueNumber);
     }
 }
コード例 #6
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        protected AminoAcidPolymer(AminoAcidPolymer aminoAcidPolymer, int firstResidue, int length, bool includeModifications)
        {
            Length   = length;
            residues = new Residue[length];

            bool isNterm = firstResidue == 0;
            bool isCterm = length + firstResidue == aminoAcidPolymer.Length;

            _nTerminus = isNterm ? aminoAcidPolymer.NTerminus : new ChemicalFormulaTerminus(ChemicalFormula.ParseFormula("H"));
            _cTerminus = isCterm ? aminoAcidPolymer.CTerminus : new ChemicalFormulaTerminus(ChemicalFormula.ParseFormula("OH"));

            double monoMass = _nTerminus.MonoisotopicMass + _cTerminus.MonoisotopicMass;

            Residue[] otherAminoAcids = aminoAcidPolymer.residues;

            if (includeModifications && aminoAcidPolymer.ContainsModifications())
            {
                _modifications = new IHasMass[length + 2];
                for (int i = 0; i < length; i++)
                {
                    var aa = otherAminoAcids[i + firstResidue];
                    residues[i] = aa;
                    monoMass   += aa.MonoisotopicMass;

                    IHasMass mod = aminoAcidPolymer._modifications[i + firstResidue + 1];
                    if (mod == null)
                    {
                        continue;
                    }

                    _modifications[i + 1] = mod;
                    monoMass += mod.MonoisotopicMass;
                }
            }
            else
            {
                for (int i = 0, j = firstResidue; i < length; i++, j++)
                {
                    var aa = otherAminoAcids[j];
                    residues[i] = aa;
                    monoMass   += aa.MonoisotopicMass;
                }
            }

            MonoisotopicMass = monoMass;

            if (includeModifications)
            {
                if (isNterm)
                {
                    NTerminusModification = aminoAcidPolymer.NTerminusModification;
                }

                if (isCterm)
                {
                    CTerminusModification = aminoAcidPolymer.CTerminusModification;
                }
            }
        }
コード例 #7
0
 /// <summary>
 /// Calculates m/z value for a given mass assuming charge comes from losing or gaining protons
 /// </summary>
 public static double ToMZ(this IHasMass objectWithMass, int charge)
 {
     if (objectWithMass == null)
     {
         throw new ArgumentNullException("objectWithMass", "Cannot compute an MZ value for a null object");
     }
     return(ToMassToChargeRatio(objectWithMass.MonoisotopicMass, charge));
 }
コード例 #8
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Sets the modification at specific sites on this amino acid polymer
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="residueNumber">The residue number to set the modification at</param>
        public virtual void SetModification(IHasMass modification, int residueNumber)
        {
            if (residueNumber > Length || residueNumber < 1)
            {
                throw new MzLibException(string.Format(CultureInfo.InvariantCulture, "Residue number not in the correct range: [{0}-{1}] you specified: {2}", 1, Length, residueNumber));
            }

            ReplaceMod(residueNumber, modification);
        }
コード例 #9
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Sets the modification at the terminus of this amino acid polymer
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="terminus">The termini to set the mod at</param>
        public virtual void SetModification(IHasMass modification, Terminus terminus)
        {
            if ((terminus & Terminus.N) == Terminus.N)
            {
                NTerminusModification = modification;
            }

            if ((terminus & Terminus.C) == Terminus.C)
            {
                CTerminusModification = modification;
            }
        }
コード例 #10
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Clears the modification set at the terminus of this amino acid polymer back
        /// to the default C or N modifications.
        /// </summary>
        /// <param name="terminus">The termini to clear the mod at</param>
        public void ClearModifications(Terminus terminus)
        {
            if ((terminus & Terminus.N) == Terminus.N)
            {
                NTerminusModification = null;
            }

            if ((terminus & Terminus.C) == Terminus.C)
            {
                CTerminusModification = null;
            }
        }
コード例 #11
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Removes the specified mod from all locations on this polymer
        /// </summary>
        /// <param name="mod">The modification to remove from this polymer</param>
        public void ClearModifications(IHasMass mod)
        {
            for (int i = 0; i <= Length + 1; i++)
            {
                if (!mod.Equals(_modifications[i]))
                {
                    continue;
                }

                MonoisotopicMass -= mod.MonoisotopicMass;
                _modifications[i] = null;
            }
        }
コード例 #12
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Sets the modification at specific sites on this amino acid polymer
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="residue">The residue to set the modification at</param>
        /// <returns>The number of modifications added to this amino acid polymer</returns>
        public virtual int SetModification(IHasMass modification, Residue residue)
        {
            int count = 0;

            for (int i = 0; i < Length; i++)
            {
                if (!residue.Letter.Equals(residues[i].Letter))
                {
                    continue;
                }
                ReplaceMod(i + 1, modification);
                count++;
            }
            return(count);
        }
コード例 #13
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Adds the modification at the terminus of this amino acid polymer, combining modifications if a modification is already present
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="terminus">The termini to set the mod at</param>
        public virtual int AddModification(IHasMass modification, Terminus terminus)
        {
            IHasMass currentMod;
            int      count = 0;

            if ((terminus & Terminus.N) == Terminus.N)
            {
                currentMod            = NTerminusModification;
                NTerminusModification = currentMod == null ? modification : new ModificationCollection(currentMod, modification);
                count++;
            }

            if ((terminus & Terminus.C) == Terminus.C)
            {
                currentMod            = CTerminusModification;
                CTerminusModification = currentMod == null ? modification : new ModificationCollection(currentMod, modification);
                count++;
            }
            return(count);
        }
コード例 #14
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Replaces all instances of the old modification with the new modification in this polymer
        /// </summary>
        /// <param name="oldMod">The modification to remove</param>
        /// <param name="newMod">The modification to replace it with</param>
        /// <returns>The number of modifications added to this amino acid polymer</returns>
        public virtual int ReplaceModification(IHasMass oldMod, IHasMass newMod)
        {
            if (oldMod == null)
            {
                throw new MzLibException("Cannot replace a null modification");
            }

            int count = 0;

            for (int i = 0; i < Length + 2; i++)
            {
                IHasMass mod = GetModification(i);
                if (mod == null || !oldMod.Equals(mod))
                {
                    continue;
                }

                ReplaceMod(i, newMod);
                count++;
            }
            return(count);
        }
コード例 #15
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        public virtual int AddModification(IHasMass modification, ModificationSites sites)
        {
            if (_modifications == null)
            {
                _modifications = new IHasMass[Length + 2];
            }

            int      count = 0;
            IHasMass currentMod;

            if ((sites & ModificationSites.NPep) == ModificationSites.NPep)
            {
                currentMod            = NTerminusModification;
                NTerminusModification = currentMod == null ? modification : new ModificationCollection(currentMod, modification);
                count++;
            }

            for (int i = 0; i < Length; i++)
            {
                ModificationSites site = residues[i].Site;
                if ((sites & site) == site)
                {
                    currentMod = _modifications[i + 1];
                    ReplaceMod(i + 1, currentMod == null ? modification : new ModificationCollection(currentMod, modification));
                    count++;
                }
            }

            if ((sites & ModificationSites.PepC) == ModificationSites.PepC)
            {
                currentMod            = CTerminusModification;
                CTerminusModification = currentMod == null ? modification : new ModificationCollection(currentMod, modification);
                count++;
            }

            return(count);
        }
コード例 #16
0
 public ChemicalProteoformHash(string hash, IHasMass hasMass)
 {
     Hash     = hash;
     _hasMass = hasMass;
 }
コード例 #17
0
 /// <summary>
 /// Calculates m/z value for a given mass assuming charge comes from losing or gaining protons
 /// </summary>
 public static double ToMz(this IHasMass objectWithMass, int charge)
 {
     return(ToMz(objectWithMass.MonoisotopicMass, charge));
 }
コード例 #18
0
ファイル: AminoAcidPolymer.cs プロジェクト: dippman/mzLib
        /// <summary>
        /// Adds the modification at specific sites on this amino acid polymer, combining modifications if a modification is already present
        /// </summary>
        /// <param name="modification">The modification to set</param>
        /// <param name="location">The location to set the modification at</param>
        public virtual void AddModification(IHasMass modification, int location)
        {
            IHasMass currentMod = GetModification(location);

            ReplaceMod(location, currentMod == null ? modification : new ModificationCollection(currentMod, modification));
        }