inline S& make_lower(S& s) { typedef string_traits<S> string_traits_t; typedef ss_typename_type_k string_traits_t::char_type char_t; typedef ctype_traits<char_t> ctype_traits_t; return transform_impl(s, &ctype_traits_t::to_lower); }
void transform(atom::Hierarchy h, const algebra::Transformation3D &tr) { Model *m = h.get_model(); typedef std::pair<ParticleIndex, ParticleIndexes> RBP; boost::unordered_map<ParticleIndex, ParticleIndexes> rigid_bodies; transform_impl(m, h.get_particle_index(), tr, rigid_bodies); IMP_FOREACH(const RBP & rbp, rigid_bodies) { core::RigidBody rb(m, rbp.first); ParticleIndexes members = rb.get_member_indexes(); if (rbp.second.size() != members.size()) { IMP_USAGE_CHECK( rbp.second.size() == members.size(), "Hierarchy contains rigid body members of incomplete rigid bodies. " "It must contain all members of a rigid body or no members. Rigid " "body is " << m->get_particle_name(rbp.first)); } core::transform(rb, tr); }