void CHARMMParameters::add_angle(kernel::Particle *p1, kernel::Particle *p2, kernel::Particle *p3, kernel::Particles &ps) const { IMP_OBJECT_LOG; Angle ad = Angle::setup_particle(new kernel::Particle(p1->get_model()), core::XYZ(p1), core::XYZ(p2), core::XYZ(p3)); try { const CHARMMBondParameters &p = get_angle_parameters( CHARMMAtom(p1).get_charmm_type(), CHARMMAtom(p2).get_charmm_type(), CHARMMAtom(p3).get_charmm_type()); ad.set_ideal(p.ideal / 180.0 * PI); ad.set_stiffness(std::sqrt(p.force_constant * 2.0)); } catch (const base::IndexException &e) { // If no parameters, warn only IMP_WARN(e.what()); } ps.push_back(ad); }