ModelObjectsTemp CoreClosePairContainer::do_get_inputs() const { ParticleIndexes all=c_->get_all_possible_indexes(); ModelObjectsTemp ret= IMP::get_particles(get_model(), all); for (unsigned int i=0; i< get_number_of_pair_filters(); ++i) { ret+= get_pair_filter(i)->get_inputs(get_model(), all); } ret+=cpf_->get_inputs(get_model(), all); ret.push_back(c_); ret.push_back(moved_); return ret; }
void CoreCloseBipartitePairContainer::do_before_evaluate() { IMP_OBJECT_LOG; if (covers_[0]==base::get_invalid_index<ParticleIndexTag>() || algebra::get_distance(get_model()->get_sphere(covers_[0]), get_model()->get_sphere(covers_[1])) < distance_ || reset_) { if (!reset_ && were_close_ && !internal::get_if_moved(get_model(), slack_, xyzrs_[0], rbs_[0], constituents_, rbs_backup_[0], xyzrs_backup_[0]) && !internal::get_if_moved(get_model(), slack_, xyzrs_[1], rbs_[1], constituents_, rbs_backup_[1], xyzrs_backup_[1])){ // all ok } else { // rebuild IMP_LOG(TERSE, "Recomputing bipartite close pairs list." << std::endl); internal::reset_moved(get_model(), xyzrs_[0], rbs_[0], constituents_, rbs_backup_[0], xyzrs_backup_[0]); internal::reset_moved(get_model(), xyzrs_[1], rbs_[1], constituents_, rbs_backup_[1], xyzrs_backup_[1]); ParticleIndexPairs pips; internal::fill_list(get_model(), access_pair_filters(), key_, 2*slack_+distance_, xyzrs_, rbs_, constituents_, pips); reset_=false; update_list(pips); } were_close_=true; } else { ParticleIndexPairs none; update_list(none); } IMP_IF_CHECK(base::USAGE_AND_INTERNAL) { for (unsigned int i=0; i< sc_[0]->get_number_of_particles(); ++i) { XYZR d0(sc_[0]->get_particle(i)); for (unsigned int j=0; j< sc_[1]->get_number_of_particles(); ++j) { XYZR d1(sc_[1]->get_particle(j)); double dist = get_distance(d0, d1); if (dist < .9*distance_) { ParticleIndexPair pip(d0.get_particle_index(), d1.get_particle_index()); bool filtered=false; for (unsigned int i=0; i< get_number_of_pair_filters(); ++i) { if (get_pair_filter(i)->get_value_index(get_model(), pip)) { filtered=true; break; } } IMP_INTERNAL_CHECK(filtered|| std::find(get_access().begin(), get_access().end(), pip) != get_access().end(), "Pair " << pip << " not found in list with coordinates " << d0 << " and " << d1 << " list is " << get_access()); } } } } }