Changeset c39675 for src/Fragmentation/Exporters/SaturatedFragment.hpp
- Timestamp:
- Apr 8, 2013, 11:56:08 AM (12 years ago)
- Branches:
- 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
- Children:
- 7cdf58
- Parents:
- 6cabaac
- git-author:
- Frederik Heber <heber@…> (03/03/13 21:15:14)
- git-committer:
- Frederik Heber <heber@…> (04/08/13 11:56:08)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Fragmentation/Exporters/SaturatedFragment.hpp
r6cabaac rc39675 14 14 #endif 15 15 16 #include <iosfwd> 16 17 #include <set> 18 #include <string> 17 19 20 #include "Bond/bond.hpp" 18 21 #include "Fragmentation/KeySet.hpp" 22 #include "Fragmentation/HydrogenSaturation_enum.hpp" 23 #include "Parser/FormatParserStorage.hpp" 19 24 25 class atom; 20 26 class HydrogenPool; 21 27 … … 46 52 const KeySet &_set, 47 53 KeySetsInUse_t &_container, 48 HydrogenPool &_hydrogens); 54 HydrogenPool &_hydrogens, 55 const enum HydrogenTreatment _treatment, 56 const enum HydrogenSaturation saturation); 49 57 50 58 /** Destructor of class SaturatedFragment. … … 62 70 } 63 71 72 /** Getter for the FullMolecule this instance is associated with. 73 * 74 * \return const ref to FullMolecule 75 */ 76 const KeySet & getFullMolecule() const 77 { 78 return FullMolecule; 79 } 80 81 /** Getter for the SaturationHydrogens this instance is associated with. 82 * 83 * \return const ref to SaturationHydrogens 84 */ 85 const KeySet & getSaturationHydrogens() const 86 { 87 return SaturationHydrogens; 88 } 89 90 /** Prints the config of the fragment of \a _type to \a out. 91 * 92 * \param out output stream to write to 93 * \param _type parser type to write config 94 */ 95 bool OutputConfig( 96 std::ostream &out, 97 const ParserTypes _type) const; 98 99 private: 100 /** Helper function to lease and bring in place saturation hydrogens. 101 * 102 */ 103 void saturate(); 104 105 /** Helper function to get a hydrogen replacement for a given \a replacement. 106 * 107 * \param replacement atom to "replace" with hydrogen in a fragment. 108 * \return ref to leased hydrogen atom 109 */ 110 atom * const getHydrogenReplacement(atom * const replacement); 111 112 /** Leases and adds a Hydrogen atom in replacement for the given atom \a *partner in bond with a *origin. 113 * Here, we have to distinguish between single, double or triple bonds as stated by \a BondDegree, that each demand 114 * a different scheme when adding \a *replacement atom for the given one. 115 * -# Single Bond: Simply add new atom with bond distance rescaled to typical hydrogen one 116 * -# Double Bond: Here, we need the **BondList of the \a *origin atom, by scanning for the other bonds instead of 117 * *Bond, we use the through these connected atoms to determine the plane they lie in, vector::MakeNormalvector(). 118 * The orthonormal vector to this plane along with the vector in *Bond direction determines the plane the two 119 * replacing hydrogens shall lie in. Now, all remains to do is take the usual hydrogen double bond angle for the 120 * element of *origin and form the sin/cos admixture of both plane vectors for the new coordinates of the two 121 * hydrogens forming this angle with *origin. 122 * -# Triple Bond: The idea is to set up a tetraoid (C1-H1-H2-H3) (however the lengths \f$b\f$ of the sides of the base 123 * triangle formed by the to be added hydrogens are not equal to the typical bond distance \f$l\f$ but have to be 124 * determined from the typical angle \f$\alpha\f$ for a hydrogen triple connected to the element of *origin): 125 * We have the height \f$d\f$ as the vector in *Bond direction (from triangle C1-H1-H2). 126 * \f[ h = l \cdot \cos{\left (\frac{\alpha}{2} \right )} \qquad b = 2l \cdot \sin{\left (\frac{\alpha}{2} \right)} \quad \rightarrow \quad d = l \cdot \sqrt{\cos^2{\left (\frac{\alpha}{2} \right)}-\frac{1}{3}\cdot\sin^2{\left (\frac{\alpha}{2}\right )}} 127 * \f] 128 * vector::GetNormalvector() creates one orthonormal vector from this *Bond vector and vector::MakeNormalvector creates 129 * the third one from the former two vectors. The latter ones form the plane of the base triangle mentioned above. 130 * The lengths for these are \f$f\f$ and \f$g\f$ (from triangle H1-H2-(center of H1-H2-H3)) with knowledge that 131 * the median lines in an isosceles triangle meet in the center point with a ratio 2:1. 132 * \f[ f = \frac{b}{\sqrt{3}} \qquad g = \frac{b}{2} 133 * \f] 134 * as the coordination of all three atoms in the coordinate system of these three vectors: 135 * \f$\pmatrix{d & f & 0}\f$, \f$\pmatrix{d & -0.5 \cdot f & g}\f$ and \f$\pmatrix{d & -0.5 \cdot f & -g}\f$. 136 * 137 * \param TopBond pointer to bond between \a *origin and \a *replacement 138 * \param Origin atom that is actually contained in the fragment 139 * \param Replacement pointer to the atom which shall be copied as a hydrogen atom in this molecule 140 * \param isAngstroem whether the coordination of the given atoms is in AtomicLength (false) or Angstrom(true) 141 * \return number of atoms added, if < bond::BondDegree then something went wrong 142 */ 143 bool AddHydrogenReplacementAtom( 144 bond::ptr TopBond, 145 atom *Origin, 146 atom *Replacement, 147 bool IsAngstroem); 148 64 149 private: 65 150 //!> container to mark ourselves RAII-style … … 73 158 //!> key set containing the ids of all hydrogens added for saturation 74 159 KeySet SaturationHydrogens; 160 //!> whether hydrogens are generally contained in set or not 161 const enum HydrogenTreatment treatment; 162 //!> whether to actually saturate or not 163 const enum HydrogenSaturation saturation; 75 164 }; 76 165
Note:
See TracChangeset
for help on using the changeset viewer.