Restraints MSConnectivityRestraint::do_create_current_decomposition() const { ParticlePairsTemp pp = get_connected_pairs(); Restraints ret(pp.size()); for (unsigned int i = 0; i < pp.size(); ++i) { IMP_NEW(PairRestraint, pr, (ps_, pp[i])); std::ostringstream oss; oss << get_name() << " " << i; pr->set_name(oss.str()); ret[i] = pr; } return ret; }
double MSConnectivityScore::score(DerivativeAccumulator *accum) const { EdgeSet edges = get_connected_pairs(); double sc = 0; for (EdgeSet::iterator p = edges.begin(); p != edges.end(); ++p) { if (accum) { sc += my_evaluate( ps_, restraint_.particle_matrix_.get_particle(p->first).get_particle(), restraint_.particle_matrix_.get_particle(p->second).get_particle(), accum); } else { sc += restraint_.particle_matrix_.get_distance(p->first, p->second); } } return sc; }
kernel::Restraints ConnectivityRestraint::do_create_current_decomposition() const { kernel::ParticlePairsTemp pp = get_connected_pairs(); kernel::Restraints ret; for (unsigned int i = 0; i < pp.size(); ++i) { IMP_NEW(PairRestraint, pr, (ps_, pp[i])); double score = pr->evaluate(false); /** We want to keep the edge even if it has weight 0 */ if (score == 0) pr->set_last_score(.00001); std::ostringstream oss; oss << get_name() << " " << i; pr->set_name(oss.str()); ret.push_back(pr); } return ret; }