示例#1
0
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);
    }
  }
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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 << " ";
    }
  }
}