2.3. ConformerOptimizer¶
The ConformerOptimizer is not meant to be directly called by the user,
but exists as a component of the Generator classes.
It is also used under the hood by the UniqueConformers.optimize()
method.
This class organizes parallel geometry optimizations for different geometries of a single molecule
-
class
ConformerOptimizer
(mol=None, engine_settings=None, nproc=1)¶ Machine that can optimize the geometry of a set of structures
A simple example of (parallel) use:
>>> from scm.plams import Molecule >>> from scm.plams import init, finish >>> from scm.conformers import UniqueConformersCrest, ConformerOptimizer >>> # Set up the molecular data >>> mol = Molecule('mol.xyz') >>> conformers = UniqueConformersCrest() >>> conformers.prepare_state(mol) >>> # Set up PLAMS settings >>> init() >>> # Create the optimizer and run >>> optimizer = ConformerOptimizer(mol, nproc=4) >>> geometries = [mol.as_array()] >>> geometries, energies = optimizer.optimize_geometries(geometries, level='good') >>> finish()
The default AMS engine used is the UFF engine. A different engine can be provided upon initiation.
>>> engine_settings = Settings() >>> engine_settings.DFTB.Model = 'GFN1-xTB' >>> optimizer = ConformerOptimizer(geometries, engine_settings=engine, nproc=4)
-
__init__
(mol=None, engine_settings=None, nproc=1)¶ Initiates an instance of the Optimizer class
engine_settings
– PLAMS Settings object:engine_settings = Settings() engine_settings.DFTB.Model = ‘GFN1-xTB’
nproc
– Number of processors to use in total for the optimizations
-
property
last_timings
¶ Stores the timings of the last optimization call performed
-
set_atom_types
()¶ In case the GAFF ForceField will be called, make sure atom-typing happens only once
FIXME: This also requires a patch file!
-
set_cleaning_preference
(keep=None)¶ Sets the preferences for the files saved to disc
keep
– None or ‘all’. The former will clean PLAMS folders of all files after runtime, the latter will leave all files as they are. See PLAMS for more details.
-
keep_ams_running
(keep=True)¶ Technical setting for a set of (serial) geometry optimizations
keep
– Each of the parallel processes will most likely be passed multiple geometries. If keep=True, AMS will be kept running in the background, and geometries will be passed via a pipe. If keep=False, each geometry optimization will start a new AMS process.
-
optimize_geometries
(geometries, level=None, name='go', watch=True)¶ Optimize a set of geometries
geometries
– An iterator over molecular coordinates (matching self.mol)
-
optimize_molecules
(molecules, level=None, name='go', watch=True)¶ Optimize a set of molecules (they have to represent different conformers of the same molecule)
-
_write_geometry
(crd, en, ind)¶ Write optimized geometry to file
-
geometry_writer
(results, num_jobs, event, t)¶ Writes the optimized geometries to file during the optimization process
-
_get_family
()¶ Find the names of the family of classes to which self belongs
-
convert_key_to_camelcase
(key)¶ Convert the key to json format
-
convert_key_to_underscore_case
(key)¶ Revert back to original value, and see if it works
-
convert_keys_to_camelcase
(settings)¶ Convert all keys to CamelCase (except the last json ones like _type, _default, etc)
-
convert_keys_to_underscore_case
(settings)¶ Revert all the keys to the Python settings
-
static
create_json_entry
(typename, value, unique=True, choices=None, include=None)¶ Create a single entry
-
get_json_settings
()¶ Convert the settings object in self to a json style settings object
-
handle_input
(inp, names, handle_nested_objects)¶ Get the settings from the input, convert to underscore case, and insert them
inp
- Input objectnames
- The names (self._name) of all the classes in the family of classes of selfhandle_nested_objects
- Boolean specifying if there can be encapsulated objects of the same family,for which settings are needed
-
pass_settings
(settings, encaps_settings=False)¶ Set the settings object into self
-
read_settings
(inp, names)¶ Get the settings for the conformers object from the input in the required format
inp
- Input objectnames
- The classnames of all the classes in the family of classes of obj
Note: This is complicated by the fact that a single family of classes may be spread over multiple input blocks.
-
set_blocknames
(blocknames)¶ Provide the relevant blocknames for the family of classes
blocknames
– List of strings representing the input blocks relevant for this family of classes
-
to_json
()¶ Create a json settings object from self.settings
-