ResidueType CHARMMParameters::parse_residue_line(const String &line, bool translate_names_to_pdb) { Strings split_results; boost::split(split_results, line, boost::is_any_of(" \t"), boost::token_compress_on); if (split_results.size() < 3) { IMP_THROW("Invalid RESI line: " << line, ValueException); } String curr_residue = get_residue_name(split_results[1], translate_names_to_pdb); if (ResidueType::get_key_exists(curr_residue)) { return ResidueType(curr_residue); } else { // assume charmm is correct return ResidueType(ResidueType::add_key(curr_residue)); } }
Particle *residue_particle(Model *m, int residue_index, char ins_code, const std::string &residue_type) { Particle* p = new Particle(m); std::string rn = residue_type; boost::trim(rn); if (rn.empty()) { rn = "UNK"; } ResidueType residue_name = ResidueType(rn); // residue decorator Residue::setup_particle(p, residue_name, residue_index, (int)ins_code); p->set_name(residue_name.get_string()); return p; }
double get_volume_from_residue_type(ResidueType rt) { typedef std::pair<ResidueType, double> RP; static const RP radii[] = { RP(ResidueType("ALA"), 2.516), RP(ResidueType("ARG"), 3.244), RP(ResidueType("ASN"), 2.887), RP(ResidueType("ASP"), 2.866), RP(ResidueType("CYS"), 2.710), RP(ResidueType("GLN"), 3.008), RP(ResidueType("GLU"), 2.997), RP(ResidueType("GLY"), 2.273), RP(ResidueType("HIS"), 3.051), RP(ResidueType("ILE"), 3.047), RP(ResidueType("LEU"), 3.052), RP(ResidueType("LYS"), 3.047), RP(ResidueType("MET"), 3.068), RP(ResidueType("PHE"), 3.259), RP(ResidueType("PRO"), 2.780), RP(ResidueType("SER"), 2.609), RP(ResidueType("THR"), 2.799), RP(ResidueType("TRP"), 3.456), RP(ResidueType("TYR"), 3.318), RP(ResidueType("VAL"), 2.888)}; static const boost::unordered_map<ResidueType, double> radii_map( radii, radii + sizeof(radii) / sizeof(RP)); if (radii_map.find(rt) == radii_map.end()) { IMP_THROW("Can't approximate volume of non-standard residue " << rt, ValueException); } double r = radii_map.find(rt)->second; IMP_INTERNAL_CHECK(r > 0, "Read garbage r for " << rt); return algebra::get_volume( algebra::Sphere3D(algebra::get_zero_vector_d<3>(), r)); }