IMP  2.0.1
The Integrative Modeling Platform
SingletonsConstraint.h
Go to the documentation of this file.
1 /**
2  * \file IMP/container/SingletonsConstraint.h
3  * \brief Use a SingletonModifier applied to a ParticlesTemp to
4  * maintain an invariant
5  *
6  * WARNING This file was generated from SingletonsConstraint.h
7  * in /tmp/nightly-build-36540/imp-2.0.1/tools/build/container_templates/container
8  * by tools/maintenance/setup_containers.py.
9  *
10  * Copyright 2007-2013 IMP Inventors. All rights reserved.
11  */
12 
13 #ifndef IMPCONTAINER_SINGLETONS_CONSTRAINT_H
14 #define IMPCONTAINER_SINGLETONS_CONSTRAINT_H
15 
16 #include <IMP/container/container_config.h>
17 #include <IMP/SingletonContainer.h>
18 #include <IMP/SingletonModifier.h>
19 #include <IMP/Constraint.h>
20 #include <IMP/score_state_macros.h>
21 #include <IMP/internal/ContainerConstraint.h>
22 
23 IMPKERNEL_BEGIN_NAMESPACE
24 // for swig
25 class SingletonContainer;
26 class SingletonModifier;
27 IMPKERNEL_END_NAMESPACE
28 
29 IMPCONTAINER_BEGIN_NAMESPACE
30 //! Apply a SingletonFunction to a SingletonContainer to maintain an invariant
31 /** The score state is passed up to two SingletonModifiers, one to
32  apply before evaluation and the other after. The one after
33  should take a DerivativeAccumulator as its last argument for
34  SingletonModifier::apply() and will only be called if
35  the score was computed with derivatives.
36 
37  An example showing a how to use such a score state to maintain a cover
38  of the atoms of a protein by a sphere per residue.
39  \verbinclude cover_particles.py
40 
41  \see core::SingletonConstraint
42  */
44 #if defined(SWIG) || defined(IMP_DOXYGEN)
45  public Constraint
46 #else
47  public IMP::kernel::internal::ContainerConstraint<SingletonModifier,
48  SingletonDerivativeModifier,
49  SingletonContainer>
50 #endif
51 {
52  typedef IMP::kernel::internal::ContainerConstraint<SingletonModifier,
53  SingletonDerivativeModifier,
55 public:
56  /** \param[in] c The Container to hold the elements to process
57  \param[in] before The SingletonModifier to apply to all elements
58  before evaluate.
59  \param[in] after The SingletonModifier to apply to all elements
60  after evaluate.
61  \param[in] name The object name
62  */
64  SingletonDerivativeModifier *after,
65  SingletonContainerAdaptor c,
66  std::string name="SingletonConstraint %1%"):
67  P(before, after, c, name)
68  {}
69 #if defined(IMP_DOXYGEN) || defined(SWIG)
70 protected:
71  void do_update_attributes();
72  void do_update_derivatives(DerivativeAccumulator *da);
73  virtual ModelObjectsTemp do_get_inputs() const;
74  virtual ModelObjectsTemp do_get_outputs() const;
76 #endif
77 };
78 
80 
81 
82 IMPCONTAINER_END_NAMESPACE
83 
84 #endif /* IMPCONTAINER_SINGLETONS_CONSTRAINT_H */