This example looks like the six particle optimization example except a filter is used instead of a restraint to remove the flip degree of freedom. The filter is written is Python, which makes for quick prototyping, but slower run times.
   18 def create_scoring(m, ps):
 
   19     pairs = [[0, 1], [0, 2], [1, 3], [2, 3], [3, 4], [4, 5], [1, 5]]
 
   23                                          [(ps[p[0]], ps[p[1]]) 
for p 
in pairs],
 
   26     pr.set_maximum_score(.01)
 
   32 def create_representation(m):
 
   35         p = m.add_particle(
"P%d" % i)
 
   41 def create_discrete_states(m, ps):
 
   48     vs = vs + [-v 
for v 
in vs]
 
   49     print(len(vs), 
"states for each particle")
 
   54         pst.set_particle_states(m.get_particle(p), states)
 
   64         def __init__(self, pos, value):
 
   66             IMP.domino.SubsetFilter.__init__(
 
   67                 self, 
"MF" + str(pos) + 
" " + str(value))
 
   71         def get_next_state(self, pos, s):
 
   75             if s[self.pos] > self.value:
 
   81         def get_is_ok(self, state):
 
   83             ret = state[self.pos] == self.value
 
   86     def get_strength(self, s, excluded):
 
   90     def __init__(self, p, s):
 
   92         IMP.domino.SubsetFilterTable.__init__(
 
   93             self, 
"MFT" + p.get_name() + 
" at " + str(s))
 
   97     def get_subset_filter(self, subset, excluded):
 
  100                 and self.p 
not in sum([list(x) 
for x 
in excluded], [])):
 
  102             return self.MyFilter(list(subset).index(self.p), self.s)
 
  107 def create_sampler(m, ps, rs, pst):
 
  117     rc.add_restraints(rs)
 
  121     mf = MyFilterTable(m.get_particle(ps[1]), 0)
 
  126     s.set_assignments_table(states)
 
  127     s.set_subset_filter_tables(filters)
 
  133 m.set_log_level(IMP.SILENT)
 
  135 print(
"creating representation")
 
  136 ps = create_representation(m)
 
  137 print(
"creating discrete states")
 
  138 pst = create_discrete_states(m, ps)
 
  139 print(
"creating score function")
 
  140 rs = create_scoring(m, ps)
 
  142 print(
"creating sampler")
 
  143 s = create_sampler(m, ps, rs, pst)
 
  147 cs = s.create_sample()
 
  149 print(
"found ", cs.get_number_of_configurations(), 
"solutions")
 
  151 for i 
in range(cs.get_number_of_configurations()):
 
  152     cs.load_configuration(i)
 
  153     print(
"solution number:", i, 
" is:", sf.evaluate(
False))