27 #ifndef CDPL_UTIL_DGCOORDINATESGENERATOR_HPP
28 #define CDPL_UTIL_DGCOORDINATESGENERATOR_HPP
35 #include <boost/random/mersenne_twister.hpp>
36 #include <boost/random/uniform_real.hpp>
37 #include <boost/random/uniform_int.hpp>
55 template <std::
size_t Dim,
typename T,
typename Derived>
63 typedef std::vector<DistanceConstraint> DistanceConstraintList;
133 std::size_t point1Idx;
134 std::size_t point2Idx;
273 template <
typename CoordsArray>
274 void generate(std::size_t num_points, CoordsArray& coords);
282 template <
typename CoordsArray>
300 std::size_t getNumVolumeConstraints()
const;
302 template <
typename CoordsArray>
303 void embedCoords(std::size_t num_points, CoordsArray& coords);
305 template <
typename CoordsArray>
306 void adjCoordsForDistanceConstraint(CoordsArray& coords,
const ValueType& lambda, std::size_t constr_idx)
const;
308 template <
typename Vec>
311 template <
typename CoordsArray>
312 void adjCoordsForVolumeConstraint(CoordsArray& coords,
const ValueType& lambda, std::size_t constr_idx)
const;
314 template <
typename Vec>
315 static ValueType calcDiffVectorAndSquaredDist(
const Vec& pt1_pos,
const Vec& pt2_pos,
ValueType diff[]);
317 typedef boost::random::mt11213b RandNumEngine;
319 std::size_t numCycles;
320 double cycleStepCountFactor;
323 DistanceConstraintList distConstraints;
324 RandNumEngine randomEngine;
327 template <std::
size_t Dim,
typename T,
typename Derived>
330 template <std::
size_t Dim,
typename T,
typename Derived>
333 template <std::
size_t Dim,
typename T,
typename Derived>
336 template <std::
size_t Dim,
typename T,
typename Derived>
340 template <std::
size_t Dim,
typename T,
typename Derived>
351 template <std::
size_t Dim,
typename T>
361 template <
typename T>
369 class VolumeConstraint;
372 typedef std::vector<VolumeConstraint> VolumeConstraintList;
382 class VolumeConstraint
435 std::size_t point1Idx;
436 std::size_t point2Idx;
437 std::size_t point3Idx;
438 std::size_t point4Idx;
526 template <
typename CoordsArray>
530 template <
typename CoordsArray>
531 void adjCoordsForVolumeConstraint(CoordsArray& coords,
const ValueType& lambda, std::size_t constr_idx)
const;
533 template <
typename Vec>
534 void adjCoordsForConstraint(
const VolumeConstraint& constr, Vec& pt1_pos, Vec& pt2_pos, Vec& pt3_pos,
535 Vec& pt4_pos,
const ValueType& lambda)
const;
537 template <
typename Vec>
538 static void calcDiffVector(
const Vec& pt1_pos,
const Vec& pt2_pos,
ValueType diff[]);
540 VolumeConstraintList volConstraints;
552 template <std::
size_t Dim,
typename T,
typename Derived>
554 const ValueType& lb,
const ValueType& ub):
556 point2Idx(pt2_idx), lowerBound(lb), upperBound(ub)
559 template <std::
size_t Dim,
typename T,
typename Derived>
565 template <std::
size_t Dim,
typename T,
typename Derived>
571 template <std::
size_t Dim,
typename T,
typename Derived>
577 template <std::
size_t Dim,
typename T,
typename Derived>
583 template <std::
size_t Dim,
typename T,
typename Derived>
586 if (point1Idx < constr.point1Idx)
589 if (point1Idx == constr.point1Idx)
590 return (point2Idx < constr.point2Idx);
598 template <std::
size_t Dim,
typename T,
typename Derived>
600 numCycles(DEF_NUM_CYCLES), cycleStepCountFactor(DEF_CYCLE_STEP_COUNT_FACTOR), startLearningRate(DEF_START_LEARNING_RATE),
601 learningRateDecr(DEF_LEARNING_RATE_DECREMENT), randomEngine(170375)
604 template <std::
size_t Dim,
typename T,
typename Derived>
606 numCycles(gen.numCycles), cycleStepCountFactor(gen.cycleStepCountFactor),
607 startLearningRate(gen.startLearningRate), learningRateDecr(gen.learningRateDecr),
608 distConstraints(gen.distConstraints),
609 randomEngine(gen.randomEngine)
612 template <std::
size_t Dim,
typename T,
typename Derived>
619 numCycles = gen.numCycles;
620 cycleStepCountFactor = gen.cycleStepCountFactor;
621 startLearningRate = gen.startLearningRate;
622 learningRateDecr = gen.learningRateDecr;
623 distConstraints = gen.distConstraints;
624 randomEngine = gen.randomEngine;
629 template <std::
size_t Dim,
typename T,
typename Derived>
632 distConstraints.clear();
635 template <std::
size_t Dim,
typename T,
typename Derived>
637 const ValueType& lb,
const ValueType& ub)
639 distConstraints.push_back(DistanceConstraint(pt1_idx, pt2_idx, lb, ub));
642 template <std::
size_t Dim,
typename T,
typename Derived>
645 return distConstraints.size();
648 template <std::
size_t Dim,
typename T,
typename Derived>
652 if (idx >= distConstraints.size())
653 throw Base::IndexError(
"DGCoordinatesGeneratorBase: constraint index out of bounds");
655 return distConstraints[idx];
658 template <std::
size_t Dim,
typename T,
typename Derived>
662 if (idx >= distConstraints.size())
663 throw Base::IndexError(
"DGCoordinatesGeneratorBase: constraint index out of bounds");
665 return distConstraints[idx];
668 template <std::
size_t Dim,
typename T,
typename Derived>
671 if (idx >= distConstraints.size())
672 throw Base::IndexError(
"DGCoordinatesGeneratorBase: constraint index out of bounds");
674 distConstraints.erase(distConstraints.begin() + idx);
677 template <std::
size_t Dim,
typename T,
typename Derived>
680 if ((it - distConstraints.begin()) >= distConstraints.size())
681 throw Base::IndexError(
"DGCoordinatesGeneratorBase: constraint iterator out of bounds");
683 distConstraints.erase(it);
686 template <std::
size_t Dim,
typename T,
typename Derived>
690 return distConstraints.begin();
693 template <std::
size_t Dim,
typename T,
typename Derived>
697 return distConstraints.end();
700 template <std::
size_t Dim,
typename T,
typename Derived>
704 return distConstraints.begin();
707 template <std::
size_t Dim,
typename T,
typename Derived>
711 return distConstraints.end();
714 template <std::
size_t Dim,
typename T,
typename Derived>
717 numCycles = num_cycles;
720 template <std::
size_t Dim,
typename T,
typename Derived>
723 cycleStepCountFactor = fact;
726 template <std::
size_t Dim,
typename T,
typename Derived>
729 startLearningRate = rate;
732 template <std::
size_t Dim,
typename T,
typename Derived>
735 learningRateDecr = decr;
738 template <std::
size_t Dim,
typename T,
typename Derived>
744 template <std::
size_t Dim,
typename T,
typename Derived>
747 return cycleStepCountFactor;
750 template <std::
size_t Dim,
typename T,
typename Derived>
754 return startLearningRate;
757 template <std::
size_t Dim,
typename T,
typename Derived>
761 return learningRateDecr;
764 template <std::
size_t Dim,
typename T,
typename Derived>
767 randomEngine.seed(seed);
770 template <std::
size_t Dim,
typename T,
typename Derived>
771 template <
typename CoordsArray>
775 ValueType error = ValueType();
776 ValueType pos_diff[Dim];
778 for (
typename DistanceConstraintList::const_iterator it = distConstraints.begin(), end = distConstraints.end(); it != end; ++it) {
779 const DistanceConstraint& constr = *it;
781 ValueType dist_2 = calcDiffVectorAndSquaredDist(coords[constr.getPoint1Index()], coords[constr.getPoint2Index()], pos_diff);
782 ValueType dist = std::sqrt(dist_2);
783 ValueType lb = constr.getLowerBound();
784 ValueType ub = constr.getUpperBound();
786 if (dist >= lb && dist <= ub)
790 ValueType tmp = (dist_2 - lb * lb) / (0.000001 + lb * lb);
795 ValueType tmp = (dist_2 - ub * ub) / (0.000001 + ub * ub);
804 template <std::
size_t Dim,
typename T,
typename Derived>
810 template <std::
size_t Dim,
typename T,
typename Derived>
813 std::sort(distConstraints.begin(), distConstraints.end());
816 template <std::
size_t Dim,
typename T,
typename Derived>
817 template <
typename CoordsArray>
820 embedCoords(num_points, coords);
823 template <std::
size_t Dim,
typename T,
typename Derived>
824 template <
typename CoordsArray>
827 std::size_t num_dist_constrs = distConstraints.size();
828 std::size_t num_vol_constrs =
static_cast<Derived&
>(*this).getNumVolumeConstraints();
830 if ((num_dist_constrs + num_vol_constrs) == 0)
833 std::size_t num_steps = std::size_t((num_dist_constrs + num_vol_constrs) * cycleStepCountFactor);
834 ValueType lambda = startLearningRate;
836 if (num_dist_constrs > 0 && num_vol_constrs > 0) {
837 boost::random::uniform_int_distribution<std::size_t> constr_sd(0, num_dist_constrs + num_vol_constrs - 1);
839 for (std::size_t i = 0; i < numCycles; i++, lambda -= learningRateDecr) {
840 for (std::size_t j = 0; j < num_steps; j++) {
841 std::size_t constr_idx = constr_sd(randomEngine);
843 if (constr_idx < num_dist_constrs)
844 adjCoordsForDistanceConstraint(coords, lambda, constr_idx);
846 static_cast<Derived&
>(*this).template adjCoordsForVolumeConstraint<CoordsArray>(coords, lambda, constr_idx - num_dist_constrs);
853 if (num_dist_constrs > 0) {
854 boost::random::uniform_int_distribution<std::size_t> constr_sd(0, num_dist_constrs - 1);
856 for (std::size_t i = 0; i < numCycles; i++, lambda -= learningRateDecr)
857 for (std::size_t j = 0; j < num_steps; j++)
858 adjCoordsForDistanceConstraint(coords, lambda, constr_sd(randomEngine));
863 boost::random::uniform_int_distribution<std::size_t> constr_sd(0, num_vol_constrs - 1);
865 for (std::size_t i = 0; i < numCycles; i++, lambda -= learningRateDecr)
866 for (std::size_t j = 0; j < num_steps; j++)
867 static_cast<Derived&
>(*this).template adjCoordsForVolumeConstraint<CoordsArray>(coords, lambda, constr_sd(randomEngine));
870 template <std::
size_t Dim,
typename T,
typename Derived>
871 template <
typename CoordsArray>
873 std::size_t constr_idx)
const
875 const DistanceConstraint& constr = distConstraints[constr_idx];
877 adjCoordsForConstraint(constr, coords[constr.getPoint1Index()], coords[constr.getPoint2Index()], lambda);
880 template <std::
size_t Dim,
typename T,
typename Derived>
881 template <
typename Vec>
883 Vec& pt2_pos,
const ValueType& lambda)
const
885 ValueType pos_diff[Dim];
886 ValueType dist = std::sqrt(calcDiffVectorAndSquaredDist(pt1_pos, pt2_pos, pos_diff));
888 ValueType ub = constr.getUpperBound();
889 ValueType lb = constr.getLowerBound();
891 if (dist >= lb && dist <= ub)
894 ValueType bound = (dist > ub ? ub : lb);
895 ValueType factor = lambda / 2 * (bound - dist) / (0.000001 + dist);
897 for (std::size_t i = 0; i < Dim; i++) {
898 ValueType pos_delta = pos_diff[i] * factor;
900 pt1_pos[i] -= pos_delta;
901 pt2_pos[i] += pos_delta;
905 template <std::
size_t Dim,
typename T,
typename Derived>
906 template <
typename CoordsArray>
908 std::size_t constr_idx)
const
911 template <std::
size_t Dim,
typename T,
typename Derived>
912 template <
typename Vec>
916 ValueType dist_2 = ValueType();
918 for (std::size_t i = 0; i < Dim; i++) {
919 diff[i] = pt2_pos[i] - pt1_pos[i];
920 dist_2 += diff[i] * diff[i];
929 template <
typename T>
931 std::size_t pt3_idx, std::size_t pt4_idx,
932 const ValueType& lb,
const ValueType& ub):
934 point2Idx(pt2_idx), point3Idx(pt3_idx), point4Idx(pt4_idx), lowerBound(lb), upperBound(ub)
937 template <
typename T>
943 template <
typename T>
949 template <
typename T>
955 template <
typename T>
961 template <
typename T>
968 template <
typename T>
978 template <
typename T>
981 volConstraints.clear();
984 template <
typename T>
986 std::size_t pt4_idx,
const ValueType& lb,
const ValueType& ub)
988 volConstraints.push_back(VolumeConstraint(pt1_idx, pt2_idx, pt3_idx, pt4_idx, lb, ub));
991 template <
typename T>
994 return volConstraints.size();
997 template <
typename T>
1001 if (idx >= volConstraints.size())
1002 throw Base::IndexError(
"DGCoordinatesGenerator: constraint index out of bounds");
1004 return volConstraints[idx];
1007 template <
typename T>
1010 if (idx >= volConstraints.size())
1011 throw Base::IndexError(
"DGCoordinatesGenerator: constraint index out of bounds");
1013 volConstraints.erase(volConstraints.begin() + idx);
1016 template <
typename T>
1019 if ((it - volConstraints.begin()) >= volConstraints.size())
1020 throw Base::IndexError(
"DGCoordinatesGenerator: constraint iterator out of bounds");
1022 volConstraints.erase(it);
1025 template <
typename T>
1029 return volConstraints.begin();
1032 template <
typename T>
1036 return volConstraints.end();
1039 template <
typename T>
1043 return volConstraints.begin();
1046 template <
typename T>
1050 return volConstraints.end();
1053 template <
typename T>
1054 template <
typename CoordsArray>
1058 ValueType error = ValueType();
1063 for (
typename VolumeConstraintList::const_iterator it = volConstraints.begin(), end = volConstraints.end(); it != end; ++it) {
1064 const VolumeConstraint& constr = *it;
1066 calcDiffVector(coords[constr.getPoint4Index()], coords[constr.getPoint1Index()], v_41);
1067 calcDiffVector(coords[constr.getPoint4Index()], coords[constr.getPoint2Index()], v_42);
1068 calcDiffVector(coords[constr.getPoint4Index()], coords[constr.getPoint3Index()], v_43);
1070 ValueType vol = (v_41[0] * (v_42[1] * v_43[2] - v_42[2] * v_43[1]) - v_41[1] * (v_42[0] * v_43[2] - v_42[2] * v_43[0]) + v_41[2] * (v_42[0] * v_43[1] - v_42[1] * v_43[0])) / 6;
1072 ValueType lb = constr.getLowerBound();
1073 ValueType ub = constr.getUpperBound();
1075 if (vol >= lb && vol <= ub)
1079 ValueType tmp = (vol - lb);
1084 ValueType tmp = (vol - ub);
1093 template <
typename T>
1094 template <
typename CoordsArray>
1097 const VolumeConstraint& constr = volConstraints[constr_idx];
1099 adjCoordsForConstraint(constr, coords[constr.getPoint1Index()], coords[constr.getPoint2Index()],
1100 coords[constr.getPoint3Index()], coords[constr.getPoint4Index()], lambda);
1103 template <
typename T>
1104 template <
typename Vec>
1106 Vec& pt4_pos,
const ValueType& lambda)
const
1108 Vec* pt_pos[4] = {&pt1_pos, &pt2_pos, &pt3_pos, &pt4_pos};
1113 calcDiffVector(*pt_pos[3], *pt_pos[0], v_41);
1114 calcDiffVector(*pt_pos[3], *pt_pos[1], v_42);
1115 calcDiffVector(*pt_pos[3], *pt_pos[2], v_43);
1119 g[0][0] = (v_42[1] * v_43[2] - v_42[2] * v_43[1]) / 6;
1120 g[0][1] = -(v_42[0] * v_43[2] - v_42[2] * v_43[0]) / 6;
1121 g[0][2] = (v_42[0] * v_43[1] - v_42[1] * v_43[0]) / 6;
1123 ValueType vol = (v_41[0] * g[0][0] + v_41[1] * g[0][1] + v_41[2] * g[0][2]);
1124 ValueType ub = constr.getUpperBound();
1125 ValueType lb = constr.getLowerBound();
1127 if (vol >= lb && vol <= ub)
1130 g[1][0] = (v_41[2] * v_43[1] - v_41[1] * v_43[2]) / 6;
1131 g[1][1] = (v_41[0] * v_43[2] - v_41[2] * v_43[0]) / 6;
1132 g[1][2] = (v_41[1] * v_43[0] - v_41[0] * v_43[1]) / 6;
1134 g[2][0] = (v_41[1] * v_42[2] - v_41[2] * v_42[1]) / 6;
1135 g[2][1] = (v_41[2] * v_42[0] - v_41[0] * v_42[2]) / 6;
1136 g[2][2] = (v_41[0] * v_42[1] - v_41[1] * v_42[0]) / 6;
1138 g[3][0] = -g[0][0] - g[1][0] - g[2][0];
1139 g[3][1] = -g[0][1] - g[1][1] - g[2][1];
1140 g[3][2] = -g[0][2] - g[1][2] - g[2][2];
1142 ValueType g_len2_sum = ValueType();
1144 for (std::size_t i = 0; i < 4; i++)
1145 g_len2_sum += g[i][0] * g[i][0] + g[i][1] * g[i][1] + g[i][2] * g[i][2];
1147 ValueType bound = (vol < lb ? lb : ub);
1148 ValueType fact = lambda * (bound - vol) / g_len2_sum;
1150 for (std::size_t i = 0; i < 4; i++)
1151 for (std::size_t j = 0; j < 3; j++)
1152 (*pt_pos[i])[j] += fact * g[i][j];
1155 template <
typename T>
1156 template <
typename Vec>
1159 for (std::size_t i = 0; i < 3; i++)
1160 diff[i] = pt2_pos[i] - pt1_pos[i];
Definition of exception classes.
A constraint that pins the distance between two points to the interval [lb, ub].
Definition: DGCoordinatesGenerator.hpp:88
bool operator<(const DistanceConstraint &constr) const
Lexicographic less-than comparison on (point1Idx, point2Idx).
std::size_t getPoint1Index() const
Returns the index of the first constrained point.
std::size_t getPoint2Index() const
Returns the index of the second constrained point.
DistanceConstraint(std::size_t pt1_idx, std::size_t pt2_idx, const ValueType &lb, const ValueType &ub)
Constructs a distance constraint for the points with indices pt1_idx and pt2_idx whose Euclidean dist...
const ValueType & getLowerBound() const
Returns the lower distance bound.
const ValueType & getUpperBound() const
Returns the upper distance bound.
Serves as foundation for subclasses that perform coordinates generation based on distance-geometry.
Definition: DGCoordinatesGenerator.hpp:57
~DGCoordinatesGeneratorBase()
Definition: DGCoordinatesGenerator.hpp:295
std::size_t getNumCycles() const
Returns the currently configured number of optimization cycles.
void setNumCycles(std::size_t num_cycles)
Sets the number of optimization cycles.
DGCoordinatesGeneratorBase & operator=(const DGCoordinatesGeneratorBase &gen)
const ValueType & getStartLearningRate() const
Returns the currently configured initial learning rate.
void setCycleStepCountFactor(double fact)
Sets the multiplier that determines the per-cycle step count (steps per cycle = factor * number of co...
void setStartLearningRate(const ValueType &rate)
Sets the initial learning rate used by the first optimization cycle.
DistanceConstraint & getDistanceConstraint(std::size_t idx)
Returns the distance constraint at index idx.
static constexpr std::size_t DEF_NUM_CYCLES
Default number of optimization cycles.
Definition: DGCoordinatesGenerator.hpp:76
static constexpr double DEF_CYCLE_STEP_COUNT_FACTOR
Default per-cycle step-count multiplier (steps per cycle = factor * number of constraints).
Definition: DGCoordinatesGenerator.hpp:78
void addDistanceConstraint(std::size_t pt1_idx, std::size_t pt2_idx, const ValueType &lb, const ValueType &ub)
Appends a new distance constraint to the list of configured constraints.
void removeDistanceConstraint(std::size_t idx)
Removes the distance constraint at index idx.
std::size_t getNumDistanceConstraints() const
Returns the number of configured distance constraints.
void setRandomSeed(unsigned int seed)
Sets the seed of the internal random number generator used to initialize the coordinates.
DistanceConstraintList::iterator DistanceConstraintIterator
A mutable iterator over the configured distance constraints.
Definition: DGCoordinatesGenerator.hpp:67
const DistanceConstraint & getDistanceConstraint(std::size_t idx) const
Returns the distance constraint at index idx.
const ValueType & getLearningRateDecrement() const
Returns the currently configured per-cycle learning-rate decrement.
void removeDistanceConstraint(const DistanceConstraintIterator &it)
Removes the distance constraint referenced by iterator it.
ConstDistanceConstraintIterator getDistanceConstraintsBegin() const
Returns a constant iterator pointing to the first distance constraint.
void setLearningRateDecrement(const ValueType &decr)
Sets the per-cycle learning-rate decrement.
DistanceConstraintIterator getDistanceConstraintsEnd()
Returns a mutable iterator pointing one past the last distance constraint.
static constexpr ValueType DEF_LEARNING_RATE_DECREMENT
Default per-cycle decrement subtracted from the learning rate.
Definition: DGCoordinatesGenerator.hpp:82
void generate(std::size_t num_points, CoordsArray &coords)
Generates num_points coordinate vectors that try to satisfy the configured constraints and stores the...
void clearDistanceConstraints()
Removes all configured distance constraints.
static constexpr std::size_t COORDS_DIM
Dimensionality of the coordinate space.
Definition: DGCoordinatesGenerator.hpp:74
static constexpr ValueType DEF_START_LEARNING_RATE
Default initial learning rate.
Definition: DGCoordinatesGenerator.hpp:80
ValueType getDistanceError(const CoordsArray &coords) const
Computes the cumulative squared distance error of coords against the configured distance constraints.
double getCycleStepCountFactor() const
Returns the currently configured per-cycle step-count factor.
void orderDistanceConstraints()
Sorts the configured distance constraints in lexicographic order.
DistanceConstraintIterator getDistanceConstraintsBegin()
Returns a mutable iterator pointing to the first distance constraint.
DGCoordinatesGeneratorBase(const DGCoordinatesGeneratorBase &gen)
DGCoordinatesGeneratorBase()
DistanceConstraintList::const_iterator ConstDistanceConstraintIterator
A constant iterator over the configured distance constraints.
Definition: DGCoordinatesGenerator.hpp:69
T ValueType
The scalar value type used for coordinates and constraint bounds.
Definition: DGCoordinatesGenerator.hpp:71
ConstDistanceConstraintIterator getDistanceConstraintsEnd() const
Returns a constant iterator pointing one past the last distance constraint.
std::size_t getPoint2Index() const
Returns the index of the second constrained point.
std::size_t getPoint4Index() const
Returns the index of the fourth constrained point.
const ValueType & getLowerBound() const
Returns the lower volume bound.
std::size_t getPoint3Index() const
Returns the index of the third constrained point.
std::size_t getPoint1Index() const
Returns the index of the first constrained point.
VolumeConstraint(std::size_t pt1_idx, std::size_t pt2_idx, std::size_t pt3_idx, std::size_t pt4_idx, const ValueType &lb, const ValueType &ub)
Constructs a volume constraint for the tetrahedron spanned by the four points with the given indices.
const ValueType & getUpperBound() const
Returns the upper volume bound.
const VolumeConstraint & getVolumeConstraint(std::size_t idx) const
Returns the volume constraint at index idx.
VolumeConstraintList::iterator VolumeConstraintIterator
Definition: DGCoordinatesGenerator.hpp:376
VolumeConstraintIterator getVolumeConstraintsBegin()
Returns a mutable iterator pointing to the first volume constraint.
VolumeConstraint & getVolumeConstraint(std::size_t idx)
Returns the volume constraint at index idx.
void removeVolumeConstraint(const VolumeConstraintIterator &it)
Removes the volume constraint referenced by iterator it.
ValueType getVolumeError(const CoordsArray &coords) const
Computes the cumulative volume error of coords against the configured volume constraints.
void removeVolumeConstraint(std::size_t idx)
Removes the volume constraint at index idx.
VolumeConstraintList::const_iterator ConstVolumeConstraintIterator
Definition: DGCoordinatesGenerator.hpp:377
void addVolumeConstraint(std::size_t pt1_idx, std::size_t pt2_idx, std::size_t pt3_idx, std::size_t pt4_idx, const ValueType &lb, const ValueType &ub)
Appends a new volume constraint to the list of configured constraints.
std::size_t getNumVolumeConstraints() const
Returns the number of configured volume constraints.
ConstVolumeConstraintIterator getVolumeConstraintsBegin() const
Returns a constant iterator pointing to the first volume constraint.
ConstVolumeConstraintIterator getVolumeConstraintsEnd() const
Returns a constant iterator pointing one past the last volume constraint.
void clearVolumeConstraints()
Removes all configured volume constraints.
BaseType::ValueType ValueType
Definition: DGCoordinatesGenerator.hpp:375
VolumeConstraintIterator getVolumeConstraintsEnd()
Returns a mutable iterator pointing one past the last volume constraint.
Generic distance-geometry implementation for the generation of coordinates that fulfill user-provided...
Definition: DGCoordinatesGenerator.hpp:353
constexpr unsigned int T
Specifies Hydrogen (Tritium).
Definition: AtomType.hpp:67
DGCoordinatesGenerator< 3, double > DG3DCoordinatesGenerator
Convenience alias for the 3D coordinates generator with double-precision values.
Definition: DGCoordinatesGenerator.hpp:544
The namespace of the Chemical Data Processing Library.