00001
00002
00003
00004
00005
00006
00007 #ifndef IMPCORE_HARMONIC_H
00008 #define IMPCORE_HARMONIC_H
00009
00010 #include "core_config.h"
00011 #include <IMP/UnaryFunction.h>
00012 #include <IMP/utility.h>
00013
00014 IMPCORE_BEGIN_NAMESPACE
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 class Harmonic : public UnaryFunction
00025 {
00026 public:
00027
00028 Harmonic(Float mean, Float k) : mean_(mean), k_(k) {}
00029
00030 IMP_UNARY_FUNCTION_INLINE(Harmonic,
00031 0.5 * k_ * square(feature-mean_),
00032 k_*(feature - mean_),
00033 "Harmonic: " << mean_ << " and " << k_
00034 << std::endl);
00035
00036
00037 Float get_mean() const {
00038 return mean_;
00039 }
00040
00041
00042 Float get_k() const {
00043 return k_;
00044 }
00045
00046
00047 void set_mean(Float mean) {
00048 mean_ = mean;
00049 }
00050
00051
00052 void set_k(Float k) {
00053 k_ = k;
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 static Float k_from_standard_deviation(Float sd, Float t=297.15) {
00068
00069 const static Float R = 8.31441 / 4186.8;
00070 return R * t / square(sd);
00071 }
00072
00073 private:
00074 Float mean_;
00075 Float k_;
00076 };
00077
00078 IMPCORE_END_NAMESPACE
00079
00080 #endif