/** * Returns all the AtomContainer's of a ChemSequence. */ public static List<IAtomContainer> getAllAtomContainers(IChemSequence sequence) { List<IAtomContainer> acList = new ArrayList<IAtomContainer>(); for (IChemModel model : sequence.chemModels()) { acList.addAll(ChemModelManipulator.getAllAtomContainers(model)); } return acList; }
/** * Calculates average bond length. Returns a default value when nothing has * been drawn yet. * * @param moleculeSet * @return */ public double calculateAverageBondLength(IAtomContainerSet moleculeSet) { Double averageBondModelLength = 0.0; for (IAtomContainer atomContainer : ChemModelManipulator .getAllAtomContainers(chemModel)) { averageBondModelLength += GeometryTools .getBondLengthAverage(atomContainer); } if (!averageBondModelLength.isNaN() && averageBondModelLength != 0) { return averageBondModelLength / ChemModelManipulator.getAllAtomContainers(chemModel) .size(); } else { return 1.5; // some default value for an empty canvas } }
/** * Determines if this model contains 3D coordinates for all atoms. * * @param chemModel the ChemModel to consider * @return Boolean indication that 3D coordinates are available for all atoms. */ public static boolean has3DCoordinates(IChemModel chemModel) { List<IAtomContainer> acs = ChemModelManipulator.getAllAtomContainers(chemModel); for (IAtomContainer ac : acs) { if (!has3DCoordinates(ac)) { return false; } } return true; }
/** * Determines if this model contains 3D coordinates for all atoms. * * @param chemModel the ChemModel to consider * @return Boolean indication that 3D coordinates are available for all atoms. */ public static boolean has3DCoordinates(IChemModel chemModel) { List<IAtomContainer> acs = ChemModelManipulator.getAllAtomContainers(chemModel); Iterator<IAtomContainer> it = acs.iterator(); while (it.hasNext()) { if (!has3DCoordinates(it.next())) { return false; } } return true; }
public void clearValidation() { Iterator<IAtomContainer> containers = ChemModelManipulator .getAllAtomContainers(chemModel).iterator(); while (containers.hasNext()) { IAtomContainer atoms = containers.next(); for (int i = 0; i < atoms.getAtomCount(); i++) { ProblemMarker.unmark(atoms.getAtom(i)); } } }
public RemoveAtomsAndBondsEdit(IChemModel chemModel, IAtomContainer undoRedoContainer, String type, IChemModelRelay chemModelRelay) { this.chemModel = chemModel; this.undoRedoContainer = undoRedoContainer; this.container = chemModel.getBuilder().newInstance(IAtomContainer.class); Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator(); while (containers.hasNext()) { container.add((IAtomContainer)containers.next()); } this.type = type; this.chemModelRelay=chemModelRelay; }
public boolean contains( IChemObject obj ) { if(type == Type.NONE) return false; for(IAtomContainer other: ChemModelManipulator.getAllAtomContainers( chemModel )) { if(other == obj) return true; if(obj instanceof IBond) if( other.contains( (IBond) obj)) return true; if(obj instanceof IAtom) if( other.contains( (IAtom) obj)) return true; } return false; }
public void select(IChemModel chemModel) { clear(); for (IAtomContainer atomContainer : ChemModelManipulator.getAllAtomContainers(chemModel)) { select(atomContainer); } }
/** * Gets all atomcontainers of a chemodel in one AtomContainer. * * @param chemModel The chemodel * @return The result. */ public static IAtomContainer getAllAtomContainersInOne(IChemModel chemModel){ List<IAtomContainer> acs=ChemModelManipulator.getAllAtomContainers(chemModel); IAtomContainer allinone=chemModel.getBuilder().newInstance(IAtomContainer.class); for(int i=0;i<acs.size();i++){ allinone.add(acs.get(i)); } return allinone; }
/** * @deprecated no such thing as chiral SMILES use {@link #getSmiles} for 'a' SMILES. */ @Deprecated public static String getChiralSmiles(IChemModel model) throws CDKException, ClassNotFoundException, IOException, CloneNotSupportedException { SmilesGenerator smigen = SmilesGenerator.isomeric(); StringBuilder sb = new StringBuilder(); for(IAtomContainer container : ChemModelManipulator.getAllAtomContainers(model)) { container.setStereoElements(StereoElementFactory.using2DCoordinates(container) .interpretProjections(Projection.Haworth, Projection.Chair) .createAll()); if (sb.length() > 0) sb.append('.'); sb.append(smigen.create(container)); } return sb.toString(); }
public IAtomContainer getConnectedAtomContainer() { if (this.chemModel != null) { IAtomContainer ac = this.chemModel.getBuilder().newInstance(IAtomContainer.class); for (IAtomContainer other : ChemModelManipulator.getAllAtomContainers(chemModel)) { ac.add(other); } return ac; } return null; }
private Map<IAtom, IAtom> calculateMerge( Set<IAtom> mergeAtoms ) { JChemPaintRendererModel rModel = chemModelRelay.getRenderer().getRenderer2DModel(); double maxDistance = rModel.getHighlightDistance()/ rModel.getScale(); maxDistance *= maxDistance; // maxDistance squared Map<IAtom,IAtom> mergers = new HashMap<IAtom, IAtom>(); Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(chemModelRelay.getIChemModel()).iterator(); while (containers.hasNext()) { IAtomContainer ac = (IAtomContainer)containers.next(); for(IAtom atom:mergeAtoms) { List<DistAtom> candidates = findMergeCandidates(ac,atom); Collections.sort( candidates); for(DistAtom candidate:candidates) { if(candidate.distSquared>maxDistance) break; if(mergeAtoms.contains( candidate.atom )) continue; mergers.put( atom, candidate.atom ); } } } return mergers; }
public void resetBondOrders() { List<IAtomContainer> containersList = ChemModelManipulator .getAllAtomContainers(chemModel); Iterator<IAtomContainer> iterator = containersList.iterator(); Map<IBond, IBond.Order[]> changedBonds = new HashMap<IBond, IBond.Order[]>(); while (iterator.hasNext()) { IAtomContainer ac = iterator.next(); for (IBond bond : ac.bonds()) { IBond.Order[] orders = new IBond.Order[2]; orders[1] = bond.getOrder(); orders[0] = Order.SINGLE; changedBonds.put(bond, orders); bond.setOrder(Order.SINGLE); } } if (this.getController2DModel().getAutoUpdateImplicitHydrogens()) updateImplicitHydrogenCounts(); if (undoredofactory != null && undoredohandler != null) { IUndoRedoable undoredo = undoredofactory.getAdjustBondOrdersEdit( changedBonds, new HashMap<IBond, IBond.Stereo[]>(), "Reset Bond Order of Molecules", this); undoredohandler.postEdit(undoredo); } }
public static void removeEmptyContainers(IChemModel chemModel) { Iterator<IAtomContainer> it = ChemModelManipulator .getAllAtomContainers(chemModel).iterator(); while (it.hasNext()) { IAtomContainer ac = it.next(); if (ac.getAtomCount() == 0) { chemModel.getMoleculeSet().removeAtomContainer(ac); } } if (chemModel.getMoleculeSet().getAtomContainerCount() == 0) chemModel.getMoleculeSet().addAtomContainer( chemModel.getBuilder().newInstance(IAtomContainer.class)); }
public IAtom getClosestAtom(Point2d worldCoord) { IAtom closestAtom = null; double closestDistanceSQ = Double.MAX_VALUE; for (IAtomContainer atomContainer : ChemModelManipulator .getAllAtomContainers(chemModel)) { for (IAtom atom : atomContainer.atoms()) { if (atom.getPoint2d() != null) { double distanceSQ = atom.getPoint2d().distanceSquared( worldCoord); if (distanceSQ < closestDistanceSQ) { closestAtom = atom; closestDistanceSQ = distanceSQ; } } } } return closestAtom; }
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; }
@Test public void testGetAllAtomContainers_IChemModel() throws Exception { String filename = "data/mdl/a-pinene.mol"; logger.info("Testing: " + filename); InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); MDLV2000Reader reader = new MDLV2000Reader(ins); ChemModel chemFile = (ChemModel) reader.read((ChemObject) new ChemModel()); Assert.assertNotNull(chemFile); List<IAtomContainer> containersList = ChemModelManipulator.getAllAtomContainers(chemFile); Assert.assertEquals(1, containersList.size()); }
@Test public void testGetAllAtomContainers_IChemModel_WithReactions() throws Exception { String filename = "data/mdl/0024.stg02.rxn"; logger.info("Testing: " + filename); InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename); MDLRXNV2000Reader reader = new MDLRXNV2000Reader(ins, Mode.STRICT); ChemModel chemFile = (ChemModel) reader.read((ChemObject) new ChemModel()); Assert.assertNotNull(chemFile); List<IAtomContainer> containersList = ChemModelManipulator.getAllAtomContainers(chemFile); Assert.assertEquals(2, containersList.size()); }
public IAtom getAtomInRange(Collection<IAtom> toIgnore, IAtom atom) { Point2d atomPosition = atom.getPoint2d(); JChemPaintRendererModel rModel = this.getRenderer().getRenderer2DModel(); double highlight = rModel.getHighlightDistance() / rModel.getScale(); IAtom bestClosestAtom = null; double bestDistance = -1; for (IAtomContainer atomContainer : ChemModelManipulator .getAllAtomContainers(getIChemModel())) { IAtom closestAtom = GeometryTools.getClosestAtom(atomContainer, atom); if (closestAtom != null) { double distance = closestAtom.getPoint2d().distance( atomPosition); if ((distance > highlight) || (toIgnore != null && toIgnore.contains(closestAtom))) { continue; } else { if (bestClosestAtom == null || distance < bestDistance) { bestClosestAtom = closestAtom; bestDistance = distance; } } } } return bestClosestAtom; }
public void makeAllImplicitExplicit() { IAtomContainer undoRedoContainer = chemModel.getBuilder() .newInstance(IAtomContainer.class); List<IAtomContainer> containers = ChemModelManipulator .getAllAtomContainers(chemModel); for (int i = 0; i < containers.size(); i++) { for (IAtom atom : containers.get(i).atoms()) { int hcount = atom.getImplicitHydrogenCount(); for (int k = 0; k < hcount; k++) { IAtom newAtom = this.addAtomWithoutUndo("H", atom, false); IAtomContainer atomContainer = ChemModelManipulator .getRelevantAtomContainer(getIChemModel(), newAtom); IBond newBond = atomContainer.getBond(atom, newAtom); undoRedoContainer.addAtom(newAtom); undoRedoContainer.addBond(newBond); } } } if (getUndoRedoFactory() != null && getUndoRedoHandler() != null) { IUndoRedoable undoredo = getUndoRedoFactory() .getAddAtomsAndBondsEdit(chemModel, undoRedoContainer, null, "Make implicit Hs explicit", this); getUndoRedoHandler().postEdit(undoredo); } structureChanged(); }