IMPISD_BEGIN_NAMESPACE Nuisance Nuisance::setup_particle(Particle *p, double nuisance) { if (!Nuisance::particle_is_instance(p)) { p->add_attribute(get_nuisance_key(), nuisance); } else { Nuisance(p).set_nuisance(nuisance); } return Nuisance(p); }
IMPISD_BEGIN_NAMESPACE void Scale::do_setup_particle(Model *m, ParticleIndex pi, double scale) { if (!Nuisance::get_is_setup(m, pi)) Nuisance::setup_particle(m, pi, scale); Nuisance(m, pi).set_lower(0.); }
void MolecularDynamicsMover::do_reject() { IMP_OBJECT_LOG; ParticlesTemp ps = md_->get_simulation_particles(); unsigned nparts = ps.size(); IMP_USAGE_CHECK(coordinates_.size() == ps.size(), "The list of particles that move has been changed!"); IMP_USAGE_CHECK(velocities_.size() == ps.size(), "The list of particles that move has been changed!"); for (unsigned i = 0; i < nparts; i++) { bool isnuisance = Nuisance::get_is_setup(ps[i]); bool isxyz = core::XYZ::get_is_setup(ps[i]); IMP_USAGE_CHECK(isnuisance || isxyz, "Particle " << ps[i] << " is neither nuisance nor xyz!"); if (isnuisance) { IMP_USAGE_CHECK(coordinates_[i].size() == 1, "wrong size for coordinates_[" << i << "] !"); IMP_USAGE_CHECK(velocities_[i].size() == 1, "wrong size for velocities_[" << i << "] !"); Nuisance(ps[i]).set_nuisance(coordinates_[i][0]); ps[i]->set_value(FloatKey("vel"), velocities_[i][0]); } if (isxyz) { IMP_USAGE_CHECK(coordinates_[i].size() == 3, "wrong size for coordinates_[" << i << "] !"); IMP_USAGE_CHECK(velocities_[i].size() == 3, "wrong size for velocities_[" << i << "] !"); core::XYZ(ps[i]).set_coordinate(0, coordinates_[i][0]); core::XYZ(ps[i]).set_coordinate(1, coordinates_[i][1]); core::XYZ(ps[i]).set_coordinate(2, coordinates_[i][2]); ps[i]->set_value(FloatKey("vx"), velocities_[i][0]); ps[i]->set_value(FloatKey("vy"), velocities_[i][1]); ps[i]->set_value(FloatKey("vz"), velocities_[i][2]); } } }
void MolecularDynamicsMover::save_coordinates() { IMP_OBJECT_LOG; ParticlesTemp ps = md_->get_simulation_particles(); unsigned nparts = ps.size(); coordinates_.clear(); coordinates_.reserve(nparts); velocities_.clear(); velocities_.reserve(nparts); for (unsigned i = 0; i < nparts; i++) { bool isnuisance = Nuisance::get_is_setup(ps[i]); bool isxyz = core::XYZ::get_is_setup(ps[i]); IMP_USAGE_CHECK(isnuisance || isxyz, "Particle " << ps[i] << " is neither nuisance nor xyz!"); if (isnuisance) { std::vector<double> x(1, Nuisance(ps[i]).get_nuisance()); coordinates_.push_back(x); std::vector<double> v(1, ps[i]->get_value(FloatKey("vel"))); velocities_.push_back(v); } if (isxyz) { std::vector<double> coords; core::XYZ d(ps[i]); coords.push_back(d.get_coordinate(0)); coords.push_back(d.get_coordinate(1)); coords.push_back(d.get_coordinate(2)); coordinates_.push_back(coords); std::vector<double> v; v.push_back(ps[i]->get_value(FloatKey("vx"))); v.push_back(ps[i]->get_value(FloatKey("vy"))); v.push_back(ps[i]->get_value(FloatKey("vz"))); velocities_.push_back(v); } } }
IMPISD_BEGIN_NAMESPACE Scale Scale::setup_particle(Particle *p, double scale) { if (!Nuisance::particle_is_instance(p)) Nuisance::setup_particle(p,scale); Nuisance(p).set_lower(0.); return Scale(p); }