Usage
An smi or SDF file that stores the molecules is needed as the input for the
package. You can find example input files in the example/files
folder. You can import Auto3D as a library in any Python script,
or run Auto3D through the command line interface (CLI). They are
equivalent in finding the low-energy 3D conformers.
Using Auto3D as a Python library
If you just have a handful of SMILES, it’s easy to use the smiles2mols function. It is a handy tool for finding the low-energy conformers for a list of SMILES. Compared with the main function, it sacrifices efficiency for convenience because smiles2mols uses only 1 process. Both the input and output are returned as variables within Python. It’s recommended only when the number of SMILES is less than 150; otherwise using Auto3DOptions with main will be faster.
from rdkit import Chem
from Auto3D import Auto3DOptions, smiles2mols
smiles = ['CCNCC', 'O=C(C1=CC=CO1)N2CCNCC2']
config = Auto3DOptions(k=1, use_gpu=False)
mols = smiles2mols(smiles, config)
# Get the energy and atomic positions from the mol objects
for mol in mols:
print(mol.GetProp('_Name'))
print('Energy: ', mol.GetProp('E_tot')) # unit: Hartree
conf = mol.GetConformer()
for i in range(conf.GetNumAtoms()):
atom = mol.GetAtomWithIdx(i)
pos = conf.GetAtomPosition(i)
print(f'{atom.GetSymbol()} {pos.x:.3f} {pos.y:.3f} {pos.z:.3f}')
If you have a large number of molecules, using Auto3DOptions with the main function is recommended. It’s suitable for large inputs and stores the 3D structures in a file with the name <input_file_name>_3d.sdf, of which the path will be printed when auto3d finishes running. Note that the smi file can be replaced with an SDF file, which means Auto3D will search for low-energy conformers starting from a given geometry. Because the main function uses multiprocessing, it has to be called in a if __name__ == "__main__": block.
from Auto3D import Auto3DOptions, main
if __name__ == "__main__":
input_path = "example/files/smiles.smi" # This can also be an SDF file
config = Auto3DOptions(path=input_path, k=1) # Configure Auto3D parameters
out = main(config) # Run Auto3D and get output path
Using Auto3D in a terminal command line
Auto3D provides a modern CLI with subcommands. The main command is run:
auto3d run smiles.smi --k=1
You can also use a YAML configuration file:
auto3d run smiles.smi -c config.yaml
CLI Subcommands
The CLI provides several subcommands for different tasks:
# Generate conformers (main workflow)
auto3d run input.smi --k=1
auto3d run input.smi --window=5.0 --engine AIMNET
# Configuration management
auto3d config init # Create a template config file
auto3d config init -o my_config.yaml # Custom output path
auto3d config show config.yaml # Display config with syntax highlighting
# Model information
auto3d models list # List available NNP models
auto3d models info AIMNET # Show details about a specific model
# Input validation
auto3d validate input.smi # Check SMILES/SDF file for issues
# Help and version
auto3d --help # Show all commands
auto3d run --help # Show run command options
auto3d --version # Show version
Shell Completion
Enable tab completion for bash, zsh, or fish:
# Bash (add to ~/.bashrc for persistence)
auto3d --install-completion bash
# Zsh (add to ~/.zshrc for persistence)
auto3d --install-completion zsh
# Fish
auto3d --install-completion fish
After installation, restart your shell or source the config file. Then you can use tab completion for commands, options, and file paths.
Legacy YAML Mode
For backwards compatibility, the old YAML-only invocation still works:
auto3d parameters.yaml
There are example files present at example/files
The above examples will do the same thing: run Auto3D and keep 1
lowest-energy structure for each SMILES in the input file. It uses RDKit
as the isomer engine and AIMNET as the optimizing engine by default. If
you want to keep n structures for each SMILES, simply set k=n or
--k=n. You can also keep structures that are within x kcal/mol from
the lowest-energy structure for each SMILES if you replace k=1 with
window=x.
Note
AIMNet2 clarification: The default model in Auto3D is AIMNet2 since version 2.2.1. If you specify optimizing_engine="AIMNET", it uses AIMNet2. The old AIMNet model has been deprecated since Auto3D 2.2.1.
When the running process finishes, there will be a folder with the name of year-date-time. In the folder, you can find an SDF file containing the optimized low-energy 3D structures for the input SMILES. There is also a log file that records the input parameters and running metadata.
Wrapper functions
Auto3D provides wrapper functions for single point energy calculation, geometry optimization and thermodynamic analysis. Please see the example folder for details.
Parameters in Auto3D
For Auto3D, the Python package and CLI share the same set of parameters.
Please note that -- is only required for CLI. For example, to use
ANI2x as the optimizing engine, you need the following block if you
are writing a custom Python script:
from Auto3D import Auto3DOptions, main
if __name__ == "__main__":
input_path = "example/files/smiles.smi"
config = Auto3DOptions(path=input_path, k=1, optimizing_engine="ANI2x")
out = main(config)
You need the following block if you use the CLI:
auto3D "example/files/smiles.smi" --k=1 --optimizing_engine="ANI2x"
Category |
Type |
Name |
Explanation |
|---|---|---|---|
required argument |
path |
A path of |
|
ranking |
required argument |
–k |
Outputs the top-k structures for each molecule. Only one of |
ranking |
required argument |
–window |
Outputs the structures whose energies are within a window (kcal/mol) from the lowest energy. Only one of |
job segmentation |
optional argument |
–memory |
The RAM size assigned to Auto3D (unit GB). By default |
job segmentation |
optional argument |
–capacity |
By default, 42. This is the number of molecules that each 1 GB of memory can handle. |
isomer enumeration |
optional argument |
–enumerate_tautomer |
By default, False. When True, enumerate tautomers for the input. |
isomer enumeration |
optional argument |
–tauto_engine |
By default, rdkit. Programs to enumerate tautomers, either ‘rdkit’ or ‘oechem’. This argument only works when |
isomer enumeration |
optional argument |
–isomer_engine |
By default, rdkit. The program for generating 3D conformers for each molecule. This parameter is either rdkit or omega. RDKit is free for everyone, while Omega requires a license. |
isomer enumeration |
optional argument |
–max_confs |
Maximum number of conformers for each configuration of the molecule. The default number depends on the isomer engine: up to 1000 conformers will be generated for each molecule if isomer engine is omega; for rdkit, it’s calculated as 8.481*(num_rotatable_bonds^1.642). |
isomer enumeration |
optional argument |
–enumerate_isomer |
By default, True. When True, unspecified cis/trans and R/S centers are enumerated. |
isomer enumeration |
optional argument |
–mode_oe |
By default, classic. The mode that omega program will take. It can be either ‘classic’ or ‘macrocycle’. Only works when |
isomer enumeration |
optional argument |
–mpi_np |
By default, 4. The number of CPU cores for the isomer generation step. |
optimization |
optional argument |
–optimizing_engine |
By default, AIMNET. Choose either ‘ANI2x’, ‘ANI2xt’, or ‘AIMNET’ for energy calculation and geometry optimization. Can also be a path to a custom NNP model. |
optimization |
optional argument |
–use_gpu |
By default, True. If True, the program will use GPU. |
optimization |
optional argument |
–gpu_idx |
By default, 0. If you want to use multiple GPUs, specify the list of GPU indexes. For example, |
optimization |
optional argument |
–opt_steps |
By default, 2000. Maximum optimization steps for each structure. |
optimization |
optional argument |
–convergence_threshold |
By default, 0.01 eV/A. Optimization is considered as converged if maximum force is below this threshold. |
optimization |
optional argument |
–patience |
If the force does not decrease for a continuous patience steps, the conformer will drop out of the optimization loop. By default, 250. |
optimization |
optional argument |
–batchsize_atoms |
The number of atoms in 1 optimization batch per 1GB memory, default=1024. |
optimization |
optional argument |
–allow_tf32 |
By default, False. Enable TF32 for faster computation on Ampere+ GPUs (slightly less precise). |
duplicate removing |
optional argument |
–threshold |
By default, 0.3. If the RMSD between two conformers is within the threshold, they are considered as duplicates. One of them will be removed. Duplicate removal is executed after conformer enumeration and geometry optimization. |
housekeeping |
optional argument |
–verbose |
By default, False. When True, save all metadata while running. |
housekeeping |
optional argument |
–job_name |
A folder that stores all the results. By default, the name is the current date and time. |