public void TestCNSPcore() { var filename = "NCDK.Data.MDL.cnssmarts.sdf"; var ins = ResourceLoader.GetAsStream(filename); var reader = new EnumerableSDFReader(ins, CDK.Builder); var query = new PharmacophoreQuery(); var arom = new PharmacophoreQueryAtom("A", "c1ccccc1"); var n1 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); var b1 = new PharmacophoreQueryBond(arom, n1, 5.0, 7.0); query.Atoms.Add(arom); query.Atoms.Add(n1); query.Bonds.Add(b1); var mol = reader.First(); reader.Close(); var matcher = new PharmacophoreMatcher(query); var status = matcher.Matches(mol); Assert.IsTrue(status); var pmatches = matcher.GetMatchingPharmacophoreAtoms(); Assert.AreEqual(1, pmatches.Count); var upmatches = matcher.GetUniqueMatchingPharmacophoreAtoms(); Assert.AreEqual(1, upmatches.Count); }
public void TestMatcherQuery1() { Assert.IsNotNull(conformers); // make a query var query = new PharmacophoreQuery(); var o = new PharmacophoreQueryAtom("D", "[OX1]"); var n1 = new PharmacophoreQueryAtom("A", "[N]"); var n2 = new PharmacophoreQueryAtom("A", "[N]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); var b1 = new PharmacophoreQueryBond(o, n1, 4.0, 4.5); var b2 = new PharmacophoreQueryBond(o, n2, 4.0, 5.0); var b3 = new PharmacophoreQueryBond(n1, n2, 5.4, 5.8); query.Bonds.Add(b1); query.Bonds.Add(b2); query.Bonds.Add(b3); var matcher = new PharmacophoreMatcher(query); bool firstTime = true; int i = 0; var statuses = new bool[100]; foreach (var conf in conformers) { if (firstTime) { statuses[i] = matcher.Matches(conf, true); firstTime = false; } else { statuses[i] = matcher.Matches(conf, false); } i++; } var hits = new int[18]; int idx = 0; for (i = 0; i < statuses.Length; i++) { if (statuses[i]) { hits[idx++] = i; } } int[] expected = { 0, 1, 2, 5, 6, 7, 8, 9, 10, 20, 23, 48, 62, 64, 66, 70, 76, 87 }; for (i = 0; i < expected.Length; i++) { Assert.AreEqual(expected[i], hits[i], $"Hit {i} didn't match"); } }
public void TestAngleMatch2() { var filename = "NCDK.Data.MDL.cnssmarts.sdf"; var ins = ResourceLoader.GetAsStream(filename); var reader = new EnumerableSDFReader(ins, CDK.Builder); var query = new PharmacophoreQuery(); var n1 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); var n2 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); var n3 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); var b1 = new PharmacophoreQueryAngleBond(n1, n2, n3, 89.14); query.Atoms.Add(n1); query.Atoms.Add(n2); query.Atoms.Add(n3); query.Bonds.Add(b1); var mol = reader.First(); reader.Close(); var matcher = new PharmacophoreMatcher(query); var status = matcher.Matches(mol); Assert.IsTrue(status); }
public void TestAngleMatch3() { Assert.IsNotNull(conformers); // make a query var query = new PharmacophoreQuery(); var o = new PharmacophoreQueryAtom("D", "[OX1]"); var n1 = new PharmacophoreQueryAtom("A", "[N]"); var n2 = new PharmacophoreQueryAtom("A", "[N]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); var b1 = new PharmacophoreQueryAngleBond(o, n1, n2, 43, 47); query.Bonds.Add(b1); var matcher = new PharmacophoreMatcher(query); bool firstTime = true; int i = 0; var statuses = new bool[100]; foreach (var conf in conformers) { if (firstTime) { statuses[i] = matcher.Matches(conf, true); firstTime = false; } else { statuses[i] = matcher.Matches(conf, false); } i++; } Assert.AreEqual(100, statuses.Length); var hits = new int[9]; int idx = 0; for (i = 0; i < statuses.Length; i++) { if (statuses[i]) { hits[idx++] = i; } } int[] expected = { 0, 6, 32, 33, 48, 54, 60, 62, 69 }; for (i = 0; i < expected.Length; i++) { Assert.AreEqual(expected[i], hits[i], $"Hit {i} didn't match"); } }
public void TestMatchedBonds() { Assert.IsNotNull(conformers); // make a query var query = new PharmacophoreQuery(); var o = new PharmacophoreQueryAtom("D", "[OX1]"); var n1 = new PharmacophoreQueryAtom("A", "[N]"); var n2 = new PharmacophoreQueryAtom("A", "[N]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); var b1 = new PharmacophoreQueryBond(o, n1, 4.0, 4.5); var b2 = new PharmacophoreQueryBond(o, n2, 4.0, 5.0); var b3 = new PharmacophoreQueryBond(n1, n2, 5.4, 5.8); query.Bonds.Add(b1); query.Bonds.Add(b2); query.Bonds.Add(b3); var conf1 = conformers[0]; var matcher = new PharmacophoreMatcher(query); bool status = matcher.Matches(conf1); Assert.IsTrue(status); var bMatches = matcher.GetMatchingPharmacophoreBonds(); Assert.AreEqual(2, bMatches.Count); // 2 since we haven't gotten a unique set Assert.AreEqual(3, bMatches[0].Count); var pbond = (PharmacophoreBond)BondRef.Deref(bMatches[0][0]); var patom1 = (PharmacophoreAtom)AtomRef.Deref(pbond.Begin); var patom2 = (PharmacophoreAtom)AtomRef.Deref(pbond.End); Assert.AreEqual("D", patom1.Symbol); Assert.AreEqual("A", patom2.Symbol); var bondMap = matcher.GetTargetQueryBondMappings(); Assert.AreEqual(2, bondMap.Count); var mapping = bondMap[0]; // get the 'BondRef' for lookup var value = mapping[bMatches[0][0]]; Assert.AreEqual(b1, value); }
static void Main() { var matcher = new PharmacophoreMatcher(); #region QueryAtomContainer query = new QueryAtomContainer(ChemObjectBuilder.Instance); PharmacophoreQueryAtom o = new PharmacophoreQueryAtom("D", "[OX1]"); PharmacophoreQueryAtom n1 = new PharmacophoreQueryAtom("A", "[N]"); PharmacophoreQueryAtom n2 = new PharmacophoreQueryAtom("A", "[N]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); PharmacophoreQueryBond b1 = new PharmacophoreQueryBond(o, n1, 4.0, 4.5); PharmacophoreQueryBond b2 = new PharmacophoreQueryBond(o, n2, 4.0, 5.0); PharmacophoreQueryBond b3 = new PharmacophoreQueryBond(n1, n2, 5.4, 5.8); query.Bonds.Add(b1); query.Bonds.Add(b2); query.Bonds.Add(b3); string filename = "/Users/rguha/pcore1.sdf"; using (var srm = new FileStream(filename, FileMode.Open)) { foreach (var conformers in new IEnumerableMDLConformerReader(srm, ChemObjectBuilder.Instance)) { bool firstTime = true; foreach (var conf in conformers) { bool status; if (firstTime) { status = matcher.Matches(conf, true); firstTime = false; } else { status = matcher.Matches(conf, false); } if (status) { // OK, matched. Do something } } #endregion } } }
public void TestGetterSetter() { var query = new PharmacophoreQuery(); var arom = new PharmacophoreQueryAtom("A", "c1ccccc1"); var n1 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); var b1 = new PharmacophoreQueryBond(arom, n1, 5.0, 7.0); query.Atoms.Add(arom); query.Atoms.Add(n1); query.Bonds.Add(b1); var matcher = new PharmacophoreMatcher(); matcher.SetPharmacophoreQuery(query); var retQuery = matcher.GetPharmacophoreQuery(); Assert.AreEqual(2, retQuery.Atoms.Count); Assert.AreEqual(1, retQuery.Bonds.Count); }
public void TestMatchingBonds() { var filename = "NCDK.Data.MDL.cnssmarts.sdf"; var ins = ResourceLoader.GetAsStream(filename); EnumerableSDFReader reader = new EnumerableSDFReader(ins, CDK.Builder); PharmacophoreQuery query = new PharmacophoreQuery(); PharmacophoreQueryAtom arom = new PharmacophoreQueryAtom("A", "c1ccccc1"); PharmacophoreQueryAtom n1 = new PharmacophoreQueryAtom("BasicAmine", "[NX3;h2,h1,H1,H2;!$(NC=O)]"); PharmacophoreQueryBond b1 = new PharmacophoreQueryBond(arom, n1, 5.0, 7.0); query.Atoms.Add(arom); query.Atoms.Add(n1); query.Bonds.Add(b1); IAtomContainer mol = (IAtomContainer)reader.First(); reader.Close(); PharmacophoreMatcher matcher = new PharmacophoreMatcher(query); bool status = matcher.Matches(mol); Assert.IsTrue(status); var pmatches = matcher.GetMatchingPharmacophoreAtoms(); Assert.AreEqual(1, pmatches.Count); var upmatches = matcher.GetUniqueMatchingPharmacophoreAtoms(); Assert.AreEqual(1, upmatches.Count); var bmatches = matcher.GetMatchingPharmacophoreBonds(); Assert.AreEqual(1, bmatches.Count); var bmatch = bmatches[0]; Assert.AreEqual(1, bmatch.Count); PharmacophoreBond pbond = (PharmacophoreBond)BondRef.Deref(bmatch[0]); Assert.AreEqual(5.63, pbond.BondLength, 0.01); }
public void MultiSmartsQuery() { var query = new PharmacophoreQuery(); var rings = new PharmacophoreQueryAtom("A", "c1ccccc1|C1CCCC1"); var o1 = new PharmacophoreQueryAtom("Hd", "[OX1]"); var b1 = new PharmacophoreQueryBond(rings, o1, 3.5, 5.8); query.Atoms.Add(rings); query.Atoms.Add(o1); query.Bonds.Add(b1); var matcher = new PharmacophoreMatcher(); matcher.SetPharmacophoreQuery(query); var filename = "NCDK.Data.PCore.multismartpcore.sdf"; var ins = ResourceLoader.GetAsStream(filename); var reader = new EnumerableSDFReader(ins, CDK.Builder); var enumerator = reader.GetEnumerator(); enumerator.MoveNext(); var mol = enumerator.Current; Assert.IsTrue(matcher.Matches(mol)); Assert.AreEqual(1, matcher.GetUniqueMatchingPharmacophoreAtoms().Count); Assert.AreEqual(2, matcher.GetUniqueMatchingPharmacophoreAtoms()[0].Count); enumerator.MoveNext(); mol = enumerator.Current; Assert.IsTrue(matcher.Matches(mol)); Assert.AreEqual(2, matcher.GetUniqueMatchingPharmacophoreAtoms().Count); Assert.AreEqual(2, matcher.GetUniqueMatchingPharmacophoreAtoms()[0].Count); Assert.AreEqual(2, matcher.GetUniqueMatchingPharmacophoreAtoms()[1].Count); enumerator.MoveNext(); mol = enumerator.Current; reader.Close(); Assert.IsFalse(matcher.Matches(mol)); }
public void TestInvalidQuery() { var query = new PharmacophoreQuery(); var o = new PharmacophoreQueryAtom("D", "[OX1]"); var n1 = new PharmacophoreQueryAtom("A", "[N]"); var n2 = new PharmacophoreQueryAtom("A", "[NX3]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); var b1 = new PharmacophoreQueryBond(o, n1, 4.0, 4.5); var b2 = new PharmacophoreQueryBond(o, n2, 4.0, 5.0); var b3 = new PharmacophoreQueryBond(n1, n2, 5.4, 5.8); query.Bonds.Add(b1); query.Bonds.Add(b2); query.Bonds.Add(b3); var matcher = new PharmacophoreMatcher(query); matcher.Matches(conformers[0]); }
public void TestMatchedAtoms() { Assert.IsNotNull(conformers); // make a query var query = new PharmacophoreQuery(); var o = new PharmacophoreQueryAtom("D", "[OX1]"); var n1 = new PharmacophoreQueryAtom("A", "[N]"); var n2 = new PharmacophoreQueryAtom("A", "[N]"); query.Atoms.Add(o); query.Atoms.Add(n1); query.Atoms.Add(n2); var b1 = new PharmacophoreQueryBond(o, n1, 4.0, 4.5); var b2 = new PharmacophoreQueryBond(o, n2, 4.0, 5.0); var b3 = new PharmacophoreQueryBond(n1, n2, 5.4, 5.8); query.Bonds.Add(b1); query.Bonds.Add(b2); query.Bonds.Add(b3); var conf1 = conformers[0]; var matcher = new PharmacophoreMatcher(query); bool status = matcher.Matches(conf1); Assert.IsTrue(status); var pmatches = matcher.GetMatchingPharmacophoreAtoms(); Assert.AreEqual(2, pmatches.Count); var upmatches = matcher.GetUniqueMatchingPharmacophoreAtoms(); Assert.AreEqual(1, upmatches.Count); }