public void UnspecifiedMarkedOnDifferentLigands() { var m = new AtomContainer(); m.Atoms.Add(Atom("R", 0, 0.00, -0.00)); m.Atoms.Add(Atom("C", 2, 1.30, -0.75)); m.Atoms.Add(Atom("N", 0, 2.60, -0.00)); m.Atoms.Add(Atom("C", 0, 3.90, -0.75)); m.Atoms.Add(Atom("C", 2, 5.20, -0.00)); m.Atoms.Add(Atom("C", 2, 6.50, -0.75)); m.Atoms.Add(Atom("C", 3, 7.79, -0.00)); m.Atoms.Add(Atom("C", 2, 3.90, -2.25)); m.Atoms.Add(Atom("C", 2, 5.20, -3.00)); m.Atoms.Add(Atom("N", 2, 5.20, -4.50)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[5], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[7], BondOrder.Single); m.AddBond(m.Atoms[7], m.Atoms[8], BondOrder.Single); m.AddBond(m.Atoms[8], m.Atoms[9], BondOrder.Single); NonplanarBonds.Assign(m); int wavyCount = 0; foreach (var bond in m.Bonds) { if (bond.Stereo == BondStereo.UpOrDown) { wavyCount++; } } Assert.AreEqual(1, wavyCount); }
public void DontMarkUnspecifiedForLinearEqualChains() { var m = new AtomContainer(); m.Atoms.Add(Atom("R", 0, 0.00, -0.00)); m.Atoms.Add(Atom("C", 2, 1.30, -0.75)); m.Atoms.Add(Atom("N", 0, 2.60, -0.00)); m.Atoms.Add(Atom("C", 0, 3.90, -0.75)); m.Atoms.Add(Atom("C", 2, 5.20, -0.00)); m.Atoms.Add(Atom("C", 2, 6.50, -0.75)); m.Atoms.Add(Atom("C", 3, 7.79, -0.00)); m.Atoms.Add(Atom("C", 2, 3.90, -2.25)); m.Atoms.Add(Atom("C", 2, 5.20, -3.00)); m.Atoms.Add(Atom("C", 3, 5.20, -4.50)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[5], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[7], BondOrder.Single); m.AddBond(m.Atoms[7], m.Atoms[8], BondOrder.Single); m.AddBond(m.Atoms[8], m.Atoms[9], BondOrder.Single); NonplanarBonds.Assign(m); foreach (var bond in m.Bonds) { Assert.AreEqual(BondStereo.None, bond.Stereo); } }
public void MarkUnspecifiedForCyclicLigands() { var m = new AtomContainer(); m.Atoms.Add(Atom("R", 0, -4.22, 3.05)); m.Atoms.Add(Atom("C", 2, -2.92, 2.30)); m.Atoms.Add(Atom("N", 0, -1.62, 3.05)); m.Atoms.Add(Atom("C", 0, -0.32, 2.30)); m.Atoms.Add(Atom("C", 2, -0.33, 0.80)); m.Atoms.Add(Atom("C", 2, 0.97, 0.05)); m.Atoms.Add(Atom("C", 2, 2.27, 0.80)); m.Atoms.Add(Atom("C", 2, 2.27, 2.30)); m.Atoms.Add(Atom("C", 2, 0.97, 3.05)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[5], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[6], m.Atoms[7], BondOrder.Single); m.AddBond(m.Atoms[7], m.Atoms[8], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[8], BondOrder.Single); Cycles.MarkRingAtomsAndBonds(m); NonplanarBonds.Assign(m); int wavyCount = 0; foreach (var bond in m.Bonds) { if (bond.Stereo == BondStereo.UpOrDown) { wavyCount++; } } Assert.AreEqual(1, wavyCount); }
public void Anticlockwise_2() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 0, -0.96d, -1.04d)); m.Atoms.Add(Atom("C", 2, 0.18d, -0.08d)); m.Atoms.Add(Atom("C", 2, -0.08d, 1.40d)); m.Atoms.Add(Atom("C", 3, 1.07d, 2.36d)); m.Atoms.Add(Atom("C", 2, -1.71d, -2.34d)); m.Atoms.Add(Atom("C", 3, -2.11d, -0.08d)); m.Atoms.Add(Atom("C", 1, -0.21d, -2.34d)); m.Atoms.Add(Atom("C", 3, 1.08d, -3.09d)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[6], m.Atoms[7], BondOrder.Single); m.StereoElements.Add(new TetrahedralChirality(m.Atoms[0], new IAtom[] { m.Atoms[1], m.Atoms[4], m.Atoms[5], m.Atoms[6] }, TetrahedralStereo.AntiClockwise)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.Down, m.Bonds[0].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[3].Stereo); Assert.AreEqual(BondStereo.Up, m.Bonds[4].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[5].Stereo); }
public void DontMarkTetrahedralCentresWithDoubleBondsAsUnspecified() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 3, 2.598, 1.500)); m.Atoms.Add(Atom("S", 0, 2.598, -0.000)); m.Atoms.Add(Atom("C", 1, 1.299, -0.750)); m.Atoms.Add(Atom("C", 3, 0.000, 0.000)); m.Atoms.Add(Atom("C", 2, 3.897, -0.750)); m.Atoms.Add(Atom("C", 3, 5.196, -0.000)); m.AddBond(m.Atoms[1], m.Atoms[0], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single); m.StereoElements.Add( new TetrahedralChirality( m.Atoms[1], new IAtom[] { m.Atoms[0], m.Atoms[1], m.Atoms[2], m.Atoms[4] }, TetrahedralStereo.AntiClockwise)); NonplanarBonds.Assign(m); Assert.AreNotEqual(BondStereo.UpOrDown, m.Bonds[0].Stereo); Assert.AreNotEqual(BondStereo.UpOrDown, m.Bonds[2].Stereo); Assert.AreNotEqual(BondStereo.UpOrDown, m.Bonds[3].Stereo); }
public void DontCrossEtheneDoubleBond() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 2, 0.000, 0.000)); m.Atoms.Add(Atom("C", 2, 1.299, -0.750)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Double); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.None, m.Bonds[0].Stereo); }
public void MarkBut2eneWithWavyBond() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 3, 0.000, 0.000)); m.Atoms.Add(Atom("C", 1, 1.299, -0.750)); m.Atoms.Add(Atom("C", 1, 2.598, -0.000)); m.Atoms.Add(Atom("C", 3, 3.897, -0.750)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.UpOrDown, m.Bonds[0].Stereo); }
public void DontMarkTerminalBonds() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 3, 0.000, 0.000)); m.Atoms.Add(Atom("C", 0, 1.299, -0.750)); m.Atoms.Add(Atom("C", 2, 2.598, -0.000)); m.Atoms.Add(Atom("C", 3, 3.897, -0.750)); m.Atoms.Add(Atom("O", 0, 1.299, -2.250)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[4], BondOrder.Double); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.None, m.Bonds[0].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[1].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[2].Stereo); }
public void Anticlockwise_implH_1() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 1, 0.00d, 1.50d)); m.Atoms.Add(Atom("C", 3, 0.00d, 0.00d)); m.Atoms.Add(Atom("N", 2, -1.30d, 2.25d)); m.Atoms.Add(Atom("O", 1, 1.30d, 2.25d)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[3], BondOrder.Single); m.StereoElements.Add(new TetrahedralChirality( m.Atoms[0], new IAtom[] { m.Atoms[0], m.Atoms[1], m.Atoms[2], m.Atoms[3] }, TetrahedralStereo.AntiClockwise)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.None, m.Bonds[0].Stereo); Assert.AreEqual(BondStereo.Up, m.Bonds[1].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[2].Stereo); }
public void DontMarkGuanidineAsUnspecified() { var m = new AtomContainer(); m.Atoms.Add(Atom("R", 0, 0.00, 0.00)); m.Atoms.Add(Atom("C", 2, 1.30, -0.75)); m.Atoms.Add(Atom("N", 0, 2.60, -0.00)); m.Atoms.Add(Atom("C", 0, 3.90, -0.75)); m.Atoms.Add(Atom("N", 2, 5.20, -0.00)); m.Atoms.Add(Atom("N", 2, 3.90, -2.25)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[5], BondOrder.Single); NonplanarBonds.Assign(m); foreach (var bond in m.Bonds) { Assert.AreEqual(BondStereo.None, bond.Stereo); } }
public void DontMarkRingBondsInBezeneAsUnspecified() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 1, -1.299, 0.750)); m.Atoms.Add(Atom("C", 1, 0.000, 1.500)); m.Atoms.Add(Atom("C", 1, 1.299, 0.750)); m.Atoms.Add(Atom("C", 1, 1.299, -0.750)); m.Atoms.Add(Atom("C", 1, 0.000, -1.500)); m.Atoms.Add(Atom("C", 1, -1.299, -0.750)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Double); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Double); m.AddBond(m.Atoms[0], m.Atoms[5], BondOrder.Single); NonplanarBonds.Assign(m); foreach (var bond in m.Bonds) { Assert.AreEqual(BondStereo.None, bond.Stereo); } }
public void NonPlanarBondsForClockwsieExtendedTetrahedral() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 3, -1.56d, 0.78d)); m.Atoms.Add(Atom("C", 0, -1.13d, 1.49d)); m.Atoms.Add(Atom("C", 0, -0.31d, 1.47d)); m.Atoms.Add(Atom("C", 0, 0.52d, 1.46d)); m.Atoms.Add(Atom("C", 3, 0.94d, 2.17d)); m.Atoms.Add(Atom("H", 0, 0.92d, 0.74d)); m.Atoms.Add(Atom("H", 0, -1.53d, 2.21d)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double, BondStereo.None); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Double, BondStereo.None); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[5], BondOrder.Single); m.StereoElements.Add(new ExtendedTetrahedral(m.Atoms[2], new IAtom[] { m.Atoms[0], m.Atoms[6], m.Atoms[4], m.Atoms[5] }, TetrahedralStereo.Clockwise)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.Up, m.GetBond(m.Atoms[1], m.Atoms[0]).Stereo); Assert.AreEqual(BondStereo.Down, m.GetBond(m.Atoms[1], m.Atoms[6]).Stereo); }
public void ClockwiseSortShouldHandleExactlyOppositeAtoms() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 0, 4.50d, -14.84d)); m.Atoms.Add(Atom("C", 3, 4.51d, -13.30d)); m.Atoms.Add(Atom("C", 2, 4.93d, -14.13d)); m.Atoms.Add(Atom("C", 2, 3.68d, -14.81d)); m.Atoms.Add(Atom("O", 0, 4.05d, -15.54d)); m.Atoms.Add(Atom("O", 1, 3.23d, -15.50d)); m.Atoms.Add(Atom("C", 3, 5.32d, -14.86d)); m.Atoms.Add(Atom("C", 3, 4.45d, -16.27d)); m.AddBond(m.Atoms[0], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[6], BondOrder.Single); m.AddBond(m.Atoms[7], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[3], BondOrder.Single); m.StereoElements.Add(new TetrahedralChirality(m.Atoms[0], new IAtom[] { m.Atoms[2], m.Atoms[4], m.Atoms[6], m.Atoms[3], }, TetrahedralStereo.AntiClockwise)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.Up, m.Bonds[2].Stereo); }
public void UseCrossedBondIfNeeded() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 3, 0.000, 0.000)); m.Atoms.Add(Atom("C", 1, 1.299, -0.750)); m.Atoms.Add(Atom("C", 1, 2.598, -0.000)); m.Atoms.Add(Atom("C", 1, 3.897, -0.750)); m.Atoms.Add(Atom("C", 1, 5.196, -0.000)); m.Atoms.Add(Atom("C", 1, 6.495, -0.750)); m.Atoms.Add(Atom("C", 1, 7.794, -0.000)); m.Atoms.Add(Atom("C", 3, 9.093, -0.750)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Double); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); m.AddBond(m.Atoms[3], m.Atoms[4], BondOrder.Double); m.AddBond(m.Atoms[4], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[5], m.Atoms[6], BondOrder.Double); m.AddBond(m.Atoms[6], m.Atoms[7], BondOrder.Single); m.StereoElements.Add(new DoubleBondStereochemistry( m.Bonds[1], new IBond[] { m.Bonds[0], m.Bonds[2] }, DoubleBondConformation.Opposite)); m.StereoElements.Add(new DoubleBondStereochemistry( m.Bonds[5], new IBond[] { m.Bonds[4], m.Bonds[6] }, DoubleBondConformation.Opposite)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.EOrZ, m.Bonds[3].Stereo); }
public void Anticlockwise_1() { var m = new AtomContainer(); m.Atoms.Add(Atom("C", 0, -1.47d, 3.62d)); m.Atoms.Add(Atom("C", 2, -1.13d, 2.16d)); m.Atoms.Add(Atom("C", 2, 0.30d, 1.72d)); m.Atoms.Add(Atom("C", 3, 0.64d, 0.26d)); m.Atoms.Add(Atom("C", 3, -2.90d, 4.06d)); m.Atoms.Add(Atom("N", 2, 0.03d, 3.70d)); m.Atoms.Add(Atom("O", 1, -1.28d, 5.11d)); m.AddBond(m.Atoms[0], m.Atoms[1], BondOrder.Single); m.AddBond(m.Atoms[1], m.Atoms[2], BondOrder.Single); m.AddBond(m.Atoms[2], m.Atoms[3], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[4], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[5], BondOrder.Single); m.AddBond(m.Atoms[0], m.Atoms[6], BondOrder.Single); m.StereoElements.Add(new TetrahedralChirality(m.Atoms[0], new IAtom[] { m.Atoms[1], m.Atoms[4], m.Atoms[5], m.Atoms[6] }, TetrahedralStereo.AntiClockwise)); NonplanarBonds.Assign(m); Assert.AreEqual(BondStereo.None, m.Bonds[0].Stereo); Assert.AreEqual(BondStereo.None, m.Bonds[3].Stereo); Assert.AreEqual(BondStereo.Down, m.Bonds[4].Stereo); Assert.AreEqual(BondStereo.Up, m.Bonds[5].Stereo); }