Changeset 0c42f2 for src/Actions
- Timestamp:
- Sep 12, 2016, 2:03:11 PM (8 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, 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_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, GeometryObjects, Gui_displays_atomic_force_velocity, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, Ubuntu_1604_changes, stable
- Children:
- 6cb1cd
- Parents:
- 64cafb2
- git-author:
- Frederik Heber <heber@…> (05/10/16 20:04:47)
- git-committer:
- Frederik Heber <heber@…> (09/12/16 14:03:11)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/AtomAction/SaturateAction.cpp
r64cafb2 r0c42f2 75 75 } 76 76 ASSERT( mol != NULL, 77 " ChangeElementAction::performCall() - mol is still NULL." );77 "AtomSaturateAction::performCall() - mol is still NULL." ); 78 78 79 // // add the hydrogens 80 // const Vector AtomsPosition = _atom->getPosition(); 81 // double typical_distance = _atom->getType()->getHBondDistance(0); 82 // if (typical_distance == -1.) 83 // typical_distance = 1.; 84 // SphericalPointDistribution PointSphere(typical_distance); 85 // PointSphere.initSelf(_atom->getType()->getNoValenceOrbitals()); 86 // for (SphericalPointDistribution::Polygon_t::const_iterator iter = PointSphere.points.begin(); 87 // iter != PointSphere.points.end(); ++iter) { 88 // // for every Vector add a point relative to atom's position 89 // atom * hydrogenAtom = World::getInstance().createAtom(); 90 // hydrogenAtom->setType(hydrogen); 91 // hydrogenAtom->setPosition(AtomsPosition + *iter); 92 // mol->AddAtom(hydrogenAtom); 93 // // add bond 94 // _atom->addBond(WorldTime::getTime(), hydrogenAtom); 95 // // mark down for undo state 96 // addedHydrogens.push_back(AtomicInfo(*(hydrogenAtom))); 97 // } 79 // radius of polygon on sphere 80 double typical_distance = _atom->getType()->getHBondDistance(0); 81 if (typical_distance == -1.) 82 typical_distance = 1.; 83 84 // check for any bonds and get vacant positions 85 SphericalPointDistribution::Polygon_t vacant_positions; 86 const BondList& ListOfBonds = _atom->getListOfBonds(); 87 SphericalPointDistribution PointSphere(typical_distance); 88 if (ListOfBonds.size() == 0) { 89 vacant_positions = PointSphere.getSimplePolygon(_atom->getType()->getNoValenceOrbitals()); 90 LOG(3, "DEBUG: Using ideal positions as " << vacant_positions); 91 } else { 92 // get ideal polygon and currently occupied positions 93 const SphericalPointDistribution::Polygon_t ideal_positions = 94 PointSphere.getSimplePolygon(_atom->getType()->getNoValenceOrbitals()); 95 LOG(3, "DEBUG: ideal positions are " << ideal_positions); 96 SphericalPointDistribution::Polygon_t current_positions; 97 for (BondList::const_iterator bonditer = ListOfBonds.begin(); 98 bonditer != ListOfBonds.end(); ++bonditer) { 99 const Vector position = 100 (*bonditer)->GetOtherAtom(_atom)->getPosition().getVectorToPoint(_atom->getPosition()); 101 current_positions.push_back((1./position.Norm())*position); 102 } 103 LOG(3, "DEBUG: current occupied positions are " << current_positions); 104 105 // find the best matching rotated polygon 106 vacant_positions = SphericalPointDistribution::matchSphericalPointDistributions( 107 current_positions, 108 ideal_positions); 109 LOG(3, "DEBUG: Resulting vacant positions are " << vacant_positions); 110 111 // scale vacant positions to typical_distance 112 std::for_each( 113 vacant_positions.begin(), vacant_positions.end(), 114 boost::bind(&Vector::Scale, _1, boost::cref(typical_distance))); 115 } 116 117 // add the hydrogens 118 const Vector AtomsPosition = _atom->getPosition(); 119 for (SphericalPointDistribution::Polygon_t::const_iterator iter = vacant_positions.begin(); 120 iter != vacant_positions.end(); ++iter) { 121 // for every Vector add a point relative to atom's position 122 atom * hydrogenAtom = World::getInstance().createAtom(); 123 hydrogenAtom->setType(hydrogen); 124 hydrogenAtom->setPosition(AtomsPosition + *iter); 125 mol->AddAtom(hydrogenAtom); 126 // add bond 127 _atom->addBond(WorldTime::getTime(), hydrogenAtom); 128 // mark down for undo state 129 addedHydrogens.push_back(AtomicInfo(*(hydrogenAtom))); 130 } 98 131 } 99 132
Note:
See TracChangeset
for help on using the changeset viewer.