IMP logo
IMP Reference Guide  develop.b99932598c,2021/06/14
The Integrative Modeling Platform
Go to the documentation of this file.
1 /**
2  * \file IMP/ScoreState.h \brief Shared score state.
3  *
4  * Copyright 2007-2021 IMP Inventors. All rights reserved.
5  *
6  */
11 #include <IMP/kernel_config.h>
12 #include <IMP/WeakPointer.h>
13 #include "DerivativeAccumulator.h"
14 #include "utility.h"
15 #include "ModelObject.h"
16 #include "base_types.h"
17 #include <IMP/check_macros.h>
18 #include <IMP/deprecation_macros.h>
19 #include <IMP/ref_counted_macros.h>
20 #include <iostream>
24 //! ScoreStates maintain invariants in the Model.
25 /** ScoreStates allow actions to be taken before and after the restraint
26  evaluation process. Such code can be used to, for example:
27  - log the optimization process
28  - maintain constraints (see Constraint)
30  ScoreStates have two methods which are called during
31  the Model::evaluate() function
32  - before_evaluate() which is allowed to change the contents of
33  containers and the value of attributes of particles and
34  - after_evaluate() which can change particle derivatives
36  The Model uses information that the ScoreState reports about
37  its input and output containers and particles to determine a safe
38  order in which all the ScoreState objects registered in the model
39  can be applied. That is, the Model will ensure that a ScoreState
40  that has Particle \c A in its output list is applied before a
41  ScoreState that has \c A in its input list.
42  For ScoreState::before_evaluate(), Input and output lists are
43  returned by the respective get_input_* and get_output_* calls.
44  For ScoreState::after_evaluate() they are reversed (see note below).
46  \note The input and output sets for the ScoreState::after_evaluate()
47  functions are assumed to be the reverse of the ScoreState::before_evaluate()
48  functions. As a result, the ScoreStates are applied in opposite order
49  after evaluate. If you have a ScoreState for which this is not true,
50  consider splitting it into two parts.
52  \see Model::add_score_state().
53  */
54 class IMPKERNELEXPORT ScoreState : public ModelObject {
55  int update_order_;
57  public:
58  ScoreState(Model *m, std::string name);
59  //! Force update of the structure.
60  void before_evaluate();
62  //! Do post evaluation work if needed
63  void after_evaluate(DerivativeAccumulator *accpt);
65 #ifndef IMP_DOXYGEN
66  bool get_has_update_order() const { return update_order_ != -1; }
67  unsigned int get_update_order() const { return update_order_; }
70 #endif
72  protected:
73  //! Update the state given the current state of the model.
74  /** This is also called prior to every calculation of the model score.
75  It should be implemented by ScoreStates in order to provide functionality.
76  */
77  virtual void do_before_evaluate() = 0;
79  //! Do any necessary updates after the model score is calculated.
80  /** \param[in] accpt The object used to scale derivatives in the score
81  calculation, or nullptr if derivatives were not
82  requested.
83  */
84  virtual void do_after_evaluate(DerivativeAccumulator *accpt) = 0;
87 };
89 /** Return an appropriate (topologically sorted) order to update
90  the score states in. */
91 IMPKERNELEXPORT ScoreStatesTemp get_update_order(ScoreStatesTemp input);
Control display of deprecation information.
Macros to help with reference counting.
Basic types used by IMP.
Class for adding derivatives from restraints to the model.
Ref counted objects should have private destructors.
A more IMP-like version of the std::vector.
Definition: Vector.h:40
Class for storing model, its restraints, constraints, and particles.
Definition: Model.h:72
Base class for objects in a Model that depend on other objects.
Definition: ModelObject.h:26
ScoreStates maintain invariants in the Model.
Definition: ScoreState.h:54
virtual void handle_set_has_required_score_states(bool)
Definition: ModelObject.h:71
A weak pointer to an Object or RefCountedObject.
For backwards compatibility.
Base class for objects in a Model that depend on other objects.
Helper macros for throwing and handling exceptions.
Cause a compile error if this method does not override a parent method.
Class for adding derivatives from restraints to the model.
ScoreStatesTemp get_update_order(ScoreStatesTemp input)