Esempio n. 1
0
void destroy(Hierarchy d) {
  ParticlesTemp all;
  //core::Hierarchy h=d;

  core::gather(d, True(), std::back_inserter(all));
  for (unsigned int i=0; i< all.size(); ++i) {
    if (Bonded::particle_is_instance(all[i])) {
     Bonded b(all[i]);
      while (b.get_number_of_bonds() > 0) {
        destroy_bond(b.get_bond(b.get_number_of_bonds()-1));
      }
    }
    Hierarchy hc(all[i]);
    while (hc.get_number_of_children() > 0) {
      hc.remove_child(hc.get_child(hc.get_number_of_children()-1));
    }
  }

  // If this Hierarchy has a parent, remove the relationship
  Hierarchy parent = d.get_parent();
  if (parent) {
    parent.remove_child(d);
  }

  for (unsigned int i=0; i< all.size(); ++i) {
    all[i]->get_model()->remove_particle(all[i]);
  }
}
Esempio n. 2
0
Hierarchy create_fragment(const Hierarchies &ps) {
  IMP_USAGE_CHECK(!ps.empty(), "Need some particles");
  Hierarchy parent = ps[0].get_parent();
  unsigned int index = ps[0].get_child_index();
  IMP_IF_CHECK(USAGE) {
    for (unsigned int i = 0; i < ps.size(); ++i) {
      IMP_USAGE_CHECK(ps[i].get_parent() == parent, "Parents don't match");
    }
  }

  kernel::Particle *fp =
      new kernel::Particle(parent.get_particle()->get_model());
  Hierarchy fd = Fragment::setup_particle(fp);

  for (unsigned int i = 0; i < ps.size(); ++i) {
    parent.remove_child(ps[i]);
    fd.add_child(ps[i]);
  }

  parent.add_child_at(fd, index);
  return fd;
}