boolean parseBondExpr() { bond = new QueryBond(mol.getBuilder()); bond.setExpression(new Expr(Expr.Type.NONE)); if (!parseBondExpr(bond.getExpression(), bond, '\0')) { error = "Invalid bond expression"; return false; } return true; }
boolean openRing(int rnum) { if (prev == null) { error = "Cannot open ring, no previous atom"; return false; } if (bond == null) { bond = new QueryBond(null); bond.setExpression(null); } bond.setAtom(prev, 0); rings[rnum] = addBond(prev, bond); numRingOpens++; bond = null; return true; }
/** * Compares a query bond with this query bond. * * @param object Object of type Bond * @return true if the query bond is equal to this query bond */ @Override public boolean compare(Object object) { if (object instanceof IQueryBond) { QueryBond queryBond = (QueryBond) object; for (IAtom atom : atoms) { if (!queryBond.contains(atom)) { return false; } } return true; } return false; }
public String generate(IAtom end, QueryBond bond) { String bexpr = generateBond(bond.getExpression()); if (bdirs.containsKey(bond)) { String bdir = bdirs.get(bond); if (bond.getBegin().equals(end)) { switch (bdir) { case BSTEREO_DN: bdir = BSTEREO_UP; break; case BSTEREO_UP: bdir = BSTEREO_DN; break; case BSTEREO_DNU: bdir = BSTEREO_UPU; break; case BSTEREO_UPU: bdir = BSTEREO_DNU; break; } } if (bexpr.isEmpty()) bexpr = bdir; else bexpr += ';' + bdir; } return bexpr; }
private static Expr getBondExpr(IBond bond) { return ((QueryBond) BondRef.deref(bond)).getExpression(); }
explicitValence[atom1 - 1] = explicitValence[atom2 - 1] = Integer.MIN_VALUE; } else { newBond = new QueryBond(builder); IAtom[] bondAtoms = {a1, a2}; newBond.setAtoms(bondAtoms); switch (order) { case 5: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_DOUBLE); break; case 6: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_AROMATIC); break; case 7: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.DOUBLE_OR_AROMATIC); break; case 8: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.TRUE); break;
continue; IQueryBond qbond = new QueryBond(beg, end, Expr.Type.TRUE); qry.addBond(qbond);
boolean closeRing(int rnum) { IBond bond = rings[rnum]; rings[rnum] = null; numRingOpens--; Expr openExpr = ((QueryBond) BondRef.deref(bond)).getExpression(); if (this.bond != null) { Expr closeExpr = ((QueryBond) BondRef.deref(this.bond)).getExpression(); if (openExpr == null) ((QueryBond) BondRef.deref(bond)).setExpression(closeExpr); else if (!openExpr.equals(closeExpr)) { error = "Open/close expressions are not equivalent"; return false; } this.bond = null; } else if (openExpr == null) { ((QueryBond) BondRef.deref(bond)).setExpression(new Expr(SINGLE_OR_AROMATIC)); } bond.setAtom(prev, 1); addBond(prev, bond); return true; }
QueryBond qbond = new QueryBond((IAtom) mapping.get(bond.getBegin()), (IAtom) mapping.get(bond.getEnd()), expr); qbond.setOrder(bond.getOrder()); if (optset.contains(Expr.Type.SINGLE_OR_AROMATIC) || optset.contains(Expr.Type.DOUBLE_OR_AROMATIC) || optset.contains(Expr.Type.IS_AROMATIC)) qbond.setIsAromatic(bond.isAromatic());
public static QueryAtomContainer createSymbolChargeIDQueryContainer(IAtomContainer container) { QueryAtomContainer queryContainer = new QueryAtomContainer(container.getBuilder()); for (int i = 0; i < container.getAtomCount(); i++) { queryContainer.addAtom(new SymbolChargeIDQueryAtom(container.getAtom(i))); } Iterator<IBond> bonds = container.bonds().iterator(); while (bonds.hasNext()) { IBond bond = bonds.next(); int index1 = container.indexOf(bond.getBegin()); int index2 = container.indexOf(bond.getEnd()); if (bond.isAromatic()) { QueryBond qbond = new QueryBond(queryContainer.getAtom(index1), queryContainer.getAtom(index2), Expr.Type.IS_AROMATIC); queryContainer.addBond(qbond); } else { QueryBond qbond = new QueryBond(queryContainer.getAtom(index1), queryContainer.getAtom(index2), Expr.Type.ORDER, bond.getOrder().numeric()); qbond.setOrder(bond.getOrder()); // backwards compatibility queryContainer.addBond(qbond); } } return queryContainer; }
/** * Returns a one line string representation of this query bond. * * @return The string representation of this query bond */ @Override public String toString() { StringBuffer resultString = new StringBuffer(32); resultString.append("Bond(").append(this.hashCode()); if (getOrder() != null) { resultString.append(", #O:").append(getOrder()); } resultString.append(", #S:").append(getStereo()); if (getAtomCount() > 0) { resultString.append(", #A:").append(getAtomCount()); for (int i = 0; i < atomCount; i++) { resultString.append(", ").append(atoms[i] == null ? "null" : atoms[i].toString()); } } resultString.append(", ").append(super.toString()); resultString.append(')'); return resultString.toString(); }
public void setAtomAt(IAtom atom, int position) { if (atom instanceof IQueryAtom) { super.setAtom(atom, position); } else { throw new IllegalArgumentException("Atom is not of type QueryAtom"); } } }
/** * Returns the geometric 3D center of the query bond. * * @return The geometric 3D center of the query bond */ @Override public Point3d get3DCenter() { double xOfCenter = 0; double yOfCenter = 0; double zOfCenter = 0; for (IAtom atom : atoms) { xOfCenter += atom.getPoint3d().x; yOfCenter += atom.getPoint3d().y; zOfCenter += atom.getPoint3d().z; } return new Point3d(xOfCenter / getAtomCount(), yOfCenter / getAtomCount(), zOfCenter / getAtomCount()); }
private void setBondDirs(IAtomContainer mol) { adjToDb = new HashSet<>(); ses = new HashMap<>(); bvisit = new HashSet<>(); for (IStereoElement se : mol.stereoElements()) { if (se.getConfigClass() == IStereoElement.CisTrans) { ses.put(se.getFocus(), se); } } for (IBond bond : mol.bonds()) { Expr expr = ((QueryBond) BondRef.deref(bond)).getExpression(); int flags = getBondStereoFlag(expr); if (flags != BSTEREO_ANY) { adjToDb.add(bond.getBegin()); adjToDb.add(bond.getEnd()); } } // first we set and propagate for (IBond bond : mol.bonds()) { if (!bvisit.contains(bond)) propagateBondStereo(bond, false); } // now set the complex ones for (IBond bond : mol.bonds()) { if (!bvisit.contains(bond)) propagateBondStereo(bond, true); } }
explicitValence[atom1 - 1] = explicitValence[atom2 - 1] = Integer.MIN_VALUE; } else { newBond = new QueryBond(builder); IAtom[] bondAtoms = {a1, a2}; newBond.setAtoms(bondAtoms); switch (order) { case 5: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_DOUBLE); break; case 6: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.SINGLE_OR_AROMATIC); break; case 7: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.DOUBLE_OR_AROMATIC); break; case 8: ((QueryBond) newBond).getExpression() .setPrimitive(Expr.Type.TRUE); break;
continue; IQueryBond qbond = new QueryBond(beg, end, Expr.Type.TRUE); qry.addBond(qbond);
Expr expr = ((QueryBond) BondRef.deref(bond)).getExpression(); if (hasAliphaticDoubleBond(expr)) { IBond left = null, right = null; if (left == null || right == null) continue; Expr leftExpr = ((QueryBond) BondRef.deref(left)).getExpression(); Expr rightExpr = ((QueryBond) BondRef.deref(right)).getExpression(); Expr bexpr = determineBondStereo(leftExpr, rightExpr); if (bexpr != null) { Expr expr = ((QueryBond) BondRef.deref(bond)).getExpression(); expr = strip(expr, Expr.Type.STEREOCHEMISTRY); if (expr == null) else expr.and(new Expr(SINGLE_OR_AROMATIC)); ((QueryBond) bond).setExpression(expr);
public void setAtomAt(IAtom atom, int position) { if (atom instanceof IQueryAtom) { super.setAtom(atom, position); } else { throw new IllegalArgumentException("Atom is not of type QueryAtom"); } } }
/** * Returns the geometric 2D center of the query bond. * * @return The geometric 2D center of the query bond */ @Override public Point2d get2DCenter() { double xOfCenter = 0; double yOfCenter = 0; for (IAtom atom : atoms) { xOfCenter += atom.getPoint2d().x; yOfCenter += atom.getPoint2d().y; } return new Point2d(xOfCenter / ((double) getAtomCount()), yOfCenter / ((double) getAtomCount())); }
@Test public void singleOrDoubleBond() throws Exception { String input = " 1 3 5 0 0 0 0"; IBond bond = reader.readBondFast(input, builder, atoms, new int[atoms.length], 1); assertThat(bond.getStereo(), is(IBond.Stereo.NONE)); assertFalse(bond.getFlag(CDKConstants.ISAROMATIC)); assertFalse(bond.getFlag(CDKConstants.SINGLE_OR_DOUBLE)); assertThat(bond, is(instanceOf(QueryBond.class))); assertThat(((QueryBond) bond).getExpression().type(), is(Expr.Type.SINGLE_OR_DOUBLE)); }