Skip to content

Commit

Permalink
Replace direct usages of matcher classes (now all unified under the E…
Browse files Browse the repository at this point in the history
…xpr API)
  • Loading branch information
johnmay committed Oct 10, 2018
1 parent 121ecf5 commit c2d749b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,13 @@
import org.openscience.cdk.interfaces.IBond;
import org.openscience.cdk.interfaces.IChemObjectBuilder;
import org.openscience.cdk.interfaces.IPseudoAtom;
import org.openscience.cdk.isomorphism.matchers.Expr;
import org.openscience.cdk.isomorphism.matchers.IQueryAtom;
import org.openscience.cdk.isomorphism.matchers.IQueryAtomContainer;
import org.openscience.cdk.isomorphism.matchers.IQueryBond;
import org.openscience.cdk.isomorphism.matchers.QueryAtom;
import org.openscience.cdk.isomorphism.matchers.QueryAtomContainer;
import org.openscience.cdk.isomorphism.matchers.smarts.AnyOrderQueryBond;
import org.openscience.cdk.isomorphism.matchers.smarts.AtomicNumberAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.TotalConnectionAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.TotalHCountAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.TotalValencyAtom;
import org.openscience.cdk.isomorphism.matchers.QueryBond;
import org.openscience.cdk.sgroup.Sgroup;
import org.openscience.cdk.sgroup.SgroupType;
import org.openscience.cdk.silent.SilentChemObjectBuilder;
Expand Down Expand Up @@ -75,8 +73,6 @@
import java.util.Map;
import java.util.Set;

import static org.openscience.cdk.isomorphism.matchers.smarts.LogicalOperatorAtom.and;

/**
* Utility class for abbreviating (sub)structures. Using either self assigned structural
* motifs or pre-loading a common set a structure depiction can be made more concise with
Expand Down Expand Up @@ -688,10 +684,13 @@ private IQueryAtom matchExact(final IAtomContainer mol, final IAtom atom) {
hcnt++;
}

return and(and(new AtomicNumberAtom(elem, bldr),
new TotalConnectionAtom(con, bldr)),
and(new TotalHCountAtom(hcnt, bldr),
new TotalValencyAtom(val, bldr)));
QueryAtom qatom = new QueryAtom(atom.getBuilder());
Expr expr = new Expr(Expr.Type.ELEMENT, elem)
.and(new Expr(Expr.Type.TOTAL_DEGREE, con))
.and(new Expr(Expr.Type.TOTAL_H_COUNT, hcnt))
.and(new Expr(Expr.Type.VALENCE, val));
qatom.setExpression(expr);
return qatom;
}

/**
Expand Down Expand Up @@ -724,7 +723,8 @@ private IQueryAtomContainer matchExact(IAtomContainer mol) {
if (beg == null || end == null)
continue;

IQueryBond qbond = new AnyOrderQueryBond(bldr);
IQueryBond qbond = new QueryBond(bldr);
((QueryBond) qbond).setExpression(new Expr(Expr.Type.TRUE));
qbond.setAtom(beg, 0);
qbond.setAtom(end, 1);
qry.addBond(qbond);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
*/
package org.openscience.cdk.isomorphism;

import java.io.IOException;
import java.io.InputStream;
import java.util.BitSet;
import java.util.List;
Expand All @@ -48,15 +49,17 @@
import org.openscience.cdk.io.IChemObjectReader.Mode;
import org.openscience.cdk.io.ISimpleChemObjectReader;
import org.openscience.cdk.io.MDLV2000Reader;
import org.openscience.cdk.isomorphism.matchers.Expr;
import org.openscience.cdk.isomorphism.matchers.IQueryAtom;
import org.openscience.cdk.isomorphism.matchers.IQueryAtomContainer;
import org.openscience.cdk.isomorphism.matchers.OrderQueryBond;
import org.openscience.cdk.isomorphism.matchers.QueryAtom;
import org.openscience.cdk.isomorphism.matchers.QueryAtomContainer;
import org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator;
import org.openscience.cdk.isomorphism.matchers.QueryBond;
import org.openscience.cdk.isomorphism.matchers.SymbolQueryAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.AliphaticSymbolAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.AnyAtom;
import org.openscience.cdk.isomorphism.mcss.RMap;
import org.openscience.cdk.smarts.Smarts;
import org.openscience.cdk.smiles.SmilesParser;
import org.openscience.cdk.templates.TestMoleculeFactory;
import org.openscience.cdk.tools.CDKHydrogenAdder;
Expand Down Expand Up @@ -108,23 +111,8 @@ public void testSFBug1708336() throws Exception {
atomContainer.addBond(0, 1, IBond.Order.SINGLE);
atomContainer.addBond(1, 2, IBond.Order.SINGLE);
IQueryAtomContainer query = new QueryAtomContainer(DefaultChemObjectBuilder.getInstance());
IQueryAtom a1 = new SymbolQueryAtom(DefaultChemObjectBuilder.getInstance());
a1.setSymbol("C");

AnyAtom a2 = new AnyAtom(DefaultChemObjectBuilder.getInstance());

IBond b1 = new OrderQueryBond(a1, a2, IBond.Order.SINGLE, DefaultChemObjectBuilder.getInstance());

IQueryAtom a3 = new SymbolQueryAtom(DefaultChemObjectBuilder.getInstance());
a3.setSymbol("C");

IBond b2 = new OrderQueryBond(a2, a3, IBond.Order.SINGLE, DefaultChemObjectBuilder.getInstance());
query.addAtom(a1);
query.addAtom(a2);
query.addAtom(a3);

query.addBond(b1);
query.addBond(b2);
if (!Smarts.parse(query, "C*C"))
Assert.fail(Smarts.getLastErrorMesg());

List<List<RMap>> list = uiTester.getSubgraphMaps(atomContainer, query);

Expand Down Expand Up @@ -606,28 +594,8 @@ public void testUITTimeoutFix() throws Exception {
@Test
public void testUITSymmetricMatch() throws Exception {
QueryAtomContainer q = new QueryAtomContainer(DefaultChemObjectBuilder.getInstance());
//setting atoms
IQueryAtom a0 = new AliphaticSymbolAtom("C", DefaultChemObjectBuilder.getInstance());
q.addAtom(a0);
IQueryAtom a1 = new AnyAtom(DefaultChemObjectBuilder.getInstance());
q.addAtom(a1);
IQueryAtom a2 = new AnyAtom(DefaultChemObjectBuilder.getInstance());
q.addAtom(a2);
IQueryAtom a3 = new AliphaticSymbolAtom("C", DefaultChemObjectBuilder.getInstance());
q.addAtom(a3);
//setting bonds
org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond b0 = new org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond(
IBond.Order.SINGLE, DefaultChemObjectBuilder.getInstance());
b0.setAtoms(new IAtom[]{a0, a1});
q.addBond(b0);
org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond b1 = new org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond(
IBond.Order.SINGLE, DefaultChemObjectBuilder.getInstance());
b1.setAtoms(new IAtom[]{a1, a2});
q.addBond(b1);
org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond b2 = new org.openscience.cdk.isomorphism.matchers.smarts.OrderQueryBond(
IBond.Order.SINGLE, DefaultChemObjectBuilder.getInstance());
b2.setAtoms(new IAtom[]{a2, a3});
q.addBond(b2);
if (!Smarts.parse(q, "C**C"))
Assert.fail(Smarts.getLastErrorMesg());

//Creating 'SCCS' target molecule
AtomContainer target = new AtomContainer();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@
import org.openscience.cdk.interfaces.IRing;
import org.openscience.cdk.interfaces.IRingSet;
import org.openscience.cdk.isomorphism.UniversalIsomorphismTester;
import org.openscience.cdk.isomorphism.matchers.Expr;
import org.openscience.cdk.isomorphism.matchers.IQueryAtom;
import org.openscience.cdk.isomorphism.matchers.OrderQueryBond;
import org.openscience.cdk.isomorphism.matchers.QueryAtomContainer;
import org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator;
import org.openscience.cdk.isomorphism.matchers.QueryBond;
import org.openscience.cdk.isomorphism.matchers.SymbolQueryAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.AnyOrderQueryBond;
import org.openscience.cdk.isomorphism.matchers.smarts.AromaticAtom;
import org.openscience.cdk.isomorphism.matchers.smarts.AromaticQueryBond;
import org.openscience.cdk.isomorphism.mcss.RMap;
import org.openscience.cdk.qsar.AbstractMolecularDescriptor;
import org.openscience.cdk.qsar.DescriptorSpecification;
import org.openscience.cdk.qsar.DescriptorValue;
import org.openscience.cdk.qsar.IMolecularDescriptor;
import org.openscience.cdk.qsar.result.DoubleResult;
import org.openscience.cdk.qsar.result.IDescriptorResult;
import org.openscience.cdk.smarts.SmartsPattern;
import org.openscience.cdk.tools.CDKHydrogenAdder;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;
import org.openscience.cdk.tools.manipulator.RingSetManipulator;
Expand Down Expand Up @@ -890,8 +890,9 @@ && checkRingLink(rs, ac, ac.getAtom(hBondDonors.get(j).intValue()))) {
|| (bondAtom0.getSymbol().equals("N") && bondAtom1.getSymbol().equals("C"))
&& bond.getOrder() == IBond.Order.SINGLE) {
aminoAcid.removeBond(bondAtom0, bondAtom1);
aminoAcid.addBond(new AnyOrderQueryBond((IQueryAtom) bondAtom0, (IQueryAtom) bondAtom1,
IBond.Order.SINGLE, atomContainer.getBuilder()));
QueryBond qbond = new QueryBond(bondAtom0, bondAtom1, atomContainer.getBuilder());
qbond.setExpression(new Expr(Expr.Type.SINGLE_OR_AROMATIC));
aminoAcid.addBond(qbond);
break;
}
}
Expand Down Expand Up @@ -944,34 +945,11 @@ && checkRingLink(rs, ac, ac.getAtom(hBondDonors.get(j).intValue()))) {
}
}

// ortho oxygen pair
//AtomContainer orthopair = sp.parseSmiles("OCCO");
QueryAtomContainer orthopair = new QueryAtomContainer(atomContainer.getBuilder());
AromaticAtom atom1 = new AromaticAtom(atomContainer.getBuilder());
atom1.setSymbol("C");
AromaticAtom atom2 = new AromaticAtom(atomContainer.getBuilder());
atom2.setSymbol("C");
SymbolQueryAtom atom3 = new SymbolQueryAtom(atomContainer.getBuilder());
atom3.setSymbol("O");
SymbolQueryAtom atom4 = new SymbolQueryAtom(atomContainer.getBuilder());
atom4.setSymbol("O");

orthopair.addAtom(atom1);
orthopair.addAtom(atom2);
orthopair.addAtom(atom3);
orthopair.addAtom(atom4);

orthopair.addBond(new AromaticQueryBond(atom1, atom2, IBond.Order.SINGLE, atomContainer.getBuilder()));
orthopair.addBond(new OrderQueryBond(atom1, atom3, IBond.Order.SINGLE, atomContainer.getBuilder()));
orthopair.addBond(new OrderQueryBond(atom2, atom4, IBond.Order.SINGLE, atomContainer.getBuilder()));

try {
if (universalIsomorphismTester.isSubgraph(ac, orthopair)) {
xlogP -= 0.268;
//logger.debug("XLOGP: Ortho oxygen pair -0.268");
}
} catch (CDKException e) {
return getDummyDescriptorValue(e);
// ortho oxygen pair
SmartsPattern orthopair = SmartsPattern.create("OccO");
if (orthopair.matches(ac)) {
xlogP -= 0.268;
//logger.debug("XLOGP: Ortho oxygen pair -0.268");
}

return new DescriptorValue(getSpecification(), getParameterNames(), getParameters(), new DoubleResult(xlogP),
Expand Down

0 comments on commit c2d749b

Please sign in to comment.