Here is an example using this container to restrain all particles in a set to be within a a certain distance of one another.
import IMP import IMP.core import IMP.container # This example restraints the diameter of a set of particles to be smaller than 10 diameter=10 m= IMP.Model() lc= IMP.container.ListSingletonContainer(IMP.core.create_xyzr_particles(m, 50, 1.0)) h=IMP.core.HarmonicUpperBound(0,1) r=IMP.core.DiameterRestraint(h, lc, diameter) m.add_restraint(r) # Set up optimizer o= IMP.core.ConjugateGradients() o.set_model(m) max=0 for p0 in lc.get_particles(): for p1 in lc.get_particles(): d=IMP.core.get_distance(IMP.core.XYZ(p0), IMP.core.XYZ(p1)) if d > max: max=d print "The maximim distance is "+str(max) IMP.set_log_level(IMP.SILENT) o.optimize(100) max=0 for p0 in lc.get_particles(): for p1 in lc.get_particles(): d=IMP.core.get_distance(IMP.core.XYZ(p0), IMP.core.XYZ(p1)) if d > max: max=d print "Afterwards, the maximim distance is "+str(max)
The maintenance of the invariant is done by an associated IMP::Constraint. As a result, the state is only guaranteed to be correct either during model evaluation, or immediately following model evaluation before any particles have been changed.
Public Member Functions | |
AllPairContainer (SingletonContainer *c) | |
Get the individual particles from the passed SingletonContainer. | |
void | apply (const PairModifier *sm, DerivativeAccumulator &da) |
void | apply (const PairModifier *sm) |
double | evaluate (const PairScore *s, DerivativeAccumulator *da) const |
double | evaluate_change (const PairScore *s, DerivativeAccumulator *da) const |
double | evaluate_prechange (const PairScore *s, DerivativeAccumulator *da) const |
ParticlesTemp | get_contained_particles () const |
bool | get_contained_particles_changed () const |
bool | get_contains_particle_pair (const ParticlePair &p) const |
ContainersTemp | get_input_containers () const |
unsigned int | get_number_of_particle_pairs () const |
ParticlePair | get_particle_pair (unsigned int i) const |
virtual std::string | get_type_name () const |
virtual ::IMP::VersionInfo | get_version_info () const |
Static Public Member Functions | |
static AllPairContainer * | create_untracked_container (SingletonContainer *c) |
Friends | |
template<class T > | |
void | IMP::internal::unref (T *) |