Kernel bounding for AT modified.
This commit is contained in:
+10
-77
@@ -26,101 +26,34 @@ class AxilrodTeller {
|
||||
const core::gnp::TripleRangeDistanceSq &range_in) const {
|
||||
|
||||
const arma::mat &min_distance_sq = range_in.min_distance_sq();
|
||||
const arma::mat &max_distance_sq = range_in.max_distance_sq();
|
||||
double numerator_first_part =
|
||||
-3.0 * core::math::Pow<3, 1>(max_distance_sq.at(0, 1));
|
||||
double max_diff =
|
||||
std::max(
|
||||
fabs(
|
||||
max_distance_sq.at(0, 2) - min_distance_sq.at(1, 2)),
|
||||
fabs(
|
||||
min_distance_sq.at(0, 2) - max_distance_sq.at(1, 2)));
|
||||
|
||||
double numerator_second_part =
|
||||
-3.0 * core::math::Sqr(max_diff) *
|
||||
(max_distance_sq.at(0, 2) + max_distance_sq.at(1, 2));
|
||||
|
||||
double denominator = 8.0 * pow(
|
||||
min_distance_sq.at(0, 1) *
|
||||
min_distance_sq.at(0, 2) *
|
||||
min_distance_sq.at(1, 2), 2.5);
|
||||
|
||||
return (numerator_first_part + numerator_second_part) / denominator /
|
||||
normalizing_constant_;
|
||||
return -2 / pow(
|
||||
min_distance_sq.at(0, 1) *
|
||||
min_distance_sq.at(0, 2) *
|
||||
min_distance_sq.at(1, 2), 1.5) / normalizing_constant_;
|
||||
}
|
||||
|
||||
double maximum_negative_contribution(
|
||||
const core::gnp::TripleRangeDistanceSq &range_in) const {
|
||||
|
||||
const arma::mat &min_distance_sq = range_in.min_distance_sq();
|
||||
const arma::mat &max_distance_sq = range_in.max_distance_sq();
|
||||
double numerator_first_part =
|
||||
-3.0 * core::math::Pow<3, 1>(min_distance_sq.at(0, 1));
|
||||
double numerator_second_part = 0;
|
||||
if(max_distance_sq.at(0, 2) <= min_distance_sq.at(1, 2) ||
|
||||
max_distance_sq.at(1, 2) <= min_distance_sq.at(0, 2)) {
|
||||
double difference =
|
||||
std::min(
|
||||
fabs(min_distance_sq.at(1, 2) - max_distance_sq.at(0, 2)),
|
||||
fabs(min_distance_sq.at(0, 2) - max_distance_sq.at(1, 2)));
|
||||
numerator_second_part =
|
||||
-3.0 * core::math::Sqr(difference) *
|
||||
(min_distance_sq.at(0, 2) + min_distance_sq.at(1, 2));
|
||||
}
|
||||
|
||||
double denominator = 8.0 * pow(
|
||||
max_distance_sq.at(0, 1) *
|
||||
max_distance_sq.at(0, 2) *
|
||||
max_distance_sq.at(1, 2), 2.5);
|
||||
|
||||
return (numerator_first_part + numerator_second_part) / denominator /
|
||||
normalizing_constant_;
|
||||
return 0;
|
||||
}
|
||||
|
||||
double minimum_positive_contribution(
|
||||
const core::gnp::TripleRangeDistanceSq &range_in) const {
|
||||
|
||||
const arma::mat &min_distance_sq = range_in.min_distance_sq();
|
||||
const arma::mat &max_distance_sq = range_in.max_distance_sq();
|
||||
double numerator_first_part =
|
||||
3.0 * core::math::Sqr(min_distance_sq.at(0, 1)) *
|
||||
(min_distance_sq.at(0, 2) + min_distance_sq.at(1, 2));
|
||||
double numerator_second_part =
|
||||
min_distance_sq.at(0, 1) * (
|
||||
3.0 * core::math::Sqr(min_distance_sq.at(0, 2)) +
|
||||
2.0 * min_distance_sq.at(0, 2) * min_distance_sq.at(1, 2) +
|
||||
3.0 * core::math::Sqr(min_distance_sq.at(1, 2)));
|
||||
|
||||
double denominator = 8.0 * pow(
|
||||
max_distance_sq.at(0, 1) *
|
||||
max_distance_sq.at(0, 2) *
|
||||
max_distance_sq.at(1, 2), 2.5);
|
||||
|
||||
return (numerator_first_part + numerator_second_part) / denominator /
|
||||
normalizing_constant_;
|
||||
return 0;
|
||||
}
|
||||
|
||||
double maximum_positive_contribution(
|
||||
const core::gnp::TripleRangeDistanceSq &range_in) const {
|
||||
|
||||
const arma::mat &min_distance_sq = range_in.min_distance_sq();
|
||||
const arma::mat &max_distance_sq = range_in.max_distance_sq();
|
||||
double numerator_first_part =
|
||||
3.0 * core::math::Sqr(max_distance_sq.at(0, 1)) *
|
||||
(max_distance_sq.at(0, 2) + max_distance_sq.at(1, 2));
|
||||
double numerator_second_part =
|
||||
max_distance_sq.at(0, 1) * (
|
||||
3.0 * core::math::Sqr(max_distance_sq.at(0, 2)) +
|
||||
2.0 * max_distance_sq.at(0, 2) * max_distance_sq.at(1, 2) +
|
||||
3.0 * core::math::Sqr(max_distance_sq.at(1, 2)));
|
||||
|
||||
double denominator = 8.0 * pow(
|
||||
min_distance_sq.at(0, 1) *
|
||||
min_distance_sq.at(0, 2) *
|
||||
min_distance_sq.at(1, 2), 2.5);
|
||||
|
||||
return (numerator_first_part + numerator_second_part) / denominator /
|
||||
normalizing_constant_;
|
||||
return 1.375 / pow(
|
||||
min_distance_sq.at(0, 1) *
|
||||
min_distance_sq.at(0, 2) *
|
||||
min_distance_sq.at(1, 2), 1.5) / normalizing_constant_;
|
||||
}
|
||||
|
||||
core::math::Range RangeUnnormOnSq(
|
||||
|
||||
Reference in New Issue
Block a user