IMP logo
IMP Reference Guide  2.5.0
The Integrative Modeling Platform
IMP::core::RigidClosePairsFinder Class Reference

Perform more efficient close pair finding when rigid bodies are involved. More...

#include <IMP/core/RigidClosePairsFinder.h>

+ Inheritance diagram for IMP::core::RigidClosePairsFinder:

Detailed Description

Perform more efficient close pair finding when rigid bodies are involved.

The class finds all close pairs consisting of particles taken from the passed list(s) (if they are not rigid bodies) or members of rigid bodies passed as input. That is, given an input list l, for each pair of particles p, q taken from the list, that are closer than the distance threshold, it returns

  • if neither p or q are RigidBody particles it returns (p,q)
  • if bother p and q are RigidBody particles, it returns all (r,s) where r is a member of p and s is member of q and r and s are closer than the distance threshold
  • pairs (p,s) or (r,q) as appropriate if only one of p or q is a rigid body.

Consequently, the user must ensure that the RigidBody are assigned a radius that encloses all of their RigidMember particles.

It uses another ClosePairsFinder to find which pairs of particles in the input list or lists are close. Your choice of this can be passed to the constructor.

The bipartite method will also not return any pairs where both members are in the same rigid body.
The bounding spheres are kept in internal coordinates for the rigid body and transformed on the fly. It would probably be faster to cache the transformed results.
The particles are divided up using a grid. The number of grid cells to use should be explored. In addition, with highly eccentric sets of points, there will be too many cells.
Do not reuse RigidClosePairsFinders for different sets of particles from the same rigid body.
1 ## \example core/
2 # Collision detection and building of a non-bonded list can be sped up when rigid bodies are used.
3 # To do this, use a RigidClosePairsFinder.
5 import IMP
6 import IMP.core
7 import IMP.atom
8 import IMP.container
9 import sys
11 IMP.setup_from_argv(sys.argv, "rigid collisions")
13 # This example addes a restraint on nonbonded interactions
14 # Since it is between two rigid bodies, internal interactions are ignored
16 m = IMP.Model()
17 # The particles in the rigid bodies
18 rbps0 = IMP.core.create_xyzr_particles(m, 3, 1)
19 rbps1 = IMP.core.create_xyzr_particles(m, 3, 1)
21 rbp0 = IMP.Particle(m)
22 rbp1 = IMP.Particle(m)
29 lsc.add(rbps0)
30 lsc.add(rbps1)
32 # Set up the nonbonded list
34  lsc, 0, IMP.core.RigidClosePairsFinder(), 2.0)
36 # Set up excluded volume
38 evr = IMP.container.PairsRestraint(ps, nbl)
41 # Set up optimizer
43 o.set_scoring_function(sf)
45 done = False
46 while not done:
47  try:
48  o.optimize(1000)
49  except IMP.ModelException:
50  for d in [rbss0, rbss1]:
51  d.set_transformation(
57  0, 0, 0),
58  IMP.algebra.Vector3D(10, 10, 10)))))
59  else:
60  done = True

The class RigidClosePairsFinder uses CGAL in order to improve its functionality. It will fall back on less good code without it.

See Also

Definition at line 60 of file RigidClosePairsFinder.h.

Public Member Functions

 RigidClosePairsFinder (ClosePairsFinder *cpf=nullptr)
virtual ModelObjectsTemp do_get_inputs (Model *m, const ParticleIndexes &pis) const
ParticleIndexPairs get_close_pairs (Model *m, ParticleIndex a, ParticleIndex b, const ParticleIndexes &pa, const ParticleIndexes &pb) const
virtual IntPairs get_close_pairs (const algebra::BoundingBox3Ds &bbs) const
virtual IntPairs get_close_pairs (const algebra::BoundingBox3Ds &bas, const algebra::BoundingBox3Ds &bbs) const
virtual ParticleIndexPairs get_close_pairs (Model *m, const ParticleIndexes &pc) const
virtual ParticleIndexPairs get_close_pairs (Model *m, const ParticleIndexes &pca, const ParticleIndexes &pcb) const
virtual std::string get_type_name () const
virtual ::IMP::VersionInfo get_version_info () const
 Get information about the module and version of the object. More...
void set_distance (double d)
- Public Member Functions inherited from IMP::core::ClosePairsFinder
 ClosePairsFinder (std::string name)
double get_distance () const
void remove_pair_filter (PairPredicate *d)
void remove_pair_filters (const PairPredicates &d)
void set_pair_filters (const PairPredicates &ps)
void set_pair_filters_order (const PairPredicates &objs)
unsigned int add_pair_filter (PairPredicate *obj)
void add_pair_filters (const PairPredicates &objs)
void clear_pair_filters ()
unsigned int get_number_of_pair_filters () const
bool get_has_pair_filters ()
PairPredicateget_pair_filter (unsigned int i) const
PairPredicates get_pair_filters () const
void reserve_pair_filters (unsigned int sz)
- Public Member Functions inherited from IMP::ParticleInputs
ModelObjectsTemp get_inputs (Model *m, const ParticleIndexes &pis) const
- Public Member Functions inherited from IMP::Object
virtual void clear_caches ()
CheckLevel get_check_level () const
LogLevel get_log_level () const
void set_check_level (CheckLevel l)
void set_log_level (LogLevel l)
 Set the logging level used in this object. More...
void set_was_used (bool tf) const
void show (std::ostream &out=std::cout) const
const std::string & get_name () const
void set_name (std::string name)

Additional Inherited Members

- Protected Member Functions inherited from IMP::Object
 Object (std::string name)
 Construct an object with the given name. More...
virtual void do_destroy ()

Member Function Documentation

virtual ModelObjectsTemp IMP::core::RigidClosePairsFinder::do_get_inputs ( Model m,
const ParticleIndexes pis 
) const

Overload this method to specify the inputs.

Implements IMP::ParticleInputs.

virtual ::IMP::VersionInfo IMP::core::RigidClosePairsFinder::get_version_info ( ) const

Get information about the module and version of the object.

Reimplemented from IMP::Object.

Definition at line 94 of file RigidClosePairsFinder.h.

The documentation for this class was generated from the following file: