Assignments BranchAndBoundSampler::do_get_sample_assignments(const Subset &s) const { SubsetFilterTables sfts = DiscreteSampler::get_subset_filter_tables_to_use( get_restraints(), get_particle_states_table()); IMP::PointerMember<AssignmentsTable> sst = DiscreteSampler::get_assignments_table_to_use(sfts); IMP_NEW(PackedAssignmentContainer, pac, ()); sst->load_assignments(s, pac); return pac->get_assignments(IntRange(0, pac->get_number_of_assignments())); }
RestraintsTemp get_restraints(const Subset &s, const ParticleStatesTable *pst, const DependencyGraph &dg, RestraintSet *rs) { RestraintsTemp rw= get_restraints(RestraintsTemp(1, rs)); Subset other=pst->get_subset(); ParticlesTemp oms; std::set_difference(other.begin(), other.end(), s.begin(), s.end(), std::back_inserter(oms)); IMP::compatibility::map<Restraint*, int> index = IMP::base::internal::get_graph_index<Restraint>(dg); Ints to_remove; for (unsigned int i=0; i< rw.size(); ++i) { if (IMP::internal::get_has_ancestor(dg, index[rw[i]], oms)) { to_remove.push_back(i); } } for (int i=to_remove.size()-1; i >=0; --i) { rw.erase(rw.begin()+to_remove[i]); } return rw; }