IMP  2.2.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)
 
virtual kernel::ModelObjectsTemp do_get_inputs (kernel::Model *m, const kernel::ParticleIndexes &pis) const
 
kernel::ParticleIndexPairs get_close_pairs (kernel::Model *m, kernel::ParticleIndex a, kernel::ParticleIndex b, const kernel::ParticleIndexes &pa, const kernel::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 kernel::ParticleIndexPairs get_close_pairs (kernel::Model *m, const kernel::ParticleIndexes &pc) const
 
virtual kernel::ParticleIndexPairs get_close_pairs (kernel::Model *m, const kernel::ParticleIndexes &pca, const kernel::ParticleIndexes &pcb) const
 
virtual std::string get_type_name () const
 
virtual ::IMP::base::VersionInfo get_version_info () const
 Get information about the module and version of the object.
 
void set_distance (double d)
 
- Public Member Functions inherited from IMP::core::ClosePairsFinder
 ClosePairsFinder (std::string name)
 
kernel::ParticlePairsTemp get_close_pairs (const kernel::ParticlesTemp &pc) const
 
kernel::ParticlePairsTemp get_close_pairs (const kernel::ParticlesTemp &pca, const kernel::ParticlesTemp &pcb) const
 
double get_distance () const
 
 IMP_LIST (public, PairFilter, pair_filter, PairPredicate *, PairPredicates)
 
- Public Member Functions inherited from IMP::kernel::ParticleInputs
virtual ContainersTemp get_input_containers (Particle *p) const
 
virtual ParticlesTemp get_input_particles (Particle *p) const
 
ModelObjectsTemp get_inputs (kernel::Model *m, const ParticleIndexes &pis) const
 
- Public Member Functions inherited from IMP::base::Object
virtual void clear_caches ()
 
virtual void do_destroy ()
 
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::base::Object
 Object (std::string name)
 Construct an object with the given name. More...
 

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.kernel.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.kernel.Particle(m)
19 rbp1 = IMP.kernel.Particle(m)
20 
22 
24 
26 lsc.add_particles(rbps0)
27 lsc.add_particles(rbps1)
28 
29 # Set up the nonbonded list
31  lsc, 0, IMP.core.RigidClosePairsFinder(), 2.0)
32 
33 # Set up excluded volume
35 evr = IMP.container.PairsRestraint(ps, nbl)
36 evri = m.add_restraint(evr)
37 
38 # Set up optimizer
40 
41 done = False
42 while not done:
43  try:
44  o.optimize(1000)
46  for d in [rbss0, rbss1]:
47  d.set_transformation(
53  0, 0, 0),
54  IMP.algebra.Vector3D(10, 10, 10)))))
55  else:
56  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 60 of file RigidClosePairsFinder.h.

Member Function Documentation

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

Overload this method to specify the inputs.

Reimplemented from IMP::kernel::ParticleInputs.


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