/** * Perform a walk in the given RingSet, starting at a given Ring and * recursively searching for other Rings connected to this ring. By doing * this it finds all rings in the RingSet connected to the start ring, * putting them in newRs, and removing them from rs. * *@param rs The RingSet to be searched *@param ring The ring to start with *@param newRs The RingSet containing all Rings connected to ring *@return newRs The RingSet containing all Rings connected to ring */ private static IRingSet walkRingSystem(IRingSet rs, IRing ring, IRingSet newRs) { IRing tempRing; IRingSet tempRings = rs.getConnectedRings(ring); // logger.debug("walkRingSystem -> tempRings.size(): " + tempRings.size()); rs.removeAtomContainer(ring); for (IAtomContainer container : tempRings.atomContainers()) { tempRing = (IRing) container; if (!newRs.contains(tempRing)) { newRs.addAtomContainer(tempRing); newRs.add(walkRingSystem(rs, tempRing, newRs)); } } return newRs; }
/** * Determine the ring set for this atom container. * * @param atomContainer the atom container to find rings in. * @return the rings of the molecule */ protected IRingSet getRingSet(IAtomContainer atomContainer) { IRingSet ringSet = atomContainer.getBuilder().newInstance(IRingSet.class); try { IAtomContainerSet molecules = ConnectivityChecker.partitionIntoMolecules(atomContainer); for (IAtomContainer mol : molecules.atomContainers()) { ringSet.add(Cycles.sssr(mol).toRingSet()); } return ringSet; } catch (Exception exception) { logger.warn("Could not partition molecule: " + exception.getMessage()); logger.debug(exception); return ringSet; } }
@Test public void testAdd_IRingSet() { IRingSet rs = (IRingSet) newChemObject(); IRing r1 = rs.getBuilder().newInstance(IRing.class, 5, "C"); IRing r2 = rs.getBuilder().newInstance(IRing.class, 3, "C"); rs.addAtomContainer(r1); IRingSet rs2 = (IRingSet) newChemObject(); rs2.addAtomContainer(r2); rs2.add(rs); Assert.assertEquals(1, rs.getAtomContainerCount()); Assert.assertEquals(2, rs2.getAtomContainerCount()); }
atomRingSet.add(Cycles.essential(containers.next()).toRingSet());
atomRingSet.add(Cycles.essential(containers.next()).toRingSet());
mol.addAtom(atom); IRingSet ringset = new RingSet(); ringset.add(mset); model2.setRingSet(ringset); Assert.assertFalse(model2.isEmpty());