IMP logo
IMP Reference Guide  develop.27926d84dc,2024/04/18
The Integrative Modeling Platform
container/filter_close_pairs.py

This example shows how to filter the list of close pairs generated in the IMP.container.ClosePairContainer (or IMP.container.CloseBipartitePairContainer). Eventually the filter should probably be implemented in C++, for speed but implementing the filter in Python is good for prototyping.

1 ## \example container/filter_close_pairs.py
2 # This example shows how to filter the list of close pairs generated in
3 # the IMP.container.ClosePairContainer (or
4 # IMP.container.CloseBipartitePairContainer). Eventually the filter should
5 # probably be implemented in C++, for speed but implementing the filter in
6 # Python is good for prototyping.
7 
8 from __future__ import print_function
9 import IMP
10 import IMP.container
11 import IMP.core
12 import IMP.algebra
13 import sys
14 
15 IMP.setup_from_argv(sys.argv, "filter close pairs")
16 
17 np = 10
19  IMP.algebra.Vector3D(5, 5, 5))
20 ik = IMP.IntKey("num")
21 IMP.set_log_level(IMP.SILENT)
22 m = IMP.Model()
23 ll = []
24 for i in range(0, np):
25  p = m.add_particle("p%d" % i)
26  m.add_attribute(ik, p, i)
29  ll.append(p)
32 
33 m.update()
34 print("without", [(m.get_particle_name(x[0]), m.get_particle_name(x[1]))
35  for x in cpc.get_contents()])
36 
37 
38 class ConsecutiveFilter(IMP.PairPredicate):
39 
40  def __init__(self):
41  IMP.PairPredicate.__init__(self, "ConsecutiveFilter%1%")
42 
43  def get_value_index(self, m, pp):
44  diff = m.get_attribute(ik, pp[0]) - m.get_attribute(ik, pp[1])
45  if diff == -1 or diff == 1:
46  return 1
47  return 0
48 
49  def do_get_inputs(self, m, pis):
50  return [m.get_particle(i) for i in pis]
51 
52  def do_show(self, out):
53  pass
54 
55 
56 f = ConsecutiveFilter()
57 cpc.add_pair_filter(f)
58 m.update()
59 print("with", [(m.get_particle_name(x[0]), m.get_particle_name(x[1]))
60  for x in cpc.get_contents()])