/
UniformPrior.h
64 lines (49 loc) · 1.53 KB
/
UniformPrior.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* \file IMP/isd/UniformPrior.h
* \brief A restraint on a scale parameter.
*
* Copyright 2007-2023 IMP Inventors. All rights reserved.
*
*/
#ifndef IMPISD_UNIFORM_PRIOR_H
#define IMPISD_UNIFORM_PRIOR_H
#include <IMP/isd/isd_config.h>
#include <IMP/SingletonScore.h>
#include <IMP/Restraint.h>
#include <cereal/access.hpp>
#include <cereal/types/base_class.hpp>
IMPISD_BEGIN_NAMESPACE
//! Uniform distribution with harmonic boundaries
class IMPISDEXPORT UniformPrior : public Restraint
{
ParticleIndex pi_;
double upperb_;
double lowerb_;
double k_;
friend class cereal::access;
template<class Archive> void serialize(Archive &ar) {
ar(cereal::base_class<Restraint>(this), pi_, upperb_, lowerb_, k_);
}
IMP_OBJECT_SERIALIZE_DECL(UniformPrior);
public:
//! Create the restraint.
UniformPrior(IMP::Model* m, Particle *p, double k, double upperb,
double lowerb, std::string name="UniformPrior%1%");
UniformPrior() {}
virtual double
unprotected_evaluate(IMP::DerivativeAccumulator *accum)
const override;
virtual IMP::ModelObjectsTemp do_get_inputs() const override;
IMP_OBJECT_METHODS(UniformPrior);
/* call for probability */
virtual double get_probability() const
{
return exp(-unprotected_evaluate(nullptr));
}
//! \return Information for writing to RMF files
RestraintInfo *get_static_info() const override;
//! \return Information for writing to RMF files
RestraintInfo *get_dynamic_info() const override;
};
IMPISD_END_NAMESPACE
#endif /* IMPISD_UNIFORM_PRIOR_H */