IMP logo
IMP Reference Guide  2.7.0
The Integrative Modeling Platform
score_functor/HarmonicLowerBound.h
Go to the documentation of this file.
1 /**
2  * \file IMP/score_functor/HarmonicLowerBound.h
3  * \brief A harmonic score on the negative directed distance between
4  * a pair of particles. The score equals zero for
5  * non-negative directed distances.
6  * .
7  *
8  * Copyright 2007-2017 IMP Inventors. All rights reserved.
9  */
10 
11 #ifndef IMPSCORE_FUNCTOR_HARMONIC_LOWER_BOUND_H
12 #define IMPSCORE_FUNCTOR_HARMONIC_LOWER_BOUND_H
13 
14 #include <IMP/score_functor/score_functor_config.h>
15 #include "Score.h"
16 #include <IMP/algebra/utility.h>
17 IMPSCOREFUNCTOR_BEGIN_NAMESPACE
18 
19 /** A harmonic score on the negative directed distance between
20  a pair of particles. The score equals zero for
21  non-negative directed distances.
22 */
23 class HarmonicLowerBound : public Score {
24  double k_;
25 
26  public:
27  HarmonicLowerBound(double k) : k_(k) {}
28  template <unsigned int D>
29  double get_score(Model *,
31  double distance) const {
32  if (distance > 0) return 0;
33  return .5 * k_ * algebra::get_squared(distance);
34  }
35  template <unsigned int D>
36  DerivativePair get_score_and_derivative(
37  Model *m, const Array<D, ParticleIndex> &p,
38  double distance) const {
39  if (distance > 0) return DerivativePair(0, 0);
40  return DerivativePair(get_score(m, p, distance), k_ * (distance));
41  }
42  template <unsigned int D>
43  double get_maximum_range(
44  Model *, const Array<D, ParticleIndex> &) const {
45  return 0;
46  }
47  template <unsigned int D>
48  bool get_is_trivially_zero(Model *,
50  double squared_distance) const {
51  return squared_distance > 0;
52  }
53 };
54 
55 IMPSCOREFUNCTOR_END_NAMESPACE
56 
57 #endif /* IMPSCORE_FUNCTOR_HARMONIC_LOWER_BOUND_H */
A class to store an fixed array of same-typed values.
Definition: Array.h:33
Class for storing model, its restraints, constraints, and particles.
Definition: Model.h:72
Functions to deal with very common math operations.
A Score on the distance between a pair of particles.
std::pair< double, double > DerivativePair
A pair representing a function value with its first derivative.
Definition: types.h:23
A functor for computing a distance based score for two particles.
Definition: Score.h:20