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"); }
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; } } }
/// <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); }
/// <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); }
protected AminoAcidPolymer(string sequence, IHasChemicalFormula nTerm, IHasChemicalFormula cTerm) { MonoisotopicMass = 0; Length = sequence.Length; residues = new Residue[Length]; NTerminus = nTerm; CTerminus = cTerm; ParseSequence(sequence); }
private void ReplaceTerminus(ref IHasChemicalFormula terminus, IHasChemicalFormula value) { if (terminus != null) { MonoisotopicMass -= terminus.MonoisotopicMass; } terminus = value; if (value != null) { MonoisotopicMass += value.MonoisotopicMass; } }
/// <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); }
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)); } } } }
/// <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); }
/// <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); }