source: src/documentation/constructs/descriptors.dox@ c8302f3

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 c8302f3 was ea7a50, checked in by Frederik Heber <heber@…>, 13 years ago

Rewrote some of the descriptors such that they access World's AtomSet and MoleculeSet directly.

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/**
9 * \file descriptors.dox
10 *
11 * Created on: Oct 28, 2011
12 * Author: heber
13 */
14
15/** \page descriptors Descriptors
16 *
17 * Descriptors help you to select a specific subset of a given array of
18 * elements. For the moment these elements are either instances of atom
19 * or molecule that the \ref world offers.
20 *
21 * They mostly work as an argument to either obtain a specific iterator
22 * over the elements (that silently skips all non-matching ones) or
23 * a subset.
24 *
25 * Note that the following boolean operators on descriptors work:
26 * - or
27 * - and
28 * - not
29 *
30 * Hence, these descriptors are very mighty. A typical use would be as follows:
31 * \code
32 * World::getInstance().getAllAtoms(AtomByType(1) && AtomByShape(Sphere(Vector(0,0,0), 2.)));
33 * \endcode
34 * which would return an AtomComposite of all hydrogen (Z=1) atoms within a
35 * sphere of radius 2. centered at (0,0,0).
36 *
37 * Or you may obtain iterators over a selection and use them in a loop as this:
38 * \code
39 * World::MoleculeIterator iter = World::getInstance().getMoleculeIter(MoleculeByFormula(Formula("H2O")));
40 * World::MoleculeIterator enditer = World::getInstance().moleculeEnd();
41 * std::cout << "List of all water molecules:" << std::endl;
42 * for (; iter != enditer; ++iter)
43 * std:cout << (*iter)->getId() << std::endl;
44 * \endcode
45 *
46 * \note There is difference between Selection and Descriptor. A
47 * Descriptor is just a predicate() that selects among a given list. The current
48 * Selection (of atoms/molecules) is a Descriptor \a applied to a the total
49 * list of all atoms/molecules. Hence, a selection refers to a subset where
50 * the Descriptor is just the condition that selects such a subset.
51 *
52 * \subsection descriptors-atom Atom Descriptors
53 *
54 * The following descriptors are present for atoms:
55 * - by id: AtomById()
56 * - of currently selected molecule(s): AtomsByMoleculeSelection()
57 * - of molecule: AtomOfMolecule()
58 * - currently selected atoms: AtomsBySelection()
59 * - within a Shape: AtomByShape()
60 * - of specific element: AtomByType()
61 * - within distance to: AtomsWithinDistanceOf() (uses LinkedCell_View)
62 *
63 * \subsection descriptors-molecule Molecule Descriptors
64 *
65 * The following descriptors are present for molecules:
66 * - by formula: MoleculeByFormula()
67 * - by id: MoleculeById()
68 * - by name: MoleculeByName()
69 * - of currently selected atoms: MoleculesByAtomSelection()
70 * - by order of creation: MoleculeByOrder() (i.e. -1 is the last one, 1 is the
71 * first ever created, ...)
72 * - by pointer: MoleculeByPtr MoleculeByPtr()
73 * - currently selected molecules: MoleculesBySelection()
74 *
75 * \subsection descriptors-world Descriptors and the World
76 *
77 * In the World we make heavy use of descriptors. However, the World is also
78 * responsibly of informing connected Observers about removal or insertion of
79 * atoms or molecules.
80 * That's why its containers are protectedly constructed as ObservedContainers.
81 * Whenever you walk through them with a normal iterator, afterwards an update()
82 * is initiated. Only if you use a const_interator, this is prevented. But this
83 * at the natural disadvantage that the reference may only be used in constant
84 * environment.
85 * Descriptors however may return non-const reference. And we rely heavily on
86 * these to cheaply give us the correct reference for a given id, element type,
87 * and so on. So how do we do this?
88 *
89 * Some of the descriptors are friends of the World and may use its internal
90 * containers directly, see AtomSelectionDescriptor_impl. Thus it can quickly
91 * walk through the atoms and find the correct one without causing huge delays
92 * by unnecessarily calling forth an update().
93 *
94 *
95 * \date 2012-01-06
96 *
97 */
Note: See TracBrowser for help on using the repository browser.