コード例 #1
0
        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);
        }
コード例 #2
0
        private static List <IReadOnlyList <PharmacophoreAtom> > GetPCoreAtoms(Mappings mappings)
        {
            var atoms = new List <IReadOnlyList <PharmacophoreAtom> >();

            // XXX: re-subsearching the query
            foreach (var map in mappings.ToAtomMap())
            {
                var pcoreatoms = new List <PharmacophoreAtom>();
                foreach (var atom in map.Values)
                {
                    pcoreatoms.Add((PharmacophoreAtom)AtomRef.Deref(atom));
                }
                atoms.Add(pcoreatoms);
            }
            return(atoms);
        }
コード例 #3
0
 private static Expr GetAtomExpr(IAtom atom)
 {
     return(((QueryAtom)AtomRef.Deref(atom)).Expression);
 }
コード例 #4
0
        public static IAtomContainer SuppressQueryHydrogens(IAtomContainer mol)
        {
            // pre-checks
            foreach (var atom in mol.Atoms)
            {
                if (!(AtomRef.Deref(atom) is QueryAtom))
                {
                    throw new ArgumentException("Non-query atoms found!", nameof(mol));
                }
            }
            foreach (var bond in mol.Bonds)
            {
                if (!(BondRef.Deref(bond) is QueryBond))
                {
                    throw new ArgumentException("Non-query bonds found!", nameof(mol));
                }
            }

            var plainHydrogens = new CDKObjectMap();

            foreach (var atom in mol.Atoms)
            {
                int hcnt = 0;
                foreach (var nbor in mol.GetConnectedAtoms(atom))
                {
                    var qnbor = (QueryAtom)AtomRef.Deref(nbor);
                    if (mol.GetConnectedBonds(nbor).Count() == 1 &&
                        IsSimpleHydrogen(qnbor.Expression))
                    {
                        hcnt++;
                        plainHydrogens.Set(nbor, atom);
                    }
                }
                if (hcnt > 0)
                {
                    var qatom = (QueryAtom)AtomRef.Deref(atom);
                    var e     = qatom.Expression;
                    var hexpr = new Expr();
                    for (int i = 0; i < hcnt; i++)
                    {
                        hexpr.And(new Expr(ExprType.TotalHCount, i).Negate());
                    }
                    e.And(hexpr);
                }
            }

            // nothing to do
            if (!plainHydrogens.Any())
            {
                return(mol);
            }

            var res = new QueryAtomContainer();

            foreach (var atom in mol.Atoms)
            {
                if (!plainHydrogens.ContainsKey(atom))
                {
                    res.Atoms.Add(atom);
                }
            }
            foreach (var bond in mol.Bonds)
            {
                if (!plainHydrogens.ContainsKey(bond.Begin) &&
                    !plainHydrogens.ContainsKey(bond.End))
                {
                    res.Bonds.Add(bond);
                }
            }
            foreach (var se in mol.StereoElements)
            {
                res.StereoElements.Add((IStereoElement <IChemObject, IChemObject>)se.Clone(plainHydrogens));
            }

            return(res);
        }