IMP logo
IMP Reference Guide  2.14.0
The Integrative Modeling Platform
FretRestraint.h
Go to the documentation of this file.
1 /**
2  * \file IMP/isd/FretRestraint.h
3  * \brief FRET_R restraint to use in vivo FRET data.
4  *
5  * Copyright 2007-2020 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPISD_FRET_RESTRAINT_H
10 #define IMPISD_FRET_RESTRAINT_H
11 #include <IMP/isd/Scale.h>
12 #include "isd_config.h"
13 #include <IMP/Restraint.h>
14 #include <IMP/isd/FretData.h>
15 
16 IMPISD_BEGIN_NAMESPACE
17 /** A restraint for using in-vivo ensemble FRET data.
18  See [Muller et al. Mol Biol Cell
19  16, 3341, 2005](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1165416/)
20  for more info.
21  */
22 
23 class IMPISDEXPORT FretRestraint : public Restraint {
24  Particles pd_;
25  Particles pa_;
26  Pointer<Particle> prd_;
27  algebra::Vector3D GMMterd_;
28  algebra::Vector3Ds GMMctrd_;
29  Pointer<Particle> pra_;
30  algebra::Vector3D GMMtera_;
31  algebra::Vector3Ds GMMctra_;
32  Pointer<Particle> kda_;
33  Pointer<Particle> Ida_;
35  Pointer<Particle> sumFi_;
36  Pointer<Particle> sigma0_;
37  Pointer<Particle> Pbl_;
39  double fexp_;
40  double multi_d_;
41  int constr_type_;
42  Floats GMMsig_;
43  Floats GMMw_;
44  unsigned Na_;
45  mutable Floats power6_;
46  std::vector<std::vector<unsigned> > states_;
47 
48  double get_sumFi(double Pbleach) const;
49  std::vector<unsigned> get_indices(unsigned index, int dimension) const;
50 
51  public:
52  //! Create the restraint.
54  Particle *kda, Particle *Ida,
55  Particle *R0, Particle *sigma0,
56  Particle *Pbl, double fexp, double m_d = 1.0,
57  double m_a = 1.0);
58 
59  FretRestraint(Particle *kda, Particle *Ida,
60  Particle *sumFi, Particle *sigma0,
61  Particle *Pbl, double fexp);
62 
64  algebra::Vector3Ds GMMctrd, Floats GMMwd, Floats GMMsigd,
65  Particle *pra, algebra::Vector3D GMMtera,
66  algebra::Vector3Ds GMMctra, Floats GMMwa, Floats GMMsiga,
67  Particle *kda, Particle *Ida,
68  Particle *sigma0, Particle *Pbl, FretData *data,
69  double fexp);
70 
71  // get sumFi
72  double get_sumFi() const;
73 
74  // get average sigma
75  double get_average_sigma(double fmod) const;
76 
77  // lognormal standard error (according to Wikipedia)
78  double get_standard_error() const;
79 
80  // get model fret_r (for the two constructors, i.e. type 0 and 1)
81  double get_model_fretr() const;
82 
83  // get probability
84  double get_probability() const;
85 
86  // get experimental value
87  double get_experimental_value() const {
88  return fexp_;
89  };
90 
91  // set experimental value
92  void set_experimental_value(double fexp);
93 
94  virtual double unprotected_evaluate(IMP::DerivativeAccumulator *accum)
95  const IMP_OVERRIDE;
98 
99  private:
100  double get_model_fretr_type_0() const;
101  double get_model_fretr_type_1() const;
102  algebra::Vector3Ds get_current_centers(Particle *p,
103  const algebra::Vector3Ds &ctrs) const;
104 
105  algebra::Vector3D get_current_center(Particle *p,
106  const algebra::Vector3D &ctr) const;
107 };
108 
109 IMPISD_END_NAMESPACE
110 
111 #endif /* IMPISD_FRET_RESTRAINT_H */
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
Definition: object_macros.h:25
A decorator for scale parameters particles.
A smart pointer to a reference counted object.
Definition: Pointer.h:87
A smart pointer to a ref-counted Object that is a class member.
Definition: Pointer.h:146
VectorD< 3 > Vector3D
Definition: VectorD.h:421
Class to handle individual particles of a Model object.
Definition: Particle.h:41
Abstract base class for all restraints.
Auxiliary class for FRET_R restraint.
Definition: FretData.h:22
Auxiliary class useful for FRET_R restraint.
virtual ModelObjectsTemp do_get_inputs() const =0
#define IMP_OVERRIDE
Cause a compile error if this method does not override a parent method.
Class for adding derivatives from restraints to the model.
A restraint is a term in an IMP ScoringFunction.
Definition: Restraint.h:54