| [6029a6] | 1 | <?xml version="1.0" encoding="UTF-8"?> | 
|---|
|  | 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" | 
|---|
|  | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ | 
|---|
|  | 4 | <!ENTITY molecuilder_logo SYSTEM "pictures/molecuilder_logo.png" NDATA PNG> | 
|---|
|  | 5 | <!ENTITY dialog_box SYSTEM "pictures/dialog_box.png" NDATA PNG> | 
|---|
|  | 6 | <!ENTITY dialog_add-atom_tooltip SYSTEM "pictures/dialog_add-atom_tooltip.png" NDATA PNG> | 
|---|
|  | 7 | <!ENTITY dialog_complex SYSTEM "pictures/dialog_complex.png" NDATA PNG> | 
|---|
|  | 8 | <!ENTITY dialog_exit SYSTEM "pictures/dialog_exit.png" NDATA PNG> | 
|---|
|  | 9 | <!ENTITY example_basic_view SYSTEM "pictures/example_basic_view.png" NDATA PNG> | 
|---|
|  | 10 | ]> | 
|---|
|  | 11 | <book version="5.0" xmlns="http://docbook.org/ns/docbook" | 
|---|
|  | 12 | xmlns:xlink="http://www.w3.org/1999/xlink" | 
|---|
|  | 13 | xmlns:xi="http://www.w3.org/2001/XInclude" | 
|---|
|  | 14 | xmlns:svg="http://www.w3.org/2000/svg" | 
|---|
|  | 15 | xmlns:m="http://www.w3.org/1998/Math/MathML" | 
|---|
|  | 16 | xmlns:html="http://www.w3.org/1999/xhtml" | 
|---|
|  | 17 | xmlns:db="http://docbook.org/ns/docbook"> | 
|---|
|  | 18 | <info> | 
|---|
|  | 19 | <title>MoleCuilder - a Molecule Builder</title> | 
|---|
|  | 20 |  | 
|---|
|  | 21 | <author> | 
|---|
|  | 22 | <personname><firstname>Frederik</firstname><surname>Heber</surname></personname> | 
|---|
|  | 23 |  | 
|---|
|  | 24 | <affiliation> | 
|---|
|  | 25 | <orgname>heber@ins.uni-bonn.de</orgname> | 
|---|
|  | 26 | </affiliation> | 
|---|
|  | 27 | </author> | 
|---|
|  | 28 |  | 
|---|
|  | 29 | <pubdate>07/03/14</pubdate> | 
|---|
|  | 30 | </info> | 
|---|
|  | 31 |  | 
|---|
|  | 32 | <chapter> | 
|---|
|  | 33 | <title>Introduction</title> | 
|---|
|  | 34 |  | 
|---|
|  | 35 | <figure> | 
|---|
|  | 36 | <title>MoleCuilder logo depicting a tesselated buckyball and a benzene | 
|---|
|  | 37 | molecule</title> | 
|---|
|  | 38 |  | 
|---|
|  | 39 | <mediaobject> | 
|---|
|  | 40 | <imageobject> | 
|---|
|  | 41 | <imagedata entityref="molecuilder_logo" scalefit="1" width="100%"/> | 
|---|
|  | 42 | </imageobject> | 
|---|
|  | 43 | </mediaobject> | 
|---|
|  | 44 | </figure> | 
|---|
|  | 45 |  | 
|---|
| [9bce96] | 46 | <section xml:id='whatis'> | 
|---|
|  | 47 | <title  xml:id='whatis.title'>What is MoleCuilder?</title> | 
|---|
| [6029a6] | 48 |  | 
|---|
|  | 49 | <para>In Short,<command> MoleCuilder</command> is a concatenation of | 
|---|
|  | 50 | molecule and builder.</para> | 
|---|
|  | 51 |  | 
|---|
|  | 52 | <para>In more words, molecular dynamics simulations are frequently | 
|---|
|  | 53 | employed to simulate material behavior under stress, chemical reactions | 
|---|
|  | 54 | such as of cementitious materials, or folding pathways and docking | 
|---|
|  | 55 | procedures of bio proteins. Even if the computational load, due to the | 
|---|
|  | 56 | large number of atoms, is very demanding, nonetheless they may serve as | 
|---|
|  | 57 | a starting point, e.g. extracting parameters for a coarser model. | 
|---|
|  | 58 | However, what is on the other hand the starting point of molecular | 
|---|
|  | 59 | dynamics simulations? It is the coordinate and element of each atom | 
|---|
|  | 60 | combined with potential functions that model the interactions.</para> | 
|---|
|  | 61 |  | 
|---|
|  | 62 | <para>MoleCuilder allows to fully construct such a starting point: | 
|---|
|  | 63 | letting the user construct atomic and molecular geometries by a simple | 
|---|
|  | 64 | point&click approach, a CAD-pendant on the nanoscale. Creating | 
|---|
|  | 65 | suitable empirical potentials by fitting parameters to ab-initio | 
|---|
|  | 66 | calculations within hours. Specific emphasis is placed on a | 
|---|
|  | 67 | simple-to-use interface, allowing for the quick-and-dirty building of | 
|---|
|  | 68 | molecular systems, and on scriptability. Eventually, not a single, but | 
|---|
|  | 69 | many, related molecular systems have to be created.</para> | 
|---|
|  | 70 |  | 
|---|
| [9bce96] | 71 | <section xml:id='installation'> | 
|---|
|  | 72 | <title xml:id='installation.title'>Installation requirements</title> | 
|---|
| [6029a6] | 73 |  | 
|---|
|  | 74 | <para>For installations requirements and instructions we refer to the | 
|---|
|  | 75 | internal documentation of MoleCuilder, created via doxgen from the | 
|---|
|  | 76 | source code.</para> | 
|---|
|  | 77 | </section> | 
|---|
|  | 78 |  | 
|---|
| [9bce96] | 79 | <section xml:id='license'> | 
|---|
|  | 80 | <title xml:id='license.title'>License</title> | 
|---|
| [6029a6] | 81 |  | 
|---|
|  | 82 | <para>As long as no other license statement is given, MoleCuilder is | 
|---|
|  | 83 | free for user under the GNU Public License (GPL) Version 2 (see | 
|---|
|  | 84 | <uri>www.gnu.de/documents/gpl-2.0.de.html</uri>).</para> | 
|---|
|  | 85 | </section> | 
|---|
|  | 86 |  | 
|---|
| [9bce96] | 87 | <section xml:id='disclaimer'> | 
|---|
|  | 88 | <title xml:id='disclaimer.title'>Disclaimer</title> | 
|---|
| [6029a6] | 89 |  | 
|---|
|  | 90 | <para>We quote section 11 from the GPLv2 license:</para> | 
|---|
|  | 91 |  | 
|---|
|  | 92 | <remark>Because the program is licensed free of charge, there is not | 
|---|
|  | 93 | warranty for the program, to the extent permitted by applicable law. | 
|---|
|  | 94 | Except when otherwise stated in writing in the copyright holders | 
|---|
|  | 95 | and/or other parties provide the program "as is" without warranty of | 
|---|
|  | 96 | any kind, either expressed or implied. Including, but not limited to, | 
|---|
|  | 97 | the implied warranties of merchantability and fitness for a particular | 
|---|
|  | 98 | purpose. The entire risk as to the quality and performance of the | 
|---|
|  | 99 | program is with you. Should the program prove defective, you assume | 
|---|
|  | 100 | the cost of all necessary servicing, repair, or correction.</remark> | 
|---|
|  | 101 | </section> | 
|---|
|  | 102 |  | 
|---|
| [9bce96] | 103 | <section xml:id='feedback'> | 
|---|
|  | 104 | <title xml:id='feedback.title'>Feedback</title> | 
|---|
| [6029a6] | 105 |  | 
|---|
|  | 106 | <para>If you encounter any bugs, errors, or would like to submit | 
|---|
|  | 107 | feature request, please use the email address provided at the very | 
|---|
|  | 108 | beginning of this user guide. The author is especially thankful for | 
|---|
|  | 109 | any description of all related events prior to occurrence of the | 
|---|
|  | 110 | error, saved "session scripts" (see below) and auxiliary files. Please | 
|---|
|  | 111 | mind sensible space restrictions of email attachments.</para> | 
|---|
|  | 112 | </section> | 
|---|
|  | 113 |  | 
|---|
| [9bce96] | 114 | <section xml:id='notation'> | 
|---|
|  | 115 | <title xml:id='notation.title'>Notation</title> | 
|---|
| [6029a6] | 116 |  | 
|---|
|  | 117 | <para>We briefly explain a few specific wordings associated with the | 
|---|
|  | 118 | program:</para> | 
|---|
|  | 119 |  | 
|---|
|  | 120 | <itemizedlist> | 
|---|
|  | 121 | <listitem> | 
|---|
|  | 122 | <para><emphasis>Action</emphasis> is a command that allows for | 
|---|
|  | 123 | undoing and redoing, i.e. a single atomic procedure for | 
|---|
|  | 124 | manipulating the molecular system.</para> | 
|---|
|  | 125 | </listitem> | 
|---|
|  | 126 |  | 
|---|
|  | 127 | <listitem> | 
|---|
|  | 128 | <para>Selection refers to a subsets from the set of instances of a | 
|---|
|  | 129 | particular type, e.g. atoms.</para> | 
|---|
|  | 130 | </listitem> | 
|---|
|  | 131 |  | 
|---|
|  | 132 | <listitem> | 
|---|
|  | 133 | <para>Shape means a specific region of the domain that can be | 
|---|
|  | 134 | described in the way of constructive geometry, i.e. as the | 
|---|
|  | 135 | intersection, negation, and combination of primitives such as | 
|---|
|  | 136 | spheres or cylinders.</para> | 
|---|
|  | 137 | </listitem> | 
|---|
|  | 138 | </itemizedlist> | 
|---|
|  | 139 | </section> | 
|---|
|  | 140 |  | 
|---|
| [9bce96] | 141 | <section xml:id='completeness'> | 
|---|
|  | 142 | <title xml:id='completeness.title'>Completeness</title> | 
|---|
| [6029a6] | 143 |  | 
|---|
|  | 144 | <para>This documentation takes quite some effort to write. Hence, the | 
|---|
|  | 145 | described features and especially the actions herein are settled with | 
|---|
|  | 146 | respect to their functionality, while newer features or actions are | 
|---|
|  | 147 | probably missing. This should be a clear sign to you that these are | 
|---|
|  | 148 | probably not safe to use yet. If you nonetheless require them and thus | 
|---|
|  | 149 | should acquire some familiarity with the code itself. This suggests | 
|---|
|  | 150 | changing to the developer documentation which is maintained along with | 
|---|
|  | 151 | the source code with <productname>doxygen</productname>.</para> | 
|---|
|  | 152 | </section> | 
|---|
|  | 153 | </section> | 
|---|
|  | 154 | </chapter> | 
|---|
|  | 155 |  | 
|---|
|  | 156 | <chapter> | 
|---|
|  | 157 | <title>Features</title> | 
|---|
|  | 158 |  | 
|---|
|  | 159 | <para>Basically, <command>MoleCuilder</command> parses geometries from | 
|---|
|  | 160 | files, manipulates them and stores them again in files. The manipulation | 
|---|
|  | 161 | can be done either via a command-line interface or via the graphical user | 
|---|
|  | 162 | interface.</para> | 
|---|
|  | 163 |  | 
|---|
| [9bce96] | 164 | <section xml:id='concepts'> | 
|---|
|  | 165 | <title xml:id='concepts.title'>Concepts</title> | 
|---|
| [6029a6] | 166 |  | 
|---|
|  | 167 | <para>In general, we divide the molecular systems into three different | 
|---|
|  | 168 | components or scales.</para> | 
|---|
|  | 169 |  | 
|---|
|  | 170 | <orderedlist> | 
|---|
|  | 171 | <listitem> | 
|---|
|  | 172 | <para>Atoms</para> | 
|---|
|  | 173 |  | 
|---|
|  | 174 | <para>Atoms are the undividable objects of the molecular systems. | 
|---|
|  | 175 | They have an element <quote>Z</quote> and three coordinates | 
|---|
|  | 176 | <quote>(x,y,z)</quote>.</para> | 
|---|
|  | 177 | </listitem> | 
|---|
|  | 178 |  | 
|---|
|  | 179 | <listitem> | 
|---|
|  | 180 | <para>Molecules</para> | 
|---|
|  | 181 |  | 
|---|
|  | 182 | <para>Molecules are bound conglomeration of atoms. They contain a | 
|---|
|  | 183 | number of atoms and a specific center in the domain such that its | 
|---|
|  | 184 | atoms are placed relative to this center. Also, they may have a | 
|---|
|  | 185 | bounding box, i.e. a subdomain that contains all of the atoms in the | 
|---|
|  | 186 | molecule.</para> | 
|---|
|  | 187 |  | 
|---|
|  | 188 | <para>Note that the molecular structure of the system, i.e. the | 
|---|
|  | 189 | bonding graph, is determined by MoleCuilder and used to dissect the | 
|---|
|  | 190 | system into distinct molecules automatically.</para> | 
|---|
|  | 191 | </listitem> | 
|---|
|  | 192 |  | 
|---|
|  | 193 | <listitem> | 
|---|
|  | 194 | <para>Clusters</para> | 
|---|
|  | 195 |  | 
|---|
|  | 196 | <para>Clusters are unbound conglomeration of atoms. Clusters serves | 
|---|
|  | 197 | as groups of atoms for specific operations that would be to | 
|---|
|  | 198 | restricted if they worked on just molecules.</para> | 
|---|
|  | 199 | </listitem> | 
|---|
|  | 200 |  | 
|---|
|  | 201 | <listitem> | 
|---|
|  | 202 | <para>Domain</para> | 
|---|
|  | 203 |  | 
|---|
|  | 204 | <para>The domain refers to the simulation domain. It is | 
|---|
|  | 205 | parallelepiped in <inlineequation> | 
|---|
|  | 206 | <m:math display="inline"> | 
|---|
|  | 207 | <m:mi>\mathbb{R}^3</m:mi> | 
|---|
|  | 208 | </m:math> | 
|---|
|  | 209 | </inlineequation>where either periodic, wrapped, or open boundary | 
|---|
|  | 210 | conditions apply. The domain contains all atoms, i.e. the box | 
|---|
|  | 211 | containing all atoms.</para> | 
|---|
|  | 212 | </listitem> | 
|---|
|  | 213 | </orderedlist> | 
|---|
|  | 214 | </section> | 
|---|
|  | 215 |  | 
|---|
| [9bce96] | 216 | <section xml:id='interfaces'> | 
|---|
|  | 217 | <title xml:id='interfaces.title'>Interfaces</title> | 
|---|
| [6029a6] | 218 |  | 
|---|
|  | 219 | <para>MoleCuilder has four different interfaces: Command-line, text | 
|---|
|  | 220 | menu, graphical user interface, and python interface.</para> | 
|---|
|  | 221 |  | 
|---|
|  | 222 | <orderedlist> | 
|---|
|  | 223 | <listitem> | 
|---|
|  | 224 | <para>Command-Line</para> | 
|---|
|  | 225 |  | 
|---|
|  | 226 | <para>The command-line interface allows to use MoleCuilder | 
|---|
|  | 227 | non-interactively via a terminal session. The program is executed by | 
|---|
|  | 228 | expanding the shell command with a number of commands including all | 
|---|
|  | 229 | required options that are executed one after the other. After | 
|---|
|  | 230 | execution of the last command, the program quits. The command-line | 
|---|
|  | 231 | interface usually works on a specific file that is given as input, | 
|---|
|  | 232 | manipulated, analysed, ... via the sequence of commands and | 
|---|
|  | 233 | eventually all changes are stored in the this file. Hence, the input | 
|---|
|  | 234 | file acts as the state of the starting configuration that is | 
|---|
|  | 235 | modified via MoleCuilder.</para> | 
|---|
|  | 236 | </listitem> | 
|---|
|  | 237 |  | 
|---|
|  | 238 | <listitem> | 
|---|
|  | 239 | <para>Text menu</para> | 
|---|
|  | 240 |  | 
|---|
|  | 241 | <para>The text-menu is similar to the command-line interface with | 
|---|
|  | 242 | the exception that it allows for interactive sessions. Commands are | 
|---|
|  | 243 | chosen from a text menu and executed directly after selection by the | 
|---|
|  | 244 | user.</para> | 
|---|
|  | 245 | </listitem> | 
|---|
|  | 246 |  | 
|---|
|  | 247 | <listitem> | 
|---|
|  | 248 | <para>Graphical interface</para> | 
|---|
|  | 249 |  | 
|---|
|  | 250 | <para>The graphical interface is based on Qt. It features a full | 
|---|
|  | 251 | graphical representation of the simulation domain with atoms and | 
|---|
|  | 252 | their bonds. It allows manipulation in point&click fashion. | 
|---|
|  | 253 | Commands are selected from pull-down menus and dialogs are used to | 
|---|
|  | 254 | query the user for all required parameters to such a command.</para> | 
|---|
|  | 255 | </listitem> | 
|---|
|  | 256 |  | 
|---|
|  | 257 | <listitem> | 
|---|
|  | 258 | <para>Python interface</para> | 
|---|
|  | 259 |  | 
|---|
|  | 260 | <para>The last interface is accessible only within the python | 
|---|
|  | 261 | programming language. MoleCuilder can be loaded as a module and its | 
|---|
|  | 262 | commands can be executed with either the python interpreter | 
|---|
|  | 263 | interactively or via python scripts non-interactively. Note that | 
|---|
|  | 264 | this allows auxiliary calculations to be performed in pythons whose | 
|---|
|  | 265 | results may be used as parameters in subsequent commands.</para> | 
|---|
|  | 266 | </listitem> | 
|---|
|  | 267 | </orderedlist> | 
|---|
|  | 268 | </section> | 
|---|
|  | 269 |  | 
|---|
| [9bce96] | 270 | <section xml:id='fileformats'> | 
|---|
|  | 271 | <title xml:id='fileformats.title'>Known File formats</title> | 
|---|
| [6029a6] | 272 |  | 
|---|
|  | 273 | <para>We briefly the file formats MoleCuilder can parse and | 
|---|
|  | 274 | store.</para> | 
|---|
|  | 275 |  | 
|---|
|  | 276 | <itemizedlist> | 
|---|
|  | 277 | <listitem> | 
|---|
|  | 278 | <para>XYZ, <filename>.xyz</filename> (simplest of all formats, | 
|---|
|  | 279 | line-wise element and three coordinates with two line header, number | 
|---|
|  | 280 | of lines and a comment line)</para> | 
|---|
|  | 281 | </listitem> | 
|---|
|  | 282 |  | 
|---|
|  | 283 | <listitem> | 
|---|
| [9bce96] | 284 | <para><link xlink:href="http://www.mpqc.org/"><productname>MPQC | 
|---|
|  | 285 | </productname></link>, <filename>.in</filename></para> | 
|---|
| [6029a6] | 286 | </listitem> | 
|---|
|  | 287 |  | 
|---|
|  | 288 | <listitem> | 
|---|
| [9bce96] | 289 | <para><link xlink:href="http://www.pdb.org/">PDB</link>, <filename> | 
|---|
|  | 290 | .pdb</filename></para> | 
|---|
| [6029a6] | 291 | </listitem> | 
|---|
|  | 292 |  | 
|---|
|  | 293 | <listitem> | 
|---|
|  | 294 | <para><productname>ESPACK</productname>, <filename>.conf</filename> | 
|---|
|  | 295 | (electronic structure package by Institute for Numerical Simulation, | 
|---|
|  | 296 | University of Bonn, code not in circulation)</para> | 
|---|
|  | 297 | </listitem> | 
|---|
|  | 298 |  | 
|---|
|  | 299 | <listitem> | 
|---|
| [9bce96] | 300 | <para><link xlink:href="http://www.psicode.org/"><productname>PSI4 | 
|---|
|  | 301 | </productname></link>, <filename>.psi</filename></para> | 
|---|
| [6029a6] | 302 | </listitem> | 
|---|
|  | 303 |  | 
|---|
|  | 304 | <listitem> | 
|---|
| [9bce96] | 305 | <para><link xlink:href="http://www.tremolo-x.org/"><productname> | 
|---|
|  | 306 | TREMOLO</productname></link>, <filename>.data</filename></para> | 
|---|
| [6029a6] | 307 | </listitem> | 
|---|
|  | 308 |  | 
|---|
|  | 309 | <listitem> | 
|---|
| [9bce96] | 310 | <para>XML, <filename>.xml</filename> (XML as read by | 
|---|
|  | 311 | <link xlink:href="http://www.scafacos.org/">ScaFaCoS</link> | 
|---|
|  | 312 | project)</para> | 
|---|
| [6029a6] | 313 | </listitem> | 
|---|
|  | 314 | </itemizedlist> | 
|---|
|  | 315 |  | 
|---|
|  | 316 | <para>These are identified via their suffixes and can be converted from | 
|---|
|  | 317 | one into another (with loss of all data not in the intersection of | 
|---|
|  | 318 | stored properties of the two involved file formats).</para> | 
|---|
|  | 319 | </section> | 
|---|
|  | 320 | </chapter> | 
|---|
|  | 321 |  | 
|---|
|  | 322 | <chapter> | 
|---|
|  | 323 | <title>Interfaces</title> | 
|---|
|  | 324 |  | 
|---|
|  | 325 | <para>In this chapter, we explain the intention and use of the four | 
|---|
|  | 326 | interfaces.</para> | 
|---|
|  | 327 |  | 
|---|
|  | 328 | <para>We give the most extensive explanation of the command-line | 
|---|
|  | 329 | interface, all subsequent interfaces are explained in highlighting their | 
|---|
|  | 330 | differences with respect to the command-line interface. This is because | 
|---|
|  | 331 | the command-line lends itself very well to representation in this textual | 
|---|
|  | 332 | user guide. Although some images of the graphical interface are given | 
|---|
|  | 333 | below, they would blow the size of the guide out of proportion.</para> | 
|---|
|  | 334 |  | 
|---|
|  | 335 | <para>In any case, you should make yourself familiar with at least one of | 
|---|
|  | 336 | the interactive (text menu, GUI) and one of the non-interactive | 
|---|
|  | 337 | (command-line, python) interfaces to use MoleCuilder to is full potential: | 
|---|
|  | 338 | The interactive interface gives you the immediate feedback in constructing | 
|---|
|  | 339 | "synthesis" (build) chains (of commands) for constructing your specific | 
|---|
|  | 340 | molecular system in the computer. The non-interactive interface lends | 
|---|
|  | 341 | itself to quick creation of related systems that differ only by specific | 
|---|
|  | 342 | parameters you have modified in the script (command-line can be used in | 
|---|
|  | 343 | shell scripts, python itself is a scripted language). Also, the | 
|---|
|  | 344 | non-interactive interfaces are used for storing sessions which helps you | 
|---|
|  | 345 | in documentation your experiments and lateron understanding of what has | 
|---|
|  | 346 | been done.</para> | 
|---|
|  | 347 |  | 
|---|
| [9bce96] | 348 | <section xml:id='command-line-interface'> | 
|---|
|  | 349 | <title xml:id='command-line-interface.title'>Command-line interface</title> | 
|---|
| [6029a6] | 350 |  | 
|---|
|  | 351 | <para>The command-line interface reads options and commands from the | 
|---|
|  | 352 | command line and executes them sequentially. This may be for example: | 
|---|
|  | 353 | Open an empty file, add 2 hydrogen atoms and add 1 oxygen atom, choose a | 
|---|
|  | 354 | simulation box, fill the box with this given "filler" molecule, save the | 
|---|
|  | 355 | file. This enables the use of MoleCuilder in simple script-files to | 
|---|
|  | 356 | create a whole range of geometries that only differ in a few parameters | 
|---|
|  | 357 | automatically.</para> | 
|---|
|  | 358 |  | 
|---|
|  | 359 | <para>Traditionally, <command>MoleCuilder</command> operates on a single | 
|---|
|  | 360 | configuration file - the state - which may also store additional | 
|---|
|  | 361 | information depending on the chosen file format such as parameters for | 
|---|
|  | 362 | ab-initio computations. An example for the above procedure is given | 
|---|
|  | 363 | below:</para> | 
|---|
|  | 364 |  | 
|---|
|  | 365 | <programlisting> | 
|---|
|  | 366 | ./molecuilder \ | 
|---|
|  | 367 | -i sample.xyz \ | 
|---|
|  | 368 | --add-atom H \ | 
|---|
|  | 369 | --domain-position "0.,0.,0." \ | 
|---|
|  | 370 | ... | 
|---|
|  | 371 | </programlisting> | 
|---|
|  | 372 |  | 
|---|
|  | 373 | <para>The first argument is the executable itself. Second, there is a | 
|---|
|  | 374 | slew of arguments -- one per line split with a backslash telling the | 
|---|
|  | 375 | shell that the line still continues -- consisting of the input action and | 
|---|
|  | 376 | an arbitrarily named file <filename>sample.xyz</filename>, which may be | 
|---|
|  | 377 | empty and whose file format is chosen by the given extension. The third | 
|---|
|  | 378 | is the add-atom action following by an option that gives the position in | 
|---|
|  | 379 | the domain where to add the "H"ydrogen atom. An action is always | 
|---|
|  | 380 | introduced via a double hyphen and its full name (containing just | 
|---|
|  | 381 | non-capital letters and hyphens) or a single hyphen and a single letter | 
|---|
|  | 382 | for its shortform, e.g. -a for adding an atom to the system. It is | 
|---|
|  | 383 | followed by a fixed number of options. Most of these have default values | 
|---|
|  | 384 | and in this do not have to be specified. If not enough options are given | 
|---|
|  | 385 | or invalid values have been entered, an error message is printed stating | 
|---|
|  | 386 | the name of the first missing or invalid option value.</para> | 
|---|
|  | 387 |  | 
|---|
|  | 388 | <note> | 
|---|
|  | 389 | <para>Note that not all action have shortforms and it is best practice | 
|---|
|  | 390 | to have the full action name instead of its shortform to make the | 
|---|
|  | 391 | command-line understable to you in years to come.</para> | 
|---|
|  | 392 | </note> | 
|---|
|  | 393 |  | 
|---|
| [9bce96] | 394 | <section xml:id='preliminaries'> | 
|---|
|  | 395 | <title xml:id='preliminaries.title'>Preliminaries</title> | 
|---|
| [6029a6] | 396 |  | 
|---|
|  | 397 | <para>Some preliminary remarks are in order which we have gathered | 
|---|
|  | 398 | here on how these actions work in general.</para> | 
|---|
|  | 399 |  | 
|---|
|  | 400 | <para>Below we first delve into some details about secondary structure | 
|---|
|  | 401 | such as selections, shapes, and randomization required to specify | 
|---|
|  | 402 | subsets of atoms and molecules you wish to manipulate. Then, we have | 
|---|
|  | 403 | ordered the subsequent details on the manipulation depending on the | 
|---|
|  | 404 | scale they act upon - single atoms, multiple atoms organised as | 
|---|
|  | 405 | molecules, and all atoms organised by their containing domain.</para> | 
|---|
|  | 406 |  | 
|---|
|  | 407 | <para>In the following we will always give a command to illustrate the | 
|---|
|  | 408 | procedure but just the necessary parts, i.e. "..." implies to prepend | 
|---|
|  | 409 | it with the executable and input command for a specific configuration | 
|---|
|  | 410 | file, for storing the manipulated state of the molecular system. Note | 
|---|
|  | 411 | that</para> | 
|---|
|  | 412 |  | 
|---|
|  | 413 | <programlisting>./molecuilder --help</programlisting> | 
|---|
|  | 414 |  | 
|---|
|  | 415 | <para>will always give you a list of all available actions and also a | 
|---|
|  | 416 | brief explanation on how to properly enter values of a specific type, | 
|---|
|  | 417 | e.g. an element, a vector, or a list of numbers. Details to a specific | 
|---|
|  | 418 | action can be requested when its full name is known, e.g. for | 
|---|
|  | 419 | "add-atom",</para> | 
|---|
|  | 420 |  | 
|---|
|  | 421 | <programlisting>./molecuilder --help --actionname add-atom</programlisting> | 
|---|
|  | 422 |  | 
|---|
|  | 423 | <para>which fills you in on each option to the action: its full name, | 
|---|
|  | 424 | its expected type, and a possibly present default value, and a brief | 
|---|
|  | 425 | description of the option.</para> | 
|---|
|  | 426 |  | 
|---|
|  | 427 | <para>An Action can be undone and redone, e.g. undo adding an atom as | 
|---|
|  | 428 | follows,</para> | 
|---|
|  | 429 |  | 
|---|
|  | 430 | <programlisting>... --add-atom H --domain-position "0,0,0" --undo</programlisting> | 
|---|
|  | 431 |  | 
|---|
|  | 432 | <para>and redo as follows</para> | 
|---|
|  | 433 |  | 
|---|
|  | 434 | <programlisting>... --add-atom H --domain-position "0,0,0" --undo --redo</programlisting> | 
|---|
|  | 435 |  | 
|---|
|  | 436 | <para>With the non-interactive interfaces this may seem rather | 
|---|
|  | 437 | superfluous but it comes in very handy in the interactive ones. Also | 
|---|
|  | 438 | this tells you that actions are placed in a queue, i.e. a history, | 
|---|
|  | 439 | that undo and redo manipulate.</para> | 
|---|
|  | 440 | </section> | 
|---|
|  | 441 |  | 
|---|
| [9bce96] | 442 | <section xml:id='fileparsers'> | 
|---|
|  | 443 | <title xml:id='fileparsers.title'>File parsers</title> | 
|---|
| [6029a6] | 444 |  | 
|---|
|  | 445 | <para>We have already given a list of all known file formats, see | 
|---|
| [9bce96] | 446 | <link linkend="fileformats">File formats</link>. Next, we explain how these | 
|---|
| [6029a6] | 447 | file formats are picked and manipulated.</para> | 
|---|
|  | 448 |  | 
|---|
| [9bce96] | 449 | <section xml:id='fileparsers.parsing'> | 
|---|
|  | 450 | <title xml:id='fileparsers.parsing.title'>Parsing files</title> | 
|---|
| [6029a6] | 451 |  | 
|---|
|  | 452 | <para>We already discussed that the command-line interface works | 
|---|
|  | 453 | state-based and hence you should supply it with a file to work | 
|---|
|  | 454 | on.</para> | 
|---|
|  | 455 |  | 
|---|
|  | 456 | <programlisting>... --input water.data</programlisting> | 
|---|
|  | 457 |  | 
|---|
|  | 458 | <para>This will load all information, especially atoms with their | 
|---|
|  | 459 | element and position, from the file <filename>water.data</filename> | 
|---|
|  | 460 | into the state. All changes will eventually be stored to this file, | 
|---|
|  | 461 | or to files with the prefix <filename>water</filename> and suffixes | 
|---|
|  | 462 | of desired file formats, e.g. <filename>water.in</filename> if you | 
|---|
|  | 463 | specified <productname>MPQC</productname>.</para> | 
|---|
|  | 464 |  | 
|---|
|  | 465 | <programlisting>... --load morewater.xyz</programlisting> | 
|---|
|  | 466 |  | 
|---|
|  | 467 | <para>This will load another file <filename>water.xyz</filename>, | 
|---|
|  | 468 | however changes will still be written to files prefixed with | 
|---|
|  | 469 | <filename>water</filename>. Note that now already two state files | 
|---|
|  | 470 | will stored, <filename>water.data</filename> and | 
|---|
|  | 471 | <filename>water.xyz</filename> as these two different file formats | 
|---|
|  | 472 | have been used.</para> | 
|---|
|  | 473 | </section> | 
|---|
|  | 474 |  | 
|---|
| [9bce96] | 475 | <section xml:id='fileparsers.set-output'> | 
|---|
|  | 476 | <title xml:id='fileparsers.set-output.tile'>Adding output file | 
|---|
|  | 477 | formats</title> | 
|---|
| [6029a6] | 478 |  | 
|---|
|  | 479 | <para>We already know that loading a file also picks a file format | 
|---|
|  | 480 | by its suffix. We may add further file formats to which the state of | 
|---|
|  | 481 | the molecular system on program exit.</para> | 
|---|
|  | 482 |  | 
|---|
|  | 483 | <programlisting>... --set-output mpqc tremolo</programlisting> | 
|---|
|  | 484 |  | 
|---|
|  | 485 | <para>This will store the final state of the molecular systems as | 
|---|
|  | 486 | <productname>MPQC</productname> and as | 
|---|
|  | 487 | <productname>TREMOLO</productname> configuration file.</para> | 
|---|
|  | 488 | </section> | 
|---|
|  | 489 |  | 
|---|
| [9bce96] | 490 | <section xml:id='fileparsers.output-as'> | 
|---|
|  | 491 | <title xml:id='fileparsers.output-as.title'>Output the current | 
|---|
|  | 492 | molecular system</title> | 
|---|
| [6029a6] | 493 |  | 
|---|
| [f73e06] | 494 | <para>This will store the current World, i.e. all its atoms, to a | 
|---|
|  | 495 | given file, where the output format is determined from the file | 
|---|
|  | 496 | suffix.</para> | 
|---|
| [6029a6] | 497 |  | 
|---|
| [f73e06] | 498 | <programlisting>... --output-as world.xyz</programlisting> | 
|---|
| [6029a6] | 499 | </section> | 
|---|
|  | 500 |  | 
|---|
| [9bce96] | 501 | <section xml:id='fileparsers.save-selected-molecules'> | 
|---|
|  | 502 | <title xml:id='fileparsers.save-selected-molecules.title'>Output | 
|---|
|  | 503 | the current molecular system</title> | 
|---|
| [6029a6] | 504 |  | 
|---|
| [f73e06] | 505 | <para>This will store all atoms contained in the currently selected | 
|---|
|  | 506 | molecules to file. This is different to "store-saturated-fragment" | 
|---|
|  | 507 | as it will not saturate dangling bonds because only whole molecules, | 
|---|
|  | 508 | i.e. whose bond graph is connected, will be stored.</para> | 
|---|
| [6029a6] | 509 |  | 
|---|
| [f73e06] | 510 | <programlisting>... --save-selected-molecules waters.pdb | 
|---|
|  | 511 | </programlisting> | 
|---|
|  | 512 | </section> | 
|---|
| [6029a6] | 513 |  | 
|---|
| [9bce96] | 514 | <section xml:id='fileparsers.bond-file'> | 
|---|
|  | 515 | <title xml:id='fileparsers.bond-file.title'>Load extra bond | 
|---|
|  | 516 | information</title> | 
|---|
| [6029a6] | 517 |  | 
|---|
| [f73e06] | 518 | <para>For some parsers bond information is stored not with the atoms | 
|---|
|  | 519 | coordinates but in an extra file. This action parses such a file.</para> | 
|---|
| [6029a6] | 520 |  | 
|---|
| [f73e06] | 521 | <programlisting>... --bond-file water.dbond | 
|---|
|  | 522 | </programlisting> | 
|---|
| [6029a6] | 523 | </section> | 
|---|
|  | 524 | </section> | 
|---|
|  | 525 |  | 
|---|
| [9bce96] | 526 | <section xml:id='selections'> | 
|---|
|  | 527 | <title xml:id='selections.title'>Selections and unselections</title> | 
|---|
| [6029a6] | 528 |  | 
|---|
|  | 529 | <para>In order to tell MoleCuilder on what subset of atoms a specific | 
|---|
|  | 530 | Action is to be performed, there are <emphasis>selection | 
|---|
|  | 531 | actions</emphasis>. Note that a selection per se does not change | 
|---|
|  | 532 | anything in the state of the molecular system in any way.</para> | 
|---|
|  | 533 |  | 
|---|
|  | 534 | <para>Selections either work on atoms, on molecules, or on shapes | 
|---|
|  | 535 | (this we explain lateron). A given selection is maintained from the | 
|---|
|  | 536 | execution of the selection action to the end of program or until | 
|---|
|  | 537 | modified by another selection applied on the same type (atom, | 
|---|
|  | 538 | molecule, shape).</para> | 
|---|
|  | 539 |  | 
|---|
|  | 540 | <para>We only give a brief list on the kind of selections per type, | 
|---|
|  | 541 | each action is executed either as follows, exemplified by selecting | 
|---|
|  | 542 | all atoms.</para> | 
|---|
|  | 543 |  | 
|---|
|  | 544 | <programlisting>.... --select-all-atoms</programlisting> | 
|---|
|  | 545 |  | 
|---|
|  | 546 | <para>or, exemplified by unselecting the last molecule,</para> | 
|---|
|  | 547 |  | 
|---|
|  | 548 | <programlisting>... --unselect-molecule-by-order -1</programlisting> | 
|---|
|  | 549 |  | 
|---|
|  | 550 | <itemizedlist> | 
|---|
|  | 551 | <listitem> | 
|---|
|  | 552 | <para>Atoms</para> | 
|---|
|  | 553 |  | 
|---|
|  | 554 | <itemizedlist> | 
|---|
| [f73e06] | 555 | <listitem> | 
|---|
|  | 556 | <para>All</para> | 
|---|
|  | 557 | <programlisting> | 
|---|
|  | 558 | ... --select-all-atoms | 
|---|
|  | 559 | </programlisting> | 
|---|
|  | 560 | </listitem> | 
|---|
|  | 561 |  | 
|---|
|  | 562 | <listitem> | 
|---|
|  | 563 | <para>None</para> | 
|---|
|  | 564 | <programlisting> | 
|---|
|  | 565 | ... --unselect-all-atoms | 
|---|
|  | 566 | </programlisting> | 
|---|
|  | 567 | <programlisting> | 
|---|
|  | 568 | ... --clear-atom-selection | 
|---|
|  | 569 | </programlisting> | 
|---|
|  | 570 | </listitem> | 
|---|
|  | 571 |  | 
|---|
|  | 572 | <listitem> | 
|---|
|  | 573 | <para>Invert selection</para> | 
|---|
|  | 574 | <programlisting> | 
|---|
|  | 575 | ... --invert-atoms | 
|---|
|  | 576 | </programlisting> | 
|---|
|  | 577 | </listitem> | 
|---|
|  | 578 |  | 
|---|
| [6029a6] | 579 | <listitem> | 
|---|
|  | 580 | <para>By Element (all hydrogen atoms, all sulphur atoms, | 
|---|
|  | 581 | ...)</para> | 
|---|
| [f73e06] | 582 | <programlisting> | 
|---|
|  | 583 | ... --select-atom-by-element 1 | 
|---|
|  | 584 | </programlisting> | 
|---|
|  | 585 | <programlisting> | 
|---|
|  | 586 | ... --unselect-atom-by-element 1 | 
|---|
|  | 587 | </programlisting> | 
|---|
| [6029a6] | 588 | </listitem> | 
|---|
|  | 589 |  | 
|---|
|  | 590 | <listitem> | 
|---|
|  | 591 | <para>By Id (atom with id 76)</para> | 
|---|
| [f73e06] | 592 | <programlisting> | 
|---|
|  | 593 | ... --select-atom-by-id 76 | 
|---|
|  | 594 | </programlisting> | 
|---|
|  | 595 | <programlisting> | 
|---|
|  | 596 | ... --unselect-atom-by-id 76 | 
|---|
|  | 597 | </programlisting> | 
|---|
| [6029a6] | 598 | </listitem> | 
|---|
|  | 599 |  | 
|---|
|  | 600 | <listitem> | 
|---|
| [f73e06] | 601 | <para>By Order (the first (1), the second, ... the last | 
|---|
|  | 602 | created(-1), the last but one)</para> | 
|---|
|  | 603 | <programlisting> | 
|---|
|  | 604 | ... --select-atom-by-order 1 | 
|---|
|  | 605 | </programlisting> | 
|---|
|  | 606 | <programlisting> | 
|---|
|  | 607 | ... --unselect-atom-by-order -2 | 
|---|
|  | 608 | </programlisting> | 
|---|
| [6029a6] | 609 | </listitem> | 
|---|
|  | 610 |  | 
|---|
|  | 611 | <listitem> | 
|---|
|  | 612 | <para>By Shape (specific region of the domain)</para> | 
|---|
| [f73e06] | 613 | <programlisting> | 
|---|
|  | 614 | ... --select-atom-inside-volume | 
|---|
|  | 615 | </programlisting> | 
|---|
|  | 616 | <programlisting> | 
|---|
|  | 617 | ... --unselect-atoms-inside-volume | 
|---|
|  | 618 | </programlisting> | 
|---|
| [6029a6] | 619 | </listitem> | 
|---|
|  | 620 |  | 
|---|
|  | 621 | <listitem> | 
|---|
|  | 622 | <para>By Molecule (all atoms belonging to currently selected | 
|---|
|  | 623 | molecules)</para> | 
|---|
| [f73e06] | 624 | <programlisting> | 
|---|
|  | 625 | ... --select-molecules-atoms | 
|---|
|  | 626 | </programlisting> | 
|---|
|  | 627 | <programlisting> | 
|---|
|  | 628 | ... --unselect-molecules-atoms | 
|---|
|  | 629 | </programlisting> | 
|---|
| [6029a6] | 630 | </listitem> | 
|---|
| [3213f2] | 631 |  | 
|---|
|  | 632 | <listitem> | 
|---|
|  | 633 | <para>Push/Pop the current selection to/from a stack to store | 
|---|
|  | 634 | it momentarily and allow modifications in MakroActions.</para> | 
|---|
|  | 635 | <programlisting> | 
|---|
|  | 636 | ... --push-atom-selection | 
|---|
|  | 637 | </programlisting> | 
|---|
|  | 638 | <programlisting> | 
|---|
|  | 639 | ... --pop-atom-selection | 
|---|
|  | 640 | </programlisting> | 
|---|
|  | 641 | </listitem> | 
|---|
| [6029a6] | 642 | </itemizedlist> | 
|---|
|  | 643 | </listitem> | 
|---|
|  | 644 |  | 
|---|
|  | 645 | <listitem> | 
|---|
|  | 646 | <para>Molecules</para> | 
|---|
|  | 647 |  | 
|---|
|  | 648 | <itemizedlist> | 
|---|
| [f73e06] | 649 | <listitem> | 
|---|
|  | 650 | <para>All</para> | 
|---|
|  | 651 | <programlisting> | 
|---|
|  | 652 | ... --select-all-molecules | 
|---|
|  | 653 | </programlisting> | 
|---|
|  | 654 | </listitem> | 
|---|
|  | 655 |  | 
|---|
|  | 656 | <listitem> | 
|---|
|  | 657 | <para>None</para> | 
|---|
|  | 658 | <programlisting> | 
|---|
|  | 659 | ... --unselect-all-molecules | 
|---|
|  | 660 | </programlisting> | 
|---|
|  | 661 | <programlisting> | 
|---|
|  | 662 | ... --clear-molecule-selection | 
|---|
|  | 663 | </programlisting> | 
|---|
|  | 664 | </listitem> | 
|---|
|  | 665 |  | 
|---|
|  | 666 | <listitem> | 
|---|
|  | 667 | <para>Invert selection</para> | 
|---|
|  | 668 | <programlisting> | 
|---|
|  | 669 | ... --invert-molecules | 
|---|
|  | 670 | </programlisting> | 
|---|
|  | 671 | </listitem> | 
|---|
|  | 672 |  | 
|---|
| [6029a6] | 673 | <listitem> | 
|---|
|  | 674 | <para>By Id (molecule with id 4)</para> | 
|---|
| [f73e06] | 675 | <programlisting> | 
|---|
|  | 676 | ... --select-molecule-by-id 2 | 
|---|
|  | 677 | </programlisting> | 
|---|
|  | 678 | <programlisting> | 
|---|
|  | 679 | ... --unselect-molecule-by-id 2 | 
|---|
|  | 680 | </programlisting> | 
|---|
| [6029a6] | 681 | </listitem> | 
|---|
|  | 682 |  | 
|---|
|  | 683 | <listitem> | 
|---|
| [f73e06] | 684 | <para>By Order (first created molecule, second created | 
|---|
|  | 685 | molecule, ...)</para> | 
|---|
|  | 686 | <programlisting> | 
|---|
|  | 687 | ... --select-molecule-by-order 2 | 
|---|
|  | 688 | </programlisting> | 
|---|
|  | 689 | <programlisting> | 
|---|
|  | 690 | ... --unselect-molecule-by-order -2 | 
|---|
|  | 691 | </programlisting> | 
|---|
| [6029a6] | 692 | </listitem> | 
|---|
|  | 693 |  | 
|---|
|  | 694 | <listitem> | 
|---|
| [f73e06] | 695 | <para>By Formula (molecule with H2O as formula)</para> | 
|---|
|  | 696 | <programlisting> | 
|---|
|  | 697 | ... --select-molecules-by-formula "H2O" | 
|---|
|  | 698 | </programlisting> | 
|---|
|  | 699 | <programlisting> | 
|---|
|  | 700 | ... --unselect-molecules-by-formula "H2O" | 
|---|
|  | 701 | </programlisting> | 
|---|
|  | 702 | </listitem> | 
|---|
|  | 703 |  | 
|---|
|  | 704 | <listitem> | 
|---|
|  | 705 | <para>By Name (molecule named "water4")</para> | 
|---|
|  | 706 | <programlisting> | 
|---|
|  | 707 | ... --select-molecules-by-name "water4" | 
|---|
|  | 708 | </programlisting> | 
|---|
|  | 709 | <programlisting> | 
|---|
|  | 710 | ... --unselect-molecules-by-name "water4" | 
|---|
|  | 711 | </programlisting> | 
|---|
| [6029a6] | 712 | </listitem> | 
|---|
|  | 713 |  | 
|---|
|  | 714 | <listitem> | 
|---|
|  | 715 | <para>By Atom (all molecules for which at least one atom is | 
|---|
|  | 716 | currently selected)</para> | 
|---|
| [f73e06] | 717 | <programlisting> | 
|---|
|  | 718 | ... --select-atoms-molecules | 
|---|
|  | 719 | </programlisting> | 
|---|
|  | 720 | <programlisting> | 
|---|
|  | 721 | ... --unselect-atoms-molecules | 
|---|
|  | 722 | </programlisting> | 
|---|
| [6029a6] | 723 | </listitem> | 
|---|
| [a84e8d] | 724 |  | 
|---|
|  | 725 | <listitem> | 
|---|
|  | 726 | <para>Push/Pop the current selection to/from a stack to store | 
|---|
|  | 727 | it momentarily and allow modifications in MakroActions.</para> | 
|---|
|  | 728 | <programlisting> | 
|---|
|  | 729 | ... --push-molecule-selection | 
|---|
|  | 730 | </programlisting> | 
|---|
|  | 731 | <programlisting> | 
|---|
|  | 732 | ... --pop-molecule-selection | 
|---|
|  | 733 | </programlisting> | 
|---|
|  | 734 | </listitem> | 
|---|
| [6029a6] | 735 | </itemizedlist> | 
|---|
|  | 736 | </listitem> | 
|---|
|  | 737 |  | 
|---|
|  | 738 | <listitem> | 
|---|
|  | 739 | <para>Shapes</para> | 
|---|
|  | 740 |  | 
|---|
|  | 741 | <itemizedlist> | 
|---|
|  | 742 | <listitem> | 
|---|
| [f73e06] | 743 | <para>All</para> | 
|---|
|  | 744 | <programlisting> | 
|---|
|  | 745 | ... --select-all-shapes | 
|---|
|  | 746 | </programlisting> | 
|---|
| [6029a6] | 747 | </listitem> | 
|---|
|  | 748 |  | 
|---|
|  | 749 | <listitem> | 
|---|
| [f73e06] | 750 | <para>None</para> | 
|---|
|  | 751 | <programlisting> | 
|---|
|  | 752 | ... --unselect-all-shapes | 
|---|
|  | 753 | </programlisting> | 
|---|
| [6029a6] | 754 | </listitem> | 
|---|
|  | 755 |  | 
|---|
|  | 756 | <listitem> | 
|---|
| [f73e06] | 757 | <para>By Name (shape name "sphere1")</para> | 
|---|
|  | 758 | <programlisting> | 
|---|
|  | 759 | ... --select-shape-by-name "sphere1" | 
|---|
|  | 760 | </programlisting> | 
|---|
|  | 761 | <programlisting> | 
|---|
|  | 762 | ... --unselect-shape-by-name "sphere1" | 
|---|
|  | 763 | </programlisting> | 
|---|
| [6029a6] | 764 | </listitem> | 
|---|
|  | 765 | </itemizedlist> | 
|---|
|  | 766 | </listitem> | 
|---|
|  | 767 |  | 
|---|
| [f73e06] | 768 | </itemizedlist> | 
|---|
| [6029a6] | 769 |  | 
|---|
|  | 770 | <remark>Note that an unselected instance (e.g. an atom) remains | 
|---|
|  | 771 | unselected upon further unselection and vice versa with | 
|---|
|  | 772 | selection.</remark> | 
|---|
|  | 773 |  | 
|---|
|  | 774 | <para>These above selections work then in conjunction with other | 
|---|
|  | 775 | actions and make them very powerful, e.g. you can remove all atoms | 
|---|
|  | 776 | inside a sphere by a selecting the spherical shape and subsequently | 
|---|
|  | 777 | selecting all atoms inside the shape and then removing them.</para> | 
|---|
|  | 778 | </section> | 
|---|
|  | 779 |  | 
|---|
| [9bce96] | 780 | <section xml:id='shapes'> | 
|---|
|  | 781 | <title xml:id='shapes.title'>Shapes</title> | 
|---|
| [6029a6] | 782 |  | 
|---|
|  | 783 | <para>Shapes are specific regions of the domain. There are just a few | 
|---|
|  | 784 | so-called <emphasis>primitive</emphasis> shapes such as cuboid, | 
|---|
|  | 785 | sphere, cylinder, the whole domain, none of it. However, these can be | 
|---|
|  | 786 | combined via boolean operations such as and, or, and not. This | 
|---|
|  | 787 | approach is called <emphasis>constructive geometry</emphasis>. E.g. by | 
|---|
|  | 788 | combining a sphere with the negated (not) of a smaller sphere, we | 
|---|
|  | 789 | obtain a spherical surface of specific thickness.</para> | 
|---|
|  | 790 |  | 
|---|
| [9bce96] | 791 | <section xml:id='shapes.create-shape'> | 
|---|
|  | 792 | <title xml:id='shapes.create-shape.title'>Creating shapes</title> | 
|---|
| [6029a6] | 793 |  | 
|---|
|  | 794 | <para>Primitive shapes can be created as follows,</para> | 
|---|
|  | 795 |  | 
|---|
|  | 796 | <programlisting> | 
|---|
|  | 797 | ... --create-shape \ | 
|---|
|  | 798 | --shape-type sphere \ | 
|---|
|  | 799 | --shape-name "sphere1" \ | 
|---|
|  | 800 | --stretch "2,2,2" \ | 
|---|
|  | 801 | --translation "5,5,5" | 
|---|
|  | 802 | </programlisting> | 
|---|
|  | 803 |  | 
|---|
|  | 804 | <para>This will create a sphere of radius 2 (initial radius is 1) | 
|---|
|  | 805 | with name "sphere1" that is centered at (5,5,5). Other primitives at | 
|---|
|  | 806 | cuboid and cylinder, where a rotation can be specified as | 
|---|
|  | 807 | follows.</para> | 
|---|
|  | 808 |  | 
|---|
|  | 809 | <programlisting> | 
|---|
|  | 810 | ... --create-shape \ | 
|---|
|  | 811 | --shape-type cuboid \ | 
|---|
|  | 812 | --shape-name "box" \ | 
|---|
|  | 813 | --stretch "1,2,2" \ | 
|---|
|  | 814 | --translation "5,5,5" \ | 
|---|
|  | 815 | --angle-x "90" | 
|---|
|  | 816 | </programlisting> | 
|---|
|  | 817 | </section> | 
|---|
|  | 818 |  | 
|---|
| [9bce96] | 819 | <section xml:id='shapes.combine-shapes'> | 
|---|
|  | 820 | <title xml:id='shapes.combine-shapes.title'>Combining shapes</title> | 
|---|
| [f73e06] | 821 |  | 
|---|
|  | 822 | <para>Any two shapes can be combined by boolean operations as follows</para> | 
|---|
|  | 823 |  | 
|---|
|  | 824 | <programlisting> | 
|---|
|  | 825 | ... --combine-shapes \ | 
|---|
|  | 826 | --shape-name "combinedshape" \ | 
|---|
|  | 827 | --shape-op "AND" \ | 
|---|
|  | 828 | </programlisting> | 
|---|
|  | 829 |  | 
|---|
|  | 830 | <para>This will combine two currently selected shapes vis the "AND" operation | 
|---|
|  | 831 | and create a new shape called "combinedshape". Note that the two old shapes | 
|---|
|  | 832 | are still present after this operation. We briefly explain each operation: | 
|---|
|  | 833 | </para> | 
|---|
|  | 834 | <itemizedlist> | 
|---|
|  | 835 | <listitem> | 
|---|
|  | 836 | <para><emphasis>AND</emphasis> combines two currently selected shapes | 
|---|
|  | 837 | into a new shape that only consists of the volume where shapes overlap.</para> | 
|---|
|  | 838 | </listitem> | 
|---|
|  | 839 | <listitem> | 
|---|
|  | 840 | <para><emphasis>OR</emphasis> combines two currently selected shapes | 
|---|
|  | 841 | into a new shape that consists of all the volume where that either shape | 
|---|
|  | 842 | occupies.</para> | 
|---|
|  | 843 | </listitem> | 
|---|
|  | 844 | <listitem> | 
|---|
|  | 845 | <para><emphasis>NOT</emphasis> creates the inverse to a currently selected | 
|---|
|  | 846 | single shape that contains the volume with respect to the simulation domain | 
|---|
|  | 847 | that the present one does not.</para> | 
|---|
|  | 848 | </listitem> | 
|---|
|  | 849 | </itemizedlist> | 
|---|
|  | 850 | </section> | 
|---|
|  | 851 |  | 
|---|
| [9bce96] | 852 | <section xml:id='shapes.remove-shape'> | 
|---|
|  | 853 | <title xml:id='shapes.remove-shape.title'>Removing shapes</title> | 
|---|
| [6029a6] | 854 |  | 
|---|
|  | 855 | <para>Removing a shape is as simple as removing an atom.</para> | 
|---|
|  | 856 |  | 
|---|
|  | 857 | <programlisting>... --remove-shape </programlisting> | 
|---|
|  | 858 |  | 
|---|
|  | 859 | <para>This removes the currently selected shapes.</para> | 
|---|
|  | 860 | </section> | 
|---|
|  | 861 |  | 
|---|
| [9bce96] | 862 | <section xml:id='shapes.manipulation'> | 
|---|
|  | 863 | <title xml:id='shapes.manipulation.title'>Manipulating shapes</title> | 
|---|
| [6029a6] | 864 |  | 
|---|
|  | 865 | <para>Shapes can be stretched, scaled, rotated, and translated to | 
|---|
|  | 866 | modify primitives or combined primitive shapes. As you have seen | 
|---|
|  | 867 | this manipulation could have occurred already at creation but also | 
|---|
|  | 868 | later on. We just the list examples of the various manipulations | 
|---|
|  | 869 | below, each works on the currently selected shapes.</para> | 
|---|
|  | 870 |  | 
|---|
|  | 871 | <programlisting> | 
|---|
|  | 872 | ... --stretch-shapes "1,1,2" \ | 
|---|
|  | 873 | --stretch-center "5,5,5" | 
|---|
|  | 874 | </programlisting> | 
|---|
|  | 875 |  | 
|---|
|  | 876 | <para>This stretches the shapes relative to the center at (5,5,5) | 
|---|
|  | 877 | (default is origin) by a factor of 2 in the z direction.</para> | 
|---|
|  | 878 |  | 
|---|
|  | 879 | <programlisting> | 
|---|
| [f73e06] | 880 | ... --rotate-shapes \ | 
|---|
| [6029a6] | 881 | --center "10,2,2" \ | 
|---|
|  | 882 | --angle-x 90 \ | 
|---|
|  | 883 | --angle-y 0 \ | 
|---|
|  | 884 | --angle-z 0 | 
|---|
|  | 885 | </programlisting> | 
|---|
|  | 886 |  | 
|---|
|  | 887 | <para>This way all selected shapes are rotated by 90 degrees around | 
|---|
|  | 888 | the x axis with respect to the center at (10,2,2).</para> | 
|---|
|  | 889 |  | 
|---|
|  | 890 | <programlisting>... --translate-shapes "5,0,0" </programlisting> | 
|---|
|  | 891 |  | 
|---|
|  | 892 | <para>This translates all selected shapes by 5 along the x | 
|---|
|  | 893 | axis.</para> | 
|---|
|  | 894 | </section> | 
|---|
|  | 895 | </section> | 
|---|
|  | 896 |  | 
|---|
| [9bce96] | 897 | <section xml:id='randomization'> | 
|---|
|  | 898 | <title xml:id='randomization.title'>Randomization</title> | 
|---|
| [6029a6] | 899 |  | 
|---|
|  | 900 | <para>Some operations require randomness as input, e.g. when filling a | 
|---|
|  | 901 | domain with molecules these may be randomly translated and rotated. | 
|---|
|  | 902 | Random values are obtained by a random number generator that consists | 
|---|
|  | 903 | of two parts: engine and distribution. The engine yields a uniform set | 
|---|
|  | 904 | of random numbers in a specific interval, the distribution modifies | 
|---|
|  | 905 | them, e.g. to become gaussian.</para> | 
|---|
|  | 906 |  | 
|---|
|  | 907 | <para>There are several Actions to modify the specific engine and | 
|---|
|  | 908 | distribution and their parameters. One example usage is that with the | 
|---|
|  | 909 | aforementioned filling of the domain molecules are rotated randomly. | 
|---|
|  | 910 | If you specify a random number generator that randomly just spills out | 
|---|
|  | 911 | values 0,1,2,3, then the randomness is just the orientation of the | 
|---|
|  | 912 | molecule with respect to a specific axis: x,y,z. (rotation is at most | 
|---|
|  | 913 | 360 degrees and 0,1,2,3 act as divisor, hence rotation angle is always | 
|---|
|  | 914 | a multiple of 90 degrees).</para> | 
|---|
|  | 915 |  | 
|---|
|  | 916 | <programlisting> | 
|---|
|  | 917 | ... --set-random-number-distribution "uniform_int" \ | 
|---|
|  | 918 | --random-number-distribution-parameters "p=1" | 
|---|
|  | 919 | </programlisting> | 
|---|
|  | 920 |  | 
|---|
|  | 921 | <para>This changes the distribution to "uniform_int", i.e. integer | 
|---|
|  | 922 | numbers distributed uniformly.</para> | 
|---|
|  | 923 |  | 
|---|
|  | 924 | <programlisting> | 
|---|
|  | 925 | ... --set-random-number-engine "mt19937" \ | 
|---|
|  | 926 | --random-numner-engine-parameters "seed=10" | 
|---|
|  | 927 | </programlisting> | 
|---|
|  | 928 |  | 
|---|
|  | 929 | <para>Specifying the seed allows you to obtain the same sequence of | 
|---|
|  | 930 | random numbers for testing purposes.</para> | 
|---|
|  | 931 | </section> | 
|---|
|  | 932 |  | 
|---|
| [9bce96] | 933 | <section xml:id='atoms'> | 
|---|
|  | 934 | <title xml:id='atoms.title'>Manipulate atoms</title> | 
|---|
| [6029a6] | 935 |  | 
|---|
|  | 936 | <para>Here, we explain in detail how to add, remove atoms, change its | 
|---|
|  | 937 | element type, scale the bond in between or measure the bond length or | 
|---|
|  | 938 | angle.</para> | 
|---|
|  | 939 |  | 
|---|
| [9bce96] | 940 | <section xml:id='atoms.add-atom'> | 
|---|
|  | 941 | <title xml:id='atoms.add-atom.title'>Adding atoms</title> | 
|---|
| [6029a6] | 942 |  | 
|---|
|  | 943 | <para>Adding an atom to the domain requires the element of the atom | 
|---|
|  | 944 | and its coordinates as follows,</para> | 
|---|
|  | 945 |  | 
|---|
|  | 946 | <programlisting> | 
|---|
|  | 947 | ... --add-atom O \ | 
|---|
|  | 948 | --domain-position "2.,3.,2.35" | 
|---|
|  | 949 | </programlisting> | 
|---|
|  | 950 |  | 
|---|
|  | 951 | <para>where the element is given via its chemical symbol and the | 
|---|
|  | 952 | vector gives the position within the domain</para> | 
|---|
|  | 953 | </section> | 
|---|
|  | 954 |  | 
|---|
| [9bce96] | 955 | <section xml:id='atoms.remove-atom'> | 
|---|
|  | 956 | <title xml:id='atoms.remove-atom.title'>Removing atoms</title> | 
|---|
| [6029a6] | 957 |  | 
|---|
|  | 958 | <para>Removing atom(s) does not need any option and operates on the | 
|---|
|  | 959 | currently selected ones.</para> | 
|---|
|  | 960 |  | 
|---|
|  | 961 | <programlisting>... --remove-atom</programlisting> | 
|---|
|  | 962 | </section> | 
|---|
|  | 963 |  | 
|---|
| [9bce96] | 964 | <section xml:id='atoms.translate-atom'> | 
|---|
|  | 965 | <title xml:id='atoms.translate-atom.title'>Translating atoms</title> | 
|---|
| [6029a6] | 966 |  | 
|---|
|  | 967 | <para>In order to translate the current selected subset of atoms you | 
|---|
|  | 968 | specify a translation vector.</para> | 
|---|
|  | 969 |  | 
|---|
|  | 970 | <programlisting> | 
|---|
|  | 971 | ... --translate-atoms "-1,0,0" \ | 
|---|
|  | 972 | --periodic 0 | 
|---|
|  | 973 | </programlisting> | 
|---|
|  | 974 |  | 
|---|
|  | 975 | <para>This translate all atoms by "-1" along the x axis and does not | 
|---|
|  | 976 | mind the boundary conditions, i.e. might shift atoms outside of the | 
|---|
|  | 977 | domain.</para> | 
|---|
|  | 978 | </section> | 
|---|
|  | 979 |  | 
|---|
| [bbf6dc] | 980 | <section xml:id='atoms.mirror-atoms'> | 
|---|
|  | 981 | <title xml:id='atoms.mirror-atoms.title'>Mirroring atoms</title> | 
|---|
|  | 982 |  | 
|---|
|  | 983 | <para>Present (and selected) atoms can be mirrored with respect to | 
|---|
|  | 984 | a certain plane. You have to specify the normal vector of the plane | 
|---|
|  | 985 | and the offset with respect to the origin as follows</para> | 
|---|
|  | 986 |  | 
|---|
|  | 987 | <programlisting> | 
|---|
|  | 988 | ... --mirror-atoms "1,0,0" \ | 
|---|
|  | 989 | --plane-offset 10.1 \ | 
|---|
|  | 990 | --periodic 0 | 
|---|
|  | 991 | </programlisting> | 
|---|
|  | 992 | </section> | 
|---|
|  | 993 |  | 
|---|
| [c7fe90] | 994 | <section xml:id='atoms.translate-to-origin'> | 
|---|
|  | 995 | <title xml:id='atoms.translate-to-origin.title'>Translating atoms</title> | 
|---|
|  | 996 |  | 
|---|
|  | 997 | <para>The following Action is convenient to place a subset of atoms | 
|---|
|  | 998 | at a known position, the origin, and then translate to some other | 
|---|
|  | 999 | absolute coordinate. It calculates the average position of the set | 
|---|
|  | 1000 | of selected atoms and then translates all atoms by the negative of | 
|---|
|  | 1001 | this center, i.e. the center is afterwards at the origin.</para> | 
|---|
|  | 1002 |  | 
|---|
|  | 1003 | <programlisting>... --translate-to-origin</programlisting> | 
|---|
|  | 1004 | </section> | 
|---|
|  | 1005 |  | 
|---|
| [9bce96] | 1006 | <section xml:id='atoms.change-element'> | 
|---|
|  | 1007 | <title xml:id='atoms.change-element.title'>Changing an atoms element | 
|---|
|  | 1008 | </title> | 
|---|
| [6029a6] | 1009 |  | 
|---|
|  | 1010 | <para>You can easily turn lead or silver into gold, by selecting the | 
|---|
|  | 1011 | silver atom and calling the change element action.</para> | 
|---|
|  | 1012 |  | 
|---|
|  | 1013 | <programlisting>... --change-element Au</programlisting> | 
|---|
|  | 1014 | </section> | 
|---|
|  | 1015 | </section> | 
|---|
|  | 1016 |  | 
|---|
| [9bce96] | 1017 | <section xml:id='bond'> | 
|---|
|  | 1018 | <title xml:id='bond.title'>Bond-related manipulation</title> | 
|---|
| [6029a6] | 1019 |  | 
|---|
|  | 1020 | <para>Atoms can also be manipulated with respect to the bonds. | 
|---|
|  | 1021 | <remark>Note that with bonds we always mean covalent bonds.</remark> | 
|---|
|  | 1022 | First, we explain how to modify the bond structure itself, then we go | 
|---|
|  | 1023 | in the details of using the bond information to change bond distance | 
|---|
|  | 1024 | and angles.</para> | 
|---|
|  | 1025 |  | 
|---|
| [9bce96] | 1026 | <section xml:id='bond.create-adjacency'> | 
|---|
|  | 1027 | <title xml:id='bond.create-adjacency.title'>Creating a bond graph | 
|---|
|  | 1028 | </title> | 
|---|
| [6029a6] | 1029 |  | 
|---|
|  | 1030 | <para>In case you have loaded a configuration file with no bond | 
|---|
|  | 1031 | information, e.g. XYZ, it is necessary to create the bond graph. | 
|---|
|  | 1032 | This is done by a heuristic distance criterion.</para> | 
|---|
|  | 1033 |  | 
|---|
|  | 1034 | <programlisting>... --create-adjacency</programlisting> | 
|---|
|  | 1035 |  | 
|---|
|  | 1036 | <para>This uses by default a criterion based on van-der-Waals radii, | 
|---|
|  | 1037 | i.e. if we look at two atoms indexed by "a" and "b"</para> | 
|---|
|  | 1038 |  | 
|---|
|  | 1039 | <equation> | 
|---|
|  | 1040 | <title>V(a) + V(b) - \tau < R_{ab} < V(a) + V(b) + | 
|---|
|  | 1041 | \tau</title> | 
|---|
|  | 1042 |  | 
|---|
|  | 1043 | <m:math display="block"> | 
|---|
|  | 1044 | <m:mi>where V(.) is the lookup table for the radii for a given | 
|---|
|  | 1045 | element and \tau is a threshold value, set to 0.4.</m:mi> | 
|---|
|  | 1046 | </m:math> | 
|---|
|  | 1047 | </equation> | 
|---|
|  | 1048 |  | 
|---|
|  | 1049 | <para>As a second option, you may load a file containing bond table | 
|---|
|  | 1050 | information.</para> | 
|---|
|  | 1051 |  | 
|---|
|  | 1052 | <programlisting>... --bond-table table.dat</programlisting> | 
|---|
|  | 1053 |  | 
|---|
|  | 1054 | <para>which would parse a file <filename>table.dat</filename> for a | 
|---|
|  | 1055 | table giving typical bond distances between elements a and b. These | 
|---|
|  | 1056 | are used in the above criterion as <inlineequation> | 
|---|
|  | 1057 | <m:math display="inline"> | 
|---|
|  | 1058 | <m:mi>V(a,b)</m:mi> | 
|---|
|  | 1059 | </m:math> | 
|---|
|  | 1060 | </inlineequation> in place of <inlineequation> | 
|---|
|  | 1061 | <m:math display="inline"> | 
|---|
|  | 1062 | <m:mi>V(a)+V(b)</m:mi> | 
|---|
|  | 1063 | </m:math> | 
|---|
|  | 1064 | </inlineequation>.</para> | 
|---|
|  | 1065 | </section> | 
|---|
|  | 1066 |  | 
|---|
| [9bce96] | 1067 | <section xml:id='bond.destroy-adjacency'> | 
|---|
|  | 1068 | <title xml:id='bond.destroy-adjacency.title'>Destroying the bond | 
|---|
|  | 1069 | graph</title> | 
|---|
| [6029a6] | 1070 |  | 
|---|
|  | 1071 | <para>The bond graph can be removed completely (and all bonds along | 
|---|
|  | 1072 | with it).</para> | 
|---|
|  | 1073 |  | 
|---|
|  | 1074 | <programlisting>... --destroy-adjacency</programlisting> | 
|---|
|  | 1075 | </section> | 
|---|
|  | 1076 |  | 
|---|
| [9bce96] | 1077 | <section xml:id='bond.correct-bonddegree'> | 
|---|
|  | 1078 | <title xml:id='bond.correct-bonddegree.title'>Correcting bond | 
|---|
|  | 1079 | degrees</title> | 
|---|
| [f73e06] | 1080 |  | 
|---|
|  | 1081 | <para>Typically, after loading an input file bond information, e.g. | 
|---|
|  | 1082 | a PDB file, the bond graph is complete but we lack the weights. That | 
|---|
|  | 1083 | is we do not know whether a bond is single, double, triple, ... | 
|---|
|  | 1084 | This action corrects the bond degree by enforcing charge neutrality | 
|---|
|  | 1085 | among the connected atoms. | 
|---|
|  | 1086 | </para> | 
|---|
|  | 1087 | <para>This action is in fact quadratically scaling in the number of | 
|---|
|  | 1088 | atoms. Hence, for large systems this may take longer than expected. | 
|---|
|  | 1089 | </para> | 
|---|
|  | 1090 |  | 
|---|
|  | 1091 | <programlisting>... --correct-bonddegree</programlisting> | 
|---|
|  | 1092 | </section> | 
|---|
|  | 1093 |  | 
|---|
| [9bce96] | 1094 | <section xml:id='bond.depth-first-search'> | 
|---|
|  | 1095 | <title xml:id='bond.depth-first-search.title'>Analysing a bond | 
|---|
|  | 1096 | graph</title> | 
|---|
| [6029a6] | 1097 |  | 
|---|
|  | 1098 | <para>You can perform a depth-first search analysis that reveals | 
|---|
|  | 1099 | cycles and other graph-related information.</para> | 
|---|
|  | 1100 |  | 
|---|
|  | 1101 | <programlisting>... --depth-first-search</programlisting> | 
|---|
|  | 1102 | </section> | 
|---|
|  | 1103 |  | 
|---|
| [9bce96] | 1104 | <section xml:id='bond.subgraph-dissection'> | 
|---|
|  | 1105 | <title xml:id='bond.subgraph-dissection.title'>Dissecting the | 
|---|
|  | 1106 | molecular system into molecules</title> | 
|---|
| [6029a6] | 1107 |  | 
|---|
|  | 1108 | <para>The bond graph information can be used to recognize the | 
|---|
|  | 1109 | molecule within the system. Imagine you have just loaded a PDB file | 
|---|
|  | 1110 | containing bond information. However, initially all atoms are dumped | 
|---|
|  | 1111 | into the same molecule. Before you can start manipulating, you need | 
|---|
|  | 1112 | to dissect the system into individual molecules. Note that this is | 
|---|
|  | 1113 | just structural information and does not change the state of the | 
|---|
|  | 1114 | system.</para> | 
|---|
|  | 1115 |  | 
|---|
|  | 1116 | <programlisting>... --subgraph-dissection</programlisting> | 
|---|
|  | 1117 |  | 
|---|
|  | 1118 | <para>This analyses the bond graph and splits the single molecule up | 
|---|
|  | 1119 | into individual (new) ones that each contain a single connected | 
|---|
|  | 1120 | subgraph, hence the naming.</para> | 
|---|
|  | 1121 | </section> | 
|---|
|  | 1122 |  | 
|---|
| [9bce96] | 1123 | <section xml:id='bond.update-molecules'> | 
|---|
|  | 1124 | <title xml:id='bond.update-molecules.title'>Updating molecule | 
|---|
|  | 1125 | structure</title> | 
|---|
| [f73e06] | 1126 |  | 
|---|
|  | 1127 | <para>When the bond information has changed, new molecules might | 
|---|
|  | 1128 | have formed, this action updates all the molecules by scanning | 
|---|
|  | 1129 | the connectedness of the bond grapf of the molecular system. | 
|---|
|  | 1130 | </para> | 
|---|
|  | 1131 |  | 
|---|
|  | 1132 | <programlisting>... --update-molecules</programlisting> | 
|---|
|  | 1133 | </section> | 
|---|
|  | 1134 |  | 
|---|
| [9bce96] | 1135 | <section xml:id='bond.add-bond'> | 
|---|
|  | 1136 | <title xml:id='bond.add-bond.title'>Adding a bond manually</title> | 
|---|
| [6029a6] | 1137 |  | 
|---|
|  | 1138 | <para>When the automatically created adjacency or bond graph | 
|---|
|  | 1139 | contains faulty bonds or lacks some, you can add them manually. | 
|---|
|  | 1140 | First, you must have selected two atoms.</para> | 
|---|
|  | 1141 |  | 
|---|
|  | 1142 | <programlisting>... --add-bond</programlisting> | 
|---|
|  | 1143 | </section> | 
|---|
|  | 1144 |  | 
|---|
| [9bce96] | 1145 | <section xml:id='bond.remove-bond'> | 
|---|
|  | 1146 | <title xml:id='bond.remove-bond.title'>Removing a bond manually | 
|---|
|  | 1147 | </title> | 
|---|
| [6029a6] | 1148 |  | 
|---|
|  | 1149 | <para>In much the same way as adding a bond, you can also remove a | 
|---|
|  | 1150 | bond.</para> | 
|---|
|  | 1151 |  | 
|---|
|  | 1152 | <programlisting>... --remove-bond</programlisting> | 
|---|
|  | 1153 | </section> | 
|---|
|  | 1154 |  | 
|---|
| [9bce96] | 1155 | <section xml:id='bond.save-bonds'> | 
|---|
|  | 1156 | <title xml:id='bond.save-bonds.title'>Saving bond information | 
|---|
|  | 1157 | </title> | 
|---|
| [f73e06] | 1158 |  | 
|---|
|  | 1159 | <para>Bond information can be saved to a file in <link | 
|---|
| [9bce96] | 1160 | xlink:href="http://www.molecuilder.com/"><productname>TREMOLO | 
|---|
|  | 1161 | </productname></link>'s dbond style.</para> | 
|---|
| [f73e06] | 1162 |  | 
|---|
|  | 1163 | <programlisting>... --save-bonds system.dbonds</programlisting> | 
|---|
|  | 1164 |  | 
|---|
|  | 1165 | <para>Similarly is the following Action which saves the bond | 
|---|
|  | 1166 | information as a simple list of one atomic id per line and in | 
|---|
|  | 1167 | the same line, separated by spaces, the ids of all atoms connected | 
|---|
|  | 1168 | to it.</para> | 
|---|
|  | 1169 |  | 
|---|
|  | 1170 | <programlisting>... --save-adjacency system.adj</programlisting> | 
|---|
|  | 1171 |  | 
|---|
|  | 1172 | </section> | 
|---|
|  | 1173 |  | 
|---|
| [9bce96] | 1174 | <section xml:id='bond.stretch-bond'> | 
|---|
|  | 1175 | <title xml:id='bond.stretch-bond.title'>Stretching a bond</title> | 
|---|
| [6029a6] | 1176 |  | 
|---|
|  | 1177 | <para>Stretching a bond actually refers to translation of the | 
|---|
|  | 1178 | associated pair of atoms. However, this action will keep the rest of | 
|---|
|  | 1179 | the molecule to which both atoms belong to invariant as well.</para> | 
|---|
|  | 1180 |  | 
|---|
|  | 1181 | <programlisting>... --stretch-bond 1.2</programlisting> | 
|---|
|  | 1182 |  | 
|---|
|  | 1183 | <para>This scales the original bond distance to the new bond | 
|---|
|  | 1184 | distance 1.2, shifting the right hand side and the left hand side of | 
|---|
|  | 1185 | the molecule accordingly.</para> | 
|---|
|  | 1186 |  | 
|---|
|  | 1187 | <warning> | 
|---|
|  | 1188 | <para>this fails with aromatic rings (but you can always | 
|---|
|  | 1189 | undo).</para> | 
|---|
|  | 1190 | </warning> | 
|---|
|  | 1191 | </section> | 
|---|
|  | 1192 |  | 
|---|
| [9bce96] | 1193 | <section xml:id='bond.change-bond-angle'> | 
|---|
|  | 1194 | <title xml:id='bond.change-bond-angle.title'>Changing a bond angle | 
|---|
|  | 1195 | </title> | 
|---|
| [6029a6] | 1196 |  | 
|---|
|  | 1197 | <para>In the same way as stretching a bond, you can change the angle | 
|---|
|  | 1198 | in between two bonds. This works if exactly three atoms are selected | 
|---|
|  | 1199 | and two pairs are bonded.</para> | 
|---|
|  | 1200 |  | 
|---|
|  | 1201 | <programlisting>... --change-bond-angle 90</programlisting> | 
|---|
|  | 1202 |  | 
|---|
|  | 1203 | <para>This will change the angle from its value to 90 degree by | 
|---|
|  | 1204 | translating the two outer atoms of this triangle (the atom connected | 
|---|
|  | 1205 | to both others is the axis of the rotation).</para> | 
|---|
|  | 1206 | </section> | 
|---|
|  | 1207 | </section> | 
|---|
|  | 1208 |  | 
|---|
| [9bce96] | 1209 | <section xml:id='molecule'> | 
|---|
|  | 1210 | <title xml:id='molecule.title'>Manipulate molecules</title> | 
|---|
| [6029a6] | 1211 |  | 
|---|
|  | 1212 | <para>Molecules are agglomerations of atoms that are bonded. Hence, | 
|---|
|  | 1213 | the actions working on molecules differ from those working on atoms. | 
|---|
|  | 1214 | Joining two molecules can only be accomplished by adding a bond in | 
|---|
|  | 1215 | between, and in the reverse fashion splitting a molecule by removing | 
|---|
|  | 1216 | all bonds in between. Actions below mostly deal with copying | 
|---|
|  | 1217 | molecules. Removing of molecules is done via selecting the molecule's | 
|---|
|  | 1218 | atoms and removing them, which removes the atoms as well.</para> | 
|---|
|  | 1219 |  | 
|---|
|  | 1220 | <note> | 
|---|
|  | 1221 | <para>Initially when you load a file via the input action all atoms | 
|---|
|  | 1222 | are placed in a single molecule despite any present bond | 
|---|
| [9bce96] | 1223 | information, see <link linkend="fragmentation">Dissecting the | 
|---|
|  | 1224 | molecular system into molecules</link></para> | 
|---|
| [6029a6] | 1225 | </note> | 
|---|
|  | 1226 |  | 
|---|
| [9bce96] | 1227 | <section xml:id='molecule.copy'> | 
|---|
|  | 1228 | <title xml:id='molecule.copy.title'>Copy molecules</title> | 
|---|
| [6029a6] | 1229 |  | 
|---|
|  | 1230 | <para>A basic operation is to duplicate a molecule. This works on a | 
|---|
|  | 1231 | single, currently selected molecule. Afterwards, we elaborate on a | 
|---|
|  | 1232 | more complex manner of copying, filling a specific shape with | 
|---|
|  | 1233 | molecules.</para> | 
|---|
|  | 1234 |  | 
|---|
|  | 1235 | <programlisting> | 
|---|
|  | 1236 | ... --copy-molecule \ | 
|---|
|  | 1237 | --position "10,10,10" | 
|---|
|  | 1238 | </programlisting> | 
|---|
|  | 1239 |  | 
|---|
|  | 1240 | <para>This action copies the selected molecule and inserts it at the | 
|---|
|  | 1241 | position (10,10,10) in the domain with respect to the molecule's | 
|---|
|  | 1242 | center. In effect, it copies all the atoms of the original molecule | 
|---|
|  | 1243 | and adds new bonds in between these copied atoms such that their | 
|---|
|  | 1244 | bond subgraphs are identical.</para> | 
|---|
|  | 1245 | </section> | 
|---|
|  | 1246 |  | 
|---|
| [9bce96] | 1247 | <section xml:id='molecule.change-molname'> | 
|---|
|  | 1248 | <title xml:id='molecule.change-molname.title'>Change a molecules | 
|---|
|  | 1249 | name</title> | 
|---|
| [6029a6] | 1250 |  | 
|---|
|  | 1251 | <para>You can change the name of a molecule which is important for | 
|---|
|  | 1252 | selection.</para> | 
|---|
|  | 1253 |  | 
|---|
|  | 1254 | <programlisting>... -change-molname "test</programlisting> | 
|---|
|  | 1255 |  | 
|---|
|  | 1256 | <para>This will change the name of the (only) selected molecule to | 
|---|
|  | 1257 | "test".</para> | 
|---|
|  | 1258 |  | 
|---|
|  | 1259 | <para>Connected with this is the default name an unknown molecule | 
|---|
|  | 1260 | gets.</para> | 
|---|
|  | 1261 |  | 
|---|
|  | 1262 | <programlisting>... --default-molname test</programlisting> | 
|---|
|  | 1263 |  | 
|---|
|  | 1264 | <para>This will change the default name of a molecule to | 
|---|
|  | 1265 | "test".</para> | 
|---|
|  | 1266 |  | 
|---|
|  | 1267 | <note> | 
|---|
|  | 1268 | <para>Note that a molecule loaded from file gets the filename | 
|---|
|  | 1269 | (without suffix) as its name.</para> | 
|---|
|  | 1270 | </note> | 
|---|
|  | 1271 | </section> | 
|---|
|  | 1272 |  | 
|---|
| [867473] | 1273 | <section xml:id='molecule.remove-molecule'> | 
|---|
|  | 1274 | <title xml:id='molecule.remove-molecule.title'>Remove molecules | 
|---|
|  | 1275 | </title> | 
|---|
|  | 1276 |  | 
|---|
|  | 1277 | <para>This removes one or multiple selected molecules.</para> | 
|---|
|  | 1278 |  | 
|---|
|  | 1279 | <programlisting>... -remove-molecule</programlisting> | 
|---|
|  | 1280 |  | 
|---|
|  | 1281 | <para>This essentially just removes all of the molecules' atoms | 
|---|
|  | 1282 | which in turn also causes the removal of the molecule.</para> | 
|---|
|  | 1283 | </section> | 
|---|
|  | 1284 |  | 
|---|
| [066442] | 1285 | <section xml:id='molecule.translate-molecules'> | 
|---|
|  | 1286 | <title xml:id='molecule.translate-molecules.title'>Translate molecules | 
|---|
|  | 1287 | </title> | 
|---|
|  | 1288 |  | 
|---|
|  | 1289 | <para>This translates one or multiple selected molecules by a | 
|---|
|  | 1290 | specific offset..</para> | 
|---|
|  | 1291 |  | 
|---|
|  | 1292 | <programlisting>... -translate-molecules</programlisting> | 
|---|
|  | 1293 |  | 
|---|
|  | 1294 | <para>This essentially translates all of the molecules' atoms.</para> | 
|---|
|  | 1295 | </section> | 
|---|
|  | 1296 |  | 
|---|
| [9bce96] | 1297 | <section xml:id='molecule.rotate-around-self'> | 
|---|
|  | 1298 | <title xml:id='molecule.rotate-around-self.title'>Rotate around self | 
|---|
|  | 1299 | </title> | 
|---|
| [6029a6] | 1300 |  | 
|---|
|  | 1301 | <para>You can rotate a molecule around its own axis.</para> | 
|---|
|  | 1302 |  | 
|---|
|  | 1303 | <programlisting> | 
|---|
|  | 1304 | ... --rotate-around-self "90" \ | 
|---|
|  | 1305 | --axis "0,0,1" | 
|---|
|  | 1306 | </programlisting> | 
|---|
|  | 1307 |  | 
|---|
|  | 1308 | <para>This rotates the molecule around the z axis by 90 degrees as | 
|---|
|  | 1309 | if the origin were at its center of origin.</para> | 
|---|
|  | 1310 | </section> | 
|---|
|  | 1311 |  | 
|---|
| [9bce96] | 1312 | <section xml:id='molecule.rotate-around-origin'> | 
|---|
|  | 1313 | <title xml:id='molecule.rotate-around-origin.title'>Rotate around | 
|---|
|  | 1314 | origin</title> | 
|---|
| [6029a6] | 1315 |  | 
|---|
|  | 1316 | <para>In the same manner the molecule can be rotated around an | 
|---|
|  | 1317 | external origin.</para> | 
|---|
|  | 1318 |  | 
|---|
|  | 1319 | <programlisting> | 
|---|
|  | 1320 | ... --rotate-around-origin 90 \ | 
|---|
|  | 1321 | --position "0,0,1"\ | 
|---|
|  | 1322 | </programlisting> | 
|---|
|  | 1323 |  | 
|---|
|  | 1324 | <para>This rotates the molecule around an axis from the origin to | 
|---|
|  | 1325 | the position (0,0,1), i.e. around the z axis, by 90 degrees.</para> | 
|---|
|  | 1326 | </section> | 
|---|
|  | 1327 |  | 
|---|
| [9bce96] | 1328 | <section xml:id='molecule.rotate-to-principal-axis-system'> | 
|---|
|  | 1329 | <title xml:id='molecule.rotate-to-principal-axis-system.title'> | 
|---|
|  | 1330 | Rotate to principal axis system</title> | 
|---|
| [6029a6] | 1331 |  | 
|---|
|  | 1332 | <para>The principal axis system is given by an ellipsoid that mostly | 
|---|
|  | 1333 | matches the molecules shape. The principal axis system can be just | 
|---|
|  | 1334 | simply determined by</para> | 
|---|
|  | 1335 |  | 
|---|
|  | 1336 | <programlisting>... --principal-axis-system</programlisting> | 
|---|
|  | 1337 |  | 
|---|
|  | 1338 | <para>To rotate the molecule around itself to align with this system | 
|---|
|  | 1339 | do as follows.</para> | 
|---|
|  | 1340 |  | 
|---|
| [9bce96] | 1341 | <programlisting>... --rotate-to-principal-axis-system "0,0,1" | 
|---|
|  | 1342 | </programlisting> | 
|---|
| [6029a6] | 1343 |  | 
|---|
|  | 1344 | <para>This rotates the molecule in such a manner that the ellipsoids | 
|---|
|  | 1345 | largest axis is aligned with the z axis. <remark>Note that "0,0,-1" | 
|---|
|  | 1346 | would align anti-parallel.</remark></para> | 
|---|
|  | 1347 | </section> | 
|---|
|  | 1348 |  | 
|---|
| [9bce96] | 1349 | <section xml:id='molecule.verlet-integration'> | 
|---|
|  | 1350 | <title xml:id='molecule.verlet-integration.title'>Perform verlet | 
|---|
|  | 1351 | integration</title> | 
|---|
| [6029a6] | 1352 |  | 
|---|
|  | 1353 | <para>Atoms not only have a position, but each instance also stores | 
|---|
|  | 1354 | velocity and a force vector. These can be used in a velocity verlet | 
|---|
|  | 1355 | integration step. Velocity verlet is a often employed time | 
|---|
|  | 1356 | integration algorithm in molecular dynamics simulations.</para> | 
|---|
|  | 1357 |  | 
|---|
|  | 1358 | <programlisting> | 
|---|
|  | 1359 | ... --verlet-integration \ | 
|---|
|  | 1360 | --deltat 0.1 \ | 
|---|
|  | 1361 | --keep-fixed-CenterOfMass 0 | 
|---|
|  | 1362 | </programlisting> | 
|---|
|  | 1363 |  | 
|---|
|  | 1364 | <para>This will integrate with a timestep of <inlineequation> | 
|---|
|  | 1365 | <m:math display="inline"> | 
|---|
|  | 1366 | <m:mi>\Delta_t = 0.1</m:mi> | 
|---|
|  | 1367 | </m:math> | 
|---|
|  | 1368 | </inlineequation>and correcting forces and velocities such that | 
|---|
|  | 1369 | the sum over all atoms is zero.</para> | 
|---|
|  | 1370 | </section> | 
|---|
| [f73e06] | 1371 |  | 
|---|
| [9bce96] | 1372 | <section xml:id='molecule.force-annealing'> | 
|---|
|  | 1373 | <title xml:id='molecule.force-annealing.title'>Anneal the atomic | 
|---|
|  | 1374 | forces</title> | 
|---|
| [f73e06] | 1375 |  | 
|---|
|  | 1376 | <para>This will shift the atoms in a such a way as to decrease (or | 
|---|
|  | 1377 | anneal) the forces acting upon them.</para> | 
|---|
|  | 1378 |  | 
|---|
|  | 1379 | <para>Forces may either be already present for the set of atoms by | 
|---|
|  | 1380 | some other way (e.g. from a prior fragmentation calculation) or, | 
|---|
|  | 1381 | as shown here, from an external file. We anneal the forces for | 
|---|
|  | 1382 | one step with a certain initial step width of 0.5 atomic time | 
|---|
|  | 1383 | units and do not create a new timestep for each optimization | 
|---|
|  | 1384 | step.</para> | 
|---|
|  | 1385 |  | 
|---|
|  | 1386 | <programlisting> | 
|---|
|  | 1387 | ... --force-annealing \ | 
|---|
|  | 1388 | --forces-file test.forces \ | 
|---|
|  | 1389 | --deltat 0.5 \ | 
|---|
|  | 1390 | --steps 1 \ | 
|---|
|  | 1391 | --output-every-step 0 | 
|---|
|  | 1392 | </programlisting> | 
|---|
|  | 1393 | </section> | 
|---|
|  | 1394 |  | 
|---|
| [9bce96] | 1395 | <section xml:id='molecule.linear-interpolation-of-trajectories'> | 
|---|
|  | 1396 | <title xml:id='molecule.linear-interpolation-of-trajectories.title'> | 
|---|
|  | 1397 | Linear interpolation between configurations</title> | 
|---|
| [f73e06] | 1398 |  | 
|---|
|  | 1399 | <para>This is similar to verlet-integration, only that it performs | 
|---|
|  | 1400 | a linear integration irrespective of the acting atomic forces. | 
|---|
|  | 1401 | </para> | 
|---|
|  | 1402 |  | 
|---|
|  | 1403 | <para>The following call will produce an interpolation between the | 
|---|
|  | 1404 | configurations in time step 0 and time step 1 with 98 intermediate | 
|---|
|  | 1405 | steps, i.e. current step 1 will end up in time step 99. In this | 
|---|
|  | 1406 | case an idential mapping is used to associated atoms in start and | 
|---|
|  | 1407 | end configuration.</para> | 
|---|
|  | 1408 |  | 
|---|
|  | 1409 | <programlisting> | 
|---|
|  | 1410 | ... --linear-interpolation-of-trajectories \ | 
|---|
|  | 1411 | --start-step 0 \ | 
|---|
|  | 1412 | --end-step 1 \ | 
|---|
|  | 1413 | --interpolation-steps 100 \ | 
|---|
|  | 1414 | --id-mapping 1 | 
|---|
|  | 1415 | </programlisting> | 
|---|
|  | 1416 | </section> | 
|---|
| [6029a6] | 1417 | </section> | 
|---|
|  | 1418 |  | 
|---|
| [9bce96] | 1419 | <section xml:id='domain'> | 
|---|
|  | 1420 | <title xml:id='domain.title'>Manipulate domain</title> | 
|---|
| [6029a6] | 1421 |  | 
|---|
|  | 1422 | <para>Here, we elaborate on how to duplicate all the atoms inside the | 
|---|
|  | 1423 | domain, how the scale the coordinate system, how to center the atoms | 
|---|
|  | 1424 | with respect to certain points, how to realign them by given | 
|---|
|  | 1425 | constraints, how to mirror and most importantly how to specify the | 
|---|
|  | 1426 | domain.</para> | 
|---|
|  | 1427 |  | 
|---|
| [9bce96] | 1428 | <section xml:id='domain.change-box'> | 
|---|
|  | 1429 | <title xml:id='domain.change-box.title'>Changing the domain</title> | 
|---|
| [6029a6] | 1430 |  | 
|---|
|  | 1431 | <para>The domain is specified by a symmetric 3x3 matrix. The | 
|---|
|  | 1432 | eigenvalues (diagonal entries in case of a diagonal matrix) give the | 
|---|
|  | 1433 | length of the edges, additional entries specify transformations of | 
|---|
|  | 1434 | the box such that it becomes a more general parallelepiped.</para> | 
|---|
|  | 1435 |  | 
|---|
|  | 1436 | <programlisting>... change-box "20,0,20,0,0,20"</programlisting> | 
|---|
|  | 1437 |  | 
|---|
|  | 1438 | <para>As the domain matrix is symmetric, six values suffice to fully | 
|---|
|  | 1439 | specify it. We have to give the six components of the lower diagonal | 
|---|
|  | 1440 | matrix. Here, we change the box to a cuboid of equal edge length of | 
|---|
|  | 1441 | 20.</para> | 
|---|
|  | 1442 | </section> | 
|---|
|  | 1443 |  | 
|---|
| [9bce96] | 1444 | <section xml:id='domain.bound-in-box'> | 
|---|
|  | 1445 | <title xml:id='domain.bound-in-box.title'>Bound atoms inside box | 
|---|
|  | 1446 | </title> | 
|---|
| [6029a6] | 1447 |  | 
|---|
|  | 1448 | <para>The following applies the current boundary conditions to the | 
|---|
|  | 1449 | atoms. In case of periodic or wrapped boundary conditions the atoms | 
|---|
|  | 1450 | will be periodically translated to be inside the domain | 
|---|
|  | 1451 | again.</para> | 
|---|
|  | 1452 |  | 
|---|
|  | 1453 | <programlisting>... --bound-in-box</programlisting> | 
|---|
|  | 1454 | </section> | 
|---|
|  | 1455 |  | 
|---|
| [9bce96] | 1456 | <section xml:id='domain.center-in-box'> | 
|---|
|  | 1457 | <title xml:id='domain.center-in-box.title'>Center atoms inside the | 
|---|
|  | 1458 | domain</title> | 
|---|
| [6029a6] | 1459 |  | 
|---|
|  | 1460 | <para>This is a combination of changing the box and bounding the | 
|---|
|  | 1461 | atoms inside it.</para> | 
|---|
|  | 1462 |  | 
|---|
|  | 1463 | <programlisting>... --center-in-box "20,0,20,0,0,"</programlisting> | 
|---|
|  | 1464 | </section> | 
|---|
|  | 1465 |  | 
|---|
| [9bce96] | 1466 | <section xml:id='domain.center-edge'> | 
|---|
|  | 1467 | <title xml:id='domain.center-edge.title'>Center the atoms at an | 
|---|
|  | 1468 | edge</title> | 
|---|
| [6029a6] | 1469 |  | 
|---|
|  | 1470 | <para>MoleCuilder can calculate the minimum box (parallel to the | 
|---|
|  | 1471 | cardinal axis) all atoms would fit in and translate all atoms in | 
|---|
|  | 1472 | such a way that the lower, left, front edge of this minimum is at | 
|---|
|  | 1473 | the origin (0,0,0).</para> | 
|---|
|  | 1474 |  | 
|---|
|  | 1475 | <programlisting>... --center-edge</programlisting> | 
|---|
|  | 1476 | </section> | 
|---|
|  | 1477 |  | 
|---|
| [9bce96] | 1478 | <section xml:id='domain.add-empty-boundary'> | 
|---|
|  | 1479 | <title xml:id='domain.add-empty-boundary.title'>Extending the | 
|---|
|  | 1480 | boundary by adding an empty boundary</title> | 
|---|
| [6029a6] | 1481 |  | 
|---|
|  | 1482 | <para>In the same manner as above a minimum box is determined that | 
|---|
|  | 1483 | is subsequently expanded by a boundary of the given additional | 
|---|
|  | 1484 | thickness. This applies to either side.</para> | 
|---|
|  | 1485 |  | 
|---|
|  | 1486 | <programlisting>... --add-empty-boundary "5,5,5"</programlisting> | 
|---|
|  | 1487 |  | 
|---|
|  | 1488 | <para>This will enlarge the box in such a way that every atom is at | 
|---|
|  | 1489 | least by a distance of 5 away from the boundary of the domain (in | 
|---|
|  | 1490 | the infinity norm).</para> | 
|---|
|  | 1491 | </section> | 
|---|
|  | 1492 |  | 
|---|
| [9bce96] | 1493 | <section xml:id='domain.scale-box'> | 
|---|
|  | 1494 | <title xml:id='domain.scale-box.title'>Scaling the box</title> | 
|---|
| [6029a6] | 1495 |  | 
|---|
|  | 1496 | <para>You can enlarge the domain by simple scaling factors.</para> | 
|---|
|  | 1497 |  | 
|---|
|  | 1498 | <programlisting>... --scale-box "1,1,2.5"</programlisting> | 
|---|
|  | 1499 |  | 
|---|
|  | 1500 | <para>Here, the domain is stretched in the z direction by a factor | 
|---|
|  | 1501 | of 2.5.</para> | 
|---|
|  | 1502 | </section> | 
|---|
|  | 1503 |  | 
|---|
| [9bce96] | 1504 | <section xml:id='domain.repeat-box'> | 
|---|
|  | 1505 | <title xml:id='domain.repeat-box.title'>Repeating the box</title> | 
|---|
| [6029a6] | 1506 |  | 
|---|
|  | 1507 | <para>Under periodic boundary conditions often only the minimal | 
|---|
|  | 1508 | periodic cell is stored. If need be, multiple images can be easily | 
|---|
|  | 1509 | added to the current state of the system by repeating the box, i.e. | 
|---|
|  | 1510 | the box along with all contained atoms is copied and placed | 
|---|
|  | 1511 | adjacently.</para> | 
|---|
|  | 1512 |  | 
|---|
|  | 1513 | <programlisting>... --repeat-box "1,2,2"</programlisting> | 
|---|
|  | 1514 |  | 
|---|
|  | 1515 | <para>This will create a 2x2 grid of the current domain, replicating | 
|---|
|  | 1516 | it along the y and z direction along with all atoms. If the domain | 
|---|
|  | 1517 | contained before a single water molecule, we will now have four of | 
|---|
|  | 1518 | them.</para> | 
|---|
|  | 1519 | </section> | 
|---|
| [f73e06] | 1520 |  | 
|---|
| [9bce96] | 1521 | <section xml:id='domain.set-boundary-conditions'> | 
|---|
|  | 1522 | <title xml:id='domain.set-boundary-conditions.title'>Change the | 
|---|
|  | 1523 | boundary conditions</title> | 
|---|
| [f73e06] | 1524 |  | 
|---|
|  | 1525 | <para>Various boundary conditions can be applied that affect how | 
|---|
|  | 1526 | certain Actions work, e.g. translate-atoms. We briefly give a list | 
|---|
|  | 1527 | of all possible conditions:</para> | 
|---|
|  | 1528 | <itemizedlist> | 
|---|
|  | 1529 | <listitem> | 
|---|
|  | 1530 | <para>Wrap</para> | 
|---|
|  | 1531 | <para>Coordinates are wrapped to the other side of the domain, | 
|---|
|  | 1532 | i.e. periodic boundary conditions.</para> | 
|---|
|  | 1533 | </listitem> | 
|---|
|  | 1534 | <listitem> | 
|---|
|  | 1535 | <para>Bounce</para> | 
|---|
|  | 1536 | <para>Coordinates are bounced back into the domain, i.e. they | 
|---|
|  | 1537 | are reflected from the domain walls.</para> | 
|---|
|  | 1538 | </listitem> | 
|---|
|  | 1539 | <listitem> | 
|---|
|  | 1540 | <para>Ignore</para> | 
|---|
|  | 1541 | <para>No boundary conditions apply.</para> | 
|---|
|  | 1542 | </listitem> | 
|---|
|  | 1543 | </itemizedlist> | 
|---|
|  | 1544 |  | 
|---|
|  | 1545 | <para>The following will set the boundary conditions to periodic. | 
|---|
|  | 1546 | </para> | 
|---|
|  | 1547 |  | 
|---|
|  | 1548 | <programlisting>... --set-boundary-conditions "Wrap Wrap Wrap" | 
|---|
|  | 1549 | </programlisting> | 
|---|
|  | 1550 | </section> | 
|---|
|  | 1551 | </section> | 
|---|
|  | 1552 |  | 
|---|
| [9bce96] | 1553 | <section xml:id='filling'> | 
|---|
|  | 1554 | <title xml:id='filling.title'>Filling</title> | 
|---|
| [f73e06] | 1555 |  | 
|---|
|  | 1556 | <para>Filling a specific part of the domain with one type of | 
|---|
|  | 1557 | molecule, e.g. a water molecule, is the more advanced type of | 
|---|
|  | 1558 | copying of a molecule (see copy-molecule) and we need several | 
|---|
|  | 1559 | ingredients.</para> | 
|---|
|  | 1560 |  | 
|---|
|  | 1561 | <para>First, we need to specify the part of the domain. This is done | 
|---|
|  | 1562 | via a shape. We have already learned how to create and select | 
|---|
|  | 1563 | shapes. The currently selected shape will serve as the fill-in | 
|---|
|  | 1564 | region.</para> | 
|---|
|  | 1565 |  | 
|---|
|  | 1566 | <para>Then, they are three types of filling, domain, volume, and | 
|---|
|  | 1567 | surface. The domain is filled with a regular grid of fill-in points. | 
|---|
|  | 1568 | A volume and a surface are filled by a set of equidistant points | 
|---|
|  | 1569 | distributed within the volume or on the surface of a selected | 
|---|
|  | 1570 | shape. Molecules will then be copied and translated points when they | 
|---|
|  | 1571 | "fit".</para> | 
|---|
|  | 1572 |  | 
|---|
|  | 1573 | <para>The filler procedure checks each fill-in point whether there | 
|---|
|  | 1574 | is enough space for the molecule. To know this, we require a cluster | 
|---|
|  | 1575 | instead of a molecule. This is just a general agglomeration of atoms | 
|---|
|  | 1576 | combined with a bounding box that contains all of them and serves as | 
|---|
|  | 1577 | its minimal volume. I.e. we need this cluster. For this a number of | 
|---|
|  | 1578 | atoms have to be specified, the minimum bounding box is generated | 
|---|
|  | 1579 | automatically.</para> | 
|---|
|  | 1580 |  | 
|---|
|  | 1581 | <para>On top of that molecules can be selected whose volume is | 
|---|
|  | 1582 | additionally excluded from the filling region.</para> | 
|---|
|  | 1583 |  | 
|---|
| [9bce96] | 1584 | <section xml:id='filling.fill-regular-grid'> | 
|---|
|  | 1585 | <title xml:id='filling.fill-regular-grid.title'>Fill the domain with | 
|---|
|  | 1586 | molecules</title> | 
|---|
| [f73e06] | 1587 |  | 
|---|
|  | 1588 | <para>The call to fill the volume of the selected shape with the | 
|---|
|  | 1589 | selected atoms is then as follows,</para> | 
|---|
|  | 1590 |  | 
|---|
|  | 1591 | <programlisting> | 
|---|
|  | 1592 | ... --fill-regular-grid \ | 
|---|
|  | 1593 | --mesh-size "5,5,5" \ | 
|---|
|  | 1594 | --mesh-offset ".5,.5,.5" \ | 
|---|
|  | 1595 | --DoRotate 1 \ | 
|---|
|  | 1596 | --min-distance 1. \ | 
|---|
|  | 1597 | --random-atom-displacement 0.05 \ | 
|---|
|  | 1598 | --random-molecule-displacement 0.4 \ | 
|---|
|  | 1599 | --tesselation-radius 2.5 | 
|---|
|  | 1600 | </programlisting> | 
|---|
|  | 1601 |  | 
|---|
|  | 1602 | <para>This generates a grid of 5x5x5 fill-in points within the | 
|---|
|  | 1603 | sphere that are offset such as to lay centered within the sphere | 
|---|
|  | 1604 | (offset per axis in [0,1]). Additionally, each molecule is rotated | 
|---|
|  | 1605 | by random rotation matrix, each atom is translated randomly by at | 
|---|
|  | 1606 | most 0.05, each molecule's center at most by 0.4. The selected | 
|---|
|  | 1607 | molecules' volume is obtained by tesselating their surface and | 
|---|
|  | 1608 | excluding every fill-in point whose distance to this surface does | 
|---|
| [9bce96] | 1609 | not exceed 1. We refer to our comments in | 
|---|
|  | 1610 | <link linkend="randomization">Randomization</link>for details on | 
|---|
|  | 1611 | changing the randomness.</para> | 
|---|
| [f73e06] | 1612 | </section> | 
|---|
|  | 1613 |  | 
|---|
| [9bce96] | 1614 | <section xml:id='filling.fill-volume'> | 
|---|
|  | 1615 | <title xml:id='filling.fill-volume.title'>Fill a shape's volume | 
|---|
|  | 1616 | with molecules</title> | 
|---|
| [f73e06] | 1617 |  | 
|---|
|  | 1618 | <para>More specifically than filling the whole domain with molecules, | 
|---|
|  | 1619 | maybe except areas where other molecules already are, we also can | 
|---|
|  | 1620 | fill only specific parts by selecting a shape and calling upon | 
|---|
|  | 1621 | the following action:</para> | 
|---|
|  | 1622 |  | 
|---|
|  | 1623 | <programlisting> | 
|---|
|  | 1624 | ... --fill-volume \ | 
|---|
|  | 1625 | --counts 12 \ | 
|---|
|  | 1626 | --min-distance 1. \ | 
|---|
|  | 1627 | --DoRotate 1 \ | 
|---|
|  | 1628 | --random-atom-displacement 0.05 \ | 
|---|
|  | 1629 | --random-molecule-displacement 0.4 \ | 
|---|
|  | 1630 | --tesselation-radius 2.5 | 
|---|
|  | 1631 | </programlisting> | 
|---|
|  | 1632 | </section> | 
|---|
|  | 1633 |  | 
|---|
| [9bce96] | 1634 | <section xml:id='filling.fill-surface'> | 
|---|
|  | 1635 | <title xml:id='filling.fill-surface.title'>Fill a shape's surface | 
|---|
|  | 1636 | with molecules</title> | 
|---|
| [f73e06] | 1637 |  | 
|---|
|  | 1638 | <para>Filling a surface is very similar to filling its volume. | 
|---|
|  | 1639 | Again the number of equidistant points has to be specified. | 
|---|
|  | 1640 | However, randomness is constrained as the molecule is be aligned | 
|---|
|  | 1641 | with the surface in a specific manner. The alignment axis refers | 
|---|
|  | 1642 | to the largest principal axis of the filler molecule and will | 
|---|
|  | 1643 | be aligned parallel to the surface normal at the fill-in point. | 
|---|
|  | 1644 | </para> | 
|---|
|  | 1645 |  | 
|---|
|  | 1646 | <para>The call below fill in 12 points with a minimum distance | 
|---|
|  | 1647 | between the instances of 1 angstroem. We allow for certain random | 
|---|
|  | 1648 | displacements and use the z-axis for aligning the molecules on | 
|---|
|  | 1649 | the surface.</para> | 
|---|
|  | 1650 |  | 
|---|
|  | 1651 | <programlisting> | 
|---|
|  | 1652 | ... --fill-surface \ | 
|---|
|  | 1653 | --counts 12 \ | 
|---|
|  | 1654 | --min-distance 1. \ | 
|---|
|  | 1655 | --DoRotate 1 \ | 
|---|
|  | 1656 | --random-atom-displacement 0.05 \ | 
|---|
|  | 1657 | --random-molecule-displacement 0.4 \ | 
|---|
|  | 1658 | --Alignment-Axis "0,0,1" | 
|---|
|  | 1659 | </programlisting> | 
|---|
|  | 1660 | </section> | 
|---|
|  | 1661 |  | 
|---|
| [9bce96] | 1662 | <section xml:id='filling.suspend-in-molecule'> | 
|---|
|  | 1663 | <title xml:id='filling.suspend-in-molecule.title'>Suspend in molecule | 
|---|
|  | 1664 | </title> | 
|---|
| [f73e06] | 1665 |  | 
|---|
|  | 1666 | <para>Add a given molecule in the simulation domain in such a way | 
|---|
|  | 1667 | that the total density is as desired.</para> | 
|---|
|  | 1668 |  | 
|---|
|  | 1669 | <programlisting> | 
|---|
|  | 1670 | ... --suspend-in-molecule 1. | 
|---|
|  | 1671 | </programlisting> | 
|---|
|  | 1672 | </section> | 
|---|
|  | 1673 |  | 
|---|
| [9bce96] | 1674 | <section xml:id='filling.fill-molecule'> | 
|---|
|  | 1675 | <title xml:id='filling.fill-molecule.title'>Fill in molecule</title> | 
|---|
| [f73e06] | 1676 |  | 
|---|
|  | 1677 | <para>This action will be soon be removed.</para> | 
|---|
|  | 1678 |  | 
|---|
|  | 1679 | <programlisting> | 
|---|
|  | 1680 | ... --fill-molecule | 
|---|
|  | 1681 | </programlisting> | 
|---|
|  | 1682 | </section> | 
|---|
|  | 1683 |  | 
|---|
| [9bce96] | 1684 | <section xml:id='filling.fill-void'> | 
|---|
|  | 1685 | <title xml:id='filling.fill-void.title'>Fill void with molecule | 
|---|
|  | 1686 | </title> | 
|---|
| [f73e06] | 1687 |  | 
|---|
|  | 1688 | <para>This action will be soon be removed.</para> | 
|---|
|  | 1689 |  | 
|---|
|  | 1690 | <programlisting> | 
|---|
|  | 1691 | ... --fill-void | 
|---|
|  | 1692 | </programlisting> | 
|---|
|  | 1693 | </section> | 
|---|
|  | 1694 | </section> | 
|---|
|  | 1695 |  | 
|---|
| [9bce96] | 1696 | <section xml:id='analysis'> | 
|---|
|  | 1697 | <title xml:id='analysis.title'>Analysis</title> | 
|---|
| [f73e06] | 1698 |  | 
|---|
|  | 1699 | <para></para> | 
|---|
|  | 1700 |  | 
|---|
| [9bce96] | 1701 | <section xml:id='analysis.pair-correlation'> | 
|---|
|  | 1702 | <title xml:id='analysis.pair-correlation.title'>Pair Correlation | 
|---|
|  | 1703 | </title> | 
|---|
| [f73e06] | 1704 |  | 
|---|
|  | 1705 | <para>Pair correlation checks for two given elements on the typical | 
|---|
|  | 1706 | distance they can be found with respect to one another. E.g. for | 
|---|
|  | 1707 | water one might be interested what is the typical distance for | 
|---|
|  | 1708 | hydrogen and oxygen atoms.</para> | 
|---|
|  | 1709 |  | 
|---|
|  | 1710 | <programlisting> | 
|---|
|  | 1711 | ... --pair-correlation \ | 
|---|
|  | 1712 | --elements 1 8 \ | 
|---|
|  | 1713 | --bin-start 0 \ | 
|---|
|  | 1714 | --bin-width 0.7 \ | 
|---|
|  | 1715 | --bin-end 10 \ | 
|---|
|  | 1716 | --output-file histogram.dat \ | 
|---|
|  | 1717 | --bin-output-file bins.dat \ | 
|---|
|  | 1718 | --periodic 0 | 
|---|
|  | 1719 | </programlisting> | 
|---|
|  | 1720 |  | 
|---|
|  | 1721 | <para>This will compile a histogram for the interval [0,10] in steps | 
|---|
|  | 1722 | of 0.7 and increment a specific bin if the distance of one such pair | 
|---|
|  | 1723 | of a hydrogen and an oxygen atom can be found within its distance | 
|---|
|  | 1724 | interval.</para> | 
|---|
|  | 1725 | </section> | 
|---|
|  | 1726 |  | 
|---|
| [9bce96] | 1727 | <section xml:id='analysis.dipole-correlation'> | 
|---|
|  | 1728 | <title xml:id='analysis.dipole-correlation.title'>Dipole Correlation | 
|---|
|  | 1729 | </title> | 
|---|
| [f73e06] | 1730 |  | 
|---|
|  | 1731 | <para>The dipole correlation is similar to the pair correlation, only | 
|---|
|  | 1732 | that it correlates the orientation of dipoles in the molecular | 
|---|
|  | 1733 | system with one another.</para> | 
|---|
|  | 1734 | <para>Note that the dipole correlation works on the currently | 
|---|
|  | 1735 | selected molecules, e.g. all water molecules if so selected.</para> | 
|---|
|  | 1736 |  | 
|---|
|  | 1737 | <programlisting> | 
|---|
|  | 1738 | ... --dipole-correlation \ | 
|---|
|  | 1739 | --bin-start 0 \ | 
|---|
|  | 1740 | --bin-width 0.7 \ | 
|---|
|  | 1741 | --bin-end 10 \ | 
|---|
|  | 1742 | --output-file histogram.dat \ | 
|---|
|  | 1743 | --bin-output-file bins.dat \ | 
|---|
|  | 1744 | --periodic 0 | 
|---|
|  | 1745 | </programlisting> | 
|---|
|  | 1746 | </section> | 
|---|
|  | 1747 |  | 
|---|
| [9bce96] | 1748 | <section xml:id='analysis.dipole-angular-correlation'> | 
|---|
|  | 1749 | <title xml:id='analysis.dipole-angular-correlation.title'>Dipole | 
|---|
|  | 1750 | Angular Correlation</title> | 
|---|
| [f73e06] | 1751 |  | 
|---|
|  | 1752 | <para>The dipole angular correlation looks at the angles of a | 
|---|
|  | 1753 | dipole over time. It takes the orientation of a certain time step | 
|---|
|  | 1754 | as the zero angle and bins all other orientations found in later | 
|---|
|  | 1755 | time steps relative to it. | 
|---|
|  | 1756 | </para> | 
|---|
|  | 1757 | <para>Note that in contrast to the dipole correlation the dipole | 
|---|
|  | 1758 | angular correlation works on the molecules determined by a formula. | 
|---|
|  | 1759 | This is because selections do not work over time steps as molecules | 
|---|
|  | 1760 | might change. | 
|---|
|  | 1761 | </para> | 
|---|
|  | 1762 |  | 
|---|
|  | 1763 | <programlisting> | 
|---|
|  | 1764 | ... --dipole-angular-correlation H2O \ | 
|---|
|  | 1765 | --bin-start 0 \ | 
|---|
|  | 1766 | --bin-width 5 \ | 
|---|
|  | 1767 | --bin-end 360 \ | 
|---|
|  | 1768 | --output-file histogram.dat \ | 
|---|
|  | 1769 | --bin-output-file bins.dat \ | 
|---|
|  | 1770 | --periodic 0 \ | 
|---|
|  | 1771 | --time-step-zero 0 | 
|---|
|  | 1772 | </programlisting> | 
|---|
|  | 1773 | </section> | 
|---|
|  | 1774 |  | 
|---|
| [9bce96] | 1775 | <section xml:id='analysis.point-correlation'> | 
|---|
|  | 1776 | <title xml:id='analysis.point-correlation.title'>Point Correlation | 
|---|
|  | 1777 | </title> | 
|---|
| [f73e06] | 1778 |  | 
|---|
|  | 1779 | <para>Point correlation is very similar to pair correlation, only | 
|---|
|  | 1780 | that it correlates not positions of atoms among one another but | 
|---|
|  | 1781 | against a fixed, given point.</para> | 
|---|
|  | 1782 |  | 
|---|
|  | 1783 | <programlisting> | 
|---|
|  | 1784 | ... --point-correlation \ | 
|---|
|  | 1785 | --elements 1 8 \ | 
|---|
|  | 1786 | --position "0,0,0" \ | 
|---|
|  | 1787 | --bin-start 0 \ | 
|---|
|  | 1788 | --bin-width 0.7 \ | 
|---|
|  | 1789 | --bin-end 10 \ | 
|---|
|  | 1790 | --output-file histogram.dat \ | 
|---|
|  | 1791 | --bin-output-file bins.dat \ | 
|---|
|  | 1792 | --periodic 0 | 
|---|
|  | 1793 | </programlisting> | 
|---|
|  | 1794 |  | 
|---|
|  | 1795 | <para>This would calculate the correlation of all hydrogen and | 
|---|
|  | 1796 | oxygen atoms with respect to the origin.</para> | 
|---|
|  | 1797 | </section> | 
|---|
|  | 1798 |  | 
|---|
| [9bce96] | 1799 | <section xml:id='analysis.surface-correlation'> | 
|---|
|  | 1800 | <title xml:id='analysis.surface-correlation.title'>Surface | 
|---|
|  | 1801 | Correlation</title> | 
|---|
| [f73e06] | 1802 |  | 
|---|
|  | 1803 | <para>The surface correlation calculates the distance of a set | 
|---|
|  | 1804 | of atoms with respect to a tesselated surface.</para> | 
|---|
|  | 1805 |  | 
|---|
|  | 1806 | <programlisting> | 
|---|
|  | 1807 | ... --surface-correlation \ | 
|---|
|  | 1808 | --elements 1 8 \ | 
|---|
|  | 1809 | --bin-start 0 \ | 
|---|
|  | 1810 | --bin-width 0.7 \ | 
|---|
|  | 1811 | --bin-end 10 \ | 
|---|
|  | 1812 | --output-file histogram.dat \ | 
|---|
|  | 1813 | --bin-output-file bins.dat \ | 
|---|
|  | 1814 | --periodic 0 | 
|---|
|  | 1815 | </programlisting> | 
|---|
|  | 1816 | </section> | 
|---|
|  | 1817 |  | 
|---|
| [f4b626a] | 1818 | <section xml:id='analysis.molecular-volume'> | 
|---|
|  | 1819 | <title xml:id='analysis.molecular-volume.title'>Molecular Volume | 
|---|
| [9bce96] | 1820 | </title> | 
|---|
| [f73e06] | 1821 |  | 
|---|
|  | 1822 | <para>This simply calculates the volume that a selected molecule | 
|---|
|  | 1823 | occupies. For this the molecular surface is determined via a | 
|---|
|  | 1824 | tesselation. Note that this surface is minimal is that aspect | 
|---|
|  | 1825 | that each node of the tesselation consists of an atom of the | 
|---|
|  | 1826 | molecule.</para> | 
|---|
|  | 1827 |  | 
|---|
|  | 1828 | <programlisting>... --molecular-volume</programlisting> | 
|---|
|  | 1829 | </section> | 
|---|
|  | 1830 |  | 
|---|
| [f4b626a] | 1831 | <section xml:id='analysis.average-molecule-force'> | 
|---|
|  | 1832 | <title xml:id='analysis.average-molecule-forcetitle'>Average force | 
|---|
|  | 1833 | acting on a molecule</title> | 
|---|
|  | 1834 |  | 
|---|
|  | 1835 | <para>This sums up all the forces of each atom of a currently | 
|---|
|  | 1836 | selected molecule and returns the average force vector. This should | 
|---|
|  | 1837 | give you the general direction of acceleration of the molecule. | 
|---|
|  | 1838 | </para> | 
|---|
|  | 1839 |  | 
|---|
|  | 1840 | <programlisting>... --molecular-volume</programlisting> | 
|---|
|  | 1841 | </section> | 
|---|
|  | 1842 |  | 
|---|
| [6029a6] | 1843 | </section> | 
|---|
|  | 1844 |  | 
|---|
| [9bce96] | 1845 | <section xml:id='fragmentation'> | 
|---|
|  | 1846 | <title xml:id='fragmentation.title'>Fragmentation</title> | 
|---|
| [6029a6] | 1847 |  | 
|---|
|  | 1848 | <para>Fragmentation refers to a so-called linear-scaling method called | 
|---|
|  | 1849 | "Bond-Order diSSection in an ANOVA-like fashion" (BOSSANOVA), | 
|---|
|  | 1850 | developed by <personname>Frederik Heber</personname>. In this section | 
|---|
|  | 1851 | we briefly explain what the method does and how the associated actions | 
|---|
|  | 1852 | work.</para> | 
|---|
|  | 1853 |  | 
|---|
|  | 1854 | <para>The central idea behind the BOSSANOVA scheme is to fragment the | 
|---|
|  | 1855 | graph of the molecular system into connected subgraphs of a certain | 
|---|
|  | 1856 | number of vertices (atoms). To give an example, loading a ethane atom | 
|---|
|  | 1857 | with the chemical formula C2H6, fragmenting the molecule up to order 1 | 
|---|
|  | 1858 | means creating two fragments, both methane-like from either carbon | 
|---|
|  | 1859 | atom including surrounding hydrogen atoms. Fragmenting up to order 2 | 
|---|
|  | 1860 | would return both the methane fragments and additionally the full | 
|---|
|  | 1861 | ethane molecule as it resembles a fragment of order 2, namely | 
|---|
|  | 1862 | containing two (non-hydrogen) atoms.</para> | 
|---|
|  | 1863 |  | 
|---|
|  | 1864 | <para>The reason for doing this is that usual ab-initio calculations | 
|---|
|  | 1865 | of molecular systems via methods such as Density Functional Theory or | 
|---|
|  | 1866 | Hartree-Fock scale at least as <inlineequation> | 
|---|
|  | 1867 | <m:math display="inline"> | 
|---|
|  | 1868 | <m:mi>{\cal O}(M^3}</m:mi> | 
|---|
|  | 1869 | </m:math> | 
|---|
|  | 1870 | </inlineequation>with the number of atoms <inlineequation> | 
|---|
|  | 1871 | <m:math display="inline"> | 
|---|
|  | 1872 | <m:mi>M</m:mi> | 
|---|
|  | 1873 | </m:math> | 
|---|
|  | 1874 | </inlineequation>. Hence, calculating the ground state energy of a | 
|---|
|  | 1875 | number of fragment molecules scaling linearly with the number of atoms | 
|---|
|  | 1876 | yields a linear-scaling methods. In the doctoral thesis of Frederik | 
|---|
|  | 1877 | Heber, it is explained why this is a sensible ansatz mathematically | 
|---|
|  | 1878 | and shown that it delivers a very good accuracy if electrons (and | 
|---|
|  | 1879 | hence interactions) are in general localized.</para> | 
|---|
|  | 1880 |  | 
|---|
|  | 1881 | <para>Long-range interactions are artificially truncated, however, | 
|---|
|  | 1882 | with this fragment ansatz. It can be obtained in a perturbation manner | 
|---|
|  | 1883 | by sampling the resulting electronic and nuclei charge density on a | 
|---|
|  | 1884 | grid, summing over all fragments, and solving the associated Poisson | 
|---|
|  | 1885 | equation. Such a calculation is implemented via the solver | 
|---|
|  | 1886 | <productname>vmg</productname> by Julian Iseringhausen that is | 
|---|
| [f73e06] | 1887 | contained in the <link xlink:href="http://www.scafacos.org/"> | 
|---|
|  | 1888 | <productname>ScaFaCoS</productname></link>.</para> | 
|---|
| [6029a6] | 1889 |  | 
|---|
|  | 1890 | <para>Note that we treat hydrogen special (but can be switched off) as | 
|---|
|  | 1891 | fragments are calculated as closed shell (total spin equals zero). | 
|---|
|  | 1892 | Also, we use hydrogen to saturate any dangling bonds that occur as | 
|---|
|  | 1893 | bonds are cut when fragmenting a molecule (this, too, can be switched | 
|---|
|  | 1894 | off).</para> | 
|---|
|  | 1895 |  | 
|---|
| [9bce96] | 1896 | <section xml:id='fragmentation.fragment-molecule'> | 
|---|
|  | 1897 | <title xml:id='fragmentation.fragment-molecule.title'>Fragmenting a | 
|---|
|  | 1898 | molecular system</title> | 
|---|
| [6029a6] | 1899 |  | 
|---|
|  | 1900 | <para>For the current selection of atoms, all fragments consisting | 
|---|
|  | 1901 | of these (sub)set of atoms are created in the following | 
|---|
|  | 1902 | manner.</para> | 
|---|
|  | 1903 |  | 
|---|
|  | 1904 | <programlisting> | 
|---|
|  | 1905 | ... --fragment-molecule "BondFragment" \ | 
|---|
|  | 1906 | --DoCyclesFull 1 \ | 
|---|
|  | 1907 | --distance 3. \ | 
|---|
|  | 1908 | --order 3 \ | 
|---|
|  | 1909 | --grid-level 5 \ | 
|---|
|  | 1910 | --output-types xyz mpqc | 
|---|
|  | 1911 | </programlisting> | 
|---|
|  | 1912 |  | 
|---|
|  | 1913 | <para>We go through each of the options one after the other. During | 
|---|
|  | 1914 | fragmentation some files are created storing state information, i.e. | 
|---|
|  | 1915 | the vertex/atom indices per fragment and so on. These files all need | 
|---|
|  | 1916 | a common prefix, here "BondFragment". Then, we specify that cycles | 
|---|
|  | 1917 | should be treated fully. This compensates for electrons in aromatic | 
|---|
|  | 1918 | rings being delocalized over the ring. If cycles in the graph, | 
|---|
|  | 1919 | originating from aromatic rings, are always calculated fully, i.e. | 
|---|
|  | 1920 | the whole ring becomes a fragment, we partially overcome these | 
|---|
|  | 1921 | issues. This does however not work indefinitely and accuracy of the | 
|---|
|  | 1922 | approximation is limited (<inlineequation> | 
|---|
|  | 1923 | <m:math display="inline"> | 
|---|
|  | 1924 | <m:mi>>10^{-4}</m:mi> | 
|---|
|  | 1925 | </m:math> | 
|---|
|  | 1926 | </inlineequation>) in systems with many interconnected aromatic | 
|---|
|  | 1927 | rings, such as graphene. Next, we give a distance cutoff of 3 used | 
|---|
|  | 1928 | in bond graph creation. Then, we specify the maximum order, i.e. the | 
|---|
|  | 1929 | maximum number of (non-hydrogen) atoms per fragment, here 3. The | 
|---|
|  | 1930 | higher this number the more expensive the calculation becomes | 
|---|
|  | 1931 | (because substantially more fragments are created) but also the more | 
|---|
|  | 1932 | accurate. The grid level refers to the part where long-range Coulomb | 
|---|
|  | 1933 | interactions are calculated. This is done via solving the associated | 
|---|
|  | 1934 | Poisson equation with a multigrid solver. As input the solver | 
|---|
|  | 1935 | requires the density which is sampled on a cartesian grid whose | 
|---|
|  | 1936 | resolution these parameter defines (<inlineequation> | 
|---|
|  | 1937 | <m:math display="inline"> | 
|---|
|  | 1938 | <m:mi>2^{\mathrm{level}}</m:mi> | 
|---|
|  | 1939 | </m:math> | 
|---|
|  | 1940 | </inlineequation>). And finally, we give the output file formats, | 
|---|
|  | 1941 | i.e. which file formats are used for writing each fragment | 
|---|
|  | 1942 | configuration (prefix is "BondFragment", remember?). Here, we use | 
|---|
|  | 1943 | XYZ (mainly for checking the configurations visually) and MPQC, | 
|---|
|  | 1944 | which is a very robust Hartree-Fock solver. We refer to the | 
|---|
| [9bce96] | 1945 | discussion of the <link linkend="fileparsers">Parsers</link> above | 
|---|
|  | 1946 | on how to change the parameters of the ab-initio calculation.</para> | 
|---|
| [6029a6] | 1947 |  | 
|---|
|  | 1948 | <para>After having written all fragment configuration files, you | 
|---|
|  | 1949 | need to calculate each fragment, grab the resulting energy (and | 
|---|
|  | 1950 | force vectors) and place them into a result file manually. This at | 
|---|
|  | 1951 | least is necessary if you have specified output-types above. If not, | 
|---|
|  | 1952 | the fragments are not written to file but stored internally. Read | 
|---|
|  | 1953 | on.</para> | 
|---|
|  | 1954 | </section> | 
|---|
|  | 1955 |  | 
|---|
| [9bce96] | 1956 | <section xml:id='fragmentation.fragment-automation'> | 
|---|
|  | 1957 | <title xml:id='fragmentation.fragment-automation.title'>Calculating | 
|---|
|  | 1958 | fragment energies automatically</title> | 
|---|
| [6029a6] | 1959 |  | 
|---|
|  | 1960 | <para>Another way of doing this is enabled if you have | 
|---|
|  | 1961 | <productname>JobMarket</productname> package. JobMarket implements a | 
|---|
|  | 1962 | client/server ansatz, i.e. two (or more) independent programs are | 
|---|
|  | 1963 | running (even on another computer but connected via an IP network), | 
|---|
|  | 1964 | namely a server and at least one client. The server receives | 
|---|
|  | 1965 | fragment configurations from MoleCuilder and assigns these to a | 
|---|
|  | 1966 | client who is not busy. The client launches an executable that is | 
|---|
|  | 1967 | specified in the work package he is assigned and gathers after | 
|---|
|  | 1968 | calculation a number of values, samewise specified in the package. | 
|---|
|  | 1969 | The results are gathered together by the server and can be requested | 
|---|
|  | 1970 | from MoleCuilder once they are done. This essentially describe what | 
|---|
|  | 1971 | is happening during the execution of this action.</para> | 
|---|
|  | 1972 |  | 
|---|
|  | 1973 | <para>Stored fragment jobs can also be parsed again, i.e. reversing | 
|---|
|  | 1974 | the effect of having output-types specified in <link | 
|---|
| [9bce96] | 1975 | linkend="fragmentation.fragment-molecule">Fragmenting a molecule | 
|---|
|  | 1976 | </link>.</para> | 
|---|
| [6029a6] | 1977 |  | 
|---|
|  | 1978 | <programlisting> | 
|---|
|  | 1979 | ... --parse-fragment-jobs \ | 
|---|
|  | 1980 | --fragment-jobs "BondFragment00.in" "BondFragment01.in" \ | 
|---|
|  | 1981 | --fragment-path "./" \ | 
|---|
|  | 1982 | --grid-level 5 | 
|---|
|  | 1983 | </programlisting> | 
|---|
|  | 1984 |  | 
|---|
|  | 1985 | <para>Here, we have specified two files, namely | 
|---|
|  | 1986 | <filename>BondFragment00.in</filename> and | 
|---|
|  | 1987 | <filename>BondFragment01.in</filename>, to be parsed from the path | 
|---|
|  | 1988 | "./", i.e. the current directory. Also, we have specified to sample | 
|---|
|  | 1989 | the electronic charge density obtained from the calculated ground | 
|---|
|  | 1990 | state energy solution with a resolution of 5 (see fragment molecule | 
|---|
|  | 1991 | and also below).</para> | 
|---|
|  | 1992 |  | 
|---|
|  | 1993 | <para>This allows for automated and parallel calculation of all | 
|---|
|  | 1994 | fragment energies and forces directly within MoleCuilder. The | 
|---|
|  | 1995 | FragmentationAutomation action takes the fragment configurations | 
|---|
|  | 1996 | from an internal storage wherein they are placed if in | 
|---|
|  | 1997 | FragmentMolecule no output-types have been specified.</para> | 
|---|
|  | 1998 |  | 
|---|
|  | 1999 | <programlisting> | 
|---|
|  | 2000 | ... --fragment-automation \ | 
|---|
|  | 2001 | --fragment-executable mpqc \ | 
|---|
|  | 2002 | --fragment-resultfile BondFragment_results.dat \ | 
|---|
|  | 2003 | --DoLongrange 1 \ | 
|---|
|  | 2004 | --DoValenceOnly 1 \ | 
|---|
|  | 2005 | --grid-level 5 \ | 
|---|
|  | 2006 | --interpolation-degree 3 \ | 
|---|
|  | 2007 | --near-field-cells 4 \ | 
|---|
|  | 2008 | --server-address 127.0.0.1 \ | 
|---|
|  | 2009 | --server-port 1025 | 
|---|
|  | 2010 | </programlisting> | 
|---|
|  | 2011 |  | 
|---|
|  | 2012 | <para>Again, we go through each of the action's options step by | 
|---|
|  | 2013 | step.</para> | 
|---|
|  | 2014 |  | 
|---|
|  | 2015 | <para>The executable is required if you do not have a patched | 
|---|
|  | 2016 | version of <productname>MPQC</productname> that may directly act as | 
|---|
|  | 2017 | a client to JobMarket's server. All calculated results are placed in | 
|---|
|  | 2018 | the result file. If none is given, they are instead again placed in | 
|---|
|  | 2019 | an internal storage for later access.</para> | 
|---|
|  | 2020 |  | 
|---|
|  | 2021 | <note> | 
|---|
|  | 2022 | <para>Long-calculations are only possible with a client that knows | 
|---|
|  | 2023 | how to handle VMG jobs. If you encounter failures, then it is most | 
|---|
|  | 2024 | likely that you do not have a suitable client.</para> | 
|---|
|  | 2025 | </note> | 
|---|
|  | 2026 |  | 
|---|
|  | 2027 | <para>In the next line, we have all options related to calculation | 
|---|
|  | 2028 | of long-range interactions. We only sample valence charges on the | 
|---|
|  | 2029 | grid, i.e. not core electrons and the nuclei charge is reduces | 
|---|
|  | 2030 | respectively. This avoids problems with sampling highly localized | 
|---|
|  | 2031 | charges on the grid and is in general recommended. Next, there | 
|---|
|  | 2032 | follow parameters for the multi grid solver, namely the resolution | 
|---|
|  | 2033 | of the grid, see under fragmenting the molecule, the interpolation | 
|---|
|  | 2034 | degree and the number of near field cells. A grid level of 6 is | 
|---|
|  | 2035 | recommended but costly in terms of memory, the other values are at | 
|---|
|  | 2036 | their recommend values.</para> | 
|---|
|  | 2037 |  | 
|---|
|  | 2038 | <para>In the last line, parameters are given on how to access the | 
|---|
|  | 2039 | JobMarket server, namely it address and its port.</para> | 
|---|
|  | 2040 | </section> | 
|---|
|  | 2041 |  | 
|---|
| [9bce96] | 2042 | <section xml:id='fragmentation.analyse-fragment-results'> | 
|---|
|  | 2043 | <title xml:id='fragmentation.analyse-fragment-results.title'> | 
|---|
|  | 2044 | Analyse fragment results</title> | 
|---|
| [6029a6] | 2045 |  | 
|---|
|  | 2046 | <para>After the energies and force vectors of each fragment have | 
|---|
|  | 2047 | been calculated, they need to be summed up to an approximation for | 
|---|
|  | 2048 | the energy and force vectors of the whole molecular system. This is | 
|---|
|  | 2049 | done by calling this action.</para> | 
|---|
|  | 2050 |  | 
|---|
|  | 2051 | <programlisting> | 
|---|
|  | 2052 | ... --analyse-fragment-results \ | 
|---|
|  | 2053 | --fragment-prefix "BondFragment" \ | 
|---|
|  | 2054 | --fragment-resultfile BondFragment_results.dat \ | 
|---|
|  | 2055 | --store-grids 1 | 
|---|
|  | 2056 | </programlisting> | 
|---|
|  | 2057 |  | 
|---|
|  | 2058 | <para>The purpose of the prefix should already be known to you, same | 
|---|
|  | 2059 | with the result file that is the file parsed by MoleCuilder. The | 
|---|
|  | 2060 | last option states that the sampled charge densities and the | 
|---|
|  | 2061 | calculated potential from the long-range calculations should be | 
|---|
|  | 2062 | stored with the summed up energies and forces. Note that this makes | 
|---|
|  | 2063 | the resulting files substantially larger (Hundreds of megabyte or | 
|---|
|  | 2064 | even gigabytes). Fragment energies and forces are stored in | 
|---|
|  | 2065 | so-called internal homology containers. These are explained in the | 
|---|
|  | 2066 | next section.</para> | 
|---|
|  | 2067 |  | 
|---|
|  | 2068 | <para>Note that this action sets the force vector if these have been | 
|---|
| [9bce96] | 2069 | calculated for the fragment. Hence, a | 
|---|
|  | 2070 | <link linkend="molecule.verlet-integration">verlet integration</link> | 
|---|
|  | 2071 | is possible afterwards.</para> | 
|---|
| [6029a6] | 2072 | </section> | 
|---|
| [f73e06] | 2073 |  | 
|---|
| [9bce96] | 2074 | <section xml:id='fragmentation.store-saturated-fragment'> | 
|---|
|  | 2075 | <title xml:id='fragmentation.store-saturated-fragment.title'>Store | 
|---|
|  | 2076 | a saturated fragment</title> | 
|---|
| [f73e06] | 2077 |  | 
|---|
|  | 2078 | <para>After the energies and force vectors of each fragment have | 
|---|
|  | 2079 | been calculated, they need to be summed up to an approximation for | 
|---|
|  | 2080 | the energy and force vectors of the whole molecular system. This is | 
|---|
|  | 2081 | done by calling this action.</para> | 
|---|
|  | 2082 |  | 
|---|
|  | 2083 | <para>This will store the currently selected atoms as a fragment | 
|---|
|  | 2084 | where all dangling bonds (by atoms that are connected in the bond | 
|---|
|  | 2085 | graph but have not been selected as well) are saturated with | 
|---|
|  | 2086 | additional hydrogen atoms. The output formats are set to just xyz. | 
|---|
|  | 2087 | </para> | 
|---|
|  | 2088 |  | 
|---|
|  | 2089 | <programlisting> | 
|---|
|  | 2090 | ... --store-saturated-fragment \ | 
|---|
|  | 2091 | --DoSaturate 1 \ | 
|---|
|  | 2092 | --output-types xyz | 
|---|
|  | 2093 | </programlisting> | 
|---|
|  | 2094 | </section> | 
|---|
| [6029a6] | 2095 | </section> | 
|---|
|  | 2096 |  | 
|---|
| [9bce96] | 2097 | <section xml:id='homology'> | 
|---|
|  | 2098 | <title xml:id='homology.title'>Homologies</title> | 
|---|
| [6029a6] | 2099 |  | 
|---|
|  | 2100 | <para>After a fragmentation procedure has been performed fully, what | 
|---|
|  | 2101 | to do with the results? The forces can be used already but what about | 
|---|
|  | 2102 | the energies? The energy value is basically the function evaluation of | 
|---|
|  | 2103 | the Born-Oppenheimer surface. For molecular dynamics simulations | 
|---|
|  | 2104 | continuous ab-initio calculations to evaluate the Born-Oppenheimer | 
|---|
|  | 2105 | surface is not feasible. Instead usually empirical potential functions | 
|---|
|  | 2106 | are fitted as to resemble the Born-Oppenheimer surface to a sufficient | 
|---|
|  | 2107 | degree.</para> | 
|---|
|  | 2108 |  | 
|---|
|  | 2109 | <para>One frequent method is the many-body expansion of said surface | 
|---|
|  | 2110 | which is basically nothing else than the fragment ansatz described | 
|---|
|  | 2111 | above. Potential functions resemble a specific term in this many-body | 
|---|
|  | 2112 | expansion. These are discussed in the next section.</para> | 
|---|
|  | 2113 |  | 
|---|
|  | 2114 | <para>For each of these terms all homologous fragments (i.e. having | 
|---|
|  | 2115 | the same atoms with respect to the present elements and bonded in the | 
|---|
|  | 2116 | same way), differing only in the coordinate of each atom, are just a | 
|---|
|  | 2117 | sampling or a function evaluation of this term of the many-body | 
|---|
|  | 2118 | expansion with respect to varying nuclei coordinates. Hence, it is | 
|---|
|  | 2119 | appropriate to use these function evaluations in a non-linear | 
|---|
|  | 2120 | regression procedure. That is, we want to tune the parameter of the | 
|---|
|  | 2121 | empirical potential function in such a way as to most closely obtain | 
|---|
|  | 2122 | the same function evaluation as the ab-initio calculation did with the | 
|---|
|  | 2123 | same nuclear coordinates. Usually, this is done in a least-square | 
|---|
|  | 2124 | sense, minimising the euclidean norm.</para> | 
|---|
|  | 2125 |  | 
|---|
|  | 2126 | <para>Homologies are then nothing else but containers for a specific | 
|---|
|  | 2127 | type of fragment of all the different, calculated configurations (i.e. | 
|---|
|  | 2128 | varying nuclear coordinates of the same fragment).</para> | 
|---|
|  | 2129 |  | 
|---|
|  | 2130 | <para>Now, we explain the actions that parse and store | 
|---|
|  | 2131 | homologies.</para> | 
|---|
|  | 2132 |  | 
|---|
|  | 2133 | <programlisting>... --parse-homologies homologies.dat</programlisting> | 
|---|
|  | 2134 |  | 
|---|
|  | 2135 | <para>This parses the all homologies contained in the file | 
|---|
|  | 2136 | <filename>homologies.dat</filename> and appends them to the homology | 
|---|
|  | 2137 | container.</para> | 
|---|
|  | 2138 |  | 
|---|
| [f73e06] | 2139 | <programlisting>... --save-homologies homologies.dat</programlisting> | 
|---|
| [6029a6] | 2140 |  | 
|---|
|  | 2141 | <para>Complementary, this stores the current contents of the homology | 
|---|
|  | 2142 | container, overwriting the file | 
|---|
|  | 2143 | <filename>homologies.dat</filename>.</para> | 
|---|
|  | 2144 | </section> | 
|---|
|  | 2145 |  | 
|---|
| [9bce96] | 2146 | <section xml:id='potentials'> | 
|---|
|  | 2147 | <title xml:id='potentials.title'>Potentials</title> | 
|---|
| [6029a6] | 2148 |  | 
|---|
|  | 2149 | <para>In much the same manner, we would now ask what are homology | 
|---|
|  | 2150 | files or containers good for but with the just had explanation it | 
|---|
|  | 2151 | should be clear: We fit potential function to these function | 
|---|
|  | 2152 | evaluation of terms of the many-body expansion of the Born-Oppenheimer | 
|---|
|  | 2153 | surface of the full system.</para> | 
|---|
|  | 2154 |  | 
|---|
| [9bce96] | 2155 | <section xml:id='potentials.fit-potential'> | 
|---|
|  | 2156 | <title xml:id='potentials.fit-potential.title'>Fitting empirical | 
|---|
|  | 2157 | potentials</title> | 
|---|
| [6029a6] | 2158 |  | 
|---|
|  | 2159 | <para>Let's take a look at an exemplary call to the fit potential | 
|---|
|  | 2160 | action.</para> | 
|---|
|  | 2161 |  | 
|---|
|  | 2162 | <programlisting> | 
|---|
|  | 2163 | ... --fit-potential \ | 
|---|
|  | 2164 | --fragment-charges 8 1 1 \ | 
|---|
|  | 2165 | --potential-charges 8 1 \ | 
|---|
|  | 2166 | --potential-type morse \ | 
|---|
|  | 2167 | --take-best-of 5 | 
|---|
|  | 2168 | </programlisting> | 
|---|
|  | 2169 |  | 
|---|
|  | 2170 | <para>Again, we look at each option in turn. The first is the | 
|---|
|  | 2171 | charges or elements specifying the set of homologous fragments that | 
|---|
|  | 2172 | we want to look at. Here, obviously we are interested in water | 
|---|
|  | 2173 | molecules, consisting of a single oxygen and two hydrogen atoms. | 
|---|
|  | 2174 | Next, we specify the nuclei coordinates of the potential. We give | 
|---|
|  | 2175 | the type of the potential as morse, which requires a single distance | 
|---|
|  | 2176 | or two nuclear coordinates, here between an oxygen and a hydrogen | 
|---|
|  | 2177 | atom. Finally, we state that the non-linear regression should be | 
|---|
|  | 2178 | done with five random starting positions and the set of parameters | 
|---|
|  | 2179 | with the smallest L2 norm wins.</para> | 
|---|
|  | 2180 |  | 
|---|
|  | 2181 | <note> | 
|---|
|  | 2182 | <para>Due to translational and rotational degrees of freedom for | 
|---|
|  | 2183 | fragments smaller than 7 atoms, it is appropriate to look at the | 
|---|
|  | 2184 | pair-wise distances and not at the absolute coordinates. Hence, | 
|---|
|  | 2185 | the two atomic positions, here for oxygen and hydrogen, are | 
|---|
|  | 2186 | converted to a single distance. If we had given an harmonic | 
|---|
|  | 2187 | angular potential and three charges/element, 8 1 1, i.e. oxygen | 
|---|
|  | 2188 | and two hydrogens, we would have obtained three distances.</para> | 
|---|
|  | 2189 |  | 
|---|
|  | 2190 | <para>MoleCuilder always adds a so-called constant potential to | 
|---|
|  | 2191 | the fit containing only a single parameter, the energy offset. | 
|---|
|  | 2192 | This offset compensates for the interaction energy associated with | 
|---|
|  | 2193 | a fragment of order 1, e.g. a single hydrogen atom.</para> | 
|---|
|  | 2194 | </note> | 
|---|
| [f1eabd] | 2195 | </section> | 
|---|
|  | 2196 |  | 
|---|
|  | 2197 | <section xml:id='potentials.fit-compound-potential'> | 
|---|
|  | 2198 | <title xml:id='potentials.fit-compound-potential.title'>Fitting | 
|---|
|  | 2199 | many empirical potentials simultaneously</title> | 
|---|
|  | 2200 |  | 
|---|
| [6029a6] | 2201 |  | 
|---|
|  | 2202 | <para>Another way is using a file containing a specific set of | 
|---|
|  | 2203 | potential functions, possibly even with initial values.</para> | 
|---|
|  | 2204 |  | 
|---|
|  | 2205 | <programlisting> | 
|---|
| [98d166] | 2206 | ... --fit-compound-potential \ | 
|---|
| [6029a6] | 2207 | --fragment-charges 8 1 1 \ | 
|---|
|  | 2208 | --potential-file water.potentials \ | 
|---|
|  | 2209 | --set-threshold 1e-3 \ | 
|---|
|  | 2210 | --training-file test.dat | 
|---|
|  | 2211 | </programlisting> | 
|---|
|  | 2212 |  | 
|---|
|  | 2213 | <para>Now, all empirical potential functions are summed up into a | 
|---|
|  | 2214 | so-called compound potential over the combined set of parameters. | 
|---|
|  | 2215 | These are now fitted simultaneously. For example, if the potential | 
|---|
|  | 2216 | file <filename>water.potentials</filename> contains a harmonic bond | 
|---|
|  | 2217 | potential between oxygen and hydrogen and another angular potential | 
|---|
|  | 2218 | for the angle between hydrogen, oxygen, and hydrogen atom we would | 
|---|
|  | 2219 | fit a still simple function approximating the energy of a single | 
|---|
|  | 2220 | water molecule. Here, the threshold takes the place of the | 
|---|
|  | 2221 | take-best-of option. Here, random starting parameters are used as | 
|---|
|  | 2222 | long as the final L2 error is not below 1e-3. Also, all data used | 
|---|
|  | 2223 | for training, i.e. the tuples consisting of the fragments nuclei | 
|---|
|  | 2224 | coordinates and the associated energy value are written to the file | 
|---|
|  | 2225 | <filename>test.dat</filename>. This allows for graphical or other | 
|---|
|  | 2226 | type of analysis.</para> | 
|---|
|  | 2227 |  | 
|---|
| [98d166] | 2228 | <para>Note that you can combine the two ways, i.e. start with a | 
|---|
|  | 2229 | fit-potential call but give an empty potential file. The resulting | 
|---|
|  | 2230 | parameters are stored in it. Fit other potentials and give different | 
|---|
|  | 2231 | file names for each in turn. Eventually, you have to combine the file | 
|---|
|  | 2232 | in a text editor at the moment. And perform a fit-compound-potential | 
|---|
|  | 2233 | with this file.</para> | 
|---|
| [6029a6] | 2234 | </section> | 
|---|
|  | 2235 |  | 
|---|
| [f1eabd] | 2236 |  | 
|---|
|  | 2237 | <section xml:id='potentials.parse-potential'> | 
|---|
|  | 2238 | <title xml:id='potentials.parse-potential.title'>Parsing an | 
|---|
|  | 2239 | empirical potentials file</title> | 
|---|
|  | 2240 |  | 
|---|
|  | 2241 | <para>Responsible for the compound potential is every potential | 
|---|
|  | 2242 | function whose signature matches with the designated fragment-charges | 
|---|
|  | 2243 | and who is currently known to an internal instance called the | 
|---|
|  | 2244 | PotentialRegistry.</para> | 
|---|
|  | 2245 |  | 
|---|
|  | 2246 | <para>More potentials can be registered (fit-potential will also | 
|---|
|  | 2247 | register the potential it fits) by parsing them from a file.</para> | 
|---|
|  | 2248 |  | 
|---|
|  | 2249 | <programlisting> | 
|---|
|  | 2250 | ... --parse-potentials water.potentials | 
|---|
|  | 2251 | </programlisting> | 
|---|
|  | 2252 |  | 
|---|
|  | 2253 | <note>Currently, only <productname>TREMOLO</productname> potential | 
|---|
|  | 2254 | files are understood and can be parsed.</note> | 
|---|
|  | 2255 | </section> | 
|---|
|  | 2256 |  | 
|---|
| [0ea063] | 2257 | <section xml:id='potentials.save-potential'> | 
|---|
|  | 2258 | <title xml:id='potentials.save-potential.title'>Saving an | 
|---|
|  | 2259 | empirical potentials file</title> | 
|---|
|  | 2260 |  | 
|---|
|  | 2261 | <para>The opposite to parse-potentials is save-potentials that writes | 
|---|
|  | 2262 | every potential currently known to the PotentialRegistry to the given | 
|---|
|  | 2263 | file along with the currently fitted parameters</para> | 
|---|
|  | 2264 |  | 
|---|
|  | 2265 | <programlisting> | 
|---|
|  | 2266 | ... --save-potentials water.potentials | 
|---|
|  | 2267 | </programlisting> | 
|---|
|  | 2268 |  | 
|---|
|  | 2269 | <note>Again, only the <productname>TREMOLO</productname> potential | 
|---|
|  | 2270 | format is understood currently and is written.</note> | 
|---|
| [6029a6] | 2271 | </section> | 
|---|
|  | 2272 |  | 
|---|
| [9bce96] | 2273 | <section xml:id='potentials.fit-particle-charges'> | 
|---|
|  | 2274 | <title xml:id='potentials.fit-particle-charges.title'>Fitting | 
|---|
|  | 2275 | particle charges</title> | 
|---|
| [6029a6] | 2276 |  | 
|---|
|  | 2277 | <para>The above empirical potential just model the short-range | 
|---|
|  | 2278 | behavior in the molecular fragment, namely the bonded interaction. | 
|---|
|  | 2279 | In order to model the long-range interaction as well without solving | 
|---|
| [f73e06] | 2280 | for the electronic ground state in each time step, particle charges | 
|---|
| [6029a6] | 2281 | are used that capture to some degree the created dipoles due to | 
|---|
|  | 2282 | charge transfer from one atom to another when bonded.</para> | 
|---|
|  | 2283 |  | 
|---|
|  | 2284 | <para>To allow least-squares regression of these partial charges we | 
|---|
|  | 2285 | need the results of long-range calculations and the store-grids | 
|---|
| [9bce96] | 2286 | option (see above under <link linkend="fragmentation">Fragmentation | 
|---|
|  | 2287 | </link>) must have been given. With these sampled charge density and | 
|---|
|  | 2288 | Coulomb potential stored in the homology containers, we call this | 
|---|
|  | 2289 | action as follows.</para> | 
|---|
| [6029a6] | 2290 |  | 
|---|
|  | 2291 | <programlisting> | 
|---|
| [f73e06] | 2292 | ... --fit-particle-charges \ | 
|---|
| [6029a6] | 2293 | --fragment-charges 8 1 1 \ | 
|---|
|  | 2294 | --potential-file water.potentials \ | 
|---|
|  | 2295 | --radius 0.2 | 
|---|
|  | 2296 | </programlisting> | 
|---|
|  | 2297 |  | 
|---|
|  | 2298 | <para>This will again use water molecule as homologous fragment | 
|---|
|  | 2299 | "key" to request configurations from the container. Results are | 
|---|
|  | 2300 | stored in <filename>water.potentials</filename>. The radius is used | 
|---|
|  | 2301 | to mark the region directly around the nuclei from the fit | 
|---|
|  | 2302 | procedure. As here the charges of the core electrons and the nuclei | 
|---|
|  | 2303 | itself dominate, we however are only interested in a good | 
|---|
|  | 2304 | approximation to the long-range potential, this mask radius allows | 
|---|
|  | 2305 | to give the range of the excluded zone.</para> | 
|---|
|  | 2306 | </section> | 
|---|
|  | 2307 | </section> | 
|---|
|  | 2308 |  | 
|---|
| [9bce96] | 2309 | <section xml:id='dynamics'> | 
|---|
|  | 2310 | <title xml:id='dynamics.title'>Dynamics</title> | 
|---|
| [f73e06] | 2311 |  | 
|---|
|  | 2312 | <para>For fitting potentials or charges we need many homologuous but | 
|---|
|  | 2313 | different fragments, i.e. atoms with slightly different positions. | 
|---|
|  | 2314 | How can we generate these?</para> | 
|---|
|  | 2315 |  | 
|---|
|  | 2316 | <para>One possibility is to use molecular dynamics. With the | 
|---|
|  | 2317 | aforementioned fragmentation scheme we can quickly calculate not only | 
|---|
|  | 2318 | energies but also forces if the chosen solver, such as | 
|---|
|  | 2319 | <link xlink:href="http://www.mpqc.org/"><productname>MPQC | 
|---|
| [9bce96] | 2320 | </productname></link>, supports it. Integrating these forces | 
|---|
|  | 2321 | discretely over time  gives insight into vibrational features of a | 
|---|
|  | 2322 | molecular system and allows to generate those positions for fitting | 
|---|
|  | 2323 | potentials that describe these vibrations.</para> | 
|---|
| [f73e06] | 2324 |  | 
|---|
| [9bce96] | 2325 | <section xml:id='dynamics.molecular-dynamics'> | 
|---|
|  | 2326 | <title xml:id='dynamics.molecular-dynamics.title'>Molecular dynamics | 
|---|
|  | 2327 | </title> | 
|---|
| [f73e06] | 2328 |  | 
|---|
|  | 2329 | <para>The molecular dynamics action is a so-called macro Action, | 
|---|
|  | 2330 | i.e. it combines several other Actions into one, namely:</para> | 
|---|
|  | 2331 | <itemizedlist> | 
|---|
|  | 2332 | <listitem> | 
|---|
|  | 2333 | <para>--verlet-integration</para> | 
|---|
|  | 2334 | </listitem> | 
|---|
|  | 2335 | <listitem> | 
|---|
|  | 2336 | <para>--output</para> | 
|---|
|  | 2337 | </listitem> | 
|---|
|  | 2338 | <listitem> | 
|---|
|  | 2339 | <para>--clear-fragment-results</para> | 
|---|
|  | 2340 | </listitem> | 
|---|
|  | 2341 | <listitem> | 
|---|
|  | 2342 | <para>--destroy-adjacency</para> | 
|---|
|  | 2343 | </listitem> | 
|---|
|  | 2344 | <listitem> | 
|---|
|  | 2345 | <para>--create-adjacency</para> | 
|---|
|  | 2346 | </listitem> | 
|---|
|  | 2347 | <listitem> | 
|---|
|  | 2348 | <para>--update-molecules</para> | 
|---|
|  | 2349 | </listitem> | 
|---|
|  | 2350 | <listitem> | 
|---|
|  | 2351 | <para>--fragment-molecule</para> | 
|---|
|  | 2352 | </listitem> | 
|---|
|  | 2353 | <listitem> | 
|---|
|  | 2354 | <para>--fragment-automation</para> | 
|---|
|  | 2355 | </listitem> | 
|---|
|  | 2356 | <listitem> | 
|---|
|  | 2357 | <para>--analyse-fragment-results</para> | 
|---|
|  | 2358 | </listitem> | 
|---|
|  | 2359 | </itemizedlist> | 
|---|
|  | 2360 |  | 
|---|
|  | 2361 | <para>The following will perform a molecular dynamics simulation | 
|---|
|  | 2362 | for 100 time steps, each time step combining 0.5 atomic time units, | 
|---|
|  | 2363 | i.e. 1.2 1e-17 s. The other options listed below will seem familiar | 
|---|
|  | 2364 | to you if you have read about the other Actions listed above. Below | 
|---|
|  | 2365 | we will not keep the bondgraph, i.e bonds and molecules may change | 
|---|
|  | 2366 | over the simulation and hence also the created fragments per time | 
|---|
|  | 2367 | step. | 
|---|
|  | 2368 | </para> | 
|---|
|  | 2369 |  | 
|---|
|  | 2370 | <programlisting> | 
|---|
|  | 2371 | ... --molecular-dynamics \ | 
|---|
|  | 2372 | --steps 100 \ | 
|---|
|  | 2373 | --keep-bondgraph 0 \ | 
|---|
|  | 2374 | --order 3 \ | 
|---|
|  | 2375 | --distance 3. \ | 
|---|
|  | 2376 | --deltat 0.5 \ | 
|---|
|  | 2377 | --keep-fixed-CenterOfMass 1 \ | 
|---|
|  | 2378 | --fragment-executable mpqc \ | 
|---|
|  | 2379 | </programlisting> | 
|---|
|  | 2380 | </section> | 
|---|
|  | 2381 |  | 
|---|
| [9bce96] | 2382 | <section xml:id='dynamics.optimize-structure'> | 
|---|
|  | 2383 | <title xml:id='dynamics.optimize-structure.title'>Structure | 
|---|
|  | 2384 | optimization</title> | 
|---|
| [f73e06] | 2385 |  | 
|---|
|  | 2386 | <para>Structure optimization is also a macro Action, it basically | 
|---|
|  | 2387 | combines the same Actions as molecular-dynamics does. However, it | 
|---|
|  | 2388 | uses force-annealing instead of verlet-integration.</para> | 
|---|
|  | 2389 |  | 
|---|
|  | 2390 | <para>The following performs a structure optimization of the | 
|---|
|  | 2391 | currently selected atoms (may also be a subset) for up to 100 time | 
|---|
|  | 2392 | steps, where each time step ist 0.5 atomic time units. The time | 
|---|
|  | 2393 | step here is the initial step with for annealing. | 
|---|
|  | 2394 | </para> | 
|---|
|  | 2395 |  | 
|---|
|  | 2396 | <programlisting> | 
|---|
|  | 2397 | ... --optimize-structure \ | 
|---|
|  | 2398 | --keep-bondgraph 1 \ | 
|---|
|  | 2399 | --output-every-step 1 \ | 
|---|
|  | 2400 | --steps 100 \ | 
|---|
|  | 2401 | --order 3 \ | 
|---|
|  | 2402 | --distance 3. \ | 
|---|
|  | 2403 | --deltat 0.5 \ | 
|---|
|  | 2404 | --keep-fixed-CenterOfMass 1 \ | 
|---|
|  | 2405 | --fragment-executable mpqc \ | 
|---|
|  | 2406 | </programlisting> | 
|---|
|  | 2407 |  | 
|---|
|  | 2408 | <para>Note that output-every-step will allow you to watch the | 
|---|
|  | 2409 | optimization as each step is placed into a distinct time step. | 
|---|
|  | 2410 | Otherwise only two time steps would be created: the initial and | 
|---|
|  | 2411 | the final one containing the optimized structure.</para> | 
|---|
|  | 2412 | </section> | 
|---|
|  | 2413 |  | 
|---|
| [9bce96] | 2414 | <section xml:id='dynamics.set-world-time'> | 
|---|
|  | 2415 | <title xml:id='dynamics.set-world-time.title'>Set the world's time | 
|---|
|  | 2416 | step</title> | 
|---|
| [f73e06] | 2417 |  | 
|---|
|  | 2418 | <para>In order to inspect or manipulate atoms and molecules at a | 
|---|
|  | 2419 | certain time step, the World's time has to be set with the following | 
|---|
|  | 2420 | Action. | 
|---|
|  | 2421 | </para> | 
|---|
|  | 2422 |  | 
|---|
|  | 2423 | <para>This will set the World's time to the fifth step (counting | 
|---|
|  | 2424 | starts at zero).</para> | 
|---|
|  | 2425 |  | 
|---|
|  | 2426 | <programlisting>... --set-world-time 4</programlisting> | 
|---|
|  | 2427 | </section> | 
|---|
|  | 2428 |  | 
|---|
| [9bce96] | 2429 | <section xml:id='dynamics.save-temperature'> | 
|---|
|  | 2430 | <title xml:id='dynamics.save-temperature.title'>Save the | 
|---|
|  | 2431 | temperature information</title> | 
|---|
| [f73e06] | 2432 |  | 
|---|
|  | 2433 | <para>For each time step the temperature (i.e. the average velocity | 
|---|
|  | 2434 | per atom times its mass) will be stored to a file.</para> | 
|---|
|  | 2435 |  | 
|---|
|  | 2436 | <programlisting> | 
|---|
|  | 2437 | ... --save-temperature temperature.dat \ | 
|---|
|  | 2438 | </programlisting> | 
|---|
|  | 2439 | </section> | 
|---|
|  | 2440 | </section> | 
|---|
|  | 2441 |  | 
|---|
| [9bce96] | 2442 | <section xml:id='dynamics.tesselation'> | 
|---|
|  | 2443 | <title xml:id='dynamics.tesselation.title'>Tesselations</title> | 
|---|
| [f73e06] | 2444 |  | 
|---|
|  | 2445 | <para>Tesselations obtain molecular surfaces (and volumes) by rolling | 
|---|
|  | 2446 | a virtual sphere of a certain radii on a molecule until a closed | 
|---|
|  | 2447 | surface of connected triangles is created.</para> | 
|---|
|  | 2448 |  | 
|---|
| [9bce96] | 2449 | <section xml:id='dynamics.tesselation.nonconvex-envelope'> | 
|---|
|  | 2450 | <title xml:id='dynamics.tesselation.nonconvex-envelope.title'> | 
|---|
|  | 2451 | Non-convex envelope</title> | 
|---|
| [f73e06] | 2452 |  | 
|---|
| [8544b32] | 2453 | <para>This will create a non-convex envelope for a molecule and store | 
|---|
|  | 2454 | it to a file for viewing with external programs.</para> | 
|---|
| [f73e06] | 2455 |  | 
|---|
|  | 2456 | <programlisting> | 
|---|
|  | 2457 | ... --nonconvex-envelope 6. \ | 
|---|
|  | 2458 | --nonconvex-file nonconvex.dat | 
|---|
|  | 2459 | </programlisting> | 
|---|
|  | 2460 |  | 
|---|
|  | 2461 | <para>This tesselation file can be conveniently viewed with | 
|---|
| [9bce96] | 2462 | <productname>TecPlot</productname> or with one of the Tcl script | 
|---|
| [cead3f] | 2463 | in the util folder with <productname>VMD</productname>. Also, | 
|---|
|  | 2464 | still pictures can be produced with <productname>Raster3D | 
|---|
|  | 2465 | </productname>. | 
|---|
|  | 2466 | <note>The required file header.r3d can be found in a subfolder of | 
|---|
|  | 2467 | the util folder.</note> | 
|---|
|  | 2468 | </para> | 
|---|
| [f73e06] | 2469 | </section> | 
|---|
|  | 2470 |  | 
|---|
| [9bce96] | 2471 | <section xml:id='dynamics.tesselation.convex-envelope'> | 
|---|
|  | 2472 | <title xml:id='dynamics.tesselation.convex-envelope.title'>Convex | 
|---|
|  | 2473 | envelope</title> | 
|---|
| [f73e06] | 2474 |  | 
|---|
| [8544b32] | 2475 | <para>This will create a convex envelope for a molecule and give the | 
|---|
|  | 2476 | volumes of both the non-convex and the convex envelope. This is good | 
|---|
|  | 2477 | for measuring the space a molecule takes up, e.g. when filling a | 
|---|
|  | 2478 | domain and taking care of correct densities.</para> | 
|---|
| [f73e06] | 2479 |  | 
|---|
|  | 2480 | <programlisting> | 
|---|
|  | 2481 | ... --convex-envelope 6. \ | 
|---|
|  | 2482 | --convex-file convex.dat | 
|---|
|  | 2483 | </programlisting> | 
|---|
|  | 2484 |  | 
|---|
| [8544b32] | 2485 | <para>This tesselation file can be likewise viewed with | 
|---|
| [9bce96] | 2486 | <productname>TecPlot</productname> or with one of the Tcl script | 
|---|
|  | 2487 | in the util folder with <productname>VMD</productname>.</para> | 
|---|
| [f73e06] | 2488 | </section> | 
|---|
|  | 2489 | </section> | 
|---|
|  | 2490 |  | 
|---|
| [9bce96] | 2491 | <section xml:id='various'> | 
|---|
|  | 2492 | <title xml:id='various.title'>Various commands</title> | 
|---|
| [6029a6] | 2493 |  | 
|---|
|  | 2494 | <para>Here, we gather all commands that do not fit into one of above | 
|---|
|  | 2495 | categories for completeness.</para> | 
|---|
|  | 2496 |  | 
|---|
| [9bce96] | 2497 | <section xml:id='various.verbose'> | 
|---|
|  | 2498 | <title xml:id='various.verbose.title'>Changing verbosity</title> | 
|---|
| [6029a6] | 2499 |  | 
|---|
|  | 2500 | <para>The verbosity level is the amount of stuff printed to screen. | 
|---|
|  | 2501 | This information will in general help you to understand when | 
|---|
|  | 2502 | something does not work. Mind the <emphasis>ERROR</emphasis> and | 
|---|
|  | 2503 | <emphasis>WARNING</emphasis> messages in any case.</para> | 
|---|
|  | 2504 |  | 
|---|
|  | 2505 | <para>This sets the verbosity from default of 2 to 4,</para> | 
|---|
|  | 2506 |  | 
|---|
|  | 2507 | <programlisting>... --verbose 4</programlisting> | 
|---|
|  | 2508 |  | 
|---|
|  | 2509 | <para>or shorter,</para> | 
|---|
|  | 2510 |  | 
|---|
|  | 2511 | <programlisting>... -v 4</programlisting> | 
|---|
|  | 2512 | </section> | 
|---|
|  | 2513 |  | 
|---|
| [9bce96] | 2514 | <section xml:id='various.element-db'> | 
|---|
|  | 2515 | <title xml:id='various.element-db.title'>Loading an element | 
|---|
|  | 2516 | database</title> | 
|---|
| [f73e06] | 2517 |  | 
|---|
|  | 2518 | <para>Element databases contain information on valency, van der | 
|---|
|  | 2519 | Waals-radii and other information for each element.</para> | 
|---|
|  | 2520 |  | 
|---|
|  | 2521 | <para>This loads all element database from the current folder (in a | 
|---|
|  | 2522 | unix environment):</para> | 
|---|
|  | 2523 |  | 
|---|
|  | 2524 | <programlisting>... --element-db ./</programlisting> | 
|---|
|  | 2525 |  | 
|---|
|  | 2526 | </section> | 
|---|
|  | 2527 |  | 
|---|
| [9bce96] | 2528 | <section xml:id='various.fastparsing'> | 
|---|
|  | 2529 | <title xml:id='various.fastparsing.title'>Fast parsing</title> | 
|---|
| [f73e06] | 2530 |  | 
|---|
|  | 2531 | <para>Parsing all time steps from a given input file can take a | 
|---|
|  | 2532 | while, especially for larger systems. If fast parsing is activated, | 
|---|
|  | 2533 | only the first time step is loaded, all other are ignored.</para> | 
|---|
|  | 2534 |  | 
|---|
|  | 2535 | <programlisting>... --fastparsing 1</programlisting> | 
|---|
|  | 2536 | </section> | 
|---|
|  | 2537 |  | 
|---|
| [9bce96] | 2538 | <section xml:id='various.version'> | 
|---|
|  | 2539 | <title xml:id='various.version.title'>Giving the version of the | 
|---|
|  | 2540 | program</title> | 
|---|
| [6029a6] | 2541 |  | 
|---|
|  | 2542 | <para>This prints the version information of the code, especially | 
|---|
|  | 2543 | important when you request the fixing of bugs or implementation of | 
|---|
|  | 2544 | features.</para> | 
|---|
|  | 2545 |  | 
|---|
|  | 2546 | <programlisting>... --version</programlisting> | 
|---|
|  | 2547 | </section> | 
|---|
|  | 2548 |  | 
|---|
| [9bce96] | 2549 | <section xml:id='various.warranty'> | 
|---|
|  | 2550 | <title xml:id='various.warranty.title'>Giving warranty | 
|---|
|  | 2551 | information</title> | 
|---|
| [6029a6] | 2552 |  | 
|---|
|  | 2553 | <para>As follows warranty information is given,</para> | 
|---|
|  | 2554 |  | 
|---|
|  | 2555 | <programlisting>... --warranty</programlisting> | 
|---|
|  | 2556 | </section> | 
|---|
| [f73e06] | 2557 |  | 
|---|
| [9bce96] | 2558 | <section xml:id='various.help-redistribute'> | 
|---|
|  | 2559 | <title xml:id='various.help-redistribute.title'>Giving | 
|---|
|  | 2560 | redistribution information</title> | 
|---|
| [f73e06] | 2561 |  | 
|---|
|  | 2562 | <para>This gives information on the license and how to redistribute | 
|---|
|  | 2563 | the program and its source code</para> | 
|---|
|  | 2564 |  | 
|---|
|  | 2565 | <programlisting>... --help-redistribute</programlisting> | 
|---|
|  | 2566 | </section> | 
|---|
| [6029a6] | 2567 | </section> | 
|---|
|  | 2568 |  | 
|---|
| [9bce96] | 2569 | <section xml:id='sessions'> | 
|---|
|  | 2570 | <title xml:id='sessions.title'>Sessions</title> | 
|---|
| [6029a6] | 2571 |  | 
|---|
|  | 2572 | <para>A session refers to the queue of actions you have executed. | 
|---|
|  | 2573 | Together with the initial configuration (and all files required for | 
|---|
|  | 2574 | actions in the queue) this might be seen as a clever way of storing | 
|---|
|  | 2575 | the state of a molecular system. When proceeding in a try&error | 
|---|
|  | 2576 | fashion to construct a certain system, it is a good idea, to store the | 
|---|
|  | 2577 | session at the point where your attempts start to deviate from one | 
|---|
|  | 2578 | another.</para> | 
|---|
|  | 2579 |  | 
|---|
| [9bce96] | 2580 | <section xml:id='sessions.store-session'> | 
|---|
|  | 2581 | <title xml:id='sessions.store-session.title'>Storing a session | 
|---|
|  | 2582 | </title> | 
|---|
| [6029a6] | 2583 |  | 
|---|
| [f73e06] | 2584 | <para>Storing sessions is simple,</para> | 
|---|
| [6029a6] | 2585 |  | 
|---|
| [f73e06] | 2586 | <programlisting> | 
|---|
|  | 2587 | ... --store-session "session.py" \ | 
|---|
|  | 2588 | --session-type python | 
|---|
|  | 2589 | </programlisting> | 
|---|
|  | 2590 |  | 
|---|
|  | 2591 | <para>Here, the session type is given as python (the other option is | 
|---|
|  | 2592 | cli for in the manner of the command-line interface) and the written | 
|---|
|  | 2593 | python script <filename>session.py</filename> can even be used with | 
|---|
|  | 2594 | the python interface described below, i.e. it is a full python script | 
|---|
|  | 2595 | (that however requires the so-called pyMoleCuilder module).</para> | 
|---|
|  | 2596 | </section> | 
|---|
|  | 2597 |  | 
|---|
| [9bce96] | 2598 | <section xml:id='sessions.load-session'> | 
|---|
|  | 2599 | <title xml:id='sessions.load-session.title'>Loading a session</title> | 
|---|
| [f73e06] | 2600 |  | 
|---|
|  | 2601 | <para>Loading a session only works for python scripts. This actually | 
|---|
|  | 2602 | blurs the line between the command-line interface and the python | 
|---|
|  | 2603 | interface a bit. But even more, MoleCuilder automatically executes a | 
|---|
|  | 2604 | script called <filename>molecuilder.py</filename> if such a file is | 
|---|
|  | 2605 | contained in the current directory.</para> | 
|---|
| [6029a6] | 2606 |  | 
|---|
| [f73e06] | 2607 | <programlisting>... --load-session "session.py"</programlisting> | 
|---|
|  | 2608 |  | 
|---|
|  | 2609 | <para>This will execute every action with its options contained in the | 
|---|
|  | 2610 | script <filename>session.py</filename>.</para> | 
|---|
|  | 2611 | </section> | 
|---|
| [6029a6] | 2612 | </section> | 
|---|
|  | 2613 |  | 
|---|
| [9bce96] | 2614 | <section xml:id='various-specific'> | 
|---|
|  | 2615 | <title xml:id='various-specific.title'>Various specific commands | 
|---|
|  | 2616 | </title> | 
|---|
| [f73e06] | 2617 |  | 
|---|
|  | 2618 | <para>In this (final) section of the action description we list a number | 
|---|
|  | 2619 | Actions that are very specific to some purposes (or other programs). | 
|---|
|  | 2620 | </para> | 
|---|
|  | 2621 |  | 
|---|
| [9bce96] | 2622 | <section xml:id='various-specific.save-selected-atoms-as-exttypes'> | 
|---|
|  | 2623 | <title xml:id='various-specific.save-selected-atoms-as-exttypes.title'> | 
|---|
|  | 2624 | Saving exttypes of a set of atoms</title> | 
|---|
| [f73e06] | 2625 |  | 
|---|
|  | 2626 | <para>This saves the atomic ids of all currently selected atoms in a | 
|---|
| [9bce96] | 2627 | <link xlink:href="http://www.tremolo-x.com/"><productname>TREMOLO | 
|---|
|  | 2628 | </productname></link> exttypes file with the given name.</para> | 
|---|
| [f73e06] | 2629 |  | 
|---|
|  | 2630 | <programlisting> | 
|---|
|  | 2631 | ... --save-selected-atoms-as-exttypes \ | 
|---|
|  | 2632 | --filename test.exttypes </programlisting> | 
|---|
|  | 2633 | </section> | 
|---|
|  | 2634 |  | 
|---|
| [9bce96] | 2635 | <section xml:id='various-specific.set-parser-parameters'> | 
|---|
|  | 2636 | <title xml:id='various-specific.set-parser-parameters.title'>Setting | 
|---|
|  | 2637 | parser specific parameters</title> | 
|---|
| [f73e06] | 2638 |  | 
|---|
|  | 2639 | <para>You can also tweak the parameters stored in this file easily. | 
|---|
|  | 2640 | For example, <productname>MPQC</productname> stores various | 
|---|
|  | 2641 | parameters modifying the specific ab-initio calculation performed. | 
|---|
|  | 2642 | For <link xlink:href="http://www.mpqc.org/"><productname>MPQC | 
|---|
|  | 2643 | </productname></link> and | 
|---|
|  | 2644 | <link xlink:href="http://www.psicode.org/"><productname>Psi4 | 
|---|
|  | 2645 | </productname></link> this can be modified as follows.</para> | 
|---|
|  | 2646 |  | 
|---|
|  | 2647 | <programlisting> | 
|---|
|  | 2648 | ... --set-parser-parameters mpqc \ | 
|---|
|  | 2649 | --parser-parameters "theory=CLHF;basis=6-31*G;" | 
|---|
|  | 2650 | </programlisting> | 
|---|
|  | 2651 |  | 
|---|
|  | 2652 | <para>This sets the ab-initio theory to closed-shell Hartree-Fock | 
|---|
|  | 2653 | and the basis set to 6-31*G. Please check the | 
|---|
|  | 2654 | <productname>MPQC</productname> manual on specific | 
|---|
|  | 2655 | parameters.</para> | 
|---|
|  | 2656 | </section> | 
|---|
|  | 2657 |  | 
|---|
| [9bce96] | 2658 | <section xml:id='various-specific.set-tremolo-atomdata'> | 
|---|
|  | 2659 | <title xml:id='various-specific.set-tremolo-atomdata.title'>Tremolo | 
|---|
|  | 2660 | specific options and potential files</title> | 
|---|
| [6029a6] | 2661 |  | 
|---|
| [f73e06] | 2662 | <para><productname>TREMOLO</productname>'s configuration files start | 
|---|
|  | 2663 | with a specific line telling the amount of information stored in the | 
|---|
|  | 2664 | file. This file can be modified, e.g. to enforce storing of | 
|---|
|  | 2665 | velocities and forces as well as the atoms positions and | 
|---|
|  | 2666 | element.</para> | 
|---|
|  | 2667 |  | 
|---|
|  | 2668 | <programlisting> | 
|---|
|  | 2669 | ... --set-tremolo-atomdata "ATOM id element u=3 v=3 F=3" \ | 
|---|
|  | 2670 | --reset 1 | 
|---|
|  | 2671 | </programlisting> | 
|---|
|  | 2672 |  | 
|---|
|  | 2673 | <para>This will not append but reset the old line and fill it with | 
|---|
|  | 2674 | the given string.</para> | 
|---|
| [6029a6] | 2675 |  | 
|---|
| [f73e06] | 2676 | <para>One specific action is required when loading certain | 
|---|
|  | 2677 | <productname>TREMOLO</productname> configuration files. These | 
|---|
|  | 2678 | contain element notations that refer to parameterized names used in | 
|---|
|  | 2679 | empirical potentials and molecular dynamics simulations and not the | 
|---|
|  | 2680 | usual chemical symbols, such as H or O. We may load an auxiliary | 
|---|
|  | 2681 | file that gives the required conversion from OH1 to H, which is the | 
|---|
|  | 2682 | so-called potential file.</para> | 
|---|
| [6029a6] | 2683 |  | 
|---|
| [f73e06] | 2684 | <programlisting>... --parse-tremolo-potentials water.potentials</programlisting> | 
|---|
|  | 2685 |  | 
|---|
|  | 2686 | <para>This parses the lookup table from the file | 
|---|
|  | 2687 | <filename>water.potentials</filename> and it can be used in | 
|---|
|  | 2688 | following load actions.</para> | 
|---|
|  | 2689 | </section> | 
|---|
| [6029a6] | 2690 | </section> | 
|---|
|  | 2691 | </section> | 
|---|
|  | 2692 |  | 
|---|
| [9bce96] | 2693 | <section xml:id='textmenu-interface'> | 
|---|
|  | 2694 | <title xml:id='textmenu-interface.title'>Text menu</title> | 
|---|
| [6029a6] | 2695 |  | 
|---|
|  | 2696 | <para>We now discuss how to use the text menu interface.</para> | 
|---|
|  | 2697 |  | 
|---|
|  | 2698 | <para>The text menu is very much the interface counterpart to the | 
|---|
|  | 2699 | command-line interface. Both work in a terminal session.</para> | 
|---|
|  | 2700 |  | 
|---|
|  | 2701 | <para>In the text menu, actions can be selected from hierarchical lists. | 
|---|
|  | 2702 | Note that the menus for the graphical interface are organized in the | 
|---|
|  | 2703 | exactly same way. After an action has been chosen, the option values | 
|---|
|  | 2704 | have to be entered one after the other. After the last option value has | 
|---|
|  | 2705 | been given, the action is executed and the result printed to the | 
|---|
|  | 2706 | screen.</para> | 
|---|
|  | 2707 |  | 
|---|
|  | 2708 | <para>With regards to the other functionality, it is very much the same | 
|---|
|  | 2709 | as the command-line interface above.</para> | 
|---|
|  | 2710 | </section> | 
|---|
|  | 2711 |  | 
|---|
| [9bce96] | 2712 | <section xml:id='graphical-user-interface'> | 
|---|
|  | 2713 | <title xml:id='graphical-user-interface.title'>Graphical user interface | 
|---|
|  | 2714 | </title> | 
|---|
| [6029a6] | 2715 |  | 
|---|
|  | 2716 | <para>The main point of the GUI is that it renders the atoms and | 
|---|
|  | 2717 | molecules visually. These are represented by the common | 
|---|
|  | 2718 | stick-and-ball-model. Single or multiple atoms and molecules can easily | 
|---|
|  | 2719 | be accessed, activated and manipulated via tables. Changes made in the | 
|---|
|  | 2720 | tables cause immediate update of the visual representation. Under the | 
|---|
|  | 2721 | hood each of these manipulations is nothing but the call to an action, | 
|---|
|  | 2722 | hence is fully undo- and redoable.</para> | 
|---|
|  | 2723 |  | 
|---|
|  | 2724 | <para>This is mostly helpful to design more advanced structures that are | 
|---|
|  | 2725 | conceptually difficult to imagine without visual aid. At the end, a | 
|---|
|  | 2726 | session may be stored and this script can then be used to construct | 
|---|
|  | 2727 | various derived or slightly modified structures.</para> | 
|---|
|  | 2728 |  | 
|---|
| [9bce96] | 2729 | <section xml:id='graphical-user-interface.basic-view'> | 
|---|
|  | 2730 | <title xml:id='graphical-user-interface.basic-view.title'>Basic view | 
|---|
|  | 2731 | </title> | 
|---|
| [6029a6] | 2732 |  | 
|---|
|  | 2733 | <para>Let us first give an impression of the basic view of the gui | 
|---|
|  | 2734 | after a molecule has been loaded.</para> | 
|---|
|  | 2735 |  | 
|---|
|  | 2736 | <figure> | 
|---|
|  | 2737 | <title>Screenshot of the basic view of the GUI after loading a file | 
|---|
|  | 2738 | with eight water molecules.</title> | 
|---|
|  | 2739 |  | 
|---|
|  | 2740 | <mediaobject> | 
|---|
|  | 2741 | <imageobject> | 
|---|
|  | 2742 | <imagedata entityref="example_basic_view" scalefit="1" width="100%"/> | 
|---|
|  | 2743 | </imageobject> | 
|---|
|  | 2744 | </mediaobject> | 
|---|
|  | 2745 | </figure> | 
|---|
|  | 2746 |  | 
|---|
| [9bce96] | 2747 | <section xml:id='graphical-user-interface.3d-view'> | 
|---|
|  | 2748 | <title xml:id='graphical-user-interface.3d-view.title'>3D view | 
|---|
|  | 2749 | </title> | 
|---|
| [6029a6] | 2750 |  | 
|---|
|  | 2751 | <para>In the above figure, you see the stick-and-ball representation | 
|---|
|  | 2752 | of the water molecules, the dreibein giving the positive axis | 
|---|
|  | 2753 | direction and the cuboidal domain on a black background.</para> | 
|---|
|  | 2754 | </section> | 
|---|
|  | 2755 |  | 
|---|
| [9bce96] | 2756 | <section xml:id='graphical-user-interface.information-tabs'> | 
|---|
|  | 2757 | <title xml:id='graphical-user-interface.information-tabs.title'> | 
|---|
|  | 2758 | Information Tabs</title> | 
|---|
| [6029a6] | 2759 |  | 
|---|
|  | 2760 | <para>Beneath this 3D view that you can rotate at will your mouse | 
|---|
|  | 2761 | and zoom in and out with your scroll wheel, you find to the right a | 
|---|
|  | 2762 | part containing two tabs named Atom and Molecule. Look at where the | 
|---|
|  | 2763 | mouse pointer is. It has colored the atom underneath in cyan | 
|---|
|  | 2764 | (although it's also an oxygen atom and should bne coloured in rose | 
|---|
|  | 2765 | as the rest). You can inspect its properties in the tab Atom: Name, | 
|---|
|  | 2766 | element, mass, charge, position and number of bonds. If you switch | 
|---|
|  | 2767 | to the Molecule tab, you would see the properties of the water | 
|---|
|  | 2768 | molecule this specific atom belongs to.</para> | 
|---|
|  | 2769 | </section> | 
|---|
|  | 2770 |  | 
|---|
| [9bce96] | 2771 | <section xml:id='graphical-user-interface.shape'> | 
|---|
|  | 2772 | <title xml:id='graphical-user-interface.shape.title'>Shape section | 
|---|
|  | 2773 | </title> | 
|---|
| [6029a6] | 2774 |  | 
|---|
|  | 2775 | <para>Beneath these information tabs you find the shape sections. | 
|---|
|  | 2776 | There you find a list of all currently created shapes and you can | 
|---|
|  | 2777 | manipulate them via the buttons beneath this list.</para> | 
|---|
|  | 2778 | </section> | 
|---|
|  | 2779 |  | 
|---|
| [9bce96] | 2780 | <section xml:id='graphical-user-interface.timeline'> | 
|---|
|  | 2781 | <title xml:id='graphical-user-interface.timeline.title'>Timeline | 
|---|
|  | 2782 | </title> | 
|---|
| [6029a6] | 2783 |  | 
|---|
|  | 2784 | <para>Directly below the 3D view there is a long slider. If a loaded | 
|---|
|  | 2785 | file has multiple time step entries, this slider allows you to | 
|---|
|  | 2786 | smoothly select one time frame after another. Sliding it with the | 
|---|
|  | 2787 | mouse from left to right will reveal the animation that is hidden | 
|---|
|  | 2788 | behind the distinct snapshots stored in the configuration | 
|---|
|  | 2789 | file.</para> | 
|---|
|  | 2790 | </section> | 
|---|
|  | 2791 |  | 
|---|
| [9bce96] | 2792 | <section xml:id='graphical-user-interface.tables'> | 
|---|
|  | 2793 | <title xml:id='graphical-user-interface.tables.title'>Selection | 
|---|
|  | 2794 | tables</title> | 
|---|
| [6029a6] | 2795 |  | 
|---|
|  | 2796 | <para>Underneath the time line there is another place for | 
|---|
|  | 2797 | tabs.</para> | 
|---|
|  | 2798 |  | 
|---|
|  | 2799 | <para>The first is on molecules, listing all present molecules of | 
|---|
|  | 2800 | the molecular system in a list view. If you click on a specific | 
|---|
|  | 2801 | molecule, the one will get selected or unselected depending on its | 
|---|
|  | 2802 | current selection state (see below for details on this with respect | 
|---|
|  | 2803 | to the GUI).</para> | 
|---|
|  | 2804 |  | 
|---|
|  | 2805 | <para>The next tab enumerates all elements known to MoleCuilder | 
|---|
|  | 2806 | where the ones are greyed out that are not present in the molecular | 
|---|
|  | 2807 | system. Clicking on a present element will select all atoms of this | 
|---|
|  | 2808 | specific element. A subsequent click unselects again.</para> | 
|---|
|  | 2809 |  | 
|---|
|  | 2810 | <para>Subsequent follow tabs on enumerating the fragments and their | 
|---|
|  | 2811 | fragment energies if calculated and the homologies along with | 
|---|
|  | 2812 | graphical depiction (via QWT) if present.</para> | 
|---|
|  | 2813 | </section> | 
|---|
|  | 2814 | </section> | 
|---|
|  | 2815 |  | 
|---|
| [9bce96] | 2816 | <section xml:id='graphical-user-interface.selections'> | 
|---|
|  | 2817 | <title xml:id='graphical-user-interface.selections.title'>Selections | 
|---|
|  | 2818 | </title> | 
|---|
| [6029a6] | 2819 |  | 
|---|
|  | 2820 | <para>Selections work generally always by selecting the respective | 
|---|
|  | 2821 | action from the pull-down menu.</para> | 
|---|
|  | 2822 |  | 
|---|
|  | 2823 | <para>However, it may also be accessed directly. The row of icons | 
|---|
|  | 2824 | above the 3D view has two icons depicting the selection of individual | 
|---|
|  | 2825 | atoms or molecules. If either of them is selected, clicking with the | 
|---|
|  | 2826 | left mouse button on an atom will either (un)select the atom or its | 
|---|
|  | 2827 | associated molecule. Multiple atoms can be selected in this | 
|---|
|  | 2828 | manner.</para> | 
|---|
|  | 2829 |  | 
|---|
|  | 2830 | <para>Also the selection tabs may be used by clicking on the name of a | 
|---|
|  | 2831 | molecule as stated above or at an element.</para> | 
|---|
|  | 2832 |  | 
|---|
|  | 2833 | <para>Similarly, if shapes are present in the shape section, clicking | 
|---|
|  | 2834 | them with select them and also cause a translucent visualization to | 
|---|
|  | 2835 | appear in the 3D view. Note that this visualization is quite costly | 
|---|
|  | 2836 | right now and not suited to complex shapes.</para> | 
|---|
|  | 2837 | </section> | 
|---|
|  | 2838 |  | 
|---|
| [9bce96] | 2839 | <section xml:id='graphical-user-interface.dialogs'> | 
|---|
|  | 2840 | <title xml:id='graphical-user-interface.dialogs.title'>Dialogs</title> | 
|---|
| [6029a6] | 2841 |  | 
|---|
|  | 2842 | <para>Most essential, however, to the GUI are the dialogs. Each action | 
|---|
|  | 2843 | calls forth such a dialog even if no options are required (the | 
|---|
|  | 2844 | execution of the action has at least to be confirmed). Each dialog | 
|---|
|  | 2845 | consisting of queries for a particular option value. As each option | 
|---|
|  | 2846 | value has a specific type, we briefly go into the details of how these | 
|---|
|  | 2847 | queries look like.</para> | 
|---|
|  | 2848 |  | 
|---|
|  | 2849 | <note> | 
|---|
|  | 2850 | <para>Each dialog's Ok is greyed out until all entered option values | 
|---|
|  | 2851 | are valid.</para> | 
|---|
|  | 2852 | </note> | 
|---|
|  | 2853 |  | 
|---|
| [9bce96] | 2854 | <section xml:id='graphical-user-interface.dialogs.domain'> | 
|---|
|  | 2855 | <title xml:id='graphical-user-interface.dialogs.domain.title'>Domain | 
|---|
|  | 2856 | query</title> | 
|---|
| [6029a6] | 2857 |  | 
|---|
|  | 2858 | <figure> | 
|---|
|  | 2859 | <title>Screenshot of a dialog showing a domain query</title> | 
|---|
|  | 2860 |  | 
|---|
|  | 2861 | <mediaobject> | 
|---|
|  | 2862 | <imageobject> | 
|---|
|  | 2863 | <imagedata entityref="dialog_box" scalefit="1" width="100%"/> | 
|---|
|  | 2864 | </imageobject> | 
|---|
|  | 2865 | </mediaobject> | 
|---|
|  | 2866 |  | 
|---|
|  | 2867 | <para>In the domain query a 3x3 symmetric matrix has to be | 
|---|
|  | 2868 | entered. In the above screenshots you notice that the only | 
|---|
|  | 2869 | non-zero entries are on the main diagonal. Here, we have simply | 
|---|
|  | 2870 | specified a cube of edge length 8. The ok button will be greyed | 
|---|
|  | 2871 | out if the matrix is either singular or not symmetric.</para> | 
|---|
|  | 2872 | </figure> | 
|---|
|  | 2873 | </section> | 
|---|
|  | 2874 |  | 
|---|
| [9bce96] | 2875 | <section xml:id='graphical-user-interface.dialogs.element'> | 
|---|
|  | 2876 | <title xml:id='graphical-user-interface.dialogs.element.title'> | 
|---|
|  | 2877 | Element query</title> | 
|---|
| [6029a6] | 2878 |  | 
|---|
|  | 2879 | <figure> | 
|---|
|  | 2880 | <title>Screenshot the add atom action containing an element | 
|---|
|  | 2881 | query</title> | 
|---|
|  | 2882 |  | 
|---|
|  | 2883 | <mediaobject> | 
|---|
|  | 2884 | <imageobject> | 
|---|
|  | 2885 | <imagedata entityref="dialog_add-atom_tooltip" scalefit="1" width="100%"/> | 
|---|
|  | 2886 | </imageobject> | 
|---|
|  | 2887 | </mediaobject> | 
|---|
|  | 2888 |  | 
|---|
|  | 2889 | <para>Elements are picked from a pull-down box where all known | 
|---|
|  | 2890 | elements are listed.</para> | 
|---|
|  | 2891 |  | 
|---|
|  | 2892 | <para>In this dialog you also notice that a tooltip is given, | 
|---|
|  | 2893 | briefly explaining what the action does.</para> | 
|---|
|  | 2894 | </figure> | 
|---|
|  | 2895 | </section> | 
|---|
|  | 2896 |  | 
|---|
| [9bce96] | 2897 | <section xml:id='graphical-user-interface.dialogs.action'> | 
|---|
|  | 2898 | <title xml:id='graphical-user-interface.dialogs.action.title'> | 
|---|
|  | 2899 | Complex query</title> | 
|---|
| [6029a6] | 2900 |  | 
|---|
|  | 2901 | <figure> | 
|---|
|  | 2902 | <title>Screenshot of a complex dialog consisting of multiple | 
|---|
|  | 2903 | queries</title> | 
|---|
|  | 2904 |  | 
|---|
|  | 2905 | <mediaobject> | 
|---|
|  | 2906 | <imageobject> | 
|---|
|  | 2907 | <imagedata entityref="dialog_complex" scalefit="1" width="100%"/> | 
|---|
|  | 2908 | </imageobject> | 
|---|
|  | 2909 | </mediaobject> | 
|---|
|  | 2910 |  | 
|---|
|  | 2911 | <para>Here we show a more complex dialog. It queries for strings, | 
|---|
|  | 2912 | for integer values (see the increase/decrease arrows), for | 
|---|
|  | 2913 | booleans and for files (the "choose" buttons opens a file | 
|---|
|  | 2914 | dialog).</para> | 
|---|
|  | 2915 | </figure> | 
|---|
|  | 2916 | </section> | 
|---|
|  | 2917 |  | 
|---|
| [9bce96] | 2918 | <section xml:id='graphical-user-interface.dialogs.exit'> | 
|---|
|  | 2919 | <title xml:id='graphical-user-interface.dialogs.exit.title'>Exit | 
|---|
|  | 2920 | query</title> | 
|---|
| [6029a6] | 2921 |  | 
|---|
|  | 2922 | <figure> | 
|---|
|  | 2923 | <title>Screenshort showing the exit dialog</title> | 
|---|
|  | 2924 |  | 
|---|
|  | 2925 | <mediaobject> | 
|---|
|  | 2926 | <imageobject> | 
|---|
|  | 2927 | <imagedata entityref="dialog_exit" scalefit="1" width="100%"/> | 
|---|
|  | 2928 | </imageobject> | 
|---|
|  | 2929 | </mediaobject> | 
|---|
|  | 2930 |  | 
|---|
|  | 2931 | <para>Finally, we show the dialog that will pop up when exiting | 
|---|
|  | 2932 | the graphical interface. It will ask whether it should store the | 
|---|
|  | 2933 | current state of the system in the input file or not. You may | 
|---|
|  | 2934 | cancel the exit, close without saving or save the current | 
|---|
|  | 2935 | state.</para> | 
|---|
|  | 2936 | </figure> | 
|---|
|  | 2937 | </section> | 
|---|
|  | 2938 | </section> | 
|---|
|  | 2939 | </section> | 
|---|
|  | 2940 |  | 
|---|
| [9bce96] | 2941 | <section xml:id='python-interface'> | 
|---|
|  | 2942 | <title xml:id='python-interface.title'>Python interface</title> | 
|---|
| [6029a6] | 2943 |  | 
|---|
|  | 2944 | <para>Last but not least we elaborate on the python interface. We have | 
|---|
|  | 2945 | already discusses this interface to some extent. The current session, | 
|---|
|  | 2946 | i.e. the queue of actions you have executed, can be stored as a python | 
|---|
|  | 2947 | script and subsequently executed independently of the user interface it | 
|---|
|  | 2948 | was created with. More general, MoleCuilder can execute arbitrary python | 
|---|
|  | 2949 | scripts where prior to its execution a specific module is loaded by | 
|---|
|  | 2950 | default enabling access to MoleCuilder's actions from inside the | 
|---|
|  | 2951 | script.</para> | 
|---|
|  | 2952 |  | 
|---|
|  | 2953 | <para>MoleCuilder's python module is called pyMoleCuilder. it is | 
|---|
|  | 2954 | essentially a library that can be imported into python just as any other | 
|---|
|  | 2955 | module. Let us assume you have started the python interpreter and you | 
|---|
|  | 2956 | have added the destination of the <filename>pyMoleCuilder</filename> | 
|---|
|  | 2957 | library to the <varname>PYTHONPATH</varname> variable.</para> | 
|---|
|  | 2958 |  | 
|---|
|  | 2959 | <programlisting>import pyMoleCuilder as mol</programlisting> | 
|---|
|  | 2960 |  | 
|---|
|  | 2961 | <para>Subsequently, you can access the help via</para> | 
|---|
|  | 2962 |  | 
|---|
|  | 2963 | <programlisting>help(mol)</programlisting> | 
|---|
|  | 2964 |  | 
|---|
|  | 2965 | <para>This will list all of MoleCuilder's actions with their function | 
|---|
|  | 2966 | signatures within python as contained in the module pyMoleCuilder named | 
|---|
|  | 2967 | as mol in the scope of the currently running interpreter. Note that the | 
|---|
|  | 2968 | function names are not the names you know from the command-line | 
|---|
|  | 2969 | interface, they might be called | 
|---|
|  | 2970 | <computeroutput>WorldChangeBox(...)</computeroutput> or alike.</para> | 
|---|
|  | 2971 |  | 
|---|
|  | 2972 | <para>Let's try it out.</para> | 
|---|
|  | 2973 |  | 
|---|
|  | 2974 | <programlisting>print mol.CommandVersion()</programlisting> | 
|---|
|  | 2975 |  | 
|---|
|  | 2976 | <para>This will state the current version of the library.</para> | 
|---|
|  | 2977 |  | 
|---|
|  | 2978 | <para>Go ahead and try out other commands. Refer to the documentation | 
|---|
|  | 2979 | under the command-line interface and look up the function name via | 
|---|
|  | 2980 | help.</para> | 
|---|
|  | 2981 | </section> | 
|---|
|  | 2982 | </chapter> | 
|---|
|  | 2983 |  | 
|---|
|  | 2984 | <chapter> | 
|---|
|  | 2985 | <title>Conclusions</title> | 
|---|
|  | 2986 |  | 
|---|
|  | 2987 | <para>This ends this user guide.</para> | 
|---|
|  | 2988 |  | 
|---|
|  | 2989 | <para>We have given you a brief introduction to the aim of the program and | 
|---|
|  | 2990 | how each of the four interfaces are to be used. The rest is up to | 
|---|
|  | 2991 | you.</para> | 
|---|
|  | 2992 |  | 
|---|
|  | 2993 | <para>Tutorials and more information is available online, see <link | 
|---|
| [f73e06] | 2994 | xlink:href="http://www.molecuilder.com/">MoleCuilder's website</link>. | 
|---|
|  | 2995 | </para> | 
|---|
| [6029a6] | 2996 |  | 
|---|
|  | 2997 | <para>Be aware that in general knowing how the code works allows you to | 
|---|
|  | 2998 | understand what's going wrong if something's going wrong.</para> | 
|---|
|  | 2999 |  | 
|---|
|  | 3000 | <section> | 
|---|
|  | 3001 | <title>Thanks</title> | 
|---|
|  | 3002 |  | 
|---|
|  | 3003 | <para>Huge thanks go out to Saskia Metzler who was patient enough to let | 
|---|
|  | 3004 | me sit next to her while riding ten hours in a bus to Berlin.</para> | 
|---|
|  | 3005 | </section> | 
|---|
|  | 3006 | </chapter> | 
|---|
|  | 3007 | </book> | 
|---|