/** * {@inheritDoc} */ @Override public Iterable<IAtom> atoms() { return bond.atoms(); }
/** * {@inheritDoc} */ @Override public Iterable<IAtom> atoms() { return bond.atoms(); }
/** * Look if any atoms in <code>bond1</code> also are in <code>bond2</code> * and if so it conceder the bonds connected. * @param bond1 The first bond * @param bond2 The other bond * @return True if any of the atoms in <code>bond1</code> also are in * <code>bond2</code> */ private boolean isConnected(IBond bond1, IBond bond2) { for (IAtom atom : bond1.atoms()) if (bond2.contains(atom)) return true; return false; }
/** * Look if any atoms in <code>bond1</code> also are in <code>bond2</code> * and if so it conceder the bonds connected. * @param bond1 The first bond * @param bond2 The other bond * @return True if any of the atoms in <code>bond1</code> also are in * <code>bond2</code> */ private boolean isConnected(IBond bond1, IBond bond2) { for (IAtom atom : bond1.atoms()) if (bond2.contains(atom)) return true; return false; }
/** * Returns a set with the common vertices of edge E1 and E2 in Graph g The * result will be a Set of size 0, 1 or 2 * * @param ac * @param e1 * @param e2 * @return */ public static Set<Integer> commonVertices(IAtomContainer ac, IBond e1, IBond e2) { Set<Integer> commonVertices = new LinkedHashSet<>(); for (IAtom a : e1.atoms()) { for (IAtom b : e2.atoms()) { if (a == b) { commonVertices.add(ac.indexOf(a)); } } } return commonVertices; }
/** * Determines if this Bond contains 2D coordinates. * See comment for center(IAtomContainer atomCon, Dimension areaDim, HashMap renderingCoordinates) for details on coordinate sets * *@param bond Description of the Parameter *@return boolean indication that 2D coordinates are available */ public static boolean has2DCoordinates(IBond bond) { for (IAtom iAtom : bond.atoms()) { if (iAtom.getPoint2d() == null) { return false; } } return true; }
/** * Determines if this Bond contains 2D coordinates. See comment for center(IAtomContainer * atomCon, Dimension areaDim, HashMap renderingCoordinates) for details on coordinate sets * * @param bond Description of the Parameter * @return boolean indication that 2D coordinates are available */ public static boolean has2DCoordinates(IBond bond) { for (IAtom iAtom : bond.atoms()) { if (iAtom.getPoint2d() == null) { return false; } } return true; }
private IAtom[] getAtoms(IBond bond) { ArrayList<IAtom> alist = new ArrayList<IAtom>(); for (IAtom iAtom : bond.atoms()) { alist.add(iAtom); } return alist.toArray(new IAtom[]{}); } }
private IAtomType[] findMatchingAtomTypes(IAtomContainer atomContainer, RingSearch searcher) throws CDKException { // cache the ring information if (searcher == null) searcher = new RingSearch(atomContainer); // cache atom bonds Map<IAtom, List<IBond>> connectedBonds = new HashMap<IAtom,List<IBond>>(atomContainer.getAtomCount()); for (IBond bond : atomContainer.bonds()) { for (IAtom atom : bond.atoms()) { List<IBond> atomBonds = connectedBonds.get(atom); if (atomBonds == null) { atomBonds = new ArrayList<>(4); connectedBonds.put(atom, atomBonds); } atomBonds.add(bond); } } IAtomType[] types = new IAtomType[atomContainer.getAtomCount()]; int typeCounter = 0; for (IAtom atom : atomContainer.atoms()) { types[typeCounter] = findMatchingAtomType(atomContainer, atom, searcher, connectedBonds.get(atom)); typeCounter++; } return types; }
private IAtomType[] findMatchingAtomTypes(IAtomContainer atomContainer, RingSearch searcher) throws CDKException { // cache the ring information if (searcher == null) searcher = new RingSearch(atomContainer); // cache atom bonds Map<IAtom, List<IBond>> connectedBonds = new HashMap<IAtom,List<IBond>>(atomContainer.getAtomCount()); for (IBond bond : atomContainer.bonds()) { for (IAtom atom : bond.atoms()) { List<IBond> atomBonds = connectedBonds.get(atom); if (atomBonds == null) { atomBonds = new ArrayList<>(4); connectedBonds.put(atom, atomBonds); } atomBonds.add(bond); } } IAtomType[] types = new IAtomType[atomContainer.getAtomCount()]; int typeCounter = 0; for (IAtom atom : atomContainer.atoms()) { types[typeCounter] = findMatchingAtomType(atomContainer, atom, searcher, connectedBonds.get(atom)); typeCounter++; } return types; }
@Override public ValidationReport validateBond(IBond subject) { logger.info("Validating org.openscience.cdk.Bond"); ValidationReport report = new ValidationReport(); // apply validators for (IValidator test : validators.values()) { report.addReport(test.validateBond(subject)); } // traverse into super class report.addReport(validateElectronContainer(subject)); // traverse into hierarchy Iterator<IAtom> atoms = subject.atoms().iterator(); while (atoms.hasNext()) { report.addReport(validateAtom((IAtom) atoms.next())); } return report; }
private List<IBond> getSplitableBonds(IAtomContainer atomContainer) throws CDKException { // do ring detection SpanningTree spanningTree = new SpanningTree(atomContainer); IRingSet allRings = spanningTree.getAllRings(); // find the splitable bonds ArrayList<IBond> splitableBonds = new ArrayList<IBond>(); for (IBond bond : atomContainer.bonds()) { boolean isInRing = false; boolean isTerminal = false; // lets see if it's in a ring IRingSet rings = allRings.getRings(bond); if (rings.getAtomContainerCount() != 0) isInRing = true; // lets see if it is a terminal bond for (IAtom atom : bond.atoms()) { if (atomContainer.getConnectedBondsCount(atom) == 1) { isTerminal = true; break; } } if (!(isInRing || isTerminal)) splitableBonds.add(bond); } return splitableBonds; }
protected static IAtomContainer makeAtomContainer(IAtom atom, List<IBond> parts, IAtom excludedAtom) { IAtomContainer partContainer = atom.getBuilder().newInstance(IAtomContainer.class); partContainer.addAtom(atom); for (IBond aBond : parts) { for (IAtom bondedAtom : aBond.atoms()) { if (!bondedAtom.equals(excludedAtom) && !partContainer.contains(bondedAtom)) partContainer.addAtom(bondedAtom); } if (!aBond.contains(excludedAtom)) partContainer.addBond(aBond); } return partContainer; }
protected static IAtomContainer makeAtomContainer(IAtom atom, List<IBond> parts, IAtom excludedAtom) { IAtomContainer partContainer = atom.getBuilder().newInstance(IAtomContainer.class); partContainer.addAtom(atom); for (IBond aBond : parts) { for (IAtom bondedAtom : aBond.atoms()) { if (!bondedAtom.equals(excludedAtom) && !partContainer.contains(bondedAtom)) partContainer.addAtom(bondedAtom); } if (!aBond.contains(excludedAtom)) partContainer.addBond(aBond); } return partContainer; }
/** * Method to check whether a given bond exists in the root and is attached * to an R-Group. * @param bond */ public boolean isRGroupRootBond(IBond bond) { if (rGroupQuery!=null && rGroupQuery.getRootStructure()!=null && rGroupQuery.getRootStructure().contains(bond)) { for(IAtom atom : bond.atoms()) { if (atom instanceof IPseudoAtom && RGroupQuery.isValidRgroupQueryLabel(((IPseudoAtom)atom).getLabel())) { return true; } } } return false; }
public IBond getClosestBond(Point2d worldCoord) { IBond closestBond = null; double closestDistanceSQ = Double.MAX_VALUE; for (IAtomContainer atomContainer : ChemModelManipulator .getAllAtomContainers(chemModel)) { for (IBond bond : atomContainer.bonds()) { boolean hasCenter = true; for (IAtom atom : bond.atoms()) hasCenter = hasCenter && (atom.getPoint2d() != null); if (hasCenter) { double distanceSQ = bond.get2DCenter().distanceSquared( worldCoord); if (distanceSQ < closestDistanceSQ) { closestBond = bond; closestDistanceSQ = distanceSQ; } } } } return closestBond; }
public void moveToWithoutUndo(IBond bond, Point2d point) { if (bond != null) { Point2d center = bond.get2DCenter(); for (IAtom atom : bond.atoms()) { Vector2d offset = new Vector2d(); offset.sub(atom.getPoint2d(), center); Point2d result = new Point2d(); result.add(point, offset); atom.setPoint2d(result); } } coordinatesChanged(); }
@Test public void pseudoAtomReplacement() throws Exception { try (MDLV3000Reader reader = new MDLV3000Reader(getClass().getResourceAsStream("pseudoAtomReplacement.mol"))) { IAtomContainer container = reader.read(new org.openscience.cdk.AtomContainer(0, 0, 0, 0)); for (IAtom atom : container.getBond(9).atoms()) { Assert.assertTrue(container.contains(atom)); } } }
@Test public void testAtoms() { IBond b = (IBond) newChemObject(); IAtom c = b.getBuilder().newInstance(IAtom.class, "C"); IAtom o = b.getBuilder().newInstance(IAtom.class, "O"); b.setAtom(c, 0); b.setAtom(o, 1); b.setOrder(Order.SINGLE); Iterator<IAtom> atoms = b.atoms().iterator(); Assert.assertEquals(2, b.getAtomCount()); Assert.assertTrue(atoms.hasNext()); Assert.assertEquals(c, atoms.next()); Assert.assertTrue(atoms.hasNext()); Assert.assertEquals(o, atoms.next()); Assert.assertFalse(atoms.hasNext()); }
@Test public void testMultiCenterIterator() { IChemObject object = newChemObject(); IAtom atom1 = object.getBuilder().newInstance(IAtom.class, "C"); IAtom atom2 = object.getBuilder().newInstance(IAtom.class, "O"); IAtom atom3 = object.getBuilder().newInstance(IAtom.class, "C"); IAtom atom4 = object.getBuilder().newInstance(IAtom.class, "C"); IBond bond1 = object.getBuilder().newInstance(IBond.class, new IAtom[]{atom1, atom2, atom3, atom4}); Iterator<IAtom> atoms = bond1.atoms().iterator(); int natom = 0; while (atoms.hasNext()) { IAtom atom = atoms.next(); Assert.assertNotNull(atom); natom++; } Assert.assertEquals(4, natom); }