/** * Create a pattern which can be used to find molecules which contain the * {@code query} structure. * * @param query the substructure to find * @return a pattern for finding the {@code query} */ public static Pattern findSubstructure(IAtomContainer query) { boolean isQuery = query instanceof IQueryAtomContainer; return findSubstructure(query, isQuery ? AtomMatcher.forQuery() : AtomMatcher.forElement(), isQuery ? BondMatcher.forQuery() : BondMatcher.forOrder()); }
/** * Create a pattern which can be used to find molecules which contain the * {@code query} structure. * * @param query the substructure to find * @return a pattern for finding the {@code query} */ public static Pattern findSubstructure(IAtomContainer query) { boolean isQuery = query instanceof IQueryAtomContainer; return new Ullmann(query, isQuery ? AtomMatcher.forQuery() : AtomMatcher.forElement(), isQuery ? BondMatcher.forQuery() : BondMatcher.forOrder()); }
/** * Create a pattern which can be used to find molecules which are the same * as the {@code query} structure. * * @param query the substructure to find * @return a pattern for finding the {@code query} */ public static Pattern findIdentical(IAtomContainer query) { boolean isQuery = query instanceof IQueryAtomContainer; return findIdentical(query, isQuery ? AtomMatcher.forQuery() : AtomMatcher.forElement(), isQuery ? BondMatcher.forQuery() : BondMatcher.forOrder()); }
@Test public void aliphaticMatch() { BondMatcher matcher = BondMatcher.forOrder(); IBond bond1 = mock(IBond.class); IBond bond2 = mock(IBond.class); when(bond1.getFlag(ISAROMATIC)).thenReturn(false); when(bond2.getFlag(ISAROMATIC)).thenReturn(false); when(bond1.getOrder()).thenReturn(IBond.Order.SINGLE); when(bond2.getOrder()).thenReturn(IBond.Order.SINGLE); assertTrue(matcher.matches(bond1, bond2)); assertTrue(matcher.matches(bond2, bond1)); }
@Test public void aliphaticMismatch_order() { BondMatcher matcher = BondMatcher.forOrder(); IBond bond1 = mock(IBond.class); IBond bond2 = mock(IBond.class); when(bond1.getFlag(ISAROMATIC)).thenReturn(false); when(bond2.getFlag(ISAROMATIC)).thenReturn(false); when(bond1.getOrder()).thenReturn(IBond.Order.SINGLE); when(bond2.getOrder()).thenReturn(IBond.Order.DOUBLE); assertFalse(matcher.matches(bond1, bond2)); assertFalse(matcher.matches(bond2, bond1)); }
@Test public void aliphaticMismatch_aromatic() { BondMatcher matcher = BondMatcher.forOrder(); IBond bond1 = mock(IBond.class); IBond bond2 = mock(IBond.class); when(bond1.getFlag(ISAROMATIC)).thenReturn(true); when(bond2.getFlag(ISAROMATIC)).thenReturn(false); when(bond1.getOrder()).thenReturn(IBond.Order.SINGLE); when(bond2.getOrder()).thenReturn(IBond.Order.SINGLE); assertTrue(matcher.matches(bond1, bond2)); assertTrue(matcher.matches(bond2, bond1)); }
@Test public void aromaticMatch() { BondMatcher matcher = BondMatcher.forOrder(); IBond bond1 = mock(IBond.class); IBond bond2 = mock(IBond.class); when(bond1.getFlag(ISAROMATIC)).thenReturn(true); when(bond2.getFlag(ISAROMATIC)).thenReturn(true); when(bond1.getOrder()).thenReturn(IBond.Order.SINGLE); when(bond2.getOrder()).thenReturn(IBond.Order.DOUBLE); assertTrue(matcher.matches(bond1, bond2)); assertTrue(matcher.matches(bond2, bond1)); }
return true; }, BondMatcher.forOrder());
return true; }, BondMatcher.forOrder());