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 TestToString() { PharmacophoreQueryAtom qatom1 = new PharmacophoreQueryAtom("Amine", "[CX2]N"); PharmacophoreQueryAtom qatom2 = new PharmacophoreQueryAtom("aromatic", "c1ccccc1"); PharmacophoreQueryBond qbond1 = new PharmacophoreQueryBond(qatom1, qatom2, 1.0, 2.0); string repr = qbond1.ToString(); Assert.AreEqual("DC::Amine [[CX2]N]::aromatic [c1ccccc1]::[1.0 - 2.0] ", repr); }
public void TestLower() { PharmacophoreQueryAtom qatom1 = new PharmacophoreQueryAtom("Amine", "[CX2]N"); PharmacophoreQueryAtom qatom2 = new PharmacophoreQueryAtom("aromatic", "c1ccccc1"); PharmacophoreQueryBond qbond1 = new PharmacophoreQueryBond(qatom1, qatom2, 1.0, 2.0); PharmacophoreQueryBond qbond2 = new PharmacophoreQueryBond(qatom1, qatom2, 1.732); Assert.AreEqual(1.0, qbond1.GetLower(), 0.01); Assert.AreEqual(1.732, qbond2.GetLower(), 0.01); }
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 TestMatches() { PharmacophoreAtom patom1 = new PharmacophoreAtom("[CX2]N", "Amine", Vector3.Zero); PharmacophoreAtom patom2 = new PharmacophoreAtom("c1ccccc1", "Aromatic", new Vector3(1, 1, 1)); PharmacophoreBond pbond = new PharmacophoreBond(patom1, patom2); PharmacophoreQueryAtom qatom1 = new PharmacophoreQueryAtom("Amine", "[CX2]N"); PharmacophoreQueryAtom qatom2 = new PharmacophoreQueryAtom("aromatic", "c1ccccc1"); PharmacophoreQueryBond qbond1 = new PharmacophoreQueryBond(qatom1, qatom2, 1.0, 2.0); PharmacophoreQueryBond qbond2 = new PharmacophoreQueryBond(qatom1, qatom2, 1.732); PharmacophoreQueryBond qbond3 = new PharmacophoreQueryBond(qatom1, qatom2, 0.1, 1.0); Assert.IsTrue(qbond1.Matches(pbond)); Assert.IsTrue(qbond2.Matches(pbond)); Assert.IsFalse(qbond3.Matches(pbond)); }
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 TestMatches() { PharmacophoreAtom patom1 = new PharmacophoreAtom("[CX2]N", "Amine", new Vector3(1, 1, 1)); PharmacophoreAtom patom2 = new PharmacophoreAtom("c1ccccc1", "Aromatic", Vector3.Zero); PharmacophoreAtom patom3 = new PharmacophoreAtom("C", "Blah", new Vector3(1, 0, 0)); PharmacophoreAngleBond pbond = new PharmacophoreAngleBond(patom1, patom2, patom3); PharmacophoreQueryAtom qatom1 = new PharmacophoreQueryAtom("Amine", "[CX2]N"); PharmacophoreQueryAtom qatom2 = new PharmacophoreQueryAtom("aromatic", "c1ccccc1"); PharmacophoreQueryAtom qatom3 = new PharmacophoreQueryAtom("blah", "C"); PharmacophoreQueryAngleBond qbond1 = new PharmacophoreQueryAngleBond(qatom1, qatom2, qatom3, 54.735); PharmacophoreQueryAngleBond qbond2 = new PharmacophoreQueryAngleBond(qatom1, qatom2, qatom3, 50, 60); PharmacophoreQueryAngleBond qbond3 = new PharmacophoreQueryAngleBond(qatom1, qatom2, qatom3, 60, 80); PharmacophoreQueryBond qbond4 = new PharmacophoreQueryBond(qatom1, qatom2, 1, 2); Assert.IsTrue(qbond1.Matches(pbond)); Assert.IsTrue(qbond2.Matches(pbond)); Assert.IsFalse(qbond3.Matches(pbond)); Assert.IsFalse(qbond4.Matches(pbond)); }
public PharmacophoreQueryTest() { query = new PharmacophoreQuery(); 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); }
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); }