diff --git a/rmgpy/constraints.py b/rmgpy/constraints.py index 8f9ac10638..83c1151795 100644 --- a/rmgpy/constraints.py +++ b/rmgpy/constraints.py @@ -83,6 +83,16 @@ def fails_species_constraints(species): if struct.is_isomorphic(molecule): return False + explicitly_forbidden_molecules = species_constraints.get('explicitlyForbiddenMolecules', []) + for molecule in explicitly_forbidden_molecules: + if struct.is_isomorphic(molecule): + return True + + explicitly_forbidden_groups = species_constraints.get('explicitlyForbiddenGroups', []) + for group in explicitly_forbidden_groups: + if struct.is_subgraph_isomorphic(group): + return True + max_carbon_atoms = species_constraints.get('maximumCarbonAtoms', -1) if max_carbon_atoms != -1: if struct.get_num_atoms('C') > max_carbon_atoms: diff --git a/rmgpy/rmg/input.py b/rmgpy/rmg/input.py index 271513f503..c261eaf49b 100644 --- a/rmgpy/rmg/input.py +++ b/rmgpy/rmg/input.py @@ -36,8 +36,7 @@ from rmgpy import settings from rmgpy.data.base import Entry from rmgpy.exceptions import DatabaseError, InputError -from rmgpy.molecule import Molecule -from rmgpy.molecule.group import Group +from rmgpy.molecule import Molecule, Group from rmgpy.quantity import Quantity, Energy, RateCoefficient, SurfaceConcentration from rmgpy.rmg.model import CoreEdgeReactionModel from rmgpy.rmg.settings import ModelSettings, SimulatorSettings @@ -238,7 +237,7 @@ def inchi(string): def adjacency_list(string): return Molecule().from_adjacency_list(string) -def adjacency_list_group(string): +def group_adjacency_list(string): return Group().from_adjacency_list(string) def react(tups): @@ -1381,6 +1380,8 @@ def generated_species_constraints(**kwargs): 'maximumCarbeneRadicals', 'allowSingletO2', 'speciesCuttingThreshold', + 'explicitlyForbiddenMolecules', + 'explicitlyForbiddenGroups', ] for key, value in kwargs.items(): @@ -1528,6 +1529,7 @@ def read_input_file(path, rmg0): 'InChI': inchi, 'adjacencyList': adjacency_list, 'adjacencyListGroup': adjacency_list_group, + 'groupAdjacencyList': group_adjacency_list, 'react': react, 'simpleReactor': simple_reactor, 'constantVIdealGasReactor' : constant_V_ideal_gas_reactor, diff --git a/rmgpy/rmg/main.py b/rmgpy/rmg/main.py index 4af6a43256..2f659dc263 100644 --- a/rmgpy/rmg/main.py +++ b/rmgpy/rmg/main.py @@ -65,7 +65,7 @@ from rmgpy.kinetics.diffusionLimited import diffusion_limiter from rmgpy.data.vaporLiquidMassTransfer import vapor_liquid_mass_transfer from rmgpy.kinetics import ThirdBody -from rmgpy.molecule import Molecule +from rmgpy.molecule import Molecule, Group from rmgpy.qm.main import QMDatabaseWriter from rmgpy.reaction import Reaction from rmgpy.rmg.listener import SimulationProfileWriter, SimulationProfilePlotter