IMP  2.0.1
The Integrative Modeling Platform
IMP::core::RigidClosePairsFinder Class Reference

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

#include <IMP/core/RigidClosePairsFinder.h>

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

Public Member Functions

 RigidClosePairsFinder (ClosePairsFinder *cpf=nullptr)
 
ParticlePairsTemp get_close_pairs (Particle *a, Particle *b, const ParticleIndexes &pa, const ParticleIndexes &pb) const
 
void set_distance (double d)
 
- Public Member Functions inherited from IMP::core::ClosePairsFinder
 ClosePairsFinder (std::string name)
 
ContainersTemp get_input_containers (const ParticlesTemp &ps) const
 
ContainersTemp get_input_containers (Particle *p) const
 
ParticlesTemp get_input_particles (const ParticlesTemp &ps) const
 
ParticlesTemp get_input_particles (Particle *p) const
 
ModelObjectsTemp get_inputs (Model *m, const ParticleIndexes &pis) const
 
virtual ParticlePairsTemp get_close_pairs (const ParticlesTemp &pc) const =0
 
virtual ParticlePairsTemp get_close_pairs (const ParticlesTemp &pca, const ParticlesTemp &pcb) const =0
 
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 IntPairs get_close_pairs (const algebra::BoundingBox3Ds &bbs) const =0
 
virtual IntPairs get_close_pairs (const algebra::BoundingBox3Ds &bas, const algebra::BoundingBox3Ds &bbs) const =0
 
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::base::Object
virtual void clear_caches ()
 
virtual IMP::base::VersionInfo get_version_info () const =0
 Get information about the module and version of the object.
 
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::core::ClosePairsFinder
virtual ModelObjectsTemp do_get_inputs (Model *m, const ParticleIndexes &pis) const =0
 

Detailed Description

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.

Note
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 tranformed results.
The particles are divided up using a grid. The number of grid cells to use should be explored. In addition, with highly excentric 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/rigid_collisions.py
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.
4 
5 import IMP
6 import IMP.core
7 import IMP.atom
8 import IMP.container
9 
10 # This example addes a restraint on nonbonded interactions
11 # Since it is between two rigid bodies, internal interactions are ignored
12 
13 m= IMP.Model()
14 # The particles in the rigid bodies
15 rbps0= IMP.core.create_xyzr_particles(m, 3, 1)
16 rbps1= IMP.core.create_xyzr_particles(m, 3, 1)
17 
18 rbp0= IMP.Particle(m)
19 rbp1= IMP.Particle(m)
20 
21 rbss0 = IMP.core.RigidBody.setup_particle(rbp0, IMP.core.XYZs(rbps0))
22 
23 rbss1 = IMP.core.RigidBody.setup_particle(rbp1, IMP.core.XYZs(rbps1))
24 
26 lsc.add_particles(rbps0)
27 lsc.add_particles(rbps1)
28 
29 # Set up the nonbonded list
31 
32 # Set up excluded volume
34 evr= IMP.container.PairsRestraint(ps, nbl)
35 evri= m.add_restraint(evr)
36 
37 # Set up optimizer
39 o.set_model(m)
40 
41 done=False
42 while not done:
43  try:
44  o.optimize(1000)
46  for d in [rbss0, rbss1]:
49  IMP.algebra.Vector3D(10,10,10)))))
50  else:
51  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
ClosePairsScoreState
RigidBody
cover_members()

Definition at line 62 of file RigidClosePairsFinder.h.


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