Create, edit, and visualise atomic coordinates

Aten is a tool for computational chemists, molecular dynamicists, or other poor souls who find themselves wondering if there is an easier way to create and edit the suitable atomic configurations they need, be it for the purposes of their research or, indeed, pleasure (but this would be a little worrying). More so, Aten was created for those (well, principally me) who wonder if there is tool that can handle periodic systems well. At the time of Aten's inception the answer was, in my opinion, 'No'. Aten attempts to at least partially fill this void.

Aten can:
  • Edit molecules and multi-molecule configurations, or build them from scratch
  • Handle periodic configurations such as crystals and condensed phases such as liquids
  • Be fully scripted / automated
  • Import/export coordinates in the format of your choice with its Filters system
  • Run on Linux, Mac, and Windows
News

31st August 2009 - Command-line commands in all tutorials have been updated to work with the new language syntax introduced in v1.2.

28th August 2009 - New, slightly corrected version 1.3 available for download, fixing file-selector related file extension issues.

20th August 2009 - A full article about Aten has been published in the Journal of Computational Chemistry. Feel free to cite it if you've found the code useful!

20th August 2009 - Version 1.3 released. See the changelog for details.

25th May 2009 - Annoying and unexpected file-related bugs fixed in the 1.2 release for windows. New files are ready for download.

23rd May 2009 - Version 1.2 is now up for download. Many things have changed in this release (see the changelog) so there are likely to be a few bugs remaining.

20th May 2009 - Version 1.2 will be released at the end of the week. New (infinitely better) scripting language syntax and plenty of bugfixes and feature additions. See the changelog so far...

20th May 2009 - A whole month later, and version 1.1 is up. This will be the last version to support the current script/filter language style. See the changelog for more info.

20th April 2009 - NEW VERSION IMMINENT!

22nd January 2009 - Some screenshots added.

16th December 2008 - Command reference reformat and update. Command Index finally available.

11th December 2008 - Users can now: login with OpenID, watch pages/articles etc.

9th December 2008 - Version 1.0 released! Note: Forcefields are now supplied as separate downloads from the forcefields page so they may be actively maintained, separately from the code.

17th November 2008 - New website finally up. Hopefully this will be the last 'new' website for a long time!

Contribute

Everything on projectaten.net is open to unregistered users, but if you feel the need to contribute, why not register and help out by improving the manual Wiki, adding a new forcefield or tweaking an old one? If you've done something particularly useful with Aten, why not write a tutorial or an example so others can benefit? If you find a bug or a quirk, report it (please!) and if you have a question head over to the forums.

Bug Tracker Tutorials Examples Download Now! Forums
SVN Changes (since release 1.3 on Sat 20 Aug - 18:21)
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.
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().

Online users

2 online users