chemaxon.marvin.calculations
Class MarkushEnumerationPlugin

java.lang.Object
  extended by chemaxon.marvin.plugin.CalculatorPlugin
      extended by chemaxon.marvin.calculations.MarkushEnumerationPlugin
All Implemented Interfaces:
chemaxon.license.Licensable
Direct Known Subclasses:
EnumerationPlugin

public class MarkushEnumerationPlugin
extends CalculatorPlugin

Plugin class for enumerating Markush molecules.
Input: a Markush structure.
Output: the number of possible enumerations; the enumerated molecules.

API usage examples:

For concurrent plugin example applications using ChemAxon's concurrent framework, refer to the Concurrent plugin examples.

Since:
Marvin 5.0.3
Version:
Marvin 5.0.3, 03/18/2008
Author:
Nora Mate

Nested Class Summary
 
Nested classes/interfaces inherited from class chemaxon.marvin.plugin.CalculatorPlugin
CalculatorPlugin.HydrogenData
 
Field Summary
static int COLORING_ALL
          Constant for setting all coloring options, currently scaffold and R-groups.
static int COLORING_NONE
          Constant for no hit coloring.
static int COLORING_RGROUPS
          Constant for R-group coloring.
static int COLORING_SCAFFOLD
          Constant for scaffold coloring.
static MolFilter FILTER_VALENCE
          Filter constant: valence filter.
 
Fields inherited from class chemaxon.marvin.plugin.CalculatorPlugin
ATOM, BLUE, CALCRGB_OFF, COVALENT_HYDRATION_ERROR_REMARK, CRITICAL_ERROR_MSG, EPSILON, explicitHydrogens, INCORRECT_AROMATIC_NITROGEN_REMARK, INSTABLE_TAUTOMERIC_FORM_REMARK, KEEP_HYDROGENS, keepHydrogens, licenseEnvironment, MOLECULE, MOLECULES, NAN, PLUGIN_CLASS_KEY, PLUGIN_DIR, RED, TRUE
 
Constructor Summary
MarkushEnumerationPlugin()
          Constructor.
 
Method Summary
 void checkMolecule(Molecule mol)
          Checks the input molecule.
 java.math.BigInteger countEnumerations()
          Returns the number of all enumerated structures, no arithmetic overflow because counts in BigInteger.
 int countEnumerationsMagnitude()
          Returns the magnitude (the number of decimal "digits") of the number of all enumerated structures.
 boolean getAlignScaffold()
          Gets the scaffold aligning mode
 Molecule[] getAromatizedStructures()
          Returns the enumerated structures in aromatized form.
 int getColoring()
          Returns the hit coloring options.
 boolean getEnumCodeNeeded()
          Tests whether unique Markush enumeration code should be generated
 java.lang.String getLibrarySizeString()
          Returns the string representation of the Markush library size.
 int getLimitedStructureCount()
          Returns the number of structures to be generated.
 Molecule getNextAromatizedStructure()
          Returns the next enumerated structure.
 Molecule getNextStructure()
          Returns the next enumerated structure, or null if no more structures.
 java.lang.String getProductName()
          Returns the product identifier of the plugin as given by LicenseManager.
 java.lang.String getRemark()
          Returns a warning message in case of arithmetical overflow (the number of enumerated structures exceeds Long.MAX_VALUE), null otherwise.
 java.lang.Object getResult(java.lang.Object type, int index)
          Returns the result item for the specified key and index.
 java.lang.Object getResult(java.lang.Object type, java.lang.String arg)
          Returns the enumerated structures.
 java.lang.String getResultAsString(java.lang.Object type, int index, java.lang.Object result)
          Returns the specified result in String format.
 int getResultCount(java.lang.Object type)
          Returns the number of result items for the given result key.
 int getResultDomain(java.lang.Object type)
          Returns the calculation domain.
 Molecule getResultMolecule()
          Returns the result molecule for display.
 chemaxon.marvin.plugin.PluginMDocSource getResultSource()
          Returns the result as a document source object.
 java.lang.Object[] getResultTypes()
          Returns the result types.
 long getStructureCount()
          Returns the number of all enumerated structures, -1 in case of arithmetical overflow (if the number would exceed Long.MAX_VALUE).
 java.lang.String getStructureID()
          Returns the structure ID used in Markush code (enumeration ID) generation.
 Molecule[] getStructures()
          Returns the enumerated structures.
 java.lang.String getTypeString(java.lang.Object type)
          Returns a string representation of the given type.
 boolean handlesMultiFragmentMolecules()
          Returns true if the plugin handles multifragment molecules, false otherwise.
 boolean hasMoreStructures()
          Returns true if there are more structures.
 boolean isApproximateCount()
          Returns true if count is approximate due to multiple position bonds with multicenters of variable size, false otherwise.
protected  boolean isCleanNeeded()
          Returns true if clean is needed for GUI display.
protected  boolean isFiltered()
          Return true if molecule filter is set.
 boolean isHomologyEnumerated()
          Indicates if homology groups are enumerated or not.
 boolean isLicensed()
          Returns true if the plugin is licensed.
 boolean isRandomEnumeration()
          Returns true if random enumeration is requested.
 boolean run()
          Creates enumerated structures.
 void setAlignScaffold(boolean value)
          Sets the scaffold aligning mode.
 void setColoring(int coloring)
          Sets hit coloring options.
 void setEnumCodeNeeded(boolean value)
          Indicates whether unique Markush enumeration code should be generated.
 void setEnumerateHomology(boolean enumerate)
          Sets if homology groups should be enumerated or not.
 void setFilter(MolFilter filter)
          Sets the molecule filter.
protected  void setInputMolecule(Molecule mol)
          Sets the input molecule.
 void setLicenseEnvironment(java.lang.String env)
          Sets license environment to be stored.
 void setMaxStructureCount(long max)
          Sets the maximum number of structures to be generated.
 void setParameters(java.util.Properties params)
          Sets the input parameters for the plugin.
 void setRandomEnumeration()
          Sets random enumeration.
 void setStructureID(java.lang.String id)
          Sets structure ID to be used in Markush code generation.
 void standardize(Molecule mol)
          Prevents default standardization: does nothing.
 
Methods inherited from class chemaxon.marvin.plugin.CalculatorPlugin
arrangeHydrogenIncerments, canRepeat, checkLicense, checkType, containsCoordinateBond, containsMulticenterSgroup, containsPseudoAtom, containsSRUSgroup, create, createModifiedInputMolecule, createStandardizedMolecule, createStandardizedMolecule, dehydrogenize, format, format, format, format, getAtomCount, getAtomIndex, getCalcMolecule, getDisplayMolecule, getDocument, getDoublePrecision, getErrorMessage, getExplicitHydrogenData, getInputMolDim, getMainMolecule, getpH, getPluginResource, getQueryMoleculeErrorMessage, getResult, getResult, getResultAsRGB, getResultAsRGB, getResultAsString, getResultCount, getResultDomain, getResultMessage, getResultMolecules, getResultsAsRGB, getResultsAsRGB, getResultsAsString, getResultsAsString, getWarningMessage, isInputMoleculeAromatized, isMsCalc, isMultiThreadedRunEnabled, isNegligibleResult, isOK, isRgrouped, loadClass, readAttribute, removeWhitespace, restoreExplicitHydrogens, setDoublePrecision, setDoublePrecision, setDoublePrecision, setKeepHydrogens, setMolecule, setMolecule, setMolecule, setMolecule, setProgressMonitor, standardizeIonicGroups, standardizeNeutralGroups
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FILTER_VALENCE

public static final MolFilter FILTER_VALENCE
Filter constant: valence filter. Set this filter in setFilter(chemaxon.util.MolFilter) in order to reject molecules with valence errors.

Since:
Marvin 5.1
See Also:
setFilter(chemaxon.util.MolFilter)

COLORING_NONE

public static final int COLORING_NONE
Constant for no hit coloring.

Since:
Marvin 5.1
See Also:
Constant Field Values

COLORING_SCAFFOLD

public static final int COLORING_SCAFFOLD
Constant for scaffold coloring.

Since:
Marvin 5.1
See Also:
Constant Field Values

COLORING_RGROUPS

public static final int COLORING_RGROUPS
Constant for R-group coloring.

Since:
Marvin 5.1
See Also:
Constant Field Values

COLORING_ALL

public static final int COLORING_ALL
Constant for setting all coloring options, currently scaffold and R-groups.

Since:
Marvin 5.1
See Also:
Constant Field Values
Constructor Detail

MarkushEnumerationPlugin

public MarkushEnumerationPlugin()
Constructor.

Method Detail

isLicensed

public boolean isLicensed()
Description copied from class: CalculatorPlugin
Returns true if the plugin is licensed. The license checking is based on the product name, returned by CalculatorPlugin.getProductName().

Specified by:
isLicensed in interface chemaxon.license.Licensable
Overrides:
isLicensed in class CalculatorPlugin
Returns:
true if the plugin is licensed

setLicenseEnvironment

public void setLicenseEnvironment(java.lang.String env)
Description copied from class: CalculatorPlugin
Sets license environment to be stored.

Specified by:
setLicenseEnvironment in interface chemaxon.license.Licensable
Overrides:
setLicenseEnvironment in class CalculatorPlugin
Parameters:
env - environment String to be stored and passed to the LicenseHandler in the isLicensed method

getProductName

public java.lang.String getProductName()
Returns the product identifier of the plugin as given by LicenseManager.

Specified by:
getProductName in class CalculatorPlugin
Returns:
The identifier LicenseManager.MARKUSH_ENUM_PLUGIN

handlesMultiFragmentMolecules

public boolean handlesMultiFragmentMolecules()
Returns true if the plugin handles multifragment molecules, false otherwise. In the latter case the plugin takes the fragment with more atoms if a multifragment molecule is given as input. Returns true if parameter "single" is set to "false", false otherwise (default: false).

Overrides:
handlesMultiFragmentMolecules in class CalculatorPlugin
Returns:
true if the plugin handles multifragment molecules, false otherwise

setParameters

public void setParameters(java.util.Properties params)
                   throws PluginException
Sets the input parameters for the plugin. Enumeration parameters and value ranges:

Overrides:
setParameters in class CalculatorPlugin
Parameters:
params - is the parameter table
Throws:
PluginException - on error

setRandomEnumeration

public void setRandomEnumeration()
Sets random enumeration. Must be called before setting the molecule in CalculatorPlugin.setMolecule(chemaxon.struc.Molecule). Set also the number of requested structures in setMaxStructureCount(long), otherwise only one randomly enumerated structure will be generated.

Since:
Marvin 5.1

isRandomEnumeration

public boolean isRandomEnumeration()
Returns true if random enumeration is requested.

Returns:
true if random enumeration is requested

setEnumerateHomology

public void setEnumerateHomology(boolean enumerate)
Sets if homology groups should be enumerated or not. Must be called before setting the molecule.

Since:
Marvin 5.2

isHomologyEnumerated

public boolean isHomologyEnumerated()
Indicates if homology groups are enumerated or not.

Since:
Marvin 5.2

setEnumCodeNeeded

public void setEnumCodeNeeded(boolean value)
Indicates whether unique Markush enumeration code should be generated. Must be called before setting the molecule.

Parameters:
value - true, if code generation is needed
Since:
Marvin 5.1.2

getEnumCodeNeeded

public boolean getEnumCodeNeeded()
Tests whether unique Markush enumeration code should be generated

Returns:
true, if code generation is needed
Since:
Marvin 5.1.2

setStructureID

public void setStructureID(java.lang.String id)
Sets structure ID to be used in Markush code generation. The name of the SDF / MRV tag storing the ID in the Markush structure or else the ID itself. Must be called before setting the molecule. Set null for no structure ID (default). Calling this method with non-null argument will automatically switch on Markush code generation.

Parameters:
id - the tag name or the ID
Since:
Marvin 5.1.3
See Also:
setEnumCodeNeeded(boolean)

getStructureID

public java.lang.String getStructureID()
Returns the structure ID used in Markush code (enumeration ID) generation.

Returns:
the structure ID storing tag name or the ID itself
Since:
Marvin 5.1.3
See Also:
setStructureID(java.lang.String)

setFilter

public void setFilter(MolFilter filter)
Sets the molecule filter. Must be called before setting the molecule. Default: null (get all enumerated structures).

Parameters:
filter - the molecule filter or null for no filtering
Since:
Marvin 5.0
See Also:
MolFilter, FILTER_VALENCE

isFiltered

protected boolean isFiltered()
Return true if molecule filter is set.

Returns:
true if molecule filter is set

isApproximateCount

public boolean isApproximateCount()
Returns true if count is approximate due to multiple position bonds with multicenters of variable size, false otherwise.

Returns:
true if count is approximate

setMaxStructureCount

public void setMaxStructureCount(long max)
Sets the maximum number of structures to be generated. Set -1 for unlimited. Default: unlimited for the sequential case, 1 for the random case. Must be called before setting the molecule in CalculatorPlugin.setMolecule(chemaxon.struc.Molecule).

Parameters:
max - is the maximum number of structures to be generated
See Also:
setRandomEnumeration()

setAlignScaffold

public void setAlignScaffold(boolean value)
Sets the scaffold aligning mode. Must be called before setting the molecule in CalculatorPlugin.setMolecule(chemaxon.struc.Molecule).

Parameters:
value - if true, tries to align scaffold in enumerated structures as it was in the original Markush structure
Since:
Marvin 5.1

getAlignScaffold

public boolean getAlignScaffold()
Gets the scaffold aligning mode

Returns:
true, if enumerated structures should be aligned to the scaffold
Since:
Marvin 5.1

setColoring

public void setColoring(int coloring)
Sets hit coloring options. Must be called before setting the molecule in CalculatorPlugin.setMolecule(chemaxon.struc.Molecule).

Parameters:
coloring - COLORING_SCAFFOLD, COLORING_RGROUPS, COLORING_NONE, or COLORING_ALL
Since:
Marvin 5.1

getColoring

public int getColoring()
Returns the hit coloring options.

Returns:
the hit coloring options
Since:
Marvin 5.1
See Also:
COLORING_NONE, COLORING_SCAFFOLD, COLORING_RGROUPS, COLORING_ALL

isCleanNeeded

protected boolean isCleanNeeded()
Returns true if clean is needed for GUI display.

Returns:
true if clean is needed for GUI display

checkMolecule

public void checkMolecule(Molecule mol)
                   throws PluginException
Checks the input molecule.

Overrides:
checkMolecule in class CalculatorPlugin
Parameters:
mol - is the input molecule
Throws:
PluginException - with error message for the user if the molecule is refused

setInputMolecule

protected void setInputMolecule(Molecule mol)
                         throws PluginException
Sets the input molecule.

Specified by:
setInputMolecule in class CalculatorPlugin
Parameters:
mol - is the input molecule
Throws:
PluginException - on error

run

public boolean run()
            throws PluginException
Creates enumerated structures.

Specified by:
run in class CalculatorPlugin
Returns:
true
Throws:
PluginException - on error
See Also:
CalculatorPlugin.getErrorMessage()

countEnumerations

public java.math.BigInteger countEnumerations()
                                       throws PluginException
Returns the number of all enumerated structures, no arithmetic overflow because counts in BigInteger. In case when the result does not exceed Long.MAX_VALUE, the number of enumerates is also returned by getStructureCount().

Returns:
the number of enumerated structures
Throws:
PluginException - on expansion error
See Also:
getLimitedStructureCount(), getStructureCount(), countEnumerationsMagnitude()

countEnumerationsMagnitude

public int countEnumerationsMagnitude()
                               throws PluginException
Returns the magnitude (the number of decimal "digits") of the number of all enumerated structures. No arithmetic overflow because counts in BigInteger.

Returns:
the magnitude of the number of enumerated structures
Throws:
PluginException - on expansion error
See Also:
getLimitedStructureCount(), getStructureCount(), countEnumerations()

getStructureCount

public long getStructureCount()
Returns the number of all enumerated structures, -1 in case of arithmetical overflow (if the number would exceed Long.MAX_VALUE). To handle the case of arithmetical overflow, call countEnumerations() or countEnumerationsMagnitude(). Returns the number of structures to be returned in case of random enumeration.

Returns:
the number of enumerated structures
See Also:
setRandomEnumeration(), setMaxStructureCount(long), getLimitedStructureCount(), countEnumerations(), countEnumerationsMagnitude()

getLimitedStructureCount

public int getLimitedStructureCount()
Returns the number of structures to be generated. This is the minimum of the actual structure count returned by getStructureCount() and the specified maximum (see setMaxStructureCount(long)). Returns the number of structures to be returned in case of random enumeration.

Returns:
the number of structures to be generated
See Also:
setRandomEnumeration(), setMaxStructureCount(long), getStructureCount()

hasMoreStructures

public boolean hasMoreStructures()
Returns true if there are more structures.

Returns:
true if there are more structures

getNextStructure

public Molecule getNextStructure()
Returns the next enumerated structure, or null if no more structures.

Returns:
the sructure

getNextAromatizedStructure

public Molecule getNextAromatizedStructure()
Returns the next enumerated structure. The structure is returned in aromatized form.

Returns:
the structure

getStructures

public Molecule[] getStructures()
                         throws PluginException
Returns the enumerated structures.

Returns:
the enumerated structures
Throws:
PluginException - if too many structures

getAromatizedStructures

public Molecule[] getAromatizedStructures()
                                   throws PluginException
Returns the enumerated structures in aromatized form.

Returns:
the enumerated structures in aromatized form
Throws:
PluginException - if too many structures

getResultSource

public chemaxon.marvin.plugin.PluginMDocSource getResultSource()
                                                        throws PluginException
Returns the result as a document source object. This is useful for displaying the molecules in a viewer dynamically as they become available instead of collecting all results before display.

Overrides:
getResultSource in class CalculatorPlugin
Returns:
the document source interface
Throws:
PluginException - on error
Since:
Marvin 5.0

getResultTypes

public java.lang.Object[] getResultTypes()
Returns the result types.

Overrides:
getResultTypes in class CalculatorPlugin
Returns:
the result types

getResultDomain

public int getResultDomain(java.lang.Object type)
Returns the calculation domain.

Overrides:
getResultDomain in class CalculatorPlugin
Parameters:
type - is the result type
Returns:
the calculation domain
See Also:
getResultTypes()

getResultCount

public int getResultCount(java.lang.Object type)
Returns the number of result items for the given result key.

Overrides:
getResultCount in class CalculatorPlugin
Parameters:
type - is the result type
Returns:
the number of result items
See Also:
getResultTypes()

getTypeString

public java.lang.String getTypeString(java.lang.Object type)
Returns a string representation of the given type.

Overrides:
getTypeString in class CalculatorPlugin
Parameters:
type - is the type object
Returns:
the type string

getResult

public java.lang.Object getResult(java.lang.Object type,
                                  int index)
                           throws PluginException
Returns the result item for the specified key and index.

Overrides:
getResult in class CalculatorPlugin
Parameters:
type - is the result type
index - is the result index
Returns:
the result item for the specified key and index
Throws:
PluginException - if the result cannot be returned
See Also:
CalculatorPlugin.getResultTypes()

getResult

public java.lang.Object getResult(java.lang.Object type,
                                  java.lang.String arg)
                           throws PluginException
Returns the enumerated structures. For internal use only.

Overrides:
getResult in class CalculatorPlugin
Parameters:
type - is the result type ("structures")
arg - is the atom string as a '-'-separated list
Returns:
the enumerated structures
Throws:
PluginException - on error
See Also:
CalculatorPlugin.getResultTypes()

getResultAsString

public java.lang.String getResultAsString(java.lang.Object type,
                                          int index,
                                          java.lang.Object result)
                                   throws PluginException
Returns the specified result in String format.

Overrides:
getResultAsString in class CalculatorPlugin
Parameters:
type - is the result type
index - is the result index
result - is the result item
Returns:
the specified result in String format
Throws:
PluginException - if an invalid result item is given

getRemark

public java.lang.String getRemark()
Returns a warning message in case of arithmetical overflow (the number of enumerated structures exceeds Long.MAX_VALUE), null otherwise.

Overrides:
getRemark in class CalculatorPlugin
Returns:
a warning message if there are no tautomers

getLibrarySizeString

public java.lang.String getLibrarySizeString()
                                      throws PluginException
Returns the string representation of the Markush library size. If the library is too big then returns an approximate form (e.g. "~ 10^45"). Returns null in case of random enumeration.

Returns:
the library size string
Throws:
PluginException

getResultMolecule

public Molecule getResultMolecule()
                           throws PluginException
Returns the result molecule for display. Atomic results are stored in atom extra labels (MolAtom.getExtraLabel()). Molecular results are stored in molecule properties with keys being the result types (Molecule.getProperty(String)).

Overrides:
getResultMolecule in class CalculatorPlugin
Returns:
the result molecule
Throws:
PluginException - on error
Since:
Marvin 4.0

standardize

public void standardize(Molecule mol)
Prevents default standardization: does nothing.

Overrides:
standardize in class CalculatorPlugin
Parameters:
mol - is the molecule to be standardized