- 1.7
- 1.6
- 1.5
- Beta
- Examples (for 1.6a)
- Misc
Table of Contents
- 1. Disclaimer
- 2. Acknowledgements
- 3. Getting Started
- 4. Import / Export
- 5. The GUI
- 6. Command Language
- Command Language Overview
- Variable Types
- Overview
- Aten Type
- Atom Type
- BasisPrimitive Type
- BasisShell Type
- Bond Type
- Bound Type
- Cell Type
- ColourScale Type
- ColourScalePoint Type
- Eigenvector Type
- Element Type
- EnergyStore Type
- FFAtom Type
- FFBound Type
- Forcefield Type
- Glyph
- GlyphData Type
- Grid Type
- Measurement Type
- Model Type
- Pattern Type
- Prefs Type
- Region Type
- Site Type
- UnitCell Type
- Vector Type
- Command Reference
- Atom Commands
- Bond Commands
- Building Commands
- Cell Commands
- Charges Commands
- ColourScales Commands
- Disordered Commands
- Edit Commands
- Energy Commands
- Flow Commands
- Forcefield Commands
- Forces Commands
- Glyph Commands
- Grid Commands
- Image Commands
- Labeling Commands
- Math Commands
- Measuring Commands
- Messaging Commands
- Minimiser Commands
- Model Commands
- Model Extras Commands
- Monte Carlo Commands
- Pattern Commands
- Read / Write Commands
- Script Commands
- Selection Commands
- Site Commands
- String Commands
- System Commands
- Trajectory Commands
- Transform Commands
- View Commands
- 7. Topics of Interest
- 8. Forcefields and Typing
- Overview
- Supplied Forcefields
- Canongia-Lopes & Padua Ionic Liquids (cldp-il.ff)
- Youngs, Kohanoff, & Del Pópolo [dmim]Cl (dmimcl-fm.ff)
- Youngs & Hardacre [dmim]Cl (dmimcl-fm2.ff)
- Jorgensen at al. OPLS-AA (oplsaa.ff)
- Berensen et al.s Simple Point Charge Water (spc.ff)
- Berensen et al.s Extended Simple Point Charge Water (spce.ff)
- Rappe et al.s Universal Forcefield (testing/uff.ff)
- Mayo, Olafson & Goddard II's Generic Forcefield (testing/dreiding.ff)
- General Amber Forcefield (testing/gaff.ff)
- Liu, Wu & Wang's United-Atom Ionic Liquids Forcefield (lww-il.ff)
- Keyword Reference
- Rule-Based Forcefields
- Typing
- NETA Reference
- VDW Functional Forms
- Bond Functional Forms
- Angle Functional Forms
- Torsion Functional Forms
- 9. Methods
- 10. Enumerations
- 11. TODO
- 12. Changelogs
- Index
List of Figures
- 5.1. Atom List Window
- 5.2. Build Window
- 5.3. Cell Definition Window
- 5.4. Cell Transform Window, Replicate Panel
- 5.5. Cell Transform Window, Scale Panel
- 5.6. Command Window, Prompt Panel
- 5.7. Command Window, Scripts Panel
- 5.8. Command Window, Command Index Panel
- 5.9. Disordered Builder Window
- 5.10. Forcefield Window
- 5.11. Fragment Library Window
- 5.12. Geometry Window
- 5.13. Glyphs Window
- 5.14. Grids Window - Data / Cutoff Page
- 5.15. Grids Window - Origin / Axes Page
- 5.16. Grids Window - Style Page
- 5.17. Grids Window - Shift Page
- 5.18. Grids Window - Orbitals Page
- 5.19. Minimiser Window
- 5.20. Atom Position Window, Centre Panel
- 5.21. Atom Position Window, Flip Panel
- 5.22. Atom Position Window, Translate Panel
- 5.23. Atom Position Window, Shift Panel
- 5.24. Atom Position Window, Reposition Panel
- 5.25. Select Window
- 5.26. Atom Transform Window, Rotate Panel
- 5.27. Atom Transform Window, Matrix Transform Panel
- 5.28. Atom Transform Window, Matrix Convert Panel
- 5.29. ZMatrix Window
- 7.1. Pattern Example, System 1
- 7.2. Pattern Example, System 2
- 7.3. Pattern Example, System 3
- 7.4. Pattern Example, System 4
- 8.1. Water
- 8.2. 3-hydroxypropanoic acid
- 8.3. N,N,2,5-tetramethylpyridin-4-amine
List of Tables
- 4.1. Supported Model Formats
- 4.2. Supported Trajectory Formats
- 4.3. Supported Grid Data Formats
- 4.4. Supported Expression Data Formats
- 4.5. Filter properties
- 4.6. Filter types
- 4.7. Option Types
- 4.8. Layout Commands
- 4.9. Formatted output commands
- 4.10. Formatted input commands
- 4.11. Extra read/write specifiers
- 4.12. Escaped characters in format strings
- 4.13. Delimited read/write commands
- 5.1. Mouse Button Actions
- 5.2. Bonding Toolbar Icons
- 5.3. Build Toolbar Icons
- 5.4. Draw Style Toolbar Icons
- 5.5. Edit Toolbar Icons
- 5.6. File Toolbar Icons
- 5.7. Forcefield Toolbar Icons
- 5.8. Mouse Toolbar Icons
- 5.9. Mouse Toolbar Icons
- 5.10. Select Toolbar Icons
- 5.11. Tool Window Toolbar Icons
- 5.12. Trajectory Toolbar Icons
- 5.13.
- 5.14.
- 5.15.
- 5.16.
- 5.17.
- 5.18.
- 5.19.
- 5.20.
- 5.21.
- 6.1. Built-in Constants
- 6.2. Aten Type Members
- 6.3. Bond Type Functions
- 6.4. Atom Type Members
- 6.5. Atom Type Functions
- 6.6. BasisPrimitive Type Members
- 6.7. BasisPrimitive Type Functions
- 6.8. BasisShell Type Members
- 6.9. BasisShell Type Functions
- 6.10. Bond Type Members
- 6.11. Bond Type Functions
- 6.12. Bound Type Members
- 6.13. Bound Type Functions
- 6.14. Cell Type Members
- 6.15. ColourScale Type Members
- 6.16. ColourScale Type Functions
- 6.17. ColourScalePoint Type Members
- 6.18. Eigenvector Type Members
- 6.19. Element Type Members
- 6.20. EnergyStore Type Members
- 6.21. FFAtom Type Members
- 6.22. FFAtom Type Functions
- 6.23. FFBound Type Members
- 6.24. FFBound Type Functions
- 6.25. Forcefield Type Members
- 6.26. Forcefield Type Functions
- 6.27. Glyph Type Members
- 6.28. Glyph Type Functions
- 6.29. GlyphData Type Members
- 6.30. Grid Type Members
- 6.31. Measurement Type Members
- 6.32. Model Type Members
- 6.33. Model Type Functions
- 6.34. Pattern Type Members
- 6.35. Prefs Type Members
- 6.36. Region Type Members
- 6.37. Site Type Members
- 6.38. UnitCell Type Members
- 6.39. Vector Type Members
- 6.40. Test Operators
- 6.41. Autopolyhedra options
- 6.42. Newglyph options
- 6.43. Bitmap image formats
- 7.1. Glyph type data
- 7.2. Pattern Examples
- 8.1. Allowable FF Rule Functions
- 8.2. NETA keyword '~X' examples
- 8.3. NETA keyword '~X' examples
- 8.4. NETA keyword '-X' examples
- 8.5. NETA keyword '=X' examples
- 8.6. NETA keyword 'bond' examples
- 8.7. NETA keyword 'chain' examples
- 8.8. NETA keyword 'n' examples
- 8.9. NETA keyword 'nbonds' examples
- 8.10. NETA keyword 'nh' examples
- 8.11. NETA keyword 'aromatic' examples
- 8.12. NETA keyword 'noring' examples
- 8.13. NETA keyword 'planar' examples
- 8.14. NETA keyword 'ring' examples
- 8.15. NETA keyword 'size' examples
- 8.16. NETA geometry keywords
- 8.17. VDW Functional Forms
- 8.18. Bond Functional Forms
- 8.19. Angle Functional Forms
- 8.20. Torsion Functional Forms
- 9.1. Literature Methods
- 10.1. Basis shell type keywords
- 10.2. Bond type keywords
- 10.3. Bound type keywords
- 10.4. Cell type keywords
- 10.5. Colour scheme keywords
- 10.6. Combination Rules
- 10.7. Draw style keywords
- 10.8. Energy unit keywords
- 10.9. Glyph type keywords
- 10.10. Grid style keywords
- 10.11. Grid type keywords
- 10.12. Label type keywords
- 10.13. Output type keywords
- 10.14. Parse option keywords
- 10.15. Read/write return values
- 10.16. Region Shapes
- 10.17. View object keywords
- 10.18. Map type keywords
Aten comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under certain conditions. For more details read the GPL at [http://www.gnu.org/copyleft/gpl.html].
Aten is under continual development and tweaking. If you have a feature suggestion, a feature request, or have found a bug or an idiosyncrasy, please contact me at <tris@projectaten.net>.
Aten uses Space Group Info (c) 1994-96 Ralf W. Grosse-Kunstleve, the Qt toolkit (C) Trolltech, and the readline library.
Some general notes:
First off, if you find that Aten doesn't support the format you want, consider writing a filter to do so. And if you need help, please ask!
More so, if you find that Aten does support the format you want, but doesn't appear to write it out correctly, please let me know.
For forcefield expression files written with Aten, I recommend that you check that the correct atom types get assigned to your molecule(s). Blind trust that this has actually occurred should only be employed once you are confident that the forcefield types are consistently correct! Larger forcefields, e.g. OPLS-AA by Jorgensen et al., do not have a complete set of type descriptions implemented in Aten. Once more, if your add some in, please send them to me so they can be included in a future revision of the code.
Aten is maintained entirely by T. Youngs. However, many people have contributed useful thoughts, ideas, bugfixes, and motivation to the project over its lifetime. These people are, in no particular order:
A. K. Croft and crew (Mac afficionado, supreme fault-finder)
S. Cromie (algebraic guidance)
A. Elena (bug-finder extraordinaire, 'pathological case'-locator, Windows / Mac building and packaging)
D. Pashov (Windows / Mac building and packaging)
S. Norman (icon judgment)
Table of Contents
Aten will let you generate and edit coordinates for your simulations, and view any trajectories you might have generated. A set of tools in the GUI (and also accessible from the command line) enables you to change the geometry of bonds, angles, and torsions, translate atoms, create atoms, rotate groups of atoms, and cut, copy, and paste them around the place. All this can be done in the context of loading and saving in the format that you need - if the file format you need isn't currently a part of Aten, you yourself can write a filter to cover it.
Periodic systems are supported, be they crystals, liquids, gases, or a heady mixture. All editing functions that are possible for simple molecules apply to periodic systems as well. Moreover, given a basic unit cell a whole crystal or a larger supercell can be constructed. For any periodic system, a random ensemble of molecules can be added, allowing the facile creation of coordinates with which to begin your molecular dynamics simulations.
As well as coordinates, Aten has support for forcefields (in its own, plain-text format) and can automatically apply these forcefields to your system if correct type descriptions are present for the atom types in the forcefield. Then, in the same way as with coordinates, you may write out a forcefield description of your system in the format that you require it with a different filter. Please don't use Aten as a literal 'black box', though, and blindly write out forcefield files without checking them. While it will certainly make the process of generating your forcefield descriptions easier, the art of determining the correct types in the first place (and hence the correct forcefield terms) is not definite for larger forcefields that cover many atom types. Check the output - a cursory glance of the selected forcefield types is an excellent idea, and a good habit to get in to.
Aten is in continual development, so if you get stuck, find a bug, or have a suggestion to make, please go to the Support page of the website and visit the forums or send an email directly. Making Aten better depends to some degree on user feedback!
If you want to compile Aten by hand (e.g. if you're keeping your own copy of the source and updating it via subversion) then these guides may help.
Very few Linux distributions have guides in this section - if you wish to contribute details of your own experience for the benefit of others, get in touch.
Run the following commands to install subversion (if you don't already have it) and download the latest source to a directory names 'aten-latest' in the current directory:
bob@pc:~> sudo apt-get install subversion bob@pc:~> svn co http://aten.googlecode.com/svn/trunk ./aten-latest bob@pc:~> cd aten-latest
The following command should install all necessary packages needed to compile Aten, including the Qt4 development libraries, C++ (g++) compiler, and the automake/libtool packages.
bob@pc:~> sudo apt-get install autotools-dev libtool autoconf automake g++ libreadline5-dev \ libqt4-gui libqt4-opengl libqt4-core libqt4-dev
Configure the source with the following commands, run from the 'aten-latest' directory:
bob@pc:~> ./autogen.sh bob@pc:~> ./configure
All being well, no errors should be encountered by the configure script. If there are any and you have problems, please email me!
Once succesfully configured, build the source with:
bob@pc:~> make
GNU Autotools >=2.6 or CMake >=2.4.8 - the choice is yours, really. CMake tends to be easier because it handles all the Qt-related elements explicitly, but a pretty recent version is required. Follow the relevant sections below.
Qt4 >=4.2 - again, two choices. Trolltech offer an installable disk image, providing Qt4 as a proper Framework (see http://trolltech.com/products/appdev/platform/qt-for-mac ). Alternatively, Qt4 is available on Fink (qt4-x11).
OpenGL - This should be installed as standard.
pkg-config - If you're using the Fink installation of Qt4, then you'll also need the pkg-config package from the same source (package name?).
A C++ compiler (e.g. GNU g++, Intel's icc)
If you obtained the source via SVN, at the top of the source tree run:
bob@pc~ > ./autogen.sh
This creates the necessary files needed to properly configure the build. If you unpacked the source from a tarball, it shouldn't be necessary to run autogen.sh, but you could if unexpected other errors occur in a last ditch attempt to remedy the situation.
Run ./configure to set up the build. The default installation location can be overridden by specifying ./configure --prefix=<path>. It will be necessary to specify which Qt4 installation you have (Framework or Fink).
If using the installed Framework from Trolltech, run:
bob@pc~> ./configure --with-qt=framework
If using the Fink installation, run:
bob@pc~> ./configure --with-qt=fink
With the Fink installation you may also need to direct ./configure.ac to the correct Qt4 development binaries either by setting your $PATH to '/sw/lib/qt4-x11/bin:${PATH}' or by running:
bob@pc~> ./configure --with-qt=fink --with-qtdir=path
...where 'path' is the path where the development binaries can be found.
Once configured successfully, run 'make' to compile the source and build the program. Then, go make some tea or brew some coffee.
An out-of-tree build is best. Make a directory somewhere, enter in to it, and run:
bob@pc~> cmake /path/to/source/for/aten
For example:
bob@pc:> mkdir aten-build bob@pc:> cd aten-build bob@pc:~/aten-build> cmake /home/bob/aten-0.99-713
Once configured successfully, run 'make' to compile the source and build the program. Then, go make some tea or brew some coffee.
Whether installing from a pre-built package or running 'make install' (or not) after building it yourself, there are several resources which Aten needs or expects to find. The most important of these is the default library of filters without which nothing can be loaded or saved (but note that this does not prevent Aten from running). Then there's the optional user preferences file, and finally the optional user filter library. If Aten was installed from a package or built and 'make install'ed yourself then the default filters should be located correctly when Aten runs withour further intervention (if not, read on). No user preferences file is created or installed, and must be created either through the GUI or edited by hand.
As already mentioned, Aten comes with a selection of filters ready to import and export a fair number of file formats (you can write your own - see the chapter on Filters). These filters should be found automatically, but if they are not Aten can be given their location in one of two ways:
- Through the environment variable ATENDATA
On all systems, the environment variable
ATENDATAcan be set with the full path to the 'data' directory which contains the filters directory.- With the command-line argument --atendata
In a similar manner, the
--atendatacommand-line argument can be used to provide the full path to the 'data' directory which contains the filters directory.
Any filters written or obtained by the used can be placed in their ~/.aten/filters directory. See the next section.
User filters and preferences files should be placed in a .aten directory in your home directory (it must be created by hand). Within this directory can exist the user preferences file prefs.dat exists, along with another directory named filters which is used to store custom filters, or those currently under development by the user.
Aten has been published in the Journal of Computational Chemistry, and the article can be found online here. The full reference is:
"Aten - An application for the creation, editing, and visualization of coordinates for glasses, liquids, crystals, and molecules", T. G. A. Youngs, J. Comp. Chem., 31, 639-648, (2009).
It is not a requirement to cite Aten in your work, but if you feel that a citation is deserved because it has been particularly helpful, then please feel free!
From a shell, running Aten with no arguments will start up the code in GUI mode and patiently wait for something nice to happen. If model files are provided on the command line, these will be loaded in so that, when the GUI starts, they may be hacked apart according to your desired tastes. The command-line is also a powerful way of editing without using the GUI at all. What follows is a description of the usage of command-line arguments, and a list of all recognised arguments.
Two important things. Firstly, short options (e.g. '-b', '-d', etc.) may not be concatenated into one long specification of a short option (i.e. '-bd') - they must be given separately as '-b -d' or they will not be recognised. Secondly, the order of the given switches is important! Commonly, the actions of command-line switches and arguments do not depend on order, however in Aten this is not the case. For example:
bob@pc:~> aten --nobond test1.xyz test2.xyz
will load the models 'test1.xyz' and 'test2.xyz', preventing recalculation of bonds between atoms in both. However:
bob@pc:~> aten test1.xyz --nobond test2.xyz
will only prevent recalculation of bonds for the second model. The reason for acting on switches and arguments in the order they are encountered on the command line is to allow for flexibility, especially when using Aten as a non-graphical processor (for examples of this type of usage, see the resources section of the website).
Note: The position of debug switches or those affecting the verbosity of the program has no bearing on the timeliness of their effect - they are dealt with first by Aten regardless of where they appear in the program's arguments.
- -b, --bohr
Specifies that the unit of length used in any models and grid data that follow is Bohr rather than Å, and should be converted to the latter.
- --batch
When specified, each subsequent command given with the -c or --command switches will be stored but not executed. Once all model files specified on the command-line are loaded, each stored command is executed on each loaded model, before being saved to the same filename. In this way, batch processing of multiple files can be performed. The GUI is not started if --batch is specified. If model export filters are not available for one or more loaded models, any changes will not be saved. It is advisable to work on a copy of the model files when using this command, or to export to a different format in order to preserve the original files (see the --export switch).
For example, to transmute all iron atoms into cobalt for a series of xyz files named 'complex_001.xyz', 'complex_002.xyz' etc.
bob@pc: ~> aten --batch -c 'select(Fe); transmute(Co);'
- --bond
Force recalculation of bonding in loaded models, regardless of whether the filter used any of the rebond commands (see the Bond Commands).
- -c <commands>, --command <commands>
Provides a command or compound command to execute. Commands should be enclosed in single quotes (to prevent the shell from misquoting any character strings) and individual commands separated with semicolons. Commands provided in this way can be used to set up Aten in the way you want it from the command line, perform operations on model files before loading the GUI, or perform operations on model files without loading the GUI at all.
For example, to start the GUI with a new model named 'cube' that has a cubic cell of 30 Å side length:
bob@pc:~> aten -c 'newmodel("cube"); cell(30,30,30,90,90,90);'Similarly, to load a model and make a duplicate copy of the atoms (pasted into the same model):
bob@pc:~> aten original.xyz -c 'selectall(); copy(); paste(10,10,10);'
In both cases the GUI initialises itself without being told - this can be prevented with the quit command. Consider the last example - to save the newly-expanded model and quit without ever launching the GUI:
bob@pc:~> aten original.xyz -c 'selectall; copy; paste(10,10,10); savemodel("xyz", "pasted.xyz"); quit;'Multiple sets of commands may be given:
bob@pc:~> aten source.xyz -c 'selectall; copy' target.xyz -c 'paste(10,10,10);'
Take care here - the commands provided act on the current model, i.e. the one that was most recently loaded. Of course, there are commands that select between the loaded models (see the list of model commands) but that would confuse this supposedly simple example, wouldn't it?
- --cachelimit <limit>
Sets the size limit for trajectory loading, in kilobytes. If an entire trajectory will fit into this cache, all frames in the trajectory are loaded immediately. If not, frames will be read from disk as and when required.
- --centre
Force translation of non-periodic models centre-of-geometry to the origin, even if the centre was not used in the corresponding filter.
- -d [<type>], --debug [<type>]
Enables debugging of subroutine calls so that program execution can be traced, or enables extra debug output from specific types of routines (if <type> is given). Warning - this creates a lot of output, most of which is incomprehensible to people with their sanity still intact, but is useful to track the program up to the point of, say, a hideous crash. Valid <type> options are listed in Output Types.
- --double <name=value>
Creates a 'floating' variable <name> which is of type 'double' and that can be accessed from any subsequent script, command, or filter. Note that declarations of variables with the same name made in scripts, commands and filters will override any passed value names in order to avoid conflicts and breaking of existing filters and scripts. The intended use is to be able to pass values easily from the command-line into scripts or one-line commands.
For example, in a bash shell:
bob@pc:~> for num in 10.0 50.5 100.0; do aten --double d=$num -c 'printf("Value is %f\n", d); quit();' done
- --export <nickname>
For each model file specified on the command line, it is loaded and immediately saved in the format specified by <nickname>. The GUI is not started.
For instance, to convert three DL_POLY CONFIG files and an xyz into mol2 format:
bob@pc:~> aten --export mol2 bio1.CONFIG bio2.CONFIG watercell.CONFIG random.xyz
If specified in conjunction with the --batch switch, commands may be applied to each loaded model file before it is saved.
- --exportmap <name=element,...>
Manually map assigned atom typenames in an expression to the names defined here when expressions are written to a file. For example:
bob@pc:~> aten --ff spc.ff data/test/water.xyz --exportmap "OW=Ospc,H=Hspc" -c 'saveexpression("dlpoly", "water.FIELD"); quit();'writes the water forcefield with the OW and HW atomtype names mapped to Ospc and Hspc respectively.
- --expression <file>
Loads the specified file as if it were an expression.
- -f <nickname>, --format <nickname>
For any forthcoming model files provided as arguments on the command line, the specified model import filter is used to load them, regardless of their filename extension (or, indeed, actual format). Since Aten tends not to determine file formats by looking at their content, this is useful for when you know that file is in a particular format, but with an extension that doesn't help Aten recognise it as such.
- --ff <file>
Loads the specified forcefield file, making it the current forcefield. If the desired forcefield is present in either Aten's installed data/ directory or in your own '.aten/ff' directory (see Installation), then just the filename need be given as Aten searches these locations by default.
- --filter <file>
Load the specified <file> as if it were a filter file, installing any filters defined within it. Any filters already loaded that have the same 'nickname', 'id' etc. will be hidden by those loaded from <file>. See Overriding Existing Filters for more information.
- --fold
Force folding of atoms to within the boundaries of the unit cell (if one is present) in loaded models, even if the command fold was not used in the corresponding filter.
- -i, --interactive
Starts Aten in interactive mode, where commands are typed and immediately executed. The GUI is not started by default, but may be invoked.
- --int <name=value>
Creates a 'floating' variable <name> which is of type 'int'. See the --double switch for a full description.
- -k, --keepview
Preserves the last stored view of models when the GUI starts, retaining any model rotations and camera transformations performed in scripts or on the command line (normally, the view is reset to display the entire model on startup).
- --keepnames
If specified, for each model loaded the original atom names in the file will be preserved as a series of forcefield types generated within a new forcefield created specifically for the model. Elements are still determined from conversion of the atom names, and may still be mapped with the --map option. This option is useful for quickly creating a skeleton set of forcefield types from an existing model with type names, or to allow quick import and export of typed configurations without requiring the original forcefield file to be loaded.
Note that the --keeptypes and --keepnames switches are mutually exclusive.
- --keeptypes
If specified, for each atom name converted to an element using a forcefield name match, the corresponding forcefield type will be assigned to the atom and fixed. Like the --keepnames switch, this is useful for preserving atom type data when importing certain models which do not store element information.
Note that the --keeptypes and --keepnames switches are mutually exclusive.
- -m <name=element,...>, --map <name=element,...>
Manually map atom typenames occurring in model files to elements according to the rules defined here. For example:
bob@pc:~> aten --map 'CX=C,N_=P'
will result in atoms called 'CX' being mapped to carbon, and atoms called 'N_' mapped to phosphorus (for whatever reason). These mappings are attempted prior to any z-mapping scheme defined in the filter, and so will take precedence over standard typename-to-element conversions.
- -n
Create a new, empty model.
- --nobond
Prevent recalculation of bonding in loaded models, overriding filter directives. This basically means that, if a filter tries to run the rebond command, then specifying --nobond will prevent it.
- --nocentre
Prevent translation of non-periodic models centre-of-geometry to the origin, overriding filter directives.
- --nofold
Prevent initial folding of atoms to within the boundaries of the unit cell (if one is present) in loaded models, overriding the use of the fold command in the corresponding filters.
- --nofragments
Prevent loading of fragments from both standard ans user locations on startup.
- --nofragmenticons
Prevent generation of fragment icons, used in the Fragment Library Window.
- --noincludes
Prevent loading of global includes on startup.
- --nopack
Prevent generation of symmetry-equivalent atoms from spacegroup information in loaded models, overriding any occurences of the pack command is used in the corresponding filter.
- --noqtsettings
Don't read in any system-stored Qt settings on startup (such as window positions, toolbar visibilities etc.) using the defaults instead.
- --pack
Force generation of symmetry-equivalent atoms from spacegroup information in loaded models, even if the command pack was not used in the corresponding filter.
- --pipe
Read and execute commands from piped input on startup.
- -s <file>, --script <file>
Specifies that the script file is to be loaded and run before moving on to the next command-line argument. A script file is just a plain text file that contains sequence of commands to be executed, written in the command language style.
- --string <name=value>
Creates a 'floating' variable <name> which is of type 'string'. See the --double switch for a full description.
- -z <maptype>, --zmap <maptype>
Override the names to elements z-mapping style defined in file filters. For a list of possible mapping types see ZMapping Types.
Table of Contents
A list of formats currently supported by Aten follows as well as the file extensions and assigned filter ID. Remember, adding support for other codes is in your hands with Aten's filters system.
Table 4.1. Supported Model Formats
| Format | Extension(s) | Nickname | ID | Read? | Write? | Notes |
|---|---|---|---|---|---|---|
| Aten Keyword Format | *.akf | akf | 1 | Yes | Yes | Plain-text format used by Aten |
| Cambridge Structural Database Service | *.dat|*.fdat | csd | 7 | yes | no | |
| Crystallographic Information File | *.cif | cif | 8 | yes | no | |
| DL_POLY Configuration | *CONFIG | *REVCON | dlpoly | 2 | yes | yes | |
| GAMESS-US Output (Log) | *.log | gamuslog | 11 | yes | no | |
| GAMESS-US Input File | *.inp | gamusinp | 5 | yes | yes | Cartesian coordinates and Z-Matrices |
| Gaussian Input File | *.gjf | gjf | 17 | no | no | Cartesian coordinates and Z-Matrices |
| Gromacs Configuration | *.gro | gro | 14 | yes | yes | |
| Mopac Archive File | *.arc | arc | 16 | yes | no | |
| Mopac Control File | *.mop | mop | 4 | yes | yes | Including periodic systems. Cartesian coordinates only. |
| MDL Molfile | *.mol | mol | 10 | yes | no | |
| MSI (Cerius2) Model File | *.msi | msi | 12 | yes | no | |
| Protein Databank (PDB) | *.pdb | pdb | 13 | yes | no | |
| Quantum Espresso | *.in | in | 15 | yes | yes | Assumes ibrav=0 |
| SIESTA Flexible Data Format | *.fdf | siesta | 9 | yes | yes | |
| Tripos Sybyl Mol2 | *.mol2 | mol2 | 6 | yes | yes | |
| XMol XYZ | *.xyz | xyz | 3 | yes | yes |
Table 4.2. Supported Trajectory Formats
| Format | Extension(s) | Nickname | Notes |
|---|---|---|---|
| DL_POLY Formatted/Unformatted Trajectories | *HISu | *HISf | HISTORY | dlpoly | |
| GAMESS-US Trj File | *.trj | trj | QM atoms in MD and IRC runs |
| PDB Trajectory (Multiple PDB file) | *.pdb | pdb | |
| XYZ Trajectory (Multiple XYZ file) | *.xyz | xyz |
Filters determine the model/trajectory, grid/surface, and forcefield expression formats that Aten can read and write. They are essentially small programs written in the style of C, and are stored as plain text files (source files, if you like) on disk and loaded and 'compiled' when Aten starts up. This has several advantages:
Users may add support for their own particular formats at will.
No recompilation of Aten is necessary when adding new filters or adjusting old ones
Potentially any file format can be supported, even binary formats
With this flexibility, of course, comes some modest disadvantages:
Speed - although the C-style code contained within filters is 'compiled', it is by no means as fast as proper C code
File formats that need particularly awkward operations requiring a more 'complete' C language may be difficult to implement
These two points aside, though, filters make Aten a powerful and flexible tool, adaptable to conform to many different program/code input and output formats.
As mentioned, the programming language used by filters is essentially a subset of C, implemented with the same syntax and style (see command language overview for a description), but includes several hundred custom commands to control Aten in order to build up atoms in models, access data etc. So, if you already know C or C++, writing a filter should be a breeze. If you don't, its not too difficult to pick up, and there are plenty of filters already written to use as worked examples.
When a filter is called in order to write out data, no references to any of the current (i.e. displayed or selected) data are sent directly to the filter itself. Instead, this must be probed by using the Aten master reference available to all scripts, commands and filters. Within &aten the currently displayed model may be deduced, as well as the current frame (if a trajectory is associated). In most cases for model export filters, the path 'aten.frame' should be used to determine the model data that should be written.
A filter is a plain text file containing one or more C-style programs that permit the input or output of data in a specific format. For example, a purely model-oriented filter file may contain two filters, one to read in files of the specified format, and one to write the data out again. Each individual filter is given a short nickname, a shell-style glob, and possibly several other bits of data that allow files to be recognised (if the file extensions defined for it are not enough).
Different filters that recognise the same file type may be provided if necessary, each performing a slightly different set of import or export commands (if it is not convenient to do so within a single filter), and all will appear in the drop-down list of filters in file dialogs within the program. Note that in batch, command-line, or scripting mode, filters are either selected automatically based on the filename, extension, or contents, or picked by matching only the associated nickname. In the former case, the first filter that matches the extension is used.
A basic stock of filters is provided with Aten and installed with the program - several default locations are searched for these filters on startup. Alternatively, if Aten fails to find these filters, or you wish to point it to a suitable directory by hand, either the $ATENDATA environment variable may be set to the relevant path (on Windows, this variable is set by the installer) or the --atendata command-line option may be used to provide the path.
Additional filters may be placed in a user's '.aten' directory, e.g. ~bob/.aten/filters/.
Filters that possess the same ID or nickname as other filters of the same type may be loaded simultaneously, with the last to be loaded taking preference over the other. Thus, an importmodel filter nicknamed 'xyz' from Aten's installed filter stock will be overridden by one of the same nickname present in a user's '.aten/filters' directory. Similarly, both these filters will be overridden by one of the same nickname loaded by hand from the command line (with the --filter switch). Note that this only holds true for filters referenced by nickname or determined automatically by Aten when loading data - from the GUI all filters are available in the file dialogs.
Filter definitions are made in a filter file in a similar way to declaring a user subroutine or function. The 'filter' keyword marks the start of a filter definition, and contains a list of properties in parentheses that define the subsequent filter, its name, and how to recognise the files (from their filenames and/or contents) that it is designed for. The definition of the filter to import XYZ-style model data is as follows:
filter(type="importmodel", name="XMol XYZ Coordinates", nickname="xyz", extension="xyz", glob="*.xyz", id=3)
{
commands
...
}
The comma-separated list of properties defines the type of filter ('type="importmodel"') and how to recognise files of that type (e.g., 'extension="xyz"'), amongst other things. The full list of possible properties is as follows:
Table 4.5. Filter properties
| Property | Description |
|---|---|
| exact | Comma-separated list of filenames that are of this type |
| extension | Comma-separated list of filename extensions that indicate files of this type |
| glob | Shell-style glob to use in file fialogs in order to filter out files of the described type |
| id | Numerical ID of the filter to enable partnering of import/export filters for files of the same type |
| name | Descriptive name for the filter, shown in file dialogs etc. |
| nickname | Short name used by commands in order to identify specific filters |
| search | Provides a string to search for in the file. If the string is found, the file is identified as being readable by this filter type. The number of lines searched is governed by the within property |
| type | Defines the kind of filter that is described (i.e. if it loads/saves, acts on models/grid data etc.) so that Aten knows when to use it. Must always be defined! |
| within | Specifies the number of lines to search for any supplied search strings |
| zmap | Determines which zmapping style to employ when converting atom names from the file |
Occasionally (and annoyingly) files have no extension at all, instead having short, fixed names, which must be checked for literally when probing files. This command defines one or more exact filenames that identify files to be acted on by this filter section. Multiple names may be given, separated by commas or whitespace. Exact filename matching is case-insensitive.
For example:
exact="coords"
associates any file called 'coords' to this filter.
exact="results,output"
associates any files called 'results' or 'output' to this filter.
Sets the filename extension(s) that identify files to be read / written by this filter. When files are being probed for their type, in the first instance the filename is examined and the extension (everything after the last '.') is compared to those defined in filter sections by this command. Multiple file extensions may be given, separated by commas or whitespace. File extension matching is case-insensitive.
For example:
extension="xyz"
means that files with extension '.xyz' will be recognised by this filter.
extension="xyz,abc,foo"
means that files with extensions '.xyz', '.abc', and '.foo' will be recognised by this filter.
Sets the file dialog filter extension to use in the GUI, and should be provided as a shell-style glob.
For example:
glob="*.doc"
filters any file matching '*.doc' in the relevant GUI file selector dialogs.
When separate import and export filters for a given file type have been provided it is prudent to associate the pair together so that Aten knows how to save the data that has just been loaded in. Each filter has a user-definable integer ID associated with it that can be used to link import and export filters together. For example, if a model import filter has an ID of 7, and a model export filter also has this ID, then it will be assumed that the two are linked, and that a model saved with export filter 7 can be subsequently loaded with import filter 7. If the ID for a filter is not set it defaults to -1, and it is assumed that no partner exists and the file cannot be directly saved back into this format.
For example:
id =13
![]() | See Also: |
|---|---|
|
Sets the long name of the filter, to be used as the filetype description of files identified by the filter. This name will appear in the file type lists of file dialogs in the GUI, and also in the program output when reading / writing files of the type.
For example:
name="SuperHartree Coordinates File"
Sets a nickname for the filter, which allows it to be identified easily in the command language and, importantly, from the command line. It should be a short name or mnemonic that easily identifies the filter. No checking is made to see if a filter using the supplied nickname already exists.
For example:
nickname="shart"
sets the nickname of the filter to 'shart'.
nickname="zyx"
sets the nickname of the filter to 'zyx'.
Occasionally, checking the contents of the file is the easiest way to determining its type, and is probably of most use for the output of codes where the choice of filename for the results is entirely user-defined. For example, most codes print out a whole load of blurb and references at the very beginning, and usually searching for the program name within this region is enough to identify it. For files that are only easily identifiable from their contents and not their filename, plain text searches within files can be made to attempt to identify them. Individual strings can be given to the 'search' keyword, and multiple 'search' keywords can be provided. The default is to search the first 10 lines of the file for one or more of the defined search strings, but this can be changed with the within property.
For example:
search="UberCode Version 20.0"
matches the filter to any file containing the string 'UberCode Version 20.0' within its first 10 lines (the default).
search="SIESTA"
searches the first 10 lines of the file for the string 'SIESTA'.
search=""GAMESS VERSION = 11 APR 2008 (R1)"
attempts to identify output from a specific version of GAMESS-US.
The 'type' keyword must be provided an all filter definitions - an error will be raised if it is not. It specifies which class of data the filter targets (e.g. models, grid data etc.) and whether it is an import or export filter. A given filter may only have one 'type'. The possible values for 'type' are:
Table 4.6. Filter types
| Type | Description |
|---|---|
| exportexpression | Describes how to export forcefield descriptions (expressions) for models |
| exportgrid | Describes how to export grid-style data |
| exportmodel | Describes how to write out model data |
| exporttrajectory | Filter suitable for the export of trajectory data |
| importexpression | Describes how to load in forcefield-style expressions |
| importgrid | Describes how to read gridded volumetric or surface data from files. Any grids created in these sections must have the finalisegrid command called on them, otherwise they will not be registered properly within the program. |
| importmodel | Describes how to import model data, including atoms, cell and spacegroup data, bonds, glyphs etc. Any models created in 'importmodel' sections must have the finalisemodel command called on them, otherwise they will not be registered properly within the program. |
| importtrajectory | Read frames from trajectory files. See the section on trajectories for additional information on how trajectories are handled within Aten. |
For example:
type="importgrid"
type="exportmodel"
Defines the number of lines to search for any 'search' string definitions (default is 10).
For example:
within=50
specifies that the first 50 lines should be searched for identifying strings.
By default, it is assumed that the commands which create new atoms will be given a proper element symbol from which to determine the atomic number. Case is unimportant, so 'na', 'Na', and 'NA' will all be interpreted as atomic number 11 (sodium). Where element symbols are not used in the model file, there are several alternative options that tell these commands how to convert the element data they are passed into atomic numbers. For example, the 'ff' style is particularly useful when loading in coordinate files which contain forcefield atom type names that do not always correspond trivially to element information (e.g. DL_POLY configurations).
For example:
zmap="numeric"
indicates that atomic numbers are provided in place of element names and no conversion should be performed.
![]() | See Also: |
|---|---|
|
When writing data, in many cases all the information that the filter wants to write is contained within the current model, for example when outputting simple file formats such as xyz or Aten's own akf. In other cases ther may be additional data for which would be nice to have some control over, and which lays beyond atoms and bondes. The best example is probably the input formats for nearly all ab initio codes which contain (as well as the atomic coordinates) statements and additional data necessary to control the running of the code itself. It is not a problem to write out 'static' lines of control commands from the output filter, but it would of course also be nice to be able to tailor this output from within the GUI (or from the command-line). This can be achieved by assigning values to variables in the filter through the use of filter options.
Any number of options can be defined, and some relatively simple but useful control over the layout of the related GUI controls is possible.
A filter option is defined in the following way within a filter file:
vartype var = option(string name, string type, ...);
The specified name is the text that will appear next to the control in the GUI. The type of control governs the type of GUI widget that will appear (see the list of types below). Following these two mandatory specifications, any required values must then be given in the correct order, after which any other non-control-specific options may be given, each surrounded by quote marks and in the format 'option' or 'option=value'. All of these are to do with the layout of controls (see the option layout section).
For example, we we can set a string variable with one of several possible values using a combo box control in the GUI. When saving a file in a new format (or by selecting 'Export Options' from the 'File' menu) a dialog is shown in the GUI which contains all of the defined controls in the relevant filter, from which options can be set before the file is written. This would be written as follows in the filter file:
string runtype = option(""Run Type"", ""combo"", "check,run,restart,analyse", 2);
Note that when the filter code actually runs, the target variable 'runtype' will be set with whatever value the control holds in the GUI (or the default if running from the command-line) - no questions are asked interactively at the points at which the 'option()' commands exist. So, the variable here will be guaranteed to take on one of the possible values 'check', 'run', 'restart', or 'analyse'.
All available control types are listed in the following table. Note that all of the required data items must be given as arguments following the control type string in the options.
Table 4.7. Option Types
| Type | Required Data | Description |
|---|---|---|
| check | int state = 0 or 1 | A checkbox whose state is either off or on. Returns an integer value ('1' if the control is ticked, '0' otherwise). |
| combo | string items = "item1,item2,..." | A combobox is a drop-down list of predefined items. The text of the selected item is returned. |
| int default = 1-nitems | ||
| doublespin | double min | Control allowing a real number to be input, strictly within the min/max range, and with start value specified. Up/down arrows to the side of the control adjust the current value by the 'step' value. A real number is returned. |
| double max | ||
| double start | ||
| double step | ||
| edit | ||
| intcombo | string items = "item1,item2,..." | Exactly the same as the 'combo' control above, but instead returns an integer value corresponding to the index of the selected entry. |
| int default = 1-nitems | ||
| intspin | int min | Control allowing an integer number to be input, strictly within the min/max range, and with start value specified. Up/down arrows to the side of the control adjust the current value by the 'step' value. An integer number is returned. |
| int max | ||
| int start | ||
| int step | ||
| label | None. | A simple text label, with no associated value. |
| radio | string group | A radio control is part of a set of checkable items, of which only one can be selected at any one point. The parent group does not need to be created beforehand - if the named group does not currently exist, it will be created. Note that the group widget itself is not visible, and so many contain any number of radio buttons spread over many tabs and pages. |
| int checked | ||
| radiogroup | None. | A radio group is a collection of radio buttons, of which only one can be selected at any one time. A radiogroup only provides the means to collect a set of radio buttons together, and it not itself visible. The index of the selected item is returned. |
| stringradiogroup | None. | Same as 'radiogroup', except that the text label of the selected item is returned. |
The layout of specified GUI controls is done in as simplistic a manner as possible, while still offering reasonable control over the positioning of elements. If no layout options are specified, all defined controls will be added one after the other in a single row, left-to-right, possibly stretching further than the screen can handle. At the very least, the 'newline' command should be used to force a control option to start a new 'row' of controls in the GUI. All controls are added into a grid (Qt's QGridLayout) so that controls always line up nicely. It is also possible to group controls together in tabbed widgets and group boxes.
All controls (except the plain label) are two 'units' wide on the grid, and this should be borne in mind when stretching a single control to be the same width as a set of controls on a different row.
Table 4.8. Layout Commands
| Option | Value | Description |
|---|---|---|
| centre | none | By default, all labels are right-aligned so they sit next to their associated controls. This forces the label to be aligned in the centre instead. |
| disabled | none | All controls are enabled by default. Specifying 'disabled' will gray-out the control. |
| group | name | To place controls inside a groupbox instead of just adding them to the window the 'group' property can be set. For instance, to add a control to a group box called 'Run Options' you can specify 'group=Run Options' as an argument. Note that the group name is displayed as the title of the group in the GUI. If the named group box does not exist then it is created in the next available position (i.e. after the last created control). Otherwise, the control is added to the existing group box in the next available position. |
| labelspan | ncols | A label takes up a single column by default. The 'labelspan' property can be set to override this. For example, adding 'labelspan=4' to the list of arguments will force the label to span four columns instead of one. |
| left | none | By default, all labels are right-justified so they sit next to their associated controls. This forces the label to be aligned to the left instead. |
| newline | none | All controls are added to the immediate right of the last control created, unless the 'newline' command is given. Then, the control will be added at the beginning of a new row. |
| parentspan | ncols | A group box or tab control takes up a single column by default. The 'parentspan' property can be set to override this at the time of creation of the group/tab control. For example, adding 'parentspan=2' to the list of arguments will force the group box or tab widget to span two columns instead of one. |
| span | ncols | All controls take up a single column by default. The 'span' property can be set to override this. For example, adding 'span=5' to the list of arguments will force the control to span five columns instead of one. The associated label will still use only one column, unless this is overridden by the 'labelspan' property. |
| state | value@name?action | Some control over the states / content of other controls is possible using the 'state' command. The 'value' part indicates when the change detailed in 'action' is performed on the control 'name'. Since a direct equality comparison between the current value of the control and the state-change 'value' is made, only integer and string values make sense here. The control 'name' is the target control for the specified 'action', where 'action' is one of 'checked', 'disable', 'enable', 'items', or 'originalitems'. For those actions that take a property value (e.g. 'checked') the format of the line is then 'value@name?action=property'. |
| tab | page@name | Similar to the 'group' command, this adds the widget to an existing page in an existing tab widget, or creates one or both and adds it there. For example, to add a control to a page named "Extra" in a tab widget called "My Tabs", you can specify 'tab=Extra@My Tabs' as an argument. |
Trajectory files usually mean one of two things - either a sequence of frames from a molecular dynamics simulation trajectory, or a sequence of configurations from a geometry optimisation of some kind. Either way, both boil down to the same thing from Aten's perspective, that is a set of models in a sequence. In terms of displaying such a set of models, either they may be loaded as individual models (i.e. having a separate tab in the GUI) or the sequence of models may be associated to a single 'master' or 'parent' model. Most commonly, the latter is the preferred method (especially when large numbers of models are present in the trajectory).
There are two related ways to get this data into Aten. From the perspective of molecular dynamics simulations, the 'parent' model or configuration and the trajectory frames are stored in separate files. In this case, the model can be loaded first, and then the trajectory file attached or associated to this model afterwards. From the perspective of geometry optimisations, for example, the parent configuration (i.e. the starting point of the optimisation) and the sequence of coordinates are most often stored in the same output file. In this case, the importmodel filter can detect the presence of the additional trajectory frames and manually attach them to the parent model. The following sections explain the details of how both methods work.
DL_POLY, being a molecular dynamics code, stores its configuration and trajectory data in separate files. Filters are supplied with Aten that read in DL_POLY trajectories, and so this example will revolve around those filters.
Thus far, it has been implicity stated that the 'master' configuration and the trajectory files come necessarily as a pair - the master configuration is read in, and then the trajectory associated to it. This implies that the trajectory file is somehow tied to the master configuration - perhaps the trajectory file does not contain information such as the number of atoms or element data, and so a 'reference' configuration is necessary? Of course, this may not always be the case, and it is possible that some trajectory formats will store all the necessary information needed in order to fully generate the trajectory configurations. DL_POLY trajectories do, in fact, contain all the necessary data, but even so the master configuration is still used as a template for the trajectory data, and is used to check that the correct number of atoms are present etc. It comes down to a matter of preference as to whether the master configuration should be demanded, or whether the trajectory can itself be associated to any (even an empty) model. Remember, 'importtrajectory' filters always attach the trajectory data to an existing model.
An 'importtrajectory' filter is written in a slightly different way to other filter types. Since trajectory files may contain header data which is written once at the beginning of the file, preceeding the frame data, there are potentially two separate sets of data to read from trajectory files - header data and (individual) frame data. So, rather than putting the code to read this data directly in the main body of the filter, two functions should be defined instead, one for reading the header, and one for reading an individual frame. Note that, if a given trajectory format does not contain a header, the corresponding function may be left 'empty' (but must still be defined). The functions must be called 'readheader' and 'readframe' respectively, take no arguments, and must return an integer. A template for an 'importtrajectory' filter is thus:
filter(type='importtrajectory', name="Example Filter Template")
{
int readheader()
{
// Code to read header data goes here
}
int readframe()
{
// Code to read frame data goes here
}
}
The functions must take responsibility for informing Aten when the desired data cannot be read. Both should return a value of '1' if the data was read successfully, and should return '0' if an error is encountered.
When opening a trajectory file with an 'importtrajectory' filter, the first thing Aten does is attempt to read any header information from the file by calling the 'readheader' function defined in the filter. Since a trajectory file may not contain a header, and consists simply of individual frames back to back, in these situations the readheader() function defined in the filter should not read any data. The filter definition then becomes simply:
filter(type='importtrajectory', name="Example Filter Template")
{
int readheader()
{
// No header, so just return
return 1;
}
int readframe()
{
// Code to read frame data goes here
}
}
Here, the readheader() function always succeeds, so Aten always thinks it has successfully read a header, even if there isn't one.
If readheader() is successful, Aten proceeds to read the first frame (by calling the readframe() function) in order to get an idea of the size of an individual frame, and hence the total number of frames in the trajectory. Of course, this assumes that all frames take up the same number of bytes in the file, and may not always be the case, especially for plain-text trajectory files. Thus, the frame estimate output by Aten should not necessarily be taken as gospel.
Unless an error is encountered when reading the test frame (i.e. readframe() returns '0') the trajectory file is then 'rewound' to the end of the header section (start of the frame data). One of two things then happens. Since trajectory files are typically enormous (hundreds or thousands of megabytes) then it is unwise to try and load the whole trajectory into memory at once. Aten knows this, and from the estimated frame size also knows roughly how big the whole trajectory is. If the total trajectory file size is greater than an internally-defined limit (the ''trajectory cache size'') then only a single frame is stored at any one point. If the total size is smaller then this limit, the whole trajectory is cached in memory. Both have their advantages and disadvantages, as listed in the following sections.
If the trajectory is too big to be stored in memory, Aten only holds a single frame in memory at any one time. This means that:
Memory use is minimised - single frame stored = less memory used!
Performance is slower - moving between frames means data must be read from disk
Edits are forgotten - changes (both atomic and stylistic) made to the loaded frame are forgotten when a different frame is read
Aten tries to minimise the seek time between frames by storing file offsets of frames it has already read in. However, since trajectory frames can be different sizes Aten never tries to 'jump' ahead in the file based on the size of a single frame. Skipping immediately to the final frame in the trajectory will, thus, read all frames along the way and store file offsets for all frames. Then, seeking to any individual frame is a much quicker process.
Although style and editing changes are forgotten between frames, the overall camera view of the model is linked to that of the master configuration and so is retained between frames. If the trajectory cannot be cached and you require changes (edits or styles) to be made to each frame (e.g. for the purposes of making a movie of the trajectory) then a script is the way to go (load frame, apply edits, save image, etc.).
If the trajectory is small enough to be stored in memory, Aten reads in all frames at once. This means that:
Memory use is increased
Performance is optimal - speed of moving between frames is governed only by the time taken to draw the model
Edits are retained - edits can be made to individual frames and will be remembered on moving to a different frame
The size of the cache can be adjusted either from the command line with the --cachelimit switch or by setting the 'cachelimit' member of the &prefs. No check is made of the new cache limit with respect to the memory available on the machine on which Aten is running, so use with care.
In the current versions of Aten, the total trajectory size is determined from the size of the frame on disk, whereas it would be more appropriate to use the size of the frame in memory. This will change in a future release.
Formatted output in Aten is based largely on string formatting in C, so if you're familiar with C then this should be a breeze. If you're a Soldier of Fortran, then the principles are very similar. If you're familiar with neither, then now's the time to learn.
![]() | See Also: |
|---|---|
|
Formatted output corresponds to output to either the screen or to files, and is used in the following commands:
Table 4.9. Formatted output commands
| Command | Function |
|---|---|
| error | Write a message to the screen and immediately terminate execution of the current script / filter / command structure |
| printf | Write a message to the screen |
| verbose | Write a message to the screen, provided verbose output mode is on |
| writelinef | Write a formatted line to the current output file |
| writevarf | Write a formatted string to a variable (equivalent to the C 'sprintf' command) |
Note that all are called the same as their ((Delimited Reading and Writing|delimited counterparts)), but with the addition of an 'f' at the end of the name.
Formatting a string for output, as mentioned elsewhere on numerous occasions, works the same as for C. The C 'printf' command (equivalent to the command of the same name in Aten) takes a character string as its first argument, and at its simplest, this is all that is required:
printf("Hello");
This prints 'Hello' to the screen (minus the quotes). Importantly, however, a newline character is not printed, meaning that the next thing you try and printf will appear on the same line. For instance:
printf("Hello");
printf("There.");
would output:
HelloThere.
The end of a character constant in the printf command does not implicitly mean 'and this is the end of the line' - you must indicate the end of the line yourself by placing '\n' at the point where you wish the line to end. So:
printf("Hello\n");
printf("There.");
would output:
Hello There.
Newlines (\n) are an example of escaped characters - the backslash '\' indicates that the following character, in this case 'n', is not to be treated as a normal 'n', but instead will take on its alternative 'meaning', in this case a newline. There are one or two other escaped characters recognised - see Escaped Characters for a list. Note that the newline token can appear anywhere in the string, and any number of times. So:
printf("Hello\nThere\n.");
would output:
Hello There .
Being able to print simple text strings is good, but not nearly enough. The first argument to the 'printf' command must always be a character string, but any number of additional arguments may be provided. Now, these additional arguments may be number constants, other character strings, variables, etc., and may be output in the resulting string by referencing them with 'specifiers' placed within the first example. One example of a specifier is '%i' which is shorthand for saying 'an integer value' - if used within the character string provided to printf, the command will expect an integer constant or variable to be provided as an additional argument. For example:
printf("This number is %i.\n", 10);
will print
This number is 10.
Similarly,
int value = 1234;
printf("Constant is %i, variable is %i.\n", 10, value);
will print
Constant is 10, variable is 1234.
There are other specifiers suitable for different types of data. The way data is presented by the specifier in the final output can also be controlled (e.g. for numerical arguments the number of decimal places, presence of exponentiation, etc., can be defined).
Formatted input corresponds to input from either files or string variables, and is used in the following commands:
Table 4.10. Formatted input commands
| Command | Function |
|---|---|
| readlinef | Read a formatted line from the current input file |
| readvarf | Read a formatted string from a variable |
Note that the meaning of the formatting string changes slightly here - in essence, the type and formats of the specifiers are used to break up the supplied string into separate arguments, which are then placed in the provided corresponding variable arguments. When reading in string data, note that blank characters are significant and will be retained. To strip trailing blank characters (spaces and tabs) when reading a fixed-length string in a format, supply the length as a negative number.
The list of allowable variable specified corresponds more or less exactly to that found in C, with some small omissions and minor inclusions. For a full list see the reference page at cplusplus.com or cppreference.com. The list of printf features that are not (currently) supported in Aten are as follows:
The pointer specifier '%p' is not supported. To print out reference addresses, use '%li'.
The single-character specifier '%c' is not supported.
Output of long doubles by prefixing a specifier with 'L' (e.g. '%Le') is not supported.
As well as the mostly complete standard set of specifiers provided by C, Aten also includes some other useful specifiers that may be used in formatted input and output.
Table 4.11. Extra read/write specifiers
| Specifier | Meaning |
|---|---|
| %* | Relevant to formatted input only. Discard the next item, regardless of its type. A corresponding variable argument need not be provided |
| %r | Read characters (starting from the next delimited argument) until the end of the input line is encountered (i.e. 'rest-of-line' specifier). A corresponding string variable should be provided |
Table 4.12. Escaped characters in format strings
| Escape Sequence | Meaning |
|---|---|
| \n | Print newline (next character will appear on the next line) |
| \r | Carriage return |
| \t | Tab character |
Formatting strings (or 'format specifiers') can be used to specify the layout of data items on a line when reading or writing data, but if the data are separated by whitespace characters such as spaces or tabs (or, alternatively, commas), such 'delimited' data can be read in more easily. In such cases, it is not necessary to know beforehand the number of characters taken up by each item on the line, since the delimiters separate adjacent data items. A simplified method for reading and writing can be employed in these cases.
Commands providing delimited reading and writing are:
Table 4.13. Delimited read/write commands
| Command | Function |
|---|---|
| readline | Read delimited items from a source file, placing into the variables provided |
| readnext | Read the next delimited item from a source file, placing into the variable provided |
| readvar | Read delimited items from a source variable, placing into the variables provided |
| writeline | Write the supplied items to a single line in the output file, separating them with whitespace |
| writevar | Write the supplied items to a supplied string variable, separating them with whitespace |
Note that all are called the same as their formatted counterparts, but minus the 'f' at the end of the name.
Consider this example datafile:
Na 0.0 1.0 0.0 Cl 1.0 0.0 0.0 Na 0.0 -1.0 0.0
Since the data items (element type and coordinates) are separated by whitespace, we need only provide the target variables to the relevant command - a formatting string, as is demanded by the printf command, is not required. Using the readline command, the following code will parse this data correctly:
double x,y,z;
string el;
while (!eof()) { readline(el,x,y,z); newatom(el,x,y,z); }
The variables el, x, y, and z will, at any one time, contain the element type and coordinates from one line of the file. In an analogous manner, the data may be written out again with the corresponding writeline command:
for (atom i = aten.model.atoms; i; ++i) writeline(i.symbol,i,rx,i.ry,i.rz);
Each line will have the individual data items separated by a single space.
The readnext command reads in a single delimited item from a source file, preserving the remainder of the input line for subsequent operations. If there is no data left on the current line, a new line is read and the first delimited item is returned. The example above might be written in a slightly clunkier form as:
double x,y,z;
string el;
while (!eof())
{
readnext(el);
readnext(x);
readnext(y);
readnext(z);
newatom(el,x,y,z);
}
For all delimited reading operations, items of data read from the line are converted automatically into the type of the destination variable. So, the atom coordinates read in above, which are put into 'double'-type variables, could equally well be put into string variables. Standard C routines are used to convert data items in this way, and only some conversions make sense. For instance, attempting to read an item which is a proper character string (such as element symbol/name data) into a double or integer variable does not make sense. No error message will be raised, and the variables will likely be set to a value of zero (or whatever passes for 'zero' in the context of the type).
For all delimited writing operations, a suitable standard format specifier is chosen with which to write out the data.
Table of Contents
Aside from a powerful command-line tool, Aten has a GUI which is able to control must of the functionality available within the code. It is written in a style similar to other editing programs - at its simplest it is just a visualiser, but models can also be created and edited interactively.
Most of the main window is taken up with a canvas which is used to display and edit models and take input from the user. A set of tabs directly above the main view shows the title of each loaded model currently available. The model being displayed on the main canvas (the 'current' model) is the one for which all input and editing tools will act on.
Each of the mouse buttons has a different action on the canvas, each of which can be set to the users taste in the preferences (menu item Settings->Preferences on Linux/Windows). In addition the Shift, Ctrl, and Alt keys modify or augment these default actions performed by the mouse. At the foot of the window is a message box (where output and errors are thrown) and a status bar reflecting the content of the current model displayed, listing the number of atoms and the number of selected atoms (bold value in parentheses, but only if there are selected atoms), the mass of the model, and the cell type and density (if the model is periodic).
Toolbars at the top of the window contain most commonly-used tools (strangely enough...), for example drawing atoms and bonds, selecting atoms etc. Not all are shown by default - right-clicking in the general region of the toolbars brings up a context menu allowing the available toolbars to be shown and hidden. A toolbar of icons starting off on the right-hand side of the window provides quick access to different Tool Windows for more complex building and editing tools.
The mouse is, of course, the main method of interaction when using the GUI. Here is described which mouse-parts do what...
At its most basic Aten's main view acts as a visualiser allowing models to be rotated, zoomed in and out, and drawn in various different styles. By default, the right mouse button is used to rotate the model in the plane of the screen (right-click and hold on an empty area of the canvas and move the mouse) and th e mouse wheel zooms in and out. Note that right-clicking on an atom brings up the ((Atom Context Menu)). The middle mouse button translates the model in the plane of the screen - again, click-hold and drag.
These rotation and translation operate only the position and orientation of the camera, with no modifications made to the actual coordinates of the model. The view can be reset at any time from the main menu (View->Reset) or by pressing Ctrl-R. Both the main menu (View->Style) and the View toolbar allow the drawing style of models to be changed between stick, tube, sphere, scaled sphere, and individual. The last option allows different view styles to be set for different atoms.
The Ctrl key changes the normal behaviour of the rotation and translation operations and forces them to be performed on the coordinates of the current atom selection instead of the camera. The centroid of rotation is the geometric centre of the selected atoms.
Atom selection or picking is performed with the left mouse button by default - single-click on any atom to highlight (select) it. Single-clicks perform 'exclusive' selections; that is, all other atom(s) are deselected before the clicked atom is (re)selected. Clicking in an empty region of the canvas deselects all atoms. Clicking on an empty space in the canvas, holding, and dragging draws a rectangular selection region - releasing the mouse button then selects all atoms within this area. Again, this selection operation is exclusive. Inclusive selections (where already-selected atoms are not deselected) are performed by holding the Shift key while performing the above operations. Furthermore, single-clicking on a selected atom while holding Shift will deselect the atom.
To summarise mouse control, standard settings out of the box are:
Table 5.1. Mouse Button Actions
| Button | w/Modifier | Action | |
|---|---|---|---|
| Left | None | Click on individual atoms to select exclusively | |
| Click-hold-drag to exclusively select all atoms within rectangular region | |||
| Shift | Click on individual atoms to toggle selection state | ||
| Click-hold-drag to inclusively select all atoms within rectangular region | |||
| Right | None | Click-hold-drag to rotate camera around model | |
| Click on atom to show context menu | |||
| Shift | Click-hold-drag to rotate view around z-axis (perpendicular to plane of screen) | ||
| Ctrl | Click-hold-drag to rotate selection in local (model) space | ||
| Ctrl+Shift | Click-hold-drag to rotate selection around z-axis in local (model) space | ||
| Middle | None | Click-hold-drag to translate camera | |
| Ctrl | Click-hold-drag to translate selection in local (model) space |
The primary actions of the mouse buttons may be swapped around at will to suit the individual users tastes (see ((GUI Preferences))). In addition, the mouse toolbar (see Toolbars) permits the primary function of the left mouse button to be changed on the fly (useful on systems which only have one mouse button).
Many of Aten's commonly-used functions are accessible through individual toolbars. At the outset, several of these are visible at the top of the main window (as well as the tool window toolbar to the right), but may be repositioned around the main window as necessary. Right-clicking on a toolbar area brings up a list of all available toolbars, allowing them to be shown and hidden. The last state of the toolbars (positions and visibility) is restored the next time Aten is started.
Bonds between atoms can be calculated and removed en masse with the bonding toolbar, encompassing either the whole model or just the current atom selection. The bond tolerance used in the calculation of bonds can be set with the spin control. Automatic detection of multiple bonds can be performed with the augment tool.
Table 5.2. Bonding Toolbar Icons
![]() | Recalculate bonding in the current model |
![]() | Clear bonding in the current model |
![]() | Recalculate bonding in the current model, restricted to the current atom selection |
![]() | Clear all bonds between atoms in the current selection |
![]() | Based on the current connectivity, determine multiple bonds |
| N/A | The spinbox controls the bonding tolerance to use when automatically determining which atoms are bound - if the distance between two is less than the sum of their defined radii multiplied by this factor, then a bond exists |
The primary function of the build toolbar is to allow for drawing, deletion, and transmuting of individual atoms and bonds using the mouse. Setting the type of bond requires pairs of atoms to be clicked sequentially after the tool is activated. Similarly, transmuting atoms to the currently selected element and removing atoms simply involve clicking on atoms in the main view.
Table 5.3. Build Toolbar Icons
![]() | Draw unbound atoms |
![]() | Draw chains of atoms by clicking and dragging the mouse |
![]() | Add pre-defined molecular fragments to the model |
![]() | Delete individual atoms, or hold Shift to delete all bonds attached to clicked atoms |
![]() | Transmute clicked atoms to the currently selected element, or hold Shift to transmute all atoms of the same element as the clicked atom |
![]() | Add hydrogens to clicked atoms |
![]() | Transmute all selected atoms to the currently selected element |
![]() | Satisfy the natural valencies of all C, N, and O atoms by adding hydrogen atoms |
![]() | Set the current element to hydrogen |
![]() | Set the current element to carbon |
![]() | Set the current element to nitrogen |
![]() | Select the current element from the periodic table |
| N/A | The current element set by the final button (which defaults to oxygen) is set from the last element chosen in the periodic table. |
![]() | Create (or change to) a single bond between two clicked atoms |
![]() | Create (or change to) a double bond between two clicked atoms |
![]() | Create (or change to) a triple bond between two clicked atoms |
The general drawing style for all atoms in all models is determined by the selection made on the Style toolbar. This does not clear any specific styles set for individual atoms, it only overrides them. The final 'Individual' style draws atoms in their associated styles (which defaults to 'Stick').
Table 5.4. Draw Style Toolbar Icons
![]() | Atoms are not explicitly drawn unless they possess no bonds, bonds are drawn using simple lines |
![]() | Atoms and bonds are drawn as tubes |
![]() | Atoms are drawn as uniformly-sized spheres, with bonds drawn as tubes |
![]() | Atoms are drawn as spheres whose size depends on their atomic radii, bonds are drawn as tubes |
![]() | Each atom is drawn according to its own assigned style |
Standard Cut, Copy, Paste, and Delete functions that work on the atom selection of the current model. Only the last copied (or cut) selection of atoms is remembered. Pasted atoms are created with exactly the same coordinates as when they were copied - i.e. no translation of the pasted atoms is made to avoid other atoms in the target model. The newly pasted atoms become the current selection.
Table 5.5. Edit Toolbar Icons
![]() | Copy the current atom selection to Aten's clipboard |
![]() | Copy the current atom selection to Aten's clipboard and then delete it |
![]() | Paste the contents of the clipboard to the current model at the original coordinates. The pasted atoms then become the current selection |
![]() | Delete the current atom selection |
Quick tools to load, save, and close models.
Table 5.6. File Toolbar Icons
![]() | Create a new, empty model |
![]() | Load an existing model into Aten |
![]() | Save the current model under its original filename |
![]() | Save the current model under a different filename |
![]() | Close the current model (prompting to save first if changes have been made) |
The minimiser can be run quickly from here (using the current method and associated settings from the minimiser window) and the total energy and forces of the current model calculated. A list of all loaded forcefields reflects the current default forcefield and allows selection of a new one.
Table 5.7. Forcefield Toolbar Icons
![]() | Minimise the energy of the current model |
![]() | Calculate the total energy of the current model |
![]() | Calculate the atomic forces in the current model |
| N/A | The combobox lists all currently loaded forcefields, and represents the default forcefield to use if no other has been assigned specifically to a model or pattern |
Simple measurements of distances, angles, and torsions between picked atoms or the current selection of atoms is possible from the measure toolbar.
Table 5.8. Mouse Toolbar Icons
![]() | Measure distances between clicked atoms |
![]() | Measure angles between clicked atoms |
![]() | Measure torsion andlges between clicked atoms |
![]() | Measure all bond distances between atoms in the current selection |
![]() | Measure all bond angles between atoms in the current selection |
![]() | Measure all torsion angles between atoms in the current selection |
For multi-button mice each button can be assigned an invidual action (select, rotate model etc.). For those who use single-button rats, this toolbar changes the function of the first (or left) button between select / interact, rotate model, and translate model. Selecting these buttons overwrite the stored action for the left button in the Preferences.
Table 5.9. Mouse Toolbar Icons
![]() | The left button selects and interacts with atoms |
![]() | The left button rotates the view or selection |
![]() | The left button translates the view or selection |
The standard mode for whichever mouse button is the interactor (by default its the left button) is Box Select, where atoms or groups of atoms are selected by click-dragging a box on the main canvas. This and other selection types are available here.
Table 5.10. Select Toolbar Icons
![]() | Atoms may be (de)selected by clicking on them individually, or selected en masse with a click-hold-drag |
![]() | Bound fragments are selected by clicking on a single atom within that fragment |
![]() | Clicking on a single atom selects all atoms of the same element |
![]() | The current selection is expanded by following bonds attached to any select atoms. |
![]() | Select all atoms in the current model |
![]() | Deselect all atoms in the current model |
![]() | Toggle the selection state of all atoms |
Tool windows are shown and hidden through the buttons on the tool stack toolbar. See the Tool Windows section.
Table 5.11. Tool Window Toolbar Icons
![]() | Show the atomlist window |
![]() | Show the Z-Matrix editor window |
![]() | Show the surface/grid management window |
![]() | Show the fragment library |
![]() | Show the glyph edit window |
![]() | Show the building tools window |
![]() | Show the atom transformation tools |
![]() | Show the atom positioning tools |
![]() | Show the atom geometry tools |
![]() | Show the atom selection window |
![]() | Show the cell definition window |
![]() | Show the cell transformation window |
![]() | Show the disordered builder window |
![]() | Show the energy minimiser window |
![]() | Show the forcefield management woindow |
![]() | Show the command window |
If a trajectory is associated to the current model, the trajectory toolbar allows to skip through frames and playback the trajectory.
Table 5.12. Trajectory Toolbar Icons
![]() | Toggle between view of trajectory frames and the parent model |
![]() | Return to the first frame in the trajectory |
![]() | Go to the previous frame in the trajectory |
![]() | Start / stop sequential frame playback of the trajectory |
![]() | Go to the next frame in the trajectory |
![]() | Skip to the last frame in the trajectory |
| N/A | The slider and spinbox represent the current frame position, and provide quick access to other frames |
Most of Aten's functions in the GUI are accessed through the various tool windows. These can be shown/hidden through the toggle buttons in the Tool Stack toolbar, which appears on the right-hand side of the main canvas by default.
Atom List Window
The atom list shows, unsurprisingly, a list of all atoms in the model, displaying elements, charges, and positions. If patterns have been defined for the model, the atoms in the list will be grouped according to their encompassing pattern, otherwise they are listed in one continuous run by ascending ID.
The selection of items in the atom list mirrors the selection in the current model - (de)selecting atoms in one will also (de)select them in the other. If patterns are defined, (de)selecting the pattern name in the list (de)selects all atoms making up the pattern.
The four buttons at the foot of the atom list allow the current selection of atoms to be moved up and down the list, useful for reordering atoms into a specific sequence. Selected atoms can be shifted up/down the list one place at a time, or all moved to the top or bottom of the list at once. In the latter case the order of the original selection is preserved.
Build Window
Miscellaneous build tools and options are located on the Build window.
The Add Atom group allows atoms to be created at specific positions in the model. Coordinates are entered and the atom created (with element defined by the current selected element in the Build toolbar) by pressing the Add button. If the 'Fractional Coordinates' checkbox is ticked the coordinates are assumed to be fractional and are converted to cell coordinates as the atom is added. For example, setting coordinates to {0.5,0.5,0.5} will create an atom in the centre of the current unit cell.
When transforming atoms in a periodic system with the mouse (i.e. rotating or translating them) if any move outside the unit cell as a result of the transformation they are automatically folded back in to the confines of the cell. If the 'Prevent Folding' checkbox is ticked, folding operations are prevented.
Cell Define Window
Allows the user to edit the unit cell specification of the current model, assign a crystallographic spacegroup, and perform spacegroup packing according to the spacegroup.
Whether or not the current model possesses a unit cell is determined wholly by the 'Has Cell' checkbox - if checked, the current model is periodic, if not, then it is an isolated atomic globule (or a 'molecule', if you prefer). If the model has a cell, its lengths (in Angstroms) and angles (in degrees) are displayed on the left-hand side, and may be freely edited (the volume of the current cell is displayed just below). Any changes made are immediately applied to the model. Any changes made here are immediately applied to the current model.
The spacegroup assigned to the current model can be changed and removed here. On its own, an assigned spacegroup is just a number - no modifications to the atoms are made by changing the assigned spacegroup. Packing of atoms, however, is a different matter. Once a spacegroup is assigned, symmetry-equivalent atoms may be generated by use of the 'Pack' button. This assumes that the current contents of the model represents the symmetry-unique set of atoms (i.e. the minimal generator set which, along with the spacegroup and unit cell, defines the entire crystal).
Cell Transform Window
Transformations of the unit cell and its contents can be made here, encompassing geometric scaling of the cell (and atoms contained within) and replication of the system in three dimensions.
The Replicate panel allows the current cell to be replicated along its three principal axes in both positive and negative directions. The six inputs represent negative and positive replication values for each direction -- most of the time its probably only useful to consider the positive (right-most) replication directions. Note that the numbers define the ''additional'' cells that will be created in addition to the original one. So, if all numbers are left at zero the original cell will remain untouched. Entering a value of 1 for each positive direction will give a 2x2x2 supercell of the original cell, and so on.
Atoms in the model are folded into the unit cell prior to replication, unless the Fold Atoms checkbox is unticked. Similarly, atoms that exist outside of the cell after replication are trimmed unless the Trim Atoms checkbox is unchecked.
The Scale panel allows the principal axes of the current unit cell to be arbitrarily scaled, along with the cell's contents. If a valid pattern description exists for the model, then the positions of individual molecules or bound fragments within the cell are scaled relative to their centres of geometry - all intramolecular distances within molecules remains the same as before the scaling. If this is undesirable (or unintended) then performing the scaling with no pattern definition will scale the position of each atom separately.
Command Window
The command window allows commands or sequences of commands to be run and stored for later use, allows management and execution of scripts, and provides access to searchable command help.
Any command or compound command can be entered in the bottom editbox and will be executed immediately. This command will then be added to the list above, and can be single-clicked to return it to the editbox for tweaking or re-editing, or double-clicked to execute it again. The list of stored commands is saved when Aten exits, and loaded back in when restarted.
Scripts can be loaded in from here and executed at will by double-clicking individual scripts in the list or selecting multiple scripts and clicking the 'Run Selected' button. Any script files loaded in this way are remembered when Aten exits and are loaded back in when restarted. All scripts can be reloaded from disk (if, for example, changes have been made to one or more files after they were loaded in) by clicking the 'Reload All' button.
Disordered Builder Window
The Disordered builder page allows the creation of randomly-oriented collections of molecules in periodic cells (e.g. gases, liquids, mixtures etc.) from individual molecule components. The list at the top of the panel gives all the currently-loaded molecules that are suitable for use as components – the main criterion is that they do not themselves possess a unit cell. Next to the name of each model in the list is a number, which specifies the number of molecules that you want to be inserted into the target model, and two checkboxes that allow certain Monte Carlo move types to be prevented for individual molecules. The first checkbox, if unticked, prevents rotations (both on insertion and in standard Monte Carlo moves) of the model, while the second checkbox, if unticked, will prevent the standard Monte Carlo translation move from being used with this model. If the number is set to zero (the default for all components) then no insertions of that model will be attempted.
The disordered builder needs a model with a cell already defined to insert into, and should be selected as the current model in the main view. The Build button will only be available if the current model is periodic. Note that the current model does not have to be empty to begin with, but if it is not, a forcefield must be assigned (or must be available) that describes completely the existing contents.
By default, all components are randomly distributed over the entire space of the model cell, but can be restricted to specific regions of the cell if required. For the model currently selected in the list of components, the Region panel may be used to define an area of the unit cell in which to restrict insertions of the model. If regions are defined for one or more models, these will displayed in the current model's cell.
The number of cycles determined the number of times to perform a round of Monte Carlo moves (see XXX), while the VDW Scale sets a temporary scaling factor to use in the energy calculation.
Forcefield Window
Forcefield files are managed through the Forcefield window. A list of currently-loaded forcefields is shown at the top, the default forcefield (if any) is indicated with a tick, and is used whenever a forcefield is required by a process but none has been linked to the target model. The forcefield selected in the list is the current forcefield, and the one used by all other actions on the page. Forcefields are loaded, unloaded, and edited with the buttons immediately underneath the list.
The Associate panel links the selected forcefield to one or more models and their patterns; the 'Model' button links the current forcefield to the current model, while the 'All' button links the current forcefield to all loaded model. The 'Pattern' button brings up a dialog listing the patterns of the current model, from which one is selected to link the forcefield to. A forcefield associated to an individual pattern will be used in preference to the forcefield associated with its parent model.
Automatic Typing takes the current model and either assigns or removes forcefield types from the model's (or pattern's) associated forcefield(s). Forcefield types for all atoms are determined unless they have been assigned a specific type manually.
Manual assignment of forcefield types can be performed in the Manual Typing panel. The list gives all atom types in the current forcefield that are relevant to the element entered just above the list. One can be selected from the list and be manually assigned (forced) onto the current atom selection with the Set button. Such assignments will not be overwritten by subsequent automatic typings. Manual typings can be removed with the Delete button, and the currently selected atomtype can be tested for suitability on the current selection of atoms with the Test button.
Fragment Library Window
When in fragment drawing mode, the Fragment Library window presents a list of all the available fragment models, and whichever is selected represents the current fragment to add in to the model. The current fragment is 'attached' to the mouse pointer when moving over the main canvas, and shows a preview of what will be the orientation and position of the fragment when a left-click is made.
Fragment models are just normal models stored in specific places. The only real difference is that atoms with unknown element (integer '0', or string 'XX') are slightly more useful than usual. These can act as anchor points for the fragment that do not correspond to the position of any 'proper' atom to allow for more control over the placement of structures - for instance, such an atom may be placed at the centre of a ring. It is important to note that all atoms with unknown element type are removed when the fragment is added to the current model.
At any time, a single atom in the selected fragment represents the attachment point and appears directly under the mouse pointer. Any atom in the fragment can be selected as the current anchor point, and may be cycled through by pressing Alt. If the atom acting as the anchor point has at least one bond to another atom then a reference vector is constructed allowing the fragment to be oriented along vectors dependent on the current geometry of existing atoms, for example.
Single-clicking in free space (i.e. not over an existing atom) places a copy of the current fragment in the current orientation in the current model. Click-dragging allows the fragment to be freely rotated about the anchor point before the placement is final. On placement, the anchor atom is pasted too unless it is of unknown element (see above).
When moving over an existing atom with an anchor point that has at least one bond to another atom, the fragment is attached at a suitable geometry, provided the valency of the atom allows (if not, the atom will be surrounded by a crossed-out box and the fragment will temporarily disappear). A single-click will place the fragment in the shown position and orientation, while click-dragging rotates the fragment about the newly-formed bond to allow fine adjustment before the final placement. If the anchor point has no bonds to other atoms, the fragment is placed in no specific orientation, and click-dragging freely rotates the molecule about the anchor point. In both cases, the anchor atom is always removed when being added to the model since the existing atom which was clicked on will replace it in terms of position.
If the existing atom in the model has one or more other atoms attached to it, holding Shift will orient the fragment along an existing bond vector. In this case, both the anchor atom and the atom at the other end of the bond are removed when the fragment is placed. Pressing Ctrl cycles over the bonds of the existing atom.
Geometry Window
The geometry window can be used to explicitly set the distance, angle, or torsion of a group of selected atoms. Exactly two, three, or four atoms must be selected for the individual panels to be available. The atoms need not be connected with bonds. The panels on this window are also used when setting geometry from the atom context menu.
Each page is essentially the same, displaying the atom IDs which make up the current target geometry. The new value of the geometry can be set explicitly, or increased/decreased by 'nudging' the current value by a specified amount.
Table 5.13.
![]() | Add a specified amount to the current value | |
![]() | Subtract a specified amount from the current value |
Glyphs Window
The glyphs window allows new glyphs to be created by hand, or existing glyphs in the model to be managed, edited, and deleted.
All glyphs in the current model are listed to the left. Selecting one will allow its properties to be edited on the right. The type of glyph can be changed also. Colours for individual glyph data (i.e. points) may be changed through the colour controls associated to each.
Grids Window
The Grids Tool Window provides management for grid data sets owned by the different models. All grid data sets held by the current model are displayed here, and. The appearance of individual grids may be changed, and axes / cutoffs changed. Grid data can also be cut, copied, and pasted to different models.
Each grid in the left-hand list has associated with it a checkbox that determines whether or not it is currently visible. Below the list the minimum and maximum data values contained within the grid, and the current cutoff (i.e. the value that the isosurface is drawn at) to use when rendering the data. The File and Edit menus allow to load new grids into the current model, and to cut, paste, and delete grids between models.
Various data on the current grid is displayed here, including the minimum and maximum values present in the data, the number of points, and the total (unnormalised) sum of data values encompassed by the current isosurface.
For grids in which the data is 'symmetric' about a cutoff of zero (as is the case for orbital data, for example) a secondary surface can be enabled with the 'Secondary' checkbox. This second isosurface is controlled by the second lower/upper cutoff values. Note that the secondary isosurface can be drawn for any data set - it can be used, for example, to draw a second surface at a different cutoff to the primary cutoff, for example.
The associated origin and axes to the currently selected grid can be modified here. In this way grid data may be arbitrarily flipped, stretched, and sheared, and its position in the local space of the model changed. All changes made are reflected immediately in the main view.
The general appearance of the selected grid can be modified in the Style page, with the main rendering style set with the combo box (see grid styles for a list of possible styles). Optionally, the bounding cuboid of the grid data may be highlighted ('Outline Volume' checkbox). The 'Periodic' checkbox influences the way 3D surfaces are drawn close to the boundaries of the grid. If unchecked, a 'gap' will appear near to the edges of the grid volume since there is inufficient data with which to generate gradient information. If checked, data points on the opposite site of the grid will be used in this region (useful, for instance, in the case of orbital information calculated from 3D periodic QM codes).
In the simplest case the points, triangles, or polygons that make up the rendered grid data are drawn in a single colour. This colour is determined by the upper of the two colour selections. If the data is symmetric (see above) and is composed of 'positive' and 'negative' parts, then the uppermost colour selection is applied to the positive part, and the lower colour selection is applied to the negative part. In addition, the transparency of the rendered data (if drawn in the Solid style) is determined by the Alpha value (0 being fully transparent, and 255 being fully opaque).
Should a more useful colouring scheme be desired than the grid may be rendered using a colour scale, in which case the isovalue (if volumetric) or height (if a 2D grid) determines the colour of the data point. To do so, enable the checkbox next to the CScale widget, and select the ID of the colour scale to use (from the ten definable in the program).
The Shift page can be used to 'translate' the grid data points along each axis of the data set allowing, for instance, isosurface features of interest in a periodic grid to be displayed in a more central position. Note that no modification of the actual grid data is performed - the effect is entirely visual. The 'Atom Shift' group allows translation of selected/all atoms in the parent model to be moved at the same time, so as to correlate them with the new positions of the grid data.
Minimiser Window
The Minimiser Window allows models to be energy-minimised w.r.t. their atomic coordinates. Several methods are available, listed in the drop-down list at the top-left. Each may have its own set of options, which are displayed in the panel underneath the convergence criterion for the energy and RMS force.
Atom Position Window
Tools for the absolute positioning of atoms are available here. All work on the current selection of atoms in the current model.
The Centre page allows the centre of geometry of the current selection to be positioned at absolute coordinates. The desired position is entered in the three input boxes, or can be defined from the geometric centre of a selection of atoms (prior to the positioning of a different set). Any (or all) of the Cartesian axes may be 'locked' preventing coordinate adjustment along parcitular directions.
The Flip page mirrors the positions of atoms in the current selection through its centre of geometry in either the X, Y, or Z directions. Note that this tool currently works only along the Cartesian axes, and does not take into account the shape of any defined cell.
Table 5.15.
![]() | Flip coordinates in the X direction | |
![]() | Flip coordinates in the Y direction | |
![]() | Flip coordinates in the Z direction |
Translations of atoms within model (local), world (view) and cell frames of reference can be performed in the Translate page. The group of directional buttons move the selected atoms along the relevant axis within the selected frame of reference, and by the amount specified in the Shift control. For model and world reference frames the Shift control specified the number of Angstroms moved along the axis in each step. For the cell reference frame it defines the fractional cell distance moved in each direction.
Table 5.16.
![]() | Translate selection along the positive X axis of the current frame | |
![]() | Translate selection along the negative X axis of the current frame | |
![]() | Translate selection along the positive Y axis of the current frame | |
![]() | Translate selection along the negative Y axis of the current frame | |
![]() | Translate selection along the positive Z axis of the current frame | |
![]() | Translate selection along the negative Z axis of the current frame |
The axis along which to move the current selection is define in the left half of the Shift page. Furthermore, the axis may be defined by two clicked atoms in the main window. The supplied vector need not be normalised, as this is done automatically. This also means that un-normalised vectors are always displayed, so defining the axis from two clicked atoms will use the actual positional difference of the two atoms as the shift vector. Since the axis is normalised prior to the shift taking place, the shift distance 'delta' is the actual distance the atoms are moved by.
Table 5.17.
![]() | Define vector from two selected atoms | |
![]() | Normalise the currently defined vector to 1.0 | |
![]() | Move selected atoms 'delta' Angstroms along the defined vector | |
![]() | Move selected atoms 'delta' Angstroms backwards along the defined vector |
The reposition page allows the centre of geometry of a selection of atoms to be moved from a reference coordinate (defined by the 'Reference' box) to a destination coordinate (defined by the 'Target' box).
Select Window
The select window provides a means to quickly access the capabilities of the select and deselect commands from within the GUI. The total number of atoms selected along with their empirical formula is also displayed.
Atom Transform Window
For a selection of atoms, rotational or matrix-based transformations can be applied through the Transform Window.
The Rotate panel allows an origin and a rotation axis about this origin to be defined about which to rotate atom selections. The origin and axis may be entered manually, can be determined from a current atom selection, or defined by the click-selection of two atoms. Defining the rotation axis from the current selection will set the axis to the vector between the currently-defined origin and the centre of geometry of the current atom selection. Rotations of atom selections about this axis/origin combination are then made by defining the angle of rotation (in degrees) and then applying the rotation either clockwise or anticlockwise.
Table 5.19.
![]() | (Left) Define rotation origin from current atom selection | |
![]() | (Right) Define rotation axis as the vector between current origin and centre of current selection | |
![]() | (Right) Define rotation axis from two picked atoms | |
![]() | Rotate current atom selection clockwise around defined axis/origin | |
![]() | Rotate current atom selection counter-clockwise around defined axis/origin |
From here a 3x3 transformation matrix can be applied to the current atom selection, and with a specific coordinate origin (not necessarily the centre of geometry of the selection).
Table 5.20.
![]() | Define the matrix rows from pairs of picked atoms | |
![]() | Normalise the matrix row to be a unit vector | |
![]() | Orthogonalise the matrix row with respect to the other rows | |
![]() | Generate the matrix row from the cross product of the other two | |
![]() | Define transformation origin from the centre of geometry of the current atom selection | |
![]() | Define transformation origin to be the centre of the current unit cell |
It is possible to transform the orientation of a given set of atoms if a suitable pair of source and destination matrices are defined - this page attempts to do so! The 'Source' matrix defines what should be considered the current frame of reference for the current set of coordinates, while the 'Target' matrix defines what the 'Source' matrix should become after the operation.
Table 5.21.
![]() | Define the matrix rows from pairs of picked atoms | |
![]() | Normalise the matrix row to be a unit vector | |
![]() | Orthogonalise the matrix row with respect to the other rows | |
![]() | Generate the matrix row from the cross product of the other two | |
![]() | Define transformation origin from the centre of geometry of the current atom selection | |
![]() | Define transformation origin to be the centre of the current unit cell |
Table of Contents
- Command Language Overview
- Variable Types
- Overview
- Aten Type
- Atom Type
- BasisPrimitive Type
- BasisShell Type
- Bond Type
- Bound Type
- Cell Type
- ColourScale Type
- ColourScalePoint Type
- Eigenvector Type
- Element Type
- EnergyStore Type
- FFAtom Type
- FFBound Type
- Forcefield Type
- Glyph
- GlyphData Type
- Grid Type
- Measurement Type
- Model Type
- Pattern Type
- Prefs Type
- Region Type
- Site Type
- UnitCell Type
- Vector Type
- Command Reference
- Atom Commands
- Bond Commands
- Building Commands
- Cell Commands
- Charges Commands
- ColourScales Commands
- Disordered Commands
- Edit Commands
- Energy Commands
- Flow Commands
- Forcefield Commands
- Forces Commands
- Glyph Commands
- Grid Commands
- Image Commands
- Labeling Commands
- Math Commands
- Measuring Commands
- Messaging Commands
- Minimiser Commands
- Model Commands
- Model Extras Commands
- Monte Carlo Commands
- Pattern Commands
- Read / Write Commands
- Script Commands
- Selection Commands
- Site Commands
- String Commands
- System Commands
- Trajectory Commands
- Transform Commands
- View Commands
The scripting language in Aten is based syntactically on C/C++, with echoes of useful Fortran features included for good measure. This means that if you're familiar with C/C++ then writing a script, command, or filter for Aten should be relatively straightforward. There are lots of C primers on the web, so the following sections provide only a brief summary of the style of the language.
Keywords, variables, and function names are case sensitive, so 'for' is different from 'For' (all internal commands in Aten are in lowercase). Individual commands must be separated by a semicolon ';', and newlines are optional. For example:
int i; printf("Hello there.\n"); i = 5;
...and...
int i;
printf("Hello there.\n");
i = 5;
...are equivalent. Whitespace characters (spaces and tabs) are ignored and may be present in any amount in any position in the code.
Individual lines or parts of them may be commented out. The presence of either the hash symbol '#' or '//' in a line means 'ignore rest of line'. Note that the '/*...*/' commenting style is not supported.
There are several standard rules for variables within Aten:
They must be declared before use
They are strongly-typed, i.e. they hold a specific type of value (e.g. an integer, a character string etc.)
They must begin with an alpha character ('a' to 'z'), but may otherwise consist of letters, numbers, and the underscore ('_')
They may not be named the same as any existing function or internal keyword
Since variables are strongly-typed, trying to set an integer variable from a string will not work since these are incompatible types. However, standard C-style string conversion functions are available - see String Commands.
So, to initialise some variables, assign them values, and print them out, we would do the following:
int i;
double result;
i = 10;
result = i*5.0;
printf("i multiplied by 5.0 = %f\n", result);
In addition to the standard 'int' and 'double' types, a 'string' variable exists for the storage of arbitrary-length character strings, and do not need to have a length specified on their creation (they will adjust dynamically to suit the assigned contents). Literal character strings should be surrounded by double-quotes. A set of variable types exist that are able to contain references (not copies) of various objects within Aten, e.g. atoms, models, unit cells, etc. Variables of these types are declared in exactly the same way as normal variables (see Variable Types for a list of available types). A 'vector' type is provided for convenience and stores a triplet of real ('double') values. There is no boolean type - use an 'int' instead - but the built-in constants 'TRUE' and 'FALSE' may be used in assignment, etc., and correspond to the integer values '1' and '0' respectively.
All variables will default to sensible values (e.g. empty string, numbers equal to zero) on initialisation. To create a variable with a specific value simply do the following:
int i=1,j=2,k=1001; double myvar=0.0, angle = 90.0;
Arrays of most variable types are allowed (some, for instance the aten type, don't really make sense as an array). Arrays are requested by providing a constant size (or an expression) in square brackets after the name:
int values[100], i = 4; double q[i];
Here, two arrays are created - an array of 100 integer numbers called 'values', and an array of four floating point numbers called 'q'. Array indices always run from 1 to the size of the array, unlike C in which arrays run from 0 to N-1, and Fortran in which it is possible to specify custom lower and upper indices for an array.
Arrays can be initialised to a simple value on creation, setting all elements to the same value...
string s[4] = "Nothing";
...or each element to a different value using alist enclosed in curly brackets:
string s[4] = { "Nothing", "Nicht", "Nada", "Not a sausage" };
Also, all array elements can be set to the same value with a simple assignment:
int t[100]; t = 40;
![]() | See Also: |
|---|---|
|
Several predefined constants exist, and may not be overridden by variables of the same name. All predefined in constants are defined using uppercase letters, so the lower case equivalents of the names may be used as variables, functions etc.
Table 6.1. Built-in Constants
| Name | Type | Value |
|---|---|---|
| DEGRAD | double | 57.295779578552 |
| FALSE | int | 0 |
| NULL | int | 0 |
| PI | double | 3.14159265358979323846 |
| TRUE | int | 1 |
In addition, all element symbols found in the input will be seen as their equivalent integer atomic number. So, instead of having to provide short strings containing the element name to, for example, the transmute command, simply the capitalised element name itself may be used. Thus...
transmute("Xe");
transmute(Xe);
transmute(54);
...are all entirely equivalent.
As with C, variable scope is employed in Aten meaning that a variable may be local to certain parts of the code / filter / script. In addition, two or more variables of the same name (but possibly different types) may peacefully co-exist in different scopes within the same code / filter / script. Consider this example:
int n = 4, i = 99;
printf("%i\n", i);
if (n == 4)
{
int i = 0;
printf("%i\n", i);
}
printf("%i\n", i);
...will generate the following output:
99 0 99
Why? Well, even though two variables called i have legitimately been declared, the second declaration is made within a different block, enclosed within a pair of curly braces. Each time a new block is opened it has access to all of the variables visible within the preceeding scope, but these existing variable names may be re-used within the new block in new declarations, and does *not* affect the original variable. Hence, in the example given above, after the termination of the block the final printf statement again sees the original variable i, complete with its initial value of '99' intact. Note that if a variable is re-declared within a scoping block, there is no way to access the original variable until the scoping block has been closed. Blocks can be nested to any depth.
For functions that take arguments, the argument list should be provided as a comma-separated list in parentheses after the function name. For instance:
newatom("C", 1.1, 0, 4.2);
Arguments may be constant values (as in this example), variables, arithmetic expressions, or any other function that returns the correct type. For functions that (optionally) do not take arguments, the empty parentheses may be omitted. A list of all functions, their arguments, and their return types is given in the command reference.
All functions return a value, even if it is 'no data' (the equivalent of 'void' in C/C++). For instance, in the example above the newatom command actually returns a reference to the atom it has just created, and this may be stored for later use:
atom a;
a = newatom("C", 1.0, 1.0, 1.0);
However, if the return value of any function is not required then it may simply be 'forgotten about', as in the example prior to the one above.
User-defined functions can be defined and used in Aten, taking a list of variable arguments with (optional) default values. The syntax for defining a function is as follows:
type name ( arguments ) { commands }
type is one of the standard variable types and indicates the expected return value type for the function. If no return value is required (i.e. it is a subroutine rather than a function) then type should be replaced by the keyword 'void':
void name ( arguments ) { commands }
Once defined, functions are called in the same way as are built-in functions. The name of the function obeys the same conventions that apply to variable names, e.g. must begin with a letter, cannot be the name of an existing keyword, function, or variable. The arguments are specified in a similar manner to variable declarations. A comma-separated list of types and names should be provided, e.g.:
void testroutine ( int i, int j, double factor ) { ... }
Our new subroutine 'testroutine' is defined to take three arguments; two integers, i and j, and a double factor. All three must be supplied when calling the function, e.g.
printf("Calling testroutine...\n");
int num = 2;
double d = 10.0;
testroutine(num, 4, d);
printf("Done.\n");
When defining the function/subroutine arguments, default values may be indicated, and permit the function to be called in the absence of one or more arguments. For instance, lets say that for our 'testroutine', the final argument factor is likely to be 10.0 on most occasions. We may then define a default value for this argument, such that if the function is called without it, this default value will be assumed:
void testroutine ( int i, int j, double factor = 10.0 ) { ... }
printf("Calling testroutine...\n");
int num = 2;
testroutine(num, 4);
testroutine(num, 4, 20.0);
printf("Done.\n");
Both methods of calling 'testroutine' in this example are valid.
For functions defined to return a specific type, at some point in the bpdy of the function a suitable value should be returned. This is achieved with the return keyword. Consider this simple example which checks the sign of a numeric argument, returning '1' for a positive number and '-1' for a negative number:
int checksign ( double num )
{
if (num < 0) return -1;
else return 1;
}
If an attempt is made to return a value whose type does not match the type of the function, an error will be raised. Note that, once a return statement is reached, the function is exited immediately. For functions that do not return values (i.e. those declared with 'void') then return simply exits from the function - no return value need be supplied.
For variables in Aten that are of reference type (i.e. the non-standard types) various sub-variables and functions may be accessed in the same way class members are utilised in C++. Each non-standard variable type is listed here along with the types and descriptions of their available subvariables / members.
In the same way that class members are accessed in C/C++, subvariables of reference types are accessed by use of the full stops '.' between member names. For instance, the atom type allows all the information of a given atom to be accessed. The following example illustrates the process of retrieving the third atom in the current model, finding its coordinates, and subsequently adjusting them:
atom a = aten.model.atoms[3];
vector v = a.r;
printf("Old coordinates are: %f %f %f\n", v.x, v.y, v.z);
v.x += 4.0;
a.r = v;
printf("New coordinates are: %f %f %f\n", a.rx, a.ry, a.rz);
Lots of paths are used here. Firstly, the global aten variable is used to get access to the current model and grab a reference to its third atom (aten.model.atoms[3]). Then, the coordinates of this atom are placed in a vector v by requesting the r subvariable from the stored atom reference. We then adjust the vector and store the new coordinates in the atom.
All subvariables can be read, but not all can be written back to - these are read-only subvariables, and are indicated with 'ro' in the Access column in the following tables.
Function members act in the same as subvariable members except that they take one or more arguments enclosed in parentheses immediately following the member name, just as command functions do.
The 'master' class type, 'aten', is there to provide access to various other structures such as the list of loaded models, preferences, element data etc. It is available at all times from any command, script, or filter, and is always called 'aten'.
Table 6.2. Aten Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element[] | ro | Array of element data (masses, symbols, names, etc.) |
| frame | model | ro | The current model being 'displayed' and the focus of editing, i.e. the current trajectory frame or, if no trajectory is associated to the current model then the current selected model is returned |
| model | model | ro | The current model selected (this is the parent model of a trajectory if a frame is currently being displayed) |
| models | model[] | ro | Array of all loaded models currently available |
| nelements | int | ro | Number of chemical elements defined in the 'elements' array |
| nmodels | int | ro | Number of models (parent models, i.e. not including trajectory frames) currently loaded |
| prefs | prefs | ro | Program preferences |
Table 6.3. Bond Type Functions
| Function | Return Type | Description |
|---|---|---|
| convertenergy ( double value, string oldunits ) | double | Convert the supplied energy value from oldunits to the current, internal unit of energy in use by Aten. See also Energy Units and the relevant prefs accessor. |
| findelement ( string name ) | element | Convert the string specified into an element, according to the current zmapping type. |
Table 6.4. Atom Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| bonds | bonds[] | ro | List of bonds the atom is involved in |
| colour | double[4] | rw | Custom colour of the atom (used when the colouring scheme is set to 'custom') |
| element | element | rw | Returns a pointer to the assigned element data of the atom |
| fixed | int | rw | Whether the atom's position is fixed (1) or not (0) |
| f | vector | rw | Force vector |
| fracx | double | rw | Position x-component in fractional cell coordinates |
| fracy | double | rw | Position y-component in fractional cell coordinates |
| fracz | double | rw | Position z-component in fractional cell coordinates |
| fx | double | rw | Force x-component |
| fy | double | rw | Force y-component |
| fz | double | rw | Force z-component |
| hidden | int | rw | Whether the atom is hidden (1) or visible (0) |
| id | int | ro | Numerical ID of the atom within its parent model |
| mass | double | ro | Atomic mass of the atom |
| name | string | ro | Element name of the atom |
| q | double | rw | Atomic charge associated to the atom |
| r | vector | rw | Position vector |
| rx | double | rw | Position x-component |
| ry | double | rw | Position y-component |
| rz | double | rw | Position z-component |
| selected | int | rw | Whether the atom is selected (1) or unselected (0) |
| style | string | rw | The current drawing style of the atom |
| symbol | string | ro | Element symbol of the atom |
| type | ffatom | rw | Forcefield type of the atom |
| v | vector | rw | Velocity vector |
| vx | double | rw | Velocity x-component |
| vy | double | rw | Velocity y-component |
| vz | double | rw | Velocity z-component |
| z | int | rw | Atomic number of the atom |
Table 6.5. Atom Type Functions
| Function | Return Type | Description |
|---|---|---|
| findbond ( Atom i ) | bond | Return the bond (if any) between the current and specified atoms |
Table 6.6. BasisPrimitive Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| exponent | double | rw | Exponent of the basis primitive |
| coefficients | double[] | rw | Coefficients of the basis primitive |
Table 6.7. BasisPrimitive Type Functions
| Function | Return Type | Description |
|---|---|---|
| addcoefficient ( double coeff ) | atom | Add a new coefficient to the basis primitive |
Table 6.8. BasisShell Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| atomid | int | rw | Atom ID on which the basis shell is centred |
| nprimitives | int | ro | Number of primitives defined for the basis shell |
| primitives | basisprimitive[] | ro | List of primitives defined for the basis shell |
| type | string | rw | The type (shape) of the basis shell. See basis shell types for a list. |
Table 6.9. BasisShell Type Functions
| Function | Return Type | Description |
|---|---|---|
| addprimitive ( double exponent, double coeff1 = 0.0 ... ) | basisprimitive | Add a new primitive to the basis shell, with the specified exponent and (optional) coefficients given |
Table 6.10. Bond Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| i | atom | ro | First atom involved in the bond |
| j | atom | ro | Second atom involved in the bond |
| order | double | ro | Bond order |
| type | string | ro | Bond type - see Bond Types for a list |
Table 6.11. Bond Type Functions
| Function | Return Type | Description |
|---|---|---|
| partner ( Atom i ) | atom | Return the other atom (i.e. not i) involved in the bond |
Table 6.12. Bound Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element | ro | Array of element data (masses, symbols, names, etc.) |
| data | double | ro | Parameters describing the bound interaction |
| escale | double | ro | Electrostatic 1-4 scaling factor (for torsion interactions) |
| form | string | ro | Functional form of the bound interaction |
| id | int[] | ro | Array of atom IDs involved in the interaction |
| termid | int | ro | Array index of forcefield term in relevant list (ffangles, ffbonds, or fftorsions) in local pattern |
| type | string | ro | Returns the type of the interaction. |
| typenames | string[] | ro | Array of typenames involved in the interaction |
| vscale | double | ro | Short-range 1-4 scaling factor (for torsion interactions) |
Table 6.13. Bound Type Functions
| Function | Return Type | Description |
|---|---|---|
| parameter ( string keyword ) | double | Search for and return the named parameter of the bound interaction |
Table 6.14. Cell Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| a | double | rw | Length of the cell vector A |
| alpha | double | rw | Angle alpha of the cell |
| ax | double | rw | X component of the cell vector A |
| ay | double | rw | Y component of the cell vector A |
| az | double | rw | Z component of the cell vector A |
| b | double | rw | Length of the cell vector B |
| beta | double | rw | Angle beta of the cell |
| bx | double | rw | X component of the cell vector B |
| by | double | rw | Y component of the cell vector B |
| bz | double | rw | Z component of the cell vector B |
| c | double | rw | Length of the cell vector C |
| centre | vector | rw | Coordinates of cell centroid |
| centrex | double | rw | X component of the cell centroid |
| centrey | double | rw | Y component of the cell centroid |
| centrez | double | rw | Z component of the cell centroid |
| cx | double | rw | X component of the cell vector C |
| cy | double | rw | Y component of the cell vector C |
| cz | double | rw | Z component of the cell vector C |
| density | double | ro | Density of the cell |
| gamma | double | rw | Angle gamma of the cell |
| matrix | double[9] | rw | Cell axis matrix |
| sgid | int | rw | Spacegroup ID assigned to the cell |
| sgname | string | ro | Name of the currently assigned spacegroup |
| type | string | ro | Type (shape) of current cell |
| volume | double | rw | Current cell volume, in cubic Angstroms |
Table 6.15. ColourScale Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| npoints | int | ro | Number of points contained in the colourscale |
| points | [] | ro | Array of points in the colourscale |
Table 6.16. ColourScale Type Functions
| Function | Return Type | Description |
|---|---|---|
| addpoint ( double value, double r, double g, double b, double a = 1.0) | colourscalepoint | Add a new point to the colourscale at point 'value' and colour components specified |
| clear () | void | Clear all points contained in the colourscale |
| colour ( double value, double &r, double &g, double &b, double &a = 1.0) | void | Set the components of the colour at the 'value' in the colourscale in the variables provided |
Table 6.17. ColourScalePoint Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| colour | double[4] | r2 | Colour associated to the point |
Table 6.18. Eigenvector Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| eigenvalue | double | rw | Associated eigenvalue of the eigenvector |
| name | string | rw | Name of the eigenvector, e.g. orbital symmetry |
| occupancy | double | rw | Associated occupancy of the eigenvector |
| size | int | rw | Current size of the eigenvector array. Can be set to reinitialise the array. |
| vector | double[] | rw | The eigenvector data array |
Table 6.19. Element Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element | ro | Array of element data (masses, symbols, names, etc.) |
| ambient | double[4] | rw | Ambient colour of the element |
| colour | double[4] | rw | Returns the ambient colour of the element. Set this property to define both ambient (supplied values) and diffuse (0.75*supplied values) components simultaneously |
| diffuse | double[4] | rw | Diffuse colour of the element |
| mass | double | ro | Atomic mass of the element |
| name | string | ro | Capitalised name of the element |
| radius | double | rw | Atomic radius of the element. Affects the scaled sphere rendering style and bond calculation. |
| symbol | string | ro | Atomic symbols of the element |
Table 6.21. FFAtom Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element | ro | Array of element data (masses, symbols, names, etc.) |
| charge | double | rw | Charge associated to the type |
| data | double[6] | rw | Parameter data for short-range potential |
| datakeyword | string[] | ro | Keyword names of the associated parameters, up to 'nparams' |
| datanames | string[] | ro | Proper names of the associated parameters, up to 'nparams' |
| description | string | rw | Text data describing the type |
| equivalent | string | rw | Equivalent name for the type |
| form | string | rw | Functional form of short-range potential |
| id | int | ro | Internal ID of the atom type within its parent forcefield |
| name | string | rw | Name of the type |
| neta | string | ro | The original type description used to identify the type |
| nparams | int | ro | The number of parameters used by the functional form of the interaction |
| ff | forcefield | ro | Parent forcefield containing the type |
| z | int | rw | Element id (Z) corresponding to the target element of this type |
Table 6.22. FFAtom Type Functions
| Function | Return Type | Description |
|---|---|---|
| datad ( string varname ) | double | Return the value of the defined data item varname as a double if it has been defined in a data block in its encompassing forcefield. |
| datai ( string varname ) | int | Return the value of the defined data item varname as an integer if it has been defined in a data block in its encompassing forcefield. |
| datas ( string varname ) | string | Return the value of the defined data item varname as a string if it has been defined in a data block in its encompassing forcefield. |
| parameter ( string name ) | double | Return the value of the current functional form's specified parameter. |
Table 6.23. FFBound Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| data | double[] | rw | Parameter data for the potential |
| datakeyword | string[] | ro | Keyword names of the associated parameters, up to 'nparams' |
| datanames | string[] | ro | Proper names of the associated parameters, up to 'nparams' |
| escale | double[] | rw | For torsion-type interactions, the electrostatic scaling factor between atoms 1 and 4 |
| form | string | rw | Functional form of intramolecular potential - see the forcefields chapter for lists of allowable functional forms for each intramolecular interaction type |
| natoms | int | ro | Number of atoms involved in the bound interaction |
| nparams | int | ro | The number of parameters used by the functional form of the interaction |
| type | string | ro | Actual type of the bound interaction (bond, angle, etc.) |
| typenames | string | rw | Names of the atom types the interaction is relevant to |
| vscale | double[] | rw | For torsion-type interactions, the VDW scaling factor between atoms 1 and 4 |
Table 6.24. FFBound Type Functions
| Function | Return Type | Description |
|---|---|---|
| parameter ( string keyword ) | double | Search for and return the named parameter of the bound interaction |
Table 6.25. Forcefield Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| energygenerators | int[] | rw | Array of integers flagging which generator data are 'energetic' and should be converted |
| filename | string | rw | Filename if the forcefield was loaded from a file |
| name | string | rw | Name of the forcefield |
| nangles | integer | ro | Number of angle terms defined in the forcefield |
| natomtypes | integer | ro | Number of atomtypes defined in the forcefield |
| nbonds | integer | ro | Number of bond terms defined in the forcefield |
| nimpropers | integer | ro | Number of improper dihedral terms defined in the forcefield |
| ntorsions | integer | ro | Number of torsion terms defined in the forcefield |
Table 6.26. Forcefield Type Functions
| Function | Return Type | Description |
|---|---|---|
| addangle ( string form, string type_i, string type_j, string type_k, double data1, ... ) | -- | Create a new angle definition in the forcefield. See the angledef command for a full description. |
| addbond ( string form, string type_i, string type_j, double data1, ... ) | -- | Create a new bond definition in the forcefield. See the bonddef command for a full description. |
| addinter ( string form, int typeid, double charge, double data1, ... ) | -- | Create a new interatomic definition in the forcefield. See the interdef command for a full description. |
| addtorsion ( string form, string type_i, string type_j, string type_k, string type_l, double data1, ... ) | -- | Create a new torsion definition in the forcefield. See the torsiondef command for a full description. |
| addtype ( int typeid, string name, string equiv, string|int element, string neta, string description = "" ) | int | Create a new type definition in the forcefield. See the typedef command for a full description. |
| finalise ( ) | -- | Finalise the forcefield. See the finaliseff command for a full description. |
| findangle ( string type_i, string type_j, string type_k ) | ffbound | Search for an existing angle definition in the forcefield between the type names supplied. |
| findbond ( string type_i, string type_j ) | ffbound | Search for an existing bond definition in the forcefield between the type names supplied. |
| findimproper ( string type_i, string type_j, string type_k, string type_l ) | ffbound | Search for an existing improper torsion definition in the forcefield between the type names supplied. |
| findtorsion ( string type_i, string type_j, string type_k, string type_l ) | ffbound | Search for an existing torsion definition in the forcefield between the type names supplied. |
| findureybradley ( string type_i, string type_j, string type_k ) | ffbound | Search for an existing Urey-Bradley definition in the forcefield between the type names supplied. |
Table 6.27. Glyph Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| data | glyphdata | ro | Individual data for each vertex of the glyph |
| ndata | int | ro | How many data points (vertices) are associated with this glyph's type |
| rotated | int | rw | Flag to indicate whether the glyph's rotation matrix has been modified (i.e. the glyph has been rotated). Setting this to '0' resets (and removes) any current rotation matrix (same as calling member function 'resetrotation'). |
| rotation | double[9] | rw | Rotation matrix for the glyph. Note that not all glyphs can be rotated (see the topic on Glyphs for more information. |
| selected | int | rw | Whether the glyph is currently selected |
| solid | int | rw | Specifies whether the glyph is drawn as a filled (solid) shape or in wireframe |
| text | string | rw | Text data associated to the glyph. Not all glyphs use text |
| type | string | rw | Style of the glyph - see Glyph Types for a list |
| visible | int | rw | Flag indicating whether the glyph is currently visible |
Table 6.28. Glyph Type Functions
| Function | Return Type | Description |
|---|---|---|
| recolour ( double r, double g, double b, double a = 1.0 ) | void | Recolour all data vertices of the glyph to the specified RGB(a) value |
| resetrotation () | void | Reset any rotation applied to the glyph |
| rotatex ( double angle ) | void | Rotates the glyph by angle degrees about its x axis |
| rotatey ( double angle ) | void | Rotates the glyph by angle degrees about its y axis |
| rotatey ( double angle ) | void | Rotates the glyph by angle degrees about its z axis |
Table 6.30. Grid Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| axes | cell | ro | Axes system for the grid, stored in a unit cell structure |
| colour | double[4] | rw | The primary colour of the grid data |
| cutoff | double | rw | The lower primary cutoff value |
| name | string | rw | Name associated to the grid data |
| nx | int | ro | Size of grid data in the x-dimension |
| ny | int | ro | Size of grid data in the y-dimension |
| nz | int | ro | Size of grid data in the z-dimension |
| origin | vector | rw | Coordinates of the origin (lower left-hand corner) of the grid data |
| outlinevolume | int | rw | Flag specifying whether a bounding volume cuboid should be drawn for the grid |
| periodic | int | rw | Flag specifying whether the grid is periodic (e.g. at the edges data from opposite side should be used to form grid) |
| secondarycolour | double[4] | rw | The secondary colour of the grid data |
| secondarycutoff | double | rw | The lower secondary cutoff value |
| secondaryuppercutoff | double | rw | The upper secondary cutoff value |
| shiftx | int | rw | Shift value (in points) for the grid along its x-axis |
| shifty | int | rw | Shift value (in points) for the grid along its y-axis |
| shiftz | int | rw | Shift value (in points) for the grid along its z-axis |
| uppercutoff | double | rw | The upper primary cutoff value |
| visible | int | rw | Flag specifying whether the grid is visible (i.e. should be drawn in the model) |
Table 6.31. Measurement Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| atoms | atom[] | ro | Array of atoms involved in the measurement |
| i | atom | ro | First atom involved in the measurement |
| j | atom | ro | Second atom involved in the measurement |
| k | atom | ro | Third atom involved in the measurement (if any) |
| l | atom | ro | Fourth atom involved in the measurement (if any) |
| literal | double | ro | The literal value (e.g. distance, angle, or torsion angle) of the measurement using atom coordinates as-is without applying minimum image criteria in periodic systems |
| value | double | ro | Value (e.g. distance, angle, or torsion angle) of the measurement |
Table 6.32. Model Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element | ro | Array of element data (masses, symbols, names, etc.) |
| angles | measurement[] | ro | List of current angle measurements in the model |
| atoms | atom[] | ro | Array of atoms in the model |
| bonds | bond[] | ro | Array of bonds defined in the model |
| cell | unitcell | rw | The model's unit cell |
| distances | measurement[] | ro | List of current distance measurements in the model |
| eigenvectors | eigenvector[] | ro | List of current eigenvectors stored in the model |
| energy | energystore | ro | The model's energy store, containing the total calculated energy and all associated contributions |
| ff | forcefield | rw | Forcefield associated to the model (if any) |
| ffangles | ffbound[] | ro | List of unique forcefield angle terms in the model |
| ffbonds | ffbound[] | ro | List of unique forcefield bond terms in the model |
| ffmass | double | ro | Forcefield mass of the current model, which can differ from the actual mass if united-atom types have been assigned |
| fftorsions | ffbound[] | ro | List of unique forcefield torsion terms in the model |
| fftypes | ffatom | ro | Array of unique atom types used in the model |
| frame | model | ro | The current frame in the model's trajectory (if it has one) |
| frames | model[] | ro | Array of trajectory frame pointers (only if the trajectory is cached) |
| glyphs | glyph[] | ro | List of glyphs owned by the model |
| grids | grid[] | ro | List of grids owned by the model |
| id | int | ro | The index of the model in Aten's internal list of loaded models |
| mass | double | ro | Mass of the current model |
| name | string | rw | Name of the model |
| nangles | int | ro | Number of angle measurements in the model |
| natoms | int | ro | Number of atoms in the model |
| nbasiscartesians | int | ro | Number of cartesian basis functions defined in stored basis shells |
| nbasisshells | int | ro | Number of basis shells defined in the model |
| nbonds | int | ro | Number of bonds in the model |
| ndistances | int | ro | Number of distance measurements in the model |
| nffangles | int | ro | Number of unique angle terms used in the model |
| nffbonds | int | ro | Number of unique bond terms used in the model |
| nfftorsions | int | ro | Number of unique torsion terms used in the model |
| nfftypes | int | ro | Number of unique atom types used in the model |
| nframes | int | ro | Number of frames in associated trajectory |
| nglyphs | int | ro | Number of glyphs owned by the model |
| ngrids | int | ro | Number of grids owned by the model |
| npatterns | int | ro | Number of patterns defined for the model |
| nselected | int | ro | Number of atoms selected in the model |
| ntorsions | int | ro | Number of torsion angle measurements in the model |
| nunknown | int | ro | Number of atoms in the model that are of unknown element |
| patterns | pattern[] | ro | Array of patterns currently defined for the model |
| region | region | ro | Region data for this model, used by the disordered builder |
| selection | atom[] | ro | A list of atoms in representing the current atom selection of the model |
| torsions | measurement[] | ro | List of current torsion angle measurements in the model |
Table 6.33. Model Type Functions
| Function | Return Type | Description |
|---|---|---|
| addhydrogen ( ) | -- | Hydrogen satisfy all atoms in the model. See the addhydrogen command for more details. |
| augment ( ) | -- | Automatically detect and add multiple bonds in the system. See the augment command for more details. |
| charge ( ) | -- | Assign charges to the model from the current forcefield. See the charge command for more details. |
| clearbonds ( ) | -- | Remove all bonds from the model. See the clearbonds command for more details. |
| clearcharges ( ) | -- | Remove al charges from the model, setting them to zero. See the clearcharges command for more details. |
| clearselectedbonds ( ) | -- | Remove all bonds from the current atom selection. See the clearselectedbonds command for more details. |
| copy ( ) | -- | Copy the current atom selection to the clipboard. See the copy command for more details. |
| cut ( ) | -- | Cut the current atom selection to the clipboard. See the cut command for more details. |
| delete ( ) | -- | Delete the current atom selection. See the delete command for more details. |
| expand ( ) | -- | Expand the current atom selection along bonds. See the expand command for more details. |
| finalise ( ) | -- | Finalise the current model. See the finalisemodel command for more details. |
| movetoend ( ) | -- | Move the current atom selection to the bottom (highest IDs) of the atom list. See the movetoend command for more details. |
| movetostart ( ) | -- | Move the current atom selection to the top (lowest IDs) of the atom list. See the movetostart command for more details. |
| newatom ( int|string el, double x = 0.0, double y = 0.0, double z = 0.0, double vx = 0.0, double vy = 0.0, double vz = 0.0, double fx = 0.0, double fy = 0.0, double fz ) | atom | Create a new atom in the model. See the newatom command for more details. |
| newatomfrac ( int|string el, double x, double y, double z, double vx = 0.0, double vy = 0.0, double vz = 0.0, double fx = 0.0, double fy = 0.0, double fz ) | atom | Create a new atom in the model, in fractional coordinates. See the newatomfrac command for more details. |
| newbasisshell ( atom|int i, string type ) | basisshell | Create a new basis shell definition in the model, centred on the specified atom/id, and of the given shell type. See the newbasisshell command for more details. |
| newbond ( atom|int i, atom|int j, string|int bondtype = "" ) | bond | Create a new bond between atoms in the model. See the newbond command for more details. |
| newbondid ( int id_i, int id_j, string|int bondtype = "" ) | bond | Create a new bond between atom IDs in the model. See the newbondid command for more details. |
| neweigenvector ( int size = (auto) ) | eigenvector | Create a new eigenvector in the model of the specified size. If the size is not specified, the vector length is set to match the number of cartesian basis functions store with the current basis shell definitions in the model. See the neweigenvector command for more details. |
| newglyph ( string style, string options = "" ) | glyph | Create a new glyph in the model. See the newglyph command for more details. |
| newgrid ( string name ) | grid | Create a new gridh in the model. See the newgrid command for more details. |
| paste ( ) | -- | Paste the current clipboard contents into the model. See the paste command for more details. |
| rebond ( ) | -- | Calculate bonds in the model. See the rebond command for more details. |
| rebondpatterns ( ) | -- | Calculate bonds within patterns in the model. See the rebondpatterns command for more details. |
| rebondselection ( ) | -- | Calculate bonds in the current selection. See the rebondselection command for more details. |
| redo ( ) | -- | Redo the last undone change in the model. See the redo command for more details. |
| reorder ( ) | -- | Reorder atoms so bound atoms have adjacent IDs. See the reorder command for more details. |
| savebitmap ( string format, string filename, int width = auto, int height = auto, int quality = 100 ) | -- | Save a bitmap image of the current model view. See the savebitmap command for more details. |
| selectall ( ) | -- | Select all atoms in the model. See the selectall command for more details. |
| selectionaddhydrogen ( ) | -- | Hydrogen satisfy all atoms in the current selection. See the selectionaddhydrogen command for more details. |
| selectnone ( ) | -- | Deselect all atoms in the model. See the selectnone command for more details. |
| shiftdown ( int n = 1 ) | -- | Shift the current atom selection down one (or more) places in the atom list (towards higher IDs). See the shiftdown command for more details. |
| shiftup ( int n = 1 ) | -- | Shift the current atom selection up one (or more) places in the atom list (towards lower IDs). See the shiftup command for more details. |
| showall ( ) | -- | Unhides any hidden atoms in the model. See the showall command for more details. |
| transmute ( int|string el ) | -- | Transmute all selected atoms to the specified element. See the transmute command for more details. |
| undo ( ) | -- | Undo the last chanige made to the model. See the undo command for more details. |
Table 6.34. Pattern Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| elements | element | ro | Array of element data (masses, symbols, names, etc.) |
| angles | bound[] | ro | Array of angle interactions in one molecule of the pattern |
| atoms | atom[] | ro | Array of atoms spanned by the pattern |
| bonds | bound[] | ro | Array of bond interactions in one molecule of the pattern |
| cog | vector[] | ro | Array of centres of mass of the molecules in the pattern |
| com | vector[] | ro | Array of centres of geometry of the molecules in the pattern |
| ff | forcefield[] | rw | Reference to the forcefield associated to the pattern (if any) |
| ffangles | ffbound[] | ro | List of unique forcefield angle terms in the pattern |
| ffbonds | ffbound[] | ro | List of unique forcefield bond terms in the pattern |
| fftorsions | ffbound[] | ro | List of unique forcefield torsion terms in the pattern |
| fftypes | ffatom | ro | Array of unique atom types used in the pattern |
| firstatom | atom[] | ro | Reference to the first atom spanned by the pattern |
| firstatomid | int | ro | Atom ID of the first atom spanned by the pattern |
| fixed | int | rw | Whether the coordinates of all atoms in the pattern are fixed in MC routines |
| lastatom | atom[] | ro | Reference to the last atom spanned by the pattern |
| lastatomid | int | ro | Atom ID of the last atom spanned by the pattern |
| name | string | rw | Name of the pattern |
| nangles | int | ro | Number of angles in one molecule of the pattern |
| natoms | int | ro | Total number of atoms spanned by the pattern |
| nbonds | int | ro | Number of bonds in one molecule of the pattern |
| nffangles | int | ro | Number of unique angle terms used in the pattern |
| nffbonds | int | ro | Number of unique bond terms used in the pattern |
| nfftorsions | int | ro | Number of unique torsion terms used in the pattern |
| nfftypes | int | ro | Number of unique atom types used in the pattern |
| nmolatoms | int | ro | Number of atoms in one molecule of the pattern |
| nmols | int | ro | Number of molecules (repeat units) in the pattern |
| ntorsions | int | ro | Number of torsion interactions in one molecule of the pattern |
| torsions | bound[] | ro | Array of torsion interactions in one molecule of the pattern |
Table 6.35. Prefs Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| anglelabelformat | string | rw | The C-style format to use for the numerical value of angle labels |
| aromaticringcolour | double[4] | rw | Colour of aromatic ring circles |
| atomstyleradius | double[4] | rw | The atom radii used for selection and rendering in the four Drawing Styles |
| backcull | int | rw | Whether culling of backward-facing polygons should be performed |
| backgroundcolour | double[4] | rw | Background colour of the main canvas on which models are drawn |
| bondstyleradius | double[4] | rw | The bond radii used for selection and rendering in the four Drawing Styles |
| bondtolerance | double | rw | Tolerance used in automatic calculation of bonds between atoms |
| cachelimit | int | rw | The trajectory cache size (in kilobytes) - trajectory files calculated to have more than this amount of data will not be cached in memory |
| calculateelec | int | rw | Controls whether electrostatic contributions to the energy/forces are calculated |
| calculateintra | int | rw | Controls whether intramolecular contributions to the energy/forces are calculated |
| calculatevdw | int | rw | Controls whether short-range Vdw contributions to the energy/forces are calculated |
| clipfar | double | rw | The far clipping distance used when rendering |
| clipnear | double | rw | The near clipping distance used when rendering |
| colourscales | colourscale[10] | ro | List of colourscales |
| colourscheme | string | rw | The current Colour Scheme used to colour atoms and bonds |
| combinationrule | string | rw | Lennard-Jones parameter combination rule equations. See Combination Rules for a list of rules. |
| commonelements | string | rw | Comma-separated list of common elements that appear in the Select Element dialog |
| dashedaromatics | int | rw | Whether to render solid or dashed rings for aromatics |
| densityunit | string | rw | The unit of density to used when displaying cell densities |
| depthcue | int | rw | Enables/disables depth cueing |
| depthfar | int | rw | The far fog distance used when rendering (if depth cueing is enabled) |
| depthnear | int | rw | The near fog distance used when rendering (if depth cueing is enabled) |
| distancelabelformat | string | rw | The C-style format to use for the numerical value of distance labels |
| eleccutoff | double | rw | The electrostatic cutoff distance |
| elecmethod | string | rw | The method of electrostatic energy/force calculation |
| energyunit | double | rw | Set the unit of energy to use |
| energyupdate | int | rw | Update frequency for the energy in various methods |
| ewaldalpha | double | rw | Convergence parameter in Ewald sum |
| ewaldkmax | int[3] | rw | Vector of Ewald reciprocal space vector limits (kmax) |
| ewaldprecision | double | rw | Precision parameter to use when generating parameters in EwaldAuto |
| forcerhombohedral | int | rw | For spacegroups that are detected to have a hexagonal basis, force packing to use generators in a rhombohedral basis |
| globeaxescolour | double[4] | rw | Colour of axis pointers on the rotation globe |
| globecolour | double[4] | rw | Colour of the actual rotation globe |
| globesize | int | rw | Size, in pixels, of the rotation globe in the lower-right-hand corner of the screen |
| glyphcolour | double[4] | rw | Default colour of all created glyphs |
| hdistance | double | rw | Default H-X bond distance to use when adding hydrogen atoms |
| imagequality | int | rw | The general rendering quality (i.e. number of triangles used to generate primitive objects) of the images, used if 'reusequality' is set to FALSE (otherwise the current 'quality' value is used). |
| keyaction | string[3] | rw | Current actions of the modifier keys Shift, Ctrl, and Alt |
| labelsize | int | rw | Font pointsize for label text |
| levelofdetailstartz | double | rw | Z-depth (in Angstroms) at which level of detail algorithm begins |
| levelofdetailwidth | double | rw | Z-width (in Angstroms) of each level of detail strip |
| levelsofdetail | int | rw | Number of levels of detail to employ |
| linealiasing | int | rw | Enables/disables line aliasing |
| manualswapbuffers | int | rw | Flag whether manual swapping of GL buffers is enabled |
| maxrings | int | rw | Maximum allowable number of rings to detect within any single pattern |
| maxringsize | int | rw | Maximum size of ring to detect when atom typing |
| maxundo | int | rw | Maximum number of undo levels remembered for each model (-1 = unlimited) |
| modelupdate | int | rw | Update frequency for the current model in various methods |
| mopacexe | string | rw | Location of MOPAC executable (including full path) |
| mouseaction | string[4] | rw | Current actions of the Left, Middle, Right, and Wheel mouse buttons |
| mousemovefilter | int | rw | Sets the degree to which mouse move events are filtered, with 1 being no filtering. Use this to reduce update lag on sluggish systems. |
| multisampling | int | rw | Enables/disables multisampling (hardware aliasing) |
| noqtsettings | int | rw | Flag controlling whether OS-stored Qt settings are loaded on startup |
| offscreenobjects | int | rw | Bitarray of View Objects drawn when rendering scenes to image files |
| perspective | int | rw | Whether perspective view is enabled |
| perspectivefov | double | rw | Field of vision angle to use for perspective rendering |
| polygonaliasing | int | rw | Enables/disables polygon aliasing |
| renderstyle | string | rw | The current model drawing style |
| quality | int | rw | The general rendering quality (i.e. number of triangles used to generate primitive objects) of the main view. Higher values give rounder atoms but make rendering slower. See also the 'imagequality' setting. |
| replicatefold | int | rw | Whether to fold atoms before cell replicate |
| replicatetrim | int | rw | Whether to trim atoms after cell replicate |
| reusequality | int | rw | Flag specifying whether to use the current rendering 'quality' value when saving images (FALSE) or the 'imagequality' value (TRUE). |
| screenobjects | int | rw | Bitarray of View objects drawn when rendering to screen |
| selectionscale | double | rw | Multiple of the standard atom radius to use for transparent selection spheres |
| shininess | int | rw | The shininess of atoms (value must be between 0 and 127 inclusive) |
| specularcolour | double[4] | rw | Colour of all specular reflections |
| spotlight | int | rw | Whether the spotlight is on or off |
| spotlightambient | double[4] | rw | The ambient colour component of the spotlight |
| spotlightdiffuse | double[4] | rw | The diffuse colour component of the spotlight |
| spotlightposition | double[4] | rw | Spotlight coordinates (in Å) |
| spotlightspecular | double[4] | rw | The specular colour component of the spotlight |
| tempdir | string | rw | Temporary (working) directory for some operations (e.g. execution of MOPAC jobs) |
| textcolour | double[4] | rw | Colour of rendered text |
| transparencybinwidth | double | rw | Z-width of individual transparency bins |
| transparencycorrect | int | rw | Whether sort of transparent triangles is enabled. When enabled, any object which is to be drawn in a transparent colour is split into its component triangles and sorted over several bins (representing slices in the z direction). Rendering is a little slower with this option enabled, but corrects most transparency artefacts with sensible bin values. |
| transparencynbins | int | rw | The number of bins to use for sorting transparent triangles |
| transparencybinstartz | double | rw | The z-depth at which binned transparency sorting begins. Before this value, all triangles are grouped (and rendered) together without sorting |
| unitcellaxescolour | double[4] | rw | Colour of unit cell axis pointers |
| unitcellcolour | double[4] | rw | Colour of unit cell |
| useframebuffer | int | rw | Whether to use the grabFrameBuffer() method of the main widget instead of the normal renderPixmap() method when saving bitmap images. If saving an image results in a completely black or corrupt bitmap, try setting this to TRUE. |
| usenicetext | int | rw | Whether QPainter (on/1/TRUE) or QGlWidget (off/0/FALSE) is used to render label text |
| vdwcut | double | rw | The VDW cutoff distance |
| vdwscale | double | rw | Scaling factor to use for short-range radii in energy/force calculation |
| vibrationcolour | double[4] | rw | Colour of vibration vector arrows |
| warn1056 | int | rw | Many changes to the typing language syntax were introduced in revision 1056, and a warning message was implemented. This can be turned off by setting this variable to FALSE |
| zoomthrottle | double | rw | Zooming 'throttle' value used to calm down or increase the distance jumped when zooming with the mouse |
Table 6.36. Region Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| centre | vector | rw | Geometric centre of the region in real coordinates |
| centrefrac | vector | rw | Geometric centre of the region in fractional cell coordinates |
| geometry | vector | rw | Geometry of the region in real coordinates |
| geometry | vector | rw | Geometry of the region in fractional cell coordinates |
| iscentrefrac | int | ro | Indicates whether the current region centre was defined in fractional coordinates |
| isgeometryfrac | int | ro | Indicates whether the current region geometry was defined in fractional coordinates |
| overlap | int | rw | Flag to specify whether inserting molecules at positions that overlap with other regions is allowed |
| shape | string | rw | The current shape of the region. See Region Shapes for a list |
| xrotation | double | rw | The x-rotation of the region |
| yrotation | double | rw | The y-rotation of the region |
Table 6.38. UnitCell Type Members
| Member | Type | Access | Description |
|---|---|---|---|
| a | double | rw | Length of cell axis A |
| alpha | double | rw | Angle between cell axes B and C |
| b | double | rw | Length of cell axis B |
| beta | double | rw | Angle between cell axes B and C |
| c | double | rw | Length of cell axis C |
| ax | double | rw | x-component of cell axis A |
| ay | double | rw | y-component of cell axis A |
| az | double | rw | z-component of cell axis A |
| bx | double | rw | x-component of cell axis B |
| by | double | rw | y-component of cell axis B |
| bz | double | rw | z-component of cell axis B |
| centrex | double | ro | x-coordinate at centre of defined cell |
| centrey | double | ro | y-coordinate at centre of defined cell |
| centrez | double | ro | z-coordinate at centre of defined cell |
| cx | double | rw | x-component of cell axis C |
| cy | double | rw | y-component of cell axis C |
| cz | double | rw | z-component of cell axis C |
| density | double | ro | Density of the current cell |
| gamma | double | rw | Angle between cell axes A and B |
| matrix | double[9] | rw | Cell axis matrix containing all three cell vectors. For example, ax = matrix[1], ay = matrix[2], etc.) |
| sgid | int | rw | Integer ID of the current spacegroup |
| sgname | string | rw | Symbol of the current spacegroup |
| type | string | ro | Type of the current unit cell (see Cell Types |
| volume | double | ro | Volume of the cell in cubic Å |
Define and set properties of atoms.
![]() | See also: |
|---|---|
|
Syntax:
void atomstyle( | string style); |
Sets the individual drawing style for the current atom selection, used when the global drawing style is 'individual'.
For example:
atomstyle("tube")
sets the current atom selection to be drawn in the 'tube' style.
![]() | See also: |
|---|---|
|
Syntax:
atom currentatom( | ); |
atom currentatom( | id); |
atom|id id;Return a reference to the current atom. If a new atom/id is provided the current atom is set before being returned.
For example:
atom i = getatom(1);
makes the first atom in the current model the current atom, and returns a reference to it.
Syntax:
void fix( | id = 0); |
atom|id id = 0;Fix the positions of the current atom selection (or individual atom specified) so that they remain in the same position following various methods (e.g. minimisations).
For example:
fix();
fixes the positions of all selected atoms.
for (int n=1; n<=10; ++n) fix(n);
fixes the positions of the first 10 atoms in the current model.
Syntax:
void free( | id = 0); |
atom|id id = 0;Free the positions of previously fixed atoms in the current selection (or the individual atom specified).
For example:
free(5);
allows the fifth atom in the current model to be moved again.
Syntax:
atom getatom( | id); |
atom|id id;Return a reference to the atom specified.
For example:
atom i = getatom(3);
returns a reference to the third atom in the current model.
Syntax:
void hide( | id = 0); |
atom|id id = 0;Hides the current selection of atoms (or the supplied atom) from view, meaning they cannot be selected by direct clicking/highlighting in the GUI. They are still subject to transformation if they are selected by other means.
Syntax:
void setcharge( | q); |
double q;void setcharge( | q, | |
id); |
double q;int id;Set the atomic charge of the current (or specified) atom.
Syntax:
void setcoords( | x, | |
| y, | ||
z); |
double x;double y;double z;void setcoords( | x, | |
| y, | ||
| z, | ||
id); |
double x;double y;double z;int id;Set the coordinates of the current (or specified) atom.
Syntax:
void setelement( | element); |
string|int element;void setelement( | element, | |
id); |
string|int element;int id;Set the element of the current (or specified) atom.
Syntax:
void setforces( | fx, | |
| fy, | ||
fz); |
double fx;double fy;double fz;void setforces( | fx, | |
| fy, | ||
| fz, | ||
id); |
double fx;double fy;double fz;int id;Set the forces of the current (or specified) atom.
Syntax:
void setfx( | d); |
double d;void setfx( | d, | |
id); |
double d;int id;Set the x force of the current (or specified) atom.
Syntax:
void setfy( | d); |
double d;void setfy( | d, | |
id); |
double d;int id;Set the y force of the current (or specified) atom.
Syntax:
void setfz( | d); |
double d;void setfz( | d, | |
id); |
double d;int id;Set the z force of the current (or specified) atom.
Syntax:
void setid( | newid); |
int newid;void setid( | newid, | |
id); |
int newid;int id;Set the temporary ID of the current (or specified) atom, useful for when parsing atoms from a file that are not in any useful order but have an id specified for the purposes of subsequent connectivity definitions, for example. Within filters, once loading is complete the finalisemodel command will reset all atom ids to internal numbering.
Syntax:
void setrx( | d); |
double d;void setrx( | d, | |
id); |
double d;int id;Set the x coordinate of the current (or specified) atom.
Syntax:
void setry( | d); |
double d;void setry( | d, | |
id); |
double d;int id;Set the y coordinate of the current (or specified) atom.
Syntax:
void setrz( | d); |
double d;void setrz( | d, | |
id); |
double d;int id;Set the z coordinate of the current (or specified) atom.
Syntax:
void setvelocities( | vx, | |
| vy, | ||
vz); |
double vx;double vy;double vz;void setvelocities( | vx, | |
| vy, | ||
| vz, | ||
id); |
double vx;double vy;double vz;int id;Set the velocity components of the current (or specified) atom.
Syntax:
void setvx( | d); |
double d;void setvx( | d, | |
id); |
double d;int id;Set the x velocity of the current (or specified) atom.
Syntax:
void setvy( | d); |
double d;void setvy( | d, | |
id); |
double d;int id;Set the y velocity of the current (or specified) atom.
Create bonds and perform automatic bonding operations.
Syntax:
void augment( | ); |
Augments bonds in the current model, automatically determining multiple bonds based on the valency of atoms, and aromaticity based on double bonds in rings.
For example:
augment();
![]() | See also: |
|---|---|
|
Syntax:
double bondtolerance( | ); |
double bondtolerance( | tol); |
double tol;Adjust the bond calculation tolerance. It may often be necessary to tweak the bond tolerance in order to get Aten to recognise patterns within models correctly. The current or new bond tolerance is returned.
For example:
bondtolerance(1.20);
sets the bonding tolerance to 1.2.
double tol = bondtolerance();
retrieve the current bond tolerance.
![]() | See also: |
|---|---|
|
Syntax:
void clearselectedbonds( | ); |
Delete all bonds in the current atom selection.
For example:
clearselectedbonds();
Syntax:
void newbond( | i, | |
j); |
atom|int i;atom|int j;void newbond( | i, | |
| j, | ||
bondtype); |
atom|int i;atom|int j;string|int bondtype;Create a new bond in the model between the specified atoms. The optional bondtype argument specified the type of bond: e.g. single (default), double, or triple. Alternatively, an integer number representing the bond order may be given.
For example:
newbond(4, 5, "double");
creates a double bond between the fourth and fifth atoms in the model.
newbond(1, 2, 3);
creates a triple bond between the first and second atoms in the model.
atom i,j;
i = newatom("C", 0, 0, 0);
j = newatom("H", 0, 1.08, 0);
newbond(i, j, "single");
creates a new single bond between two atoms, supplied as references.
Syntax:
void newbondid( | i, | |
j); |
int i;int j;void newbondid( | i, | |
| j, | ||
bondtype); |
int i;int j;string|int bondtype;Create a new bond in the model between atoms referenced by their temporary ID, set manually with the setid command. Otherwise identical to the newbond command.
Syntax:
void rebondpatterns( | ); |
Calculate bonding in the current model, but restrict bond creation to between atoms in individual molecules of defined patterns.
For example:
rebondpatterns();
'rebondpatterns' can be useful when molecules in a system are too close together to have the correct bonding detected. In such a case, bonds and any old patterns in the model may be cleared, new patterns created by hand, and then 'rebondpatterns' used to calculate bonds only between the atoms of individual molecules in the defined patterns in order to recreate the original molecules.
For example:
clearbonds(); # Delete existing bonds in model
clearpatterns(); # Delete any existing patterns in the model
newpattern("benzene", 100, 12); # Add new pattern: 100 molecules of benzene (12 atoms), followed by...
newpattern("ether", 50, 15); # ...50 molecules of diethyl-ether (15 atoms)
rebondpatterns(); # Calculate bonds within individual benzene and ether molecules
Tools to build molecules from scratch, or finalise unfinished models. When creating atoms using the commands listed below, if the coordinates of the new atom are not specified then it is placed at the current pen position. In addition, the reference frame of the pen position is represented as a set of three orthogonal vectors defining the pen's local coordinate system (set initially to the Cartesian axes) centred at an arbitrary origin (the pen position). Subsequent rotations operate on these coordinate axes. Think of it as a 3D version of the old-school turtle.
Syntax:
void addhydrogen( | ); |
void addhydrogen( | i); |
atom|int i;Satisfy the valencies of all atoms in the current model by adding hydrogens to heavy atoms. If an integer id or atom reference is provided as the argument then the addition of hydrogen is restricted to the specified atom.
For example:
addhydrogen();
add hydrogens to all atoms in the current model.
addhydrogen(10);
add hydrogens to atom 10 only.
Syntax:
void bohr( | x, | |
...); |
object x;...;Converts the specified object(s) data to Å, assuming that it is currently specified in Bohr.
For example:
atom i = aten.model.atoms[2]; bohr(i);
converts the coordinates of the supplied atom from Bohr to Å.
Syntax:
atom chain( | el); |
int|string el;atom chain( | el, | |
bondtype); |
int|string el;int|string bondtype;atom chain( | el, | |
| x, | ||
| y, | ||
z); |
int|string el;double x;double y;double z;atom chain( | el, | |
| x, | ||
| y, | ||
| z, | ||
bondtype); |
int|string el;double x;double y;double z;int|string bondtype;Create a new atom of element el at the current pen position (or the specified coordinates) bound to the last drawn atom with a single bond (or of type bondtype if it was specified). The element can be provided as a character string containing the element symbol or element name instead of the integer atomic number. A reference to the new atom is returned.
For example:
atom i = chain("C");
places a carbon atom at the current pen coordinates, and creates a single bond with the last drawn atom.
atom i = chain(8, "double");
places an oxygen atom at the current pen coordinates, and creates a double bond with the last drawn atom.
atom i = chain("Cl", 4.0, 5.0, 6.0, "single");
creates a chlorine at coordinates { 4.0, 5.0, 6.0 }, joined by a single bond to the last drawn atom.
Syntax:
void endchain( | ); |
Ends the current chain (so that the next atom drawn with 'chain' will be unbound).
For example:
endchain();
Syntax:
void locate( | x, | |
| y, | ||
z); |
double x;double y;double z;Sets the pen position to the coordinates specified (in Å).
For example:
locate(0.0, 0.0, 0.0);
moves the pen back to the coordinate origin.
Syntax:
void move( | x, | |
| y, | ||
z); |
double x;double y;double z;Moves the pen position by the amounts specified (in Å).
For example:
move(1.0, 1.0, 0.0);
moves the pen +1 Angstrom in both the x and y directions.
Syntax:
void movetoend( | ); |
Move the current atom selection to the end of the list. The relative order of atoms in the selection is preserved.
For example:
movetoend();
Syntax:
void movetostart( | ); |
Move the current atom selection to the start of the list. The relative order of the atoms in the selection is preserved.
For example:
movetostart();
Syntax:
void newatom( | el); |
int|string el;void newatom( | el, | |
| x, | ||
| y, | ||
z); |
int|string el;double x;double y;double z;void newatom( | el, | |
| x, | ||
| y, | ||
| z, | ||
| vx, | ||
| vy, | ||
vz); |
int|string el;double x;double y;double z;double vx;double vy;double vz;void newatom( | el, | |
| x, | ||
| y, | ||
| z, | ||
| vx, | ||
| vy, | ||
| vz, | ||
| fx, | ||
| fy, | ||
fz); |
int|string el;double x;double y;double z;double vx;double vy;double vz;double fx;double fy;double fz;Create a new atom of element el at the current pen position or, if provided, the specified coordinates (and optional velocities or velocities and forces). Either the integer atomic number or the symbol/name of the element may be used to identify the desired element. A reference to the new atom is returned.
For example:
atom i = newatom("N");
places a nitrogen atom at the current pen coordinates.
atom i = newatom(18, 5.2, 0, 0);
places an argon atom at the coordinates { 5.2, 0.0, 0.0 }.
Syntax:
void newatomfrac( | el, | |
| x, | ||
| y, | ||
z); |
int|string el;double x;double y;double z;void newatomfrac( | el, | |
| x, | ||
| y, | ||
| z, | ||
| vx, | ||
| vy, | ||
vz); |
int|string el;double x;double y;double z;double vx;double vy;double vz;void newatomfrac( | el, | |
| x, | ||
| y, | ||
| z, | ||
| vx, | ||
| vy, | ||
| vz, | ||
| fx, | ||
| fy, | ||
fz); |
int|string el;double x;double y;double z;double vx;double vy;double vz;double fx;double fy;double fz;Create a new atom of element el at the specified fractional coordinates (velocities and forces are optional). Either the integer atomic number or the symbol/name of the element may be used to identify the desired element. A reference to the new atom is returned.
For example:
atom i = newatomfrac("C", 0.5, 0.5, 0.5);
places a carbon atom at the centre of the model's cell.
Syntax:
void reorder( | ); |
Adjust the ordering of atoms in the current selection such that atoms in bound fragments/molecules have successive IDs. Useful to recover 'molecularity' in order to apply a suitable pattern description to the system.
For example:
reorder();
Syntax:
void rotx( | angle); |
double angle;Rotates the reference coordinate system about the x axis by angle degrees.
For example:
rotx(90.0);
rotates around the x axis by 90 degrees.
Syntax:
void roty( | angle); |
double angle;Rotates the reference coordinate system about the y axis by angle degrees.
For example:
roty(45.0);
rotates around the y axis by 45 degrees.
Syntax:
void rotz( | angle); |
double angle;Rotates the reference coordinate system about the z axis by angle degrees.
For example:
rotz(109.5);
rotates around the z axis by 109.5 degrees.
Syntax:
void shiftdown( | ); |
void shiftdown( | n); |
int n;Move the current atom selection one (or n) places down in the atom list (i.e. towards higher IDs).
For example:
shiftdown(4);
moves the current atom selection down four places.
Syntax:
void shiftup( | ); |
void shiftup( | n); |
int n;Move the current atom selection one (or n) places up in the atom list (i.e. towards lower IDs).
For example:
shiftup();
moves the current atom selection up one place.
Syntax:
void transmute( | el); |
int|string el;Transmute the current atom selection to the specified element.
For example:
transmute("F");
changes all atoms in the current selection to fluorine.
transmute(Cl);
changes all atoms in the current selection to chlorine.
transmute(6);
changes all atoms in the current selection to carbon
Create, remove, modify, pack, and replicate the model's unit cell.
Syntax:
void adjustcell( | parameter, | |
value); |
string parameter;double value;Adjust a single unit cell parameter (one of 'a', 'b', 'c', 'alpha', 'beta', 'gamma', or one of the matrix elements 'ax', 'ay', 'az', ..., 'cz') by the given 'value'. This does not set the specified 'parameter' to the given 'value'; instead the supplied 'value' is added to the existing value of the parameter.
For example:
adjustcell("alpha",5.0);
increases the cell angle 'alpha' by 5 degrees.
adjustcell("c",-10.0);
decreases the cell length 'c' by 10 Å.
Syntax:
void cell( | a, | |
| b, | ||
| c, | ||
| alpha, | ||
| beta, | ||
gamma); |
double a;double b;double c;double alpha;double beta;double gamma;Set cell lengths and angles of current model. This command will modify an existing cell or add a new cell to a model currently without a unit cell specification.
For example:
cell(20.0, 10.0, 10.0, 90.0, 90.0, 90.0);
sets the model's cell to be orthorhombic with side lengths 20x10x10 Å.
Syntax:
void cellaxes( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
cz); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;Set cell axes of current model. This command will modify an existing cell or add a new cell to a model currently without a unit cell specification.
For example:
cellaxes(15, 0, 0, 0, 15, 0, 0, 0, 15);
sets the model's cell to be cubic with side length 15 Å.
Syntax:
void fold( | ); |
Fold all atoms so they are within the boundaries of the unit cell.
For example:
fold();
Syntax:
void foldmolecules( | ); |
Fold all pattern molecules so the are unbroken across cell boundaries.
For example:
foldmolecules();
Syntax:
void millercut( | h, | |
| k, | ||
| l, | ||
inside = FALSE); |
int h;int k;int l;bool inside = FALSE;Remove all atoms from the unit cell that lay 'outside' the specified Miller plane (and its mirror, if it has one). If the final parameter is given as TRUE, then atoms 'inside' the bounding Miller plane(s) are selected.
For example:
millercut(1,2,1,TRUE);
removes all atoms inside the two enclosing (121) planes.
Syntax:
void replicate( | negx, | |
| negy, | ||
| negz, | ||
| posx, | ||
| posy, | ||
posz); |
double negx;double negy;double negz;double posx;double posy;double posz;Create a supercell of the current model, creating copies of the cell in each of the three cell axis directions. The number of cells to replicate in each positive and negative direction are specified as 'additional' cells beyond the original. So:
replicate(0, 0, 0, 0, 0, 0);
will do nothing at all to the model, while:
replicate(-5, 0, 0, 5, 0, 0);
will result in a supercell that consists of eleven copies of the original cell along the 'x' axis direction. Similarly,
replicate(0, 0, 0, 4, 4, 4); replicate(-2, -2, -2, 2, 2, 2);
will both create a 5x5x5 arrangement of the original cell.
Syntax:
void removecell( | ); |
Clears any cell description (removes periodic boundary conditions) from the current model.
For example:
removecell();
Syntax:
void scale( | x, | |
| y, | ||
| z, | ||
calcenergy = FALSE); |
double x;double y;double z;bool calcenergy = FALSE;Scale unit cell and its constituent atoms by the scale factors x, y, and z. The optional calcenergy parameter calculates the energy difference resulting from the scaling operation.
For example:
scale(1.0, 2.0, 1.0);
doubles the length of the y-axis of the system. x- and z-axes remain unchanged.
Syntax:
void scalemolecules( | x, | |
| y, | ||
| z, | ||
calcenergy = FALSE); |
double x;double y;double z;bool calcenergy = FALSE;Scale unit cell and centres-of-geometry of molecules within it by the scale factors x, y, and z. Within individual molecules the relative distances between atoms stays the same, but the centres-of-geometry of other molecules do not. The optional calcenergy parameter calculates the energy difference resulting from the scaling operation.
For example:
scalemolecules(0.5, 0.5, 0.5);
halves the lengths of all axes, scaling the positions of the molecules to reflect the new size.
Syntax:
void setcell( | parameter, | |
value); |
string parameter;double value;Set a single unit cell parameter one of 'a'/, 'b', 'c', 'alpha', 'beta', 'gamma', or one of the matrix elements 'ax', 'ay', 'az', ..., 'cz') to the given value.
For example:
setcell("beta", 101.0);
sets the cell angle 'beta' to 101 degrees.
setcell("a", 15.5);
sets the cell length 'a' to 15.5 Å.
Assign partial charges to models, atoms, and patterns.
Syntax:
double charge( | ); |
double charge( | q); |
double q;Assigns a charge of q to each selected atom in the current model, or returns the total charge of the current selection if no value is supplied.
For example:
charge(1.0);
gives each atom in the current model's selection a charge of 1.0.
Syntax:
void charge( | ); |
Assigns charges to all atoms in the current model based on the forcefield associated to the model and the current types of the atoms.
For example:
chargeff();
Syntax:
void chargefrommodel( | ); |
Copies charges of all atoms in the current model to the atoms of the current trajectory frame.
For example:
chargefrommodel();
Syntax:
void chargepatom( | id, | |
q); |
int id;double q;Assigns a charge of q to atom id in each molecule of the current pattern.
For example:
chargepatom(3, 0.1);
assigns a charge of 0.1 to the third atom in each molecule of the current pattern.
Define colourscales to colour objects. Each colourscale has a number of points defining colours at specific values - between adjacent points the colour is linearly interpolated. Points in a colourscale are numbered from 1 onwards. There are ten available colourscales, with IDs 1-10. Some of these have specific uses within Aten.
![]() | See also: |
|---|---|
|
Syntax:
void addpoint( | scaleid, | |
| value, | ||
| r, | ||
| g, | ||
| b, | ||
a = 1.0); |
int scaleid;double value;double r;double g;double b;double a = 1.0;Adds a new point to the end of the specified colourscale, at the point value and with the RGB[A] colour provided.
For example:
addpoint(1, 15.0, 0.0, 1.0, 0.0);
adds a point to colourscale 1 at a value of 15.0 in a nasty green colour.
Syntax:
void clearpoints( | scaleid); |
int scaleid;Clears all points from the specified colourscale.
For example:
clearpoints(3);
clears all points from the third colourscale.
Syntax:
void listscales( | ); |
Lists the current types, colours, and ranges of the colourscales
For example:
listscales();
Syntax:
void removepoint( | scaleid, | |
pointid); |
int scaleid;int pointid;Remove a single point from the selected colourscale.
For example:
removepoint(1,4);
deletes the fourth point from colourscale 1.
Syntax:
string scalename( | scaleid); |
int scaleid;string scalename( | scaleid, | |
newname); |
int scaleid;string newname;Retrieves the name of the colourscale id provided, or sets the name if a new name is provided). The name is displayed next to the gradient bar (if drawn).
For example:
scalename(1, "Orientation");
renames the first colourscale to 'Orientation'.
Syntax:
void scalevisible( | scaleid, | |
visible); |
int scaleid;bool visible;Sets whether the gradient bar for the specified colourscale should be drawn in the main view. Default is 'off' for all colourscales.
For example:
scalevisible(9, "yes");
draws the gradient bar for the 9th colourscale in the main view.
Syntax:
void setpoint( | scaleid, | |
| pointid, | ||
| value, | ||
| r, | ||
| g, | ||
| b, | ||
a = 1.0); |
int scaleid;int pointid;double value;double r;double g;double b;double a = 1.0;Sets the value and colour of an existing point in the specified colourscale.
For example:
setpoint(1, 2, -3.3, 1.0, 1.0, 1.0);
sets the second point on colourscale 1 to a value of -3.3 and white colour.
Syntax:
void setpointcolour( | scaleid, | |
| pointid, | ||
| r, | ||
| g, | ||
| b, | ||
a = 1.0); |
int scaleid;int pointid;double r;double g;double b;double a = 1.0;Sets the colour of an existing point in the specified colourscale.
For example:
setpointcolour(5, 1, 0.0, 0.0, 1.0);
sets the first point on colourscale 5 to be coloured blue.
Set up the disordered builder to create systems from individual components using Monte Carlo methods.
Syntax:
void disorder( | ncycles); |
int ncycles;Start the disordered builder, requesting ncycles cycles of Monte Carlo moves.
For example:
disorder(50);
runs 50 cycles of the disordered builder.
Syntax:
void listcomponents( | ); |
Prints a list of the currently requested populations for all models to be added during the disordered building process.
For example:
listcomponents();
Syntax:
void regioncentre( | x, | |
| y, | ||
z); |
double x;double y;double z;Sets the coordinates of the centre of the set region for the current model.
For example:
regioncentre(5.0, 7.0, 6.0);
sets the centre of the current model's region to {5.0, 7.0, 6.0}.
Syntax:
void regioncentrefrac( | fx, | |
| fy, | ||
fz); |
double fx;double fy;double fz;As with regioncentre, sets the coordinates of the centre of the set region for the current model but in fractional cell coordinates.
Syntax:
void regiongeometry( | x, | |
| y, | ||
z); |
double x;double y;double z;Sets the geometry of the allowed region for the current model. The x, y, and z values determine the total extent/size of the region along each principal axis. For cylindrical regions, x and y determine the radii of the cylinder in the perpendicular directions to the cylinder vector, while z determines the length of the cylinder.
For example:
regiongeometry(10.0, 10.0, 3.0);
sets the geometry of the region for the current model. For example, if the region was of type 'sphere' this would create an elongated ellipsoid.
Syntax:
void regiongeometryfrac( | fx, | |
| fy, | ||
fz); |
double fx;double fy;double fz;As with regiongeometry, sets the geometry of the allowed region for the current model but in fractional cell coordinates.
Syntax:
void regionoverlap( | allowoverlap); |
bool allowoverlap;Determines whether additions into the current model's region are allowed to overlap with regions defined for other models. Default is true.
For example:
regionoverlap("false");
restricts the current model to the subspace of its defined region that does not overlap with any other region.
Syntax:
void regionrotation( | rotx, | |
roty); |
double rotx;double roty;Set the rotations of the current region.
Syntax:
void regionshape( | shape); |
string shape;Sets the shape of the allowed insertion region for the current model. Valid shapes are 'cell', 'cuboid', 'spheroid' and 'cylinder'.
For example:
regionshape("sphere");
restricts the current model to a spherical region of the cell.
Syntax:
void setnmols( | n); |
int n;Specify that n copies of the current model are to be added (or attempted to be added) during the build process.
For example:
setnmols(300);
requests that the current model, whatever it is, should be used in disordered building and that there should be 300 copies of the model in the new system. See also the 'nrequested' accessor of the model variable.
Syntax:
void setregion( | shape, | |
| cx, | ||
| cy, | ||
| cz, | ||
| x, | ||
| y, | ||
| z, | ||
allowoverlap); |
string shape;double cx;double cy;double cz;double x;double y;double z;bool allowoverlap = TRUE;Compound command that sets most aspects of the model's region definition at once, including its shape, centre coordinates, and geometry.
Syntax:
void setregion( | shape, | |
| fraccx, | ||
| fraccy, | ||
| fraccz, | ||
| fracx, | ||
| fracy, | ||
| fracz, | ||
allowoverlap); |
string shape;double fraccx;double fraccy;double fraccz;double fracx;double fracy;double fracz;bool allowoverlap = TRUE;Compound command that sets most aspects of the model's region definition at once, including its shape, centre coordinates, and geometry, all in fractional cell coordinates.
Syntax:
double vdwscale( | ); |
double vdwscale( | scale); |
double scale;Sets the scaling factor for VDW radii to use in the disordered builder, or returns the current value.
For example:
vdwscale(0.75);
scales all VDW radii by 0.75 in the calculation.
dosuble currentscale = vdwscale();
returns the current VDW scaling factor that will bbe applied.
Standard editing commands.
Syntax:
void copy( | ); |
Copy the current atom selection to the clipboard, ready for pasting.
For example:
copy();
Calculate energies for models and trajectory frames. All printing commands refer to the last energy calculated for either the model or a trajectory frame.
Syntax:
double ecut( | ); |
double ecut( | cutoff); |
double cutoff;Return (or set and return) the cutoff radius used in calculation of the electrostatics for a system.
For example:
ecut(15.0);
sets the electrostatic cutoff radius to 15.0 Å.
Syntax:
void elec( | type = "none"); |
string type = "none";void elec( | "coulomb"); |
"coulomb";void elec( | "ewald", | |
| alpha, | ||
| kx, | ||
| ky, | ||
kz); |
"ewald";double alpha;int kx;int ky;int kz;void elec( | "ewaldauto", | |
precision); |
"ewaldauto";double precision;Set the style of electrostatic energy calculation to use, either no electrostatics, coulombic (non-periodic) electrostatics, or Ewald-based electrostatics. For the latter, either the various parameters may be defined explicitly (when "ewald" is the chosen method) or may be estimated for the current system by using "ewaldauto".
Syntax:
double frameenergy( | ); |
Calculate energy of the current frame of the trajectory associated with the current model.
For example:
double energy = frameenergy();
Syntax:
double modelenergy( | ); |
Calculate the energy of the current model, which can then be printed out (in whole or by parts) by the other subcommands.
For example:
double e = modelenergy();
Syntax:
void printelec( | ); |
Prints out the electrostatic energy decomposition matrix.
For example:
printelec();
Syntax:
void printinter( | ); |
Prints out the total inter-pattern energy decomposition matrix.
For example:
printinter();
Syntax:
void printintra( | ); |
Prints out the total intramolecular energy decomposition matrix.
For example:
printintra();
Syntax:
void printenergy( | ); |
Prints the elements of the calculated energy in a list.
For example:
printenergy();
Syntax:
void printsummary( | ); |
Print out a one-line summary of the calculated energy.
For example:
printsummary();
Loops and if tests. Flow control is styled to replicate the common syntax used in C. Because of this, providing an in-depth explanation here is unnecessary since lots of people have already written far clearer and more in-depth documents. A good Google should find them.
Syntax:
do { commands } while { condition }
The do-while loop is cousin of the 'for' loop, except that there is no control variable. The termination of the loop depends on the condition which is tested at the end of every execution of the commands. If 'true', the commands are executed again, and condition re-tested afterwards. If 'false' the loop ends.
For example:
int i = 1;
do
{
i = i * 2;
printf("i = %d\n", i);
} while (i < 100)
will print out the following:
i = 2 i = 4 i = 8 i = 16 i = 32 i = 64 i = 128
Note that the final value of i inside the loop is '128' (greater than 100) since the condition is only tested at the end of the execution of the commands. The while loop works in the same way, save that the condition is tested at the beginning of the loop, before commands are executed, rather than at the end.
Syntax:
for ( startvalue ; condition ; increment ) { commands }
Three separate components make up a 'for' loop. startvalue defines both the control variable (i.e. the variable that changes on each loop iteration) and optionally its starting value, the condition is tested on each loop iteration to see whether or not to continue with the loop, and finally the increment is an expression to modify the control variable after each iteration, setting it to a new value. If multiple commands are to make up the body of the loop (executed on each iteration) then they should be enclosed in curly brackets (as written in the syntax above). If only a single command is executed on each iteration, the curly brackets may be omitted.
Some examples:
for (int i=1; i<=10; i = i + 1) printf("%i\n", i);
Loop over and print all integers between 1 and 10. A local variable i is declared and initialised all in one go in the startvalue part of the loop. The 'long' way of incrementing the integer variable (i = i + 1) is typically not used in C/C++, most people preferring to take advantage of the C's useful postfix and prefix operators, as in the next example).
for (n = 100; n>0; --n) printf("Counting down... %i\n", n);
Here, an existing variable n is decreased from 100 to 1, printing out all numbers along the way. Note the usage of the double-minus '--' operator (the prefix decrease operator) which decreases its associated variable, in this case n. For integers, to decrease means to reduce the value by 1. For other types the meaning may vary - for instance, with reference types the '--' operator means 'previous item in the list', since all such objects in Aten (e.g. atoms) are stored in lists containing many objects of the same type. This makes iterating over, say, all atoms in a given model pretty easy...
for (atom a = aten.model.atoms; a; ++a) printf("Atom id %i is element %s.\n", a.id, a.symbol);
In this example the variable a is declared and initialised to be a reference to the first atom in the current model. The condition part simply consists of the expression 'a', which effectively tests the reference address currently stored in a. Since any positive number equates to 'true' (see below for the 'if' test) the loop will continue until a contains no reference. Since most all reference objects in Aten are stored internally in linked lists, the prefix increment operator ('++') changes the value of the variable to be the reference of the next item in the list, or 0 if there are no more items. In this way, the whole list of atoms can be traversed and neatly ended once the final item in the list has passed.
A variant of the for loop described above is the for/in loop - here, only a control variable and initial value are supplied, both of which must be of pointer types. The loop itself will increase the value of the variable (i.e. skip to the next item in the linked list) until a NULL pointer is found. For example:
select(H); for (atom i = aten.model.selection; i; ++i) printf("Atom %i is selected\n", i.id); for (atom ii in aten.model.selection) printf("Atom %i is selected\n", ii.id);
This will select all hydrogen atoms in the current model then loop over the atom selection twice, once with a for loop and once with a for/in loop, both of which are equivalent.
Syntax:
if ( condition ) { commands }
if ( condition ) { commands... } else { commands }
The 'if' statement permits sections of code to be executed based on the assessment of logical comparison of values. If the supplied condition evaluates to be 'true' then the following commands are executed, otherwise nothing happens. In the second form of the command, if the condition evaluates to be 'false' then the second set of commands are executed instead. If multiple commands are to be executed then they should be enclosed in curly brackets (as written in the syntax above). If only a single command is to be executed the curly brackets may be omitted.
Typically, comparisons are made between two variables, for example 'if ( var1 > var2 ) ... ' checks for var1 being greater in value than var2, executing the following commands if this turns out to be true. The comparison operator may be any one of the following symbols:
Table 6.40. Test Operators
| Operator | Meaning |
|---|---|
| == | Equal to |
| != | Not equal to |
| <> | Not equal to |
| > | Greater than |
| < | Less than |
| >= | Greater than or qual to |
| <= | Less than or qual to |
In truth, the condition part may be any expression, command, or amalgam of both, provided the end result of executing it is a single value. The type of the final result doesn't even matter, since conversion to a boolean is guaranteed. Deep down in the logic of Aten, integers are at the heart of it all, with zero or any negative number being 'false', and any positive number meaning 'true'.
For example:
int i = 10;
if (i > 5) printf("Hooray!\n");
in this case 'Hooray!' will be printed, because i is greater than 5.
int i = 10, j = 20;
if (i > j) printf("Hooray!\n");
but in this case 'Hooray!' will not be printed, because i is not greater than j.
int i = 10, j = 20;
if (i > j) printf("Hooray!\n"); else { printf("Too small.\n"); i = j; }
Here, the test fails for the same reason, but since an 'else' part was provided we still execute some commands (printing 'Too small.' and setting the variable i equal to j).
if (i) printf("Snoopy.\n");
since any positive number is 'true', we can simply test the value of a variable.
atom a = newatom("H");
if (a) printf("New atom.\n");
In a similar way, a reference variable has a positive integer value at its heart, and so can also be tested in this way.
atom a = newatom("H");
double alpha = 100.0;
if ( (a) && (alpha < 50.0) ) printf("Alpha and atom are OK.\n"); else printf("No good!\n");
Two or more consecutive conditions can be tested in order to determine 'truth', in this case using the 'and' operator '&&'. Here, the value of the reference variable a and the value of alpha are both checked, and the text 'Alpha and atom are OK.' is only printed if both turn out to be 'true'.
if (time == 0) printf("There is no time.");
else if (time > 5) printf("There is more than enough time.");
else printf("There is only a little time.");
Multiple if tests can also be nested to create a sequence of tests. As soon as a condition is encountered that equates to 'true' the accompanying commands are executed and any subsequent 'else'd tests or commands are ignored.
Syntax:
return( | ); |
return( | value); |
value;Used in (user-defined) functions, and returns control immediately back to the calling function. In the case of a 'void' function, no return value must be specified. Similarly, for functions returning a value a valid value of that type must be given.
Syntax:
while ( condition ) { commands }
The while loop is another cousin of the 'for' loop, and as with the do-while loop there is no control variable. The termination of the loop depends on the condition which is tested at the beginning of the loop, before execution of the commands. If 'true', the commands are executed, but if 'false' the loop ends without executing the commands (and meaning that it is possible that the commands are never executed).
For example:
int i = 1024;
while (i > 100)
{
i = i / 2;
printf("i = %d\n", i);
}
will print out the following:
i = 512 i = 256 i = 128 i = 64
Forcefield management and manual term creation.
Syntax:
void angledef( | form, | |
| type_i, | ||
| type_j, | ||
| type_k, | ||
| data1, | ||
...); |
string form;string type_i;string type_j;string type_k;double data1;...;Add an angle definition to the current forcefield. form should correspond to one of the implemented angle functional forms, while the three types refer to either type or equivalent names of defined atom types. Up to ten data parameters may be supplied.
Syntax:
void autoconversionunit( | unit = null); |
string unit = null;Sets the target energy unit for automatic conversion of energetic forcefield parameters when writing out expresisons. Can only be used within a file filter definition. The 'unit' parameter should correspond to one of the energy units recognised by Aten (see energy units) or may be omitted to specify that no conversion of parameters from the current internal unit of energy should take place. Note that the conversion of energetic forcefield term parameters is performed only when accessing data through either the 'data' member or 'parameter' function of the forcefield atom, forcefield bound or bound variable types.
For example:
autoconversiontype("kcal");
indicates that, no matter what the current internal unit of energy is, all energetic forcefield parameters, when accessed by the means listed above, will be automatically converted into units of kcal.
Syntax:
void bonddef( | form, | |
| type_i, | ||
| type_j, | ||
| data1, | ||
...); |
string form;string type_i;string type_j;double data1;...;Add a bond definition to the current forcefield. form should correspond to one of the implemented bond functional forms, while the two types refer to either type or equivalent names of defined atom types. Up to ten data parameters may be supplied.
Syntax:
void clearexportmap( | ); |
Clear any manual export typemap definitions.
For example:
clearexportmap();
Syntax:
void clearexpression( | ); |
Removes any forcefield expression defined for the current model.
For example:
clearexpression();
Syntax:
void createexpression( | nointra = FALSE, | |
); |
bool nointra = FALSE;Creates a suitable energy description for the current model. The optional 'nointra' flag can be used to force the creation of an expression containing only atomtype (i.e. van der Waals) terms.
For example:
createexpression();
Syntax:
void defaultff( | ff); |
string|forcefield ff;Makes the supplied/named forcefield the default forcefield to use when none is associated.
For example:
defaultff("oplsaa");
Syntax:
void equivalents( | name, | |
| typename(s), | ||
...); |
string name;string typename(s);...;Define equivalent terms in the current forcefield. name is the new typename to which the list of quoted typenames are linked, for subsequent use in intramolecular term definitions. See the equivalents forcefield keyword for more information.
Syntax:
void exportmap( | maps); |
string maps;Set up manual mappings that convert atomtype names when expression are exported. Works in the opposite way to the 'map' command.
For example:
map("CT=Ctet,N3=N");
converts the atomtype names 'CT' and 'N3' so that they appear as 'Ctet' and 'N' in any expression files written out.
Syntax:
void ffpattern( | pattern); |
string pattern;void ffpattern( | patternid); |
int patternid;void ffpattern( | p); |
pattern p;Associates current forcefield to the current pattern, or one specified by either a reference, integer ID in the current model, or a pattern pointer.
For example:
ffpattern();
associates the current forcefield to the current pattern.
ffpattern("bulk");
associates the current forcefield to a pattern named 'bulk' in the current model.
Syntax:
void finaliseff( | ); |
Perform necessary operations on the current forcefield once all data has been added. Must be called!
Syntax:
void fixtype( | typeid, | |
id = 0); |
int typeid;atom|int id = 0;Set the current atom selection, or the specified atom, to have the type id (in the current forcefield) specified. Types set in this manner will not be overwritten by tha typing routines, allowing specific types to be applied above the normal rules. Note that the type's NETA description is not checked, and so any (even types not matching the base element) may be applied in this way.
For example:
typedef(99, "NX", "NX", N, "-C(n=4)"); select(C); fixtype(99);
assigns newly-created type 99 (specific to nitrogen) to all carbons in the model.
Syntax:
void freetype( | id = 0); |
atom|int id = 0;For the current atom selection, or the specified atom, free any previously-fixed types
For example:
freetype(14);
frees any previously-set type on atom 14.
Syntax:
string getcombinationrule( | form, | |
parameter); |
string form;string parameter;Returns the combination rule in use for the specifed parameter of the given functional form. The form and related parameter should correspond to those given in the VDW functional forms table. A string corresponding to one of the available combination rule options is returned.
For example:
string cr = getcombinationrule("lj", "epsilon");
Syntax:
forcefield getff( | name); |
string name;forcefield getff( | id); |
int id;Select the named forcefield (or forcefield with the specified id) and make it current, returning a reference to it in the process.
For example:
forcefield uff = getff("uff");
makes the loaded forcefield named 'uff' the current one, and stores a reference to it.
Syntax:
void interdef( | form, | |
| typeid, | ||
| charge, | ||
| data1, | ||
...); |
string form;int typeid;double charge;double data1;...;Add a new short-range data definition to a type in the current forcefield. form should correspond to one of the implemented VDW functional forms. Up to ten parameters for the VDW potential may be given.
Syntax:
forcefield loadff( | file, | |
name); |
string file;string name;Load a forcefield from file and reference it by name. Becomes the current forcefield.
For example:
loadff("/home/foo/complex.ff", "waterff");
loads a forcefield called 'complex.ff' and names it 'waterff'.
Syntax:
void map( | map, | |
...); |
string map;...;Set up manual typename mappings for atom names that do not readily correspond to element symbols, forcefield types etc. All atoms that are subsequently created using name as the element are automatically converted to the corresponding element.
For example:
map("CT1=C,CT2=C");
converts atoms with names 'CT1' and 'CT2' to carbon.
Syntax:
forcefield newff( | name); |
string name;Create a new, empty forcefield with the given name and make it current. Returns a reference to the new forcefield.
For example:
forcefield ff = newff("testff");
Syntax:
void recreateexpression( | nointra = FALSE, | |
); |
bool nointra = FALSE;Delete and recreate a suitable energy description for the current model. The optional 'nointra' flag can be used to force the creation of an expression containing only atomtype (i.e. van der Waals) terms.
For example:
recreateexpression();
Syntax:
void rules( | ruleset); |
string ruleset;Set rules set to use for parameter generation in the current forcefield (see forcefield fules for more info).
Note: The implementation of rule-based forcefields will change in a future release.
Syntax:
int saveexpression( | filter, | |
filename); |
string filter;string filename;Export the forcefield expression for the current model in the format determined by the filter nickname, to the filename specified. Return value is '1' for successful write, or '0' otherwise.
For example:
saveexpression("dlpoly", "data.FIELD");
Syntax:
void setcombinationrule( | form, | |
| parameter, | ||
rule); |
string form;string parameter;string rule;Sets the combination rule to use for the specifed parameter of the given functional form. The form and related parameter should correspond to those given in the VDW functional forms table, while rule should correspond to one of the available combination rule options.
For example:
setcombinationrule("lj", "sigma", "geometric");
Syntax:
void torsiondef( | form, | |
| type_i, | ||
| type_j, | ||
| type_k, | ||
| type_l, | ||
| data1, | ||
...); |
string form;string type_i;string type_j;string type_k;string type_l;double data1;...;Add a torsion definition to the current forcefield. form should correspond to one of the implemented torsion functional forms, while the four types refer to either type or equivalent names of defined atom types. Up to ten real-valued parameter values for the function may be provided.
Syntax:
int typedef( | typeid, | |
| name, | ||
| equiv, | ||
| element, | ||
| neta, | ||
description = ""); |
int typeid;string name;string equiv;string|int element;string neta;string description = "";Add a new atom type definition to the current forcefield, with the identifying typeid and called name, with the equivalent typename equiv. The basic element of the new type is given as element, and neta is the NETA definition of the type. An optional string describing the type in more detail can be given in description. The command returns '1' if the model was typed successfully or '0' otherwise.
For example:
typedef(101, "Ctet", C, "nbonds=4", "Standard tetrahedral carbon");
creates a new simple type for a carbon atom with four bonds.
Syntax:
int typemodel( | ); |
Perform atom typing on the current model. Returns '1' if atom typing was performed successfully or '0' otherwise.
For example:
int success = typemodel();
Syntax:
int typetest( | typeid, | |
id); |
int typeid;atom|int id;Test the current forcefield's atomtype typeid on the atom specified, returning the type score of the match (zero indicating no match).
For example:
int score = typetest(112,10);
tests typeid 112 on the tenth atom in the model.
Syntax:
void units( | unit); |
string unit;Sets the units in which energetic parameters are given for the current forcefield. For a list of available units see energy units.
Calculate forces for models and trajectory frames.
Syntax:
void frameforces( | ); |
Calculate the atomic forces of the current frame of the trajectory associated with the current model.
For example:
frameforces();
Add glyphs to atoms in the model.
![]() | See also: |
|---|---|
|
Syntax:
void autoellipsoids( | ); |
Note: Experimental Feature!
Using the current atom selection, this command creates ellipsoid glyphs that cover (or represent) individual bound fragments within the selection. An ellipsoid glyph is added for each bound fragment within the selection, positioned at the geometric centre of the bound fragment, and scaled in an attempt to cover all atoms within the bound fragment. Such things are useful when wanting to represent molecules by simple geometric shapes, rather than by their fine-grained atomic positions.
For instance, given a box full of benzene molecules:
selectall(); autoellipsoids();
will add on a flattened ellipsoid to each individual molecule. To do the same thing but using only the ring carbons to generate the ellipsoids:
select("C");
autoellipsoids();
Now the ellipsoids will cover the carbon atoms in each ring, leaving the hydrogens poking out.
![]() | See also: |
|---|---|
|
Syntax:
void autopolyhedra( | options = ""); |
string options = "";Note: Very Experimental Feature!
In a similar way to the autoellipsoids command, 'autopolyhedra' adds triangle glyphs to the current selection in an attempt to enclose certain atoms within solid structures. There are two principal modes of operation. The first (the default) assumes that the current atom selection consists of individual atoms that should be enclosed in a polyhedron made up from triangles added between triplets of bound neighbours. The carbon atom at the centre of methane would make a good example. The alternative mode (requested with the 'fragments' option) assumes that atoms within individual bound fragments in the current selection should be used as the vertices to form an enclosed shell.
Possible options are:
Table 6.41. Autopolyhedra options
| Option | Effect |
|---|---|
| centres | Assume that the current selection consists of individual atomic centres that should be enclosed (the default). |
| fragments | Use individual bound fragments instead of assuming individual centres. |
| nolink | Do not link the coordinates of generated glyphs to coordinates of the atoms (the default is to link glyph coordinates to atoms). |
| rcut=distance | Specifies the maximum distance allowed between vertices of a triangle |
![]() | See also: |
|---|---|
|
Syntax:
void glyphatomf( | n); |
int n;void glyphatomf( | n, | |
sourceatom); |
int n;atom|int sourceatom;Set current (or specified) atom's forces as data n in the current glyph.
For example:
glyphatomf(1);
links the current atoms forces to the first datum in the current glyph.
Syntax:
void glyphatomr( | n); |
int n;void glyphatomr( | n, | |
sourceatom); |
int n;atom|int sourceatom;Set current (or specified) atom's position as data n in the current glyph.
For example:
glyphatomr(3, 55);
links the 55th atom's position to the third datum in the current glyph.
Syntax:
void glyphatomv( | n); |
int n;void glyphatomv( | n, | |
sourceatom); |
int n;atom|int sourceatom;Set current (or specified) atom's velocity as data n in the current glyph.
For example:
atom i = newatom("H");
glyphatomv(2,i);
links the velocity of new atom i to the second datum in the current glyph.
Syntax:
void glyphatomsf( | sourceatom, | |
...); |
atom|int sourceatom;...;Accepts one or more atoms, setting consecutive data in the current glyph to the forces of the atoms / atom IDs provided.
For example:
glyphatomsf(1, 2, 3);
links the forces of atoms 1, 2, and 3 to the first three glyph data.
Syntax:
void glyphatomsr( | sourceatom, | |
...); |
atom|int sourceatom;...;Accepts one or more atoms, setting consecutive data in the current glyph to the positions of the atoms / atom IDs provided.
For example:
glyphatomsr(3, 10);
links the positions of atoms 3 and 10 to the first two glyph data.
Syntax:
void glyphatomsv( | sourceatom, | |
...); |
atom|int sourceatom;...;Accepts one or more atoms, setting consecutive data in the current glyph to the velocities of the atoms / atom IDs provided.
For example:
glyphatomsv(9, 11, 13);
links the velocities of atoms 9, 11, and 13 to first three glyph data.
Syntax:
void glyphcolour( | n, | |
| r, | ||
| g, | ||
| b, | ||
alpha = 1.0); |
int n;double r;double g;double b;double alpha = 1.0;Set the colour of vertex n for the current glyph to the RGB(A) colour provided.
For example:
glyphcolour(1, 1.0, 0.0, 0.0);
sets the colour of the first vertex in the current glyph to red.
Syntax:
void glyphdata( | n, | |
| r, | ||
| g, | ||
b); |
int n;double r;double g;double b;Set vector data n for the current glyph to the fixed values provided.
For example:
glyphdata(1, 0.0, 5.0, 2.4);
sets the first positional data in the glyph to {0.0, 5.0, 2.4}.
Syntax:
void glyphsolid( | issolid); |
bool issolid;Sets the drawing style of the current glyph to solid (true) or wireframe (false) (if the glyph style permits).
For example:
glyphsolid("true");
Syntax:
void glyphtext( | text); |
string text;Set the text data in the current glyph. For text-style glyphs, this is of course useful! For others, whether or not the text is used depends on the style of the glyph.
For example:
glyphtext("Coordinate Origin");
Syntax:
glyph newglyph( | style, | |
options = ""); |
string style;string options = "";Create a new glyph of the specified style, and make it current. The colour of the glyph is set using the default glyph colour set in the global preferences. Valid glyph styles are listed in glyph types. Positional / size / scale vector data should be set afterwards with appropriate 'glyphatom*' and 'glyphdata' commands.
One or more options may be given to the command. The list of possible options is:
Table 6.42. Newglyph options
| Option | Effect |
|---|---|
| linewidth=width | Set the linewidth used to draw the glyph to the (floating point) value provided. |
| solid | Render the glyph in solid mode (if the glyph supports it). Same as calling glyphsolid(TRUE) after creation. |
| text=string | Set the character data associated to the glyph to string. Currently, this has no effect for glyphs other than those that display text. |
| wire | Render the glyph in wireframe mode (if the glyph supports it). Same as calling glyphsolid(FALSE) after creation. |
For example:
newglyph("cube");
creates a new cube in the model.
newglyph("text","text=\"I am some text\"");
creates a new text glyph in the model, reading 'I am some text'. Note the need to escape the quotes surrounding the text.
newglyph("tetrahedron", "wire");
creates a new wireframe tetrahedron in the model.
Add gridded data to the current model.
![]() | See also: |
|---|---|
|
Syntax:
void addgridpoint( | ix, | |
| iy, | ||
| iz, | ||
value); |
int ix;int iy;int iz;double value;Set a specific data point in the current grid.
For example:
addgridpoint(4, 1, 15, 4.123);
set the grid value at point { 4,1,15 } in the dataset to 4.123.
Syntax:
void addnextgridpoint( | value); |
double value;Add the next sequential grid point, starting at (1,1,1) and proceeding through dimensions as defined by the gridlooporder command (default is x->y->z, i.e. {1,1,1} is set first, then {2,1,1}, {3,1,1} etc.).
For example:
addnextgridpoint(20.0);
sets the next grid point value to be 20.0.
Syntax:
void finalisegrid( | ); |
Perform internal post-load operations on the grid. Must be called for every new grid, after all data has been read in.
For example:
finalisegrid();
Syntax:
double gridalpha( | ); |
double gridalpha( | newalpha); |
double newalpha;Set the alpha value (transparency of the current surface), with 0.0 being fully opaque and 1.0 being fully transparent (i.e. invisible), or simply return the current alpha value if no new value is provided. Note that this command sets the alpha values for both the primary and secondary surface colours.
For example:
gridalpha(0.5);
Syntax:
void gridaxes( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
cz); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;Set the axes of the current grid, specified as three vectors.
For example:
gridaxes(1, 0, 0, 0, 1, 0, 0, 0, 1);
sets a cubic system of axes for the current grid.
gridaxes(0.8, 0, 0, 0.1, 0.6, 0, 0, 0, 0.7);
sets a monoclinic system of axes for the current grid.
Syntax:
void gridcolourprimary( | r, | |
| g, | ||
| b, | ||
a = 1.0); |
double r;double g;double b;double a = 1.0;Set the internal colour of the primary grid surface to the RGB(A) triplet.
For example:
gridcolourprimary(1.0, 1.0, 0.0);
sets the primary surface colour to yellow.
Syntax:
void gridcoloursecondary( | r, | |
| g, | ||
| b, | ||
a = 1.0); |
double r;double g;double b;double a = 1.0;Set the internal colour of secondary grid surface to the RGB(A) triplet.
For example:
gridcoloursecondary(0.9, 0.9, 0.9);
sets the secondary surface colour to off-white.
Syntax:
void gridcolourscale( | id); |
int id;Set the colourscale to use for the current grid to the colourscale ID specified, which should be in the range 1-10. If '0' is given as the argument, the internal colour of the grid data is used. Linking a colourscale to a grid will result in the minimum and maximum ranges of the grid being recalculated to ensure all points in the grid are covered by the scale, whose range is adjusted if necessary.
For example:
gridcolourscale(4);
colours the grid data according to colourscale 4.
gridcolourscale(0);
uses the internal colour(s) specified for the grid.
Syntax:
void gridcubic( | l); |
double l;Sets up a cubic system of axes for the current grid.
For example:
gridcubic(0.5);
sets up a cubic system of axes, each grid point 0.5 Å apart in all directions.
Syntax:
void gridcutoff( | lowercut, | |
uppercut); |
double lowercut;[double uppercut];Sets the lower and (if supplied) upper cutoff values for the current grid.
For example:
gridcutoff(0.002,0.005);
sets the lower grid cutoff for the current grid to 0.002, and the upper grid cutoff to 0.005.
Syntax:
void gridcutoffsecondary( | lowercut, | |
uppercut); |
double lowercut;[double uppercut];Sets the lower and (if supplied) upper secondary cutoff values for the current grid.
For example:
gridcutoffsecondary(0.0014);
sets the secondary lower grid cutoff for the current grid to 0.0014, leaving the upper secondary cutoff unchanged.
Syntax:
void gridlooporder( | order); |
string order;Set the grid loop order to use with addnextgridpoint, affecting in which order the dimensions of the data grid are filled. order should be given as a string of three characters, e.g. 'xyz' (equivalent to '123'), 'yxz' (equivalent to '213'), etc.
For example:
gridlooporder("zyx");
sets the loop order to the reverse of the default, so that the z-index is filled first.
Syntax:
void gridorigin( | x, | |
| y, | ||
z); |
double x;double y;double z;Sets the origin of the grid data, in Å.
For example:
gridorigin(0, 10, 0);
sets the grid origin to be offset 10 Å along the y-axis.
Syntax:
void gridortho( | a, | |
| b, | ||
c); |
double a;double b;double c;Sets up an orthorhombic system of axes for the grid data.
For example:
gridortho(0.5, 0.5, 0.8);
sets up a system of axes elongated in the z-axis.
Syntax:
void gridstyle( | style); |
string style;Determines how the current grid data is drawn on-screen. Valid styles are listed in Grid Styles.
For example:
gridstyle("triangles");
draws the current grid as a triangle mesh.
Syntax:
int gridusez( | ); |
int gridusez( | usez); |
bool usez;For two-dimensional grid (i.e. surface) data this option controls whether the data value is used as the height (z) component of the surface, or if no data value is used and the surface is flat. If called with no arguments the current status of the option is returned (0 being 'off', and 1 being 'on').
For example:
gridusez("on");
Syntax:
int gridvisible( | ); |
int gridvisible( | visible); |
bool visible;Set the visibility of the current grid (i.e. whether it is drawn on screen).
For example:
gridvisible(FALSE);
Syntax:
void gridsize( | type, | |
| nx, | ||
| ny, | ||
nz); |
string type;int nx;int ny;int nz;Initialises the current grid to be of the specified grid type and with the dimensions specified (if the type requires it). This must be called before any calls to addpoint or addnextgridpoint are issued.
For example:
initgrid("regularxyz", 64, 128, 64);
initialises the current grid to be a regularly-spaced and hold a total of (gets calculator...) 524,288 points.
Syntax:
grid loadgrid( | filename); |
string filename;Load an existing grid from the specified file, and add it to the current model. If successfully loaded, a reference to the new grid is returned.
For example:
grid density = loadgrid("density.pdens");
loads a grid called 'density.pdens' into the current model.
Save bitmap and vector images of the current view. The GUI is not required in order to save images -- using these commands from the command-line, for example, works just as well (models still have a current view, even without the GUI, and can be rotated, translated etc. just as if they were in the GUI).
Syntax:
void savebitmap( | format, | |
filename); |
string format;string filename;void savebitmap( | format, | |
| filename, | ||
| width, | ||
height); |
string format;string filename;int width;int height;void savebitmap( | format, | |
| filename, | ||
| width, | ||
| height, | ||
quality); |
string format;string filename;int width;int height;int quality;Saves the current view as a bitmap image. Allowable values for format are:
Table 6.43. Bitmap image formats
| Shortname | Format |
|---|---|
| bmp | Windows Bitmap |
| jpg | Joint Photographic Experts Group |
| png | Portable Network Graphic |
| ppm | Portable Pixmap |
| xbm | X11 Bitmap |
| xpm | X11 Pixmap |
If width and height are not specified the current dimensions of the view are used (800x600 if no GUI is present). The quality option determines the compression used on saved images, affecting, for example, the quality and size of jpegs and pngs, and should be an integer between 1 and 100 (with 100 being the best compression).
For example:
savebitmap("bmp", "test.bmp");
saves the current view to a file 'test.bmp'.
savebitmap("png", "big.png", 5000, 5000, 10);
saves an enormous, highly uncompressed png.
Add and remove atom labels.
Syntax:
void label( | type); |
string type;Adds the specified label to each atom in the current selection. Valid types are listed in Label Types.
For example:
label("element");
adds element labels to the current atom selection.
Standard mathematical functions.
Syntax:
double cos( | angle); |
double angle;Returns the cosine of angle (which should be given in degrees).
Syntax:
double dotproduct( | u, | |
v); |
vector u;vector v;Calculate and return the dot product of the two vectors u and v.
Syntax:
double normalise( | v); |
vector v;Normalises the vector v, returning the magnitude of the vector before the normalisation was performed.
For example:
vector v = { 1, 2, 3 };
double mag = normalise(v);
printf("Normalised vector is { %f, %f, %f }, old magnitude was %f\n", v.x, v.y, v.z, mag);
prints the following:
Normalised vector is { 0.267261, 0.534522, 0.801784 }, old magnitude was 3.741657
Make measurements of distances, angles, and torsion angles (dihedrals) in models. Note that there are two distinct sets of commands - those which 'measure' and those which calculate 'geometry'. The former create visible measurements within the model (which can then be viewed in the GUI), while the latter simply determine and return geometric values. Both sets take a variable number of arguments which determine whether a distance, angle, or torsion is measured/determined.
Syntax:
void clearmeasurements( | ); |
Clear all measurements in the current model.
For example:
clearmeasurements();
Syntax:
double geometry( | i, | |
| j, | ||
| k = 0, | ||
l = 0); |
atom|int i;atom|int j;atom|int k = 0;atom|int l = 0;This command is a general measuring tool, able to measure distances, angles, and torsions in the model, depending on how many arguments are supplied. Note that, unlike the measure command, the resulting measurement is not added to the Model's internal list, and thus will not be displayed in the model.
For example:
double rij[50]; for (int i=1; i<=50; ++i) rij[i] = geometry(1,i);
calculates the distances between the first 50 atoms in the model and the first, regardless of whether they are bound or not
Syntax:
void listmeasurements( | ); |
List all measurements in the current model.
For example:
listmeasurements();
prints out a list of measurements made so far.
Syntax:
double measure( | i, | |
| j, | ||
| k = 0, | ||
l = 0); |
atom|int i;atom|int j;atom|int k = 0;atom|int l = 0;This command is a general measuring tool, able to measure distances, angles, and torsions in the model, depending on how many arguments are supplied. Note that the resulting measurement is added to the Model's internal list, and will be displayed in the model. Also, note that measuring the same thing between the same atoms twice will remove the measurement from the Model.
For example:
double rij = measure(1, 2);
returns the distance between atoms 1 and 2.
double theta = measure(10, 20, 30);
returns the angle between atoms 10, 20, and 30.
double phi = measure(9, 8, 7, 6); measure(9,8,7,6);
returns the torsion angle made between atoms 9, 8, 7, and 6, and then instantly removes it from the model by measuring it again.
Syntax:
void measureselected( | natoms); |
int natoms;This command is a general measuring tool to measure all of one particular type of interaction (i.e. bond distances, angles, or torsions) within the current atom selection. The single argument specifies the type of interaction to calculate by specifying thu number of atoms involved in the interaction - i.e. 2, 3, or 4 for bond distances, angles, and torsions respectively.
For example:
measureselected(3);
calculates and displays all bong angles in the current atom selection.
Output messages from command lists / filters. All commands work like the C printf() command, and accept the same fundamental format specifiers. All output from these messaging commands is directed to either the GUI message box or stdout on the command line.
![]() | See also: |
|---|---|
|
Syntax:
void error( | format, | |
...); |
string format;...;Print a message to screen and immediately exit the current command structure / filter.
For example:
int err=23;
error("Filter failed badly - error = %i.\n", err);
notifies the user that something bad probably happened, provided the error code, and promptly exits.
Perform energy minimisation on models.
Syntax:
void cgminimise( | maxsteps); |
int maxsteps;Geometry optimises the current model using the conjugate gradient method.
For example:
cgminimise(20);
runs a conjugate gradient geometry optimisation for a maximum of 20 cycles.
![]() | See also: |
|---|---|
|
Syntax:
void converge( | econv, | |
fconv); |
double econv;double fconv;Sets the convergence criteria of the minimisation methods. Energy and force convergence values are given in the current working unit of energy in the program.
For example:
converge(1e-6, 1e-4);
sets the energy and RMS force convergence criteria to 1.0E-6 and 1.0E-4 respectively.
Syntax:
void linetol( | tolerance); |
double tolerance;Sets the tolerance of the line minimiser.
For example:
linetol(1e-5);
sets the line tolerance to 1.0E-5.
Syntax:
void mcminimise( | maxsteps); |
int maxsteps;Optimises the current model using a molecular Monte Carlo minimisation method.
For example:
mcminimise(20);
runs a geometry optimisation for a maximum of 20 cycles.
![]() | See also: |
|---|---|
|
Model creation and management.
Syntax:
void createatoms( | ); |
Can be run when importing trajectory frames. Creates enough atoms in the current trajectory frame to match the parent model.
For example:
createatoms();
Syntax:
model currentmodel( | ); |
model currentmodel( | id); |
int id;model currentmodel( | name); |
string name;model currentmodel( | m); |
model m;Returns a reference to the current model (if no argument is given) or selects the supplied model and makes it the current model. The model may be selected either by name, by its integer position in the list of loaded models (i.e. 1 to N), or a model-type variable containing a valid model reference may be passed.
For example:
currentmodel(4);
selects the fourth loaded model.
currentmodel("Protein coordinates")
selects the model named "Protein coordinates" (provided it exists)
model m1, m2;
m1 = newmodel("Test model 1");
m2 = newmodel("Test model 2");
currentmodel(m1);
creates two models, storing references to each, and then re-selects the first one and makes it the current target again.
Syntax:
voiddeletemodel( | id); |
int id;void deletemodel( | name); |
string name;void deletemodel( | m); |
model m;Deletes the current model (if no argument is given) or the supplied model.
Syntax:
model firstmodel( | ); |
Makes the first loaded / created model the current model, and returns a reference to it.
For example:
firstmodel();
Syntax:
void finalisemodel( | ); |
Performs various internal tasks after a model has been fully created within a filter. Should be called after all operations on each created model have finished.
For example:
finalisemodel();
Syntax:
model getmodel( | id); |
int id;model getmodel( | name); |
string name;model getmodel( | m); |
model m;Returns a reference to the requested model, but unlike currentmodel does not make it the current model.
For example:
model alpha = getmodel("alpha2");
grabs a reference to the model named 'alpha2'.
model m = getmodel(5);
gets a reference to the fifth loaded model.
Syntax:
model lastmodel( | ); |
Makes the last loaded / created model the current model, and returns a reference to it.
For example:
model final = lastmodel();
Syntax:
int loadmodel( | filename); |
string filename;int loadmodel( | filename, | |
| newname, | ||
&modelptr); |
string filename;string newname = <automatic>;model &modelptr;Load model(s) from the filename provided, changing the name of the the (last loaded) model to newname (if provided). The last loaded model becomes the current model, and the number of models loaded is returned. If the optional model variable is supplied, it is set to point to the new current model.
For example:
loadmodel("/home/foo/coords/test.xyz", "mymodel");
loads a model called 'test.xyz' and gives it the new name 'mymodel'.
Syntax:
void modeltemplate( | ); |
Can only be run when importing trajectory frames. Templates the atoms in the trajectory's parent model by creating an equal number of atoms in the target trajectory frame, and copying the element and style data. Positions, forces, and velocities are not copied from the parent model atoms.
For example:
modeltemplate();
Syntax:
model newmodel( | name); |
string name;Create a new model called name which becomes the current model, and return a reference to it.
For example:
newmodel("emptymodel");
creates a new, empty model called 'emptymodel' and makes it current.
model c12 = newmodel("dodecane");
creates a new, empty model called 'dodecane', makes it current, and stores a reference to it in the variable c12.
Syntax:
model nextmodel( | ); |
Skips to the next loaded model, makes it current, and returns a reference to it.
For example:
model next = nextmodel();
Syntax:
void parentmodel( | ); |
Makes the parent model of the current trajectory frame the current model.
For example:
parentmodel();
Syntax:
model prevmodel( | ); |
Skips to the previous loaded model, makes it current, and returns a reference to it.
For example:
model prev = prevmodel();
Syntax:
int savemodel( | format, | |
filename); |
string format;string filename;Save the current model in the format given (which should correspond to a model export Filter nickname) to the filename specified. If the save was successful, an integer value of '1' is returned, otherwise '0'.
For example:
int success = savemodel("xyz", "/home/foo/newcoords/test.config");
saves the current model in xyz format to the filename given.
Store and manipulate molecular orbital data, vibrations, and z-matrix elements.
Syntax:
basisshell newbasisshell( | id, | |
type); |
atom|int id;string type;Adds a new basis shell definition to the current model, returning the generated structure. The atomic centre on which the basis function exists must be provided either as an integer or an atom pointer (from which the integer ID is extracter). The type of the basis shell should correspond to one listed in basis shell types.
For example:
basisshell = newbasisshell(15, "D");
creates a new D-orbital shell centred on atom 15.
Syntax:
eigenvector neweigenvector( | size); |
int size = (auto);Adds a new, empty eigenvector to the current model. If the size argument is given the eigenvector array will contain this many elements. Otherwise, the size of the array is determined by the total number of cartesian basis functions implied by the current basis shell definitions of the model.
For example:
eigenvector = neweigenvector(180);
creates a new eigenvector which will contain 180 coefficients.
Change parameters for Monte Carlo-based calculations. Energy values should be given in the current working unit of energy in the program.
Syntax:
void mcaccept( | move, | |
emax); |
string move;double emax;Sets the energy difference emax for the movetype move above which moves will be rejected.
For example:
mcaccept("translate", 0.0);
requests that only translation moves that lower the overall energy will be accepted.
mcaccept("insert", 200.0);
requests that insertion moves will be accepted provided the total energy does not rise more than 200.0 units.
Syntax:
void mcallow( | move, | |
allow); |
string move;bool allow;Indicates whether to allow moves of the specified type in Monte Carlo calculations.
For example:
mcallow("translate", FALSE);
disallows translation moves in Monte Carlo calculations.
mcallow("rotate", "true");
allows rotation moves in Monte Carlo calculations.
Syntax:
void mcmaxstep( | move, | |
mcmaxstep); |
string move;double mcmaxstep;Sets the maximal step size for the move type move.
For example:
mcmaxstep("translate", 5.0);
sets the maximum translation displacement to 5 Å.
mcmaxstep("rotate", 30.0);
sets the maximum rotation to 30 degrees.
Automatically or manually create pattern descriptions for models.
Syntax:
void clearpatterns( | ); |
Delete the pattern description of the current model. It's a good idea to run this command before adding a pattern definition by hand with calls to newpattern.
For example:
clearpatterns();
Syntax:
void createpatterns( | ); |
Automatically detect and create the pattern description for the current model.
For example:
createpatterns();
Syntax:
pattern currentpattern( | ); |
pattern currentpattern( | name); |
string name;pattern currentpattern( | id); |
int id;Get the named pattern or pattern with given id (if either was specified), returning its reference and setting it to be the current pattern.
For example:
pattern p = currentpattern("liquid");
sets the pattern named 'liquid' in the current model to be the current pattern, setting its reference in the variable p.
pattern p = currentpattern();
returns a reference to the current pattern.
Syntax:
pattern getpattern( | name); |
string name;pattern getpattern( | id); |
int id;Get the named pattern, or pattern with id specified, returning its reference.
For example:
pattern p = getpattern("solid");
gets the pattern named 'solid' in the current model, setting its reference in the variable p.
getpattern(3);
gets the third pattern in the current model.
Syntax:
pattern newpattern( | name, | |
| nmols, | ||
atomspermol); |
string name;int nmols;int atomspermol;Add a new pattern node to the current model, spanning nmols molecules of atomspermol atoms each, and called name. A reference to the new pattern is returned.
For example:
pattern p = newpattern("water", 100, 3);
creates a new pattern description of 100 molecules of 3 atoms each named 'water' (i.e. 100 water molecules) in the current model, and returns its reference
Methods of reading and writing data from / to files in import and export filters. Many commands here use formatting strings to provide formatted input and output. All reading and writing commands here work on input or output files as defined internally by the program.
![]() | See also: |
|---|---|
|
Syntax:
void addreadoption( | option); |
string option;Controls aspects of file reading. See Parse Options for a list of possible options.
For example:
addreadoption("stripbrackets");
Syntax:
int eof( | ); |
Returns 1 if at the end of the current input file, 0 otherwise.
For example:
string s;
while (!eof())
{
getline(s):
printf("%s\n", s);
}
Reads in and prints out all lines in the current source file.
Syntax:
string filterfilename( | ); |
Returns the name of the current input or output file (typically useful from within an import or export filter).
For example:
string filename = filterfilename();
Puts the current source/destination filename in the variable filename.
Syntax:
int find( | searchstring); |
string searchstring;int find( | searchstring, | |
linevar); |
string searchstring;string linevar;Searches for the specified searchstring in the input file, returning 0 if searchstring is not found before the end of the file, and 1 if it is. The optional argument linevar is a character variable in which the matching line (if any) is put. If the search string is not found the file position is returned to the place it was before the command was run.
For example:
int iresult = find("Final Energy:");
searches for the string 'Final Energy' in the input file, placing the result of the search in the variable iresult.
string line;
int n = find("Optimised Geometry:", line);
searches for the string 'Optimised Geometry:' in the input file, placing the whole of the matching line from the input file in the variable line.
Syntax:
int getline( | destvar); |
string destvar;Read an entire line from the input file, and put it in the character variable provided. The line also becomes the current target for readnext. The command returns a Read Successinteger.
For example:
string nextline; int n = getline(nextline);
gets the next line from the file and places it in the variable nextline.
Syntax:
int nextarg( | i); |
int i;int nextarg( | d); |
double d;int nextarg( | s); |
string s;Read the next whitespace-delimited chunk of text from the current file and place it in the variable supplied. Note that this command reads directly from the file and not the last line read with getline or readline (see the readnext command to read the next delimited argument from the last read line). The command returns TRUE (1) if an argument was successfully read, or FALSE (0) otherwise (e.g. if the end of the file was found).
The command will accept a variable of any ordinary type - int, double, or string - as its argument. Conversion between the text in the file and the target variable type is performed automatically.
For example:
int i; int success = nextarg(i);
Syntax:
string peekchar( | ); |
Peeks the next character that will be read from the source file, and returns it as a string. The actual file position for reading is unaffected.
For example:
string char = peekchar();
Syntax:
int peekchari( | ); |
Peeks the next character that will be read from the source file, and returns it as an integer value representing the ASCII character code (see http://www.asciitable.com, for example). The actual file position for reading is unaffected.
For example:
int char = peekchari();
Syntax:
string readchars( | nchars, | |
skipeol = TRUE); |
int nchars;bool skipeol = TRUE;Reads and returns (as a string) a number of characters from the input file. If skipeol is true (the default) then the end-of-line markers '\n' and '\r' will be ignored and will not count towards nchars - this is of most use when reading formatted text files and you want to 'ignore' the fact that data is presented on many lines rather than one. If skipeol is false then '\n' and '\r' will count towards the total number of characters. Used on formatted text files, this might give you unexpected results.
For example:
string text = readchars(80);
reads the next 80 characters from the input file and puts it into the variable text.
Syntax:
double readdouble( | ); |
double readdouble( | nbytes); |
int nbytes;Read a floating point value (the size determined from the machines 'double' size) from an unformatted (binary) input file. Alternatively, if a valid number of bytes is specified and corresponds to the size of another 'class' of double (e.g. long double) on the machine this size is used instead.
For example:
double x = readdouble();
reads a floating point value into the variable x.
Syntax:
int readdoublearray( | d[], | |
n); |
double d[];int n;Read n consecutive integer values (whose individual size is determined from the result of calling 'sizeof(double)') from an unformatted (binary) input file, placing in the array d provided. The size of the array provided must be at least n. The command returns a Read Success integer.
For example:
double data[45]; int success = readdoublearray(data, 45);
reads 45 double numbers into the array data.
Syntax:
int readint( | ); |
int readint( | nbytes); |
int nbytes;Read an integer value (the size determined from the result of calling 'sizeof(int)') from an unformatted (binary) input file. Alternatively, if a valid number of bytes is specified and corresponds to the size of another 'class' of int (e.g. long int) on the machine this size is used instead.
For example:
int i = readint();
reads an integer number into the variable i.
Syntax:
int readintarray( | i[], | |
n); |
int i[];int n;Read n consecutive integer values (whose individual size is determined from the result of calling 'sizeof(int)') from an unformatted (binary) input file, placing in the array i provided. The size of the array provided must be at least n. The command returns a Read Success integer.
For example:
int data[100]; int success = readintarray(data, 100);
reads 100 integer numbers into the array data.
Syntax:
int readline( | var, | |
...); |
int|double|string var;...;Read a line of delimited items from the input file, placing them into the list of variable(s) provided. Conversion of data from the file into the types of the destination variables is performed automatically. The number of items parsed successfully is returned.
For example:
double x,y,z; int n = readline(x,y,z);
reads a line from the file and places the first three delimited items on the line into the variables x, y, and z.
Syntax:
int readlinef( | format, | |
...); |
string format;...;Read a line of data from the input file and separate them into the list of variable(s) provided, and according to the format provided. The number of items parsed successfully is returned.
For example:
double x,y,z;
int n = readlinef("%8.6f %8.6f %8.6f",x,y,z);
reads a line from the file, assuming that the line contains three floating point values of 8 characters length, and separated by a space, into the three variables x, y, and z.
Syntax:
int readnext( | i); |
int i;int readnext( | d); |
double d;int readnext( | s); |
string s;Read the next delimited argument from the last line read with either getline or readline into the variable supplied. The command returns either TRUE for success or FALSE (e.g. if the end of file was reached without reading any non-whitespace characters, or an error was encountered).
For example:
double d; int n = readnext(d);
read the next delimited argument into the double variable d.
Syntax:
int readvar( | source, | |
| var, | ||
...); |
string source;int|double|string var;...;Parse the contents of the supplied string source into the supplied variables, assuming delimited data items. Delimited items read from source are converted automatically to the type inferred by the target variable. The number of data items parsed successfully is returned.
For example:
string data = "rubbish ignore Carbon green 1.0 2.5 5.3";
string element, discard;
vector v;
int n = readvar(data,discard,discard,element,discard,v.x,v.y,v.z,discard);
printf("Element = %s, n = %i\n", element, n);
outputs
Element = Carbon, n = 7
The character string in the variable data is parsed, with delimited chunks placed into the supplied variables. Note the repeated use of the variable discard, used to get rid of unwanted data. Also, note that there are not enough items in data to satisfy the final occurrence of discard, and so the function returns a value of 7 (as opposed to the actual number of target variables supplied, 8).
Syntax:
int readvarf( | source, | |
| format, | ||
| var, | ||
...); |
string source;string format;int|double|string var;...;Parse the contents of the supplied string source according to the supplied format string, placing in the supplied variables. The number of format specifiers successfully parsed (or, to look at it another way, the number of the supplied variables that were assigned values) is returned.
For example:
string a, b, data = "abc def123456.0";
double d; int i, n;
n = readvarf(data,"%3s %3s%4i%4f%8*",a,b,i,d);
printf("a = %s, b = %s, d = %f, i = %i, n = %i\n", a, b, d, i, n);
outputs
a = abc, b = def, d = 56.000000, i = 1234, n = 4
The supplied format string contains a single space in between the two '%3s' specifiers, and is significant since it corresponds to actual (discarded) space when processing the format. Furthermore, the last specifier '%8*' (discard 8 characters) is not fulfilled by the data string, and so the number of arguments successfully parsed is 4, not 5.
Syntax:
void removereadoption( | option); |
string option;Removes a previously-set read option. See Parse Options for a list of possible options.
For example:
removereadoption("skipblanks");
Syntax:
void skipchars( | n); |
int n;Skips the next n characters in the input file.
For example:
skipchars(15);
discards the next 15 characters from the input file.
Syntax:
void skiplin( | n = 1); |
int n = 1;Skips the next line in the file, or the next n lines if a number supplied.
For example:
skipline();
skips the next line in the file.
skipline(5);
discards 5 lines from the file.
Syntax:
void writeline( | var, | |
...); |
int|double|string var;...;Write a line to the current output file that consists of the whitespace delimited contents of the supplied arguments. The contents of the arguments are formatted according to their type and suitable internal defaults. A newline character is appended automatically to the end of the written line.
For example:
writeline("Number of atoms =", aten.model.natoms);
writes a line indicating the number of atoms in the model to the current output file.
Syntax:
void writelinef( | format, | |
...); |
string format;...;Write a formatted line to the current output file, according to the supplied format and any supplied arguments. Usage is the same as for the printf command. Note that a newline character is not automatically appended to the end of the written line, and one should be written explicitly using the escape sequence '\n'.
For example:
writelinef("%s = %8i\n", "Number of atoms", aten.model.natoms);
writes a line indicating the number of atoms in the model to the current output file, e.g.:
Number of atoms = 3
Syntax:
void writevar( | dest, | |
...); |
string dest;...;Write to the supplied string variable dest the whitespace delimited contents of the supplied arguments. The contents of the arguments are formatted according to their type and suitable internal defaults. A newline character is appended automatically to the end of the written line.
For example:
string s; writevar(s,"Number of atoms =", aten.model.natoms); writeline(s);
same result as the example for the 'writeline' command, except that the final string is written to a variable first, and then the file.
Syntax:
void writevarf( | dest, | |
| format, | ||
...); |
string dest;string format;...;Write to the supplied string variable dest the string resulting from the supplied format and any other supplied arguments. Apart from the mandatory first argument being the destination string variable, usage is otherwise the same as the printf command. Note that a newline character is not automatically appended to the end of the written line, and one should be written explicitly using the escape sequence '\n'.
For example:
string s; writevarf(s,"%s = %8i\n", "Number of atoms", aten.model.natoms); writeline(s);
same result as the example for the 'writelinef' command, except that the final string is written to a variable first, and then the file.
Commands to load and run scripts.
Syntax:
void loadscript( | filename); |
string filename;void loadscript( | filename, | |
nickname); |
string filename;string nickname;Loads a script from the filename specified, giving it the optional nickname.
For example:
loadscript("scripts/liquid-water.txt", "water");
loads the script from 'scripts/liquid-water.txt' and gives it the nickname 'water'.
Select atoms or groups of atoms within the current model.
Syntax:
int deselect( | selection, | |
...); |
atom|int|string selection;...;Deselect atoms in the current model, returning the number of atoms deselected by the provided selection arguments. One or more arguments may be supplied, and each may be of the type int, atom, or string. In the case of the first two types, individual atoms (or those corresponding to the integer id) are deselected. On the other hand, strings may contain ranges of atom IDs and element symbols permitting atoms to be deselected in groups. Ranges are specified as 'a-b' where a and b are either both atom IDs or both element symbols. In addition, the '+' symbol can be used before ('+a') or after ('a+') an atom ID or element symbol to mean either 'everything up to and including this' or 'this and everything after'. Within a string argument, one or more selection ranges may be separated by commas.
For example:
deselect(5);
deselects the 5th atom.
deselect("1-10,N");
deselects the first ten atoms, and all nitrogen atoms.
int n = deselect("Sc-Zn");
deselects the first transition series of elements, returning the number of atoms that were deselected in the process.
deselect("C+");
deselects all elements carbon and above.
deselect(1, 2, 5, "8+");
deselects the first, second, and fifth atoms, as well as the eighth atom and all that occur after it.
Syntax:
int expand( | ); |
Expand the current selection of atoms by selecting any atoms that are directly bound to an already-selected atom. The number of atoms added to the previous selection is returned.
For example:
expand();
Syntax:
int invert( | ); |
Inverts the selection of all atoms in the current model. Returns the number of atoms selected.
For example:
invert();
Syntax:
int select( | selection, | |
...); |
atom|int|string selection;...;Select atoms in the current model, keeping any previous selection of atoms. See the deselect command for a full description of the syntax. The number of atoms added to the existing selection is returned.
For example:
select("+5");
selects the first five atoms.
int n = select("+5,H");
selects the first five atoms and all hydrogens.
Syntax:
int selectall( | ); |
Select all atoms in the current model. The number of selected atoms is returned.
For example:
selectall();
Syntax:
int selectfftype( | fftype); |
string fftype;Select all atoms with forcefield type fftype in the current model. The number of atoms selected is returned.
For example:
selecttype("CT");
selects all atoms that have been assigned the forcefield type 'CT'.
Syntax:
vector selectioncog( | ); |
Return the centre of geometry of the current atom selection.
For example:
vector v = selectioncog();
printf("Centre of geometry of current selection is: %f %f %f\n", v.x, v.y, v.z);
calculates and prints the centre-of-geometry of the current selection.
Syntax:
vector selectioncom( | ); |
Return the centre of mass of the current atom selection.
For example:
vector v = selectioncom(); newatom(Be, v.x, v.y, v.z);
calculates the centre-of-mass of the current selection and creates a beryllium atom at those coordinates.
Syntax:
int selectmiller( | h, | |
| k, | ||
| l, | ||
inside = FALSE); |
int h;int k;int l;int inside = FALSE;Select all atoms that are 'outside' the specified Miller plane (and its mirror, if it has one). If the final parameter is specified as TRUE then atoms inside the specified Miller plane (and its mirror) are selected.
For example:
selectmiller(1, 1, 1);
selects all atoms located beyond the (111) plane in the unit cell.
Syntax:
int selectoverlaps( | dist = 0.2); |
double dist = 0.2;Select all atoms that are within a certain distance of another, or the default of 0.2 Å if no argument is provided. The number of selected overlapping atoms is returned.
For example:
int noverlaps = selectoverlaps("0.1");
selects all atoms that are less than 0.1 Å away from another.
Syntax:
int selectpattern( | id, | |
| name, | ||
p); |
int id;string name;pattern p;Selects all atoms in the current (or named/specified) pattern. Returns the number of atoms added to the existing selection.
For example:
selectpattern(2);
select all atoms in the second pattern of the current model.
selectpattern("bubble");
select all atoms in the pattern 'bubble' of the current model.
Syntax:
int selectradial( | id, | |
r); |
atom|int id;double r;Select all atoms within r Å of the supplied target atom (which is also selected). Returns the number of atoms added to the existing selection.
For example:
int nclose = selectradial(10, 4.5);
selects all atoms within 4.5 Å of atom 10, and returns the number selected.
Syntax:
int selecttype( | element, | |
neta); |
int|string element;string neta;Selects all atoms of the given element that also match the NETA description given, allowing selections to be made based on the connectivity and local environment of atoms. The number of (previously unselected) atoms matched is returned.
For example:
int nch2 = selecttype("C", "-H(n=2)");
selects all carbon atoms that are bound to two hydrogens.
![]() | See also: |
|---|---|
|
Describe sites within molecules for use in analysis.
Note: These commands are outdated and may be removed completely in a future version.
Syntax:
void getsite( | name); |
string name;Selects (makes current) the site referenced by name. If the site cannot be found an error is returned.
For example:
getsite("carb1");
makes the site 'carb1' the current site.
Syntax:
void listsites( | ); |
Prints the list of sites defined for the current model.
For example:
listsites();
Syntax:
void newsite( | name, | |
atomlist = ""); |
string name;string atomlist = "";Creates a new site name for the current model, based on the molecule of pattern, and placed at the geometric centre of the atom IDs given in atomlist. If no atoms are given, the centre of geometry of all atoms is used. The new site becomes the current site.
For example:
newsite("watercentre", "h2o");
adds a site called 'watercentre' based on the pattern called 'h2o' and located at the centre of geometry of all atoms.
newsite("oxy", "methanol", "5");
adds a site called 'oxy' based on the pattern called 'methanol' and located at the fifth atom in each molecule.
Syntax:
void siteaxes( | x_atomlist, | |
y_atomlist); |
string x_atomlist;string y_atomlist;Sets the local x (first set of atom IDs) and y (second set of atom IDs) axes for the current site. Each of the two axes is constructed by taking the vector from the site centre (defined by 'addsite') and the geometric centre of the list of atoms provided here. The y axis is orthogonalised with respect to the x axis and the z axis constructed from the cross product of the orthogonal x and y vectors.
For example:
siteaxes("1,2", "6");
sets the x axis definition of the current site to be the vector between the site centre and the average position of the first two atoms, and the y axis definition to be the vector between the site centre and the position of the sixth atom.
Manipulation and conversion of variables.
![]() | See also: |
|---|---|
|
Syntax:
string afterstr( | source, | |
| search, | ||
sourceonfail = FALSE); |
string source;string search;bool sourceonfail = FALSE;Return the part of the source string that comes after the first occurrence of the search string. If source doesn't contain any occurrences of search an empty string is returned, unless the flag 'sourceonfail' is set to TRUE in which case the original source string is returned instead.
For example:
string fullname = "BobBobbinson"; string firstname = afterstr(name, "Bob");
sets the variable firstname to the value 'Bobbinson'.
string text1, text2; text1 = "No taxes on axes"; text2 = afterstr(text1, "x");
results in text2 having a value of 'es on axes'.
Syntax:
double atof( | text); |
string text;Converts the supplied text into its floating point (double) representation. Equivalent to the standard C routine 'atof'.
For example:
double x = atof("1.099d");
would set x to the value '1.099'.
Syntax:
int atoi( | text); |
string text;Converts the supplied text into its integer representation. Equivalent to the standard C routine 'atoi'.
For example:
int i = atoi("000023");
would set i to the value '23'.
Syntax:
string beforestr( | source, | |
| search, | ||
sourceonfail = FALSE); |
string source;string search;bool sourceonfail = FALSE;Return the part of the source string that comes before the first occurrence of the search string. If source doesn't contain any occurrences of search an empty string is returned, unless the flag 'sourceonfail' is set to TRUE in which case the original source string is returned instead.
For example:
string source, target; source = "Engelbert"; target = beforestr(source, "e");
places the text "Eng" in the variable target.
string text1 = "No taxes on axes", text2; text2 = beforestr(text1, " ax");
places the text "No taxes on" in the variable text2.
Syntax:
int contains( | source, | |
search); |
string source;string search;Returns the number of times the search string is found in the source string. The function counts only non-overlapping occurrences of search.
For example:
string poem = "six sixes are thirty-six"; int count = contains(poem, "six");
sets count to '3'.
Syntax:
string ftoa( | d); |
double d;string ftoa ( double d )
Converts the supplied double d into a string representation.
For example:
string num = ftoa(100.001);
would set num to the value "100.001".
Syntax:
string itoa( | i); |
int i;Converts the supplied integer i into a string representation.
For example:
string num = itoa(54);
would set num to the value "54".
Syntax:
string lowercase( | source); |
string source;Returns the source string with all uppercase letters converted to lowercase.
Syntax:
string replacechars( | source, | |
| searchchars, | ||
replacechar); |
string source;string searchchars;string replacechar;Searches through the supplied source string, and replaces all occurrences of the individual characters given in the string searchchars with the character supplied in replacechar, returning the new string.
For example:
string newstring = replacechars("Zero 2599 these numbers", "123456789", "0");
replaces any numeric character with a zero.
Syntax:
string replacestr( | source, | |
| searchstr, | ||
replacestr); |
string source;string searchstr;string replacestr;Replaces all occurrences of searchstr with replacestr in the supplied source string, returning the result.
For example:
string fruity = replacestr("I don't like apples.", "apples", "oranges");
would change your fondness towards apples.
Syntax:
string removestr( | source, | |
searchstr); |
string source;string searchstr;Removes all occurrences of searchstr from the source string, returning the result.
For example:
string debt = removestr("I owe you 2 million dollars.", "million ");
would reduce your outgoings considerably.
Syntax:
string sprintf( | dest, | |
| format, | ||
...); |
string dest;string format;...;Prints a formatted string to the supplied variable dest, and is an alias for the writevarf command.
Syntax:
string stripchars( | source, | |
charlist); |
string source;string charlist;Strip the supplied character(s) from the source string, returning the result.
For example:
string abc = stripchars("Oodles of noodles", "o");
places the text "Odles f ndles" in the variable abc.
string abc; abc = "Oodles of noodles"; abc = stripchars(abc, "aeiou");
strips all vowels from the input string, placing the text "Odls f ndls" in the variable abc.
System commands for controlling debug output, instantiation of the GUI, and exiting from the program.
Syntax:
void debug( | type); |
string type;Toggles debug output from various parts of the code. A full list of valid types is given in output types.
For example:
debug("parse");
Syntax:
string getenv( | variable); |
string variable;Retrieves the contents of the named environment variable so that transfer of useful quantities can be made to Aten through a shell.
For example:
string s = getenv("HOSTNAME");
gets the name of the host Aten is running on (although what you would then usefully do with it I don't know).
Better examples can be found in the resources section of the website.
Syntax:
double getenvf( | variable); |
string variable;Retrieves the contents of the named environment variable, converting it to a floating-point (double) value in the process.
For example:
double d = getenvf("num");
gets the shell variable 'num' as a real number.
Syntax:
int getenvi( | variable); |
string variable;Retrieves the contents of the named environment variable, converting it to an integer value in the process.
For example:
int i = getenvi("count");
gets the shell variable 'count' as an integer number.
Syntax:
void gui( | ); |
Starts the GUI (e.g. from a script), if it isn't already running.
For example:
gui();
Syntax:
void null( | var, | |
...); |
variable var;...;The null command accepts one or more pointer variables whose values are to be set to NULL (0).
Open and associate trajectory files to models, and select frames to display/edit from the current trajectory.
![]() | See also: |
|---|---|
|
Syntax:
model addframe( | ); |
model addframe( | title); |
string title;Append a new trajectory frame to the current model's trajectory. The reference to the new frame is returned.
For example:
model m = addframe("new config");
Syntax:
void cleartrajectory( | ); |
Clear any associated trajectory and frame data in the current model.
For example:
cleartrajectory();
Syntax:
void firstframe( | ); |
Select the first frame from trajectory of current model.
For example:
fi rstframe();
Syntax:
int loadtrajectory( | filename); |
string filename;Associate trajectory in filename with the current model. An integer value of '1' is returned if the association was successful, or '0' otherwise.
For example:
int success = loadtrajectory("/home/foo/md/water.HISf");
opens and associated the formatted DL_POLY trajectory file 'water.HISf' with the current model.
Syntax:
void nextframe( | ); |
Select next frame from trajectory of current model.
For example:
nextframe();
Commands to transform the current selection of the model.
Syntax:
void axisrotate( | i, | |
| i, | ||
theta); |
atom|int i;atom|int i;double theta;void axisrotate( | i, | |
| i, | ||
| theta, | ||
| ox, | ||
| oy, | ||
oz); |
atom|int i;atom|int i;double theta;double ox;double oy;double oz;void axisrotate( | , | |
| y, | ||
| z, | ||
theta); |
double ;double y;double z;double theta;void axisrotate( | , | |
| y, | ||
| z, | ||
| theta, | ||
| ox, | ||
| oy, | ||
oz); |
double ;double y;double z;double theta;double ox;double oy;double oz;Rotate the current selection by an angle theta (in degrees) about an axis defined either by the vector between two atom IDs or the vector components provided. If supplied, the rotation is performed using the coordinate origin specified by ox, oy, and oz, otherwise {0,0,0} is assumed.
For example:
axisrotate(4, 5, 90.0);
rotates the current selection 90 degrees about the axis formed by the vector between atom ids 4 and 5 (4->5).
axisrotate(0, 1, 0, -52.0);
rotates the current selection -52 degrees about the y-axis.
axisrotate(0, 1, 0, -52.0, 4.0, 4.0, 4.0);
rotates the current selection -52 degrees about the y-axis, but with the rotation centre at {4.0,4.0,4.0}.
Syntax:
void centre( | x, | |
| y, | ||
| z, | ||
| lockx = FALSE, | ||
| locky = FALSE, | ||
lockz = FALSE); |
double x;double y;double z;bool lockx = FALSE;bool locky = FALSE;bool lockz = FALSE;Centre the current atom selection at the specified coordinates. The three optional arguments lockx, locky, and lockz specify one or more atomic coordinates that are to remain unchanged during the transformation.
For example:
centre(0.0, 0.0, 15.0);
centres the current selection at the coordinates (0 0 15).
Syntax:
void matrixconvert( | i_sx, | |
| j_sx, | ||
| i_sy, | ||
| j_sy, | ||
| i_sz, | ||
| j_sz, | ||
| i_tx, | ||
| j_tx, | ||
| i_ty, | ||
| j_ty, | ||
| i_tz, | ||
j_tz); |
int i_sx;int j_sx;int i_sy;int j_sy;int i_sz;int j_sz;int i_tx;int j_tx;int i_ty;int j_ty;int i_tz;int j_tz;void matrixconvert( | i_sx, | |
| j_sx, | ||
| i_sy, | ||
| j_sy, | ||
| i_sz, | ||
| j_sz, | ||
| i_tx, | ||
| j_tx, | ||
| i_ty, | ||
| j_ty, | ||
| i_tz, | ||
| j_tz, | ||
| oy, | ||
| oz, | ||
oz); |
int i_sx;int j_sx;int i_sy;int j_sy;int i_sz;int j_sz;int i_tx;int j_tx;int i_ty;int j_ty;int i_tz;int j_tz;double oy;double oz;double oz;void matrixconvert( | s_ax, | |
| s_ay, | ||
| s_az, | ||
| s_bx, | ||
| s_by, | ||
| s_bz, | ||
| s_cx, | ||
| s_cy, | ||
| s_cz, | ||
| t_ax, | ||
| t_ay, | ||
| t_az, | ||
| t_bx, | ||
| t_by, | ||
| t_bz, | ||
| t_cx, | ||
| t_cy, | ||
t_cz); |
double s_ax;double s_ay;double s_az;double s_bx;double s_by;double s_bz;double s_cx;double s_cy;double s_cz;double t_ax;double t_ay;double t_az;double t_bx;double t_by;double t_bz;double t_cx;double t_cy;double t_cz;void matrixconvert( | s_ax, | |
| s_ay, | ||
| s_az, | ||
| s_bx, | ||
| s_by, | ||
| s_bz, | ||
| s_cx, | ||
| s_cy, | ||
| s_cz, | ||
| t_ax, | ||
| t_ay, | ||
| t_az, | ||
| t_bx, | ||
| t_by, | ||
| t_bz, | ||
| t_cx, | ||
| t_cy, | ||
| t_cz, | ||
| oy, | ||
| oz, | ||
oz); |
double s_ax;double s_ay;double s_az;double s_bx;double s_by;double s_bz;double s_cx;double s_cy;double s_cz;double t_ax;double t_ay;double t_az;double t_bx;double t_by;double t_bz;double t_cx;double t_cy;double t_cz;double oy;double oz;double oz;From a defined frame of reference (i.e. a set of axes defining the spatial orientation), rotate the current selection from this frame into the second frame, using the coordinate origin supplied or {0,0,0} by default. In the first form six pairs of atom IDs define each matrix, with the vectors taken to be i->j in all cases (normalised to 1.0), and specifying the x, y, and z axes in turn. In the second, the matrices are given as two sets of nine numbers that define the vectors of the axes.
When supplying atom IDs, the x axis is taken to be absolute, the y-axis is orthogonalised w.r.t. the x-axis, and the z-axis is taken as the cross product between the x and y axes. Note that providing the definition of the z axis is still important, however, since the vector cross product is adjusted (if necessary) to point along the same direction as this supplied z-axis. When supplying the complete matrices no orthogonalisation or normalisation of the axes is performed (permitting arbitrary scale and shear operations).
For example:
matrixconvert(1, 2, 1, 3, 1, 4, 10, 11, 12, 13, 14, 15);
defines a the current selection's frame of reference as (in terms of atom IDs) X=(1->2), Y=(1->3), and Z=(1->4), which will be rotated such that it corresponds to the new frame of reference (again defined by atom IDs) X=(10->11), Y=(12->13), and Z=(14->15).
matrixconvert -0.7348 -0.0192 -0.678 0.4979 0.6635 -0.5584 0.4606 -0.7479 -0.47801 1 0 0 0 1 0 0 0 1
defines a the current selection's frame of reference as the vectors X={-0.7348, -0.0192, -0.678}, Y={0.4979, 0.6635, -0.5584}, and Z={0.4606, -0.7479, -0.47801}, which will be rotated into the standard reference frame.
![]() | See also: |
|---|---|
|
Syntax:
void matrixtransform( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
cz); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;void matrixtransform( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
| cz, | ||
| ox, | ||
| oy, | ||
oz); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;double ox;double oy;double oz;Transform the current selection by applying the defined matrix to each coordinate, operating about the supplied origin (or {0,0,0} by default). No orthogonalisation or normalisation of the defined axes is performed.
For example:
matrixtransform(1, 0, 0, 0, 1, 0, 0, 0, 1);
does absolutely nothing (multiplying by the identity matrix).
matrixtransform(1, 0, 0, 0, 1, 0, 0, 0, -1);
mirrors the current selection in the xy plane.
matrixtransform(0.5, 0, 0, 0, 0.5, 0, 0, 0, -1);
scales the x and y-coordinates of all selected atoms by 0.5, leaving the z coordinates intact.
Syntax:
void reorient( | i_sx, | |
| j_sx, | ||
| i_sy, | ||
| j_sy, | ||
| i_sz, | ||
| j_sz, | ||
| t_ax, | ||
| t_ay, | ||
| t_az, | ||
| t_bx, | ||
| t_by, | ||
| t_bz, | ||
| t_cx, | ||
| t_cy, | ||
t_cz); |
atom|int i_sx;atom|int j_sx;atom|int i_sy;atom|int j_sy;atom|int i_sz;atom|int j_sz;double t_ax;double t_ay;double t_az;double t_bx;double t_by;double t_bz;double t_cx;double t_cy;double t_cz;void reorient( | i_sx, | |
| j_sx, | ||
| i_sy, | ||
| j_sy, | ||
| i_sz, | ||
| j_sz, | ||
| t_ax, | ||
| t_ay, | ||
| t_az, | ||
| t_bx, | ||
| t_by, | ||
| t_bz, | ||
| t_cx, | ||
| t_cy, | ||
| t_cz, | ||
| ox, | ||
| oy, | ||
oz); |
atom|int i_sx;atom|int j_sx;atom|int i_sy;atom|int j_sy;atom|int i_sz;atom|int j_sz;double t_ax;double t_ay;double t_az;double t_bx;double t_by;double t_bz;double t_cx;double t_cy;double t_cz;double ox;double oy;double oz;Operates in exactly the same manner as matrixtransform except that the source matrix is defined from atoms (or their IDs) and the destination matrix is provided as a matrix.
Syntax:
void setdistance( | i, | |
| j, | ||
dist); |
atom|int i;atom|int j;double dist;Shifts the atom j and all its direct and indirectly-bound neighbours (except i) so that the distance between i and j is dist. The coordinates of atom i remain unaffected.
This operation can only be performed for atoms which are not present in the same cyclic structure, e.g. trying to set the distance of two atoms in a benzene ring is not allowed. However, note that the two atoms i and j do not have to be bound, so it is possible to move separate fragments further apart by this method.
For example:
setdistance(1,4,4.9);
sets the distance between atoms 1 and 4 to be 4.9 Å.
Syntax:
void translate( | dx, | |
| dy, | ||
dz); |
double dx;double dy;double dz;Translates the current selection by the specified vector.
For example:
translate(1, 0, 0);
moves the current selection 1 Å along the x axis.
Syntax:
void translateatom( | dx, | |
| dy, | ||
dz); |
double dx;double dy;double dz;Translates the current atom by the specified vector.
For example:
translateatom(1, 0, -1);
translates the current atom 1 Å along x and -1 Å along z.
Syntax:
void translatecell( | fracx, | |
| fracy, | ||
fracz); |
double fracx;double fracy;double fracz;Translates the current selection by the fractional cell vectors specified. The model must have a unit cell for this command to work.
For example:
translatecell(0, 0.5, 0);
translates the current selection by an amount equivalent to half of the current cell's B vector.
Commands to change the current model's view.
Syntax:
void axisrotateview( | ax, | |
| ay, | ||
| az, | ||
angle); |
double ax;double ay;double az;double angle;Rotate the current view angle degrees about an axis defined between the supplied point {ax,ay,az} and the origin.
Syntax:
void getview( | ); |
Outputs the 3x3 rotation matrix, the camera position vector, and the z-rotation of the camera for the current model's view. The list of numbers may be passed directly to the 'setview' command to re-create the view exactly.
For example:
getview();
Syntax:
void orthographic( | ); |
Set the view for all models to be an orthographic projection.
For example:
orthographic();
Syntax:
void perspective( | ); |
Set the view for all models to be a perspective projection.
For example:
perspective();
Syntax:
void resetview( | ); |
Resets the view rotation and zoom for the current model.
For example:
resetview();
Syntax:
void rotateview( | rotx, | |
roty); |
double rotx;double roty;Rotates the current view by rotx degrees around the x axis and roty degrees around the y axis.
For example:
rotateview(10.0, 0.0);
Syntax:
void setview( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
| cz, | ||
| x, | ||
| y, | ||
z); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;double x;double y;double z;void setview( | ax, | |
| ay, | ||
| az, | ||
| bx, | ||
| by, | ||
| bz, | ||
| cx, | ||
| cy, | ||
| cz, | ||
| x, | ||
| y, | ||
| z, | ||
zrot); |
double ax;double ay;double az;double bx;double by;double bz;double cx;double cy;double cz;double x;double y;double z;double zrot;Sets the current view to the rotation matrix, camera vector, and (if supplied) camera rotation (''zrot'') specified. The 10-number output of getview can be passed to 'setview' to recreate the old camera rotation and position.
For example:
setview(1, 0, 0 ,0, 0, 1, 0, -1, 0, 0.0, 0.0, -10.0);
sets a view with the z axis pointing up, and the y axis normal to the screen (i.e. rotated 90 degrees around the x axis)
Syntax:
void speedtest( | nrenders = 100); |
int nrenders = 100;Performs a quick speed test based on rendering of the current model and general view.
For example:
speedtest();
spins the current model for the default of 100 rendering passes.
speedtest(2000);
spins the current model for 2000 rendering passes.
Syntax:
void translateview( | x, | |
| y, | ||
z); |
double x;double y;double z;Translates the camera viewing the current model.
For example:
translateview(0.0, 0.0, 1.0);
Syntax:
void viewalong( | x, | |
| y, | ||
z); |
double x;double y;double z;Sets the current view so that it is along the specified vector.
For example:
viewalong(0, 0, -1);
view the current model along the negative z-axis.
A 'glyph' in Aten is any of a series of primitives (or shapes, or objects) that can be rendered in addition to the components that make up a standard model (i.e. atoms, bonds, and unit cell). These can be used to illustrate points of interest in a system, illustrate some vector quantity, or draw whole new objects from scratch. Glyphs can be drawn at fixed positions within a model, or can have their vertices linked to existing atoms, enabling them to be moved in conjunction with the model's atoms. Some glyphs can also be rotated about their current position.
A glyph requires from one to four vertices to be set, depending on the type. A different colour may be assigned to each vertex enabling, for example, each corner of a triangle to possess a different colour. The available glyph types and the roles of the four possible coordinates are:
Table 7.1. Glyph type data
| Glyph | Rotatable? | r1 | r2 | r3 | r4 |
|---|---|---|---|---|---|
| arrow | No | Tail coords | Head coords | ||
| cube | Yes | Centroid | XYZ scaling factors | ||
| ellipsoid | |||||
| ellipsoidxyz | |||||
| line | No | Start coords | End coords | ||
| quad | No | Vertex 1 | Vertex 2 | Vertex 3 | Vertex 4 |
| sphere | Yes | Centroid | XYZ scaling factors | ||
| svector | No | ||||
| tetrahedron | Yes | Vertex 1 | Vertex 2 | Vertex 3 | Vertex 4 |
| text | No | Mid-left anchorpoint of text | |||
| text3d | No | Mid-left anchorpoint of text | |||
| triangle | No | Vertex 1 | Vertex 2 | Vertex 3 | |
| tubearrow | No | Tail coords | Head coords | ||
| vector | No | Centroid | Pointing vector |
Patterns in Aten represent collections of molecules of the same type, and are used primarily in the forcefield engine where they allow the construction of compact descriptions of systems where many similar molecules exist (e.g. liquids). A set of patterns describing the contents of a model is often referred to as a pattern description. Such a description is generated automatically as and when required by Aten, and so in most cases should not need to be defined manually by the user. When Aten fails to find a suitable pattern for a model this is often an indication that a bond is missing (perhaps the bond tolerance is too low?) or the atoms present in the system are not in exactly the order you think they are.
A collection of atoms can live quite happily on its own in Aten, and can be moved around, rotated, deleted and added to at will. However, if you want to calculate the energy or forces of a collection of atoms (or employ methods that use such quantities) then a description of the interactions between the atoms is required. Creating a suitable expression is the process of taking a system of atoms and generating a prescription for calculating the energy and/or forces arising from these interactions from any standard classical forcefield available.
Patterns describe systems in terms of their constituent molecular units. For an N-component system (a single, isolated molecule is a 1-component system) there are N unique molecule types which are represented as, ideally, a set of N patterns. Forcefield sub-expressions can then be created for each pattern and applied to each molecule within it, allowing the expression for the entire system to be compact and efficient. Each pattern contains a list of intramolecular terms (bonds, angles etc.), atom types, and van der Waals parameters for a single molecule that can then be used to calculate the energy and forces of M copies of that molecule.
From the atoms and the connectivity between them Aten will automatically determine patterns for systems of arbitrary complexity. The ordering of atoms is important, however, and the atoms belonging to a single molecule must not be interspersed by those from others. In other words, the atoms belonging to one instance of a molecule must be listed consecutively in the model. There are also many ways to represent the same system of atoms, all of which (from the point of view of the program) are equivalent and will produce the same total energies and atomic forces.
Consider the following examples:
Table 7.2. Pattern Examples
| System | Atom Ordering | Automatic Pattern | |
|---|---|---|---|
| 1 |
| H1 O2 H3 , H4 O5 H6 , H7 O8 H9 | HOH(3) |
| 2 |
| H1 Cl2 , H3 O4 H5 , H6 O7 H8 | HCl(1) HOH(2) |
| 3 |
| H1 O2 H3 , H4 Cl5 , H6 O7 H8 | HOH(1) HCl(1) HOH(1) |
| 4 |
| H1 O2 H3 H4 H5 O6 H7 Cl8 | HOH(1) HHO(1) HCl(1) |
In 1) the three water molecules are identical with respect to the ordering of the atoms, so our description consists of a single pattern describing one HOH moiety. Obvious, huh? The two-component system illustrated in 2) has all molecules of the same type one after the other, giving a simple two-term pattern. However, in 3) the two water molecules are separated (in terms of their order) by the HCl, and so a three-term pattern results. In 4) there are, from the point of view of the program, three distinct molecules, since the ordering of atoms in the two water molecules is different, and so three terms are again necessary in the pattern description.
There are likely to be many possible pattern descriptions for systems, some of which may be useful to employ, and some of which may not be. Take the well-ordered system 1) -- four different ways to describe the system are:
HOH(3)
HOH(1) HOH(1) HOH(1)
HOH(2) HOH(1)
HOH(1) HOH(2)
All are equivalent and will give the same energies / forces. Sometimes it is useful to treat individual molecules as separate patterns in their own right since it allows for calculation of interaction energies with the rest of the molecules of the system.
Patterns work on the basis of bound fragments/molecules, and a molecule cannot be split up smaller than this - for instance in the examples above water cannot be represented by 'HO(1) H(1)' since this would 'neglect' a bond. However, there is nothing to stop a pattern 'crossing' individual molecules. Consider again the example 1) above. Three further (reiterating the point, equivalent) ways of writing the pattern description are:
HOHHOH(1) HOH(1)
HOH(1) HOHHOH(1)
HOHHOHHOH(1)
Here, we have encompassed individual molecular entities into supermolecular groups, and as long as there are no bonds 'poking out' of the pattern, this is perfectly acceptable. Although this coarse-graining is a rather counter-intuitive way of forming patterns, it nevertheless allows them to be created for awkward systems such as that in 4) above. We may write the following valid patterns for this arrangement of atoms:
HOHHHOHCl(1)
HOH(1) HHOHCl(1)
HOHHHO(1) HCl(1)
Note that, when automatically creating patterns, if Aten stumbles across a situation that confuses it, the default pattern of one supermolecule will be assumed, i.e. X(1) where 'X' is all atoms in the model. This will work fine in subsequent energy calculations etc., but will result in rather inefficient performance.
Table of Contents
- Overview
- Supplied Forcefields
- Canongia-Lopes & Padua Ionic Liquids (cldp-il.ff)
- Youngs, Kohanoff, & Del Pópolo [dmim]Cl (dmimcl-fm.ff)
- Youngs & Hardacre [dmim]Cl (dmimcl-fm2.ff)
- Jorgensen at al. OPLS-AA (oplsaa.ff)
- Berensen et al.s Simple Point Charge Water (spc.ff)
- Berensen et al.s Extended Simple Point Charge Water (spce.ff)
- Rappe et al.s Universal Forcefield (testing/uff.ff)
- Mayo, Olafson & Goddard II's Generic Forcefield (testing/dreiding.ff)
- General Amber Forcefield (testing/gaff.ff)
- Liu, Wu & Wang's United-Atom Ionic Liquids Forcefield (lww-il.ff)
- Keyword Reference
- Rule-Based Forcefields
- Typing
- NETA Reference
- VDW Functional Forms
- Bond Functional Forms
- Angle Functional Forms
- Torsion Functional Forms
If you're doing anything interesting with a model or a molecule, a suitable forcefield description of the system is a must. A forcefield contains lists of parameters that describe the interactions between atoms, for example bonds, angles, and van der Waals interactions. More specifically, a forcefield contains parameters to describe many such interactions in many different types of molecule or chemical environment. An 'ex<x>pression', referred to throughout the manual, should be thought of as the subset of terms from a given forcefield necessary to describe all the interactions within a model.
Aten has its own free format for forcefield files, described in the following sections. Once loaded in, the energy and forces in Models can then be calculated, and allows energy minimisation etc. More so, once a set of forcefield parameters has been read in and used to describe a model, this expression can be written out using a custom format ready for input into something else.
The basic forcefield file format is designed to be as readable as possible by both machine and user. Lines are free format, meaning that any number of tabs, commas, and spaces may separate items. Text items should be enclosed with either double or single quotes if they themselves contain these delimiters (in particular, this applies to NETA descriptions). There is no terminating symbol at the end of a line, c.f. the command language where a ';' typically ends every command.
The majority of data is contained within blocks in the file. Blocks begin with a specific keyword (e.g. inter), contain one or more lines of definitions, and are terminated by an 'end' keyword. Forcefield files may contain many blocks of the same type, permitting terms of the same type but with differing functional forms to be defined easily.
More advanced forcefields may contain generator sections and functions that enable them to either generate all their parameters on the fly from a basic set of data, or fill in missing terms that are not defined in any blocks.
The format is keyword-based and as simple as possible. Most input is enclosed within blocks, beginning with a keyword and terminated after several lines of data with and 'end' statement. As an example of the overall structure of a forcefield, consider the simple point charge (SPC) forcefield for water as is provided with Aten:
name "SPC Water" units kj types 1 HW H "nbonds=1" 2 OW O "-H,-H" end inter lj 1 HW 0.41 0.0 0.0 2 OW -0.82 0.650 3.166 end bonds constraint HW OW 4184.0 1.000 end angles bondconstraint HW OW HW 4184.0 1.62398 end
After giving the forcefield a name and defining the energy units used for the parameters, the two types of atom described by the forcefield (OW and HW) are listed. A unique id, type name, base element, and type description are provided, providing Aten with all it needs to be able to recognise and type these atoms within a model. For each of these types the van der Waals data are provided in the Lennard-Jones style ('inter lj') - again, the type id and type name are specified, followed by the atomic charge and the epsilon and sigma values. Note here that there are default combination rules set for each functional form - see VDW functional forms for a list. Finally, the single bond and angle within the molecule are defined. The type names involved in the interactions are given, followed by the necessary parameters for the functional form specified ('constraint' for the bond, and 'bondconstraint' for the angle). And that's it. Detailed explanations of each section follow. A more 'complete' test forcefield supplied with Aten can be found in data/ff/test.ff.
A handful of forcefields ready-formatted for import into Aten are provided with the code and are listed here. It should be a relatively straightforward process to convert others, unless the functional forms used are not yet implemented (but sure, if you ask then I will add them). If you export an expression from Aten, please check the parameters in the file are what you actually want. Aten is designed to ease the pain of setting up a simulation in this manner, but is not intended as a black box.
All-atom ionic liquids forcefield of Canongia Lopes et al. covering various cation/anion combinations.
References
- J. N. Canongia Lopes, A. A. H. Padua, J. Phys. Chem. B, 110 (39), 19586-19592 (2006)
- J. N. Canongia Lopes, A. A. H. Padua, J. Phys. Chem. B, 108 (43), 16893-16898 (2004)
- J. N. Canongia Lopes, J. Deschamps, A. A. H. Padua, J. Phys. Chem. B, 108 (30), 11250 (2004)
- J. N. Canongia Lopes, J. Deschamps, A. A. H. Padua, J. Phys. Chem. B, 108 (6), 2038-2047 (2004)
Force-matched model for the ionic liquid dimethylimidazolium chloride only. Integer charges on ions.
References
- T. G. A. Youngs, J. Kohanoff, and M. G. Del Pópolo, J. Phys. Chem. B, 110 (11), 5697-5707 (2006)
Second force-matched model for the ionic liquid dimethylimidazolium chloride only. Non-integer charges on ions.
References
- T. G. A. Youngs and C. Hardacre, ChemPhysChem, 9 (11), 1548-1558 (2008)
Original OPLS-AA forcefield of Jorgensen et al. Thanks to W. Jorgensen for supplying the parameter data.
References
- W. L. Jorgensen, D. S. Maxwell, and J. Tirado-Rives, J. Am. Chem. Soc. 118, 11225-11236 (1996).
- W. L. Jorgensen and N. A. McDonald, Theochem 424, 145-155 (1998).
- W. L. Jorgensen and N. A. McDonald, J. Phys. Chem. B 102, 8049-8059 (1998).
- R. C. Rizzo and W. L. Jorgensen, J. Am. Chem. Soc. 121, 4827-4836 (1999).
- M. L. Price, D. Ostrovsky, and W. L. Jorgensen, J. Comp. Chem. 22 (13), 1340-1352 (2001).
- E. K. Watkins and W. L. Jorgensen, J. Phys. Chem. A 105, 4118-4125 (2001).
Note: NETA definitions have been written for a large number of types in the forcefield, but not all.
Rigid, simple point charge model for water
References
- H. J. C. Berendsen, J. P. M. Postma, W. F. van Gunsteren and J. Hermans, in Intermolecular Forces, B. Pullman (ed.), Reidel, Dordrecht, 1981, p331.
Simple point charge model for water, modified to reproduce molecular dipole in the liquid phase.
References
- J. C. Berendsen, J. R. Grigera and T. P. Straatsma, J. Phys. Chem. 91, 6269-6271 (1987)
Universal forcefield for the whole periodic table by Rappe et al.
References
- A. K. Rappe, C. J. Casewit, K. S. Colwell, W. A. Goddard III, and W. M. Skiff, J. Am. Chem. Soc. 114, 10024-10039 (1992)
Notes:
- uff.ff currently lives in the testing/ directory since it is a rule-based forcefield and is currently being rewritten.
- Generated terms should be checked by hand if forcefield expressions are exported.
- Detection of some atomtypes, namely transition metals, is imperfect.
- Warning: Generation of terms (especially angles) needs to undergo proper testing! If you wish to help, please contact me.
Universal forcefield for the whole periodic table.
References
- S.L. Mayo, B.D. Olafson, and W.A. Goddard III, J. Phys. Chem. 94, 8897-8909 (1990).
Notes:
- dreiding.ff currently lives in the testing/ directory since it is a rule-based forcefield and is currently being rewritten.
- Generated terms should be checked by hand if forcefield expressions are exported.
- Detection of some atomtypes, namely transition metals, is imperfect.
- Warning: Generation of terms (especially angles) needs to undergo proper testing! If you wish to help, please contact me.
General Amber forcefield containing precalculated terms for most intramolecular terms, and generator section for any that are missing.
References
- J. Wang, R. M. Wolf, J. W. Caldwell, P. A. Kollman, and D. A. Case, J. Comp. Chem. 25, 1157-1174 (2004)
Notes:
- gaff.ff currently lives in the testing/ directory since it's rule-based part has not been implemented yet.
General keywords are simple keywords that take single items of data as arguments.
Syntax:
name "name of forcefield"
Sets the name of the forcefield as it appears in the program.
For example:
name "Test Forcefield"
sets the name of the forcefield to "Test Forcefield".
Syntax:
units energyunit
Specifies the units of energy used for energetic forcefield parameters. Any energetic parameters specified in the forcefield are converted from the units specified here into the internal units of energy once loading of the forcefield has completed.
For example:
units kcal
indicates that any energetic values supplied in the forcefield are in kilocalories per mole.
![]() | See also: |
|---|---|
|
Syntax:
convert name1, name2 ...
Only relevant if a data block exists, the 'convert' keyword takes a list of parameter names defined in the data block(s), and marks them as being (or containing) a unit of energy. When Aten converts between energy units, these marked parameters will be converted also.
For example:
convert Dij e_sep
indicates that the defined data variables 'Dij' and 'e_sep' are energy-based and should be converted when necessary.
All lists of terms, types, and extraneous data are specified in the form of 'blocks'. Each keyword in this section marks the start of block, and must at some point be terminated by an 'end' keyword. In addition each keyword may take one or more (optional) values.
Syntax:
angles form
Definitions of intramolecular angle terms are given in 'angles' blocks. Multiple 'angles' blocks may exist, each defining a subset of terms, and each possessing a different functional form.
The 'angle' keyword begins a block of intermolecular parameter definitions, and the single argument form should specify the functional form of the interactions.
The format of lines within the 'angles' block is as follows:
typename_i typename_j typename_k data1 [data2...]
The three ''typenames'' identify the particular angle to which the parameters are relevant. Note that typenames given for an angle ''i''-''j''-''k'' will also match an angle ''k''-''j''-''i''. Data parameters should be provided in the required order for the specified form.
For example:
angles harmonic HT CT HT 80.0 109.4 end
provides parameters for an H-C-H angle using the harmonic potential.
Syntax:
bonds form
Definitions of intramolecular bond terms are given in 'bonds' blocks. Multiple 'bonds' blocks may exist, each defining a subset of terms, and each possessing a different functional form.
The 'bond' keyword begins a block of intermolecular parameter definitions, and the single argument form should specify the functional form of the interactions.
The format of lines within the 'bonds' block is as follows:
typename_i typename_j data1 [data2...]
The two ''typenames'' identify the particular bond to which the parameters are relevant. Note that typenames given for a bond ''i''-''j'' will also match a bond ''j''-''i''. Data parameters should be provided in the required order for the specified form.
For example:
bonds constraint HT CT 4000.0 1.06 end
provides parameters for an H-C bond using the constraint potential.
Syntax:
data "type name,..."
The 'data' block defines additional generic data for each atom type. The additional data can be accessed through the 'datad', 'datai', and 'datas' members of the ffatom type.
The quoted argument supplied to the block defines the data types and names to be expected for each specified atom type, and furthermore stricly defines the order in which they must be given. Any of the standard simple variable types int, double, and string may be used.
The format of individual lines within the block is as follows:
typeid typename data1 [data2 ...]
Following the identifying typeid and typename data items are given one after the other and in the order they are declared in the block keyword argument.
For example:
data "string dogtype, int bridge, int likespasta, double numtoes" 1 OW "redsetter" 1 0 9 2 HW "dalmation" 1 1 64 end
This defines a quartet of extra data (random, odd data...) for each of the specified atom types.
For forcefields which rely on functions to generate the necessary function data, the 'data' block should be used to define additional data for each atom type. For example, the GAFF forcefield is able to generate extra intramolecular terms if the relevant definitions are not already defined in the forcefield, and the UFF and DREIDING forcefields contain no pre-defined intramolecular terms whatsoever.
Syntax:
defines
The 'defines' block makes it possible to state commonly-used or lengthy chunks of NETA that do not belong to any specific atom type, and which can then be reused multiple times in many different atom type descriptions. Each definition in the block is given an identifying unique name which allows it to be referenced with the '$' symbol.
The format of lines within the 'defines' block is as follows:
name "NETA"
The NETA descriptions provided for each definition must be valid, or the forcefield will not be loaded. In subsequent NETA definitions for atom types the definitions may be inserted by stating '$name'. For example:
defines water_oxygen "-O(nh=2,nbonds=2)" end ... types 1 HW2 H "nbonds=1,$water_oxygen" "Water hydrogen" end
Syntax:
equivalents
In forcefields, the most detailed information provided is typically the short-range intermolecular and charge parameters, with different values (or at least different charges) given to each individual atom type. Usually, intramolecular terms are more general and don't depend so much on the exact atom type. For example, given a tetrahedral carbon CT and three different aliphatic hydrogens H1, H2, and H3, the bond between the carbon and any of the three hydrogen types will likely be the same with respect to the force constant, equilibrium distance etc.
So, the forcefield will have to contain three intramolecular bond definitions covering CT-H1, CT-H2, and CT-H3, each having the same parameters, right? Not necessarily. While this is perfectly acceptable, for large forcefields the number of redundant terms may become quite large, and even for small forcefields with only a handful of terms, adding in duplicate data might irk the more obsessive amongst us. On these occasions, atomtype 'equivalents' can be defined, which effectively link a set of atomtypes to a single identifying name that can then be used in any intramolecular parameter definitions.
The format of individual lines in 'equivalents' block is:
alias typename [typename ...]
In the waffle above, aliasing the three hydrogens H1, H2, and H3 to a single typename 'H1' can be done as follows:
equivalents H1 H1 H2 H3 end
Note that the aliased name does not have to be an atomtype name already defined in the types section.
Syntax:
function
The 'function' block contains all the function definitions relevant to rule-based forcefields. The function(s) should be written in the standard command language style.
For example:
function
int generatebond(ffbound data, atom i, atom j)
{
# Calculate bond potential parameters between supplied atoms i and j
data.form = "morse";
return 1;
}
end
defines the function to be used when generation of a bond term is required. Only functions with certain names will be recognised and used properly by Aten. See the functions section in rule-based forcefields for more information and a list of valid function declarations that may be made.
Syntax:
generator "type name,..."
The 'generator' block is defunct as of code revision 1267. Use the data block instead.
Syntax:
inter form
Intermolecular van der Waals parameters and the charge associated with each atom type belong in the 'inter' section. There may be multiple 'inter' sections within the same forcefield file, but parameters for an individual atomtype may be defined only once.
The 'inter' keyword begins a block of intermolecular parameter definitions, and the single argument form should specify the functional form of the intermolecular interactions.
The format of individual lines within the block is as follows:
typeid typename q data1 [data2 ...]
The ''form'' parameter specified the form of short-range interaction potential to use for each of the following atomtypes. ''typeid'' and ''typename'' refer to a single type defined in the 'types' section, ''q'' is the atomic charge of this atomtype, and then follows the data describing the interaction. The order of the values given should correspond to the order of parameters expected for the specified functional form.
For example, the Lennard-Jones potential takes two data ''epsilon'' and ''sigma'' in that order. For a chloride atomtype with ID 24, if ''epsilon'' = 0.5, ''sigma'' equals 3.0, and the charge on the atomtype is -1 ''e'', the corresponding entry in the 'inter' block will be:
24 Cl -1.0 0.5 3.0
Some functional forms have default values for some parameters used in the functional form, and need not be specified (if there are any, these will be detailed in the functional form chapter). For this reason, it is important not to add any unnecessary extra data to the entries in the 'inter' block, since this may overwrite a default parameter that results in literal chaos.
Syntax:
torsions form [escale vscale]
Definitions of intramolecular torsion terms are given in 'torsions' blocks. Multiple 'torsions' blocks may exist, each defining a subset of terms, and each possessing a different functional form.
The 'torsion' keyword begins a block of intermolecular parameter definitions, and the first (mandatory) argument form should specify the functional form of the interactions. For torsions the electrostatic and VDW 1-4 interactions (i.e. those between atoms 1 [i] and 4 [l]) are scaled by some factor between 0.0 and 1.0. The optional escale and vscale arguments specify these scaling factors - if they are not provided, they both default to 0.5.
The format of lines within the 'torsions' block is as follows:
typename_i typename_j typename_k typename_l data1 [data2...]
The four ''typenames'' identify the particular torsion to which the parameters are relevant. Note that typenames given for a torsion ''i''-''j''-''k''-''l'' will also match a torsion ''l''-''k''-''j''-''i''. Data parameters should be provided in the required order for the specified form.
For example:
torsions cos HT CT OC HO 3.0 5.0 0.0 end
provides parameters for an H-C-O-H torsion using the cosine potential.
torsions cos3 0.8333333 0.25 CT CT CT O1 1.0 -2.0 0.0 CT CT CT O2 0.5 -1.4 1.0 end
defines two C-C-C-O torsions of the triple cosine form, and with custom scale factors.
Syntax:
types
The core of the forcefield file is the types section, listing the ids, names, and elements of the different atom types present in the forcefield, as well as a description telling Aten how to recognise them.
The format of each line in the 'types' block is as follows:
typeid typename element NETA [description]
The ''id'' is an integer number used to identify the type. It should be positive, and must be unique amongst all those defined in a single forcefield. ''typename'' is the actual name of the atom type ('OW', 'C1', 'N_ar' etc.), and is referred to in the other sections of the forcefield file, and ''element'' is the type's element symbol as found in the periodic table ('O', 'C', 'N', etc.). The ''type description'' defining how Aten should recognise this particular type follows (in quotes if necessary), and then optionally a short text describing the type (which appears in lists within the program to help identify particular types). Atom types may be defined over multiple 'types' blocks within the same file if necessary, i.e. more than one 'types' block may exist, but all type IDs must be unique over all such blocks.
For example:
types 35 CT C "nbonds=4" "Simple tetrahedral carbon" end
describes a bog-standard tetrahedral carbon called 'CT', and assigns it an ID of 35.
![]() | See also: |
|---|---|
|
Syntax:
uatypes
The 'uatypes' section contains exactly the same information as the 'types' block except that a mass must also be provided. In the 'types' block it is assumed that the character element of the type also implicitly defines the mass (as would be expected). In the case of united-atom forcefields, this is not necessarily the case. Thus, the 'uatypes' block allows a mass to be associated in order to account for the light atoms subsumed into the heavy atom's mass. This information can be accesses through the 'mass' member of the ffatom variable type.
The format of each line in the 'uatypes' block is as follows:
typeid typename element mass NETA [description]
The ''id'' is an integer number used to identify the type. It should be positive, and must be unique amongst all those defined in a single forcefield. ''typename'' is the actual name of the atom type ('OW', 'C1', 'N_ar' etc.), and is referred to in the other sections of the forcefield file, and ''element'' is the type's element symbol as found in the periodic table ('O', 'C', 'N', etc.). The ''type description'' defining how Aten should recognise this particular type follows in quotes, and then optionally a short text describing the type (which appears in lists within the program to help identify particular types). The ''mass'' is the united atom mass of the type (i.e. the sum of heavy and light atom masses). Atom types may be defined over multiple 'types' blocks within the same file if necessary, i.e. more than one 'types' block may exist, but all type IDs must be unique over all such blocks.
For example:
uatypes 10 CH2 C 14.0265 "nbonds=2,nh=0" "United atom methylene carbon" end
describes a united-atom methylene carbon, with mass of 14.0265 (C+2H).
![]() | See also: |
|---|---|
|
In any of the typenames given in the specification of intramolecular interactions, a wildcard character '*' may be used to 'finish off' any or all of the typenames (or replace individual typenames entirely). In doing so, a single definition is able to match more than one set of typenames.
For example:
bonds harmonic CT H* 4184.0 1.06 end
will describe bonds between 'CT' and any other atom beginning with an 'H'.
Using a '*' on its own will match any typename in that position. As an extreme example:
angles harmonic * * * 418.4 109.4 end
will match any angle. Be careful - when Aten is creating expressions and searching for specific interactions between atom types, as soon as an intramolecular definition is found that matches it is used, and no further searching is done. So, loose definitions involving wildcards should be put near to the end of the block in which they occur.
Forcefields exist where individual intramolecular parameter definitions (i.e. those provided by the bond, angle, and torsion blocks) are not necessary. Instead, such parameters are constructed as and when necessary using a set of parameters that depend only on the atomtypes involved. These forcefields are so-called 'rule-based', and are often able to describe enormously varied systems from a small set of defining parameters.
Rule-based forcefields are defined in exactly the same way as normal forcefields, save for the lack of blocks that define intramolecular terms. Instead, the per-atomtype parameters must be provided instead, and for all atomtypes defined in the types section. This "generator" data is then used by the equations defined within the code to construct the necessary intramolecular terms when required. One or more data blocks should be used to define this data for each atomtype.
In a rule-based forcefield all the useful function declarations which calculate the correct parameters (usually from values supplied in a data block) must be made within a single function block in the forcefield file. The recognised function names and their arguments are as follows:
For example:
Table 8.1. Allowable FF Rule Functions
| Function Declaration | Description |
|---|---|
| int vdwgenerator(ffatom data) | Called whenever descriptive VDW data is missing from an atom type (which is passed into the function and should have the correct data placed in it) |
| int bondgenerator(ffbound newdata, atom i, atom j) | Called whenever function data for an unrecognised bond (between the atom types currently assigned to atoms 'i' and 'j') is needed. Generated parameters should be store in the passed 'newdata' structure |
| int anglegenerator(ffbound newdata, atom i, atom j, atom k) | Called whenever function data for an unrecognised angle (between the atom types currently assigned to atoms 'i', 'j', and 'k') is needed. Generated parameters should be store in the passed 'newdata' structure |
| int torsiongenerator(ffbound newdata, atom i, atom j, atom k, atom l) | Called whenever function data for an unrecognised torsion (between the atom types currently assigned to atoms 'i', 'j', 'k', and 'l') is needed. Generated parameters should be store in the passed 'newdata' structure |
When calling the functions, Aten provides the necessary structure in which the generated parameters should be store. In the case of the Vdw-generating function, the actual atomtype structure which is missing the data is passed (see the ffatom variable type). In the case of intramolecular interactions, Aten creates and passes a new, empty ffbound container in which the functional form of the interaction and the relevant data values should be set. A number of ffatom references are also provided, corresponding to the atom types involved in the bound interaction, and from which the necessary data values may be retrieved using the relevant 'data' accessors. For bound interactions it is not necessary to set the equivalent names of the involved atom types since this is done automatically.
We are all familiar with talking about atoms being chemically different depending on the functional group in which they exist - e.g. ether, carbonyl, and alcoholic oxygens - and this categorisation of atoms forms basis of forcefield writing. That is, a large number of different molecules and types of molecule should be described by a small set of different atoms, i.e. atom types. At the simplest level, the connectivity of an atom is enough to uniquely identify its specific type.
Some methods to use this information to uniquely assign types to atomic centres involve deriving a unique integer from the local connectivity of the atom (e.g. the SATIS method REF XXX), but including information beyond second neighbours is rather impractical. Others use a typing 'language' to describe individual elements of the topology of atoms in molecules, and are flexible enough to be able to describe complex situations in a more satisfactory way (e.g. that employed in Vega ref XXX). Aten uses the latter style and provides a clear, powerful, and chemically-intuitive way of describing atom types in, most importantly, a readable and easily comprehended style.
Type descriptions are used primarily for assigning forcefield types, but also make for an extremely useful way to select specific atoms as well.
![]() | See also: |
|---|---|
|
Type descriptions in Aten use connectivity to other atoms as a basis, extending easily to rings (and the constituent atoms), lists of allowable elements in certain connections, atom hybridicities, and local atom geometries. Descriptions can be nested to arbitrary depth since the algorithm is recursive, and may be re-used in other atom's type descriptions to simplify their identification. Time to jump straight in with some examples. Note that these examples only serve to illustrate the concepts of describing chemical environment at different levels. They may not provide the most elegant descriptions to the problem at hand, don't take advantage of reusing types, and certainly aren't the only ways of writing the descriptions. They're just plain 'ol examples of the language!
Consider a water molecule. If you were describing it in terms of its structure to someone who understands the concept of atoms and bonds, but has no idea what the water molecule looks like, you might say:
A water molecule contains an oxygen that is connected two hydrogen atoms by single bonds
...or even...
It's an oxygen atom with two hydrogens on it
Given this degree-level knowledge, to describe the individual oxygen and hydrogen atoms in the grand scheme of the water molecule exactly, you might say:
A 'water oxygen' is an oxygen atom that is connected to two hydrogen atoms ''via'' single bonds
...and...
A 'water hydrogen' is a hydrogen that is connected ''via'' a single bond to an oxygen atom that itself is connected by a single bond to another (different) hydrogen atom
The extra information regarding the second hydrogen is necessary because otherwise we could apply the description of the 'water hydrogen' to the hydrogen in any alcohol group as well. Similarly, we might mistake the oxygen in the hydroxonium ion (H3O+) as being a 'water oxygen', when in fact it is quite different. In this case, we could extend the description to:
A 'water oxygen' is an oxygen atom that is connected to two hydrogen atoms ''via'' single bonds, and nothing else
An atom description in Aten is a string of comma-separated commands that describe this kind of information. So, to tell the program how to recognise a water oxygen and a water hydrogen, we could use the following type descriptions (written in the proper forcefield input style for the types block:
1 OW O "nbonds=2,-H,-H" # Water oxygen 2 HW H "-O(nbonds=2,-H,-H)" # Water hydrogen
Aten now recognises that a water oxygen (OW) is 'an oxygen atom that has exactly two bonds AND is bound to a hydrogen AND is bound to another hydrogen'. Similarly, a water hydrogen (HW) is 'a hydrogen bound to an oxygen atom that; has two bonds to it, AND is bound to a hydrogen, AND is bound to another hydrogen'. The dash '-' is short-hand for saying 'is bound to', while the bracketed part after '-O' in the water hydrogen description describes the required local environment of the attached oxygen. Using brackets to describe more fully the attached atoms is a crucial part of atom typing, and may be used to arbitrary depth (so, for example, we could add a bracketed description to the hydrogen atoms as well, if there was anything left to describe). If necessary, descriptions can be written that uniquely describe every single atom in a complex molecule by specifying completely all other connections within the molecule. This should not be needed for normal use, however, and short descriptions of atom environment up to first or second neighbours will usually suffice.
Assuming that the OH group in the carboxylic acid functionalisation will have different forcefield parameters to the primary alcohol at the other end of the molecule, here we must describe the first and second neighbours of the oxygen atoms to differentiate them.
To begin, we can describe the carbon atoms as either two or three different types -- either methylene/carboxylic acid, or carboxylic acid/adjacent to a carboxylic acid/adjacent to alcohol. For both, we only need describe the first neighbours of the atoms. For the first:
3 C(H2) C "nbonds=4,-H,-H,-C" # Methylene Carbon 4 C_cbx C "nbonds=3,-O(bond=double),-O,-C" # Carboxylic Acid C
Note the ordering of the oxygen connections for the carboxylic acid carbon, where the most qualified carbon is listed first. This is to stop the doubly-bound oxygen being used to match '-O', subsequently preventing a successful match. This is a general lesson - bound atoms with the most descriptive terms should appear at the beginning of the type description (as it is read left-to-right) and those with the least left until the end.
Where all three carbons need to be identified separately, we may write:
5 C(OH) C "nbonds=4,-H,-H,-C,-O" # CH2 adjacent to OH 6 C(COOH) C "nbonds=4,-H,-H,-C,-C" # CH2 adjacent to COOH 7 C_cbx C "nbonds=3,-O(bond=double),-O,-C" # Carboxylic Acid C
Let us now assume that the hydrogens within the alcohol and carboxylic acid groups must also be seen as different types. In this case, the second neighbours of the atoms must be considered:
8 HO H "-O(-C(-H,-H))" # Alcoholic H 9 H_cbx H "-O(-C(-O(bond=double)))" # Carboxylic acid H
The assignment is thus based entirely on the nature of the carbon atom to which the OH group is bound since this is the next available source of connectivity information. The determination of the three different oxygen atoms is similar:
10 OH O "-H,-C(-H,-H)" # Alcoholic O 11 O_cbx O "-C(-O(-H))" # Carboxylic acid =O 12 OH_cbx O "-H,-C(-O(bond=double))" # Carboxylic acid O(H)
Of course, we could just have specified 'nbonds=1' for the doubly-bound oxygen of the carboxylic acid group, but that wouldn't be very instructive, would it?
At last, a proper problem - an asymmetric substituted pyridine. Lets assume that we need to distinguish between every non-hydrogen atom - we'll skip describing the hydrogen atoms for now, but note that this is most easily achieved by specifying directly the atomtype that the H is bound to (see later on). Let's start with the pyridine nitrogen. We basically need to say that its in a 6-membered aromatic ring:
13 N_py N "ring(size=6,aromatic)" # Pyridine N
TODO
Many subtleties related to the form of type descriptions is perhaps evident from the examples given above. Then again, perhaps not! It is useful to think of type descriptions as having many different 'depths', loosely corresponding to the number of bonds followed away from a central atom (the target atom, or the one currently being tested against the type description). The target atom of the type description is the 'root' of the description since all connections are defined relative to this atom. A type description requiring specific connections to this target atom is using the target atom's bonds in order to identify it - atoms to a depth of 1 bond are being used to describe the atom. If these bound atoms are in turn described by their bound neighbours then atoms to a depth of 2 bonds are being used.
For example:
Table 8.2. NETA keyword '~X' examples
| Example Description | Effective Depth |
|---|---|
| nbonds=4,tetrahedral | Zero - contains specifications relevant to the root atom only |
| nbonds=4.tetrahedral,-H,-C | 1 - root commands and first bound neighbours |
| nbonds=4,tetrahedral,-H,-C(-H(n=3)) | 2 - root commands, first and second bound neighbours |
Any depth of description can be handled by Aten, becoming as complex as is necessary to uniquely identify the target atom.
In a forcefield with many defined types, more than one type may match an atom in a molecule. In order to best assign types to atoms, Aten scores each type description according to the number of terms defined within it, one point for each term satisfied. Once a matching type for an atom is located in the forcefield it is assigned to that atom, but the search for a better-scoring type continues. If a match with a higher score is found it replaces the previously-assigned type. If a match with the same score is found, the previous type is not replaced.
When a type description is tested for a given atom, it accumulates points for each term in the description that is satisfied by the environment of the atom. As soon as a term is found that is not satisfied, however, the score is reset to -1 and the match will fail. All terms in a type description must be satisfied in order for the type to be assigned to an atom.
A type description containing no terms has a maximum score of 1 (coming from a match of the element type). Hence:
99 Cgen C "" # Generic carbon
matches any carbon in any system, but will be replaced fairly easily by other types since it has such a low score.
For a type in which all terms are matched successfully, one point is scored for each individual term. All of the following types have a potential maximum score of 3 (don't forget, one point comes from matching the element):
100 C1 C "nbonds=2,linear" # Carbon A 101 C2 C "-C,-C" # Carbon B 102 C3 C "-C(n=2)" # Carbon C 102 C4 C "=C" # Carbon D
Moreover, they all potentially match the same atom (for example the central carbon in 1,2-propadiene). Since they have the same score, the first type C1 will match and persist over the other three, since only types with higher (not equivalent) scores can replace it.
Once a complex NETA definition has been made for a given atom type, it is often useful to be able to reference this type in order to save repeating the same description for a closely-bound atom. The ampersand symbol allows you to do this, and specifies an integer type id to match rather than an element. As an example, consider the following definitions for trifluoroethanol from the OPLS-AA forcefield where the environment for each atom is described in full for each type:
160 CT C "-H,-H,-O(-H),-C(-F(n=3))" "CH2 in trifluoroethanol" 161 CT C "-F(n=3),-C(nh=2,-O(-H))" "CF3 in trifluoroethanol" 162 OH O "-H,-C(nh=2,-C(-F(n=3)))" "OH in trifluoroethanol" 163 HO H "-O(-C(nh=2,-C(-F(n=3))))" "HO in trifluoroethanol" 164 F F "-C(-F(n=3),-C(nh=2,-O(-H)))" "F in trifluoroethanol" 165 HC H "-C(nh=2,-O(-H),-C(-F(n=3)))" "H in trifluoroethanol"
For each atom type, the whole of the trifluoroethanol molecule is described, but each type tends to share a common chunk of NETA definitions with the other types. As an alternative, then, we can define one or two of the involved types explicitly as above, and then specify the rest of the types relative to this one:
160 CT C "-H,-H,-O(-H),-C(-F(n=3))" "CH2 in trifluoroethanol" 161 CT C "-&160" "CF3 in trifluoroethanol" 162 OH O "-&160" "OH in trifluoroethanol" 163 HO H "-O(-&160)" "HO in trifluoroethanol" 164 F F "-C(-&160)" "F in trifluoroethanol" 165 HC H "-&160" "H in trifluoroethanol"
Much neater! Or should that be 'not much NETA'? Hmmm. Anyway, reusing types in this way is a powerful way to reduce the complexity of type descriptions required for a given molecule or fragment. Typically it is advisable to pick an atom that is fairly central to the molecule and bears a lot of connections, and provide an unambiguous type description.
This section lists all the available commands that may make up a type description. Many keywords only make sense within the bracketed parts of keywords that expand the depth of the description. For instance, it is meaningless to specify the connection type with the 'bond' keyword in the root of a typing command since no connections are relevant at this point.
Specifies that a connection to 'X' must exist, but makes no demand of the type (bond order) of the connection. 'X' may be either an element symbol, an id for another type specifier, or a list containing one or both of these to allow more flexible specifications. Specifying an 'unknown' connection with ~X is often useful in, for example, aromatic rings or conjugated systems where the connection might be either a double or single bond.
For example:
Table 8.3. NETA keyword '~X' examples
| Command | Meaning |
|---|---|
| ~C | Any bond to a carbon atom |
| ~&101 | Any bond to an atom which matches type ID 101 (see reusing rypes) |
| ~[N,S,P] | Any connection to either nitrogen, sulfur, or phosphorous |
| !=O | Explicitly states that there should not be a double bond to an oxygen atom |
Specifies that a single bond to 'X' must exist. 'X' may be either an element symbol, an id for another type specifier, or a list containing one or both of these to allow more flexible specifications. If used inside the bracketed part of a ring description this only indicates that the atom/type should be present within the cycle - the connection to the target atom is unimportant. If used in a chain keyword the connection type is honoured.
For example:
Table 8.4. NETA keyword '-X' examples
| Command | Meaning |
|---|---|
| -H | A single bond to a hydrogen atom |
| -&120 | A single bond to an atom which matches type ID 120 (see reusing types) |
| -[C,N] | A single bond to either a carbon or a nitrogen |
| -[F,Cl,Br,I,At] | A single bond to any halogen atom |
| -[&10,&11,&18,-Kr] | A single bond to an atom with type ID 10, 11, or 18, or a krypton atom |
Specifies that a double bond to 'X' must exist. Equivalent to writing '~X(bond=double)'. 'X' may be either an element symbol, an id for another type specifier, or a list containing one or both of these to allow more flexible specifications. If used inside the bracketed part of a ring description this only indicates that the atom/type should be present within the cycle - the connection to the target atom is unimportant. If used in a chain keyword the connection type is honoured.
For example:
Table 8.5. NETA keyword '=X' examples
| Command | Meaning |
|---|---|
| =O | A double bond to an oxygen atom |
| =&4 | A double bond to an atom which matches type ID 4 (see reusing types) |
Syntax:
bond=type
Defines the specific type of the connection (see Bond Types) required for a bound atom. The keyword should be used inside bracketed parts of bound atom descriptions. It is important to note that the 'bond' keyword should only be used in conjunction with the '~X' (any bond to) specifier, since the specific connection demanded by the '-X' and '=X' specifiers will override any 'bond' declarations.
For example:
Table 8.6. NETA keyword 'bond' examples
| Command | Meaning |
|---|---|
| ~O(bond=double) | A double bond to an oxygen atom (equivalent to '=O') |
| ~&55(bond=triple) | A triple bond to an atom which matches type ID 55 (see reusing types) |
| ~C(bond=single) | A single bond to a carbon atom (a very explicit way of writing simply '-C') |
Syntax:
chain( neta )
The 'chain' command provides an easy was of specifying a linear sequence of atoms from the current atom forward. Within the bracketed part, a sequence of connections are listed in the order in which they are to appear. Atoms in the chain are specified in the same way as other connections (e.g. '-C(nbonds=2)') but should not be separated by commas. The repeat keyword n may also be specified at some point in the bracketed part to define that more than one of the defined chains is required. Note that, if all atoms specif ied for the chain are matched, but the actual chain in the model is longer, a positive match will be returned. Thus, it is usually a good idea to define the last atom in the chain more explicitly to prevent false matches.
For example:
Table 8.7. NETA keyword 'chain' examples
| Command | Meaning |
|---|---|
| chain(-C-C-C-C) | Specifies a (minimum) four-carbon chain of any degree of saturation |
| chain(-C(nh=2)-C(nh=2)-C(nh=2)-C(nh=3)) | Explicity specifies a butyl chain |
Syntax:
n=nrepeat
The 'n' keyword, when placed in the bracketed parts of bound atom, ring, and chain descriptions requires that they are matched a number of times rather than just once.
For example:
Table 8.8. NETA keyword 'n' examples
| Command | Meaning |
|---|---|
| -C(n=4,-H(n=3)) | Describes the central carbon in neopentane (2,2-dimethylpropane) which is bound to four methyl groups |
| ring(size=4,n=3) | Specifies that the target atom should be present in three unique four-membered rings |
| chain(-C-C-C~N(bond=triple),n=4) | Requests that the atom has four cyanoethyl groups hanging off it |
Syntax:
nbonds=n
Specifies the exact number of connections that an atom must possess.
For example:
Table 8.9. NETA keyword 'nbonds' examples
| Command | Meaning |
|---|---|
| nbonds=2 | Demand that the atom has exactly two connections |
| ~N(nbonds=1) | Describes a nitrogen with only one bond, perhaps an sp1 nitrogen with a triple bond |
Syntax:
nh=m
The 'nh' keyword is shorthand for explicitly specifying the number of attached hydrogens to the target atom or a bound atom. It is equivalent to '-H(n=m)'.
For example:
Table 8.10. NETA keyword 'nh' examples
| Command | Meaning |
|---|---|
| -C(nh=2) | Atom is bound to a methylene carbon with exactly two hydrogens on it |
Indicates either that an atom must be present in an aromatic environment (e.g. in an aromatic ring), or that a ring should itself be aromatic.
For example:
Table 8.11. NETA keyword 'aromatic' examples
| Command | Meaning |
|---|---|
| ~N(aromatic) | Specifies a nitrogen connected by any bond which is present in an aromatic environment |
| -C(ring(aromatic)) | Single bond to a carbon atom which is in an aromatic ring |
Indicates that the atom must not be present in any rings.
For example:
Table 8.12. NETA keyword 'noring' examples
| Command | Meaning |
|---|---|
| -O(noring) | Single bond to an oxygen which is not present in a ring |
Specifies that the atom target should be planar, which is to say no bond from the atom may be more than 15° out of the plane formed by the first two bonds to the atom)
For example:
Table 8.13. NETA keyword 'planar' examples
| Command | Meaning |
|---|---|
| -C(planar) | Single bond to a carbon atom which is roughly planar |
Syntax:
ring ( neta )
Denotes that the target atom (if specified in the root of the description) or a bound atom (if used inside the associated bracketed part) should be present in a ring structure of some kind. The 'ring' keyword alone simply demands that the atom is present inside a ring of some size, but may take an optional bracketed part describing more fully the number of atoms in the ring, and the individual nature of each of these atoms. Within the bracketed part, bound atoms may be specified as usual in the contained neta, but the connection type is irrelevant as it is only the presence of those particular atoms within the ring that is considered important.
Bound atom descriptions given inside the bracketed part should again be listed in order of decreasing complexity. Multiple rings may be specified with separate 'ring' keywords, allowing the location of fused ring atoms.
For example:
Table 8.14. NETA keyword 'ring' examples
| Command | Meaning |
|---|---|
| ring(size=6,~C(n=6),aromatic) | Benzene-style carbon |
| -C(ring(size=6,-C(n=6,nh=2))) | Carbon atom in cyclohexane |
Syntax:
size=n
Only relevant in the bracketed part of a ring keyword, requests the exact number of atoms (n) comprising the cycle. Note that this may be used independently of the implicit size suggested by the number of atom descriptions supplied, or in conjunction with a partial list of atoms.
For example:
These keywords requests that the target atom (if specified in the root of the type description) or a bound atom (if used inside the associated bracketed part) should possess a certain physical geometry in terms of its connections. The number of bonds to the target atom and the angles between them are used to determine the geometry.
Note that, for some geometry types, there are several ways for the atom to have this geometry. Also note that, since the geometry is determined by consideration of ideal angles within some tolerance, an atom may not possess no detectable geometry.
Valid geometry keywords and the criteria that are used to identify them are as follows:
For example:
Table 8.16. NETA geometry keywords
| Command | Bonds Required | Description |
|---|---|---|
| unbound | 0 | An unbound atom. Only makes sense when used in the root of a type description. |
| onebond | 1 | The atom has one bond. |
| linear | 2 | Two bonds to the atom, making an angle > 170°. |
| tshape | 3 | Three bonds to the atom, with two bonds making an angle > 170°. |
| trigonal | 3 | Trigonal planar arrangement of three bonds, with the largest of the three angles between 115 and 125°. |
| tetrahedral | 2 | Two bonds to the atom, making an angle between 100 and 115°. |
| tetrahedral | 3 | Three bonds to the atom, with the largest of the angles between 100 and 115°. |
| tetrahedral | 4 | Four bonds to the atom, with the average of the angles laying between 100 and 115°. |
| sqplanar | 4 | Four bonds to the atom, with the average of the angles laying between 115 and 125°. |
| tbp | 5 | Five bonds to the atom are assumed to be trigonal bipyramidal geometry. |
| octahedral | 6 | Six bonds to the atom are assumed to be octahedral geometry. |
Table 8.17. VDW Functional Forms
| Name | Keyword | NParams (Req) | Form | Param | Default | Combination Rule |
|---|---|---|---|---|---|---|
| Lennard-Jones 12-6 | lj | 2 (2) |
|
| Geometric | |
|
| Arithmetic | |||||
| Lennard-Jones 12-6 (Geometric rules) | ljgeom | 2 (2) |
|
| Geometric | |
|
| Geometric | |||||
| Inverse Power | inversepower | 3 (2) |
|
| Geometric | |
|
| Arithmetic | |||||
|
| 1.0 | Arithmetic | ||||
| Lennard-Jones AB | ljab | 2 |
|
| Geometric | |
|
| Geometric | |||||
| UFF Lennard-Jones 12-6 | ufflj | 3 (2) |
|
| Geometric | |
|
| Geometric | |||||
|
| 2.0 | Arithmetic | ||||
| Buckingham exp6 | buck | 3 (3) |
|
| Geometric | |
|
| Geometric | |||||
|
| Geometric | |||||
| Morse | morse | 3 (3) |
|
| Geometric | |
|
| Arithmetic | |||||
|
| Geometric |
Table 8.18. Bond Functional Forms
| Name | Keyword | NParams (Req) | Form | Param | Default |
|---|---|---|---|---|---|
| Ignore | ignore | 0 (0) | |||
| Constraint | constraint | 2 (2) |
|
| |
|
| |||||
| Harmonic | harmonic | 2 (2) |
|
| |
|
| |||||
| Morse | morse | 3 (3) |
|
| |
|
| |||||
|
|
Table 8.19. Angle Functional Forms
| Name | Keyword | NParams (Req) | Form | Param | Default |
|---|---|---|---|---|---|
| Ignore | ignore | 0 (0) | |||
| Harmonic | harmonic | 2 (2) |
|
| |
|
| |||||
| Cosine | cos | 4 (3) |
|
| |
|
| |||||
|
| |||||
|
| 1.0 | ||||
| Double Cosine | cos2 | 4 (4) |
|
| |
|
| |||||
|
| |||||
|
| |||||
| Harmonic Cosine | harmcos | 2 (2) |
|
| |
|
| |||||
| Constraint (1-3 Bond) | bondconstraint | 2 (2) |
|
| |
|
|
Table 8.20. Torsion Functional Forms
| Name | Keyword | NParams (Req) | Form | Param | Default |
|---|---|---|---|---|---|
| Cosine | cos | 4 (3) |
|
| |
|
| |||||
|
| |||||
|
| 1.0 | ||||
| Triple Cosine | cos3 | 3 (3) |
|
| |
|
| |||||
|
| |||||
| Quadruple Cosine | cos4 | 4 (4) |
|
| |
|
| |||||
|
| |||||
|
| |||||
| Triple Cosine + Constant | cos3c | 4 (4) |
|
| |
|
| |||||
|
| |||||
|
| |||||
| Cosine Product | coscos | 3 (3) |
|
| |
|
| |||||
|
| |||||
| Dreiding Cosine | dreiding | 3 (3) |
|
| |
|
| |||||
|
|
Some things in Aten are implemented from existing routines and algorithms. Some have been written from scratch, even when existing algorithms were available, either as an attempt to improve those existing algorithms or simply to learn more by working out how best to go about solving a given problem. A selection of algorithms are detailed in the following pages, grouped into those that were re-used from the literature, and those that were written specifically for Aten.
It should be pointed out that, in the eventuality that somebody notices that one of Aten's 'custom' algorithms is actually a reproduction of an existing method, then fair enough - send me the reference and I'll be happy to move it to the 'literature' section.
NETA stands for the Nested English Typing Algorithm - a fairly meaningless acronym, all said and done, but with the advantage that it is 'Aten' backwards. NETA is an attempt to provide a descriptive atom typing language that is:
Easily readable
Easily written from a small subset of keywords
Recursive and able to describe complex molecules
It's closest relative that I'm aware of in the literature is the ATDL as implemented in Vega-ZZ,[[1] but was (genuinely) conceived without prior knowledge of that system. NETA tries to keep the language simple enough that it can almost be read aloud an make sense, given one or two special syntactic tokens, rather than needlessly use numerical codes and spurious symbols to signify certain quantities or create an ultra-compact language. The former destroys readability and the latter promotes convolution, neither of which help when trying to interpret old rules or write new ones. So, for the most part NETA is keyword-based, with a limited number of fairly 'natural' symbols employed to denote common terms.
![]() | See Also: |
|---|---|
|
Typing begins from a provided set of atoms and bonds (i.e. the chemical graph). The connectivity between atoms must be 'set' prior to typing, either by automatic calculation of bonds based on distance criteria, manually adding them by hand, or reading them from the input model file. The typing algorithm itself makes no additions or changes to the connectivity of the input structure.
NETA requires a knowledge of species/molecule types in the model is required. For single molecule systems there is 1 distinct molecule (species) and 1 occurrence of it. For condensed phases, e.g. liquids, there are 1 or more species each with many copies of the molecule. In the interests of efficiency for the following routines, Aten attempts to generate a valid pattern description of the system if one is not present already. This essentially picks out the individual species and the number of molecules of each, and permits the typing routines to consider only one molecule of each species when determining atom types etc. The assumption here is that, since all molecules in a given species will have the same chemical graph, atom types can be worked out for a single molecule and then duplicated on all of the others.
Following detection of a suitable pattern description, several tasks are then performed:
Cycle Detection
Firstly, any cyclic structures within a single molecule are detected up to a maximum (adjustable) ring size. This is achieved from a series of simple recursive searches beginning from each atom with more than one bond. A sequence of 'walks' along bonds are made in order to form a path of some specified length (i.e. ring size). If the final atom in this path shares a bond with the starting atom, a cycle has been found. If not, the final atom is removed and replaced with another. If there are no more atoms to try in this final position, the preceeding atom in the path is removed and replaced with another, and so on. Each unique ring (its size and pointers to the sequence of constituent atoms) is stored in the pattern.
Assignment of Atom Environmenti
From the list of bound neighbours, each atom is assigned a simple hybridicity based on the character of the bonds it is involved in, mainly used for the determination of aromatic cycles in the next step.
Ring Types
Once atom hybridicities have been assigned, ring types can be determined. Rings are classed as either aliphatic, aromatic, or non-aromatic (i.e. a mix of resonant and aliphatic bonds that is not itself aromatic.
Now, working only with the representative molecule of each pattern, associated (or current) forcefield(s) are searched for types that match the contained atoms. Each NETA description whose character element is the same as a given atom is tested, and a score is obtained. If this score is non-zero and positive then the atomtype is a match and is assigned to the atom if it has no previous type, or if the score is higher than the previous one. See atom type scoring for more information.
[1] Pedretti, A.; Villa, L.; Vistoli, G. "Theoretical Chemistry Accounts", 109, 229-232 (2003).
Augmentation of bonds, as far as Aten is concerned, means to take a collection of atoms with 'basic' connectivity (i.e. all single bonds, as per the result of rebonding) and assign multiple bonds where necessary. The method is based loosely on previously described algorithms.[1]
The basis of the method involves modifying the bond order of a particular connection to best satisfy the bonding requirements of the two involved atoms, for example making sure all carbon atoms possess an optimal total bond order of 4. However, many atoms (in particular S and P) happily exist with more than one total bond order (e.g. P) - the methodology borrowed from [1] solves this problem by scoring the total bond order for each particular element ranging from zero (meaning 'natural' or 'no penalty') to some positive number. The higher the positive number, the more 'unhappy' the element is with this number of bonds. For example, hydrogen atoms score 0 for a total bond order of 1, a small positive number (2) for no bonds (hydrogen ion) and a very large positive value (here, 32) for any other bond order. In this way we penalise the total bond orders that an atom does not naturally take on, and always tend towards the lowest score (i.e. the natural total bond order) wherever possible. When modifying the bond order of a particular connection, the total bond order scores of both atoms are calculated once for the current connection and again for the potential new bond order of the connection. If the new score is lower, the change of bond order is accepted.
Pattern Detection
As with many other routines in Aten, a suitable pattern description is first detected for the system in order to isolate individual molecular species and make the algorithm as efficient as possible.
Augmentation of Terminal Bonds
Bonds that involve a heavy (i.e. non-hydrogen) atom connected to no other atoms (e.g. C=O in a ketone) are treated before all others. The bond order is modified such that the total bond order score for both atoms is as low as possible.
Augmentation of Other Bonds
Following optimisation of terminal bonds, all other bonds are modified using exactly the same procedure.
Second Stage Augmentation
The above two steps are enough to correctly determine multiple bonds in a chemically-correct molecule, provided no cyclic moities are present in the system. The second stage is designed to correct improper augmentations within cycles, or shift existing augmentations around cycles such that other (missing) multiple bonds may be created.
For each existing multiple bond in each cyclic structure in each pattern's molecule, a simple re-augmentation of the constituent bonds is first attempted in order to try and lower the total bond order score for the whole ring (i.e. the sum of the individual bond order scores of every atom present in the cycle). Then, each bond in the ring is considered in sequence. If the bond is a double bond, then we attempt to convert this into a single bond and make the two adjacent bonds in the ring double bonds in an attempt to 'aromaticise' the ring. The total bond order score is checked and, if lower than the previous score, the change is accepted. If not, the change is reversed and the next bond is considered. By performing these secondary adjustments the double-bond pattern of many complex (poly)aromatics can be correctly (and fully automatically) detected.
[1] "Automatic atom type and bond type perception in molecular mechanical calculations", J. Wang, W. Wang, P. A. Kollman, and D. A. Case, ''Journal of Molecular Graphics and Modelling'', 25 (2), 247-260 (2006).
The most common means of determining connectivity between a collection of atoms is based on simple check of the actual distance between two atoms and the sum of their assigned radii:
{img align="center" src=show_image.php?id=116}The two ''sigma''s represent the radii of atoms ''i'' and ''j'' which have coordinates ''xi'', ''yi'', ''zi'' and ''xj'', ''yj'', ''zj''. The parameter ''alpha'' is an adjustable tolerance value to enable fine-tuning, and using Aten's set of built-in radii[[1] usually lays between 1.0 and 2.0. For molecules or periodic systems of modest size the method can be used as is, but for large systems of many atoms the use of a double loop over atoms results in a very slow algorithm.
Aten overcomes this slowdown for larger systems by partitioning the system up into a series of overlapping ''cuboids''. For a system of N particles in a periodic box (or an isolated system with an orthorhombic pseudo-box determined by the extreme positions of atoms), the volume is partitioned into a number of subvolumes of some minimum size in each direction. The minimum size of any one of the subvolume's dimensions is chosen relative to the maximum bond length possible given the largest elemental radius and the current bond tolerance ''alpha''. A single loop over atoms is then performed to associate them to these subvolumes. Each atom belongs to at least one cuboid, determined by its absolute position in the system, and commonly belongs to one other cuboid, determined by adding half of the cuboids dimensions on to the atoms position. While a little counterintuitive, potentially adding atoms to a neighbouring cuboid along this diagonal vector allows the final calculation of distances between pairs of atoms to consider only eight 'neighbouring' (more correctly 'overlapping') subvolumes rather than the 26 needed if each atom belongs exclusively to only one cuboid. For atoms that exist in subvolumes along the edges of the whole volume, these are also added to the subvolume(s) on the opposite side(s) to account for minimum image effects in periodic systems.
Once the effort has been made to assign atoms to cuboids, the final loops to calculate distances runs over a much reduced subset of atom pairs owing to the partitioning. A loop over cuboids is performed, first considering all atom pairs within the same cuboid, and then extending this to consider distances between a particular atom of this central cuboid and its eight 'overlapping' neighbours.
There is some redundancy of atom pairs since the same pair may be considered twice when taking into account the overlapping cuboids. However, in the interests of facile book-keeping this is not checked for explicitly during the running of the algorithm.
[1] "Covalent radii revisited", B. Cordero, V. Gómez, A. E. Platero-Prats, M. Revés, J. Echeverría, E. Cremades, F. Barragán and S. Alvarez, Dalton Trans., (2008) (DOI: ihttp://dx.doi.org/10.1039/b801115j)
The following table lists common literature methods implemented in Aten, noting any implementation differences etc.
Table 9.1. Literature Methods
| Name | Description / Notes |
|---|---|
| Ewald Sum | Electrostatic energy and forces for periodic systems. Implemented as described in: XXX |
| Conjugate Gradient | |
| Marching Cubes | Isosurface generation from regular gridded data. No pathological cases are accounted for. See implementation details in: XXX |
| Steepest Descent |
Table of Contents
The following tables list sets of keywords relevant to various data (e.g. bond types), to be used when setting or checking such values.
A list of recognised types of basis shell recognised byt he basisshell type.
Table 10.1. Basis shell type keywords
| Value | Description | nCartesians |
|---|---|---|
| S | Standard S-shell | 1 |
| L | Combined S/P shell | 4 |
| P | Standard P-shell | 3 |
| D | Standard D-shell | 5 |
| F | Standard F-shell | 7 |
A bond between atoms is of one of the following types:
Table 10.2. Bond type keywords
| Value | Description |
|---|---|
| any | Special case, never assigned to an actual bond but used in bond-matching functions |
| single | A single bond |
| double | A double bond |
| triple | A triple bond |
| aromatic | An aromatic bond, assigned automatically by the atom typing routines |
Possible intramolecular bound interaction types are:
Table 10.3. Bound type keywords
| Value | Description |
|---|---|
| angle | A normal angle interaction between three bound atoms |
| bond | A normal bond interaction between two bound atoms |
| improper | An improper torsion between four (not necessarily bound) atoms |
| torsion | A proper torsion interaction between four bound atoms |
| ub | A Urey-Bradley 1,3 term between two atoms at the extreme of a related angle |
A model's unit cell is, at any given time, one of the following:
Table 10.4. Cell type keywords
| Value | Description |
|---|---|
| none | The model has no unit cell (i.e. it is non-periodic) |
| cubic | The model's unit cell is cubic, with A=B=C and alpha=beta=gamma=90 |
| orthorhombic | The model's unit cell is an orthorhombus, with any cell lengths and alpha=beta=gamma=90 |
| parallelepiped | The model's unit cell is monoclinic or triclinic, with any cell lengths and angles |
![]() | See Also: |
|---|---|
|
Available atomic colouring schemes are:
Table 10.5. Colour scheme keywords
| Value | Description |
|---|---|
| charge | Atoms and connected bonds are coloured according to their charge |
| element | Atoms and connected bonds are coloured according to their element |
| force | Atoms and connected bonds are coloured according to the force acting on the atom |
| velocity | Atoms and connected bonds are coloured according to the velocities of the atoms |
| custom | Atoms and connected bonds are coloured according to the custom colours set on individual atoms |
![]() | See Also: |
|---|---|
|
Combination rule equations as used when combining similar Lennard Jones parameters.
Table 10.6. Combination Rules
| Keyword | Description |
|---|---|
| arithmetic | The arithmetic mean of two values : a = 0.5*(b*c) |
| geometric | The geometric mean of two values : a = sqrt(b*c) |
| custom1 | Custom combination rule |
| custom2 | Custom combination rule |
| custom3 | Custom combination rule |
Available drawing styles for individual atoms are:
Table 10.7. Draw style keywords
| Value | Description |
|---|---|
| stick | Atoms and connected bonds are drawn using simple lines |
| tube | Atoms and connected bonds are drawn using 'capped' cylinders |
| sphere | Atoms and connected bonds are drawn using spheres and cylinders, with all atoms the same size |
| scaled | Atoms and connected bonds are drawn using spheres and cylinders, with all atoms sized according to their atomic radius set in the preferences |
A list of energy units supported by Aten
Table 10.8. Energy unit keywords
| Value | Description | Joule Equivalent |
|---|---|---|
| j | Joules per mole (J/mol) | 1.0 |
| kj | KiloJoules per mole (kJ/mol) | 1000.0 |
| cal | Calories per mole (cal/mol) | 4.184 |
| kcal | KiloCalories per mole (kcal/mol) | 4184.0 |
| K | Kelvin (K) | 1.0 / (503.2166 / 4184.0) |
| ev | Electronvolts per mole (eV/mol) | 96485.14925 |
| ha | Hartrees per mole (Ha/mol) | 2625494.616 |
Available glyph types (drawing objects) are:
Table 10.9. Glyph type keywords
| Value | Description |
|---|---|
| arrow | Simple arrow |
| cube | A cuboid |
| ellipsoid | An ellipsoid, oriented by face and edge vectors |
| ellipsoidxyz | An ellipsoid, oriented by an explicit set of provided axes |
| line | A line between two points |
| quad | A quad (made up of two triangles) |
| sphere | A sphere or spheroid |
| svector | A sense vector |
| tetrahedron | Regular tetrahedron |
| text | Text rendered at 2D screen coordinates |
| text3d | Text rendered at 3D model coordinates |
| triangle | Regular triangle |
| tubearrow | A fully 3D arrow |
| vector | An arrow centred on a point and pointing along a specified local vector |
Available drawing styles for surface/grid data:
Table 10.10. Grid style keywords
| Value | Description |
|---|---|
| grid | All data points are drawn as simple dots at their coordinate positions (the cutoff value is ignored) |
| points | Data points above the cutoff are drawn as simple dots at their coordinate positions |
| triangles | A triangulated wireframe isosurface is drawn between points above the cutoff value |
| solid | A trangulated solid isosurface is drawn between points above the cutoff value |
Available grid types:
Table 10.11. Grid type keywords
| Value | Description |
|---|---|
| regularxy | Two-dimensional surface data on a regularly-spaced XY grid. The grid size must be specified on creation (with initgrid). |
| regularxyz | Three-dimensional volumetric data on a regularly spaced XYZ grid. The grid size must be specified on creation (with initgrid). |
| freexyz | Three-dimensional data not restricted to a regular grid. No grid size specification is necessary. |
Valid label types are as follows:
Table 10.12. Label type keywords
| Value | Description |
|---|---|
| charge | Atomic charge currently assigned to the atom |
| element | Element symbol of the atom |
| ffequiv | Forcefield equivalent name from the assigned forcefield atom type (or the forcefield atom type name if no equivalent applies) |
| id | Integer atom ID |
| type | Assigned forcefield atom type name (if any) |
![]() | See Also: |
|---|---|
|
Valid output types (or debug modes) are as follows:
Table 10.13. Output type keywords
| Value | Description |
|---|---|
| all | Enable output of all types listed in this table |
| calls | Print out entrances and exits to most subroutines to enable quick tracing of crash locations |
| commands | Trace execution of commands in command lists (e.g. filters) and print information on variable access paths |
| gl | Debug OpenGL calls and graphics capabilities as best as is possible |
| parse | Debug file-reading and argument parsing routines |
| typing | Print (lots of) information regarding setting and matching of atom type descriptions |
| verbose | Enable a little extra output (but not much) |
![]() | See Also: |
|---|---|
|
These options determine how general parsing of plain text files proceeds, as well as controlling delimited argument parsing.
Table 10.14. Parse option keywords
| Value | Description |
|---|---|
| usequotes | Phrases enclosed in quotes will be parsed as single arguments |
| skipblanks | Blank lines (or those containing comments) are automatically skipped |
| stripbrackets | Normal parentheses are automatically stripped from the input file |
| noescapes | Treat backslash as a normal character |
![]() | See Also: |
|---|---|
|
Integer return values for many read/write operations.
Table 10.15. Read/write return values
| Value | Description |
|---|---|
| 1 | Success - no errors encountered |
| 0 | The read/write operation failed before it was completed |
| -1 | End-of-file was encountered during read operation|| |
![]() | See Also: |
|---|---|
|
Allowable shapes of regions in the disordered Monte Carlo builder
In all cases the centre of the region is defined as the geometric centre of the region, rather than the lower left-hand corner.
Table 10.16. Region Shapes
| Keyword | Description |
|---|---|
| cell | The whole cell may be used by the model |
| cuboid | A cubic or orthorhombic region |
| spheroid | A spherical or ellipsoidal region |
| cylinder | A cylindrical region |
Any combination of the following 'bit' values may be summed into a single integer and given to the 'screenobjects' or 'offscreenobjects' preferences members to determine exactly what is drawn on and off screen (i.e. to bitmap images).
Table 10.17. View object keywords
| Value | Keyword | Description |
|---|---|---|
| 1 | atoms | Atoms and bonds in the model |
| 2 | cell | The unit cell of the model, if any |
| 4 | cellaxes | Cell axes at the corner of the unit cell (if displayed) |
| 8 | cellrepeat | Cell repeat units |
| 16 | forcearrows | Force arrows (defunct) |
| 32 | globe | Rotation globe |
| 64 | labels | Atom labels |
| 128 | measurements | Geometry measurements |
| 256 | regions | Disordered builder regions |
| 512 | surfaces | 3D and 2D grid-data surfaces |
![]() | See Also: |
|---|---|
|
Table 10.18. Map type keywords
| Value | Description |
|---|---|
| alpha | Convert based on the alpha part of the name only. Leading or trailing numbers and symbols are discarded. The alpha part is assumed to be an element symbol |
| auto | Attempts several of the other conversions of increasing complexity until a match is found |
| ff | Search through the names of atomtypes in currently-loaded forcefields, assigning elements based on matches found |
| firstalpha | Convert based on the first alpha part of the name only (i.e. until a non-alpha character is found). The alpha part is assumed to be an element symbol |
| name | The name is assumed to be an actual element name, and is converted to the relevant element number |
| numeric | Use the numeric part of the name as the element number |
| singlealpha | Convert based on the first alphabetic character encountered - useful only when single-character element symbols are likely to be found (e.g. for pure organic CHON systems) |
![]() | See Also: |
|---|---|
|
When in script/filter, encountering a NULL reference and using it really should result in an error
Reading of unformatted files (i.e. DL_POLY HISu) broken?
Warnings on startup: "Could not add child element to parent element..", related to SVGs.
Rebonding model also folds atoms, making --nobond irrelevant
Reading spacegroup info and packing from certain cifs with Pnmmm symmetry is incorrect (c.f. Mercury)
Atom list update is super-slow when changing selection in big systems
Make access through PatternBound to FFBound a bit easier - add accessor to FFBound data?
Add 'Rebond in Patterns' toolbar button
Make bond drawing same as chain drawing (i.e. can click-drag *or* click-move-click)
Script to add glyphs to represent H-bonds between pair of selected atoms
Update script to perform conformational searching on molecule (add GUI options)
Glyph Undo/Redo
Allow (somehow) rotation of fragments without drawing them *or* rotating main view
Test matrix-transform of models
Add on glyph selection methods (a la box select with the mouse)
Add options to FIELD import filter, allowing application of pattern to model.
Add more options to GAMESS-US inp filter: MD options
Storage of grid data in AKF format
Table of Contents
Version 1.1 (released 20th May 2009) will be the last version to contain the old-style Tcl-like scripting language. All following versions will use the new C-style syntax, and will be incompatible with filters/scripts from versions up to 1.1.
SVN ChangeLog follows:
Revision 911
Adjusted aten.dsc so its ripe for sedding.
Revision 910
Fix to commit script to ensure proper (global) revision renumbering.
Revision 909
Update debian build files.
Revision 815
Colourscale-based colouring of Grid data was not working properly (some flags were not set correctly) - fixed.
Density-type Grids are now rendered in the colourscale colours (if one is assigned).
Added 'gridvisible' command, and fixed 'getgrid' and 'grid' (variable creation) commands.
Revision 814
Minor (but important) change to DL_POLY model export filter.
Revision 793
Fixed formatting of spacegroup names.
Revision 792
Added 'nselected' to ModelAccessors.
Added 'normalise', 'selectioncog' and 'selectioncom' commands.
Added Model::selectionCom().
New bonding code was still missing some bonds at the edges of unit cells - fixed.
Revision 791
Fixed inhibition of atom trimming in cell replication.
Added more verbose output to 'replicatefold' and 'replicatetrim' commands.
Revision 790
Fixed badly written Atom::nextSelected() causing endless loops or crashes in some parts of the code.
Revision 789
Added '-n' switch to create new model (equivalent to -c "newmodel x").
Better axis handling in 'pdens' filter.
Revision 788
Removed Model::firstMarked() in favour of extending Model::firstSelected() with optional 'bool markonly' argument (also related function in Atom).
Added 'rotatecell' command to rotate cell and its contents about one of the Cartesian axes - final action as yet undecided.
Fixed bug in new bonding code.
Revision 787
New rebonding code - approx 100 times faster for large systems.
Added assignment operator=T to Vec3<T>.
Revision 786
Fixed bug in Model::resetCamera() which meant that 'setview' would result in the wrong camera y-position (inverted).
Revision 785
Renamed 'OnImage' properties in Prefs to OffScreen for clarity.
Added flag in Canvas to specify whether off-screen rendering is being performed (for image saving).
Grids now create a separate new display list when being rendered for an offscreen image (i.e.
in a new context).
Fixed bug with image saving from the GUI where grid data was not drawn (command-line usage was ok).
Revision 784
Fixed 'gridcolournegative' which cause a crash.
Added 'reorder' command and Model::reorderSelectedAtoms() to reorder (collapse) bound atoms so that they have consecutive IDs.
Save bitmap is now a little more informative.
Revision 783
Transform window now starts in sensible size.
Some unfinished updates to GUI in this revision.
-- AtomList now lists by pattern as a separate 'mode' (selection / shift actions not fully re-implemented).
-- CellTransform has widgets for cell rotation (but no attached functions).
Revision 782
Undo state in 'expand' command closed in wrong place - fixed.
Corrected orthographic view which was being drawn back to front.
Revision 781
Added 'singlealpha' zmapping type, which uses the first alpha character.
Removed explicit 'zmap ff' command from DL_POLY model filter.
Fixed small bugs in some commands that required element conversion and used the current zmapping style to convert names (it should have demanded the 'alpha' style).
Added missing undo state creation for some select commands.
Added 'deselecttype' command.
Revision 780
Adjusted tab order in Transform Window.
Changed copyright notice to include this year.
Revision 779
More improvements to selecting in Atomlist - undo/redo and select by pattern enabled.
Revision 778
Fixed small bug in Pattern::angleEnergy() which wrongly reported the lack of implemented terms for 1-3 constraint angles.
Small fixes to supplied example scripts.
Revision 777
Added 'mag' (magnitude) accessor to VectorAccess.
Revision 776
New command 'insertatom' which creates a new atom with the ID specified (moving atoms after it to higher IDs).
Revision 775
Transform commands 'matrixconvert' and 'matrixtransform' should have been taking minimum image coordinates when working out vectors from atom IDs - fixed.
Updated Model::selectPattern().
'select' and 'deselect' commands now accept pattern pointers as targets.
Potential crash when undoing atom deletion, related to atom / bond creation order - rewrote Model::selectionDelete() to be more efficient and fix issue.
Revision 774
Added new variable type 'vector' providing a 3-vector {x,y,z}.
Accessors added to provide retrieval/setting of quantities with vector variables where appropriate.
Added 'position', 'force', and 'velocity' accessors to AtomAccess.
Added 'cog' and 'com' accessors to PatternAccess.
Fixed CA_ATOMSTYLE which was using the wrong atom id (if one was provided).
Revision 773
The 'map' command now accepts unquoted mappings.
Adjusted definition of axes with atom IDs in 'matrixconvert' to accept a pair of zeroes for the z-axis, meaning that the cross-product of x and y axes will be used instead.
Fixed bug in 'getpattern' which was not using pattern IDs in the range 0->(N-1).
Tweaked the argument lists for Pattern::calculateCom/Cog() to allow for optional Model pointer.
Revision 772
Commands 'toend' and 'tostart' should have been 'movetoend' and 'movetostart' - fixed.
Revision 771
Some test code in surface rendering routines had been inadvertently committed - repaired in this revision.
Revision 770
Removed debug output from AtenTransform::on_ConvertRotateIntoButton_clicked().
Axis vectors were not normalised in Matrix Convert in Transform Window (fixed).
Fixed generation of rotation matrix in Matrix Convert in Transform window.
Added CA_AXISROTATE, CA_MATRIXTRANSFORM, and CA_MATRIXCONVERT commands.
Revision 769
Fixed crashes when applying atom style/label changes from the Selection menu.
Revision 768
First part of Atomlist retrofit - undo and shift-selection from the Atomlist Window are not yet re-implemented.
Revision 767
Added new ring typing commands - aromatic, aliphatic, nonaromatic.
Added preliminary detection of ring types.
Fixed 'acyclic' atom typing keyword (it was ignored).
Fixed critical bug in Save Model As which was not properly using the selected filename.
Revision 766
Overhauled file dialog usage for better uniformity - last directory now stored for all dialogs.
Positive / negative colour controls in Grids window were the wrong way around.
Rendering of grid data with an alpha component was broken - fixed.
Implemented forgotten functions to cut, copy, and paste grids from one model to another.
Revision 765
Fixed more odd actions of atom context menu.
Measure distances in selection did not work from the Measure Toolbar ('distances' command was ok).
Undo/redo was not set for Measure in Selection tools on the Measure Toolbar.
Text is now copyable from message box.
Revision 764
Fixed some odd actions of atom context menu.
Minor changes to layout of status bar.
Revision 763
Fixed deselection modifier for tree selection.
Better statusbar texts.
Revision 762
Fixed small memory leak in Canvas::endMode().
Improved statusbar usefulness.
Better modified selections - added optional parameter to atom selection functions in Model to request deselection instead (tree deselect [+ctrl] dysfunctional in this revision).
Revision 761
Added Prefs::zoomThrottle_ to manage speed of zooming (added CA_ZOOMTHROTTLE) and scaled zoom factor relative to camera distance.
Removed Model::orthoSize_ - transitions (i.e.
zoom distance) between orthographic and perspective projections now match correctly.
Revision 760
Added help messages to status bar for current mode (partial implementation).
Revision 759
Adjusted main() to search for HOMEPATH variable (Windows) if HOME (others) was not found.
Added call to app->exit() in AtenForm::closeEvent() to properly exit on Windows.
Revision 758
Added 'random' implicit variable into all VariableLists.
Fixed some comparisons in FFBoundAccessors::set().
Revision 757
Small fix to Windows build.
Fixed back face culling (now culling GL_FRONT instead of GL_BACK) and enabled by default to inmprove speed - fixes transparency rendering artefacts.
Converted Prefs::GlOption enum to use bitshifting.
Revision 756
Fixed twister in text-based progress indicator.
Significantly improved speed when deleting selections of atoms.
Mostly implemented new SpecialVariable structure - random number generator still inaccessible.
Revision 755
Finished set/get for FFBoundAccess.
Finalised loops of Models in command lists.
Revision 754
Added extra model management commands: CA_FIRSTMODEL, CA_LASTMODEL, and CA_CURRENTMODEL.
Fixes to Coulomb sum energies and forces.
Tweaked CA_AFTERCHAR to work properly when multiple occurrences of the same character were present in the source string (doh!).
Fixed interactive mode which would execute the cached command even if the command arguments were wrong.
Revision 753
Fixed '+=' (string concatenation) operator in CA_LETCHAR (and improved Dnchar::cat()).
Added string functions CA_STRIPCHARS, CA_AFTERCHAR, and CA_BEFORECHAR.
Minor adjustment to cif filter to strip spaces from HM spacegroup name.
Tweaked pdb filter to stop complaining (wrongly) that the HEADER record wasn't supplied.
Tweaked CA_FINALISEMODEL which wasn't saving the filename/path if a partner filter wasn't available.
Adjusted layout of fdf filter to correctly report the number of chemical species.
Setting an array value without an index now sets all array items to this value (a la Fortran).
Revision 752
Removed debug output from GuiQt::saveImage().
Renamed CA_GRIDTRANSPARENCY to CA_GRIDALPHA, and Grid::setTransparency() and Grid::transparency() to Grid::setAlpha() and Grid::alpha() to make more sense.
Revision 751
Converted Prefs::ViewObject enum back into sequential ints, and adjusted related set/get to use bitshifting.
Fixed CA_SHOWONSCREEN and CA_SHOWONIMAGE crashes.
Revision 750
CA_LOADFF now returns a fail when the forcefield couldn't be loaded (corrected bug in Aten::loadForcefield()).
In PatternAccess, 'firstatomid' and 'lastatomid' were returning the internal index [0 to N-1] rather than [1-N] - fixed.
Revision 747
Corrected About dialog for new website.
Revision 746
Adjusted changeversion script and updated debian-related build files.
Version 1.2 introduces a new, far more powerful C-style syntax to the command language used in scripts, filters etc., and hence scripts and filters from previous versions are incompatible with v1.2.
Detailed SVN ChangeLog follows:
Revision 917
Fixed crash with manual generator definition for model.
Heavy update to 'cif' filter.
Added data/BisonConfig.cmake to dist package file lists - Windows and Mac builds were broken without it.
Added 'nextarg' command - like 'readnext' but reads directly from file.
Corrected 'sgid' and 'sgname' accessors in Cell.
Updated About window.
Updated CMakeLists.txt to work correctly with new files.
Many small modifications to fix Windows build.
Renamed Atomtype class as Neta. Added some Forcefield accessors.
Revision 916
Removed more old (defunct) files from repo.
Revision 915
Removed some old Bison-related working files.
Revision 914
Merged Bison branch back into trunk.
Revision 913
Spacegroup definitons are now in the hands of SGInfo. Fixed escaping of characters in LineParser::getLine(). Added 'sginfo' command. Updated 'cif' filter.
Revision 912
Reverted ReturnValue::setPtr() to overloaded ReturnValue::set().
Fixed PreferencesVariable to use the provided pointer when setting and retrieving values.
FInalised Prefs::save().
More updates to Prefs window.
Changed LineParser::readChars() and associated 'readchars' command to take an optional boolean to force skipping of end-of-line markers.
Revision 908
Minor changes.
Revision 907
Simplified and improved ring search - all possible rings of a given maximum size are now properly detected.
Revision 906
Added ZMap selection to LoadModel dialog, and 'zmap' accessor to PrefsVariable.
Added Prefs::gasConstant and added Boltzmann probability checks to MC.
Reintroduced 'elec', 'ecut', and 'vcut' commands (now in EnergyCommands) in order to setup energy calculation without poking Prefs.
Fixed power operator.
Added 'tan' operator.
More scripts updated to work with new command syntax.
Revision 905
Fixed ReturnValue::setARray() which was crashing in spectacular style.
Added 'glyphcolour' accessor to PrefsVeriable.
Added remaining two example scripts from paper.
Added modulus operator.
Fixed enabling of undo/redo for default model in GUI.
Fixed greedy format specifier (%r) which was not storing data properly.
Fixes to GUI-based model saving - logs were not always updated, and current model (rather than current rendersource) was targeted for some data manipulation.
Added 'akf' model import/export.
Revision 904
Added two (paper) example scripts.
'Fixed' rebond for non-periodic systems.
Corrected usage of 'element' arguments for SetElement, SelectType, and DeSelectType commands.
Revision 903
Added example scripts from paper.
Fixed use of Atom variable as an element type in TreeNode::argz().
Element symbols found by the lexer are now instantiated as constant ElementVariables in the grammar, with pointer set to the corresponding element entry in ElementMap.
Added 'Z' numbers to Element info.
Revision 902
Aten::addForcefield() now sets the new forcefield as the default if no others are loaded.
Fixes to parser - pattern& and bound& (PatternBound) variables were completely missing.
Corrected some small bugs in parser.
Reinstated DL_POLY FIELD export.
Changed the way non-standard pointer arrays (i.e.
lists) are handled by ReturnValue.
Fixed 'readdoublearray' and 'readintegerarray' to handle new array stuff.
Fixed deselection of integer ranges of atom IDs.
Tweaked appearance of progress indicator in GUI.
ReturnValue now stores copy of text data in a Dnchar, rather than just the const char* pointer.
Fixed operation of nested Format::writeStrings() - bad use of static members.
Revision 901
Completed checking of operator types.
Revision 900
Small fix to 'siesta' exportmodel filter to give correct charge of system.
Added full accessor list for Preferences and removed corresponding commands.
Made backup and copy of default data in ElementMap to ease preferences cancelling/saving.
Big update to Prefs window.
Fix to new rebond to prevent crashing when no atoms are present.
Added 'selectinsidecell' and 'selectoutsidecell' commands.
Cell set commands no longer promote a Log::Structure changes (they shouldn't).
Incompletely overhauled operator actions between varied types, and operator checking between varied types.
Revision 899
Small fix to 'siesta' exportmodel filter to give correct charge of system.
Added full accessor list for Preferences and removed corresponding commands.
Made backup and copy of default data in ElementMap to ease preferences cancelling/saving.
Big update to Prefs window.
Fix to new rebond to prevent crashing when no atoms are present.
Added 'selectinsidecell' and 'selectoutsidecell' commands.
Revision 898
Converted all GL-related definitions to 'double[4]' instead of GLfloat[4] - conversion is applied on retrieval via the relevant copy*() functions.
Many changes/fixes to array access and array setting.
Reimplemented preferences file loading (saving still to do).
Revision 897
More work on PreferencesVariable access.
Fixes to ElementVariable access.
Fixes to filters to use new 'aten.frame' member instead of 'aten.model' when writing out model data.
FIxed siesdta filter.
Added better array checking in Tree::expandPath().
Revision 896
Some incomplete stuff.
Revision 895
In pdb filter "ATOM" keyword was never recognised because of explicit trailing spaces in string - negating length in specifier now strips trailing blank characters on formatted read.
Filters are added to master filter lists at the head position so filters read in later override those read in earlier.
Added '--filter' CLI switch to permit a filter file to be specified and read in from the CLI.
Renamed 'fdf' filter (and nickname) to 'siesta'.
Added 'nframes' and 'frames' accessors for Model, and made 'cell' accessor rw (added new Model::setCell(Cell*) member function).
New 'E' command argument specifier to require an 'element'.
Changed some command specs and code to use new TreeNode::argz() to convert argument to atomic number.
Revision 894
Better error handling in some parts of grammar.
Fixes to grammar.
Some scripts updated.
Added creation of constant arrays for assignment of initial values.
Better checking of initial values given to variables (e.g.
type, array size etc.).
Modified accessor quantity indicating array (now an integer).
Implemented missing accessor list for Pattern type.
Major reworking of ElementsMap and associated accessors to allow easy set/get of array'd information.
Fixes setting of individual elements of array'd accessors.
Revision 893
Fix to trajectory seeking.
Changes to read-success return integers to make them 'logical'.
Fixes to some filters - current model returned by aten.model accessor is now the rendering source as opposed to the master model.
Revision 892
Small fix to StringArrayVariable.
Moved completed filters to data/filters, and made some minor fixes.
Added possibility to comment with '//' in command language.
Added 'cachelimit' command.
Revision 891
Model's created with '-n' now have undo/redo enabled.
Added undo/redo to all path-accessed properties where possible.
Fixed use of alternative argument specifications for commands.
Implemented arguments and default arguments for user functions.
Major changes to set/get action in prefs-based commands.
Revision 890
Model's created with '-n' now have undo/redo enabled.
Added undo/redo to all path-accessed properties where possible.
Fixed use of alternative argument specifications for commands.
Implemented arguments and default arguments for user functions.
Revision 889
Reworked 'help' command to not be a 'proper' command.
Added rw 'magnitude' accessor to vector type, allowing vector to be scaled by setting the property.
Implemented prefs access (accessors still incomplete).
Renamed 'afterchar' and 'beforechar' to 'afterstr' and 'beforestr', and made them operate on search strings rather than search characters.
Reimplemented vector constants ( {a,b,c} ) in grammar.
Fixes to some commands.
Revision 888
Removed 'warn' command.
Some fixes to read/write commands, especially formatted read/write.
Revision 887
Changes.
Revision 886
Updated command definitions, and some commands.
Revision 885
Fixes to various CMakeList.txt's.
Added data/BisonConfig.cmake to permit compilation of Bison parser with CMake.
Revision 884
Added unformatted history file import to DL_POLY filter.
Minor improvements to grammar.
Revision 883
Fixed plenty of memory leaks - base class TreeNode was not declared with a virtual destructor.
Fixed parsing of forcefields and atomtypes - geometry commands now exist in the list of known atomtype commands, duplicating names in Atom::AtomGeometry.
Fixes to bond rendering.
Updated model and status bar to keep track of and display the number of atoms of unknown eloement ('XX').
Revision 882
Adjusted some aspects of command spec - partial OR'ing, and number repeats (needs testing).
Revision 881
Added water66 DL_POLY example CONFIG and HISu file.
Version was changed in a prior commit to 1.2.
Updated reporting of command syntax.
Revision 880
Fixed broken repo - command/nucommand conflicts.
Revision 879
Tidying up source tree (2/2).
Revision 878
Tidying up source tree (part 2/2).
Revision 877
Tidying up source tree (part 2/2).
Revision 876
Tidying up source tree (part 1/2).
Revision 875
Trajectory import working.
Added capability for functions to take and return arrays as arguments.
Unformatted DL_POLY trajectory import added.
Fixed errors with single (static) commands run from the GUI.
Revision 874
Minor - added functions to find, set, and retrieve trajectory header and frame functions.
Revision 873
Updated error reporting when parsing from files (e.g.
filters etc.).
Significant improvements to grammar and tree generation.
User-defined functions added.
Revision 872
Changes.
Revision 871
Changes to command spec.
(a bit more)
Revision 870
Changes to command spec.
Revision 869
Changes once more.
Revision 868
Trajectory creation from scripts/filters now working.
More filters converted.
Revision 867
Trajectory creation from scripts/filters now working.
More filters converted.
Revision 866
Added AND and OR operators, and fixed OperatorNegate.
Added partial trajectory creation handling from scripts.
Revision 865
Reimplementation of arrays as separate classes (one for each type) with PointerVariable and PointerArrayVariable base classes for pointer variables.
Renamed all Nu* classes and removed some old files.
Revision 864
More filters and fixes.
Revision 863
More stuff.
Revision 862
Fix and fix again.
Revision 861
More stuff up and running.
Revision 860
File tidy up.
Billions more bugs fixed.
Revision 859
Changes.
Revision 858
Added While, DoWhile, Break, and Continue flow control.
Revision 857
Preliminary change to allow escaped characters in parser strings.
Revision 856
Fixes to vector set/assignment, and setting of components of vector quantities.
Revision 855
Ch-ch-changes.
Revision 854
Changes....
Revision 853
changes.
Revision 852
Fixed list-based crashes.
Revision 851
Changes.
Odd segfault madness - variable.h/treenode.h prev/next pointer clash?
Revision 850
Fixes.
Revision 849
More stuff.
Revision 848
Partial addition of post/prefix increment/decrement operators.
Revision 847
Path setting implemented.
Formatted writing implemented.
Revision 846
Fixed nuparser checking of tree pointer.
Revision 845
Changes.
Revision 844
At stage of implementing formatted reading.
Revision 843
Magyar changes.
Revision 842
Incredible developments.
Revision 841
Les Changes.
Revision 840
Changes (Duh).
Revision 839
More stuff has changed.
Revision 838
Baaaaaaaaaaayson.
Revision 837
Reworking GUI commands.
Old Parser now LineParser.
Revision 836
Replacing old command-code with new routines/structures.
Revision 835
Complete breakage for Filter update.
Revision 834
Adjusted commands.
Revision 833
Bulk added old commands ready for rewriting.
Revision 832
Simplified grammar.
Paths work.
Arrays work.
Revision 831
Bayson.
Revision 830
Grammatical block-scoped correctness.
Revision 829
Operator additions.
Revision 828
Bloops (Bison loops).
Revision 827
Yak.
Revision 826
Biiiiig bison.
Revision 825
Bison paths working.
Revision 824
Broken Bison.
Revision 823
Biiiiison.
Revision 822
Added accessors for other variable types.
Revision 821
Path traversal working.
Revision 820
Byson.
Revision 819
Add untested Bison retrieval of Model and Atom.
Revision 818
Bison retrieval of simple vector path quantities implemented.
Revision 817
Bill Bison.
Revision 816
Bisonic path finding.
Revision 813
Bison - before path implementation.
Revision 812
Major Bison movements.
Revision 811
Add nucommand to Bison.
Revision 810
Started adding old commands back in.
Revision 809
Bison.
Revision 808
Completed Bison parser.
Revision 807
Bai sun.
Revision 806
Bi son.
Revision 805
Minorbison.
Revision 804
B-b-b-b-b-bison.
Revision 803
Significant Bisonage.
Revision 802
Bisonic file removal.
Revision 801
Bisonic modifications.
Revision 800
More Bisonification.
Revision 799
Heavy Bison changes.
Revision 798
Bison branch changes.
Revision 797
Bison branch parser changes.
Revision 796
Bison branch changes.
Revision 795
Commit to bison branch.
Revision 794
Creating 'bison' branch.
Version 1.3 fixes many bugs (as usual) over 1.2, and adds many new accessors and improvements.
Detailed SVN ChangeLog follows:
Revision 996
Modified configure.ac to replace link to libncurses, and added pkgconfig to extra/aten.dsc.
Revision 991
Fixed - Disordered builder now accepts periodic models as components.
Fixed - Crash when specifying zero molecules in a component for the disordered builder.
Corrected definitions of 'setregion' and 'setregionfrac' to allow optional 8th argument.
Added verbosity to saving of forcefield expressions.
On startup, current model is no longer automatically set to first in the list - scripts and commands will now display the last current model correctly.
Added some more reporting to GL error debugging.
Revision 990
Fixed - Enormously stupid error in afterLastChar(), leading to crashes in save dialogs when a filename with no extension was given.
Added checkbox to SelectFilter dialog to allow/prevent automatic adding of filename extension to filename.
Revision 989
Added CLI switch 'noqtsettings' to prevent loading of stored window/toolbar positions on startup.
Revision 988
Fixed - Silly crash caused by using 'delete' as opposed to 'delete[]' in Pattern::fillExpression().
Added missing internal function calls related to creation of Measurement variables, and renamed variable type specified from '_MEASUREMENT' to 'measurement'.
Revision 987
Refinements to filter selection processes.
Added filter selection to expression export.
Format of saved images now determined by filename extension.
Better output added when saving models.
Revision 986
Fixed - 'CRITICAL : runSaveModelDialog' filter recognition idiocy.
Formats of saved files are now determined (as they probably always should have been) by examining the file extension - if none match, or there isn't one, a dialog (AtenSelectFilter) presents the available formats.
Added functions to Dhcnar to return upper and lowercase conversions of contained string.
Added additional member functions to FilterData and Aten (filter-specific) to present/access data in more useful forms.
Revision 985
Fixed - Monte Carlo acceptance energy levels were not converted on energy unit change in Prefs.
Fixed memory leaks in MonteCarlo (acceptanceRatio_), Pattern::fillExpression (bonding), and added delete call on gui.app in main().
Revision 984
Added 'z' accessor to ForcefieldAtom.
Added bond/angle/torsion/type forcefield term list accessors to patterns and parent model - renamed existing accessors in Model.
Added 'forcefield' accessors to Model and Pattern.
ReturnValue now holds Refitem pointer to allow increase/decrease (++/ii) of Reflists.
Internal change in ForcefieldAtom accessors - ParentFF now FField for consistency.
Added missing ForcefieldBound accessors.
Added 'termid' to PatternBound accessors.
Corrected email address in CMakeLists.txt.
Revision 982
Removed some defunct filter command definitions from src/command/commands.h.
Extended 'newatom' and 'newatomfrac' commands to take optional velocty and force triplets.
Fixed - Saving of prefs values for element data, and conversion of Element type to integer.
Fixed - Atomic radii were not set properly in the prefs GUI.
Revision 981
Updated extra/debian.changelog.
Removed unnecessary linkage to libncurses.
Revision 979
Corrected extra/aten.dsc to fix building on xUbuntu_8.10, and included in src/gui/about_funcs.cpp to help fix OpenSuSE_Factory and Fedora_11 builds.
Globally-replaced usage of '%li' in format statements with '%p'.
Revision 976
Fixed - Missing menubar in Grids window.
Revision 974
Small corruption in src/base/Makefile.am includes corrected.
Revision 972
Corrected 'matrixconvert' command argument text.
Added 'reorient' command, acting like 'matrixconvert' except that source axes are supplied in terms of atoms/ids and destionation matrix is given as a matrix.
Help command ('help') now doesn't need function name enclosed in brackets and quoted (e.g. now works as 'help printf').
For commands given on the command-line or through the Command toolbar, a terminal ';' is automatically added if not present.
Revision 971
Fixed - Placement of angle measurement labels was quirky, swapping labels of adjacent angles.
Fixed - Some Trajectory controls/menu items were not updated on model change.
Revision 970
Completed new Grids page.
Revision 969
Fixes - Grid rendering via colourscale (initialisation of colourscale ID, use within cubeIt()).
Fixed - Colour dialogs, when canccelled, reset colour to black.
Colour dialogs now allow setting of alpha value where appropriate.
Handling of alpha within grid colours corrected.
Removed 'Transparency' control from Grids window.
New Grids window layout (UNFINISHED).
Revision 968
Fixed - Passing double and string values was not implemented!
Fixed - Grammar did not allow redeclaration and simultaneous assignment of nonlocal variables (including passed values).
Revision 967
Fixed - Passing double and string values was not implemented!
Fixed - Grammar did not allow redeclaration and simultaneous assignment of nonlocal variables (including passed values).
Revision 966
Added '--int', '--double', and '--string' CLI options to enable passing of shell variables.
Bug - Passed value variable names cannot be redeclared and assigned simultaneously.
Revision 965
Modified EOF command to be a little more sensible.
Revision 964
Fixed definition for 'scaleinterpolate'.
Adjusted 'surface' filter to fail properly if next data point cannot be read.
Moved version information from main/aten.h to main/version.h to make rebuilding after even minor changes a little less tiresome.
Corrected filepaths listed in header of files in src/main.
Revision 963
Added missing calls for GlyphDataVariable accessor searching etc. Added proper recognition of mismatched types in constant array declaration.
Fixed - Retrieval (resetting) of constant array values involving expressions did not work correctly.
Revision 962
Supplying a non-existent filter nickname to 'savemodel' now prints out a list of available filter nicknames.
Added better access to glyph data - new GlyphDataVariable, and reworked Glyph class to use GlyphData as proper members.
Added 'getenv', 'getenvf', and 'getenvi' commands.
Revision 961
Added 'fixpattern' command and 'fixed' Pattern accessor to allow whole patterns to be fixed in minimisations.
Fixed - Missing progress indicator when using disordered builded from CLI.
Fixed - Win/Mac builds, related to zero-sized function accessor arrays.
Fixed - Model zoom was not correctly linked to cached trajectory frames.
Revision 960
Fixed - 'cgminimise' command was not expecting an 'ncycles' argument.
All minimisation commands now assume a default of 100 cycles if no number is specified.
Added optional argument to GuiQt::progressUpdate() to store short ETA text instead of printing in order to make some output (e.g. minimisers) a little neater in the CLI.
Revision 959
Power operator now always returns a real (double) result.
Adjusted parser to better handle declaration list errors.
Fixed - Constants with exponentiations were not parsed correctly.
Revision 958
Added new region example script (scripts/regions2.txt).
Bug - Locally-scoped variables (e.g. in loops) with initial values are never re-set (behaving effectively as static vars).
Revision 957
Added missing (empty) function definition arrays to Access classes.
Added 'regionrotation' command and Region accessors.
Bug - Region rotations around both x and y axes simultaneosly are incorrect.
Revision 956
Added basic glyph accessors.
Revision 955
Added checking for NULL pointers in variable paths.
Revision 954
Fixed Mac build - headers for proprietary Qt widgets did not have correct path specified for headers in .ui files (since canvas.cpp moved to src/render).
Revision 953
Tidied TreeNode and Parser.
Moved CommandNode::checkArguments() to TreeNode and made more general.
Added code to allow variable accessors which are functions and accept one or more arguments.
Added 'dotproduct' command.
Removed old src/command/variables.cpp' from repo.
Revision 952
'expand' command now takes optional argument for number of times to perform expansion.
Fixed bug with selection by element using 'select' command.
Removed old src/energy directory and files from repo.
Model::copy() no longer uses a (slow) Clipboard to copy atom/bond data.
Position window allows coordinates to be locked when centering.
'centre' command now takes three optional booleans specifying locked coordinates.
Added hide/show undo states.
Revision 951
Torsion angle calculations involving collinear bonds would return NaNs - added check to Vec3<>::normalise() (also for Vec4<>) to check for and catch effective zero magnitudes.
Another small fix to 'dlpoly' expression export filter.
Revision 950
Adjusted MC disordered builder to accept component models specified with '0' molecules to allow for dummy regions to be specified.
MC minimiser would generate errors if a pattern had no molecules - fixed.
Default value (-1) for parameter to GuiQt::progressUpdate() was not set - fixed.
Tweaked output of MC disordered builder.
Fixed crash when attempting to create unique ff term lists without a valid expression.
Another missing ModelVariable accessor definition added (broke DL_POLY field export, for example).
Fixes to constraint handling in 'dlpoly' expression export.
Revision 949
Corrected 'regioncentrefrac' command - was misspelled as 'regioncentreffrac'.
Ring search routine was 'broken' because of bad logic - fixed.
Made verbose NETA output a little clearer for element matching.
Revision 948
Added finer control of arrow-key rotation of model - holding SHIFT now reduces step to 1 degree.
Spacegroup packing was not correct for Centric spacegroups - fixed.
Updated scripts/alumina.txt.
Added prefs limit to ring detection (default = 20).
Fixed/improved rendering of bonds.
Corrected some spinedit controls in Prefs window (stepsizes and minimum values for atom/bond radii).
Revision 947
Added missing accessor definitions to ModelAccessors (missing terms played havoc with nearly all filters).
Revision 946
Rejiggered measurement storage in Model.
Added measurements and unique FF term accessors to ModelVariable.
Revision 945
Some widgets (manually created ones) were still disabled on toolbars after a progress indicator had been called - fixed.
Add flag in colourscale to turn off interpolation between colour points.
Partial implementation of non-interpolated colourscales.
Revision 944
Better disabling of GUI for long operations.
Progress indicator updated.
Parser did not recognise character literals enclosed in single quotes - fixed.
Fixed crash when rendering offscreen and checking whether to draw extra cell-related graphics.
Added ETA to progress indicators.
Rewrote Model::replicateCell().
Fixed bug in Clipboard::pasteToModel() where redoing a translated paste operation would lose the translation.
Revision 943
Fixes to many compiler warnings (icpc).
Revision 942
Tidied matrix3.h and matrix4.h, and fixed overflow error in Mat3::invert().
Revision 941
Removed unused templates/vobject.h.
Rejigged ComponentRegion - size_ member is now geometry_, and added in rotations_ member.
Cylinder regions implemented.
Point generation/checking inside regions improved, and region rotation implemented.
Rewrote matrix inversion routines to work with standard class data members.
Updated Disorder window.
Moved canvas.h|cpp from src/gui to src/render for consistency.
Revision 940
Fixed parser bug - '=-' would break parsing (e.g. i=-10).
Saving of command toolbar entries in program prefs was not finished - now it is - default command storage set to 25 items.
Command toolbar's QCompleter now set to display unfiltered list of entries.
Saving of program QSettings was not working - add a call to sync().
Model::selectLine() was mistakenly comparing squared and unsquared distances - fixed.
Revision 939
Minor fix to text progress indicator update.
Added inverse trigonometric functions 'acos', 'asin', and 'atan'.
Memory leak fixed: LineParser was not freeing fstream object on destruction.
Overflow fixed: creation of text in CellDefine tool window.
Data members in various places had not been initialised - fixed.
Revision 938
Fixed undo state messages for atom transformations (extra newline present at end of text).
Added progress bars to copy/pate operations.
CLI option '-f/--format' was not taking an argument - fixed.
Internal improvements to progress indicator usage.
Increased number of decimal places in some GUI SpinEdits.
Fixed update of view after changing cell parameters.
Revision 937
Finished reformatting of command descriptions.
'selectline' now fully implemented.
Revision 936
Partial reformatting of command help descriptions.
Revision 935
Added 'selectline' command and Model::selectLine() function stub.
Revision 934
Fixed folding of atoms in fractional coordinates (led to crashes elsewhere).
Added Model::selectMiller() function and 'selectmiller' and 'millercut' commands.
Updated CellTransform window.
Revision 933
Rewrote Model::selectOverlaps() to use bonding cuboids for efficiency.
Added basic GUI functions and code stubs for performing Miller plane cuts.
Revision 932
Updated Model::beginUndoState() to accept arguments in the same way as printf() in order to make naming of undostates a little neater in the code.
Fixed atom flip (using Model::mirrorSelectionLocal).
Fixed new CLI argument parsing - arguments to options were being grabbed a little too readily.
Grid variables were not entirely implemented - fixed.
Added 'gridvisible', fixed 'getgrid'.
Revision 931
Minor changes to parser lexer - skipped ascii code 13 (carriage return) as whitespace to allow correct parsing of DOS-formatted text files/filters on UNIX machines.
Adjusted filter location warning text.
Reworked CLI parsing to accept long options of the form '--opt=value'.
Changed Cell:fold() to work on multiples of cell lengths so atoms in any position are folded correctly.
Modified Bison associativity for AND and OR from 'nonassoc' to 'left' to allow multiple consecutive tests.
Revision 930
Minor changes to parser lexer - skipped ascii code 13 (carriage return) as whitespace to allow correct parsing of DOS-formatted text files/filters on UNIX machines.
Adjusted filter location warning text.
Reworked CLI parsing to accept long options of the form '--opt=value'.
Revision 929
Reverted 'corrupt' root Makefile.am.
Revision 928
Added QCompleter to command edit in GUI.
Fixed creation of 'keepnames' forcefields so they are named before (potentially) being set as the default FF.
Program settings now save command (toolbar) history.
Revision 926
Added relative path to default search locations for data directory.
Revision 924
Reverted LineParser to instantiate new (and delete old) fstream object as and when necessary, owing to problems with having an fstream data member to work on many different (sequential) files under Windows.
Fixed user home directory probing under Windows (wrong environment variable was used).
Revision 920
Fix to Windows default filter path.
Revision 919
Reversioned to 1.3.
Revision 918
Changed version in debian.changelog.
Detailed SVN ChangeLog follows:
Revision 1055
Small fix to src/classes/forcefieldatom.cpp (Windows min/max error).
Revision 1052
Fixes to MOPAC importmodel filter (from 'mop' input file).
Revision 1051
ForcefieldAtom's can now be set with their own specific mass (for use in UA forcefields, for example).
Added new forcefield file block 'uatypes', identical to 'types' block except that mass is also specified.
Added 'mass' accessor to ForcefieldAtom.
Revision 1050
Doh - Added necessary code needed for previous commit.
Revision 1049
Added prefs option 'useFramebuffer' and accompanying command as an alternative to renderPixmap() method when saving images.
Revision 1048
Update to GAFF forcefield (needs code developments).
Modified command lexer to allow second lexer (for atomtypes) to be implemented.
Revision 1047
Small tweaks to fix Windows build.
Scripts updated.
Native file dialog now used in Forcefield window.
Added 'selectmolecule' and 'saveselected' commands.
Tweaked atom bond penalties for oxygen and nitrogen.
Fixed - NETA command 'aromatic' was not recognised for atoms.
Fixed - Ring detection was not setting correct atom environment for aromatic cycles.
Added some atomtypes to GAFF forcefield, and added test model.
Revision 1046
Minor doc work.
Revision 1045
Added root of new doc tree to repo.
Added ability to interpret redirected stdin as script commands.
Revision 1044
Added 'toa' command to return a string formatted in the C printf style.
Added 'filename' accessor to ModelVariable.
Made 'savemodel' command a little more verbose.
Revision 1043
Implemented 'replacestr' and 'removestr' command.
Revision 1042
Extended Dnchar::cat() to accept optional number of characters to copy.
Added placeholders for 'removestr' and 'replacestr' commands (not yet implemented).
Revision 1041
Fixed - Forcefields now added to Makefile.am install targets.
Fixed - 'nextchar' would read multiple consecutive whitespaces as a proper argument, thanks to bug in LineParser::getCharsDelim.
Fixed - Grids dialog used positive colour in negative colour selector.
Revision 1040
Fixed - cube import filter had wrong loop indexing.
Internal Fix - LineParser::getNextDelim used by 'readnext' returned an int, but could only ever return boolean success.
'readnext' command now returns true or false depending on success.
Corrected command text for 'readnext'.
Revision 1039
Fixed - torsion writing in dlpoly expression export was broken from a prior commit.
Added 'message' command specific to forcefields.
Included some (mostly complete) forcefields back into main repository (in data/ff).
Revision 1038
Added xyz trajectory import.
Fixed - Crash when reading a trajectory containing a bad frame.
Revision 1037
Modified dlpoly filter to name trajectory frames.
Removed some debug output from previous commit.
Revision 1036
Fixed - Undo/redo was not working properly for trajectory frames (hadn't been enabled when adding frames).
Removed defunct data/prefs.dat from repo.
Tweaked some GUI icons.
Fixed - Printed format of estimated trajectory size.
Revision 1035
Corrected element name of P to phosphorus (not phosphorous).
Revision 1034
Corrected return value type of 'atoms' accessor in PatternVariable.
Added output of lists of valid accessors/functions when constructing paths containing invalid steps.
Modified dlpoly expression export to be a little neater, and to use atom type names in forcefield term output rather than forcefieldbound type names (which may contain wildcards).
GNU GPL and usage warning is now printed out on startup in the GUI.
Revision 1033
Added 'value' accessor to MeasurementVariable.
Internal - Better debug verbosity for some ReturnValue operations.
Revision 1032
Previous commit also added missing access to 'typenames' in PatternBound variable.
Fixed - Decrement operators (--) for pointer types.
Adding missing MeasurementVariable code to StepNode.
Added/Fixed - Measurements in AKF filter.
Revision 1031
Improvements to line minimisation for SD and CG algorithms.
Fixed - Bad bug in CG minimiser which meant new gradient vector was calculated extremely poorly.
Revision 1030
Fixed - Calling 'createexpression' after using the disordered builder now constructs a full expression (instead of another one containing VDW terms only).
Revision 1029
Added 'clearexpression' and 'recreateexpression' commands.
Moved creation of pattern matrices from Pattern::initExpression() to Pattern::createMatrices().
Combined Pattern::initExpression() and Pattern::fillExpression() into a single function Pattern::createExpression().
Added a little more verbosity to improper torsion output.
Revision 1028
Added basic GUI dialog (Help->Command Help) to look through function list.
Revision 1027
Removed separate storage of improper torsion terms in Pattern and Model lists in favour of just adding them to the torsions array.
Updated dlpoly expression filter to write improper torsion terms.
Revision 1026
'createexpression' now accepts optional boolean to control creation of VDW-only expression.
Added helpful output for all string-searchable enums.
Corrected error-reporting behaviour of System->Reload Filters.
Revision 1025
Disordered builder was trying to create a full expression for the target model rather than a VDW-only one, which was unnecessary.
Allowed usage of normal '%' character in formatting strings by specifying '%%'.
Fixed - Bug (crash) in improper torsion detection arising from incorrect pointer use.
Fixed - Broken typing following prior revision correcting uninitialised pointer.
Revision 1024
Fixed - Uninitialised memory in NETA allowedElements_ array.
Revision 1023
Added 'ewaldkmax', 'ewaldalpha', and 'ewaldprecision' members to Prefs accessor.
Set default Ewald kmax to more sensible numbers (5, rather than 0).
Adjusted Atom::printSummary() and related Model routine to output type id as well as type name.
Added 'fix' and 'free' commands to fix/free atomic positions during various functions, and added items to atom context menu.
Removed use of strcasestr() since this breaks some builds (noe uses lowercase() first).
Added newline to end of base/kvmap.h.
Added undo/redo for fixing/freeing atoms.
Fixed atoms are now drawn in specific colour (Prefs::FixedAtomColour).
Prefs Colours page improved - standard colours amd scale colourpoints now presented in a list.
Revision 1022
Added 'searchcommands' to search through available commands.
Revision 1021
Added 'chain' NETA command to specify a linear chain of linked atoms.
Added improper torsion angle detection and support.
Added 'ignore' form for bond, angle, and torsion interactions.
Tweaked line minimiser.
Revision 1020
Tidied some GUI funcs.
Added button to control view of parent/trajectory to Trajectory toolbar.
Default view on model load is to show trajectory if one is available.
Revision 1019
Added 'mass' and 'nunknown' accessors to Model variable.
Changed Canvas class to use a Log instead of a simple integer for renderPoint_ storage.
Moved window refresh functions from GuiQt to AtenForm classes.
Fixed - undo/redo states for trajectory frames were not used properly in the GUI menu.
Revision 1018
Fixed minor bug with GL error reporting.
Fixed - Many GUI functions would not act on displayed trajectory frames, only the main model.
Revision 1009
Added 'selectradius' command.
Revision 1008
Added 'axisrotateview' to rotate current view around arbitrary axis passing through the origin.
Renamed a few view-related functions in Model.
Added Mat4::createRotationAxis to generate a suitable quaternion.
Revision 1007
Atom context menu was acting on wrong atoms when a single atom was selected with a right click focus on the atom - fixed.
Revision 1006
Fixed - KVMap::nPairs() did not return a value.
Type export mapping now applied to expression export as well.
Revision 1005
Changed handling of storage of atom names read from files (with --keepnames) - now works for 'newatomfrac' command also.
Added key/value map class (base/kvmap.h|cpp).
Added --exportmap and 'exportmap' to allow definition of typename->name conversions (effective for model export only).
Added basic checking of supplied "x=y" values to --map, --exportmap, 'map', and 'exportmap'.
Added 'clearexportmap' command.
Revision 1004
Fixed - Naming of command Forests created without supplying a name (affected naming of items in Scripts menu).
GUI now properly refreshes after running a script.
Revision 1003
CLI option --zmap now properly overrides any settings made in filters, and is zmapping style is reset to Auto on GUI startup.
Fixed - interpretation of 'Scale molecule Centres' checkbox in Transform Cell dialog.
Added optional argument to 'scale' and 'scalemolecules' commands to request calculation of energy change at each scaling, added corresponding widget to Transform Cell dialog, and updated Model::scaleCell().
Revision 1001
Small optimisations fo Vector class and Cell::mimd() function.
Fix to a new silly error in afterLastChar() again, which meant no filter extensions were ever recognised.
Revision 1000
Version change to 1.4.
Detailed SVN ChangeLog follows:
Revision 1191
Added RTP and PDB export filters for Gromacs.
Fixed - CLI option specifications were wrong.
Added checks to complain if CLI options are grouped together.
Completed search function in Fragment Window.
UPdate doc build process.
Revision 1190
Added checks to see if VDW terms could be properly generated in energy and force routines.
Revision 1189
Added prefs and CLI flags to restrict loading of fragments on startup, or generation of fragment icons.
Added Canvas::prepGl() to set up lighting, aliasing etc, rather than doing so only once in Canvas::initGl() which would appear to break rendering on OSX systems.
Added trigger event for doubleClicks on fragment items, activating DrawFragment mode.
Fixed - determination of three-bond atom geometry case was dependent on existing bond magnitudes.
Added some bond geometry cases for oxygen.
Revision 1188
Removed second (offscreen) canvas and widget context, since it may have been causing problems.
Removed defunct expose() and realize() methods from Canvas class.
Fragment rendering now proceeds through main canvas instead of offscreen canvas.
Revision 1187
Removed some debug output.
Made output more verbose when supplying a filter nickname that isn't valid for -f and --export CLI switched.
Added cyclohexane fragment.
Revision 1186
Added explicit destructors to derived NetaNode, Calculable, and UndoEvent classes.
More tweaks to clear unused / uninitialised variables.
Revision 1185
More small tweaks to code throughout.
Revision 1184
Fixed - Do, while, and for loop commands were broken because of 'over-zealous optimisation'.
Revision 1183
Removed some debug output for GL.
Fixed small error in canvas constructor.
Revision 1182
Fixed - cldp-il.ff - BF4 and PF6 typing was broken.
Fixed - Bug in ChangeLog class meant that model display list was always redrawn.
Fixed - Display list generation was incorrect for temporary contexts used in offscreen rendering.
Revision 1181
Small fixes for build service (Makefile.am).
Revision 1180
Moving testing forcefields to new directory (2/2).
Added install-data-hook and ununstall-hook to Makefile.am for fragments data.
Revision 1179
Moving testing forcefields to new directory (1/2).
Revision 1178
Small fixes for build service (Makefile.am).
Revision 1177
Small fixes for build service (Makefile.am, aten.spec).
Revision 1176
Small fixes for build service (aten.dsc, configure.ac).
Revision 1175
Small fixes for build service (specfile, configure.ac).
Revision 1174
Small fixes for build service (specfile).
Revision 1173
Small fixes for build service (xml version in ui files).
Revision 1172
Small fixes for build service.
Revision 1171
Small fixes for build service.
Revision 1170
Fixed version in specfile.
Revision 1169
Fixed configure.ac.
Updated specfile.
Revision 1168
Tweaked DoubleExp::recalculate() to fix Windows build.
Revision 1167
Renamed a doc file.
Revision 1166
Doc update - Usage.
Tweak to src/gui/Makefile.am.
Revision 1165
Many small tweaks to remove unused variables, and add 'default' cases to switches.
Fixed - 'glyphatomv' would not use atom correctly.
Renamed 'MM' (and 'PP') tokens in parser grammar to avoid conflicts with QGenericMatrix.
Revision 1164
Fixed - Testing NETA types from forcefield window was broken.
Changed configure.ac to allow specification of all three executables for Qt4 compilation (rcc, moc, and uic) separately.
Added specific 'clean' target to src/gui/Makefile.am in order to properly delete all necessary files.
Revision 1163
Added src/classes/neta_grammar.cc and src/classes/neta_grammar.h to repo, to make Win/Mac builds easier.
Revision 1162
Added 'findelement' function to AtenVariable.
Fixed - Early return from command execution was occasionally broken because of bad logic in 'while', 'for', and 'do' command code.
Updated pdb filter, and added trajectory import.
Revision 1161
Test.
Revision 1160
Added some functions to Reflist.
Made Model's marked lists always retain atom ID ordering.
Fixed - Pattern detection was somewhat broken thanks to unordered lists of atoms in marked lists.
Added LjGeometric Vdw functional type, and modified oplsaa.ff to use it.
Added combination rule usage to long-range VDW correction calculation.
Revision 1159
Tweaked Pattern::augment() to remove possibility of some 'silly' augmentations.
Revision 1158
Doc update.
Revision 1157
Tidied custom Tree/Table/List view item code.
Added grid-style table view to Fragment window.
Revision 1156
Fragment Builder fully functional.
Modifier keys now more responsive in GUI.
Renamed Canvas GLOBs for sanity (and less capitals).
Added Atom::nHydrogens function.
Fixed - created new bug when drawing single atoms, placing them offscreen.
Revision 1155
Fixed - Model::rotateSelectionVector() now creates its reference coordinate system more reliably.
Added Atom::nextBondVector() which attempts to determine next best bond vector for a given atom.
Continuing work on fragment builder.
Revision 1154
Modified rendering routines to accept source Model pointer, rather than blindly use Canvas::displaymodel_.
Renamed some enum values in Canvas to be more consistent.
Modified existing TCanvas to allow specification of custom Model source, rather than assuming Aten::currentModel().
Added second, offscreen rendering canvas and context for generation of bitmaps (primarily for Fragment icon generation).
Extended Canvas::DrawDeleteAction to delete all bonds to clicked atom when Shift is held.
Fragment builder work in progress.
Revision 1153
Working commit.
Significant work on GUI Fragment Library.
Revision 1152
Moved Fragment source files to src/model.
Added basic GUI for Fragment Library.
Note: Broken Commit.
Revision 1151
Added Bundle::clear() function.
Reworked basis of fragment model data storage.
Revision 1150
Update root Makefile - dist targets were missing.
Revision 1149
Added placeholders for new fragment builder functions.
Chain drawing now much more sensible w.r.t.
depth placement of drawn atoms.
Updated akf filter.
Revision 1148
Big doc update, adding lots of GUI-related stuff.
Revision 1147
Updates to docs, and added tool window images.
Renamed some icons.
Many tweaks to GUI layouts in tool windows.
Revision 1146
Big doc update, adding lots of GUI-related stuff.
Revision 1145
Doc updates.
Added some new icons.
Revision 1144
Tweaks to oplsaa.ff.
Moved 'scripts' directory to installed data dir.
Doc update.
Revision 1143
Doc update.
Revision 1142
Added check in expression generation for torsions ending in the same atom (e.g.
as is the case for three-membered rings).
Revision 1141
More tweaks to SD minimiser.
Finalised 'getcombinationrule' and 'setcombinationrule' commands.
Revision 1140
Tweaks to LineMinimser and SD minimiser.
Added 'setcombinationrule' and 'getcombinationrule' functions (untested).
Revision 1139
Minor doc changes.
Revision 1138
Fixed - Issues with setting combination rule equations.
Added reset() functions to CommandParser and LineParser to properly reset structures after use.
Revision 1137
Changes / fixes to prefs setting of combination rules (still broken).
Revision 1136
Added missing geometry_funcs.cpp to repo.
Corrected rule defined for sigma in LJ potential.
Added variable specified for FFAtom type.
Added function 'combine' to ForcefieldAtomVariable, taking one ffatom and parameter ID as arguments.
Removed debug output from Combine::regenerateEquations().
NOTE: Broken commit (setting combination rules via prefs).
Revision 1135
Implemented combination rule usage in VDW equations.
Moved all combination rule data/functions to class of its own.
Corrected initial value of Ewald precision in Prefs - was 5.0E6 rather than 5.0E-6.
Removed debug output from MonteCarlo::insert().
Revision 1134
Fixed - Segfault when rebonding very large periodic systems, since dynamic adjustment of cuboid size was broken.
Added selection of combination rules for VDW functional form parameters.
Implemented usage of user-selectable combination rules by VDW functions.
Added extra param display to FFEditor, and added scaling factor columns to torsions page.
Changed copyright years in all files.
Added DoubleExp class, used to hold a pair of mantissa/exponent values.
Fixed - Minor bug meaning any created model would start off 'modified'.
Added 'Centre at Origin' item to Context menu (shortcut Ctrl-Alt-C).
Removed storage of spacegroup name in Cell - 'sgname' accessor is now read-only.
Adjusted command parser grammar to allow user functions to be defined in/outside of 'programs' and without creating unnecessary NoFunction nodes.
NOTE: This revision is missing implementation of combination rule usage in energy/force calculation, function to allow generation from filters, and prefs accessor/method to set combination rule equations.
Revision 1133
Fixed - Silly crash on startup related to new context menu functions.
Revision 1132
Removed prefs.commandHistoryLimit().
Removed old Command toolbar.
Updated Command window - now populated with command history.
Added Geometry window to edit bonds, angles, and torsions, and added context menu functions to match.
Added 'printf' function to Dnchar.
Revision 1131
Fixed - cutoffs in Grid window now behave properly.
Revision 1130
Tweaks to surface rendering.
Revision 1129
Doc updates.
Revision 1128
Fixed - Bug in disordered builder would cause a crash if a loaded model was not used in the build.
Improved 'Shift' page of Position window.
Revision 1127
Added torsion terms to manual.
Added Pol9 torsion term.
Revision 1124
Fixed - Filter selection dialog would oddly return no filter.
Fixed - Exact matching of filenames now performed on save.
Mainwindow dimensions adjusted.
Revision 1121
Atom selections and marked lists are now remembered in a Reflist local to the model to speed up operations working on the current selection/marked list of atoms.
Added 'setdistance', 'setangle', and 'settorsion' commands to enable direct manipulation of local geometries within models.
Renamed Model functions 'selectionCog' and 'selectionCom' to 'selectionCentreOfGeometry' and 'selectionCentreOfMass'.
Modified Model::rotateSelectionWorld() to perform manipulation in model coordinates, rather than modifying world coordinates and unprojecting them.
Fixed - AtomList window would not update after shifting positions up.
Fixed - Changing model name was not updating savePoint (updated Log to account for Log::Misc changes).
Added 'parentmodel' function to return current model pointer to the trajectory's parent model.
Fixed - 'gamess' filter was duplicating atom data in the last trajectory frame and not copying data to the parent model.
Revision 1120
Added missing src/gui/icons/stack_command.svg to repo.
Revision 1119
Updated actions of command list in command window.
Finalised 'rotation' accessor set/get in GlyphVariable.
Fixed command parser grammar to accept empty argument list for accessor functions.
Revision 1118
Corrected definitions for triflate anion in cldp-il.ff.
Added new icon for command window (beta).
Fixed CMake build.
Revision 1117
Added new command prompt toolwindow (unfinished).
Update grids window.
Grid data can now be drawn as a cut between isovalues.
Revision 1116
Fixed - VariableNode::findAccessor() was not passing down any supplied arglists, meaning that function arguments in paths went missing if the function was the only step in the path (i.e.
var.func(args)).
Added arbitrary rotation matrix creation function to Mat3.
Added 'rotatey', 'rotatez', 'rotate', and 'resetrotation' functions to GlyphVariable.
Revision 1115
Added 'rotation' accessor and 'rotatex' function to Glyph variable (not fully working yet).
Added Mat3::forGL function to return 1D array of values suitable for GL, and removed individual custom functions from some classes.
Revision 1114
Added 'glyphs' and 'nglyphs' accessors to Model.
Changed radius of scaled wire sphere GLOB to 1.0 for consistency and correctness.
Fixed - Glyph rendering was calling wrong display lists.
Backface culling is now OFF by default.
Fixed - Solid cube glyph had incorrect surface normals.
Revision 1113
Added 'nmodels' accessor to AtenVariable, and 'id' accessor to ModelVariable.
Added 'deletemodel', 'flipx', 'flipy', and 'flipz' commands.
Added cli switch '--loadfromlist' which takes a textfile containing a list of models to load as an argument.
Revision 1112
Added new doc pages.
Added uracil/thymine NETA to oplsaa.ff.
Revision 1111
Started to add GUI to docs.
Revision 1110
More doc updates.
Added script to demonstrate 2D surface (scripts/surface.txt).
Revision 1109
Doc update - added lise of supplied forcefields and missing grid command ref.
Moved data/ff/bleeding to data/ff/testing.
Revision 1108
Tweaked - dlpoly filter no longer writes out 'constraints' line when none are present.
Revision 1107
Fixed - If 14-scale factors were not provided for forcefield torsion blocks, default values were not applied (both were set to zero).
Removed defunct LineParser::isBlank function.
Revision 1106
Fixed lww-il.ff symmetric ring-carbon cation types for bmim and emim.
Revision 1105
Fixed - LineParser would ignore rest of line when encountering a comment marker (# and //) in a quoted string.
Tweaked - akf filter now writes out explicit terms for angle, distance, and torsion instead of generically calling them 'geometry n'.
Revision 1104
Updated akf filter to write out geometry values as well as related atoms, and to accept 'distance', 'angle', and 'torsion' keywords on input.
Small changes to oplsaa.ff.
Revision 1103
Many doc tweaks.
New sections added.
Revision 1102
Adjusted old terms in oplsaa.ff (UA methylenechloride, AA alkyl chlorides) and added more new ones (sulfoxide, some sulfonamides).
Revision 1101
New NETA added to oplsaa.ff (diols, triols).
Revision 1100
Doc tidying/updates/completions.
Revision 1099
Additions and corrections to oplsaa.ff (benzyl esters, tert amides and formamide) and cldp-il.ff (NTf2).
Fixed - NETA parser would choke on constructions like '(neta...) | (neta...)', but '(neta...) | neta' was ok.
Fixed - 'typedef' command was not setting character element of type.
Modified 'typedef' command to take FF equivalent name argument as well.
Revision 1098
Final corrections to 'fixtype'.
Revision 1097
Corrections/updates/removal of idiocy from 'fixtype' and 'freetype' commands.
Revision 1096
Added 'fixtype' and 'freetype' commands.
Revision 1095
Added images and forms files to doc.
More updates to aromatic C6-style terms in oplsaa.ff.
Revision 1094
Fixed - Crash when recreating a vdw-only forcefield expression, and the full expression cannot be completed.
Tweaked - Messaging in Pattern::createExpression for intramolecular term types that don't occur.
Revision 1093
Type tweaks to oplsaa.ff (benzenes, esters).
Fixed - Bug in NETA parser which meant lists of bound elements/types were not read in correctly.
Revision 1092
More doc changes.
Minor fixes to some angle functional form parameter names.
Revision 1091
More doc changes, updates, and completions.
Revision 1090
Finished implementation of error reporting for name searching of forcefield forms.
Fixed - Bug in torsion angle force calculation where the vector cross product would overflow acos() (xp > 1.0) and result in NaNs.
Fixed - Creating a new forcefield using 'newff' would not set the name of the forcefield in time for the new default forcefield name to be printed.
Tweaked output of 'finaliseff' command, and added missing code to link reference types.
Fixed - 'interdef' was not storing parameters correctly.
Added example script to generate chlorofm box, defining forcefield in situ (scripts/chloroform.txt).
Revision 1089
Updated oplsaa.ff with ester and imide type descriptions.
Added output of total system charge when assigning forcefield charges.
Revision 1088
Doc update.
Revision 1087
Added ids to filters that did not currently have one.
Doc update.
Revision 1086
Fixed - Crash when using postfix increase or decrease on a reference variable, related to ReturnValue not initialising all the data it should have.
Fixed - Array index usage (or lack of) for 'models' and 'elements' accessors of AtenVariable.
Revision 1085
Added missing 'current*' functions.
Revision 1084
More doc changes.
Revision 1083
Doc update.
Revision 1082
Big doc update.
Revision 1081
Doc update.
Revision 1080
Tweaked gamess filter to use currentmodel instead of getmodel.
Add complementary 'currentXXX' functions to all 'getXXX' functions for objects.
All 'currentXXX' functions return and set the current object, while all 'getXXX' functions just return the object.
Doc update.
Revision 1079
Doc changes.
Revision 1078
Doc update.
Revision 1077
AtomLabel enum no longer uses 'power'.
Doc update.
Fix to some types (N and H) in cldp-il.ff.
Revision 1076
Docs again.
Revision 1075
Docs.
Revision 1074
Doc update.
Revision 1073
Another doc update.
Revision 1072
Doc update.
Revision 1071
Doc update.
Revision 1070
Doc update.
Revision 1069
Removed 'local' variables storing electrostatic and vdw scale factors from src/ff/loadforcefield.cpp.
Torsion definition in forcefield files takes two optional arguments after the initial declaration of functional form - escale and vscale.
Removed TF_ESCALE and TF_VSCALE constant definition.
Increased MAXFFPARAMDATA from 6 to 10.
Tweaked lww-il.ff - two F-P-F angle data were specified, the first (bad?) being used instead of the second (better?).
Revision 1068
Added some descriptions to oplsaa.ff.
Revision 1067
Small fixes to oplsaa.ff.
FIxed - Ring scoring in new NETA was incorrect.
Added 'ffmass' accessor to ModelVariable to return mass calculated from assigned forcefield atom types (to account for any united atom specs).
Changed some declarations over a few files to be const.
Revision 1066
New doc update.
Revision 1065
Added ability to store and retrieve extra string, double, and int data for each atom type.
Added 'datad', 'datai', and 'datas' functions to ForcefieldAtom to provide access to extra data.
Initernal - CommandParser can now make use of string lists.
Partial implementation of generator function definitions in forcefields.
Added data/ff/test.ff to illustrate all possible allowed blocks in a forcefield.
Revision 1064
Fixed - Minor bug in error message output for invalid NETA in type define.
Added 'printtype' function to print out the detailed NETA description of a forcefield atom type.
Fixed silly errors in spc.ff and spce.ff.
Fixed - Type defines were completely broken.
Fixed - Parser wuld choke (quietly) on use of bracketed NETA expressions that were not associated to expanders.
Updated type descriptions in gaff.ff.
Revision 1063
Added 'selectionaddhydrogen command' to hydrogen satisfy current selection in model.
Revision 1062
Updates to opls.ff to fix multiple bond demands of types.
Revision 1061
Fixed detection of planar atoms.
Fixed - If impropers were detected in a pattern other than the very first, atom IDs were calculated incorrectly for the expression and a segfault would occur.
Revision 1060
Fixed detection of planar atoms.
Revision 1059
Added more subroutine tracking messages to new NETA routines.
Removed Model* argument from Atom::geometry() function.
Added Atom::isPlanar() function, and corresponding 'planar' NETA command.
Added missing reverseLogic check to all NETA node scoring funtions.
Model::selectType() now returns -1 if an invalid NETA description is passed, allowing '(de)selecttype' to exit from command processing.
Command 'loadmodel' now exits script if loading failed.
Updated gaff.ff to fix some problems associated with new typing routines.
Revision 1058
Fix to src/classes/neta_lexer.cpp to remedy Windows build.
Revision 1057
Added warning/info message for changes made in r1056 (typing rewrite).
Revision 1056
Version bump to 1.5.
Removed 'expressions' message output type, and added 'test' output type for easier debugging of new features.
NETA parser completely rewritten in Bison.
Added 'own' method to Reflist.
Modified enumPrintValid to skip entries beginning with '_'.
Adjusted static enum retrieval routines in Atom class to take note of 'reporterror' parameter.
Fixed - Internal bug in Dnchar which would segfault when attempting to cat to an empty string.
Added prefs option 'maxcuboids' to determine the maximal number of bonding cuboids to use in any one direction.
Modified Model::initialiseBondingCuboids to adjust cuboid size when number of cuboids in one direction is greater than the set prefs value.
Added 'maxcuboids' accessor to Prefs.
Added optional boolean argument to bonding commands, determing whether to augment or not after bonding.
Added 'defines' keyword to forcefields, allowing the definition of commonly-used (or complex) NETA subdescriptions outside of actual type descriptions.
New syntax for chain specifications in NETA.
Update lww-il.ff to use new 'chain' format.
Removed some out-of-date / defunct scripts from the repo.
Detailed SVN ChangeLog follows:
Revision 1495
Creating 1.6 release branch.
Revision 1494
Fixed - Silly error in dipole script, and unit conversion to Debye.
Revision 1493
Fixed - Windows and Mac builds were broken because of ambiguous conversion of streampos to int in src/main/cli.cpp.
Revision 1492
Updated TODO.
Added expression export filter for Aten's own FF format.
Revision 1490
Added CLI switch to force reading from piped input on startup, and matching prefs member.
Fixed - Hang on startup arising from new code to read from stdin on startup.
Revision 1489
Transplanted code to remove comments from LineParser::readNextLine and put into separate global removeComments routine.
Added global isEmpty() function to check for presence of only whitespace in character strings.
Fixed - Reading of scripts from stdin (and pipe).
Revision 1488
Tweaked cldp-il.ff.
FIxed - Atoms were not being described properly whtn using disordered builder, meaning ring information etc. was not available and typing would fail.
Revision 1487
Added more options to gamess inp output filter.
Tweaked size policies of custom dialog widgets to fill out space a bit better.
Revision 1486
Removed extra call to QGLWidget::swapBuffers() in an attempt to fix odd Windows behaviour.
Revision 1485
Fixed - Custom dialog for failed expression generation was broken due to previous changes to radiogroup handling in widget nodes.
Added import of ESP charges to gamess logfile filter.
Revision 1484
Updated FAQ.
Revision 1483
Fixed - LineParser had not been updated correctly in line with 'newline' fixes for Windows.
Revision 1482
Partial update of years in copyright notice in source files (gui).
Revision 1481
Partial update of years in copyright notice in source files (render, templates, methods).
Revision 1480
Partial update of years in copyright notice in source files (parser).
Revision 1479
Partial update of years in copyright notice in source files (model).
Revision 1478
Partial update of years in copyright notice in source files (ff, main).
Revision 1477
Partial update of years in copyright notice in source files (command).
Revision 1476
Partial update of years in copyright notice in source files (classes).
Revision 1475
Partial update of years in copyright notice in source files.
Tweaked src/gui/grids.ui and src/gui/position.ui to remove rogue XML info on line 1.
Revision 1474
Added 'grids' and 'ngrids' accessors to ModelVariable.
Added 'data' function to GridVariable to allow retrieval of data.
Added 'colour' and 'secondarycolour' accessors to GridVariable, and renamed cutoff-related members to be more consistent with actual class.
Added 'Periodic' flag to Grid class, accessor, and GUI option.
Tweaked Tree::expandPath() to accept no array specification for list types.
Primitive::createCube now accepts origin coordinates as arguments.
Added RenderEngine::originCubes_ primitive.
Added WrapInt class, providing integer whose value is wrapped inside specified limits.
Added ability for Grids to be shifted point-wise along their axes.
Added options to show bounding cuboid for grid, and allow corrected rendering of periodic grid data.
Doc update.
Revision 1473
Fixed - SVG warning messages ("Could not add child element to parent...") related to text objects in stack_command.svg.
Rewrote parts of LineParser to recognise Mac, Windows, and UNIX linefeeds on all platforms.
Fixed - Issue with 'eof' command on Windows which would lose data when reading from a UNIX-newline file, related to incompatibilities with seekg and tellg in fstream's text mode.
Revision 1472
Fixed - Crash occurring when pressing multiple mouse buttons simultaneously, e.g.
drawing atom chain and then invoking context menu.
Revision 1471
Added basic PDC options to gamess output filter.
Revision 1470
Removed old key code enum from TCanvas.
Fixed - 'custom' colouring scheme did not have a keyword definition in Prefs::ColouringSchemeKeywords.
Added ability to cycle current drawing style with F8, and current colouring scheme style with F9.
Revision 1469
Fixed - Crash when attempting to set colour of atom selection from Selection menu.
Revision 1468
Update cif filter to handle basics of mmCIF.
Revision 1467
Added NETA selection to Select window.
Revision 1466
Doc update.
Reworked filtering of mouse move events to be based on time interval instead of call interval, and added GUI option to Prefs window.
Revision 1465
Added Prefs member mouseMoveFilter_ to control filtering of mouse move events, and associated accessor.
Revision 1464
Fixed - Type definition for thioether in GAFF.
Some debug output from UFF removed.
Fixed - 'data' member of PatternBound type had wrong array limit set.
Revision 1463
Added data/includes/* directory to contain commonly-used functions for use in filters and scripts, and functions to read.
Added Prefs::loadIncludes_ option and CLI switch.
Updates to gamess filter, including option to write ZMatrix instead of Cartesians.
Fixed - Uninitialised result variable in Program::execute() which occasionally prevented stored program from running if guiOptions were not invoked.
Revision 1462
Fixed - Parser grammar was missing definition for user-defined void function with arguments.
Fixed/Updated - 'radiobutton' and 'radiogroup' controls to be more flexible (and actually work properly).
Update GAMESS 'trj' filter to recognise IRC data.
Updated Gaussian 'gjf' export filter to allow choice between cartesian/z-matrix output.
Fixed - Titles of custom export dialogs were not set correctly.
Revision 1461
Removed debug output from Primitive.
Added deletion of gui.mainWindow to main() to account for lazy mismanagement of memory related to rendering primitive.
Revision 1460
Fixed - Severe memory leak in primitive vertex generation.
Revision 1459
Fixed - Missing GUI function, breaking windows and Mac builds.
Revision 1458
Removed filePath() function from src/base/sysfunc.h, since it was the same as absoluteFilePath().
Fixed - Memory errors / crashes from use of absoluteFilePath() and removePath() functions, arising from destruction of local objects.
Revision 1457
Tweaks to switch/case construct.
Added initial version of Gaussian export filter.
Reworked 'radiogroup' GUI control to be a container rather than a widget (needs testing).
Revision 1456
Added switch/case construct to grammar (needs proper testing).
Revision 1455
Addition of GUI options 'radiobutton' and 'stack'.
Fixed - Bad logic and use associated to Dnchar::find().
Extended GUI control 'state' parsing to allow no state value to be passed.
Removed needless virtual overloads in src/parser/parser_tree.cpp, and made all previously-virtual members of Tree class non-virtual.
Complete rewrite of main parser grammar.
Partial addition of 'switch/case' construct in parser grammar.
Revision 1454
Added 'printzmatrix' command which crudely outputs z-matrix for current model to the command-line.
Revision 1453
Corrected include path of QFileInfo in src/base/sysfunc.cpp to fix Windows/Mac builds.
Revision 1452
Fixed - Undo of cell removal was broken, and could not be re-done.
Finalised Interactive page on Command window.
Revision 1451
Removed debug output from LineParser::getNextArg().
Changed some file-based sysfunc routines to use QFileInfo for cross-system compatibility.
Fixed - Rotation of multiple bonds into bonc plane.
Fixed - Number shortcuts in Recent File menu were not updated correctly when a new file was loaded.
Fixed - Interactive mode would rerun all commands previously typed.
Added preliminary 'Interactive' page in Command window (not yet fully working).
Revision 1450
Removed some debug output from createExpression.
Revision 1449
Fixed - Script menu was not updated after loading a new script in the GUI.
Updated bool argument Program::execute() method to run GUI options part if specified.
Fixed - Running scripts from Scripts menu or Command window now launches custom dialog options if they exist.
Added Forcefield::containsType(ForcefieldAtom *type) function.
Model::dereferenceForcefield() now does a more thorough job, including invalidating current expression if necessary.
Fixed - Crash caused by Pattern and Model-global allForcefieldTypes_ lists not being cleared when recreating or applying new expressions (from, e.g., new forcefield).
Revision 1448
Fixed - options in mopac export filter (also corrects MOPAC minimisation).
Minimiser window now disables relevant controls when MOPAC minimiser is selected.
Tweaked alkyl fragments.
Fixed - Drawing fragments along existing bonds would occasionally (not) delete (wrong) atom.
Revision 1447
Fixed - Default cell size in Cell Define window was all zero.
Fixed - Drawing of oriented (not anchored) fragments was broken.
Revision 1446
Fixed - Display of aromatic rings in stick style.
Fixed - Augmentation of bonds, particularly aromatic rings, was not working correctly from toolbar button.
Fixed - Colouring of stick bonds.
Fixed - Display of multiple bonds in global stick style not working.
Removed unused Vec3<T>::rotate() method.
Revision 1445
Renamed Program source files (from forest.h|cpp to program.h|cpp).
Fixed - Crash in previous commit arising from NULL parent of mainProgram_ Tree in Program class.
Revision 1444
Changed list of trees in Forest to be single main program and list of filter-type trees.
Renamed Forest class to Program (source files will be renamed in next commit).
Revision 1443
Fixed - Pattern::initialise was returning internal ID number for start of pattern, rather than 'end-user' value.
Updated documentation.
Added simplistic amorphous silica script.
Added 'AVOGADRO' as recognised numerical constant in parser.
Added 'deleteff' command.
Fixed - Resetting of view when using orthographic projection now working correctly.
Revision 1442
Added Vec3<T>::abs() method to return absolute vector of elements.
Fixed - Hang on startup caused by Model::resetView when using an orthographic projection.
Updated Model::resetView() to better fit model to screen.
Revision 1441
Updated TODO.
Revision 1440
Reverted to old path structure on website, changing doc build script to match.
Revision 1439
Updated rendering of multiple stick bonds.
Revision 1438
Partial addition of multiple bond rendering for stick style.
Revision 1437
Updated doc build script to reflect adjusted website layout.
Revision 1436
Doc update.
Revision 1435
Added definition to CMakeList.txt in order to define _MAC on Mac.
Added compiler directive to include correct gl.h on Mac builds.
Revision 1434
Tweaked src/render/textprimitive.h to load different header for Windows compatibility.
Revision 1433
Fixed global compiler include -DNOMINMAX for Windows build (ADD_DEFINITIONS was in wrong place in root CMakeLists.txt).
Adjusted AtenCustomDialog::checkBoxWidget_clicked() to correctly compare boolean with integers in state change code.
Removed some unused variables from various routines.
Revision 1432
More tweaks and fixes to source headers.
Added global compiler include -DNOMINMAX for Windows build.
Revision 1431
Removed defunct src/render/surface.cpp and corrected src/render/CMakeLists.txt.
Revision 1430
Moved math functions into class of their own.
Added basic script to perform conformational searching.
Removed redundant /data/scripts/water245-energy.txt script.
Revision 1429
Removed debug output from LineParser::getArgsDelim.
Fixed - Incorrect output of number of angles found when Urey-Bradley definitions were present.
Fixed - Generation of torsions for expression failed if Urey-Bradley terms had been previously added (reordered term generation to fix).
Revision 1428
Adjusted layout of Build window.
Added checkbox option to Build window to allow prevention of atom folding after mouse-based transformations.
Doc update.
Revision 1427
Added some control options to MOPAC filter.
Fixed - Crash when critical gui widget options were not specified.
Fixed - Neatened error output when opening files for reading/writing.
Fixed - Checking and removal of duplicate scripts loaded on startup.
Revision 1426
Added missing src/gui/useractions.h and src/gui/useractions.cpp to repo.
Revision 1425
Merge changes from 'render' branch back into trunk.
Revision 1420
Fixed - Windows build was not generating zip package.
Revision 1402
Rewrote example script 'dipole.txt' which was still using the defunct scripting language format.
Revision 1399
Updated gamess filter to better read in vibration data.
Added missing 'nvibrations' code to ModelVariable.
Revision 1389
Added literal measurement calculation value (i.e.
non-mimd) to Measurement class, and added accessors to variable and rendering of additional value.
Gamess-US log import filter now names models more appropriately.
Gromacs top export filter now uses forcefield type masses throughout.
Revision 1375
Fixed - Erroneous output from 'measureselected' command.
Revision 1373
Fixed - Some discrepancies between context menu atom IDs and those sent to commands.
Minor tweak to grammar.
Revision 1365
Fixed - Some discrepancies between context menu atom IDs and those sent to commands.
Minor tweak to grammar.
Revision 1363
Tweaked some ui files to fix more builds.
Revision 1362
Changes to widget usage in CustomDialog ui and funcs to attempt build fixes.
Revision 1361
Changes to widget usage in CustomDialog ui and funcs to attempt build fixes.
Revision 1356
Fixed - Prefs values 'useframebuffer', 'usenicetext', and 'tempdir' were saved incorrectly.
Revision 1350
Fixed - getNextArg was not using defined read options.
Revision 1349
Added back in optional allowDummy argument to Model::createExpression(), but its usage is now correct.
Updated gromacs 'gro' file export to use pattern definitions and write correct 'residue' information.
Changed wording of 'Set Default' button in Prefs window to 'Save as Default'.
Changed Prefs::updateEnergy*() routines to return FALSE on first step.
Corrected output of CG minimiser which was printing RMS force instead of total energy on Init step.
Revision 1347
Corrected output of main parser grammar to raise error when encountering an undefined function name.
Renamed some tokens in main parser grammar to prevent Windows build from failing.
Heavy update to forcefield editor.
Revision 1346
Fixed - dlpoly FIELD file import filter tweaked, and energy unit conversion added.
Revision 1345
Added '--keeptypes' CLI switch to allow assignment and fixing of atom types names when converting from forcefield type names.
Doc update.
Revision 1343
Removed 'allowdummy' argument of Model::createExpression() and Pattern::createExpression() since it was unnecessary and being awkward.
Removed some debug output from atom colour changes.
More updates to ForcefieldEditor.
Revision 1339
Fixed - Selection by ranges had become broken somehow.
Corrected 'mopacminimise' command to use defined paths/command in Prefs.
Prefs window settings for external programs now functional.
Added 'mopacexe' and 'tempdir' accessors to PrefsVariable.
Fixed - Prefs file saving was not taking 'aten' directory difference between Windows and Linux into account.
Revision 1338
Partial (heavy) update to forcefield editor.
Revision 1337
Updated Prefs::convertEnergy() to accept optional 'to' unit (default is current internal units).
Added Prefs::autoConversionUnit_, used when (and only when) in a filter automatically converts energetic forcefield parameters accessed through variables.
Added 'autoconversionunit' command, but no corresponding PrefsVariable accessor.
Added functions to Forcefield to allow for term searching by type names.
Added 'find*' functions to ForcefieldVariable to allow searching of defined terms.
Corrected Gromacs topology export filter to write energies only in kJ.
Doc update.
Added command-line switches '-e' and '--expression' for expression import.
Added 'null', 'lowercase' and 'uppercase' commands.
Added 'nangles', 'natomtypes', 'nbonds', 'ntorsions', and 'nimpropers' accessors to ForcefieldVariable.
Modified 'angledef', 'bonddef', 'torsiondef', and 'typedef' commands to return the newly-created object pointer.
Quietened error output of VTypes::dataPair() in favour of better type checking in Tree::checkBinaryOperatorTypes and Tree::checkUnaryOperatorType.
Revision 1336
Corrected output of Morse bond potential paremeters in dlpoly field file export.
Added in ability to utilise defined ImportExpression filters from the GUI.
Fixed - Improper return value in Maat3<T>::element() function.
Revision 1335
Added missing doc/images/window_command_index.png to repo.
Revision 1334
Removed 'simplexminimise' command shell - it was never going to be implemented.
Added 'mopacminimise' command and GUI access.
Added separate working models list to Aten, useful for internal filter-related stuff.
Updated default Linux/Windows paths.
Added storage and access for temporary directory and MOPAC executable to Prefs class, related PrefsVariable accessors, and Prefs window widgets (partial).
Revision 1333
Added Model::selected(int n) to retrieve nth selected atom.
Added 'selection' accessor to ModelVariable.
Added for/in loops.
Revision 1332
Fixed - Atom custom colour is now copied in Atom::copy().
Added 'recolouratoms' command to reset custom colours to element defaults.
Added colour section to selection/context menu.
Fixed - Crash when trying to redo the very first stored undone state.
Revision 1331
Removed all angle brackets from command syntax and descriptions, and corrected some minor mistakes in syntax strings.
Fixed - Command search in Command window now works properly.
Doc update (Command window).
Revision 1330
Changed rendering of Globe glob to always use 10 stacks/slices instead of the current atom detail setting.
Removed all cylinder-style globs in favour of drawing them properly, but by hand.
Fixed - Calculation of bond planes on atomic centres was not working correctly.
Detection of aromatic rings in fused-ring systems should now work better.
Rendering of aromatic rings vastly improved, but still needs tweaking for complex systems (e.g.
fused rings).
Revision 1329
Added --nofilters CLI option.
Fixed - Horrific Grammar Bug No.
1, where all statements following a function declaration were hidden (grammar has been rearranged and rewritten).
Fixed - CommandParser::peekChar was improperly returning the first character on the following line in the case of a stringlist source, when it should really have been a newline or similar.
Fixed - Horrific Parser Bug No.
1, where a real number beginning with a period and placed immediately after a symbol was causing unknown symbol errors.
Fixed - Horrific Parser Bug No.
2, where a real number beginning with a period was recognised as an integer by the parser.
Revision 1328
Moved labels displaying percentages in Grids window to more approprite positions.
Added KDevelop4 project file to repo.
Revision 1327
Fixed - Potential crash when reloading script file which no longer exists.
Revision 1326
Renamed 'geometric' keyword to 'geomdat' to prevent clashes with named combination rules.
Added some extra output when reading a forcefield file which has missing data in certain blocks.
FIxed - Secondary cutoff controls in Grids Window were not working properly.
Fixed - Drawing of secondary surface for grid could not be turned off.
Revision 1325
Renamed 'geometric' keyword to 'geomdat' to prevent clashes with named combination rules.
Added some extra output when reading a forcefield file which has missing data in certain blocks.
FIxed - Secondary cutoff controls in Grids Window were not working properly.
Fixed - Drawing of secondary surface for grid could not be turned off.
Revision 1323
Removed specific measurement commands 'distance', 'distances', 'angle', 'angles', 'torsion', and 'torsions'.
Added 'geometry' command which uses same argument style as 'measure', but does not create a measurement in the model ('measure', on the other hand, does).
Added 'measureselected' command which adds all measurements of the specified bound type (number of atoms) in the current atom selection.
Renamed old 'geometry' analyise command to be 'geometric' to prevent conflict with new 'geometry' measuring command.
Revision 1322
Fixed - Corrected syntax definitions for angle and torsion commands.
Fixed - Measure was still printing data.
Revision 1321
Fixed - Some updates of GUI were incorrect owing to undo() and redo() methods improperly logging a visual change.
Revision 1320
Updated CellDefine window to work with Cell matrix rather than cell lengths and angles, and added separate page to set matrix from lengths/angles.
Fixed - Had forgotten to remove default printing of new measurement values in Model::addMeasurement(), and measured values were still not being return correctly.
Modified CellEvent to store matrices rather than lengths and angles.
Revision 1319
Fixed - measurement functions in Model were doing several bad things, probably causing crashes.
Fixed - Distance and angle measurement commands were not returning values.
Add optional argument to all measurement commands to prevent printing of measured values (default = FALSE).
Revision 1318
Added UreyBradleyInteraction as a new ForcefieldBound::type.
Improper and Urey-Bradley terms are now created with the correct types.
Added 'type' accessor to PatternBoundVariable.
Removed separate (wasteful) file and code for Urey-Bradley terms, and now reuses bond code instead.
Added new Gromacs topology file export filter.
Revision 1317
Added placeholders for additional messaging/gui functions.
Revision 1316
Calling 'error' command now also displays a modal message box in the GUI as well as printing the message.
Renamed 'finddata' function in ForcefieldBoundVariable and PatternBoundVariable to 'parameter', and added similar function to ForcefieldAtomVariable.
Removed redundant declarations of 'generator*' functions in ForcefieldAtomVariable.
Removed prevention of unary operators acting on ElementData, ForcefieldAtomData, and ForcefieldBoundData (in Tree::checkUnaryOperatorTypes).
Renamed some members of ForcefieldBound to be more consistent (style -> form).
Removed Morse2 bond form, and corrected Morse form (renaming 'k' to 'B').
Revision 1315
Fixed - 'form' accessor of ForcefieldBoundVariable did not, when set, store default parameter values for the functional form specified, since ForcefieldBound::setForm() was being a very lazy boy.
Fixed - Some type descriptions in UFF were rubbish, and cos angle terms should have had s parameter set to -1.0.
Revision 1314
Added cutoff-related accessors to GridVariable.
Extended 'gridcutoff' command to accept upper cutoff value, and added complementary 'gridcutoffsecondary' command.
Revision 1313
Tweaked controls and signal usage of Grids window to make changing cutoffs easier.
Changed 'Integrals' in Grids window to be 'Sums' to avoid confusion.
Removed isSymmetric flag from Grid class in favour of more flexible pair of secondary cutoffs.
Modified Grids window to provide access to secondary cutoffs.
Renamed many functions and variables in Grid class to reflect changes.
Doc update (grids).
Renamed 'gridcolour' and 'gridcolournegative' commands to 'gridcolourprimary' and 'gridcoloursecondary'.
Added organization name to QCoreApplication, and moved setting data to before creation of main AtenForm, which would otherwise break saving of QSettings on Windows platforms.
Note: Partial, broken commit.
Revision 1312
Added 'noqtsettings' accessor to PrefsVariable.
Revision 1311
Finalised script reloading through GUI.
Revision 1310
Added Forest::reload() method.
Fixed - Some example scripts were wrongly using 'nmols' instead of 'setnmols'.
Reinstated Scripts menu, linked to contents of Command/Script window (partial).
Revision 1308
Fixed - Bug in torsion angle generation for rule forcefields introduced when implementing dummy term generation.
Added 'expand', 'selectall', and 'selectnone' functions to ModelVariable.
Made edit operations a little more verbose.
Revision 1307
Added missing increase and decrease code for ZMatrixElementData variable.
Added 'element' accessor to AtomVariable, returning pointer to ElementData.
Removed pointless ZMatrix::updateModel() function, replacing calls with single line of code.
Fixed - ZMatrixElements were created without the parent_ pointer being set, leading to convincing crashes.
Revision 1306
Allowed renaming of custom dialogs.
Added FilterData::isExportFilter() function.
Custom dialogs are now named appropriately depending on the type of associated filter (import or export).
Added 'radiogroup' GUI control type.
Static Tree creation (e.g.
for custom GUI dialogs) now proceeds through Tree constructor rather than Forest constructor.
Corrected generic function callback for integer spinbox in CustomDialog.
Modifier Messenger to print specific output type messages to console regardless of whether GUI exists or not.
Added better boundary checking to Pattern::updateScaleMatrices().
Added ability to generate (and store locally in Patterns) dummy forcefield terms in order to satisfy expression creation.
Updated '(re)createexpression) to accept optional flag to allow dummy term generation.
Revision 1305
Tweaked rendering to display surfaces with repeat cell units.
Revision 1304
Updated root CMakeLists to add in missing QtSvg imageformat for Windows package.
Revision 1303
Changed Aten::addFragmentFromSelection() to be a void function rather than (pointlessly) returning a Model pointer.
Revision 1302
Added Urey-Bradley storage, definitions, and energy/force calculation to Pattern class, relevant file I/O to Forcefield, and detection of terms.
Renamed Energy class to be EnergyStore.
Added EnergyStoreVariable and accessors and (basic) Site variable.
Added 'energy' accessor to ModelVariable, returning pointer to associated EnergyStore.
Fixed some non-POD errors from Dnchar usage.
Revision 1301
Added ReturnValue constructor for pointer types.
Extended 'loadmodel' command to accept a model pointer variable as optional third argument, set to the new current model after load.
Renamed 'nmols' command to 'setnmols', and added 'nrequested' accessor to ModelVariable.
Revision 1300
Fixed - Mouse cursor seemed to be unset over main view on startup.
Revision 1299
Tweaked dnchar.cpp to fix Windows build.
Removed many uses of char[] in GUI functions.
Revision 1298
Removed script-related actions from mainwindow.h, infavour of (finally) completed scripts page in Command/Scripts window.
Added Command Help to Command/Scripts window.
Removed Scripts menu and Command Help window.
Revision 1297
Fixed - lww-il.ff had cos torsion terms listed in wrong order.
Added search functions to bond, angle, and torsion functions.
Added 'finddata' function to ForcefieldBoundVariable and PatternBoundVariable.
Updated dlpoly FIELD export filter to use 'finddata' function.
Replaced many more uses of standard char[] with Dnchar and associated routines.
Character addition operator += in Dnchar now extends storage by 100 characters at a time instead of 1.
Closing Vibrations window now stops animation at the same time.
Revision 1296
Fixed - dmimcl-fm.ff had wrong charge for N.
Fixed - Both dmimcl-fm.ff and dmimcl-fm2.ff has torsion parameters in the wrong order.
Fixed - Using DoubleExp::set did not recalculate actual value_, meaning e.g.
ewald precision could not be set properly.
Fixed - dlpoly FIELD filter was writing cos torsion parameters in the wrong order.
Revision 1295
Removed many delete[] statements remaining from changing char array usage to Dnchar.
On Windows, user's 'aten' directory should now be referenced without the preceding dot.
Fixed - 'setvelocities' command was probing the wrong argument number for the atom/id.
Revision 1294
Added 'operator const char*()', 'rFind()', 'eraseFrom()', and catPrint() functions to Dnchar.
Removed many uses of strcat throughout code, in favour of new Dnchar functions.
Revision 1293
Corrected siesta filter to use Bohr in vectors file.
Revision 1292
Fixed - Doc build was broken.
Revision 1291
Fixed - Crash when swapping between vibrations while viewing them.
Revision 1290
Fixed - Playing a trajectory to the end would lock Canvas in read-only mode.
Revision 1289
Updated Vibrations window to include vector scale and render delay controls.
Rendered cylinder vibration vectors look better now.
Added Canvas::editable_ flag to disable interactive elements of the Canvas, except for view manipulations.
Canvas is now 'read-only' when viewing vibrations or trajectories.
Revision 1288
Added 'ANGBOHR' as recognised lexer constant.
Updates SIESTA filter to read in vectors files.
Vibrations now display with original bonds.
Revision 1287
Rendering of vibration vector arrows fixed.
Proper rendering of vibrations implemented.
Revision 1286
Renamed Model::trajectoryParent_ to Model::parent_ to make it more general.
All routines in Model which were aware of parent_ pointer (mostly view-related routines) now pass through to the parent function rather than just returning the parent's value, allowing parent values to be retrieved from any depth.
Added ModelType enum to Model class (currently unused).
Revision 1285
Vibrational display implemented, but not working correctly.
Revision 1284
Fixed - Aten's 'frame' accessor variable was wrongly using Model::renderSource() instead of Model::renderSourceModel().
Revision 1283
Replaced 'bool Model::renderFromSelf_' with an enummed Model::renderSource_ comprising model, trajectory, and vibration flags.
Updated Vibrations window.
Renamed many trajectory-related variables and functions in Model to explicitly separate them from potential new functions related to vibration frames.
Added 'intensity' and 'rmass' accessors to Vibration variable.
Heavily updated gamess filter to read un basis set, MO, and vibrations data.
Revision 1282
Adapted Eigenvector and BasisShell functions to accomodate both cartesian and spherical basis function types.
Tweaked Basis view window.
Added ability to draw vibration displacement vectors on model (from Vibrations window).
Revision 1281
Updated vibrations window.
Revision 1280
Merged in minor changes from aten-vib branch.
Added basic Vibrations window to GUI (incomplete).
Update 'bohr' command to actually recognise some objects.
Added 'toangstroms' function to Model variable.
Made Format-ted reading aware of SkipLines.
Revision 1279
Added 'group' accessor to Element variable.
Updated uff.ff with torsion generation.
Revision 1278
Added 'datakeyword', 'dataname', and 'nparams' accessors to ForcefieldAtom variable.
Fixed - VDW generation was broken since the wrong function name was searched for.
Update UFF test script.
Added 'generatevdw' command.
Removed specific UFFLj vdw form - sanity has returned.
Removed some defunct routines related to hardcoded generator functions.
Fixed - Assignment of atom environments was horribly broken, causing problems with forcefield type assignment.
Fixed - On changing the internal unit of energy, energetic forcefield parameters were not converted.
Fixed - Detection of ring type did not set aromatic bond property.
Updated Atom::findBondPlane() to be more consistent when aromatic bonds exist.
Updated renderer to draw aromatic bonds in wireframe style.
Revision 1277
Refixed - LJ forces not particularly broken.
Added (partial) test script for UFF parameter generation.
Added 'generatebond', 'generateangle', and 'generatetorsion' functions, and renamed accepted generator function names in forcefields to 'vdwgenerator', 'bondgenerator' etc to avoid clashes with new commands.
Fixed - Elements of a constant array of type 'string' could not be accessed.
Added 'nparams', 'datanames', 'datakeywords' accessors to ForcefieldBound variable.
Revision 1276
Removed 'n' parameter from LjN.
Added UFFLj vdw style, taking D, sigma, and N parameters.
Fixed - Forces for Lj were calculated incorrectly.
Updated uff.ff.
Revision 1275
Removed debug output from LineParser::getCharsDelim(Dnchar,Dnchar).
Added 'nbasisshells', 'nbasiscartesians', and 'neigenvectors' accessors to Model variable.
Added 'eigenvalue' and 'occupancy' accessors to Eigenvector variable.
Removed many calls to closeFile() in LineParser which affecting the usability of the parsing routines.
Fixed - 'find' command was not resetting file position properly if the search string was not found, since the file needed a clear() before the seekg() call.
Removed debug output from PointerArrayVariable::executeAsArray().
Extended BasisShell class with more shell name information.
Added Kelvin energy units.
Some corrections to uff.ff.
Revision 1274
Added ViewBasis and ViewEigenvector dialogs (partial).
Fixed - Crash in Pattern::vdwInterPatternEnergy() and Pattern::vdwInterPatternForces().
Added 'nextvararg' function to grab (and remove) next delimited argument from supplied string variable.
Revision 1273
Modified LineParser::readLine() to accept optional argument to keep file open after reaching eof (default is TRUE).
Fixed - No code for any model accessor functions had been linked in.
Creating Bundle with Model pointer as constructor argument now sets both 'm' and 'rs' data members.
Fixed - Error function was not returning properly from filters.
Revision 1272
Added test h2 GAMESS-US output files as basic test of forthcoming orbital plotting.
Moved around and renamed most of the basis/eigenvector source files to better represent the contents.
Revision 1271
Added static QStrings to save dialog codes to remember last-used filters.
Added storage for basis functions and eigenvectors in Model class.
Implemented accessors for basis functions and eigenvectors.
Fixed - ForcefieldAtomVariable's 'data' member could only be set by array index, and not assigned an array of values.
Revision 1270
Added Selection->CreateFragment menu item allowing creation of a new fragment from the current atom selection.
Modified fragment builder to allow positioning along any bond of target atom, instead of just hydrogens (cycle with Ctrl).
Added shift modifier to Transmute tool, transmuting all atoms of the same element type as the clicked atom.
Doc update.
Tweaked gamess filter.
Revision 1269
Added optional 'markonly' flag to several selection-related transforms in Model class.
Fixed - Measurements were not updated after performing 'setdistance'.
Added code to perform state changes on signals of other widgets (doublespin makes literal comparison of values, and so will not work as expected).
Fixed - File->Save and 'savemodel' command now properly store values from custom dialog.
Fixed - Return of original source string by 'beforestr' and 'afterstr' if no search string was found was broken.
Revision 1268
Added DEGRAD as recognised constant in parser-lexer.
Removed 'generator' keyword from forcefield files, since 'data' keyword performs exactly the same function.
Updated selection and deselection commands and GUI Window to accept a comma-separated list of selection actions.
Added Model->CreateExpression menu item.
Updated uff with new rules (testing still required).
Doc update.
Revision 1267
Tweaked 'beforestr' and 'afterstr' commands to take an extra optional flag to return the source string if no match is found.
Old rule-based forcefield generation code removed in favour of new, file-based definitions of functions (in progress).
Fixed - Warning would be issued for missing extra data for atom types, even if it was all supplied correctly.
Added 'findbond' function to AtomVariable.
Implemented missing set functions in ForcefieldBoundVariable.
Added 'convertenergy' function to AtenVariable.
Modified all variable accessor set code to accept arrays of any size, provided it is less than or equal to the limit of the desination array.
Partial update of UFF to use new parameter generation style.
Revision 1266
Tweak - 'find' command now returns to previous file position if search string is not found.
Updated g03 filter to read in coordinate sets in standard orientation.
Fixed - Partial picked atom selection is now cleared when canvas mode is changed.
Revision 1265
Added preliminary BasisFunction and Eigenvector classes.
Fixed - Rotation of torsion angles through 'settorsion' command or GUI did not rotate atoms attached to atom 'k'.
Removed debug output from state setting functions in widgetnode.
Removed debug output from DoubleExp::set.
Fixed - Calculation of selection centre of mass was wrong.
Revision 1264
Added preliminary Gaussian03 log import filter.
Fixed - Grammar for do/while loops was broken.
Revision 1263
Fixed - Crash arising from long line length in gamess filter (from previous commit), overflowing token storage in the main lexer.
Implemented ability to change states of several GUI control types.
Updated gamess filter.
Revision 1262
Updated gamess filter to fix a few formatting issues and add some extra controls/functionality.
Added ability to link changes in GUI controls to property setting of other controls.
Fixed - Crash when exporting two files of the same format which has GUI widgets defined.
Custom dialogs are now individually-created dialogs, owned by the relevant tree (filter).
WARNING - This revision is not fully operational.
Revision 1261
Re-tweak to md.ui file to fix build on some RH-based distros.
Revision 1260
Tweaks to several ui files to fix builds on RH-based distros.
Revision 1259
Removed annoying spurious xml headers from seversl ui files.
Revision 1258
Updated Grid class (and Grids window) to calculate (and display) total and cut volume integrals.
Revision 1253
Tweaked src/gui/canvas.cpp to fix Windows build after addition of GL_MULTISAMPLE usage.
Revision 1252
Corrected title of Select window, and updated control layout a little.
Doc update (new GUI additions).
Moved 'showall' command to Model section.
Revision 1251
Fixed - Crash related to ownership of main rendering context (e.g.
GLXBadContextTag errors), which can be prevented with the --nofragmenticons CLI switch.
Revision 1250
Fixed - Occasional crash resulting from AtenCustomDialog-created widgets being double-freed.
Fixed - Combination of VDW parameters was broken when two types had the same name.
Big update to oplsaa.ff, adding equivalents to allow atom types having same names yet different VDW parameters.
Revision 1249
Added 'style' accessor to Atom variable.
Added support for reading/writing atom style and custom colour information to akf format.
Revision 1247
Added missing src/gui/select.h to dist.
Fixed - Relatively large memory leaks arising from parts of the GUI not properly being deleted.
Fixed - Type 107 in oplsaa.ff was incorrect, breaking all-atom carbons in tert-alkanes.
Select Window fully implemented.
Revision 1246
Added skeleton files for Select window.
Added Transmute Selection button to Build toolbar.
Fixed some alcohol type descriptions (157-159) in oplsaa.ff.
Revision 1245
Fixed - Dummy element XX (0) could not be set through aten.elements[] accessor.
Revision 1244
Reworked GuiFilterOptionNode to be a more generic WidgetNode.
Added overloaded Forest constructor which takes a string of commands to generate.
Generation of widgets associated to Trees moved to Forest::finalise().
Increased number of decimal places in custom DoubleSpin widgets to 5.
Doc update.
Added Paste Translated menu option.
Changed status of edit menu items based on the clipboard contents and current model selection.
Revision 1243
Reworked FilterOptionsDialog to be a general means for displaying on-the-fly generated widgets in a dialog (AtenCustomDialog).
Revision 1242
Fixed - Control of widgets in Glyphs window was incorrect.
Revision 1241
Added ability to assign any colour to individual atoms.
Added 'colour' accessor to AtomVariable.
Added 'colouratoms' command to set colour of current atom selection.
Added 'custom' option to atom ColouringSchemes (and added missing 'velocity' scheme to menu).
Renamed some functions in Model class for clarity/consistency.
Added UndoEvent for custom atom colour changes.
Revision 1240
Tweak to previous commit.
Revision 1239
Added more options to gamess filter.
Added fractional position access to Atom variables.
Revision 1238
Made 'data' member of ListItem template class private, adding set/get methods.
Added 'option' keyword to command parser lexer, allowing for definitions of GUI-based filter control options (through FilterOptionNode).
Converted src/base/kvmap.h to a template to accomodate any value datatype rather than just a character string (old Dnchar/Dnchar-based class still remains for time being).
Fixed - Horrible bug in Dnchar's copy constructor, which was not initialising any class values.
Renamed argument addition functions in TreeNode class for clarity.
Command parser now allows built-in functions to be hidden by new variable declarations of the same name.
Added filter options dialog to create and display user-defined filter options (still in development).
Revision 1237
Fixed - Altering torsion angle of selected atoms through Geometry window was not working, since no code had been written(!).
Fixed - Adjustment of torsions through ZMatrix editor.
Added modification of torsion variables through ZMatrix window.
Revision 1236
Renamed search functions in List and Reflist to be clear and consistent with each other.
ZMatrix generation should now be much better, using any available bound neighbours to define angles and torsions.
Fixed - Reflist::addStart() was not updating list tail pointer.
Revision 1235
Fixed - Setting view along Cartesian axes was broken (mismatch between radians/degrees).
Revision 1234
Replaced explicit mantissa/exponent variables in MDEngine with a single DoubleExp.
Added ZMatrix and ZMatrixElement variables for script/filter access.
Added static functions to Command to allow 'terse' retrieval of data within code.
Added many function accessors to Model variable duplicating standard commands.
Doc update - added function accessor info for some variable types.
Added SelectVariable dialog for use in ZMatrix editor.
ZMatrix creation now working.
ZMatrix editing through GUI now working.
Added functions to Model to explicitly set distance, angle, and torsion of 2/3/4 atoms.
Changed Model::angle(), Cell::angle(), Model::torsion(), and Cell::torsion() to return angles in degrees rather than radians, and modified functions throughout to match.
Revision 1233
Some work on ZMatrix window.
ZMatrix generation not yet working.
Revision 1232
Merged basic MD window definitions (from svn/branches/aten-md, r1122-1123) into trunk.
Add initial ZMatrix class and bare GUI window to permit creation and editing of z-matrices for models.
Revision 1231
Fixed - New pointerpair.h template was missing from relevant Makefile.am, meaning it was left out of distribution.
Revision 1230
Fixed - Calculation of interpattern Coulomb forces would cause a crash.
Tweaked minimiser outputs again, primarily to be more verbose.
Fixed some text typos in forcefield commands.
Extended Bundle constructors to allow for setting of single pointer on creation.
Added mechanism for calling commands with a custom pointer bundle.
Added term generation accessor functions to ForcefieldVariable.
Replaced some usages of Commands structure within main Aten singleton with references to static Commands::data.
Removed data/scripts/points.txt.
Revision 1229
Doc update - minor corrections.
Moved gui/icons/stack_edit.svg to gui/icons/stack_build.svg.
Revision 1228
Doc update - moved example images from examples/images to main images/ directory, and tweaked ice and alumina examples which had wrong image links.
Tweaked output columns of MC builder.
Added PointerPair/PairTable template, to store a pair of pointers of given type which are associated with an array of data of a different type.
Fixed - New combination rule code had crippled energy/force calculation, making it so slow as to be unusable for modest systems (combined parameters now pre-calculated as part of Model::createExpression()).
Added extra value access functions to EnergyStore.
Made output of SD minimiser a little more verbose.
Fixed - Bug in energy calculation for BondConstraint angle type.
Added Prefs::shouldUpdateModel() method.
Revision 1227
Fixed doc build script which wasn't rewriting image links in the examples.
Revision 1226
Fixed - Pattern detection was broken in a previous commit.
Doc update - old tutorials now included in examples manual.
Revision 1225
Added further const declarations to some class methods.
Revision 1224
Improved LoadModel dialog, adding tooltips, KeepNames checkbox, Format combo, and fixed Bohr conversion.
Added array-based item access to Reflist class.
Added const declarations to many class methods throughout.
Moved some method code out of MethodCg and LineMinimiser headers.
Revision 1223
Added MAXELEMENTS constant for use in pattern generation routines.
Pattern generation now correctly checks bonds within molecules.
Revision 1222
Misc tweaks to source to remove some warnings.
Removed setFirstItemSpanned() call in fragment_funcs.cpp to remove incompatibility with RHEL.
Revision 1221
Removed 'leftMargin', 'rightMargin', 'topMargin', and 'bottomMargin' propert definitions from QBoxLayouts in glyphs.ui, grids.ui, and position.ui since they do not get moc'd properly with the Qt version supplied in RHEL (no other ui files contained the definitions).
Revision 1220
Tweaked command.ui and mainwindow.ui, since the top xml tag appeared to be confusing builds based on RHEL.
Revision 1219
Fixed - Bug in 'initgrid' which was incorrectly using the three grid dimensions.
Fixed - Bug in Grid::initialise() which wasn't correctly checking the grid size limits for 3D grids.
Revision 1218
More functionality added to Glyphs window.
Default text for Text glyphs added.
Fixed - Renderer would complain (wrongly) that it didn't know to draw text glyphs (type 9 and 10).
Fixed - Espresso export filter used 'writeline' where it should have used 'writelinef'.
Changed autoDefault properties of many buttons in the GUI to prevent tool windows from closing / acting without warning after editing text or numbers.
Revision 1217
Completed basic glyph addition via context menu.
Revision 1216
Fleshed out Glyphs window.
Added Model::removeGlyph() method.
Partial addition of glyph creation to atom context menu.
Revision 1215
Reordered GlyphType enum to be vaguely alphabetic.
Added 'ndata' and 'rotated' members and 'recolour' function to GlyphVariable, and 'atom' and 'atomdata' members to GlyphDataVariable.
Added glyph support to akf filter.
Fixed - GlyphData did not have associated inc/dec methods.
Changed default state of 'Force Update' checkbox in Command window to 'checked'.
Revision 1214
Added basic glyph window (no functionality yet).
Fixed - LineParser would complain about files already open, stemming from file source not being closed after string search in Aten::probeFile().
Revision 1213
Added ability for Grid class to store ungridded data through list of GridPoints.
Removed Grid::setType() method in favour of general Grid::initialise() method.
Removed 'gridsize' command, replacing with 'initgrid'.
Adjusted grid import filters to use new commands.
Added shell for Delaunay 3D tetrahedralization algorithm.
Fixed - Vector toCartesian() and toSpherical() routines were assuming and setting radians respectively, instead of degrees.
Revision 1212
Added new 'glyphcolours' command to set all data points of glyph to same colour simultaneously.
Reworked glyph option specification to use a proper enum.
Added 'colour' text option to 'newglyph' command.
Added 'espresso' filter, missing from previous commit.
Revision 1211
Added preliminary Quantum Espresso filter.
Fixed - Declaration and usage of user-defined functions within filters (they were being lost in an extraneous tree).
Fixed - Output of pure strings with printf function (nothing was output, bug in Format::writeToString).
Fixed - Current model pointer was not reset after loading of fragments.
Revision 1210
Mopac arc import filter now handles superlarge systems correctly.
Added 'centre' accessor to CellVariable to return cell centre as a vector.
Revision 1209
Tweaked 'rebond', 'centre', and 'fold' commands to respect file sources a bit more, so preventing them with CLI switches works more correctly.
Revision 1208
DL_POLY config import filter now no longer sets zmapping type itself.
Revision 1207
Fixed - Matrix transformation through the Transform window was broken.
Fixed - Free rotation of selection in periodic systems.
Revision 1206
Added 'sprintf' command, essentially as an alias for 'writevarf'.
Revision 1205
Fixed - Patterns would always complain about reaching maximum allowed ring limit, even if no were detected.
Made batch export mode a little more verbose.
Revision 1204
Fixed - Atom set commands did not accept an atom pointer as the optional argument.
Added early support for Chem3D cc1 files.
Revision 1203
Fixed - Crash when element conversion gave a number that was out range.
Forcefield load window now begins in Aten's data directory.
Fixed - dlpoly FIELD filter was referencing 'ljopls' instead of 'ljgeom'.
Revision 1201
Long options are now accepted in the format '-option' as well as '--option' for compatibility8 with Windows environments.
Fixed - CLI options '--nofragments' and '--nofragmenticons' had no effect.
Revision 1200
Added Gromacs configuration (.gro) import/export.
Gromacs 'rtp' filter now contained within general 'gromacs' filter.
Revision 1199
Removed debug output from cif filter.
Fixed - Hideous bug in Mat4<T> *= T which was using an out-of-bounds array index.
Fixed - Free rotation of selection about its centre of geometry was broken when the view was rotated.
Revision 1198
Fixes to specfile (mandriva).
Tweaked src/gui/fragment_funcs.cpp to fix Windows build.
Revision 1194
Beta version bump to 1.6.
A
- angle bending, Angle Functional Forms
B
- bond stretch, Bond Functional Forms
C
- changelogs
- 1.1, Version 1.1
- 1.2, Version 1.2
- 1.3, Version 1.3
- 1.4, Version 1.4
- 1.5, Version 1.5
- 1.6, Version 1.6
- colourscales, Colourscales
- combination rules, VDW Functional Forms
- command language
- arrays, Arrays
- blocks, Blocks, Scope, and Variable Hiding
- constants, Predefined Constants
- functions, Functions
- return values, Return Values
- style, General Input Style, General Input Style
- user functions, User Defined Functions
- variables, Variables
- command line, The Command Line
- command line switches, Switches
- --atendata, A
- --batch, B
- --bond, B
- --cachelimit, C
- --centre, C
- --double, D
- --export, E
- --exportmap, E
- --expression, E
- --ff, F
- --filter, F
- --int, I
- --keepnames, K
- --keeptypes, K
- --nobond, N
- --nocentre, N
- --nofold, N
- --nofragmenticons, N
- --nofragments, N
- --noincludes, N
- --nopack, N
- --noqtsettings, N
- --pack, P
- --string, S
- -b, --bohr, B
- -c, --command, C
- -d, --debug, D
- -f, --format, F
- -g, --grid, G
- -h, --help, H
- -i, --interactive, I
- -k, --keepview, K
- -m, --map, M
- -n, N
- -p, --pipe, P
- -s, --script, S
- -t, --trajectory, T
- -u, --undolevels, U
- -v, --verbose, V
- -z, --zmap, Z
- fold, F
- commands
- abs, abs
- addframe, addframe
- addgridpoint, addgridpoint
- addhydrogen, addhydrogen
- addnextgridpoint, addnextgridpoint
- addpoint, addpoint
- addreadoption, addreadoption
- adjustcell, adjustcell
- afterstr, afterstr
- angledef, angledef
- atof, atof
- atoi, atoi
- atomstyle, atomstyle
- augment, augment
- autoconversionunit, autoconversionunit
- autoellipsoids, autoellipsoids
- autopolyhedra, autopolyhedra
- axisrotate, axisrotate
- axisrotateview, axisrotateview
- beforestr, beforestr
- bohr, bohr
- bonddef, bonddef
- bondtolerance, bondtolerance
- cell, cell
- cellaxes, cellaxes
- centre, centre
- cgminimise, cgminimise
- chain, chain
- charge, charge
- chargeff, chargeff
- chargefrommodel, chargefrommodel
- chargepatom, chargepatom
- chargetype, chargetype
- clearbonds, clearbonds
- clearcharges, clearcharges
- clearexportmap, clearexportmap
- clearexpression, clearexpression
- clearlabels, clearlabels
- clearmap, clearmap
- clearmeasurements, clearmeasurements
- clearpatterns, clearpatterns
- clearpoints, clearpoints
- clearselectedbonds, clearselectedbonds
- cleartrajectory, cleartrajectory
- contains, contains
- converge, converge
- copy, copy
- cos, cos
- createatoms, createatoms
- createexpression, createexpression
- createpatterns, createpatterns
- currentatom, currentatom
- currentmodel, currentmodel
- currentpattern, currentpattern
- cut, cut
- debug, debug
- defaultff, defaultff
- delete, delete
- deleteff, dleteff
- deletemodel, deletemodel
- deselect, deselect
- disorder, disorder
- do, do
- dotproduct, dotproduct
- ecut, ecut
- elec, elec
- endchain, endchain
- eof, eof
- equivalents, equivalents
- error, error
- exp, exp
- expand, expand
- exportmap, exportmap
- ffmodel, ffmodel
- ffpattern, ffpattern
- filterfilename, filterfilename
- finaliseff, finaliseff
- finalisegrid, finalisegrid
- finalisemodel, finalisemodel
- find, find
- firstframe, firstframe
- firstmodel, firstmodel
- fix, fix
- fixtype, fixtype
- flipx, flipx
- flipy, flipy
- flipz, flipz
- fold, fold
- foldmolecules, foldmolecules
- for, for
- frameenergy, frameenergy
- frameforces, frameforces
- free, free
- freetype, fixtype
- ftoa, ftoa
- geometry, geometry
- getatom, getatom
- getcombinationrule, getcombinationrule
- getenv, getenv
- getenvf, getenvf
- getenvi, getenvi
- getff, getff
- getline, getline
- getmodel, getmodel
- getpattern, getpattern
- getsite, getsite
- getview, getview
- glyphatomf, glyphatomf
- glyphatomr, glyphatomr
- glyphatomsf, glyphatomsf
- glyphatomsr, glyphatomsr
- glyphatomsv, glyphatomsv
- glyphatomv, glyphatomv
- glyphcolour, glyphcolour
- glyphdata, glyphdata
- glyphsolid, glyphsolid
- glyphtext, glyphtext
- gridalpha, gridalpha
- gridaxes, gridaxes
- gridcolourprimary, gridcolourprimary
- gridcolourscale, gridcolourscale
- gridcoloursecondary, gridcoloursecondary
- gridcubic, gridcubic
- gridcutoff, gridcutoff
- gridcutoffsecondary, gridcutoffsecondary
- gridlooporder, gridlooporder
- gridorigin, gridorigin
- gridortho, gridortho
- gridstyle, gridstyle
- gridusez, gridusez
- gridvisible, gridvisible
- gui, gui
- help, help
- hide, hide
- if, if
- info, info
- initgrid, initgrid
- interdef, interdef
- invert, invert
- itoa, itoa
- label, label
- lastframe, lastframe
- lastmodel, lastmodel
- linetol, linetol
- listcomponents, listcomponents
- listmeasurements, listmeasurements
- listmodels, listmodels
- listpatterns, listpatterns
- listscales, listscales
- listscripts, listscripts
- listsites, listsites
- ln, ln
- loadff, loadff
- loadgrid, loadgrid
- loadmodel, loadmodel
- loadscript, loadscript
- loadtrajectory, loadtrajectory
- locate, locate
- log, log
- lowercase, lowercase
- map, map
- matrixconvert, matrixconvert
- matrixtransform, matrixtransform
- mcaccept, mcaccept
- mcallow, mcallow
- mcmaxstep, mcmaxstep
- mcminimise, mcminimise
- mcntrials, mcntrials
- measure, measure
- measureselected, measureselected
- millercut, millercut
- mirror, mirror
- modelenergy, modelenergy
- modelforces, modelforces
- modeltemplate, modeltemplate
- move, move
- movetoend, movetoend
- movetostart, movetostart
- newatom, newatom
- newatomfrac, newatomfrac
- newbasisshell, newbasisshell
- newbond, newbond
- newbondid, newbondid
- neweigenvector, neweigenvector
- newff, newff
- newglyph, newglyph
- newgrid, newgrid
- newmodel, newmodel
- newpattern, newpattern
- newsite, newsite
- newvibration, newvibration
- nextarg, nextarg
- nextframe, nextframe
- nextmodel, nextmodel
- nint, nint
- normalise, normalise
- null, null
- option, Defining Options
- orthographic, orthographic
- pack, pack
- parentmodel, parentmodel
- paste, paste
- peekchar, peekchar
- peekchari, peekchari
- perspective, perspective
- prevframe, prevframe
- prevmodel, prevmodel
- printcell, printcell
- printelec, printelec
- printenergy, printenergy
- printewald, printewald
- printf, printf
- printforces, printforces
- printinter, printinter
- printintra, printintra
- printmc, printmc
- printsetup, printsetup
- printsummary, printsummary
- printvdw, printvdw
- printzmatrix, printzmatrix
- quit, quit
- readchars, readchars
- readdouble, readdouble
- readdoublearray, readdoublearray
- readint, readint
- readintarray, readintarray
- readline, readline
- readlinef, readlinef
- readnext, readnext
- readvar, readvar
- readvarf, readvarf
- rebond, rebond
- rebondpatterns, rebondpatterns
- rebondselection, rebondselection
- recreateexpression, recreateexpression
- redo, redo
- regioncentre, regioncentre
- regioncentrefrac, regioncentrefrac
- regiongeometry, regiongeometry
- regiongeometryfrac, regiongeometryfrac
- regionoverlap, regionoverlap
- regionrotation, regionrotation
- regionshape, regionshape
- removecell, removecell
- removelabel, removelabel
- removepoint, removepoint
- removereadoption, removereadoption
- removestr, removestr
- reorder, reorder
- reorient, reorient
- replacechars, replacechars
- replacestr, replacestr
- replicate, replicate
- resetview, resetview
- return, return
- rewind, rewind
- rotateview, rotateview
- rotx, rotx
- roty, roty
- rotz, rotz
- rules, rules
- runscript, runscript
- savebitmap, savebitmap
- saveexpression, saveexpression
- savemodel, savemodel
- scale, scale
- scalemolecules, scalemolecules
- scalename, scalename
- scalevisible, scalevisible
- sdminimise, sdminimise
- searchcommands, searchcommands
- seed, seed
- seekframe, seekframe
- select, select
- selectall, selectall
- selectfftype, selectfftype
- selectionaddhydrogen, selectionaddhydrogen
- selectioncog, selectioncog
- selectioncom, selectioncom
- selectmiller, selectmiller
- selectnone, selectnone
- selectoverlaps, selectoverlaps
- selectpattern, selectpattern
- selectradial, selectradial
- selecttype, selecttype
- setcell, setcell
- setcharge, setcharge
- setcombinationrule, setcombinationrule
- setcoords, setcoords
- setdistance, setdistance
- setelement, setelement
- setforces, setforces
- setfx, setfx
- setfy, setfy
- setfz, setfz
- setid, setid
- setname, setname
- setnmols, setnmols
- setpoint, setpoint
- setpointcolour, setpointcolour
- setpointvalue, setpointvalue
- setregion, setregion
- setregionfrac, setregionfrac
- setrx, setrx
- setry, setry
- setrz, setrz
- setvelocities, setvelocities
- setview, setview
- setvx, setvx
- setvy, setvy
- setvz, setvz
- shiftdown, shiftdown
- shiftup, shiftup
- show, show
- showall, showall
- sin, sin
- siteaxes, siteaxes
- skipchars, skipchars
- skipline, skipline
- spacegroup, spacegroup
- speedtest, speedtest
- sprintf, sprintf
- sqrt, sqrt
- stripchars, stripchars
- tan, tan
- toa, toa
- torsiondef, torsiondef
- translate, translate
- translateatom, translateatom
- translatecell, translatecell
- translateview, translateview
- translateworld, translateworld
- transmute, transmute
- typedef, typedef
- typemodel, typemodel
- typetest, typetest
- undo, undo
- units, units
- uppercase, uppercase
- vcut, vcut
- vdw, vdw
- vdwscale, vdwscale
- verbose, verbose
- viewalong, viewalong
- viewalongcell, viewalongcell
- while, while
- writeline, writeline
- writelinef, writelinef
- writevar, writevar
- writevarf, writevarf
- zoomview, zoomview
- constants, Predefined Constants, Predefined Constants
D
- dihedral angles, Torsion Functional Forms
F
- filters, Filters
- contents, Filter Contents
- defining, Filter Definitions
- locations, Filter Locations
- options, Filter Options
- defining, Defining Options
- layout, Option Layout
- types, Option Types
- overriding, Overriding Existing Filters
- properties, Filter Definitions
- forcefield
- forcefields
- example, Example - SPC Water
- format, File Format
- functional forms
- angles, Angle Functional Forms
- bonds, Bond Functional Forms
- dihedrals, Torsion Functional Forms
- torsions, Torsion Functional Forms
- van der Waals, VDW Functional Forms
- general keywords, General Keywords
- overview, Overview
- rule-based, Rule-Based Forcefields
- functions, Functions
- supplied, Supplied Forcefields
- CLDP-IL, Canongia-Lopes & Padua Ionic Liquids (cldp-il.ff)
- DREIDING, Mayo, Olafson & Goddard II's Generic Forcefield (testing/dreiding.ff)
- GAFF, General Amber Forcefield (testing/gaff.ff)
- general, Jorgensen at al. OPLS-AA (oplsaa.ff), Rappe et al.s Universal Forcefield (testing/uff.ff), Mayo, Olafson & Goddard II's Generic Forcefield (testing/dreiding.ff), General Amber Forcefield (testing/gaff.ff)
- ionic liquids, Canongia-Lopes & Padua Ionic Liquids (cldp-il.ff), Youngs, Kohanoff, & Del Pópolo [dmim]Cl (dmimcl-fm.ff), Youngs & Hardacre [dmim]Cl (dmimcl-fm2.ff), Liu, Wu & Wang's United-Atom Ionic Liquids Forcefield (lww-il.ff)
- LWW-IL, Liu, Wu & Wang's United-Atom Ionic Liquids Forcefield (lww-il.ff)
- OPLS-AA, Jorgensen at al. OPLS-AA (oplsaa.ff)
- SPC, Berensen et al.s Simple Point Charge Water (spc.ff)
- SPC/E, Berensen et al.s Extended Simple Point Charge Water (spce.ff)
- UFF, Rappe et al.s Universal Forcefield (testing/uff.ff)
- water, Berensen et al.s Simple Point Charge Water (spc.ff), Berensen et al.s Extended Simple Point Charge Water (spce.ff)
- YoungsIL1, Youngs, Kohanoff, & Del Pópolo [dmim]Cl (dmimcl-fm.ff)
- YoungsIL2, Youngs & Hardacre [dmim]Cl (dmimcl-fm2.ff)
- typing, Typing
G
- glyphs, Glyphs
- GUI, The GUI
- mouse, Mouse Control
- atom selection, Atom Selection
- view, Manipulating the View
- tool windows, The GUI
- atom list, Atom List Window
- atom position, Atom Position Window
- atom transform, Atom Transform Window
- build, Build Window
- cell define, Cell Definition Window
- cell transform, Cell Transform Window
- command, Command Window
- disorder, Disordered Builder Window
- forcefield, Forcefield Window
- fragment, Fragment Library Window
- geometry, Geometry Window
- glyphs, Glyphs Window
- grids, Grids Window
- minimiser, Minimiser Window
- select, Select Window
- zmatrix, ZMatrix Window
I
- import/export, Import / Export
- intermolecular terms, VDW Functional Forms
- intramolecular terms, Bond Functional Forms, Angle Functional Forms, Torsion Functional Forms
M
- methods
- augment, Augment
- autoellipsoids, Autoellipsoids
- autopolyhedra, Autopolyhedra
- literature, Literature Methods
- NETA, NETA
- rebond, Rebond
N
- NETA, NETA Reference
- neta
- keywords
- any bond to, ~X (any bond to X)
- aromatic, aromatic
- bond, bond
- chain, chain
- double bond to, =X (double bond to X)
- geometries, Geometries
- n, n
- nbonds, nbonds
- nh, nh
- noring, noring
- planar, planar
- ring, ring
- single bond to, -X (single bond to X)
- size, size
P
- patterns, Patterns
R
- reference, Referencing Aten
S
- supported formats, Supported File Formats
T
- TODO
- Autoellipsoids method, Autoellipsoids
- Autopoloyhedra method, Autopolyhedra
- Colourscales, Colourscales
- SuSE compile guide, Installing Subversion and obtaining the source
- Typing example 3, Example 3 - N,N,2,5-tetramethylpyridin-4-amine
- Unformatted r/w, Unformatted Reading and Writing
- torsional twist, Torsion Functional Forms
- trajectories, Trajectory Files
- types
- aten, Aten Type
- atom, Atom Type
- basisprimitive, BasisPrimitive Type
- basisshell, BasisShell Type
- bond, Bond Type
- bound, Bound Type
- cell, Cell Type
- colourscale, ColourScale Type
- colourscalepoint, Bond Type
- eigenvector, Eigenvector Type
- element, Element Type
- energystore, EnergyStore Type
- ffatom, FFAtom Type
- ffbound, FFBound Type
- forcefield, Forcefield Type
- glyph, Glyph
- glyphdata, GlyphData Type
- grid, Grid Type
- measurement, Measurement Type
- model, Model Type
- pattern, Pattern Type
- prefs, Prefs Type
- region, Region Type
- site, Site Type
- unitcell, UnitCell Type
- vector, Vector Type
- typing, Typing
- depth, Description Depth
- examples, Language Examples
- N,N-2,5-tetramethylpyridine-4-amine, Example 3 - N,N,2,5-tetramethylpyridin-4-amine
- water, Example 1 - Water, Example 2 - 3-hydroxypropanoic acid
- NETA, NETA Reference
- reusing types, Reusing Types
- scores, Type Scores
- empty types, Empty Types (Score = 1)
- non-matching, Non-Matching Types (Score = -1)
- normal types, Normal Types (Score > 1)
U
- usage, Using Aten
V
- van der Waals interaction, VDW Functional Forms
- variables
- overview, Variables
- types, Variable Types
- overview, Overview


![[Note]](images/note.png)






















































