IMP logo
ExcludedVolumeRestraint.h
Go to the documentation of this file.
1 /**
2  * \file core/ExcludedVolumeRestraint.h
3  * \brief A prevent spheres from inter-penetrating
4  *
5  * Copyright 2007-2012 IMP Inventors. All rights reserved.
6  */
7 
8 #ifndef IMPCORE_EXCLUDED_VOLUME_RESTRAINT_H
9 #define IMPCORE_EXCLUDED_VOLUME_RESTRAINT_H
10 
11 #include "core_config.h"
12 
13 #include "internal/remove_pointers.h"
14 #include <IMP/internal/InternalPairsRestraint.h>
15 #include "internal/CoreClosePairContainer.h"
16 #include "rigid_bodies.h"
17 #include <IMP/PairContainer.h>
18 #include <IMP/SingletonContainer.h>
19 #include <IMP/Restraint.h>
20 #include <IMP/UnaryFunction.h>
21 #include <IMP/Refiner.h>
22 #include "RigidClosePairsFinder.h"
24 
25 IMPCORE_BEGIN_NAMESPACE
26 
27 //! Prevent a set of particles and rigid bodies from inter-penetrating
28 /** Given an arbitrary collection of particles and rigid bodies, this
29  restraint prevents the particles from interpenetrating. Such restraints
30  are also known as steric clash restraints.
31 
32  \note If any of the rigid bodies don't have radii, an appropriate radius
33  will be added. Note, to take advantage of this, the RigidBody
34  must be in the container before the Restraint is added to the model.
35 
36  \note Changing the set of particles in the SingletonContainer is not
37  currently supported after the first evaluate call.
38 
39  \note Currently the radius of all particles is assumed to be constant
40  */
41 class IMPCOREEXPORT ExcludedVolumeRestraint: public Restraint
42 {
44  mutable ParticleIndexPairs cur_list_;
45  mutable bool was_bad_;
46  mutable bool initialized_;
47  ObjectKey key_;
49  // moved stuff
50  mutable ParticleIndexes rbs_;
51  mutable ParticleIndexes xyzrs_;
53  double slack_;
54  mutable algebra::Transformation3Ds rbs_backup_;
55  mutable algebra::Vector3Ds xyzrs_backup_;
56 
57  void reset_moved() const;
58  void initialize() const;
59  int get_if_moved() const;
60  void fill_list() const;
61  double fill_list_if_good(double max) const;
63  SoftSpherePairScore *ssps,
64  ObjectKey ok, double slack=10);
65 public:
66  /** The SingletonContainer contains a set of XYZR particles and RigidMembers.
67 
68  The spring constant used is k.*/
70  double k=1, double slack=10,
71  std::string name="ExcludedVolumeRestraint%1%");
72 
73 #if !defined(IMP_DOXYGEN) && !defined(SWIG)
75  double max) const;
76 #endif
78  Restraints do_create_decomposition() const;
79  Restraints do_create_current_decomposition() const;
80  IMP_LIST(public, PairFilter, pair_filter,
81  PairPredicate*, PairPredicates);
82 };
83 
84 
85 IMPCORE_END_NAMESPACE
86 
87 #endif /* IMPCORE_EXCLUDED_VOLUME_RESTRAINT_H */

Generated on Tue May 22 2012 23:33:14 for IMP by doxygen 1.8.1