source: doc/userguide/userguide.xml@ 88afc9

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 88afc9 was 88afc9, checked in by Frederik Heber <heber@…>, 10 years ago

Enhanced add-bonds and remove-bonds to multiply selected pairs of atoms.

  • renamed add/remove-bond -> add/remove-bond(s) to emphasize this.
  • added regression test on three selected atoms.
  • modified userguide entry for both actions.
  • Property mode set to 100644
File size: 125.7 KB
Line 
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
46 <section xml:id='whatis'>
47 <title xml:id='whatis.title'>What is MoleCuilder?</title>
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&amp;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
71 <section xml:id='installation'>
72 <title xml:id='installation.title'>Installation requirements</title>
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
79 <section xml:id='license'>
80 <title xml:id='license.title'>License</title>
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
87 <section xml:id='disclaimer'>
88 <title xml:id='disclaimer.title'>Disclaimer</title>
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
103 <section xml:id='feedback'>
104 <title xml:id='feedback.title'>Feedback</title>
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
114 <section xml:id='notation'>
115 <title xml:id='notation.title'>Notation</title>
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
141 <section xml:id='completeness'>
142 <title xml:id='completeness.title'>Completeness</title>
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
164 <section xml:id='concepts'>
165 <title xml:id='concepts.title'>Concepts</title>
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
216 <section xml:id='interfaces'>
217 <title xml:id='interfaces.title'>Interfaces</title>
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&amp;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
270 <section xml:id='fileformats'>
271 <title xml:id='fileformats.title'>Known File formats</title>
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>
284 <para><link xlink:href="http://www.mpqc.org/"><productname>MPQC
285 </productname></link>, <filename>.in</filename></para>
286 </listitem>
287
288 <listitem>
289 <para><link xlink:href="http://www.pdb.org/">PDB</link>, <filename>
290 .pdb</filename></para>
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>
300 <para><link xlink:href="http://www.psicode.org/"><productname>PSI4
301 </productname></link>, <filename>.psi</filename></para>
302 </listitem>
303
304 <listitem>
305 <para><link xlink:href="http://www.tremolo-x.org/"><productname>
306 TREMOLO</productname></link>, <filename>.data</filename></para>
307 </listitem>
308
309 <listitem>
310 <para>XML, <filename>.xml</filename> (XML as read by
311 <link xlink:href="http://www.scafacos.org/">ScaFaCoS</link>
312 project)</para>
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
348 <section xml:id='command-line-interface'>
349 <title xml:id='command-line-interface.title'>Command-line interface</title>
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
394 <section xml:id='preliminaries'>
395 <title xml:id='preliminaries.title'>Preliminaries</title>
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
442 <section xml:id='fileparsers'>
443 <title xml:id='fileparsers.title'>File parsers</title>
444
445 <para>We have already given a list of all known file formats, see
446 <link linkend="fileformats">File formats</link>. Next, we explain how these
447 file formats are picked and manipulated.</para>
448
449 <section xml:id='fileparsers.parsing'>
450 <title xml:id='fileparsers.parsing.title'>Parsing files</title>
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
475 <section xml:id='fileparsers.set-output'>
476 <title xml:id='fileparsers.set-output.tile'>Adding output file
477 formats</title>
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
490 <section xml:id='fileparsers.output-as'>
491 <title xml:id='fileparsers.output-as.title'>Output the current
492 molecular system</title>
493
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>
497
498 <programlisting>... --output-as world.xyz</programlisting>
499 </section>
500
501 <section xml:id='fileparsers.save-selected-molecules'>
502 <title xml:id='fileparsers.save-selected-molecules.title'>Output
503 the current molecular system</title>
504
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>
509
510 <programlisting>... --save-selected-molecules waters.pdb
511 </programlisting>
512 </section>
513
514 <section xml:id='fileparsers.bond-file'>
515 <title xml:id='fileparsers.bond-file.title'>Load extra bond
516 information</title>
517
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>
520
521 <programlisting>... --bond-file water.dbond
522 </programlisting>
523 </section>
524 </section>
525
526 <section xml:id='selections'>
527 <title xml:id='selections.title'>Selections and unselections</title>
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>
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
579 <listitem>
580 <para>By Element (all hydrogen atoms, all sulphur atoms,
581 ...)</para>
582 <programlisting>
583 ... --select-atom-by-element 1
584 </programlisting>
585 <programlisting>
586 ... --unselect-atom-by-element 1
587 </programlisting>
588 </listitem>
589
590 <listitem>
591 <para>By Id (atom with id 76)</para>
592 <programlisting>
593 ... --select-atom-by-id 76
594 </programlisting>
595 <programlisting>
596 ... --unselect-atom-by-id 76
597 </programlisting>
598 </listitem>
599
600 <listitem>
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>
609 </listitem>
610
611 <listitem>
612 <para>By Shape (specific region of the domain)</para>
613 <programlisting>
614 ... --select-atom-inside-volume
615 </programlisting>
616 <programlisting>
617 ... --unselect-atoms-inside-volume
618 </programlisting>
619 </listitem>
620
621 <listitem>
622 <para>By Molecule (all atoms belonging to currently selected
623 molecules)</para>
624 <programlisting>
625 ... --select-molecules-atoms
626 </programlisting>
627 <programlisting>
628 ... --unselect-molecules-atoms
629 </programlisting>
630 </listitem>
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>
642 </itemizedlist>
643 </listitem>
644
645 <listitem>
646 <para>Molecules</para>
647
648 <itemizedlist>
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
673 <listitem>
674 <para>By Id (molecule with id 4)</para>
675 <programlisting>
676 ... --select-molecule-by-id 2
677 </programlisting>
678 <programlisting>
679 ... --unselect-molecule-by-id 2
680 </programlisting>
681 </listitem>
682
683 <listitem>
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>
692 </listitem>
693
694 <listitem>
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>
712 </listitem>
713
714 <listitem>
715 <para>By Atom (all molecules for which at least one atom is
716 currently selected)</para>
717 <programlisting>
718 ... --select-atoms-molecules
719 </programlisting>
720 <programlisting>
721 ... --unselect-atoms-molecules
722 </programlisting>
723 </listitem>
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>
735 </itemizedlist>
736 </listitem>
737
738 <listitem>
739 <para>Shapes</para>
740
741 <itemizedlist>
742 <listitem>
743 <para>All</para>
744 <programlisting>
745 ... --select-all-shapes
746 </programlisting>
747 </listitem>
748
749 <listitem>
750 <para>None</para>
751 <programlisting>
752 ... --unselect-all-shapes
753 </programlisting>
754 </listitem>
755
756 <listitem>
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>
764 </listitem>
765 </itemizedlist>
766 </listitem>
767
768 </itemizedlist>
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
780 <section xml:id='shapes'>
781 <title xml:id='shapes.title'>Shapes</title>
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
791 <section xml:id='shapes.create-shape'>
792 <title xml:id='shapes.create-shape.title'>Creating shapes</title>
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
819 <section xml:id='shapes.combine-shapes'>
820 <title xml:id='shapes.combine-shapes.title'>Combining shapes</title>
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
852 <section xml:id='shapes.remove-shape'>
853 <title xml:id='shapes.remove-shape.title'>Removing shapes</title>
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
862 <section xml:id='shapes.manipulation'>
863 <title xml:id='shapes.manipulation.title'>Manipulating shapes</title>
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>
880 ... --rotate-shapes \
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
897 <section xml:id='randomization'>
898 <title xml:id='randomization.title'>Randomization</title>
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
933 <section xml:id='atoms'>
934 <title xml:id='atoms.title'>Manipulate atoms</title>
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
940 <section xml:id='atoms.add-atom'>
941 <title xml:id='atoms.add-atom.title'>Adding atoms</title>
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
955 <section xml:id='atoms.remove-atom'>
956 <title xml:id='atoms.remove-atom.title'>Removing atoms</title>
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
964 <section xml:id='atoms.saturate-atom'>
965 <title xml:id='atoms.saturate-atom.title'>Saturating atoms</title>
966
967 <para>Newly instantiated atoms have no bonds to any other atom. If
968 you want to fill up their valence by a slew of hydrogen atoms
969 residing on a sphere around this atom, use this action.</para>
970
971 <programlisting>
972 ... --saturate-atoms
973 </programlisting>
974
975 <para>A number of hydrogen atoms is added. The number corrresponding
976 to the valence of each selected atom. They are placed in the same
977 distance to this atom and approximately with same distance to their
978 nearest neighbors.</para>
979 </section>
980
981 <section xml:id='atoms.translate-atom'>
982 <title xml:id='atoms.translate-atom.title'>Translating atoms</title>
983
984 <para>In order to translate the current selected subset of atoms you
985 specify a translation vector.</para>
986
987 <programlisting>
988 ... --translate-atoms "-1,0,0" \
989 --periodic 0
990 </programlisting>
991
992 <para>This translate all atoms by "-1" along the x axis and does not
993 mind the boundary conditions, i.e. might shift atoms outside of the
994 domain.</para>
995 </section>
996
997 <section xml:id='atoms.mirror-atoms'>
998 <title xml:id='atoms.mirror-atoms.title'>Mirroring atoms</title>
999
1000 <para>Present (and selected) atoms can be mirrored with respect to
1001 a certain plane. You have to specify the normal vector of the plane
1002 and the offset with respect to the origin as follows</para>
1003
1004 <programlisting>
1005 ... --mirror-atoms "1,0,0" \
1006 --plane-offset 10.1 \
1007 --periodic 0
1008 </programlisting>
1009 </section>
1010
1011 <section xml:id='atoms.translate-to-origin'>
1012 <title xml:id='atoms.translate-to-origin.title'>Translating atoms</title>
1013
1014 <para>The following Action is convenient to place a subset of atoms
1015 at a known position, the origin, and then translate to some other
1016 absolute coordinate. It calculates the average position of the set
1017 of selected atoms and then translates all atoms by the negative of
1018 this center, i.e. the center is afterwards at the origin.</para>
1019
1020 <programlisting>... --translate-to-origin</programlisting>
1021 </section>
1022
1023 <section xml:id='atoms.change-element'>
1024 <title xml:id='atoms.change-element.title'>Changing an atoms element
1025 </title>
1026
1027 <para>You can easily turn lead or silver into gold, by selecting the
1028 silver atom and calling the change element action.</para>
1029
1030 <programlisting>... --change-element Au</programlisting>
1031 </section>
1032 </section>
1033
1034 <section xml:id='bond'>
1035 <title xml:id='bond.title'>Bond-related manipulation</title>
1036
1037 <para>Atoms can also be manipulated with respect to the bonds.
1038 <remark>Note that with bonds we always mean covalent bonds.</remark>
1039 First, we explain how to modify the bond structure itself, then we go
1040 in the details of using the bond information to change bond distance
1041 and angles.</para>
1042
1043 <section xml:id='bond.create-adjacency'>
1044 <title xml:id='bond.create-adjacency.title'>Creating a bond graph
1045 </title>
1046
1047 <para>In case you have loaded a configuration file with no bond
1048 information, e.g. XYZ, it is necessary to create the bond graph.
1049 This is done by a heuristic distance criterion.</para>
1050
1051 <programlisting>... --create-adjacency</programlisting>
1052
1053 <para>This uses by default a criterion based on van-der-Waals radii,
1054 i.e. if we look at two atoms indexed by "a" and "b"</para>
1055
1056 <equation>
1057 <title>V(a) + V(b) - \tau &lt; R_{ab} &lt; V(a) + V(b) +
1058 \tau</title>
1059
1060 <m:math display="block">
1061 <m:mi>where V(.) is the lookup table for the radii for a given
1062 element and \tau is a threshold value, set to 0.4.</m:mi>
1063 </m:math>
1064 </equation>
1065
1066 <para>As a second option, you may load a file containing bond table
1067 information.</para>
1068
1069 <programlisting>... --bond-table table.dat</programlisting>
1070
1071 <para>which would parse a file <filename>table.dat</filename> for a
1072 table giving typical bond distances between elements a and b. These
1073 are used in the above criterion as <inlineequation>
1074 <m:math display="inline">
1075 <m:mi>V(a,b)</m:mi>
1076 </m:math>
1077 </inlineequation> in place of <inlineequation>
1078 <m:math display="inline">
1079 <m:mi>V(a)+V(b)</m:mi>
1080 </m:math>
1081 </inlineequation>.</para>
1082 </section>
1083
1084 <section xml:id='bond.destroy-adjacency'>
1085 <title xml:id='bond.destroy-adjacency.title'>Destroying the bond
1086 graph</title>
1087
1088 <para>The bond graph can be removed completely (and all bonds along
1089 with it).</para>
1090
1091 <programlisting>... --destroy-adjacency</programlisting>
1092 </section>
1093
1094 <section xml:id='bond.correct-bonddegree'>
1095 <title xml:id='bond.correct-bonddegree.title'>Correcting bond
1096 degrees</title>
1097
1098 <para>Typically, after loading an input file bond information, e.g.
1099 a PDB file, the bond graph is complete but we lack the weights. That
1100 is we do not know whether a bond is single, double, triple, ...
1101 This action corrects the bond degree by enforcing charge neutrality
1102 among the connected atoms.
1103 </para>
1104 <para>This action is in fact quadratically scaling in the number of
1105 atoms. Hence, for large systems this may take longer than expected.
1106 </para>
1107
1108 <programlisting>... --correct-bonddegree</programlisting>
1109 </section>
1110
1111 <section xml:id='bond.depth-first-search'>
1112 <title xml:id='bond.depth-first-search.title'>Analysing a bond
1113 graph</title>
1114
1115 <para>You can perform a depth-first search analysis that reveals
1116 cycles and other graph-related information.</para>
1117
1118 <programlisting>... --depth-first-search</programlisting>
1119 </section>
1120
1121 <section xml:id='bond.subgraph-dissection'>
1122 <title xml:id='bond.subgraph-dissection.title'>Dissecting the
1123 molecular system into molecules</title>
1124
1125 <para>The bond graph information can be used to recognize the
1126 molecule within the system. Imagine you have just loaded a PDB file
1127 containing bond information. However, initially all atoms are dumped
1128 into the same molecule. Before you can start manipulating, you need
1129 to dissect the system into individual molecules. Note that this is
1130 just structural information and does not change the state of the
1131 system.</para>
1132
1133 <programlisting>... --subgraph-dissection</programlisting>
1134
1135 <para>This analyses the bond graph and splits the single molecule up
1136 into individual (new) ones that each contain a single connected
1137 subgraph, hence the naming.</para>
1138 </section>
1139
1140 <section xml:id='bond.update-molecules'>
1141 <title xml:id='bond.update-molecules.title'>Updating molecule
1142 structure</title>
1143
1144 <para>When the bond information has changed, new molecules might
1145 have formed, this action updates all the molecules by scanning
1146 the connectedness of the bond grapf of the molecular system.
1147 </para>
1148
1149 <programlisting>... --update-molecules</programlisting>
1150 </section>
1151
1152 <section xml:id='bond.adds-bond'>
1153 <title xml:id='bond.adds-bond.title'>Adding a bond manually</title>
1154
1155 <para>When the automatically created adjacency or bond graph
1156 contains faulty bonds or lacks some, you can add them manually.
1157 </para>
1158
1159 <programlisting>... --add-bonds</programlisting>
1160
1161 <para>If two atoms are selected, the single bond in between, if not
1162 present, is added. If more than two atoms are selected, than the
1163 bond between any pair of these is added.</para>
1164 <note><para>This is especially useful in conjunction with the
1165 fragmentation scheme. If you want to know the contribution from
1166 certain fragments whose subgraph is not connected you can simply
1167 make the associated subset of atoms connected by selecting all
1168 bonds and adding the bonds.</para>
1169 </note>
1170 </section>
1171
1172 <section xml:id='bond.remove-bonds'>
1173 <title xml:id='bond.remove-bonds.title'>Removing a bond manually
1174 </title>
1175
1176 <para>In much the same way as adding a bond, you can also remove a
1177 bond.</para>
1178
1179 <programlisting>... --remove-bonds</programlisting>
1180
1181 <para>Similarly, if more than two atoms are selected, then all bonds
1182 found between any pair of these is removed.</para>
1183 </section>
1184
1185 <section xml:id='bond.save-bonds'>
1186 <title xml:id='bond.save-bonds.title'>Saving bond information
1187 </title>
1188
1189 <para>Bond information can be saved to a file in <link
1190 xlink:href="http://www.molecuilder.com/"><productname>TREMOLO
1191 </productname></link>'s dbond style.</para>
1192
1193 <programlisting>... --save-bonds system.dbonds</programlisting>
1194
1195 <para>Similarly is the following Action which saves the bond
1196 information as a simple list of one atomic id per line and in
1197 the same line, separated by spaces, the ids of all atoms connected
1198 to it.</para>
1199
1200 <programlisting>... --save-adjacency system.adj</programlisting>
1201
1202 </section>
1203
1204 <section xml:id='bond.stretch-bond'>
1205 <title xml:id='bond.stretch-bond.title'>Stretching a bond</title>
1206
1207 <para>Stretching a bond actually refers to translation of the
1208 associated pair of atoms. However, this action will keep the rest of
1209 the molecule to which both atoms belong to invariant as well.</para>
1210
1211 <programlisting>... --stretch-bond 1.2</programlisting>
1212
1213 <para>This scales the original bond distance to the new bond
1214 distance 1.2, shifting the right hand side and the left hand side of
1215 the molecule accordingly.</para>
1216
1217 <warning>
1218 <para>this fails with aromatic rings (but you can always
1219 undo).</para>
1220 </warning>
1221 </section>
1222
1223 <section xml:id='bond.change-bond-angle'>
1224 <title xml:id='bond.change-bond-angle.title'>Changing a bond angle
1225 </title>
1226
1227 <para>In the same way as stretching a bond, you can change the angle
1228 in between two bonds. This works if exactly three atoms are selected
1229 and two pairs are bonded.</para>
1230
1231 <programlisting>... --change-bond-angle 90</programlisting>
1232
1233 <para>This will change the angle from its value to 90 degree by
1234 translating the two outer atoms of this triangle (the atom connected
1235 to both others is the axis of the rotation).</para>
1236 </section>
1237 </section>
1238
1239 <section xml:id='molecule'>
1240 <title xml:id='molecule.title'>Manipulate molecules</title>
1241
1242 <para>Molecules are agglomerations of atoms that are bonded. Hence,
1243 the actions working on molecules differ from those working on atoms.
1244 Joining two molecules can only be accomplished by adding a bond in
1245 between, and in the reverse fashion splitting a molecule by removing
1246 all bonds in between. Actions below mostly deal with copying
1247 molecules. Removing of molecules is done via selecting the molecule's
1248 atoms and removing them, which removes the atoms as well.</para>
1249
1250 <note>
1251 <para>Initially when you load a file via the input action all atoms
1252 are placed in a single molecule despite any present bond
1253 information, see <link linkend="fragmentation">Dissecting the
1254 molecular system into molecules</link></para>
1255 </note>
1256
1257 <section xml:id='molecule.copy'>
1258 <title xml:id='molecule.copy.title'>Copy molecules</title>
1259
1260 <para>A basic operation is to duplicate a molecule. This works on a
1261 single, currently selected molecule. Afterwards, we elaborate on a
1262 more complex manner of copying, filling a specific shape with
1263 molecules.</para>
1264
1265 <programlisting>
1266 ... --copy-molecule \
1267 --position "10,10,10"
1268 </programlisting>
1269
1270 <para>This action copies the selected molecule and inserts it at the
1271 position (10,10,10) in the domain with respect to the molecule's
1272 center. In effect, it copies all the atoms of the original molecule
1273 and adds new bonds in between these copied atoms such that their
1274 bond subgraphs are identical.</para>
1275 </section>
1276
1277 <section xml:id='molecule.change-molname'>
1278 <title xml:id='molecule.change-molname.title'>Change a molecules
1279 name</title>
1280
1281 <para>You can change the name of a molecule which is important for
1282 selection.</para>
1283
1284 <programlisting>... -change-molname "test</programlisting>
1285
1286 <para>This will change the name of the (only) selected molecule to
1287 "test".</para>
1288
1289 <para>Connected with this is the default name an unknown molecule
1290 gets.</para>
1291
1292 <programlisting>... --default-molname test</programlisting>
1293
1294 <para>This will change the default name of a molecule to
1295 "test".</para>
1296
1297 <note>
1298 <para>Note that a molecule loaded from file gets the filename
1299 (without suffix) as its name.</para>
1300 </note>
1301 </section>
1302
1303 <section xml:id='molecule.remove-molecule'>
1304 <title xml:id='molecule.remove-molecule.title'>Remove molecules
1305 </title>
1306
1307 <para>This removes one or multiple selected molecules.</para>
1308
1309 <programlisting>... -remove-molecule</programlisting>
1310
1311 <para>This essentially just removes all of the molecules' atoms
1312 which in turn also causes the removal of the molecule.</para>
1313 </section>
1314
1315 <section xml:id='molecule.translate-molecules'>
1316 <title xml:id='molecule.translate-molecules.title'>Translate molecules
1317 </title>
1318
1319 <para>This translates one or multiple selected molecules by a
1320 specific offset..</para>
1321
1322 <programlisting>... -translate-molecules</programlisting>
1323
1324 <para>This essentially translates all of the molecules' atoms.</para>
1325 </section>
1326
1327 <section xml:id='molecule.rotate-around-self'>
1328 <title xml:id='molecule.rotate-around-self.title'>Rotate around self
1329 </title>
1330
1331 <para>You can rotate a molecule around its own axis.</para>
1332
1333 <programlisting>
1334 ... --rotate-around-self "90" \
1335 --axis "0,0,1"
1336 </programlisting>
1337
1338 <para>This rotates the molecule around the z axis by 90 degrees as
1339 if the origin were at its center of origin.</para>
1340 </section>
1341
1342 <section xml:id='molecule.rotate-around-origin'>
1343 <title xml:id='molecule.rotate-around-origin.title'>Rotate around
1344 origin</title>
1345
1346 <para>In the same manner the molecule can be rotated around an
1347 external origin.</para>
1348
1349 <programlisting>
1350 ... --rotate-around-origin 90 \
1351 --position "0,0,1"\
1352 </programlisting>
1353
1354 <para>This rotates the molecule around an axis from the origin to
1355 the position (0,0,1), i.e. around the z axis, by 90 degrees.</para>
1356 </section>
1357
1358 <section xml:id='molecule.rotate-to-principal-axis-system'>
1359 <title xml:id='molecule.rotate-to-principal-axis-system.title'>
1360 Rotate to principal axis system</title>
1361
1362 <para>The principal axis system is given by an ellipsoid that mostly
1363 matches the molecules shape. The principal axis system can be just
1364 simply determined by</para>
1365
1366 <programlisting>... --principal-axis-system</programlisting>
1367
1368 <para>To rotate the molecule around itself to align with this system
1369 do as follows.</para>
1370
1371 <programlisting>... --rotate-to-principal-axis-system "0,0,1"
1372 </programlisting>
1373
1374 <para>This rotates the molecule in such a manner that the ellipsoids
1375 largest axis is aligned with the z axis. <remark>Note that "0,0,-1"
1376 would align anti-parallel.</remark></para>
1377 </section>
1378
1379 <section xml:id='molecule.verlet-integration'>
1380 <title xml:id='molecule.verlet-integration.title'>Perform verlet
1381 integration</title>
1382
1383 <para>Atoms not only have a position, but each instance also stores
1384 velocity and a force vector. These can be used in a velocity verlet
1385 integration step. Velocity verlet is a often employed time
1386 integration algorithm in molecular dynamics simulations.</para>
1387
1388 <programlisting>
1389 ... --verlet-integration \
1390 --deltat 0.1 \
1391 --keep-fixed-CenterOfMass 0
1392 </programlisting>
1393
1394 <para>This will integrate with a timestep of <inlineequation>
1395 <m:math display="inline">
1396 <m:mi>\Delta_t = 0.1</m:mi>
1397 </m:math>
1398 </inlineequation>and correcting forces and velocities such that
1399 the sum over all atoms is zero.</para>
1400 </section>
1401
1402 <section xml:id='molecule.force-annealing'>
1403 <title xml:id='molecule.force-annealing.title'>Anneal the atomic
1404 forces</title>
1405
1406 <para>This will shift the atoms in a such a way as to decrease (or
1407 anneal) the forces acting upon them.</para>
1408
1409 <para>Forces may either be already present for the set of atoms by
1410 some other way (e.g. from a prior fragmentation calculation) or,
1411 as shown here, from an external file. We anneal the forces for
1412 one step with a certain initial step width of 0.5 atomic time
1413 units and do not create a new timestep for each optimization
1414 step.</para>
1415
1416 <programlisting>
1417 ... --force-annealing \
1418 --forces-file test.forces \
1419 --deltat 0.5 \
1420 --steps 1 \
1421 --output-every-step 0
1422 </programlisting>
1423 </section>
1424
1425 <section xml:id='molecule.linear-interpolation-of-trajectories'>
1426 <title xml:id='molecule.linear-interpolation-of-trajectories.title'>
1427 Linear interpolation between configurations</title>
1428
1429 <para>This is similar to verlet-integration, only that it performs
1430 a linear integration irrespective of the acting atomic forces.
1431 </para>
1432
1433 <para>The following call will produce an interpolation between the
1434 configurations in time step 0 and time step 1 with 98 intermediate
1435 steps, i.e. current step 1 will end up in time step 99. In this
1436 case an idential mapping is used to associated atoms in start and
1437 end configuration.</para>
1438
1439 <programlisting>
1440 ... --linear-interpolation-of-trajectories \
1441 --start-step 0 \
1442 --end-step 1 \
1443 --interpolation-steps 100 \
1444 --id-mapping 1
1445 </programlisting>
1446 </section>
1447 </section>
1448
1449 <section xml:id='domain'>
1450 <title xml:id='domain.title'>Manipulate domain</title>
1451
1452 <para>Here, we elaborate on how to duplicate all the atoms inside the
1453 domain, how the scale the coordinate system, how to center the atoms
1454 with respect to certain points, how to realign them by given
1455 constraints, how to mirror and most importantly how to specify the
1456 domain.</para>
1457
1458 <section xml:id='domain.change-box'>
1459 <title xml:id='domain.change-box.title'>Changing the domain</title>
1460
1461 <para>The domain is specified by a symmetric 3x3 matrix. The
1462 eigenvalues (diagonal entries in case of a diagonal matrix) give the
1463 length of the edges, additional entries specify transformations of
1464 the box such that it becomes a more general parallelepiped.</para>
1465
1466 <programlisting>... change-box "20,0,20,0,0,20"</programlisting>
1467
1468 <para>As the domain matrix is symmetric, six values suffice to fully
1469 specify it. We have to give the six components of the lower diagonal
1470 matrix. Here, we change the box to a cuboid of equal edge length of
1471 20.</para>
1472 </section>
1473
1474 <section xml:id='domain.bound-in-box'>
1475 <title xml:id='domain.bound-in-box.title'>Bound atoms inside box
1476 </title>
1477
1478 <para>The following applies the current boundary conditions to the
1479 atoms. In case of periodic or wrapped boundary conditions the atoms
1480 will be periodically translated to be inside the domain
1481 again.</para>
1482
1483 <programlisting>... --bound-in-box</programlisting>
1484 </section>
1485
1486 <section xml:id='domain.center-in-box'>
1487 <title xml:id='domain.center-in-box.title'>Center atoms inside the
1488 domain</title>
1489
1490 <para>This is a combination of changing the box and bounding the
1491 atoms inside it.</para>
1492
1493 <programlisting>... --center-in-box "20,0,20,0,0,"</programlisting>
1494 </section>
1495
1496 <section xml:id='domain.center-edge'>
1497 <title xml:id='domain.center-edge.title'>Center the atoms at an
1498 edge</title>
1499
1500 <para>MoleCuilder can calculate the minimum box (parallel to the
1501 cardinal axis) all atoms would fit in and translate all atoms in
1502 such a way that the lower, left, front edge of this minimum is at
1503 the origin (0,0,0).</para>
1504
1505 <programlisting>... --center-edge</programlisting>
1506 </section>
1507
1508 <section xml:id='domain.add-empty-boundary'>
1509 <title xml:id='domain.add-empty-boundary.title'>Extending the
1510 boundary by adding an empty boundary</title>
1511
1512 <para>In the same manner as above a minimum box is determined that
1513 is subsequently expanded by a boundary of the given additional
1514 thickness. This applies to either side.</para>
1515
1516 <programlisting>... --add-empty-boundary "5,5,5"</programlisting>
1517
1518 <para>This will enlarge the box in such a way that every atom is at
1519 least by a distance of 5 away from the boundary of the domain (in
1520 the infinity norm).</para>
1521 </section>
1522
1523 <section xml:id='domain.scale-box'>
1524 <title xml:id='domain.scale-box.title'>Scaling the box</title>
1525
1526 <para>You can enlarge the domain by simple scaling factors.</para>
1527
1528 <programlisting>... --scale-box "1,1,2.5"</programlisting>
1529
1530 <para>Here, the domain is stretched in the z direction by a factor
1531 of 2.5.</para>
1532 </section>
1533
1534 <section xml:id='domain.repeat-box'>
1535 <title xml:id='domain.repeat-box.title'>Repeating the box</title>
1536
1537 <para>Under periodic boundary conditions often only the minimal
1538 periodic cell is stored. If need be, multiple images can be easily
1539 added to the current state of the system by repeating the box, i.e.
1540 the box along with all contained atoms is copied and placed
1541 adjacently.</para>
1542
1543 <programlisting>... --repeat-box "1,2,2"</programlisting>
1544
1545 <para>This will create a 2x2 grid of the current domain, replicating
1546 it along the y and z direction along with all atoms. If the domain
1547 contained before a single water molecule, we will now have four of
1548 them.</para>
1549 </section>
1550
1551 <section xml:id='domain.set-boundary-conditions'>
1552 <title xml:id='domain.set-boundary-conditions.title'>Change the
1553 boundary conditions</title>
1554
1555 <para>Various boundary conditions can be applied that affect how
1556 certain Actions work, e.g. translate-atoms. We briefly give a list
1557 of all possible conditions:</para>
1558 <itemizedlist>
1559 <listitem>
1560 <para>Wrap</para>
1561 <para>Coordinates are wrapped to the other side of the domain,
1562 i.e. periodic boundary conditions.</para>
1563 </listitem>
1564 <listitem>
1565 <para>Bounce</para>
1566 <para>Coordinates are bounced back into the domain, i.e. they
1567 are reflected from the domain walls.</para>
1568 </listitem>
1569 <listitem>
1570 <para>Ignore</para>
1571 <para>No boundary conditions apply.</para>
1572 </listitem>
1573 </itemizedlist>
1574
1575 <para>The following will set the boundary conditions to periodic.
1576 </para>
1577
1578 <programlisting>... --set-boundary-conditions "Wrap Wrap Wrap"
1579 </programlisting>
1580 </section>
1581 </section>
1582
1583 <section xml:id='filling'>
1584 <title xml:id='filling.title'>Filling</title>
1585
1586 <para>Filling a specific part of the domain with one type of
1587 molecule, e.g. a water molecule, is the more advanced type of
1588 copying of a molecule (see copy-molecule) and we need several
1589 ingredients.</para>
1590
1591 <para>First, we need to specify the part of the domain. This is done
1592 via a shape. We have already learned how to create and select
1593 shapes. The currently selected shape will serve as the fill-in
1594 region.</para>
1595
1596 <para>Then, they are three types of filling, domain, volume, and
1597 surface. The domain is filled with a regular grid of fill-in points.
1598 A volume and a surface are filled by a set of equidistant points
1599 distributed within the volume or on the surface of a selected
1600 shape. Molecules will then be copied and translated points when they
1601 "fit".</para>
1602
1603 <para>The filler procedure checks each fill-in point whether there
1604 is enough space for the molecule. To know this, we require a cluster
1605 instead of a molecule. This is just a general agglomeration of atoms
1606 combined with a bounding box that contains all of them and serves as
1607 its minimal volume. I.e. we need this cluster. For this a number of
1608 atoms have to be specified, the minimum bounding box is generated
1609 automatically.</para>
1610
1611 <para>On top of that molecules can be selected whose volume is
1612 additionally excluded from the filling region.</para>
1613
1614 <section xml:id='filling.fill-regular-grid'>
1615 <title xml:id='filling.fill-regular-grid.title'>Fill the domain with
1616 molecules</title>
1617
1618 <para>The call to fill the volume of the selected shape with the
1619 selected atoms is then as follows,</para>
1620
1621 <programlisting>
1622 ... --fill-regular-grid \
1623 --mesh-size "5,5,5" \
1624 --mesh-offset ".5,.5,.5" \
1625 --DoRotate 1 \
1626 --min-distance 1. \
1627 --random-atom-displacement 0.05 \
1628 --random-molecule-displacement 0.4 \
1629 --tesselation-radius 2.5
1630 </programlisting>
1631
1632 <para>This generates a grid of 5x5x5 fill-in points within the
1633 sphere that are offset such as to lay centered within the sphere
1634 (offset per axis in [0,1]). Additionally, each molecule is rotated
1635 by random rotation matrix, each atom is translated randomly by at
1636 most 0.05, each molecule's center at most by 0.4. The selected
1637 molecules' volume is obtained by tesselating their surface and
1638 excluding every fill-in point whose distance to this surface does
1639 not exceed 1. We refer to our comments in
1640 <link linkend="randomization">Randomization</link>for details on
1641 changing the randomness.</para>
1642 </section>
1643
1644 <section xml:id='filling.fill-volume'>
1645 <title xml:id='filling.fill-volume.title'>Fill a shape's volume
1646 with molecules</title>
1647
1648 <para>More specifically than filling the whole domain with molecules,
1649 maybe except areas where other molecules already are, we also can
1650 fill only specific parts by selecting a shape and calling upon
1651 the following action:</para>
1652
1653 <programlisting>
1654 ... --fill-volume \
1655 --counts 12 \
1656 --min-distance 1. \
1657 --DoRotate 1 \
1658 --random-atom-displacement 0.05 \
1659 --random-molecule-displacement 0.4 \
1660 --tesselation-radius 2.5
1661 </programlisting>
1662 </section>
1663
1664 <section xml:id='filling.fill-surface'>
1665 <title xml:id='filling.fill-surface.title'>Fill a shape's surface
1666 with molecules</title>
1667
1668 <para>Filling a surface is very similar to filling its volume.
1669 Again the number of equidistant points has to be specified.
1670 However, randomness is constrained as the molecule is be aligned
1671 with the surface in a specific manner. The alignment axis refers
1672 to the largest principal axis of the filler molecule and will
1673 be aligned parallel to the surface normal at the fill-in point.
1674 </para>
1675
1676 <para>The call below fill in 12 points with a minimum distance
1677 between the instances of 1 angstroem. We allow for certain random
1678 displacements and use the z-axis for aligning the molecules on
1679 the surface.</para>
1680
1681 <programlisting>
1682 ... --fill-surface \
1683 --counts 12 \
1684 --min-distance 1. \
1685 --DoRotate 1 \
1686 --random-atom-displacement 0.05 \
1687 --random-molecule-displacement 0.4 \
1688 --Alignment-Axis "0,0,1"
1689 </programlisting>
1690 </section>
1691
1692 <section xml:id='filling.suspend-in-molecule'>
1693 <title xml:id='filling.suspend-in-molecule.title'>Suspend in molecule
1694 </title>
1695
1696 <para>Add a given molecule in the simulation domain in such a way
1697 that the total density is as desired.</para>
1698
1699 <programlisting>
1700 ... --suspend-in-molecule 1.
1701 </programlisting>
1702 </section>
1703
1704 <section xml:id='filling.fill-molecule'>
1705 <title xml:id='filling.fill-molecule.title'>Fill in molecule</title>
1706
1707 <para>This action will be soon be removed.</para>
1708
1709 <programlisting>
1710 ... --fill-molecule
1711 </programlisting>
1712 </section>
1713
1714 <section xml:id='filling.fill-void'>
1715 <title xml:id='filling.fill-void.title'>Fill void with molecule
1716 </title>
1717
1718 <para>This action will be soon be removed.</para>
1719
1720 <programlisting>
1721 ... --fill-void
1722 </programlisting>
1723 </section>
1724 </section>
1725
1726 <section xml:id='analysis'>
1727 <title xml:id='analysis.title'>Analysis</title>
1728
1729 <para></para>
1730
1731 <section xml:id='analysis.pair-correlation'>
1732 <title xml:id='analysis.pair-correlation.title'>Pair Correlation
1733 </title>
1734
1735 <para>Pair correlation checks for two given elements on the typical
1736 distance they can be found with respect to one another. E.g. for
1737 water one might be interested what is the typical distance for
1738 hydrogen and oxygen atoms.</para>
1739
1740 <programlisting>
1741 ... --pair-correlation \
1742 --elements 1 8 \
1743 --bin-start 0 \
1744 --bin-width 0.7 \
1745 --bin-end 10 \
1746 --output-file histogram.dat \
1747 --bin-output-file bins.dat \
1748 --periodic 0
1749 </programlisting>
1750
1751 <para>This will compile a histogram for the interval [0,10] in steps
1752 of 0.7 and increment a specific bin if the distance of one such pair
1753 of a hydrogen and an oxygen atom can be found within its distance
1754 interval.</para>
1755 </section>
1756
1757 <section xml:id='analysis.dipole-correlation'>
1758 <title xml:id='analysis.dipole-correlation.title'>Dipole Correlation
1759 </title>
1760
1761 <para>The dipole correlation is similar to the pair correlation, only
1762 that it correlates the orientation of dipoles in the molecular
1763 system with one another.</para>
1764 <para>Note that the dipole correlation works on the currently
1765 selected molecules, e.g. all water molecules if so selected.</para>
1766
1767 <programlisting>
1768 ... --dipole-correlation \
1769 --bin-start 0 \
1770 --bin-width 0.7 \
1771 --bin-end 10 \
1772 --output-file histogram.dat \
1773 --bin-output-file bins.dat \
1774 --periodic 0
1775 </programlisting>
1776 </section>
1777
1778 <section xml:id='analysis.dipole-angular-correlation'>
1779 <title xml:id='analysis.dipole-angular-correlation.title'>Dipole
1780 Angular Correlation</title>
1781
1782 <para>The dipole angular correlation looks at the angles of a
1783 dipole over time. It takes the orientation of a certain time step
1784 as the zero angle and bins all other orientations found in later
1785 time steps relative to it.
1786 </para>
1787 <para>Note that in contrast to the dipole correlation the dipole
1788 angular correlation works on the molecules determined by a formula.
1789 This is because selections do not work over time steps as molecules
1790 might change.
1791 </para>
1792
1793 <programlisting>
1794 ... --dipole-angular-correlation H2O \
1795 --bin-start 0 \
1796 --bin-width 5 \
1797 --bin-end 360 \
1798 --output-file histogram.dat \
1799 --bin-output-file bins.dat \
1800 --periodic 0 \
1801 --time-step-zero 0
1802 </programlisting>
1803 </section>
1804
1805 <section xml:id='analysis.point-correlation'>
1806 <title xml:id='analysis.point-correlation.title'>Point Correlation
1807 </title>
1808
1809 <para>Point correlation is very similar to pair correlation, only
1810 that it correlates not positions of atoms among one another but
1811 against a fixed, given point.</para>
1812
1813 <programlisting>
1814 ... --point-correlation \
1815 --elements 1 8 \
1816 --position "0,0,0" \
1817 --bin-start 0 \
1818 --bin-width 0.7 \
1819 --bin-end 10 \
1820 --output-file histogram.dat \
1821 --bin-output-file bins.dat \
1822 --periodic 0
1823 </programlisting>
1824
1825 <para>This would calculate the correlation of all hydrogen and
1826 oxygen atoms with respect to the origin.</para>
1827 </section>
1828
1829 <section xml:id='analysis.surface-correlation'>
1830 <title xml:id='analysis.surface-correlation.title'>Surface
1831 Correlation</title>
1832
1833 <para>The surface correlation calculates the distance of a set
1834 of atoms with respect to a tesselated surface.</para>
1835
1836 <programlisting>
1837 ... --surface-correlation \
1838 --elements 1 8 \
1839 --bin-start 0 \
1840 --bin-width 0.7 \
1841 --bin-end 10 \
1842 --output-file histogram.dat \
1843 --bin-output-file bins.dat \
1844 --periodic 0
1845 </programlisting>
1846 </section>
1847
1848 <section xml:id='analysis.molecular-volume'>
1849 <title xml:id='analysis.molecular-volume.title'>Molecular Volume
1850 </title>
1851
1852 <para>This simply calculates the volume that a selected molecule
1853 occupies. For this the molecular surface is determined via a
1854 tesselation. Note that this surface is minimal is that aspect
1855 that each node of the tesselation consists of an atom of the
1856 molecule.</para>
1857
1858 <programlisting>... --molecular-volume</programlisting>
1859 </section>
1860
1861 <section xml:id='analysis.average-molecule-force'>
1862 <title xml:id='analysis.average-molecule-forcetitle'>Average force
1863 acting on a molecule</title>
1864
1865 <para>This sums up all the forces of each atom of a currently
1866 selected molecule and returns the average force vector. This should
1867 give you the general direction of acceleration of the molecule.
1868 </para>
1869
1870 <programlisting>... --molecular-volume</programlisting>
1871 </section>
1872
1873 </section>
1874
1875 <section xml:id='fragmentation'>
1876 <title xml:id='fragmentation.title'>Fragmentation</title>
1877
1878 <para>Fragmentation refers to a so-called linear-scaling method called
1879 "Bond-Order diSSection in an ANOVA-like fashion" (BOSSANOVA),
1880 developed by <personname>Frederik Heber</personname>. In this section
1881 we briefly explain what the method does and how the associated actions
1882 work.</para>
1883
1884 <para>The central idea behind the BOSSANOVA scheme is to fragment the
1885 graph of the molecular system into connected subgraphs of a certain
1886 number of vertices (atoms). To give an example, loading a ethane atom
1887 with the chemical formula C2H6, fragmenting the molecule up to order 1
1888 means creating two fragments, both methane-like from either carbon
1889 atom including surrounding hydrogen atoms. Fragmenting up to order 2
1890 would return both the methane fragments and additionally the full
1891 ethane molecule as it resembles a fragment of order 2, namely
1892 containing two (non-hydrogen) atoms.</para>
1893
1894 <para>The reason for doing this is that usual ab-initio calculations
1895 of molecular systems via methods such as Density Functional Theory or
1896 Hartree-Fock scale at least as <inlineequation>
1897 <m:math display="inline">
1898 <m:mi>{\cal O}(M^3}</m:mi>
1899 </m:math>
1900 </inlineequation>with the number of atoms <inlineequation>
1901 <m:math display="inline">
1902 <m:mi>M</m:mi>
1903 </m:math>
1904 </inlineequation>. Hence, calculating the ground state energy of a
1905 number of fragment molecules scaling linearly with the number of atoms
1906 yields a linear-scaling methods. In the doctoral thesis of Frederik
1907 Heber, it is explained why this is a sensible ansatz mathematically
1908 and shown that it delivers a very good accuracy if electrons (and
1909 hence interactions) are in general localized.</para>
1910
1911 <para>Long-range interactions are artificially truncated, however,
1912 with this fragment ansatz. It can be obtained in a perturbation manner
1913 by sampling the resulting electronic and nuclei charge density on a
1914 grid, summing over all fragments, and solving the associated Poisson
1915 equation. Such a calculation is implemented via the solver
1916 <productname>vmg</productname> by Julian Iseringhausen that is
1917 contained in the <link xlink:href="http://www.scafacos.org/">
1918 <productname>ScaFaCoS</productname></link>.</para>
1919
1920 <para>Note that we treat hydrogen special (but can be switched off) as
1921 fragments are calculated as closed shell (total spin equals zero).
1922 Also, we use hydrogen to saturate any dangling bonds that occur as
1923 bonds are cut when fragmenting a molecule (this, too, can be switched
1924 off).</para>
1925
1926 <section xml:id='fragmentation.fragment-molecule'>
1927 <title xml:id='fragmentation.fragment-molecule.title'>Fragmenting a
1928 molecular system</title>
1929
1930 <para>For the current selection of atoms, all fragments consisting
1931 of these (sub)set of atoms are created in the following
1932 manner.</para>
1933
1934 <programlisting>
1935 ... --fragment-molecule "BondFragment" \
1936 --DoCyclesFull 1 \
1937 --distance 3. \
1938 --order 3 \
1939 --grid-level 5 \
1940 --output-types xyz mpqc
1941 </programlisting>
1942
1943 <para>We go through each of the options one after the other. During
1944 fragmentation some files are created storing state information, i.e.
1945 the vertex/atom indices per fragment and so on. These files all need
1946 a common prefix, here "BondFragment". Then, we specify that cycles
1947 should be treated fully. This compensates for electrons in aromatic
1948 rings being delocalized over the ring. If cycles in the graph,
1949 originating from aromatic rings, are always calculated fully, i.e.
1950 the whole ring becomes a fragment, we partially overcome these
1951 issues. This does however not work indefinitely and accuracy of the
1952 approximation is limited (<inlineequation>
1953 <m:math display="inline">
1954 <m:mi>&gt;10^{-4}</m:mi>
1955 </m:math>
1956 </inlineequation>) in systems with many interconnected aromatic
1957 rings, such as graphene. Next, we give a distance cutoff of 3 used
1958 in bond graph creation. Then, we specify the maximum order, i.e. the
1959 maximum number of (non-hydrogen) atoms per fragment, here 3. The
1960 higher this number the more expensive the calculation becomes
1961 (because substantially more fragments are created) but also the more
1962 accurate. The grid level refers to the part where long-range Coulomb
1963 interactions are calculated. This is done via solving the associated
1964 Poisson equation with a multigrid solver. As input the solver
1965 requires the density which is sampled on a cartesian grid whose
1966 resolution these parameter defines (<inlineequation>
1967 <m:math display="inline">
1968 <m:mi>2^{\mathrm{level}}</m:mi>
1969 </m:math>
1970 </inlineequation>). And finally, we give the output file formats,
1971 i.e. which file formats are used for writing each fragment
1972 configuration (prefix is "BondFragment", remember?). Here, we use
1973 XYZ (mainly for checking the configurations visually) and MPQC,
1974 which is a very robust Hartree-Fock solver. We refer to the
1975 discussion of the <link linkend="fileparsers">Parsers</link> above
1976 on how to change the parameters of the ab-initio calculation.</para>
1977
1978 <para>After having written all fragment configuration files, you
1979 need to calculate each fragment, grab the resulting energy (and
1980 force vectors) and place them into a result file manually. This at
1981 least is necessary if you have specified output-types above. If not,
1982 the fragments are not written to file but stored internally. Read
1983 on.</para>
1984 </section>
1985
1986 <section xml:id='fragmentation.fragment-automation'>
1987 <title xml:id='fragmentation.fragment-automation.title'>Calculating
1988 fragment energies automatically</title>
1989
1990 <para>Another way of doing this is enabled if you have
1991 <productname>JobMarket</productname> package. JobMarket implements a
1992 client/server ansatz, i.e. two (or more) independent programs are
1993 running (even on another computer but connected via an IP network),
1994 namely a server and at least one client. The server receives
1995 fragment configurations from MoleCuilder and assigns these to a
1996 client who is not busy. The client launches an executable that is
1997 specified in the work package he is assigned and gathers after
1998 calculation a number of values, samewise specified in the package.
1999 The results are gathered together by the server and can be requested
2000 from MoleCuilder once they are done. This essentially describe what
2001 is happening during the execution of this action.</para>
2002
2003 <para>Stored fragment jobs can also be parsed again, i.e. reversing
2004 the effect of having output-types specified in <link
2005 linkend="fragmentation.fragment-molecule">Fragmenting a molecule
2006 </link>.</para>
2007
2008 <programlisting>
2009 ... --parse-fragment-jobs \
2010 --fragment-jobs "BondFragment00.in" "BondFragment01.in" \
2011 --fragment-path "./" \
2012 --grid-level 5
2013 </programlisting>
2014
2015 <para>Here, we have specified two files, namely
2016 <filename>BondFragment00.in</filename> and
2017 <filename>BondFragment01.in</filename>, to be parsed from the path
2018 "./", i.e. the current directory. Also, we have specified to sample
2019 the electronic charge density obtained from the calculated ground
2020 state energy solution with a resolution of 5 (see fragment molecule
2021 and also below).</para>
2022
2023 <para>This allows for automated and parallel calculation of all
2024 fragment energies and forces directly within MoleCuilder. The
2025 FragmentationAutomation action takes the fragment configurations
2026 from an internal storage wherein they are placed if in
2027 FragmentMolecule no output-types have been specified.</para>
2028
2029 <programlisting>
2030 ... --fragment-automation \
2031 --fragment-executable mpqc \
2032 --fragment-resultfile BondFragment_results.dat \
2033 --DoLongrange 1 \
2034 --DoValenceOnly 1 \
2035 --grid-level 5 \
2036 --interpolation-degree 3 \
2037 --near-field-cells 4 \
2038 --server-address 127.0.0.1 \
2039 --server-port 1025
2040 </programlisting>
2041
2042 <para>Again, we go through each of the action's options step by
2043 step.</para>
2044
2045 <para>The executable is required if you do not have a patched
2046 version of <productname>MPQC</productname> that may directly act as
2047 a client to JobMarket's server. All calculated results are placed in
2048 the result file. If none is given, they are instead again placed in
2049 an internal storage for later access.</para>
2050
2051 <note>
2052 <para>Long-calculations are only possible with a client that knows
2053 how to handle VMG jobs. If you encounter failures, then it is most
2054 likely that you do not have a suitable client.</para>
2055 </note>
2056
2057 <para>In the next line, we have all options related to calculation
2058 of long-range interactions. We only sample valence charges on the
2059 grid, i.e. not core electrons and the nuclei charge is reduces
2060 respectively. This avoids problems with sampling highly localized
2061 charges on the grid and is in general recommended. Next, there
2062 follow parameters for the multi grid solver, namely the resolution
2063 of the grid, see under fragmenting the molecule, the interpolation
2064 degree and the number of near field cells. A grid level of 6 is
2065 recommended but costly in terms of memory, the other values are at
2066 their recommend values.</para>
2067
2068 <para>In the last line, parameters are given on how to access the
2069 JobMarket server, namely it address and its port.</para>
2070 </section>
2071
2072 <section xml:id='fragmentation.analyse-fragment-results'>
2073 <title xml:id='fragmentation.analyse-fragment-results.title'>
2074 Analyse fragment results</title>
2075
2076 <para>After the energies and force vectors of each fragment have
2077 been calculated, they need to be summed up to an approximation for
2078 the energy and force vectors of the whole molecular system. This is
2079 done by calling this action.</para>
2080
2081 <programlisting>
2082 ... --analyse-fragment-results \
2083 --fragment-prefix "BondFragment" \
2084 --fragment-resultfile BondFragment_results.dat \
2085 --store-grids 1
2086 </programlisting>
2087
2088 <para>The purpose of the prefix should already be known to you, same
2089 with the result file that is the file parsed by MoleCuilder. The
2090 last option states that the sampled charge densities and the
2091 calculated potential from the long-range calculations should be
2092 stored with the summed up energies and forces. Note that this makes
2093 the resulting files substantially larger (Hundreds of megabyte or
2094 even gigabytes). Fragment energies and forces are stored in
2095 so-called internal homology containers. These are explained in the
2096 next section.</para>
2097
2098 <para>Note that this action sets the force vector if these have been
2099 calculated for the fragment. Hence, a
2100 <link linkend="molecule.verlet-integration">verlet integration</link>
2101 is possible afterwards.</para>
2102 </section>
2103
2104 <section xml:id='fragmentation.store-saturated-fragment'>
2105 <title xml:id='fragmentation.store-saturated-fragment.title'>Store
2106 a saturated fragment</title>
2107
2108 <para>After the energies and force vectors of each fragment have
2109 been calculated, they need to be summed up to an approximation for
2110 the energy and force vectors of the whole molecular system. This is
2111 done by calling this action.</para>
2112
2113 <para>This will store the currently selected atoms as a fragment
2114 where all dangling bonds (by atoms that are connected in the bond
2115 graph but have not been selected as well) are saturated with
2116 additional hydrogen atoms. The output formats are set to just xyz.
2117 </para>
2118
2119 <programlisting>
2120 ... --store-saturated-fragment \
2121 --DoSaturate 1 \
2122 --output-types xyz
2123 </programlisting>
2124 </section>
2125 </section>
2126
2127 <section xml:id='homology'>
2128 <title xml:id='homology.title'>Homologies</title>
2129
2130 <para>After a fragmentation procedure has been performed fully, what
2131 to do with the results? The forces can be used already but what about
2132 the energies? The energy value is basically the function evaluation of
2133 the Born-Oppenheimer surface. For molecular dynamics simulations
2134 continuous ab-initio calculations to evaluate the Born-Oppenheimer
2135 surface is not feasible. Instead usually empirical potential functions
2136 are fitted as to resemble the Born-Oppenheimer surface to a sufficient
2137 degree.</para>
2138
2139 <para>One frequent method is the many-body expansion of said surface
2140 which is basically nothing else than the fragment ansatz described
2141 above. Potential functions resemble a specific term in this many-body
2142 expansion. These are discussed in the next section.</para>
2143
2144 <para>For each of these terms all homologous fragments (i.e. having
2145 the same atoms with respect to the present elements and bonded in the
2146 same way), differing only in the coordinate of each atom, are just a
2147 sampling or a function evaluation of this term of the many-body
2148 expansion with respect to varying nuclei coordinates. Hence, it is
2149 appropriate to use these function evaluations in a non-linear
2150 regression procedure. That is, we want to tune the parameter of the
2151 empirical potential function in such a way as to most closely obtain
2152 the same function evaluation as the ab-initio calculation did with the
2153 same nuclear coordinates. Usually, this is done in a least-square
2154 sense, minimising the euclidean norm.</para>
2155
2156 <para>Homologies are then nothing else but containers for a specific
2157 type of fragment of all the different, calculated configurations (i.e.
2158 varying nuclear coordinates of the same fragment).</para>
2159
2160 <para>Now, we explain the actions that parse and store
2161 homologies.</para>
2162
2163 <programlisting>... --parse-homologies homologies.dat</programlisting>
2164
2165 <para>This parses the all homologies contained in the file
2166 <filename>homologies.dat</filename> and appends them to the homology
2167 container.</para>
2168
2169 <programlisting>... --save-homologies homologies.dat</programlisting>
2170
2171 <para>Complementary, this stores the current contents of the homology
2172 container, overwriting the file
2173 <filename>homologies.dat</filename>.</para>
2174 </section>
2175
2176 <section xml:id='potentials'>
2177 <title xml:id='potentials.title'>Potentials</title>
2178
2179 <para>In much the same manner, we would now ask what are homology
2180 files or containers good for but with the just had explanation it
2181 should be clear: We fit potential function to these function
2182 evaluation of terms of the many-body expansion of the Born-Oppenheimer
2183 surface of the full system.</para>
2184
2185 <section xml:id='potentials.fit-potential'>
2186 <title xml:id='potentials.fit-potential.title'>Fitting empirical
2187 potentials</title>
2188
2189 <para>Let's take a look at an exemplary call to the fit potential
2190 action.</para>
2191
2192 <programlisting>
2193 ... --fit-potential \
2194 --fragment-charges 8 1 1 \
2195 --potential-charges 8 1 \
2196 --potential-type morse \
2197 --take-best-of 5
2198 </programlisting>
2199
2200 <para>Again, we look at each option in turn. The first is the
2201 charges or elements specifying the set of homologous fragments that
2202 we want to look at. Here, obviously we are interested in water
2203 molecules, consisting of a single oxygen and two hydrogen atoms.
2204 Next, we specify the nuclei coordinates of the potential. We give
2205 the type of the potential as morse, which requires a single distance
2206 or two nuclear coordinates, here between an oxygen and a hydrogen
2207 atom. Finally, we state that the non-linear regression should be
2208 done with five random starting positions and the set of parameters
2209 with the smallest L2 norm wins.</para>
2210
2211 <note>
2212 <para>Due to translational and rotational degrees of freedom for
2213 fragments smaller than 7 atoms, it is appropriate to look at the
2214 pair-wise distances and not at the absolute coordinates. Hence,
2215 the two atomic positions, here for oxygen and hydrogen, are
2216 converted to a single distance. If we had given an harmonic
2217 angular potential and three charges/element, 8 1 1, i.e. oxygen
2218 and two hydrogens, we would have obtained three distances.</para>
2219
2220 <para>MoleCuilder always adds a so-called constant potential to
2221 the fit containing only a single parameter, the energy offset.
2222 This offset compensates for the interaction energy associated with
2223 a fragment of order 1, e.g. a single hydrogen atom.</para>
2224 </note>
2225 </section>
2226
2227 <section xml:id='potentials.fit-compound-potential'>
2228 <title xml:id='potentials.fit-compound-potential.title'>Fitting
2229 many empirical potentials simultaneously</title>
2230
2231
2232 <para>Another way is using a file containing a specific set of
2233 potential functions, possibly even with initial values.</para>
2234
2235 <programlisting>
2236 ... --fit-compound-potential \
2237 --fragment-charges 8 1 1 \
2238 --potential-file water.potentials \
2239 --set-threshold 1e-3 \
2240 --training-file test.dat
2241 </programlisting>
2242
2243 <para>Now, all empirical potential functions are summed up into a
2244 so-called compound potential over the combined set of parameters.
2245 These are now fitted simultaneously. For example, if the potential
2246 file <filename>water.potentials</filename> contains a harmonic bond
2247 potential between oxygen and hydrogen and another angular potential
2248 for the angle between hydrogen, oxygen, and hydrogen atom we would
2249 fit a still simple function approximating the energy of a single
2250 water molecule. Here, the threshold takes the place of the
2251 take-best-of option. Here, random starting parameters are used as
2252 long as the final L2 error is not below 1e-3. Also, all data used
2253 for training, i.e. the tuples consisting of the fragments nuclei
2254 coordinates and the associated energy value are written to the file
2255 <filename>test.dat</filename>. This allows for graphical or other
2256 type of analysis.</para>
2257
2258 <para>Note that you can combine the two ways, i.e. start with a
2259 fit-potential call but give an empty potential file. The resulting
2260 parameters are stored in it. Fit other potentials and give different
2261 file names for each in turn. Eventually, you have to combine the file
2262 in a text editor at the moment. And perform a fit-compound-potential
2263 with this file.</para>
2264 </section>
2265
2266
2267 <section xml:id='potentials.parse-potential'>
2268 <title xml:id='potentials.parse-potential.title'>Parsing an
2269 empirical potentials file</title>
2270
2271 <para>Responsible for the compound potential is every potential
2272 function whose signature matches with the designated fragment-charges
2273 and who is currently known to an internal instance called the
2274 PotentialRegistry.</para>
2275
2276 <para>More potentials can be registered (fit-potential will also
2277 register the potential it fits) by parsing them from a file.</para>
2278
2279 <programlisting>
2280 ... --parse-potentials water.potentials
2281 </programlisting>
2282
2283 <note>Currently, only <productname>TREMOLO</productname> potential
2284 files are understood and can be parsed.</note>
2285 </section>
2286
2287 <section xml:id='potentials.save-potential'>
2288 <title xml:id='potentials.save-potential.title'>Saving an
2289 empirical potentials file</title>
2290
2291 <para>The opposite to parse-potentials is save-potentials that writes
2292 every potential currently known to the PotentialRegistry to the given
2293 file along with the currently fitted parameters</para>
2294
2295 <programlisting>
2296 ... --save-potentials water.potentials
2297 </programlisting>
2298
2299 <note>Again, only the <productname>TREMOLO</productname> potential
2300 format is understood currently and is written.</note>
2301 </section>
2302
2303 <section xml:id='potentials.fit-particle-charges'>
2304 <title xml:id='potentials.fit-particle-charges.title'>Fitting
2305 particle charges</title>
2306
2307 <para>The above empirical potential just model the short-range
2308 behavior in the molecular fragment, namely the bonded interaction.
2309 In order to model the long-range interaction as well without solving
2310 for the electronic ground state in each time step, particle charges
2311 are used that capture to some degree the created dipoles due to
2312 charge transfer from one atom to another when bonded.</para>
2313
2314 <para>To allow least-squares regression of these partial charges we
2315 need the results of long-range calculations and the store-grids
2316 option (see above under <link linkend="fragmentation">Fragmentation
2317 </link>) must have been given. With these sampled charge density and
2318 Coulomb potential stored in the homology containers, we call this
2319 action as follows.</para>
2320
2321 <programlisting>
2322 ... --fit-particle-charges \
2323 --fragment-charges 8 1 1 \
2324 --potential-file water.potentials \
2325 --radius 0.2
2326 </programlisting>
2327
2328 <para>This will again use water molecule as homologous fragment
2329 "key" to request configurations from the container. Results are
2330 stored in <filename>water.potentials</filename>. The radius is used
2331 to mark the region directly around the nuclei from the fit
2332 procedure. As here the charges of the core electrons and the nuclei
2333 itself dominate, we however are only interested in a good
2334 approximation to the long-range potential, this mask radius allows
2335 to give the range of the excluded zone.</para>
2336 </section>
2337 </section>
2338
2339 <section xml:id='dynamics'>
2340 <title xml:id='dynamics.title'>Dynamics</title>
2341
2342 <para>For fitting potentials or charges we need many homologuous but
2343 different fragments, i.e. atoms with slightly different positions.
2344 How can we generate these?</para>
2345
2346 <para>One possibility is to use molecular dynamics. With the
2347 aforementioned fragmentation scheme we can quickly calculate not only
2348 energies but also forces if the chosen solver, such as
2349 <link xlink:href="http://www.mpqc.org/"><productname>MPQC
2350 </productname></link>, supports it. Integrating these forces
2351 discretely over time gives insight into vibrational features of a
2352 molecular system and allows to generate those positions for fitting
2353 potentials that describe these vibrations.</para>
2354
2355 <section xml:id='dynamics.molecular-dynamics'>
2356 <title xml:id='dynamics.molecular-dynamics.title'>Molecular dynamics
2357 </title>
2358
2359 <para>The molecular dynamics action is a so-called macro Action,
2360 i.e. it combines several other Actions into one, namely:</para>
2361 <itemizedlist>
2362 <listitem>
2363 <para>--verlet-integration</para>
2364 </listitem>
2365 <listitem>
2366 <para>--output</para>
2367 </listitem>
2368 <listitem>
2369 <para>--clear-fragment-results</para>
2370 </listitem>
2371 <listitem>
2372 <para>--destroy-adjacency</para>
2373 </listitem>
2374 <listitem>
2375 <para>--create-adjacency</para>
2376 </listitem>
2377 <listitem>
2378 <para>--update-molecules</para>
2379 </listitem>
2380 <listitem>
2381 <para>--fragment-molecule</para>
2382 </listitem>
2383 <listitem>
2384 <para>--fragment-automation</para>
2385 </listitem>
2386 <listitem>
2387 <para>--analyse-fragment-results</para>
2388 </listitem>
2389 </itemizedlist>
2390
2391 <para>The following will perform a molecular dynamics simulation
2392 for 100 time steps, each time step combining 0.5 atomic time units,
2393 i.e. 1.2 1e-17 s. The other options listed below will seem familiar
2394 to you if you have read about the other Actions listed above. Below
2395 we will not keep the bondgraph, i.e bonds and molecules may change
2396 over the simulation and hence also the created fragments per time
2397 step.
2398 </para>
2399
2400 <programlisting>
2401 ... --molecular-dynamics \
2402 --steps 100 \
2403 --keep-bondgraph 0 \
2404 --order 3 \
2405 --distance 3. \
2406 --deltat 0.5 \
2407 --keep-fixed-CenterOfMass 1 \
2408 --fragment-executable mpqc \
2409 </programlisting>
2410 </section>
2411
2412 <section xml:id='dynamics.optimize-structure'>
2413 <title xml:id='dynamics.optimize-structure.title'>Structure
2414 optimization</title>
2415
2416 <para>Structure optimization is also a macro Action, it basically
2417 combines the same Actions as molecular-dynamics does. However, it
2418 uses force-annealing instead of verlet-integration.</para>
2419
2420 <para>The following performs a structure optimization of the
2421 currently selected atoms (may also be a subset) for up to 100 time
2422 steps, where each time step ist 0.5 atomic time units. The time
2423 step here is the initial step with for annealing.
2424 </para>
2425
2426 <programlisting>
2427 ... --optimize-structure \
2428 --keep-bondgraph 1 \
2429 --output-every-step 1 \
2430 --steps 100 \
2431 --order 3 \
2432 --distance 3. \
2433 --deltat 0.5 \
2434 --keep-fixed-CenterOfMass 1 \
2435 --fragment-executable mpqc \
2436 </programlisting>
2437
2438 <para>Note that output-every-step will allow you to watch the
2439 optimization as each step is placed into a distinct time step.
2440 Otherwise only two time steps would be created: the initial and
2441 the final one containing the optimized structure.</para>
2442 </section>
2443
2444 <section xml:id='dynamics.set-world-time'>
2445 <title xml:id='dynamics.set-world-time.title'>Set the world's time
2446 step</title>
2447
2448 <para>In order to inspect or manipulate atoms and molecules at a
2449 certain time step, the World's time has to be set with the following
2450 Action.
2451 </para>
2452
2453 <para>This will set the World's time to the fifth step (counting
2454 starts at zero).</para>
2455
2456 <programlisting>... --set-world-time 4</programlisting>
2457 </section>
2458
2459 <section xml:id='dynamics.save-temperature'>
2460 <title xml:id='dynamics.save-temperature.title'>Save the
2461 temperature information</title>
2462
2463 <para>For each time step the temperature (i.e. the average velocity
2464 per atom times its mass) will be stored to a file.</para>
2465
2466 <programlisting>
2467 ... --save-temperature temperature.dat \
2468 </programlisting>
2469 </section>
2470 </section>
2471
2472 <section xml:id='dynamics.tesselation'>
2473 <title xml:id='dynamics.tesselation.title'>Tesselations</title>
2474
2475 <para>Tesselations obtain molecular surfaces (and volumes) by rolling
2476 a virtual sphere of a certain radii on a molecule until a closed
2477 surface of connected triangles is created.</para>
2478
2479 <section xml:id='dynamics.tesselation.nonconvex-envelope'>
2480 <title xml:id='dynamics.tesselation.nonconvex-envelope.title'>
2481 Non-convex envelope</title>
2482
2483 <para>This will create a non-convex envelope for a molecule and store
2484 it to a file for viewing with external programs.</para>
2485
2486 <programlisting>
2487 ... --nonconvex-envelope 6. \
2488 --nonconvex-file nonconvex.dat
2489 </programlisting>
2490
2491 <para>This tesselation file can be conveniently viewed with
2492 <productname>TecPlot</productname> or with one of the Tcl script
2493 in the util folder with <productname>VMD</productname>. Also,
2494 still pictures can be produced with <productname>Raster3D
2495 </productname>.
2496 <note>The required file header.r3d can be found in a subfolder of
2497 the util folder.</note>
2498 </para>
2499 </section>
2500
2501 <section xml:id='dynamics.tesselation.convex-envelope'>
2502 <title xml:id='dynamics.tesselation.convex-envelope.title'>Convex
2503 envelope</title>
2504
2505 <para>This will create a convex envelope for a molecule and give the
2506 volumes of both the non-convex and the convex envelope. This is good
2507 for measuring the space a molecule takes up, e.g. when filling a
2508 domain and taking care of correct densities.</para>
2509
2510 <programlisting>
2511 ... --convex-envelope 6. \
2512 --convex-file convex.dat
2513 </programlisting>
2514
2515 <para>This tesselation file can be likewise viewed with
2516 <productname>TecPlot</productname> or with one of the Tcl script
2517 in the util folder with <productname>VMD</productname>.</para>
2518 </section>
2519 </section>
2520
2521 <section xml:id='various'>
2522 <title xml:id='various.title'>Various commands</title>
2523
2524 <para>Here, we gather all commands that do not fit into one of above
2525 categories for completeness.</para>
2526
2527 <section xml:id='various.verbose'>
2528 <title xml:id='various.verbose.title'>Changing verbosity</title>
2529
2530 <para>The verbosity level is the amount of stuff printed to screen.
2531 This information will in general help you to understand when
2532 something does not work. Mind the <emphasis>ERROR</emphasis> and
2533 <emphasis>WARNING</emphasis> messages in any case.</para>
2534
2535 <para>This sets the verbosity from default of 2 to 4,</para>
2536
2537 <programlisting>... --verbose 4</programlisting>
2538
2539 <para>or shorter,</para>
2540
2541 <programlisting>... -v 4</programlisting>
2542 </section>
2543
2544 <section xml:id='various.element-db'>
2545 <title xml:id='various.element-db.title'>Loading an element
2546 database</title>
2547
2548 <para>Element databases contain information on valency, van der
2549 Waals-radii and other information for each element.</para>
2550
2551 <para>This loads all element database from the current folder (in a
2552 unix environment):</para>
2553
2554 <programlisting>... --element-db ./</programlisting>
2555
2556 </section>
2557
2558 <section xml:id='various.fastparsing'>
2559 <title xml:id='various.fastparsing.title'>Fast parsing</title>
2560
2561 <para>Parsing all time steps from a given input file can take a
2562 while, especially for larger systems. If fast parsing is activated,
2563 only the first time step is loaded, all other are ignored.</para>
2564
2565 <programlisting>... --fastparsing 1</programlisting>
2566 </section>
2567
2568 <section xml:id='various.version'>
2569 <title xml:id='various.version.title'>Giving the version of the
2570 program</title>
2571
2572 <para>This prints the version information of the code, especially
2573 important when you request the fixing of bugs or implementation of
2574 features.</para>
2575
2576 <programlisting>... --version</programlisting>
2577 </section>
2578
2579 <section xml:id='various.warranty'>
2580 <title xml:id='various.warranty.title'>Giving warranty
2581 information</title>
2582
2583 <para>As follows warranty information is given,</para>
2584
2585 <programlisting>... --warranty</programlisting>
2586 </section>
2587
2588 <section xml:id='various.help-redistribute'>
2589 <title xml:id='various.help-redistribute.title'>Giving
2590 redistribution information</title>
2591
2592 <para>This gives information on the license and how to redistribute
2593 the program and its source code</para>
2594
2595 <programlisting>... --help-redistribute</programlisting>
2596 </section>
2597 </section>
2598
2599 <section xml:id='sessions'>
2600 <title xml:id='sessions.title'>Sessions</title>
2601
2602 <para>A session refers to the queue of actions you have executed.
2603 Together with the initial configuration (and all files required for
2604 actions in the queue) this might be seen as a clever way of storing
2605 the state of a molecular system. When proceeding in a try&amp;error
2606 fashion to construct a certain system, it is a good idea, to store the
2607 session at the point where your attempts start to deviate from one
2608 another.</para>
2609
2610 <section xml:id='sessions.store-session'>
2611 <title xml:id='sessions.store-session.title'>Storing a session
2612 </title>
2613
2614 <para>Storing sessions is simple,</para>
2615
2616 <programlisting>
2617 ... --store-session "session.py" \
2618 --session-type python
2619 </programlisting>
2620
2621 <para>Here, the session type is given as python (the other option is
2622 cli for in the manner of the command-line interface) and the written
2623 python script <filename>session.py</filename> can even be used with
2624 the python interface described below, i.e. it is a full python script
2625 (that however requires the so-called pyMoleCuilder module).</para>
2626 </section>
2627
2628 <section xml:id='sessions.load-session'>
2629 <title xml:id='sessions.load-session.title'>Loading a session</title>
2630
2631 <para>Loading a session only works for python scripts. This actually
2632 blurs the line between the command-line interface and the python
2633 interface a bit. But even more, MoleCuilder automatically executes a
2634 script called <filename>molecuilder.py</filename> if such a file is
2635 contained in the current directory.</para>
2636
2637 <programlisting>... --load-session "session.py"</programlisting>
2638
2639 <para>This will execute every action with its options contained in the
2640 script <filename>session.py</filename>.</para>
2641 </section>
2642 </section>
2643
2644 <section xml:id='various-specific'>
2645 <title xml:id='various-specific.title'>Various specific commands
2646 </title>
2647
2648 <para>In this (final) section of the action description we list a number
2649 Actions that are very specific to some purposes (or other programs).
2650 </para>
2651
2652 <section xml:id='various-specific.save-selected-atoms-as-exttypes'>
2653 <title xml:id='various-specific.save-selected-atoms-as-exttypes.title'>
2654 Saving exttypes of a set of atoms</title>
2655
2656 <para>This saves the atomic ids of all currently selected atoms in a
2657 <link xlink:href="http://www.tremolo-x.com/"><productname>TREMOLO
2658 </productname></link> exttypes file with the given name.</para>
2659
2660 <programlisting>
2661 ... --save-selected-atoms-as-exttypes \
2662 --filename test.exttypes </programlisting>
2663 </section>
2664
2665 <section xml:id='various-specific.set-parser-parameters'>
2666 <title xml:id='various-specific.set-parser-parameters.title'>Setting
2667 parser specific parameters</title>
2668
2669 <para>You can also tweak the parameters stored in this file easily.
2670 For example, <productname>MPQC</productname> stores various
2671 parameters modifying the specific ab-initio calculation performed.
2672 For <link xlink:href="http://www.mpqc.org/"><productname>MPQC
2673 </productname></link> and
2674 <link xlink:href="http://www.psicode.org/"><productname>Psi4
2675 </productname></link> this can be modified as follows.</para>
2676
2677 <programlisting>
2678 ... --set-parser-parameters mpqc \
2679 --parser-parameters "theory=CLHF;basis=6-31*G;"
2680 </programlisting>
2681
2682 <para>This sets the ab-initio theory to closed-shell Hartree-Fock
2683 and the basis set to 6-31*G. Please check the
2684 <productname>MPQC</productname> manual on specific
2685 parameters.</para>
2686 </section>
2687
2688 <section xml:id='various-specific.set-tremolo-atomdata'>
2689 <title xml:id='various-specific.set-tremolo-atomdata.title'>Tremolo
2690 specific options and potential files</title>
2691
2692 <para><productname>TREMOLO</productname>'s configuration files start
2693 with a specific line telling the amount of information stored in the
2694 file. This file can be modified, e.g. to enforce storing of
2695 velocities and forces as well as the atoms positions and
2696 element.</para>
2697
2698 <programlisting>
2699 ... --set-tremolo-atomdata "ATOM id element u=3 v=3 F=3" \
2700 --reset 1
2701 </programlisting>
2702
2703 <para>This will not append but reset the old line and fill it with
2704 the given string.</para>
2705
2706 <para>One specific action is required when loading certain
2707 <productname>TREMOLO</productname> configuration files. These
2708 contain element notations that refer to parameterized names used in
2709 empirical potentials and molecular dynamics simulations and not the
2710 usual chemical symbols, such as H or O. We may load an auxiliary
2711 file that gives the required conversion from OH1 to H, which is the
2712 so-called potential file.</para>
2713
2714 <programlisting>... --parse-tremolo-potentials water.potentials</programlisting>
2715
2716 <para>This parses the lookup table from the file
2717 <filename>water.potentials</filename> and it can be used in
2718 following load actions.</para>
2719 </section>
2720 </section>
2721 </section>
2722
2723 <section xml:id='textmenu-interface'>
2724 <title xml:id='textmenu-interface.title'>Text menu</title>
2725
2726 <para>We now discuss how to use the text menu interface.</para>
2727
2728 <para>The text menu is very much the interface counterpart to the
2729 command-line interface. Both work in a terminal session.</para>
2730
2731 <para>In the text menu, actions can be selected from hierarchical lists.
2732 Note that the menus for the graphical interface are organized in the
2733 exactly same way. After an action has been chosen, the option values
2734 have to be entered one after the other. After the last option value has
2735 been given, the action is executed and the result printed to the
2736 screen.</para>
2737
2738 <para>With regards to the other functionality, it is very much the same
2739 as the command-line interface above.</para>
2740 </section>
2741
2742 <section xml:id='graphical-user-interface'>
2743 <title xml:id='graphical-user-interface.title'>Graphical user interface
2744 </title>
2745
2746 <para>The main point of the GUI is that it renders the atoms and
2747 molecules visually. These are represented by the common
2748 stick-and-ball-model. Single or multiple atoms and molecules can easily
2749 be accessed, activated and manipulated via tables. Changes made in the
2750 tables cause immediate update of the visual representation. Under the
2751 hood each of these manipulations is nothing but the call to an action,
2752 hence is fully undo- and redoable.</para>
2753
2754 <para>This is mostly helpful to design more advanced structures that are
2755 conceptually difficult to imagine without visual aid. At the end, a
2756 session may be stored and this script can then be used to construct
2757 various derived or slightly modified structures.</para>
2758
2759 <section xml:id='graphical-user-interface.basic-view'>
2760 <title xml:id='graphical-user-interface.basic-view.title'>Basic view
2761 </title>
2762
2763 <para>Let us first give an impression of the basic view of the gui
2764 after a molecule has been loaded.</para>
2765
2766 <figure>
2767 <title>Screenshot of the basic view of the GUI after loading a file
2768 with eight water molecules.</title>
2769
2770 <mediaobject>
2771 <imageobject>
2772 <imagedata entityref="example_basic_view" scalefit="1" width="100%"/>
2773 </imageobject>
2774 </mediaobject>
2775 </figure>
2776
2777 <section xml:id='graphical-user-interface.3d-view'>
2778 <title xml:id='graphical-user-interface.3d-view.title'>3D view
2779 </title>
2780
2781 <para>In the above figure, you see the stick-and-ball representation
2782 of the water molecules, the dreibein giving the positive axis
2783 direction and the cuboidal domain on a black background.</para>
2784 </section>
2785
2786 <section xml:id='graphical-user-interface.information-tabs'>
2787 <title xml:id='graphical-user-interface.information-tabs.title'>
2788 Information Tabs</title>
2789
2790 <para>Beneath this 3D view that you can rotate at will your mouse
2791 and zoom in and out with your scroll wheel, you find to the right a
2792 part containing two tabs named Atom and Molecule. Look at where the
2793 mouse pointer is. It has colored the atom underneath in cyan
2794 (although it's also an oxygen atom and should bne coloured in rose
2795 as the rest). You can inspect its properties in the tab Atom: Name,
2796 element, mass, charge, position and number of bonds. If you switch
2797 to the Molecule tab, you would see the properties of the water
2798 molecule this specific atom belongs to.</para>
2799 </section>
2800
2801 <section xml:id='graphical-user-interface.shape'>
2802 <title xml:id='graphical-user-interface.shape.title'>Shape section
2803 </title>
2804
2805 <para>Beneath these information tabs you find the shape sections.
2806 There you find a list of all currently created shapes and you can
2807 manipulate them via the buttons beneath this list.</para>
2808 </section>
2809
2810 <section xml:id='graphical-user-interface.timeline'>
2811 <title xml:id='graphical-user-interface.timeline.title'>Timeline
2812 </title>
2813
2814 <para>Directly below the 3D view there is a long slider. If a loaded
2815 file has multiple time step entries, this slider allows you to
2816 smoothly select one time frame after another. Sliding it with the
2817 mouse from left to right will reveal the animation that is hidden
2818 behind the distinct snapshots stored in the configuration
2819 file.</para>
2820 </section>
2821
2822 <section xml:id='graphical-user-interface.tables'>
2823 <title xml:id='graphical-user-interface.tables.title'>Selection
2824 tables</title>
2825
2826 <para>Underneath the time line there is another place for
2827 tabs.</para>
2828
2829 <para>The first is on molecules, listing all present molecules of
2830 the molecular system in a list view. If you click on a specific
2831 molecule, the one will get selected or unselected depending on its
2832 current selection state (see below for details on this with respect
2833 to the GUI).</para>
2834
2835 <para>The next tab enumerates all elements known to MoleCuilder
2836 where the ones are greyed out that are not present in the molecular
2837 system. Clicking on a present element will select all atoms of this
2838 specific element. A subsequent click unselects again.</para>
2839
2840 <para>Subsequent follow tabs on enumerating the fragments and their
2841 fragment energies if calculated and the homologies along with
2842 graphical depiction (via QWT) if present.</para>
2843 </section>
2844 </section>
2845
2846 <section xml:id='graphical-user-interface.selections'>
2847 <title xml:id='graphical-user-interface.selections.title'>Selections
2848 </title>
2849
2850 <para>Selections work generally always by selecting the respective
2851 action from the pull-down menu.</para>
2852
2853 <para>However, it may also be accessed directly. The row of icons
2854 above the 3D view has two icons depicting the selection of individual
2855 atoms or molecules. If either of them is selected, clicking with the
2856 left mouse button on an atom will either (un)select the atom or its
2857 associated molecule. Multiple atoms can be selected in this
2858 manner.</para>
2859
2860 <para>Also the selection tabs may be used by clicking on the name of a
2861 molecule as stated above or at an element.</para>
2862
2863 <para>Similarly, if shapes are present in the shape section, clicking
2864 them with select them and also cause a translucent visualization to
2865 appear in the 3D view. Note that this visualization is quite costly
2866 right now and not suited to complex shapes.</para>
2867 </section>
2868
2869 <section xml:id='graphical-user-interface.dialogs'>
2870 <title xml:id='graphical-user-interface.dialogs.title'>Dialogs</title>
2871
2872 <para>Most essential, however, to the GUI are the dialogs. Each action
2873 calls forth such a dialog even if no options are required (the
2874 execution of the action has at least to be confirmed). Each dialog
2875 consisting of queries for a particular option value. As each option
2876 value has a specific type, we briefly go into the details of how these
2877 queries look like.</para>
2878
2879 <note>
2880 <para>Each dialog's Ok is greyed out until all entered option values
2881 are valid.</para>
2882 </note>
2883
2884 <section xml:id='graphical-user-interface.dialogs.domain'>
2885 <title xml:id='graphical-user-interface.dialogs.domain.title'>Domain
2886 query</title>
2887
2888 <figure>
2889 <title>Screenshot of a dialog showing a domain query</title>
2890
2891 <mediaobject>
2892 <imageobject>
2893 <imagedata entityref="dialog_box" scalefit="1" width="100%"/>
2894 </imageobject>
2895 </mediaobject>
2896
2897 <para>In the domain query a 3x3 symmetric matrix has to be
2898 entered. In the above screenshots you notice that the only
2899 non-zero entries are on the main diagonal. Here, we have simply
2900 specified a cube of edge length 8. The ok button will be greyed
2901 out if the matrix is either singular or not symmetric.</para>
2902 </figure>
2903 </section>
2904
2905 <section xml:id='graphical-user-interface.dialogs.element'>
2906 <title xml:id='graphical-user-interface.dialogs.element.title'>
2907 Element query</title>
2908
2909 <figure>
2910 <title>Screenshot the add atom action containing an element
2911 query</title>
2912
2913 <mediaobject>
2914 <imageobject>
2915 <imagedata entityref="dialog_add-atom_tooltip" scalefit="1" width="100%"/>
2916 </imageobject>
2917 </mediaobject>
2918
2919 <para>Elements are picked from a pull-down box where all known
2920 elements are listed.</para>
2921
2922 <para>In this dialog you also notice that a tooltip is given,
2923 briefly explaining what the action does.</para>
2924 </figure>
2925 </section>
2926
2927 <section xml:id='graphical-user-interface.dialogs.action'>
2928 <title xml:id='graphical-user-interface.dialogs.action.title'>
2929 Complex query</title>
2930
2931 <figure>
2932 <title>Screenshot of a complex dialog consisting of multiple
2933 queries</title>
2934
2935 <mediaobject>
2936 <imageobject>
2937 <imagedata entityref="dialog_complex" scalefit="1" width="100%"/>
2938 </imageobject>
2939 </mediaobject>
2940
2941 <para>Here we show a more complex dialog. It queries for strings,
2942 for integer values (see the increase/decrease arrows), for
2943 booleans and for files (the "choose" buttons opens a file
2944 dialog).</para>
2945 </figure>
2946 </section>
2947
2948 <section xml:id='graphical-user-interface.dialogs.exit'>
2949 <title xml:id='graphical-user-interface.dialogs.exit.title'>Exit
2950 query</title>
2951
2952 <figure>
2953 <title>Screenshort showing the exit dialog</title>
2954
2955 <mediaobject>
2956 <imageobject>
2957 <imagedata entityref="dialog_exit" scalefit="1" width="100%"/>
2958 </imageobject>
2959 </mediaobject>
2960
2961 <para>Finally, we show the dialog that will pop up when exiting
2962 the graphical interface. It will ask whether it should store the
2963 current state of the system in the input file or not. You may
2964 cancel the exit, close without saving or save the current
2965 state.</para>
2966 </figure>
2967 </section>
2968 </section>
2969 </section>
2970
2971 <section xml:id='python-interface'>
2972 <title xml:id='python-interface.title'>Python interface</title>
2973
2974 <para>Last but not least we elaborate on the python interface. We have
2975 already discusses this interface to some extent. The current session,
2976 i.e. the queue of actions you have executed, can be stored as a python
2977 script and subsequently executed independently of the user interface it
2978 was created with. More general, MoleCuilder can execute arbitrary python
2979 scripts where prior to its execution a specific module is loaded by
2980 default enabling access to MoleCuilder's actions from inside the
2981 script.</para>
2982
2983 <para>MoleCuilder's python module is called pyMoleCuilder. it is
2984 essentially a library that can be imported into python just as any other
2985 module. Let us assume you have started the python interpreter and you
2986 have added the destination of the <filename>pyMoleCuilder</filename>
2987 library to the <varname>PYTHONPATH</varname> variable.</para>
2988
2989 <programlisting>import pyMoleCuilder as mol</programlisting>
2990
2991 <para>Subsequently, you can access the help via</para>
2992
2993 <programlisting>help(mol)</programlisting>
2994
2995 <para>This will list all of MoleCuilder's actions with their function
2996 signatures within python as contained in the module pyMoleCuilder named
2997 as mol in the scope of the currently running interpreter. Note that the
2998 function names are not the names you know from the command-line
2999 interface, they might be called
3000 <computeroutput>WorldChangeBox(...)</computeroutput> or alike.</para>
3001
3002 <para>Let's try it out.</para>
3003
3004 <programlisting>print mol.CommandVersion()</programlisting>
3005
3006 <para>This will state the current version of the library.</para>
3007
3008 <para>Go ahead and try out other commands. Refer to the documentation
3009 under the command-line interface and look up the function name via
3010 help.</para>
3011 </section>
3012 </chapter>
3013
3014 <chapter>
3015 <title>Conclusions</title>
3016
3017 <para>This ends this user guide.</para>
3018
3019 <para>We have given you a brief introduction to the aim of the program and
3020 how each of the four interfaces are to be used. The rest is up to
3021 you.</para>
3022
3023 <para>Tutorials and more information is available online, see <link
3024 xlink:href="http://www.molecuilder.com/">MoleCuilder's website</link>.
3025 </para>
3026
3027 <para>Be aware that in general knowing how the code works allows you to
3028 understand what's going wrong if something's going wrong.</para>
3029
3030 <section>
3031 <title>Thanks</title>
3032
3033 <para>Huge thanks go out to Saskia Metzler who was patient enough to let
3034 me sit next to her while riding ten hours in a bus to Berlin.</para>
3035 </section>
3036 </chapter>
3037</book>
Note: See TracBrowser for help on using the repository browser.