Exemplo n.º 1
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");
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Remove a chemical formula containing object from this chemical formula
 /// </summary>
 /// <param name="item">The object that contains a chemical formula</param>
 public void Remove(IHasChemicalFormula item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("item", "Cannot remove null item from formula");
     }
     Remove(item.ThisChemicalFormula);
 }
Exemplo n.º 4
0
 /// <summary>
 /// Add a chemical formula containing object to this chemical formula
 /// </summary>
 /// <param name="item">The object that contains a chemical formula</param>
 public void Add(IHasChemicalFormula item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("item", "Cannot add null item to formula");
     }
     Add(item.ThisChemicalFormula);
 }
Exemplo n.º 5
0
 protected AminoAcidPolymer(string sequence, IHasChemicalFormula nTerm, IHasChemicalFormula cTerm)
 {
     MonoisotopicMass = 0;
     Length           = sequence.Length;
     residues         = new Residue[Length];
     NTerminus        = nTerm;
     CTerminus        = cTerm;
     ParseSequence(sequence);
 }
Exemplo n.º 6
0
        private void ReplaceTerminus(ref IHasChemicalFormula terminus, IHasChemicalFormula value)
        {
            if (terminus != null)
            {
                MonoisotopicMass -= terminus.MonoisotopicMass;
            }

            terminus = value;

            if (value != null)
            {
                MonoisotopicMass += value.MonoisotopicMass;
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Gets the chemical formula of this amino acid polymer.
        /// </summary>
        /// <returns></returns>
        public ChemicalFormula GetChemicalFormula()
        {
            var formula = new ChemicalFormula();

            // Handle Modifications
            if (ContainsModifications())
            {
                for (int i = 0; i < Length + 2; i++)
                {
                    if (_modifications[i] == null)
                    {
                        continue;
                    }

                    IHasChemicalFormula chemMod = _modifications[i] as IHasChemicalFormula;

                    if (chemMod == null)
                    {
                        throw new MzLibException("Modification " + _modifications[i] + " does not have a chemical formula!");
                    }

                    formula.Add(chemMod.ThisChemicalFormula);
                }
            }

            // Handle N-Terminus
            formula.Add(NTerminus.ThisChemicalFormula);

            // Handle C-Terminus
            formula.Add(CTerminus.ThisChemicalFormula);

            // Handle Amino Acid Residues
            for (int i = 0; i < Length; i++)
            {
                formula.Add(residues[i].ThisChemicalFormula);
            }

            return(formula);
        }
Exemplo n.º 8
0
        public IEnumerable <Fragment> Fragment(FragmentTypes types, int minIndex, int maxIndex, bool calculateChemicalFormula)
        {
            foreach (FragmentTypes type in types.GetIndividualFragmentTypes())
            {
                bool            isChemicalFormula = calculateChemicalFormula;
                ChemicalFormula capFormula        = type.GetIonCap();
                bool            isCTerminal       = type.GetTerminus() == Terminus.C;

                double          monoMass = capFormula.MonoisotopicMass;
                ChemicalFormula formula  = new ChemicalFormula(capFormula);

                IHasChemicalFormula terminus = isCTerminal ? CTerminus : NTerminus;
                monoMass += terminus.MonoisotopicMass;
                if (isChemicalFormula)
                {
                    formula.Add(terminus);
                }

                bool first  = true;
                bool hasMod = _modifications != null;

                for (int i = 0; i <= maxIndex; i++)
                {
                    int aaIndex = isCTerminal ? Length - i : i - 1;

                    // Handle the terminus mods first in a special case
                    IHasMass mod;
                    if (first)
                    {
                        first = false;
                        if (hasMod)
                        {
                            mod = _modifications[aaIndex + 1];
                            if (mod != null)
                            {
                                monoMass += mod.MonoisotopicMass;
                                if (isChemicalFormula)
                                {
                                    if (mod is IHasChemicalFormula modFormula)
                                    {
                                        formula.Add(modFormula);
                                    }
                                    else
                                    {
                                        isChemicalFormula = false;
                                    }
                                }
                            }
                        }
                        continue;
                    }

                    monoMass += residues[aaIndex].MonoisotopicMass;
                    formula.Add(residues[aaIndex]);

                    if (hasMod)
                    {
                        mod = _modifications[aaIndex + 1];

                        if (mod != null)
                        {
                            monoMass += mod.MonoisotopicMass;
                            if (isChemicalFormula)
                            {
                                if (mod is IHasChemicalFormula modFormula)
                                {
                                    formula.Add(modFormula);
                                }
                                else
                                {
                                    isChemicalFormula = false;
                                }
                            }
                        }
                    }

                    if (i < minIndex)
                    {
                        continue;
                    }

                    if (isChemicalFormula)
                    {
                        yield return(new ChemicalFormulaFragment(type, i, formula, this));
                    }
                    else
                    {
                        yield return(new Fragment(type, i, monoMass, this));
                    }
                }
            }
        }
Exemplo n.º 9
0
 /// <summary>
 /// Remove a chemical formula containing object from this chemical formula
 /// </summary>
 /// <param name="item">The object that contains a chemical formula</param>
 public void Remove(IHasChemicalFormula item)
 {
     Remove(item.ThisChemicalFormula);
 }
Exemplo n.º 10
0
 /// <summary>
 /// Add a chemical formula containing object to this chemical formula
 /// </summary>
 /// <param name="item">The object that contains a chemical formula</param>
 public void Add(IHasChemicalFormula item)
 {
     Add(item.ThisChemicalFormula);
 }