IMP  2.1.0
The Integrative Modeling Platform
TALOSRestraint.h
Go to the documentation of this file.
1 /**
2  * \file IMP/isd/TALOSRestraint.h
3  * \brief TALOS dihedral restraint between four particles.
4  *
5  * Copyright 2007-2013 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPISD_TALOS_RESTRAINT_H
10 #define IMPISD_TALOS_RESTRAINT_H
11 
12 #include <IMP/isd/isd_config.h>
13 #include "Scale.h"
14 #include "vonMisesSufficient.h"
15 
16 #include <IMP/kernel/Restraint.h>
17 #include <IMP/kernel/Particle.h>
18 
19 IMPISD_BEGIN_NAMESPACE
20 
21 //! phi/psi dihedral restraint between four particles, using data from TALOS.
22 /** The likelihood is
23  \f[
24  f(\chi_{exp}^1,\cdots,\chi_{exp}^N|\chi(X),\kappa,I)
25  = \frac{1}{2\pi I_0(\kappa)^N}
26  \exp \left(R_0 \kappa \cos (\chi_{exp}-\chi(X)) \right)
27  \f]
28  where the sufficient statistics are \f$N\f$ the number of observations,
29  \f$R\f$ and \f$\chi_{exp}\f$.
30  \see vonMisesSufficient.h for further detail.
31 */
32 class IMPISDEXPORT TALOSRestraint : public kernel::Restraint
33 {
34 public:
35 
36  //! Create restraint from a list of particles and the data.
37  /** \param[in] m the Model
38  \param[in] p list of 4 particles that make the dihedral angle.
39  \param[in] data list of observations for that angle.
40  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
41  */
43  kernel::Particle *kappa);
44 
45  //! Create restraint from 4 particles and the data.
46  /** \param[in] m the Model
47  \param[in] p1 Pointer to first particle in dihedral restraint.
48  \param[in] p2 Pointer to second particle in dihedral restraint.
49  \param[in] p3 Pointer to third particle in dihedral restraint.
50  \param[in] p4 Pointer to fourth particle in dihedral restraint.
51  \param[in] data list of observations for that angle.
52  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
53  */
56  kernel::Particle *kappa);
57 
58  //! Create restraint from a list of particles and the sufficient statistics.
59  /** \param[in] m the Model
60  \param[in] p list of 4 particles that make the dihedral angle.
61  \param[in] N Number of observations
62  \param[in] R0 component on the x axis
63  \param[in] chiexp average observed angle.
64  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
65  */
66  TALOSRestraint(kernel::Model *m, kernel::Particles p, unsigned N, double R0,
67  double chiexp, kernel::Particle *kappa);
68 
69  //! Create restraint from 4 particles and the sufficient statistics.
70  /** \param[in] m the Model
71  \param[in] p1 Pointer to first particle in dihedral restraint.
72  \param[in] p2 Pointer to second particle in dihedral restraint.
73  \param[in] p3 Pointer to third particle in dihedral restraint.
74  \param[in] p4 Pointer to fourth particle in dihedral restraint.
75  \param[in] N Number of observations
76  \param[in] R0 component on the x axis
77  \param[in] chiexp average observed angle.
78  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
79  */
81  kernel::Particle* p3, kernel::Particle *p4, unsigned N, double R0,
82  double chiexp, kernel::Particle *kappa);
83 
84 
85  //! Call for probability
86  double get_probability() const
87  {
88  return exp(-unprotected_evaluate(nullptr));
89  }
90 
91  double get_R0() const
92  {
93  return mises_->get_R0();
94  }
95 
96  double get_chiexp() const
97  {
98  return mises_->get_chiexp();
99  }
100 
101  virtual double
102  unprotected_evaluate(IMP::kernel::DerivativeAccumulator *accum)
103  const IMP_OVERRIDE;
104  virtual IMP::kernel::ModelObjectsTemp do_get_inputs() const IMP_OVERRIDE;
106 
107 private:
108  base::Pointer<kernel::Particle> p_[4];
109  base::Pointer<kernel::Particle> kappa_;
110  base::Pointer<vonMisesSufficient> mises_;
111 };
112 
113 IMPISD_END_NAMESPACE
114 
115 #endif /* IMPISD_TALOS_RESTRAINT_H */
Normal distribution of Function.
Class for adding derivatives from restraints to the model.
A decorator for scale parameters particles.
double get_probability() const
Call for probability.
Abstract base class for all restraints.
A restraint is a term in an IMP ScoringFunction.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
Class to handle individual model particles.
phi/psi dihedral restraint between four particles, using data from TALOS.
Classes to handle individual model particles.
virtual ModelObjectsTemp do_get_inputs() const =0
Class for storing model, its restraints, constraints, and particles.