void Fragment::set_residue_indexes(kernel::Model *m, kernel::ParticleIndex pi, const IntPairs &ris) { Ints begins(ris.size()); Ints ends(ris.size()); for (unsigned int i = 0; i < ris.size(); ++i) { begins[i] = ris[i].first; ends[i] = ris[i].second; IMP_USAGE_CHECK(ris[i].first < ris[i].second, "Bad range for residue indexes"); } if (begins.size() > 0) { if (m->get_has_attribute(get_begins_key(), pi)) { m->set_attribute(get_begins_key(), pi, begins); m->set_attribute(get_ends_key(), pi, ends); } else { m->add_attribute(get_begins_key(), pi, begins); m->add_attribute(get_ends_key(), pi, ends); } } else { if (m->get_has_attribute(get_begins_key(), pi)) { m->remove_attribute(get_begins_key(), pi); m->remove_attribute(get_ends_key(), pi); } } }
bool Fragment::get_contains_residue(int ri) const { IntPairs all = get_residue_index_ranges(); for (unsigned int i = 0; i < all.size(); ++i) { if (ri >= all[i].first && ri < all[i].second) return true; } return false; }
Ints Fragment::get_residue_indexes() const { IntPairs ranges = get_residue_index_ranges(); Ints ret; for (unsigned int i = 0; i < ranges.size(); ++i) { for (int j = ranges[i].first; j < ranges[i].second; ++j) { ret.push_back(j); } } return ret; }
IMPATOM_BEGIN_NAMESPACE void Fragment::show(std::ostream &out) const { out << "Fragment: "; IntPairs ps = get_residue_index_ranges(); for (unsigned int i = 0; i < ps.size(); ++i) { if (ps[i].first != ps[i].second - 1) { out << "[" << ps[i].first << ", " << ps[i].second << ") "; } else { out << ps[i].first << " "; } } }