IMP  2.2.1
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-2014 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  public:
34  //! Create restraint from a list of particles and the data.
35  /** \param[in] m the Model
36  \param[in] p list of 4 particles that make the dihedral angle.
37  \param[in] data list of observations for that angle.
38  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
39  */
41  kernel::Particle *kappa);
42 
43  //! Create restraint from 4 particles and the data.
44  /** \param[in] m the Model
45  \param[in] p1 Pointer to first particle in dihedral restraint.
46  \param[in] p2 Pointer to second particle in dihedral restraint.
47  \param[in] p3 Pointer to third particle in dihedral restraint.
48  \param[in] p4 Pointer to fourth particle in dihedral restraint.
49  \param[in] data list of observations for that angle.
50  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
51  */
54  kernel::Particle *kappa);
55 
56  //! Create restraint from a list of particles and the sufficient statistics.
57  /** \param[in] m the Model
58  \param[in] p list of 4 particles that make the dihedral angle.
59  \param[in] N Number of observations
60  \param[in] R0 component on the x axis
61  \param[in] chiexp average observed angle.
62  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
63  */
64  TALOSRestraint(kernel::Model *m, kernel::Particles p, unsigned N, double R0,
65  double chiexp, kernel::Particle *kappa);
66 
67  //! Create restraint from 4 particles and the sufficient statistics.
68  /** \param[in] m the Model
69  \param[in] p1 Pointer to first particle in dihedral restraint.
70  \param[in] p2 Pointer to second particle in dihedral restraint.
71  \param[in] p3 Pointer to third particle in dihedral restraint.
72  \param[in] p4 Pointer to fourth particle in dihedral restraint.
73  \param[in] N Number of observations
74  \param[in] R0 component on the x axis
75  \param[in] chiexp average observed angle.
76  \param[in] kappa Pointer to the \f$\kappa\f$ concentration particle.
77  */
79  kernel::Particle *p3, kernel::Particle *p4, unsigned N,
80  double R0, double chiexp, kernel::Particle *kappa);
81 
82  //! Call for probability
83  double get_probability() const { return exp(-unprotected_evaluate(nullptr)); }
84 
85  double get_R0() const { return mises_->get_R0(); }
86 
87  double get_chiexp() const { return mises_->get_chiexp(); }
88 
89  virtual double unprotected_evaluate(IMP::kernel::DerivativeAccumulator *accum)
90  const IMP_OVERRIDE;
91  virtual IMP::kernel::ModelObjectsTemp do_get_inputs() const IMP_OVERRIDE;
93 
94  private:
95  base::Pointer<kernel::Particle> p_[4];
96  base::Pointer<kernel::Particle> kappa_;
97  base::Pointer<vonMisesSufficient> mises_;
98 };
99 
100 IMPISD_END_NAMESPACE
101 
102 #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.
Definition: kernel/Model.h:72