IMP logo
IMP Reference Guide  2.15.0
The Integrative Modeling Platform
ScoreState.h
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  */
7 
8 #ifndef IMPKERNEL_SCORE_STATE_H
9 #define IMPKERNEL_SCORE_STATE_H
10 
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>
21 
22 IMPKERNEL_BEGIN_NAMESPACE
23 
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)
29 
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
35 
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).
45 
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.
51 
52  \see Model::add_score_state().
53  */
54 class IMPKERNELEXPORT ScoreState : public ModelObject {
55  int update_order_;
56 
57  public:
58  ScoreState(Model *m, std::string name);
59  //! Force update of the structure.
60  void before_evaluate();
61 
62  //! Do post evaluation work if needed
63  void after_evaluate(DerivativeAccumulator *accpt);
64 
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_; }
69 
70 #endif
71 
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;
78 
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;
85 
87 };
88 
89 /** Return an appropriate (topologically sorted) order to update
90  the score states in. */
91 IMPKERNELEXPORT ScoreStatesTemp get_update_order(ScoreStatesTemp input);
92 
93 IMPKERNEL_END_NAMESPACE
94 
95 #endif /* IMPKERNEL_SCORE_STATE_H */
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.
#define IMP_REF_COUNTED_DESTRUCTOR(Name)
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.
#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.
ScoreStatesTemp get_update_order(ScoreStatesTemp input)