コード例 #1
0
ファイル: CHARMMParameters.cpp プロジェクト: apolitis/imp
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));
  }
}
コード例 #2
0
ファイル: pdb.cpp プロジェクト: salilab/imp
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;
}
コード例 #3
0
ファイル: estimates.cpp プロジェクト: newtonjoo/imp
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));
}