/* * Copyright (C) 2010 Mark Rijnbeek <mark_rynbeek@users.sf.net> * * Contact: cdk-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may * distribute with programs based on this work. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * */ package org.openscience.cdk.isomorphism.matchers; import java.util.List; import java.util.Map; import org.openscience.cdk.PseudoAtom; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.interfaces.IChemObject; /** * Interface definition for Rgroup query classes. These must provide a root * structure, root attachment points and Rgroup definitions. * * @cdk.module isomorphism * @cdk.githash * @cdk.keyword Rgroup * @cdk.keyword R group * @cdk.keyword R-group * @author Mark Rijnbeek */ public interface IRGroupQuery extends IChemObject { /** * Setter for the root structure of this R-Group. * @see #getRootStructure * @param rootStructure the root structure (or scaffold) container * */ public void setRootStructure(IAtomContainer rootStructure); /** * Getter for the root structure of this R-Group. * @see #setRootStructure * @return the root structure (or scaffold) container */ public IAtomContainer getRootStructure(); /** * Setter for root attachment points = bonds that connect R pseudo-atoms to the scaffold. * @see #getRootAttachmentPoints() * @param rootAttachmentPoints Map with per R-group pseudo atom another map with an Integer and an IBond, the integer indicating 1st or 2nd attachment. */ public void setRootAttachmentPoints(Map<IAtom, Map<Integer, IBond>> rootAttachmentPoints); /** * Getter for root attachment points = bonds that connect R pseudo-atoms to the scaffold. * @see #setRootAttachmentPoints(Map) * @return Map with per R-group pseudo atom another map with an Integer and an IBond, the integer indicating 1st or 2nd attachment. */ public Map<IAtom, Map<Integer, IBond>> getRootAttachmentPoints(); /** * Setter for the R-group definitions (substituents). * @see #getRGroupDefinitions * @param rGroupDefinitions map with an Integer and an RGroupList (substituent list), the Integer being the R-Group number (1..32). */ public void setRGroupDefinitions(Map<Integer, RGroupList> rGroupDefinitions); /** * Getter for the R-group definitions (substituents). * @see #setRGroupDefinitions * @return rGroupDefinitions Map with an Integer and an RGroupList (substituent list), the Integer being the R-Group number (1..32). */ public Map<Integer, RGroupList> getRGroupDefinitions(); /** * Return the total number of atom containers (count the root plus all substituents). * @return count. */ public int getAtomContainerCount(); /** * Return all the substituent atom containers, in other words the atom containers * defined in this RGroupQuery except for the root structure. * @return list with all substituents */ public List<IAtomContainer> getSubstituents(); /** * Checks validity of the RGroupQuery. * Each distinct R# in the root must have a * a corresponding {@link RGroupList} definition.<br> * In file terms: $RGP blocks must be defined for each R-group number. * @return true when valid */ public boolean areSubstituentsDefined(); /** * Checks validity of RGroupQuery. * Each {@link RGroupList} definition must have one or more corresponding * R# atoms in the root block. * @return true when valid */ public boolean areRootAtomsDefined(); /** * Produces all combinations of the root structure (scaffold) with the R-groups * substituted in valid ways, using each R-group's definitions and conditions. * @return all valid combinations of the root structure (scaffold) with the * R-groups substituted. * @throws Exception */ public List<IAtomContainer> getAllConfigurations() throws Exception; }