Changeset 9ec12c
- Timestamp:
- Sep 10, 2016, 4:14:02 PM (9 years ago)
- Branches:
- SaturateAtoms_singleDegree
- Children:
- aa91e63
- Parents:
- 899cc9
- git-author:
- Frederik Heber <heber@…> (05/10/16 21:50:32)
- git-committer:
- Frederik Heber <heber@…> (09/10/16 16:14:02)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/AtomAction/SaturateAction.cpp
r899cc9 r9ec12c 84 84 // check for any bonds and get vacant positions 85 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 // } 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 SphericalPointDistribution::Polygon_t current_positions; 94 int number_vacant_positions = _atom->getType()->getNoValenceOrbitals(); 95 for (BondList::const_iterator bonditer = ListOfBonds.begin(); 96 bonditer != ListOfBonds.end(); ++bonditer) { 97 const Vector position = 98 (*bonditer)->GetOtherAtom(_atom)->getPosition().getVectorToPoint(_atom->getPosition()); 99 current_positions.push_back((1./position.Norm())*position); 100 number_vacant_positions -= (*bonditer)->getDegree() - 1; 101 } 102 LOG(3, "DEBUG: current occupied positions are " << current_positions); 103 ASSERT( number_vacant_positions >= 0, 104 "AtomSaturateAction::performCall() - negative number of vacant positions?"); 105 LOG(3, "DEBUG: There remain " << number_vacant_positions << " vacant positions."); 106 107 const SphericalPointDistribution::Polygon_t ideal_positions = 108 PointSphere.getSimplePolygon(number_vacant_positions); 109 LOG(3, "DEBUG: ideal positions are " << ideal_positions); 110 111 // find the best matching rotated polygon 112 vacant_positions = SphericalPointDistribution::matchSphericalPointDistributions( 113 current_positions, 114 ideal_positions); 115 LOG(3, "DEBUG: Resulting vacant positions are " << vacant_positions); 116 117 // scale vacant positions to typical_distance 118 std::for_each( 119 vacant_positions.begin(), vacant_positions.end(), 120 boost::bind(&Vector::Scale, _1, boost::cref(typical_distance))); 121 } 116 122 117 123 // add the hydrogens
Note:
See TracChangeset
for help on using the changeset viewer.