AtomTyping¶
AtomTyping is a simple tool for assigning atom types fo molecular systems. Currently only the GAFF force field is implemented. It uses AMBERs Antechamber under the hood.
Command Line Tool¶
This is a simple example showing how to generate force field parameters for ethanol:
#!/bin/sh
$AMSBIN/atomtyping << EOF
Type GAFF
System
Atoms
C -4.537101 -0.602542 -0.008859
C -3.601843 -1.804345 0.037274
O -2.267293 -1.387375 -0.058902
H -4.301877 0.096761 0.821305
H -5.588912 -0.942676 0.095614
H -4.425039 -0.071643 -0.977931
H -3.829607 -2.474689 -0.818032
H -3.766077 -2.377916 0.977441
H -2.012143 -1.043722 0.837186
End
End
EOF
The most important input options are:
Type: The force field type for which atom types and charges should be generated. Currently only GAFF is implemented, and this is also default.
System: in the System block we specify the initial structure of the molecule for which you want to generate force field information.
The utility creates a new AMS input file for a ForceField engine job using the new forcefield parameters. The new input is written to the logfile, and it is also stored in the .rkf file. The user can change the file as needed, or import it into amsinput and change settings from there.
Tip
GAFF atomtyping by Antechamber involves an AM1 geometry optimization of all molecules, in order to determine the atomic charges. For very big systems this can be very tome consuming. There is an option to only compute AM1 single point atomic charges, with the option AntechamberTask SinglePoint. Do keep in mind that this will make the resulting force field parameters less reliable.
Python scripting¶
It is also possible to run atomtyping via Python scripting.
from scm.plams import Settings, Molecule
from scm.plams import init, finish
from scm.atomtyping import AtomTypingJob, AtomTypingResults
init()
# Run the atomtyping job
mol = Molecule('mol.in')
settings = Settings()
job = AtomTypingJob(molecule=mol,settings=settings)
results = job.run()
# Create the forcefield job (change the settings if needed)
newjob = results.get_plamsjob()
newjob.settings.input.ams.Task = GeometryOptimization
finish()