diff --git a/modules/bindings/pymod/msms.py b/modules/bindings/pymod/msms.py index dc3b8590626aad471534d47ce660220d616800d9..893e6c4b509c2faa88b88037ef55dc0282c0eb88 100644 --- a/modules/bindings/pymod/msms.py +++ b/modules/bindings/pymod/msms.py @@ -69,7 +69,7 @@ def _SetupFiles(entity, selection): for a in entity_view.GetAtomList(): position=a.GetPos() tmp_file_handle.write('%8.3f %8.3f %8.3f %4.2f\n' % (position[0], - position[1], position[2], a.GetAtomProps().radius)) + position[1], position[2], a.radius)) tmp_file_handle.close() return (tmp_dir_name, tmp_file_name) diff --git a/modules/conop/pymod/export_conop.cc b/modules/conop/pymod/export_conop.cc index 8b2509ec3a70a9fd8620919496a58ffa8f0cead5..64d12ffd224f8add296c035390c21803616f5d9b 100644 --- a/modules/conop/pymod/export_conop.cc +++ b/modules/conop/pymod/export_conop.cc @@ -31,7 +31,6 @@ void export_Conop() { .def("Instance", &Conopology::Instance, return_value_policy<reference_existing_object>()).staticmethod("Instance") .def("ConnectAll", &Conopology::ConnectAll) .def("GetBuilder", &Conopology::GetBuilder) - .def("GetDefaultAtomRadius", &Conopology::GetDefaultAtomRadius) .def("ConnectAll", &Conopology::ConnectAll) .def("RegisterBuilder", &Conopology::RegisterBuilder) .def("SetDefaultBuilder", &Conopology::SetDefaultBuilder) diff --git a/modules/conop/src/conop.cc b/modules/conop/src/conop.cc index d7edd9aa8ef5b451128a45b742d1b74ffb45b954..e2fc45e2e227f32d4d14b75181170ab4604e68c4 100644 --- a/modules/conop/src/conop.cc +++ b/modules/conop/src/conop.cc @@ -33,165 +33,128 @@ Conopology& Conopology::Instance() } Conopology::Conopology(): - builder_map_(), - ele_rad_map_(), - ele_mass_map_() + builder_map_() { builder_map_["HEURISTIC"]=BuilderP(new HeuristicBuilder()); builder_map_["DEFAULT"]=builder_map_["HEURISTIC"]; - - ele_rad_map_["H"] = 1.09; - - ele_rad_map_["C"] = 1.70; //was 1.75 - ele_rad_map_["N"] = 1.55; - ele_rad_map_["O"] = 1.52; - ele_rad_map_["F"] = 1.47; - - ele_rad_map_["NA"] = 2.27; - ele_rad_map_["MG"] = 1.73; - ele_rad_map_["SI"] = 2.10; - ele_rad_map_["P"] = 1.80; - ele_rad_map_["S"] = 1.80; - ele_rad_map_["CL"] = 1.75; - - ele_rad_map_["K"] = 2.75; - ele_rad_map_["CA"] = 2.00; - ele_rad_map_["MN"] = 2.00; - ele_rad_map_["FE"] = 2.00; - ele_rad_map_["CO"] = 2.00; - ele_rad_map_["NI"] = 1.63; - ele_rad_map_["CU"] = 1.40; - ele_rad_map_["ZN"] = 1.39; - ele_rad_map_["BR"] = 1.85; - - ele_rad_map_["I"] = 1.98; - - - // Element masses according to IUPAC standards - // see http://www.chem.qmul.ac.uk/iupac/AtWt/ - ele_mass_map_["H"] = 1.00794; - ele_mass_map_["HE"] = 4.002602; - ele_mass_map_["LI"] = 6.941; - ele_mass_map_["BE"] = 9.012182; - ele_mass_map_["B"] = 10.811; - ele_mass_map_["C"] = 12.0107; - ele_mass_map_["N"] = 14.0067; - ele_mass_map_["O"] = 15.9994; - ele_mass_map_["F"] = 18.9984032; - ele_mass_map_["NE"] = 20.1797; - ele_mass_map_["NA"] = 22.98976928; - ele_mass_map_["MG"] = 24.3050; - ele_mass_map_["AL"] = 26.9815386; - ele_mass_map_["SI"] = 28.0855; - ele_mass_map_["P"] = 30.973762; - ele_mass_map_["S"] = 32.065; - ele_mass_map_["CL"] = 35.453; - ele_mass_map_["AR"] = 39.948; - ele_mass_map_["K"] = 39.0983; - ele_mass_map_["CA"] = 40.078; - ele_mass_map_["SC"] = 44.955912; - ele_mass_map_["TI"] = 47.867; - ele_mass_map_["V"] = 50.9415; - ele_mass_map_["CR"] = 51.9961; - ele_mass_map_["MN"] = 54.938045; - ele_mass_map_["FE"] = 55.845; - ele_mass_map_["CO"] = 58.933195; - ele_mass_map_["NI"] = 58.6934; - ele_mass_map_["CU"] = 63.546; - ele_mass_map_["ZN"] = 65.38; - ele_mass_map_["GA"] = 69.723; - ele_mass_map_["GE"] = 72.64; - ele_mass_map_["AS"] = 74.92160; - ele_mass_map_["SE"] = 78.96; - ele_mass_map_["BR"] = 79.904; - ele_mass_map_["KR"] = 83.798; - ele_mass_map_["RB"] = 85.4678; - ele_mass_map_["SR"] = 87.62; - ele_mass_map_["Y"] = 88.90585; - ele_mass_map_["ZR"] = 91.224; - ele_mass_map_["NB"] = 92.90638; - ele_mass_map_["MO"] = 95.96; - ele_mass_map_["TC"] = 98.0; - ele_mass_map_["RU"] = 101.07; - ele_mass_map_["RH"] = 102.90550; - ele_mass_map_["PD"] = 106.42; - ele_mass_map_["AG"] = 107.8682; - ele_mass_map_["CD"] = 112.411; - ele_mass_map_["IN"] = 114.818; - ele_mass_map_["SN"] = 118.710; - ele_mass_map_["SB"] = 121.760; - ele_mass_map_["TE"] = 127.60; - ele_mass_map_["I"] = 126.90447; - ele_mass_map_["XE"] = 131.293; - ele_mass_map_["CS"] = 132.9054519; - ele_mass_map_["BA"] = 137.327; - ele_mass_map_["LA"] = 138.90547; - ele_mass_map_["CE"] = 140.116; - ele_mass_map_["PR"] = 140.90765; - ele_mass_map_["ND"] = 144.242; - ele_mass_map_["PM"] = 145.0; - ele_mass_map_["SM"] = 150.36; - ele_mass_map_["EU"] = 151.964; - ele_mass_map_["GD"] = 157.25; - ele_mass_map_["TB"] = 158.92535; - ele_mass_map_["DY"] = 162.500; - ele_mass_map_["HO"] = 164.93032; - ele_mass_map_["ER"] = 167.259; - ele_mass_map_["TM"] = 168.93421; - ele_mass_map_["YB"] = 173.054; - ele_mass_map_["LU"] = 174.9668; - ele_mass_map_["HF"] = 178.49; - ele_mass_map_["TA"] = 180.94788; - ele_mass_map_["W"] = 183.84; - ele_mass_map_["RE"] = 186.207; - ele_mass_map_["OS"] = 190.23; - ele_mass_map_["IR"] = 192.217; - ele_mass_map_["PT"] = 195.084; - ele_mass_map_["AU"] = 196.966569; - ele_mass_map_["HG"] = 200.59; - ele_mass_map_["TL"] = 204.3833; - ele_mass_map_["PB"] = 207.2; - ele_mass_map_["BI"] = 208.98040; - ele_mass_map_["PO"] = 209.0; - ele_mass_map_["AT"] = 210.0; - ele_mass_map_["RN"] = 222.0; - ele_mass_map_["FR"] = 223.0; - ele_mass_map_["RA"] = 226.0; - ele_mass_map_["AC"] = 227.0; - ele_mass_map_["TH"] = 232.03806; - ele_mass_map_["PA"] = 231.03588; - ele_mass_map_["U"] = 238.02891; - ele_mass_map_["NP"] = 237.0; - ele_mass_map_["PU"] = 244.0; - ele_mass_map_["AM"] = 243.0; - ele_mass_map_["CM"] = 247.0; - ele_mass_map_["BK"] = 247.0; - ele_mass_map_["CF"] = 251.0; - ele_mass_map_["ES"] = 252.0; - ele_mass_map_["FM"] = 257.0; - ele_mass_map_["MD"] = 258.0; - ele_mass_map_["NO"] = 259.0; - ele_mass_map_["LR"] = 262.0; - ele_mass_map_["RF"] = 267.0; - ele_mass_map_["DB"] = 268.0; - ele_mass_map_["SG"] = 271.0; - ele_mass_map_["BH"] = 272.0; - ele_mass_map_["HS"] = 270.0; - ele_mass_map_["MT"] = 276.0; - ele_mass_map_["DS"] = 281.0; - ele_mass_map_["RG"] = 280.0; - ele_mass_map_["CN"] = 285.0; - ele_mass_map_["UUT"]= 284.0; - ele_mass_map_["UUQ"]= 289.0; - ele_mass_map_["UUP"]= 288.0; - ele_mass_map_["UUH"]= 293.0; - ele_mass_map_["UUO"]= 294.0; + + known_elements_.insert("AC"); + known_elements_.insert("AG"); + known_elements_.insert("AL"); + known_elements_.insert("AM"); + known_elements_.insert("AR"); + known_elements_.insert("AS"); + known_elements_.insert("AT"); + known_elements_.insert("AU"); + known_elements_.insert("B"); + known_elements_.insert("BA"); + known_elements_.insert("BE"); + known_elements_.insert("BH"); + known_elements_.insert("BI"); + known_elements_.insert("BK"); + known_elements_.insert("BR"); + known_elements_.insert("C"); + known_elements_.insert("CA"); + known_elements_.insert("CD"); + known_elements_.insert("CE"); + known_elements_.insert("CF"); + known_elements_.insert("CL"); + known_elements_.insert("CM"); + known_elements_.insert("CO"); + known_elements_.insert("CR"); + known_elements_.insert("CS"); + known_elements_.insert("CU"); + known_elements_.insert("DB"); + known_elements_.insert("DS"); + known_elements_.insert("DY"); + known_elements_.insert("ER"); + known_elements_.insert("ES"); + known_elements_.insert("EU"); + known_elements_.insert("F"); + known_elements_.insert("FE"); + known_elements_.insert("FM"); + known_elements_.insert("FR"); + known_elements_.insert("GA"); + known_elements_.insert("GD"); + known_elements_.insert("GE"); + known_elements_.insert("H"); + known_elements_.insert("HE"); + known_elements_.insert("HF"); + known_elements_.insert("HG"); + known_elements_.insert("HO"); + known_elements_.insert("HS"); + known_elements_.insert("I"); + known_elements_.insert("IN"); + known_elements_.insert("IR"); + known_elements_.insert("K"); + known_elements_.insert("KR"); + known_elements_.insert("LA"); + known_elements_.insert("LI"); + known_elements_.insert("LR"); + known_elements_.insert("LU"); + known_elements_.insert("MD"); + known_elements_.insert("MG"); + known_elements_.insert("MN"); + known_elements_.insert("MO"); + known_elements_.insert("MT"); + known_elements_.insert("N"); + known_elements_.insert("NA"); + known_elements_.insert("NB"); + known_elements_.insert("ND"); + known_elements_.insert("NE"); + known_elements_.insert("NI"); + known_elements_.insert("NO"); + known_elements_.insert("NP"); + known_elements_.insert("O"); + known_elements_.insert("OS"); + known_elements_.insert("P"); + known_elements_.insert("PA"); + known_elements_.insert("PB"); + known_elements_.insert("PD"); + known_elements_.insert("PM"); + known_elements_.insert("PO"); + known_elements_.insert("PR"); + known_elements_.insert("PT"); + known_elements_.insert("PU"); + known_elements_.insert("RA"); + known_elements_.insert("RB"); + known_elements_.insert("RE"); + known_elements_.insert("RF"); + known_elements_.insert("RH"); + known_elements_.insert("RN"); + known_elements_.insert("RU"); + known_elements_.insert("S"); + known_elements_.insert("SB"); + known_elements_.insert("SC"); + known_elements_.insert("SE"); + known_elements_.insert("SG"); + known_elements_.insert("SI"); + known_elements_.insert("SM"); + known_elements_.insert("SN"); + known_elements_.insert("SR"); + known_elements_.insert("TA"); + known_elements_.insert("TB"); + known_elements_.insert("TC"); + known_elements_.insert("TE"); + known_elements_.insert("TH"); + known_elements_.insert("TI"); + known_elements_.insert("TL"); + known_elements_.insert("TM"); + known_elements_.insert("U"); + known_elements_.insert("V"); + known_elements_.insert("W"); + known_elements_.insert("XE"); + known_elements_.insert("Y"); + known_elements_.insert("YB"); + known_elements_.insert("ZN"); + known_elements_.insert("ZR"); } void Conopology::RegisterBuilder(const BuilderP& b, const String& name) { if (!GetBuilder(name)) builder_map_[name]=b; } + void Conopology::SetDefaultBuilder(const String& default_name) { BuilderP builder=GetBuilder(default_name); if (builder) @@ -310,31 +273,11 @@ void Conopology::ConnectAll(const BuilderP& b, mol::EntityHandle eh, int flag) eh.Apply(tmaker); } -Real Conopology::GetDefaultAtomRadius(const String& element) const +bool Conopology::IsValidElement(const String& ele) const { - String upper_ele=element; - std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); - std::map<String,Real>::const_iterator it = ele_rad_map_.find(upper_ele); - return it==ele_rad_map_.end() ? 1.5 : it->second; + String upper_ele=ele; + std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); + return known_elements_.find(upper_ele)!=known_elements_.end(); } -bool Conopology::IsValidElement(const String& element) const -{ - String upper_ele=element; - std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); - - std::map<String,Real>::const_iterator it = ele_mass_map_.find(upper_ele); - return it!=ele_mass_map_.end(); -} - -Real Conopology::GetDefaultAtomMass(const String& element) const -{ - String upper_ele=element; - std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); - - std::map<String,Real>::const_iterator it = ele_mass_map_.find(upper_ele); - return it==ele_mass_map_.end() ? 1.0 : it->second; -} - - }} // ns diff --git a/modules/conop/src/conop.hh b/modules/conop/src/conop.hh index e8ad4bc0b7034942a446a0726c3cb2949ba76d36..7109c83aaed031112376eed5e5dca2cf1732d673 100644 --- a/modules/conop/src/conop.hh +++ b/modules/conop/src/conop.hh @@ -36,13 +36,6 @@ public: // retrieve a builder by name BuilderP GetBuilder(const String& name="DEFAULT"); - // return default vdW radius - // temporary location until more elaborate chemical information is impl - Real GetDefaultAtomRadius(const String& element) const; - - // return default mass - Real GetDefaultAtomMass(const String& element) const; - /* convenience function, connect all atoms with given coordinates, such as after coordinate file import, based on a given builder @@ -61,8 +54,7 @@ private: Conopology& operator=(const Conopology&) {return *this;} BuilderMap builder_map_; - std::map<String,Real> ele_rad_map_; - std::map<String,Real> ele_mass_map_; + std::set<String> known_elements_; }; }} // diff --git a/modules/conop/src/heuristic_builder.cc b/modules/conop/src/heuristic_builder.cc index bb4a63a229bfdc5b270b447538115df02a8b9659..55f548ae37b97fa43eb564d8a1f93cec8d1da5d7 100644 --- a/modules/conop/src/heuristic_builder.cc +++ b/modules/conop/src/heuristic_builder.cc @@ -474,18 +474,9 @@ bool HeuristicBuilder::IsResidueComplete(const mol::ResidueHandle& rh) void HeuristicBuilder::FillAtomProps(mol::AtomHandle atom) { - mol::AtomProp prop=atom.GetAtomProps(); - if (prop.element=="") { - prop.element=Builder::GuessAtomElement(atom.GetName(), prop.is_hetatm); + if (atom.GetElement()=="") { + atom.SetElement(Builder::GuessAtomElement(atom.GetName(), atom.IsHetAtom())); } - Conopology& conop_inst=Conopology::Instance(); - if (prop.radius==0.0) { - prop.radius=conop_inst.GetDefaultAtomRadius(prop.element); - } - if (prop.mass==0.0) { - prop.mass=conop_inst.GetDefaultAtomMass(prop.element); - } - atom.SetAtomProps(prop); } }} // ns diff --git a/modules/conop/src/rule_based_builder.cc b/modules/conop/src/rule_based_builder.cc index e47c96e358850eb5f89111d575366577e2e9eab7..f8617c89dfaf122e061d937d4842ccfcd99e27ff 100644 --- a/modules/conop/src/rule_based_builder.cc +++ b/modules/conop/src/rule_based_builder.cc @@ -84,17 +84,9 @@ bool RuleBasedBuilder::HasUnknownAtoms(mol::ResidueHandle res) void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom, const AtomSpec& spec) { Conopology& conop_inst=Conopology::Instance(); - mol::AtomProp props=atom.GetAtomProps(); - if (!conop_inst.IsValidElement(props.element)) { - props.element=spec.element; - } - if (props.radius==0.0) { - props.radius=conop_inst.GetDefaultAtomRadius(spec.element); - } - if (props.mass==0.0) { - props.mass=conop_inst.GetDefaultAtomMass(spec.element); - } - atom.SetAtomProps(props); + if (!conop_inst.IsValidElement(atom.GetElement())) { + atom.SetElement(spec.element); + } } void RuleBasedBuilder::FillResidueProps(mol::ResidueHandle residue) @@ -330,18 +322,10 @@ void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom) bool RuleBasedBuilder::OnUnknownAtom(mol::AtomHandle atom) { - mol::AtomProp props=atom.GetAtomProps(); Conopology& conop_inst=Conopology::Instance(); - if (!conop_inst.IsValidElement(props.element)) { - props.element=Builder::GuessAtomElement(atom.GetName(), props.is_hetatm); - } - if (props.radius==0.0) { - props.radius=conop_inst.GetDefaultAtomRadius(props.element); - } - if (props.mass==0.0) { - props.mass=conop_inst.GetDefaultAtomMass(props.element); + if (!conop_inst.IsValidElement(atom.GetElement())) { + atom.SetElement(Builder::GuessAtomElement(atom.GetName(), atom.IsHetAtom())); } - atom.SetAtomProps(props); return false; } diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc index 26f9f009caacc3b352d9f631a9aeda87931de627..2a0315380b75dfe55ef774155d60416c59f07fe9 100644 --- a/modules/gfx/src/impl/backbone_trace.cc +++ b/modules/gfx/src/impl/backbone_trace.cc @@ -78,8 +78,8 @@ public: // determine atom to add to list mol::AtomHandle ca = res.GetCentralAtom(); if (ca) { - NodeEntry entry={ca, GfxObj::Ele2Color(ca.GetAtomProps().element), - GfxObj::Ele2Color(ca.GetAtomProps().element), + NodeEntry entry={ca, GfxObj::Ele2Color(ca.GetElement()), + GfxObj::Ele2Color(ca.GetElement()), geom::Vec3(), // this will be set by the gfx trace obj res.GetCentralNormal(), 1.0, diff --git a/modules/gfx/src/surface.cc b/modules/gfx/src/surface.cc index 6ffae62e6dabef375cac9d900d2b67b9bfcf008e..2e271df6ded607bbc1596e742a1e5417d6f00fd3 100644 --- a/modules/gfx/src/surface.cc +++ b/modules/gfx/src/surface.cc @@ -23,7 +23,6 @@ #include <map> #include <limits> -#include <ost/mol/atom_prop.hh> #include <ost/mol/mol.hh> #include <ost/mol/entity_property_mapper.hh> #include "surface.hh" diff --git a/modules/io/src/mol/entity_io_crd_handler.cc b/modules/io/src/mol/entity_io_crd_handler.cc index 320db5d1d667f81a895096b170ecac51920ca0e4..88286b78e628d869a96ee89456c8070374545c53 100644 --- a/modules/io/src/mol/entity_io_crd_handler.cc +++ b/modules/io/src/mol/entity_io_crd_handler.cc @@ -142,14 +142,7 @@ void CRDReader::ParseAndAddAtom(const String& line, mol::EntityHandle& ent) // finally add atom LOG_DEBUG("adding atom " << aname << " (" << ele << ") @" << apos); - mol::AtomProp aprop; - aprop.element=ele; - aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele); - aprop.is_hetatm=false; - aprop.b_factor=0.0; - aprop.occupancy=1.0; - - mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop); + mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, ele); sequential_atom_list_.push_back(ah); ++atom_count_; } diff --git a/modules/io/src/mol/entity_io_mae_handler.cc b/modules/io/src/mol/entity_io_mae_handler.cc index e810c9089efc13896ce0e418815e846a27ba43cb..f5def7a3e0e6c944fd3bd8652fc376d4e8f9fd0b 100644 --- a/modules/io/src/mol/entity_io_mae_handler.cc +++ b/modules/io/src/mol/entity_io_mae_handler.cc @@ -265,13 +265,7 @@ void MAEReader::add_atom(mol::EntityHandle ent, // finally add atom LOG_DEBUG(" atom " << aname << " (" << ele << ") @" << apos); - mol::AtomProp aprop; - aprop.element=ele; - aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele); - aprop.is_hetatm=false; - aprop.b_factor=0.0; - aprop.occupancy=1.0; - mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop); + mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, ele); } diff --git a/modules/io/src/mol/pdb_reader.cc b/modules/io/src/mol/pdb_reader.cc index 6fad3dc2c2b9fa3c0b2ae0fc86c010e115ac119e..969d9ffa158269e26a8e885b64d3b37121b4fbc3 100644 --- a/modules/io/src/mol/pdb_reader.cc +++ b/modules/io/src/mol/pdb_reader.cc @@ -395,15 +395,13 @@ void PDBReader::ParseAnisou(const StringRef& line, int line_num, throw IOException(str(format(fmt_str) % line_num)); } //get properties which are already set and extend them by adding the ANISOU info - mol::AtomProp aprop=atom.GetAtomProps(); + + geom::Mat3 mat(anisou[0], anisou[3], anisou[4], anisou[3], anisou[1], anisou[5], anisou[4], anisou[5], anisou[2]); - aprop.anisou=mat; - //divide by 10**4 to actually reflect the real values - aprop.anisou/=10000; - aprop.has_anisou=true; - atom.SetAtomProps(aprop); + mat/=10000; + atom.SetAnisou(mat); } void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num, @@ -527,30 +525,7 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num, } // finally add atom LOG_DEBUG("adding atom " << aname << " (" << s_ele << ") @" << apos); - mol::AtomProp aprop; - aprop.element=s_ele; - if(is_pqr_) { - if (radius.first) { - aprop.radius=radius.second; - } else { - aprop.radius=0.0; - } - } else { - aprop.radius=0.0; - } - - if (temp.first) { - aprop.b_factor=temp.second; - } - if (occ.first) { - aprop.occupancy=occ.second; - } - if (charge.first) { - aprop.charge=charge.second; - } - - aprop.is_hetatm=record_type[0]=='H' ? true : false; - + mol::AtomHandle ah; if (alt_loc!=' ') { // Check if there is already a atom with the same name. mol::AtomHandle me=curr_residue_.FindAtom(aname); @@ -562,15 +537,31 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num, "with name " << aname << ", but without an alt loc"); return; } + return; } else { - mol::AtomHandle ah=editor.InsertAltAtom(curr_residue_, aname, - String(1, alt_loc), apos, aprop); + ah=editor.InsertAltAtom(curr_residue_, aname, + String(1, alt_loc), apos, s_ele); ++atom_count_; } } else { - mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop); + ah=editor.InsertAtom(curr_residue_, aname, apos, s_ele); ++atom_count_; } + if(is_pqr_) { + if (radius.first) { + ah.SetRadius(radius.second); + } + } + if (temp.first) { + ah.SetBFactor(temp.second); + } + if (occ.first) { + ah.SetOccupancy(occ.second); + } + if (charge.first) { + ah.SetCharge(charge.second); + } + ah.SetHetAtom(record_type[0]=='H'); } void PDBReader::ParseHelixEntry(const StringRef& line) diff --git a/modules/io/src/mol/pdb_writer.cc b/modules/io/src/mol/pdb_writer.cc index 8b16c2cce992fd7bf61675d315a00ca30178d581..8ab50da6428a8193bf420f8021d6bbea27a35f3b 100644 --- a/modules/io/src/mol/pdb_writer.cc +++ b/modules/io/src/mol/pdb_writer.cc @@ -197,7 +197,7 @@ public: virtual bool VisitAtom(const mol::AtomHandle& atom) { counter_++; write_atom(ostr_, line_, atom, counter_, is_pqr_, charmm_style_); - if (atom.GetAtomProps().is_hetatm) { + if (atom.IsHetAtom()) { atom_indices_[atom.GetHashCode()]=counter_; } return true; @@ -268,7 +268,7 @@ public: private: public: virtual bool VisitAtom(const mol::AtomHandle& atom) { - if (atom.GetAtomProps().is_hetatm) { + if (atom.IsHetAtom()) { bool has_partner=false; int atom_index=atom_indices_[atom.GetHashCode()]; mol::AtomHandleList partners=atom.GetBondPartners(); diff --git a/modules/io/src/mol/sdf_reader.cc b/modules/io/src/mol/sdf_reader.cc index 4427850ea6678b6a9a6cb639e3e92e600c9a30a8..a7f70c916adf46b04133aca145d0809b721c3836 100644 --- a/modules/io/src/mol/sdf_reader.cc +++ b/modules/io/src/mol/sdf_reader.cc @@ -196,17 +196,12 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num, String ele=boost::trim_copy(s_ele); String aname=boost::lexical_cast<String>(anum); - - mol::AtomProp aprop; - aprop.element=ele; - aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele); - aprop.mass=conop::Conopology::Instance().GetDefaultAtomMass(ele); - aprop.is_hetatm=hetatm; - + + Real charge=0.0; try { - aprop.charge=boost::lexical_cast<Real>(boost::trim_copy(s_charge)); - if(aprop.charge != 0) { - aprop.charge=4-aprop.charge; + charge=boost::lexical_cast<Real>(boost::trim_copy(s_charge)); + if (charge!=0) { + charge=4-charge; } //4-sdf_charge=real_charge if not 0 } catch(boost::bad_lexical_cast&) { String msg="Bad atom line %d: Can't convert charge" @@ -216,7 +211,9 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num, LOG_DEBUG("adding atom " << aname << " (" << s_ele << ") @" << apos); - editor.InsertAtom(curr_residue_, aname,apos,aprop); + mol::AtomHandle atom=editor.InsertAtom(curr_residue_, aname,apos, ele); + atom.SetHetAtom(hetatm); + atom.SetCharge(charge); } @@ -257,10 +254,12 @@ void SDFReader::ParseAndAddBond(const String& line, int line_num, mol::AtomHandle first,second; - first = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), first_name); - second = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), second_name); + first = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), + first_name); + second = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), + second_name); - if(first.IsValid() && second.IsValid()) { + if (first.IsValid() && second.IsValid()) { bond = editor.Connect(first, second); bond.SetBondOrder(type); } else { @@ -269,7 +268,8 @@ void SDFReader::ParseAndAddBond(const String& line, int line_num, throw IOException(str(format(msg) % line_num % first % second)); } - LOG_DEBUG("adding bond " << s_first_name << " " << s_second_name << " (" << s_type << ") "); + LOG_DEBUG("adding bond " << s_first_name << " " << s_second_name << " (" + << s_type << ") "); } }} diff --git a/modules/io/tests/test_io_pdb.cc b/modules/io/tests/test_io_pdb.cc index df8ff5295dc686bbcf12c281b649a66a7218ff0c..1c9218aa4373fededd1b5132f016a465bd87bd98 100644 --- a/modules/io/tests/test_io_pdb.cc +++ b/modules/io/tests/test_io_pdb.cc @@ -67,10 +67,10 @@ BOOST_AUTO_TEST_CASE(atom_record) BOOST_CHECK_EQUAL(a1.GetResidue().GetChain().GetName(), "A"); BOOST_CHECK_EQUAL(a1.GetPos(), geom::Vec3(16.0, 64.0, 8.0)); - BOOST_CHECK_EQUAL(a1.GetAtomProps().b_factor, 1.0); - BOOST_CHECK_EQUAL(a1.GetAtomProps().occupancy, 0.5); - BOOST_CHECK_EQUAL(a1.GetAtomProps().element, "N"); - BOOST_CHECK_EQUAL(a1.GetAtomProps().is_hetatm, false); + BOOST_CHECK_EQUAL(a1.GetBFactor(), 1.0); + BOOST_CHECK_EQUAL(a1.GetOccupancy(), 0.5); + BOOST_CHECK_EQUAL(a1.GetElement(), "N"); + BOOST_CHECK_EQUAL(a1.IsHetAtom(), false); mol::AtomHandle a2=ent.FindAtom(" ", mol::ResNum(1), "CA"); BOOST_REQUIRE(a2.IsValid()); BOOST_CHECK_EQUAL(a2.GetName(), "CA"); @@ -78,10 +78,10 @@ BOOST_AUTO_TEST_CASE(atom_record) BOOST_CHECK_EQUAL(a2.GetResidue().GetChain().GetName(), " "); BOOST_CHECK_EQUAL(a2.GetPos(), geom::Vec3(32.0, -128.0, -2.5)); - BOOST_CHECK_EQUAL(a2.GetAtomProps().b_factor, 128.0); - BOOST_CHECK_EQUAL(a2.GetAtomProps().occupancy, 1.0); - BOOST_CHECK_EQUAL(a2.GetAtomProps().element, "C"); - BOOST_CHECK_EQUAL(a2.GetAtomProps().is_hetatm, true); + BOOST_CHECK_EQUAL(a2.GetBFactor(), 128.0); + BOOST_CHECK_EQUAL(a2.GetOccupancy(), 1.0); + BOOST_CHECK_EQUAL(a2.GetElement(), "C"); + BOOST_CHECK_EQUAL(a2.IsHetAtom(), true); } BOOST_AUTO_TEST_CASE(end_record) @@ -162,16 +162,16 @@ BOOST_AUTO_TEST_CASE(anisou_record) BOOST_REQUIRE(ent.GetAtomCount()==1); mol::AtomHandle a1=ent.FindAtom("A", mol::ResNum(7), "N"); BOOST_REQUIRE(a1.IsValid()); - mol::AtomProp props=a1.GetAtomProps(); - BOOST_CHECK_CLOSE(Real( 0.0100), props.anisou(0, 0), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0016), props.anisou(1, 0), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0026), props.anisou(2, 0), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0016), props.anisou(0, 1), Real(1e-4)); - BOOST_CHECK_CLOSE(Real( 0.0110), props.anisou(1, 1), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0054), props.anisou(2, 1), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0026), props.anisou(0, 2), Real(1e-4)); - BOOST_CHECK_CLOSE(Real(-0.0054), props.anisou(1, 2), Real(1e-4)); - BOOST_CHECK_CLOSE(Real( 0.0120), props.anisou(2, 2), Real(1e-4)); + const geom::Mat3& anisou=a1.GetAnisou(); + BOOST_CHECK_CLOSE(Real( 0.0100), anisou(0, 0), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0016), anisou(1, 0), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0026), anisou(2, 0), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0016), anisou(0, 1), Real(1e-4)); + BOOST_CHECK_CLOSE(Real( 0.0110), anisou(1, 1), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0054), anisou(2, 1), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0026), anisou(0, 2), Real(1e-4)); + BOOST_CHECK_CLOSE(Real(-0.0054), anisou(1, 2), Real(1e-4)); + BOOST_CHECK_CLOSE(Real( 0.0120), anisou(2, 2), Real(1e-4)); } BOOST_AUTO_TEST_CASE(only_66_cols) @@ -210,12 +210,10 @@ BOOST_AUTO_TEST_CASE(write_atom) mol::XCSEditor edi=ent.RequestXCSEditor(); mol::ChainHandle ch=edi.InsertChain("A"); mol::ResidueHandle r=edi.AppendResidue(ch, "GLY"); - mol::AtomProp c_prop; - c_prop.element="C"; - c_prop.occupancy=1.0; - c_prop.b_factor=128.0; - mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), - c_prop); + + mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), "C"); + a.SetOccupancy(1.0); + a.SetBFactor(128.0); writer.Write(ent); String s=out.str(); BOOST_CHECK_EQUAL(s.substr(0, 54), @@ -233,14 +231,12 @@ BOOST_AUTO_TEST_CASE(write_hetatom) mol::XCSEditor edi=ent.RequestXCSEditor(); mol::ChainHandle ch=edi.InsertChain("A"); mol::ResidueHandle r=edi.AppendResidue(ch, "CA"); - mol::AtomProp c_prop; - c_prop.element="CA"; - c_prop.is_hetatm=true; - c_prop.mass=40.01; - c_prop.occupancy=1.0; - c_prop.b_factor=40.75; mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), - c_prop); + "CA"); + a.SetHetAtom(true); + a.SetMass(40.01); + a.SetOccupancy(1.0); + a.SetBFactor(40.75); writer.Write(ent); String s=out.str(); BOOST_CHECK_EQUAL(s.substr(0, 54), diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc index bbf858427da81a44a098a997b28682a1cb205073..db108e4c52e35ef12c3e9fb7abe1c03a3216e841 100644 --- a/modules/io/tests/test_io_sdf.cc +++ b/modules/io/tests/test_io_sdf.cc @@ -60,7 +60,7 @@ BOOST_AUTO_TEST_CASE(simple_sdf) BOOST_CHECK_EQUAL(eh.GetChainCount(), 1); BOOST_CHECK_EQUAL(eh.GetAtomCount(), 6); BOOST_CHECK_EQUAL(eh.GetBondCount(), 6); - BOOST_CHECK_CLOSE(eh.GetMass(), Real(121.545502), Real(1e-4)); + BOOST_CHECK_CLOSE(eh.GetMass(), Real(121.546997), Real(1e-4)); // check atom/bond types mol::AtomHandle ah=eh.GetAtomList()[0]; @@ -70,7 +70,7 @@ BOOST_AUTO_TEST_CASE(simple_sdf) BOOST_CHECK_EQUAL(ah2.GetElement(), "Cl"); BOOST_CHECK_CLOSE(ah.GetRadius(), Real(1.55), Real(1e-2)); BOOST_CHECK_CLOSE(ah2.GetRadius(), Real(1.75), Real(1e-2)); - BOOST_CHECK_CLOSE(ah.GetMass(), Real(14.0067), Real(1e-4)); + BOOST_CHECK_CLOSE(ah.GetMass(), Real(14.007), Real(1e-4)); BOOST_CHECK_CLOSE(ah2.GetMass(), Real(35.453), Real(1e-3)); BOOST_CHECK_EQUAL(ah.GetBondCount(), 3); BOOST_CHECK_EQUAL(ah2.GetBondCount(), 1); diff --git a/modules/mol/alg/src/entity_to_density.cc b/modules/mol/alg/src/entity_to_density.cc index 269f23add94f340c0b3f4eb40184b9feadc81bf7..6a15ac44fc68fd179f19b5f1d9405b259ecc3923 100644 --- a/modules/mol/alg/src/entity_to_density.cc +++ b/modules/mol/alg/src/entity_to_density.cc @@ -135,7 +135,7 @@ public: bool found = false; while (found != true && table_iter!=scatt_props_table_.end()) { - if ( (*table_iter).element == (*iterator).GetAtomProps().element) + if ( (*table_iter).element == (*iterator).GetElement()) { geom::Vec3 coord = (*iterator).GetPos(); @@ -287,7 +287,7 @@ public: scatt_props_table_.begin(); bool found = false; while (found != true && table_iter!=scatt_props_table_.end()) { - if ((*table_iter).element == (*iterator).GetAtomProps().element) { + if ((*table_iter).element == (*iterator).GetElement()) { found = true; Real a = (*table_iter).atomic_weight; geom::Vec3 coord = (*iterator).GetPos(); diff --git a/modules/mol/alg/tests/test_superposition.cc b/modules/mol/alg/tests/test_superposition.cc index c410a768ac11b18155fca970f9f1fe23b1c0ec40..599e0e31ca8461a1302b6f9ec8b77131a66cbcb6 100644 --- a/modules/mol/alg/tests/test_superposition.cc +++ b/modules/mol/alg/tests/test_superposition.cc @@ -33,21 +33,18 @@ using namespace ost::mol::alg; struct Fixture { Fixture() { - AtomProp prop; - prop.element="C"; - e=CreateEntity(); XCSEditor ed=e.RequestXCSEditor(); c=ed.InsertChain("A"); r=ed.AppendResidue(c, "XXX"); - ab=ed.InsertAtom(r, "A", geom::Vec3(-5,-5,-5), prop); - ac=ed.InsertAtom(r, "B", geom::Vec3(-5, 5,-5), prop); - ad=ed.InsertAtom(r, "C", geom::Vec3(-5, 5, 5), prop); - ae=ed.InsertAtom(r, "D", geom::Vec3(-5,-5, 5), prop); - af=ed.InsertAtom(r, "E", geom::Vec3(5,-5, 5), prop); - ag=ed.InsertAtom(r, "F", geom::Vec3(5,-5,-5), prop); - ah=ed.InsertAtom(r, "G", geom::Vec3(5, 5,-5), prop); - ai=ed.InsertAtom(r, "H", geom::Vec3(5, 5, 5), prop); + ab=ed.InsertAtom(r, "A", geom::Vec3(-5,-5,-5), "C"); + ac=ed.InsertAtom(r, "B", geom::Vec3(-5, 5,-5), "C"); + ad=ed.InsertAtom(r, "C", geom::Vec3(-5, 5, 5), "C"); + ae=ed.InsertAtom(r, "D", geom::Vec3(-5,-5, 5), "C"); + af=ed.InsertAtom(r, "E", geom::Vec3(5,-5, 5), "C"); + ag=ed.InsertAtom(r, "F", geom::Vec3(5,-5,-5), "C"); + ah=ed.InsertAtom(r, "G", geom::Vec3(5, 5,-5), "C"); + ai=ed.InsertAtom(r, "H", geom::Vec3(5, 5, 5), "C"); BondHandle b1=ed.Connect(ab, ad); diff --git a/modules/mol/base/pymod/export_atom.cc b/modules/mol/base/pymod/export_atom.cc index 13fc2ee554980d1941bb074db842f2364653bac4..fe12a2f64e87b484b0cfa7cd0fdde8080dc38906 100644 --- a/modules/mol/base/pymod/export_atom.cc +++ b/modules/mol/base/pymod/export_atom.cc @@ -42,13 +42,7 @@ void export_Atom() .add_property("qualified_name", &AtomBase::GetQualifiedName) .def("IsValid", &AtomBase::IsValid) .def(self_ns::str(self)) - .def("GetAtomProps", &AtomBase::GetAtomProps, - return_value_policy<copy_const_reference>()) - .def("SetAtomProps", &AtomBase::SetAtomProps, args("prop")) .def("GetIndex", &AtomBase::GetIndex) - .add_property("prop", - make_function(&AtomBase::GetAtomProps, - return_value_policy<copy_const_reference>())) .add_property("pos", make_function(&AtomBase::GetPos, return_value_policy<copy_const_reference>())) @@ -61,15 +55,19 @@ void export_Atom() .def("GetRadius", &AtomBase::GetRadius) .def("GetElement", &AtomBase::GetElement, return_value_policy<copy_const_reference>()) + .def("SetElement", &AtomBase::SetElement) .def("GetCharge", &AtomBase::GetCharge) .def("GetMass", &AtomBase::GetMass) - .def("IsHetAtom", &AtomBase::IsHetAtom) + .def("IsHetAtom", &AtomBase::IsHetAtom) + .def("SetMass", &AtomBase::SetMass) + .def("SetCharge", &AtomBase::SetCharge) .add_property("radius", &AtomBase::GetRadius) .add_property("element", make_function(&AtomBase::GetElement, - return_value_policy<copy_const_reference>())) - .add_property("is_hetatom", &AtomBase::IsHetAtom) - .add_property("charge", &AtomBase::GetCharge) - .add_property("mass", &AtomBase::GetMass) + return_value_policy<copy_const_reference>()), + &AtomBase::SetElement) + .add_property("is_hetatom", &AtomBase::IsHetAtom, &AtomBase::SetHetAtom) + .add_property("charge", &AtomBase::GetCharge, &AtomBase::SetCharge) + .add_property("mass", &AtomBase::GetMass, &AtomBase::SetMass) ; generic_prop_def<AtomBase>(atom_base); @@ -96,15 +94,5 @@ void export_Atom() .def(vector_indexing_suite<AtomHandleList>()) .def(ost::VectorAdditions<AtomHandleList>()) ; - class_<AtomProp>("AtomProp", init<>()) - .def_readwrite("element", &AtomProp::element) - .def_readwrite("radius", &AtomProp::radius) - .def_readwrite("charge", &AtomProp::charge) - .def_readwrite("mass", &AtomProp::mass) - .def_readwrite("occupancy", &AtomProp::occupancy) - .def_readwrite("b_factor", &AtomProp::b_factor) - .def_readwrite("is_hetatm", &AtomProp::is_hetatm) - .def_readwrite("anisou", &AtomProp::anisou) - ; } diff --git a/modules/mol/base/src/CMakeLists.txt b/modules/mol/base/src/CMakeLists.txt index 6b2967cc0f97c73fb93a405b7b6680a9b1717618..0a4314041d865a1611eb74c4532a141d15e50248 100644 --- a/modules/mol/base/src/CMakeLists.txt +++ b/modules/mol/base/src/CMakeLists.txt @@ -26,7 +26,6 @@ query_error.cc query_state.cc residue_base.cc residue_handle.cc -residue_prop.cc residue_view.cc surface_builder.cc surface_handle.cc @@ -42,7 +41,6 @@ xcs_editor.cc) set(OST_MOL_HEADERS atom_base.hh atom_handle.hh -atom_prop.hh atom_view.hh bond_handle.hh bond_table.hh diff --git a/modules/mol/base/src/atom_base.cc b/modules/mol/base/src/atom_base.cc index 2818844b012bb0ac1d8ef0d2f088fb7435128434..6de12176fc090aa013d084ecf1bd178153778011 100644 --- a/modules/mol/base/src/atom_base.cc +++ b/modules/mol/base/src/atom_base.cc @@ -75,19 +75,6 @@ std::vector<String> AtomBase::GetAltGroupNames() const return impl_->GetResidue()->GetAltAtomGroupNames(Impl()); } - -const AtomProp& AtomBase::GetAtomProps() const -{ - this->CheckValidity(); - return impl_->GetAtomProps(); -} - -void AtomBase::SetAtomProps(const AtomProp& prop) -{ - this->CheckValidity(); - impl_->GetAtomProps()=prop; -} - impl::AtomImplPtr& AtomBase::Impl() { return impl_; @@ -134,47 +121,98 @@ std::ostream& operator<<(std::ostream& os, const AtomBase& atom) Real AtomBase::GetRadius() const { this->CheckValidity(); - return Impl()->GetAtomProps().radius; + return Impl()->GetRadius(); } const String& AtomBase::GetElement() const { this->CheckValidity(); - return Impl()->GetAtomProps().element; + return Impl()->GetElement(); } bool AtomBase::IsHetAtom() const { this->CheckValidity(); - return Impl()->GetAtomProps().is_hetatm; + return Impl()->IsHetAtom(); } Real AtomBase::GetBFactor() const { this->CheckValidity(); - return Impl()->GetAtomProps().b_factor; + return Impl()->GetBFactor(); +} +void AtomBase::SetElement(const String& element) +{ + this->CheckValidity(); + Impl()->SetElement(element); +} + +void AtomBase::SetBFactor(Real factor) +{ + this->CheckValidity(); + Impl()->SetBFactor(factor); +} + +void AtomBase::SetOccupancy(Real occ) +{ + this->CheckValidity(); + Impl()->SetOccupancy(occ); } Real AtomBase::GetMass() const { this->CheckValidity(); - return Impl()->GetAtomProps().mass; + return Impl()->GetMass(); } Real AtomBase::GetCharge() const { this->CheckValidity(); - return Impl()->GetAtomProps().charge; + return Impl()->GetCharge(); } Real AtomBase::GetOccupancy() const { this->CheckValidity(); - return Impl()->GetAtomProps().occupancy; + return Impl()->GetOccupancy(); +} + +void AtomBase::SetCharge(Real charge) +{ + this->CheckValidity(); + Impl()->SetCharge(charge); +} + +void AtomBase::SetRadius(Real radius) +{ + this->CheckValidity(); + Impl()->SetCharge(radius); +} + +const geom::Mat3& AtomBase::GetAnisou() const +{ + this->CheckValidity(); + return Impl()->GetAnisou(); } +void AtomBase::SetAnisou(const geom::Mat3& anisou) +{ + this->CheckValidity(); + Impl()->SetAnisou(anisou); +} + +void AtomBase::SetMass(Real mass) +{ + this->CheckValidity(); + Impl()->SetMass(mass); +} +void AtomBase::SetHetAtom(bool het) +{ + this->CheckValidity(); + Impl()->SetHetAtom(het); +} String AtomBase::GetStringProperty(Prop::ID prop_id) const { diff --git a/modules/mol/base/src/atom_base.hh b/modules/mol/base/src/atom_base.hh index 9777aea714732f090c4b2def487086e4031ad26f..189c5830a07d693a91939b01232345c3126650f5 100644 --- a/modules/mol/base/src/atom_base.hh +++ b/modules/mol/base/src/atom_base.hh @@ -75,16 +75,7 @@ public: geom::Vec3 GetAltPos(const String& alt_group) const; std::vector<String> GetAltGroupNames() const; - /// \name Atom properties - //@{ - /// \brief Get atom properties such as element name, radius crystallographic - /// occupancy and temperature factors. - /// - /// \sa #SetAtomProps - const AtomProp& GetAtomProps() const; - - /// \brief Set atom properties. - void SetAtomProps(const AtomProp& prop); + //@} /// \name Handle validity @@ -134,6 +125,24 @@ public: /// The returned value may be zero for some structures Real GetBFactor() const; + + void SetBFactor(Real factor); + + void SetOccupancy(Real occ); + + + void SetCharge(Real charge); + + void SetMass(Real mass); + + void SetHetAtom(bool het); + + void SetRadius(Real radius); + + + const geom::Mat3& GetAnisou() const; + + void SetAnisou(const geom::Mat3& anisou); /// \brief get mass of atom /// /// The returned value may be zero @@ -153,6 +162,8 @@ public: /// \brief get atom implementation impl::AtomImplPtr& Impl(); + + void SetElement(const String& element); protected: GenericPropContainerImpl* GpImpl(); diff --git a/modules/mol/base/src/chain_view.cc b/modules/mol/base/src/chain_view.cc index 1c5ba252e6c3d526ac711bb99f8031d860bda5e5..0e6458c388f6c9ee1cdde4c49eada4781330e3cd 100644 --- a/modules/mol/base/src/chain_view.cc +++ b/modules/mol/base/src/chain_view.cc @@ -381,7 +381,7 @@ geom::Vec3 ChainView::GetCenterOfMass() const ResidueView r=*i; for (AtomViewList::const_iterator j=r.GetAtomList().begin(), e2=r.GetAtomList().end(); j!=e2; ++j) { - center+=j->GetPos() * j->GetAtomProps().mass; + center+=j->GetPos() * j->GetMass(); } } center/=mass; diff --git a/modules/mol/base/src/editor_base.cc b/modules/mol/base/src/editor_base.cc index 02f7d1744240d5b05fdf1d1a8240d67eb503ad7a..4ed9b6a4b3bcbf2bde6cf6e4183cefe13ef06bfb 100644 --- a/modules/mol/base/src/editor_base.cc +++ b/modules/mol/base/src/editor_base.cc @@ -78,29 +78,28 @@ void EditorBase::RenameChain(ChainHandle chain, const String& new_name) AtomHandle EditorBase::InsertAtom(ResidueHandle res, const String& name, - const geom::Vec3& pos, - const AtomProp& prop) + const geom::Vec3& pos, const String& ele) { CheckHandleValidity(res); ent_.Impl()->MarkTraceDirty(); - return AtomHandle(res.Impl()->InsertAtom(name, pos,prop)); + return AtomHandle(res.Impl()->InsertAtom(name, pos, ele)); } AtomHandle EditorBase::InsertAltAtom(ResidueHandle res, const String& name, const String& alt_group, const geom::Vec3& pos, - const AtomProp& prop) + const String& ele) { CheckHandleValidity(res); ent_.Impl()->MarkTraceDirty(); - AtomHandle atom(res.Impl()->InsertAltAtom(name, alt_group, pos, prop)); + AtomHandle atom(res.Impl()->InsertAltAtom(name, alt_group, pos, ele)); this->UpdateTrace(); return atom; } void EditorBase::AddAltAtomPos(const String& group, - const AtomHandle& atom, - const geom::Vec3& position) + const AtomHandle& atom, + const geom::Vec3& position) { CheckHandleValidity(atom); atom.GetResidue().Impl()->AddAltAtomPos(group, atom.Impl(), position); diff --git a/modules/mol/base/src/editor_base.hh b/modules/mol/base/src/editor_base.hh index 4354c82954f995340078c5bf7fafc289b43cd53c..e8a11272657de25b909201a73eca6fb2bb42e64e 100644 --- a/modules/mol/base/src/editor_base.hh +++ b/modules/mol/base/src/editor_base.hh @@ -28,7 +28,6 @@ #include "entity_handle.hh" #include "residue_prop.hh" -#include "atom_prop.hh" #include "editor_type_fw.hh" namespace ost { namespace mol { @@ -116,17 +115,14 @@ public: /// algorithms as well as most builders in the conop module rely on proper /// naming. /// \param pos is the position of the atom in global coordinates - /// \param prop are the atom's properties such as element, van der Waals - /// radius charge and so on. The default set of atom properties is rather - /// meaningless AtomHandle InsertAtom(ResidueHandle residue, const String& name, - const geom::Vec3& pos, const AtomProp& prop=AtomProp()); + const geom::Vec3& pos, const String& ele=""); /// \brief Insert new atom with alternative position indicator /// \sa EditorBase::AddAltAtomPos(), ResidueHandle AtomHandle InsertAltAtom(ResidueHandle residue, const String& name, - const String& alt_group, const geom::Vec3& pos, - const AtomProp& prop=AtomProp()); + const String& alt_group, const geom::Vec3& pos, + const String& ele=""); /// \brief Add alternative atom position /// \param group is the name of the alternative atom position group. If no /// group of that name exists, it will be created. @@ -138,7 +134,7 @@ public: /// is the alternative position /// \sa EditorBase::InsertAltAtom(), ResidueHandle void AddAltAtomPos(const String& group, const AtomHandle& atom, - const geom::Vec3& position); + const geom::Vec3& position); //\} /// \brief connect two atoms with bond diff --git a/modules/mol/base/src/impl/CMakeLists.txt b/modules/mol/base/src/impl/CMakeLists.txt index 41ddeb0b5672a5081a97b63ec1a6a5c3cdc497d5..45a453ac1901307c628aeccb2f427a0293d480d3 100644 --- a/modules/mol/base/src/impl/CMakeLists.txt +++ b/modules/mol/base/src/impl/CMakeLists.txt @@ -10,12 +10,14 @@ query_impl.cc residue_impl.cc surface_impl.cc torsion_impl.cc +atom_prop.cc PARENT_SCOPE ) set(OST_MOL_IMPL_HEADERS pointer_iterator.hh atom_group.hh +atom_prop.hh atom_impl.hh atom_impl_fw.hh chain_impl.hh diff --git a/modules/mol/base/src/impl/atom_impl.cc b/modules/mol/base/src/impl/atom_impl.cc index 698bc863f2083117655a67901aa8bb7d2fa5bfe0..f355416fa95cfdfd548a27b3cdc7ef613225dd91 100644 --- a/modules/mol/base/src/impl/atom_impl.cc +++ b/modules/mol/base/src/impl/atom_impl.cc @@ -40,12 +40,13 @@ AtomImpl::AtomImpl(const EntityImplPtr& e, const ResidueImplPtr& r, const String& n, const geom::Vec3& p, - const AtomProp& prop, + const String& ele, unsigned long index): res_(r), name_(n), pos_(p), - prop_(prop), + element_(ele), + is_hetatm_(false), prim_connector_(), connector_list_(), fragment_(), @@ -56,6 +57,7 @@ AtomImpl::AtomImpl(const EntityImplPtr& e, geom::Mat4 transf_matrix = ent.GetTransformationMatrix(); geom::Vec3 transf_pos = geom::Vec3(transf_matrix*geom::Vec4(p)); tf_pos_ = transf_pos; + prop_=AtomProp::GetDefaultProps(element_); } void AtomImpl::AddSecondaryConnector(const ConnectorImplP& bp) @@ -319,11 +321,11 @@ Real AtomImpl::GetFloatProperty(Prop::ID prop_id) const case Prop::AZ: return pos_[2]; case Prop::OCC: - return prop_.occupancy; + return occupancy_; case Prop::ABFAC: - return prop_.b_factor; + return b_factor_; case Prop::ACHARGE: - return prop_.charge; + return prop_->charge; default: throw PropertyError(prop_id); } @@ -335,7 +337,7 @@ String AtomImpl::GetStringProperty(Prop::ID prop_id) const case Prop::ANAME: return name_; case Prop::ELE: - return prop_.element; + return element_; default: throw PropertyError(prop_id); } diff --git a/modules/mol/base/src/impl/atom_impl.hh b/modules/mol/base/src/impl/atom_impl.hh index 9fcbbf77636a50e0871bf6b01ea70bc28c8a157d..90507b1029575ad86c811d68a07c7142a514d438 100644 --- a/modules/mol/base/src/impl/atom_impl.hh +++ b/modules/mol/base/src/impl/atom_impl.hh @@ -24,7 +24,7 @@ #include <ost/mol/module_config.hh> #include <ost/geom/geom.hh> #include <ost/mol/entity_visitor_fw.hh> -#include <ost/mol/atom_prop.hh> +#include <ost/mol/impl/atom_prop.hh> #include <ost/mol/impl/atom_impl_fw.hh> #include <ost/mol/impl/residue_impl_fw.hh> @@ -50,7 +50,7 @@ class AtomImpl: public GenericPropContainerImpl, public boost::enable_shared_from_this<AtomImpl> { public: AtomImpl(const EntityImplPtr& ent, const ResidueImplPtr& res, - const String& name, const geom::Vec3& pos, const AtomProp& prop, + const String& name, const geom::Vec3& pos, const String& ele, unsigned long index); ~AtomImpl(); @@ -70,11 +70,7 @@ public: void SetTransformedPos(const geom::Vec3& pos) { tf_pos_=pos; } void SetOriginalPos(const geom::Vec3& pos) { pos_=pos; } - - const AtomProp& GetAtomProps() const {return prop_;} - - AtomProp& GetAtomProps() {return prop_;} - + ResidueImplPtr GetResidue() const; void SetPrimaryConnector(const ConnectorImplP& bp) { @@ -111,11 +107,93 @@ public: void SetTraced(bool f) {set_state_bit(1,f);} bool IsTraced() const {return get_state_bit(1);} - unsigned int GetState() const { + + Real GetBFactor() const { return b_factor_; } + + const String& GetElement() const { return element_; } + + void SetElement(const String& ele) + { + if (element_!=ele) { + element_=ele; + prop_=impl::AtomProp::GetDefaultProps(element_); + } + } + + void SetAnisou(const geom::Mat3& anisou) + { + if (prop_->is_default && prop_->anisou!=anisou) { + prop_=new AtomProp(*prop_); + prop_->is_default=false; + prop_->has_anisou=true; + } + + prop_->anisou=anisou; + } + + const geom::Mat3& GetAnisou() const + { + return prop_->anisou; + } + void SetBFactor(Real factor) + { + b_factor_=factor; + } + + void SetOccupancy(Real occ) + { + occupancy_=occ; + } + + Real GetOccupancy() const + { + return occupancy_; + } + + Real GetRadius() const { return prop_->radius; } + + Real GetMass() const { return prop_->mass; } + Real GetCharge() const { return prop_->charge; } + + bool IsHetAtom() { return is_hetatm_; } + + void SetHetAtom(bool het) { is_hetatm_=het; } + + void SetMass(Real mass) + { + if (prop_->is_default && prop_->mass!=mass) { + prop_=new AtomProp(*prop_); + prop_->is_default=false; + } + prop_->mass=mass; + } + + void SetRadius(Real radius) + { + if (prop_->is_default && prop_->radius!=radius) { + prop_=new AtomProp(*prop_); + prop_->is_default=false; + } + prop_->radius=radius; + } + + void SetCharge(Real charge) + { + if (prop_->is_default && prop_->charge!=charge) { + prop_=new AtomProp(*prop_); + prop_->is_default=false; + } + prop_->charge=charge; + } + + + unsigned int GetState() const + { return state_; } - void SetState(int state) { + void SetState(int state) + { state_=state; } @@ -144,11 +222,14 @@ public: private: ResidueImplW res_; - String name_; - geom::Vec3 pos_; - geom::Vec3 tf_pos_; - AtomProp prop_; - + String name_; + geom::Vec3 pos_; + geom::Vec3 tf_pos_; + Real occupancy_; + Real b_factor_; + String element_; + AtomProp* prop_; + bool is_hetatm_; ConnectorImplP prim_connector_; ConnectorImplList connector_list_; FragmentImplP fragment_; diff --git a/modules/mol/base/src/impl/atom_prop.cc b/modules/mol/base/src/impl/atom_prop.cc new file mode 100644 index 0000000000000000000000000000000000000000..dc00c94b048d134aba7520377ee93014c04f34e3 --- /dev/null +++ b/modules/mol/base/src/impl/atom_prop.cc @@ -0,0 +1,157 @@ +//------------------------------------------------------------------------------ +// This file is part of the OpenStructure project <www.openstructure.org> +// +// Copyright (C) 2008-2010 by the OpenStructure authors +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation; either version 3.0 of the License, or (at your option) +// any later version. +// This library is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +// details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this library; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +//------------------------------------------------------------------------------ +#include "atom_prop.hh" + +namespace ost { namespace mol { namespace impl { + +std::map<String, AtomProp> AtomProp::defaults_; + +void AtomProp::Init() +{ + defaults_["AC"]=AtomProp(2.0000, 227.0000); + defaults_["AG"]=AtomProp(1.7200, 107.8680); + defaults_["AL"]=AtomProp(2.0000, 26.9820); + defaults_["AM"]=AtomProp(2.0000, 243.0000); + defaults_["AR"]=AtomProp(1.8800, 39.9480); + defaults_["AS"]=AtomProp(1.8500, 74.9220); + defaults_["AT"]=AtomProp(2.0000, 210.0000); + defaults_["AU"]=AtomProp(1.6600, 196.9670); + defaults_["B"]=AtomProp(2.0000, 10.8110); + defaults_["BA"]=AtomProp(2.0000, 137.3270); + defaults_["BE"]=AtomProp(2.0000, 9.0120); + defaults_["BH"]=AtomProp(2.0000, 264.0000); + defaults_["BI"]=AtomProp(2.0000, 208.9800); + defaults_["BK"]=AtomProp(2.0000, 247.0000); + defaults_["BR"]=AtomProp(1.8500, 79.9040); + defaults_["C"]=AtomProp(1.7000, 12.0110); + defaults_["CA"]=AtomProp(2.0000, 40.0780); + defaults_["CD"]=AtomProp(1.5800, 112.4110); + defaults_["CE"]=AtomProp(2.0000, 140.1160); + defaults_["CF"]=AtomProp(2.0000, 251.0000); + defaults_["CL"]=AtomProp(1.7500, 35.4530); + defaults_["CM"]=AtomProp(2.0000, 247.0000); + defaults_["CO"]=AtomProp(2.0000, 58.9330); + defaults_["CR"]=AtomProp(2.0000, 51.9960); + defaults_["CS"]=AtomProp(2.0000, 132.9050); + defaults_["CU"]=AtomProp(1.4000, 63.5460); + defaults_["DB"]=AtomProp(2.0000, 262.0000); + defaults_["DS"]=AtomProp(2.0000, 271.0000); + defaults_["DY"]=AtomProp(2.0000, 162.5000); + defaults_["ER"]=AtomProp(2.0000, 167.2600); + defaults_["ES"]=AtomProp(2.0000, 252.0000); + defaults_["EU"]=AtomProp(2.0000, 151.9640); + defaults_["F"]=AtomProp(1.4700, 18.9980); + defaults_["FE"]=AtomProp(2.0000, 55.8450); + defaults_["FM"]=AtomProp(2.0000, 257.0000); + defaults_["FR"]=AtomProp(2.0000, 223.0000); + defaults_["GA"]=AtomProp(1.8700, 69.7230); + defaults_["GD"]=AtomProp(2.0000, 157.2500); + defaults_["GE"]=AtomProp(2.0000, 72.6100); + defaults_["H"]=AtomProp(1.0900, 1.0080); + defaults_["HE"]=AtomProp(1.4000, 4.0030); + defaults_["HF"]=AtomProp(2.0000, 178.4900); + defaults_["HG"]=AtomProp(1.5500, 200.5900); + defaults_["HO"]=AtomProp(2.0000, 164.9300); + defaults_["HS"]=AtomProp(2.0000, 269.0000); + defaults_["I"]=AtomProp(1.9800, 126.9040); + defaults_["IN"]=AtomProp(1.9300, 114.8180); + defaults_["IR"]=AtomProp(2.0000, 192.2170); + defaults_["K"]=AtomProp(2.7500, 39.0980); + defaults_["KR"]=AtomProp(2.0200, 83.8000); + defaults_["LA"]=AtomProp(2.0000, 138.9060); + defaults_["LI"]=AtomProp(1.8200, 6.9410); + defaults_["LR"]=AtomProp(1.5000, 103.0000); + defaults_["LU"]=AtomProp(2.0000, 174.9670); + defaults_["MD"]=AtomProp(2.0000, 258.0000); + defaults_["MG"]=AtomProp(1.7300, 24.3050); + defaults_["MN"]=AtomProp(2.0000, 54.9380); + defaults_["MO"]=AtomProp(2.0000, 95.9400); + defaults_["MT"]=AtomProp(2.0000, 268.0000); + defaults_["N"]=AtomProp(1.5500, 14.0070); + defaults_["NA"]=AtomProp(2.2700, 22.9910); + defaults_["NB"]=AtomProp(2.0000, 92.9060); + defaults_["ND"]=AtomProp(2.0000, 144.2400); + defaults_["NE"]=AtomProp(1.5400, 20.1800); + defaults_["NI"]=AtomProp(1.6300, 58.6930); + defaults_["NO"]=AtomProp(2.0000, 259.0000); + defaults_["NP"]=AtomProp(2.0000, 237.0000); + defaults_["O"]=AtomProp(1.5200, 15.9990); + defaults_["OS"]=AtomProp(2.0000, 190.2300); + defaults_["P"]=AtomProp(1.8000, 30.9740); + defaults_["PA"]=AtomProp(2.0000, 231.0360); + defaults_["PB"]=AtomProp(2.0200, 207.2000); + defaults_["PD"]=AtomProp(1.6300, 106.4200); + defaults_["PM"]=AtomProp(2.0000, 145.0000); + defaults_["PO"]=AtomProp(2.0000, 210.0000); + defaults_["PR"]=AtomProp(2.0000, 140.9080); + defaults_["PT"]=AtomProp(1.7200, 195.0780); + defaults_["PU"]=AtomProp(2.0000, 244.0000); + defaults_["RA"]=AtomProp(2.0000, 226.0000); + defaults_["RB"]=AtomProp(2.0000, 85.4680); + defaults_["RE"]=AtomProp(2.0000, 186.2070); + defaults_["RF"]=AtomProp(2.0000, 261.0000); + defaults_["RH"]=AtomProp(2.0000, 102.9060); + defaults_["RN"]=AtomProp(2.0000, 222.0000); + defaults_["RU"]=AtomProp(2.0000, 101.0700); + defaults_["S"]=AtomProp(1.8000, 32.0660); + defaults_["SB"]=AtomProp(2.0000, 121.7600); + defaults_["SC"]=AtomProp(2.0000, 44.9560); + defaults_["SE"]=AtomProp(1.9000, 78.9600); + defaults_["SG"]=AtomProp(2.0000, 266.0000); + defaults_["SI"]=AtomProp(2.1000, 28.0860); + defaults_["SM"]=AtomProp(2.0000, 150.3600); + defaults_["SN"]=AtomProp(2.1700, 118.7100); + defaults_["SR"]=AtomProp(2.0000, 87.6200); + defaults_["TA"]=AtomProp(2.0000, 180.9480); + defaults_["TB"]=AtomProp(2.0000, 158.9250); + defaults_["TC"]=AtomProp(2.0000, 98.0000); + defaults_["TE"]=AtomProp(2.0600, 127.6000); + defaults_["TH"]=AtomProp(2.0000, 232.0380); + defaults_["TI"]=AtomProp(2.0000, 47.8670); + defaults_["TL"]=AtomProp(1.9600, 204.3830); + defaults_["TM"]=AtomProp(2.0000, 168.9340); + defaults_["U"]=AtomProp(1.8600, 238.0290); + defaults_["V"]=AtomProp(2.0000, 50.9420); + defaults_["W"]=AtomProp(2.0000, 183.8400); + defaults_["XE"]=AtomProp(2.1600, 131.2900); + defaults_["Y"]=AtomProp(2.0000, 88.9060); + defaults_["YB"]=AtomProp(2.0000, 173.0400); + defaults_["ZN"]=AtomProp(1.3900, 65.3900); + defaults_["ZR"]=AtomProp(2.0000, 91.2240); + + defaults_[""]=AtomProp(0.0, 0.0); + +} + +AtomProp* AtomProp::GetDefaultProps(const String& ele) +{ + if (defaults_.empty()) { + AtomProp::Init(); + } + String upper_ele=ele; + std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper); + std::map<String, AtomProp>::iterator i=defaults_.find(upper_ele); + if (i!=defaults_.end()) { + return &i->second; + } + return &defaults_[""]; +} + + +}}} diff --git a/modules/mol/base/src/atom_prop.hh b/modules/mol/base/src/impl/atom_prop.hh similarity index 68% rename from modules/mol/base/src/atom_prop.hh rename to modules/mol/base/src/impl/atom_prop.hh index badf20f00898a70a416826bcdf9602fc04d2b9d4..95e3068ea44ae429340c6d1785e1c48154d29f5b 100644 --- a/modules/mol/base/src/atom_prop.hh +++ b/modules/mol/base/src/impl/atom_prop.hh @@ -19,38 +19,42 @@ #ifndef OST_ATOM_PROP_HH #define OST_ATOM_PROP_HH +#include <map> #include <ost/mol/module_config.hh> #include <ost/geom/mat3.hh> -namespace ost { namespace mol { - +namespace ost { namespace mol { namespace impl { class DLLEXPORT_OST_MOL AtomProp { public: AtomProp() - : element(""), radius(0.0), occupancy(1.0), - b_factor(0.0), charge(0.0), mass(0.0), - is_hetatm(false), has_anisou(false), - ordinal(0), anisou(geom::Mat3()) { - + : radius(0.0), charge(0.0), mass(0.0), has_anisou(false), is_default(true), + anisou(geom::Mat3()) + { } - String element; + AtomProp(Real r, Real m, Real c=0.0): radius(r), charge(c), + mass(m), has_anisou(false), is_default(true) + { } + AtomProp(const AtomProp& rhs): radius(rhs.radius), charge(rhs.charge), + mass(rhs.mass), has_anisou(rhs.has_anisou), is_default(rhs.is_default), + anisou(rhs.anisou) + { } Real radius; - Real occupancy; - Real b_factor; Real charge; Real mass; - bool is_hetatm; bool has_anisou; - - int ordinal; + bool is_default; geom::Mat3 anisou; + + static AtomProp* GetDefaultProps(const String& ele); + private: - unsigned char flags; + static void Init(); + static std::map<String, AtomProp> defaults_; }; -}} // ns +}}} // ns #endif diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc index 0395a810791cf1201663e5c9e7dacd8591c3f875..77948203633cb010a0a81da80dd582643f6cf327 100644 --- a/modules/mol/base/src/impl/chain_impl.cc +++ b/modules/mol/base/src/impl/chain_impl.cc @@ -369,7 +369,7 @@ Real ChainImpl::GetMass() const ResidueImplPtr r=*i; for (AtomImplList::iterator j=r->GetAtomList().begin(); j!=r->GetAtomList().end(); ++j) { - mass+=(*j)->GetAtomProps().mass; + mass+=(*j)->GetMass(); } } return mass; @@ -424,7 +424,7 @@ geom::Vec3 ChainImpl::GetCenterOfMass() const ResidueImplPtr r=*i; for (AtomImplList::iterator j=r->GetAtomList().begin(); j!=r->GetAtomList().end(); ++j) { - center+=(*j)->GetPos() * (*j)->GetAtomProps().mass; + center+=(*j)->GetPos() * (*j)->GetMass(); } } center/=mass; diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc index 33d9bef0552fee83ec02d05676d2ca4a6b1526a4..c7ceb61ce2b8a1b9d4a6e1466e2b47a8f3ca04ce 100644 --- a/modules/mol/base/src/impl/entity_impl.cc +++ b/modules/mol/base/src/impl/entity_impl.cc @@ -297,7 +297,7 @@ geom::Vec3 EntityImpl::GetCenterOfMass() const { Real mass = this->GetMass(); if (this->GetAtomCount()>0 && mass>0) { for(AtomImplMap::const_iterator it = atom_map_.begin();it!=atom_map_.end();++it) { - center+=it->second->GetPos()*it->second->GetAtomProps().mass; + center+=it->second->GetPos()*it->second->GetMass(); } center/=mass; } @@ -308,7 +308,7 @@ Real EntityImpl::GetMass() const { Real mass=0.0; for (AtomImplMap::const_iterator it = atom_map_.begin(); it!=atom_map_.end();++it) { - mass+=it->second->GetAtomProps().mass; + mass+=it->second->GetMass(); } return mass; } @@ -316,13 +316,13 @@ Real EntityImpl::GetMass() const { AtomImplPtr EntityImpl::CreateAtom(const ResidueImplPtr& rp, const String& name, const geom::Vec3& pos, - const AtomProp& prop) + const String& ele) { #if MAKE_SHARED_AVAILABLE AtomImplPtr ap=boost::make_shared<AtomImpl>(shared_from_this(), rp, name, - pos, prop,next_index_++); + pos, ele,next_index_++); #else - AtomImplPtr ap(new AtomImpl(shared_from_this(), rp, name, pos, prop,next_index_++)); + AtomImplPtr ap(new AtomImpl(shared_from_this(), rp, name, pos, ele, next_index_++)); #endif if (identity_transf_ == false) { geom::Vec3 transformed_pos = geom::Vec3(transformation_matrix_*geom::Vec4(pos)); diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh index c01285ed2323b376e34d0754ed6e6ef21717999b..3c6579452c32e2ccf5d03bd5bb0fb4c4c06f5751 100644 --- a/modules/mol/base/src/impl/entity_impl.hh +++ b/modules/mol/base/src/impl/entity_impl.hh @@ -101,7 +101,7 @@ public: // default copy ctor and assignment op should work for now AtomImplPtr CreateAtom(const ResidueImplPtr& rp, const String& name, - const geom::Vec3& pos, const AtomProp& prop); + const geom::Vec3& pos, const String& ele); ResidueImplPtr CreateResidue(const ChainImplPtr& cp, const ResNum& n, diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc index b997ced3f5ee1e88fb833cec5236d7d0c0702e57..ef6ffd7291e2cf513c20d2047d4e9fe01478b996 100644 --- a/modules/mol/base/src/impl/residue_impl.cc +++ b/modules/mol/base/src/impl/residue_impl.cc @@ -47,10 +47,11 @@ ResidueImpl::ResidueImpl(const EntityImplPtr& ent, AtomImplPtr ResidueImpl::InsertAtom(const String& name, - const geom::Vec3& pos, - const AtomProp& prop) + const geom::Vec3& pos, + const String& ele) { - AtomImplPtr ap=ent_.lock()->CreateAtom(shared_from_this(),name, pos, prop); + AtomImplPtr ap=ent_.lock()->CreateAtom(shared_from_this(), + name, pos, ele); atom_list_.push_back(ap); return ap; } @@ -59,7 +60,7 @@ AtomImplPtr ResidueImpl::InsertAtom(const AtomImplPtr& atom) { AtomImplPtr dst_atom=this->InsertAtom(atom->GetName(), atom->GetPos(), - atom->GetAtomProps()); + atom->GetElement()); dst_atom->Assign(*atom.get()); dst_atom->SetState(atom->GetState()); return dst_atom; @@ -70,7 +71,7 @@ Real ResidueImpl::GetAverageBFactor() const Real sum=0; for (AtomImplList::const_iterator i=atom_list_.begin(), e=atom_list_.end(); i!=e; ++i) { - sum+=(*i)->GetAtomProps().b_factor; + sum+=(*i)->GetBFactor(); } return atom_list_.size()>0 ? sum/atom_list_.size() : 0.0; } @@ -115,8 +116,8 @@ geom::Vec3 ResidueImpl::GetAltAtomPos(const AtomImplPtr& atom, AtomImplPtr ResidueImpl::InsertAltAtom(const String& name, const String& alt_group, const geom::Vec3& pos, - const AtomProp& prop) { - AtomImplPtr atom=this->InsertAtom(name, pos, prop); + const String& ele) { + AtomImplPtr atom=this->InsertAtom(name, pos, ele); this->AddAltAtom(alt_group, atom, pos); return atom; } @@ -422,7 +423,7 @@ Real ResidueImpl::GetMass() const Real mass = 0; for (AtomImplList::const_iterator i=atom_list_.begin(); i!=atom_list_.end(); ++i) { - mass+=(*i)->GetAtomProps().mass; + mass+=(*i)->GetMass(); } return mass; } @@ -466,7 +467,7 @@ geom::Vec3 ResidueImpl::GetCenterOfMass() const if (this->GetAtomCount() > 0 && mass > 0) { for (AtomImplList::const_iterator i=atom_list_.begin(); i!=atom_list_.end(); ++i) { - center+=(*i)->GetPos()*(*i)->GetAtomProps().mass; + center+=(*i)->GetPos()*(*i)->GetMass(); } } return center/mass; diff --git a/modules/mol/base/src/impl/residue_impl.hh b/modules/mol/base/src/impl/residue_impl.hh index 183a9ccefe8c5025f2790109b0ab3d26acfc17f8..a9f8481d2304d501d8a3565d183a044f811ffccf 100644 --- a/modules/mol/base/src/impl/residue_impl.hh +++ b/modules/mol/base/src/impl/residue_impl.hh @@ -51,13 +51,13 @@ public: ResidueImpl(const EntityImplPtr& ent, const ChainImplPtr& ch, const ResNum& num, const ResidueKey& key); - AtomImplPtr InsertAtom(const String& name, const geom::Vec3& pos, - const AtomProp& prop); + AtomImplPtr InsertAtom(const String& name, const geom::Vec3& pos, + const String& ele); /// \brief insert new residue with exactly the same parameters as atom, but /// no bonds AtomImplPtr InsertAtom(const AtomImplPtr& atom); AtomImplPtr InsertAltAtom(const String& name, const String& alt_group, - const geom::Vec3& pos, const AtomProp& prop); + const geom::Vec3& pos, const String& ele); const ResNum& GetNumber() const {return num_;} void SetNumber(const ResNum& num) {num_=num;} diff --git a/modules/mol/base/src/query_state.cc b/modules/mol/base/src/query_state.cc index 95dc07e16ef138132fc9b8a43c93c23061e994ee..03b2ea28b9236fa1088791541faf62e1a6351436 100644 --- a/modules/mol/base/src/query_state.cc +++ b/modules/mol/base/src/query_state.cc @@ -334,17 +334,17 @@ boost::logic::tribool QueryState::EvalAtom(const impl::AtomImplPtr& a) { boost::get<float>(ss.param)); break; case Prop::OCC: - float_value=a->GetAtomProps().occupancy; + float_value=a->GetOccupancy(); s_[*i]=cmp_num<Real>(ss.comp_op, float_value, boost::get<float>(ss.param)); break; case Prop::ELE: - str_value = a->GetAtomProps().element; + str_value = a->GetElement(); s_[*i] = cmp_string(ss.comp_op,str_value, boost::get<String>(ss.param)); break; case Prop::ABFAC: - float_value=a->GetAtomProps().b_factor; + float_value=a->GetBFactor(); s_[*i]=cmp_num<Real>(ss.comp_op, float_value, boost::get<float>(ss.param)); break; @@ -354,11 +354,11 @@ boost::logic::tribool QueryState::EvalAtom(const impl::AtomImplPtr& a) { ss.comp_op); break; case Prop::ISHETATM: - int_value = a->GetAtomProps().is_hetatm; + int_value = a->IsHetAtom(); s_[*i] = cmp_num<int>(ss.comp_op,int_value,boost::get<int>(ss.param)); break; case Prop::ACHARGE: - float_value=a->GetAtomProps().charge; + float_value=a->GetCharge(); s_[*i]=cmp_num<Real>(ss.comp_op, float_value, boost::get<float>(ss.param)); break; diff --git a/modules/mol/base/src/residue_handle.hh b/modules/mol/base/src/residue_handle.hh index f1eb07850185a9b1ea404eeceaedb589e1feff9b..83890f3afb5741bf410bbc9e9fc126aac67e609a 100644 --- a/modules/mol/base/src/residue_handle.hh +++ b/modules/mol/base/src/residue_handle.hh @@ -25,7 +25,6 @@ #include <ost/mol/query.hh> #include <ost/mol/module_config.hh> #include <ost/mol/residue_base.hh> -#include <ost/mol/atom_prop.hh> #include <ost/mol/entity_visitor_fw.hh> #include <ost/mol/iterator_fw.hh> diff --git a/modules/mol/base/src/residue_prop.cc b/modules/mol/base/src/residue_prop.cc deleted file mode 100644 index 3712bfe0b901e55bf67b8492406e96d231b4ac87..0000000000000000000000000000000000000000 --- a/modules/mol/base/src/residue_prop.cc +++ /dev/null @@ -1,95 +0,0 @@ -//------------------------------------------------------------------------------ -// This file is part of the OpenStructure project <www.openstructure.org> -// -// Copyright (C) 2008-2010 by the OpenStructure authors -// -// This library is free software; you can redistribute it and/or modify it under -// the terms of the GNU Lesser General Public License as published by the Free -// Software Foundation; either version 3.0 of the License, or (at your option) -// any later version. -// This library is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -// details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this library; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -//------------------------------------------------------------------------------ -#include "residue_prop.hh" -#include <boost/format.hpp> - -namespace ost { namespace mol { - -ResNum::ResNum(int n): - num_(n), alt_('\0') -{} - -ResNum::ResNum(int n, char a): - num_(n), alt_(a) -{} - -bool ResNum::operator==(const ResNum& r) const -{ - return num_==r.num_ && alt_==r.alt_; -} - -bool ResNum::operator<(const ResNum& r) const -{ - return num_==r.num_ ? alt_<r.alt_ : num_<r.num_; -} - -int ResNum::operator+=(int i) -{ - num_+=i; - return num_; -} - -int ResNum::operator-=(int i) -{ - num_-=i; - return num_; -} - -int ResNum::operator+=(const ResNum& r) -{ - num_+=r.num_; - return num_; -} - -int ResNum::operator-=(const ResNum& r) -{ - num_-=r.num_; - return num_; -} - -ResNum& ResNum::operator++() -{ - ++num_; - return *this; -} - -ResNum& ResNum::operator--() -{ - --num_; - return *this; -} - -ResNum ResNum::NextInsertionCode() const -{ - char alt= alt_=='\0' ? 'a' : alt_+1; - ResNum nrvo(num_,alt); - return nrvo; -} - -String ResNum::AsString() const { - return str(boost::format("%d%s") % num_ % (alt_==0 ? "" : String(1, alt_))); -} - -std::ostream& operator<<(std::ostream& os, const ResNum& n) -{ - return os << n.AsString(); -} - - -}} // ns diff --git a/modules/mol/base/src/residue_prop.hh b/modules/mol/base/src/residue_prop.hh index 2bb92b3da49032829c360f069d0ea9d76bf64296..001660fa02d7b27494ee3b70586d6fd640c46af8 100644 --- a/modules/mol/base/src/residue_prop.hh +++ b/modules/mol/base/src/residue_prop.hh @@ -25,48 +25,112 @@ namespace ost { namespace mol { -/* - -*/ -class DLLEXPORT_OST_MOL ResNum: private + +class DLLEXPORT ResNum: private boost::additive<ResNum, int, boost::totally_ordered<ResNum, boost::totally_ordered<ResNum, int, boost::unit_steppable<ResNum> > > > { public: - ResNum(int num); // no explicit on purpose - ResNum(int num, char alt); - - bool operator==(const ResNum&) const; - bool operator<(const ResNum&) const; - int operator+=(int); - int operator-=(int); - int operator+=(const ResNum&); - int operator-=(const ResNum&); - ResNum& operator++(); - ResNum& operator--(); - - ResNum NextInsertionCode() const; - - int GetNum() const {return num_;} - char GetInsCode() const {return alt_;} + ResNum(int n): + num_(n), alt_('\0') + { } + + ResNum(int n, char a): + num_(n), alt_(a) + {} + + bool operator==(const ResNum& r) const + { + return num_==r.num_ && alt_==r.alt_; + } + + bool operator<(const ResNum& r) const + { + return num_==r.num_ ? alt_<r.alt_ : num_<r.num_; + } + + int operator+=(int i) + { + num_+=i; + return num_; + } + + int operator-=(int i) + { + num_-=i; + return num_; + } + + int operator+=(const ResNum& r) + { + num_+=r.num_; + return num_; + } + + int operator-=(const ResNum& r) + { + num_-=r.num_; + return num_; + } + + ResNum& operator++() + { + ++num_; + return *this; + } + + ResNum& operator--() + { + --num_; + return *this; + } + + ResNum NextInsertionCode() const + { + char alt= alt_=='\0' ? 'a' : alt_+1; + ResNum nrvo(num_,alt); + return nrvo; + } /// \brief get residue number as String /// /// The returned String consists of both the numeric residue sequence number /// and the insertion code. If the insertion code is not defined, i.e. is /// equal to the null character, only the residue sequence number is returned. - String AsString() const; + inline String AsString() const; + + int GetNum() const { return num_; } + + void SetNum(int num) { num_=num; } + + void SetInsCode(char ins_code) { alt_=ins_code; } + + char GetInsCode() const { return alt_; } + private: - int num_; - char alt_; + int num_ : 24; + int alt_ : 8; }; -DLLEXPORT_OST_MOL std::ostream& operator<<(std::ostream& os, const ResNum& n); - typedef String ResidueKey; +inline std::ostream& operator<<(std::ostream& os, const ResNum& n) +{ + return os << n.GetNum(); + if (n.GetInsCode()!='\0') + os << n.GetInsCode(); + return os; +} + +inline String ResNum::AsString() const +{ + std::stringstream ss; + ss << *this; + return ss.str(); +} + }} // ns diff --git a/modules/mol/base/src/residue_view.cc b/modules/mol/base/src/residue_view.cc index 53e0a3eaa79126ebbd6095a3c69719196a8d6c09..8f76c5766d1f215bc2a3ee46b5e892a7347ee038 100644 --- a/modules/mol/base/src/residue_view.cc +++ b/modules/mol/base/src/residue_view.cc @@ -200,7 +200,7 @@ double ResidueView::GetMass() const double mass = 0; AtomViewList::const_iterator i; for (i=data_->atoms.begin(); i!=data_->atoms.end(); ++i) { - mass+=(*i).GetAtomProps().mass; + mass+=(*i).GetMass(); } return mass; } @@ -226,7 +226,7 @@ geom::Vec3 ResidueView::GetCenterOfMass() const if (!data_->atoms.empty() && mass > 0) { AtomViewList::const_iterator i; for (i=data_->atoms.begin(); i!=data_->atoms.end(); ++i) { - center+=(*i).GetPos()*(*i).GetAtomProps().mass; + center+=(*i).GetPos()*(*i).GetMass(); } center/=mass; } diff --git a/modules/mol/base/tests/test_atom_groups.cc b/modules/mol/base/tests/test_atom_groups.cc index 72835fa76d4f441c8cb407fbb769e81488004c84..01e3510ff365c0336fe5ce1532005884e4cbd6f7 100644 --- a/modules/mol/base/tests/test_atom_groups.cc +++ b/modules/mol/base/tests/test_atom_groups.cc @@ -40,7 +40,7 @@ BOOST_AUTO_TEST_CASE(switch_pos) XCSEditor editor=ent.e.RequestXCSEditor(); BOOST_CHECK_THROW(editor.AddAltAtomPos("B", ent.aa, y), Error); - AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", y, AtomProp()); + AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", y); BOOST_CHECK_NO_THROW(editor.AddAltAtomPos("B", xx, z)); BOOST_CHECK_EQUAL(ent.r.GetCurrentAltGroupName(), "A"); BOOST_CHECK(ent.r.SwitchAtomPos("B")); @@ -56,10 +56,8 @@ BOOST_AUTO_TEST_CASE(delete_atom) { test::DummyEnt ent; XCSEditor editor=ent.e.RequestXCSEditor(); - AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", geom::Vec3(), - AtomProp()); - AtomHandle zz=editor.InsertAltAtom(ent.r, "XX", "A", geom::Vec3(), - AtomProp()); + AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", geom::Vec3()); + AtomHandle zz=editor.InsertAltAtom(ent.r, "XX", "A", geom::Vec3()); editor.AddAltAtomPos("B", xx, geom::Vec3()); editor.AddAltAtomPos("B", zz, geom::Vec3()); @@ -78,8 +76,7 @@ BOOST_AUTO_TEST_CASE(atom_group_triv) std::vector<String> names=ent.r.GetAltAtomGroupNames(); BOOST_CHECK(names.empty()); XCSEditor editor=ent.e.RequestXCSEditor(); - AtomHandle xx=editor.InsertAltAtom(ent.r, "A", "ZZ", geom::Vec3(0.0,1.0,0.0), - AtomProp()); + AtomHandle xx=editor.InsertAltAtom(ent.r, "A", "ZZ", geom::Vec3(0.0,1.0,0.0)); editor.AddAltAtomPos("B", xx, geom::Vec3(1.0, 0.0, 0.0)); BOOST_CHECK(ent.r.HasAltAtoms()==true); BOOST_CHECK(ent.r.HasAltAtomGroup("B")==true); diff --git a/modules/mol/base/tests/test_query.cc b/modules/mol/base/tests/test_query.cc index d84a3156be0375fedf8db262a0970d29c8a0d952..c3f779a872aac92060c96572378458c090598b38 100644 --- a/modules/mol/base/tests/test_query.cc +++ b/modules/mol/base/tests/test_query.cc @@ -36,52 +36,38 @@ EntityHandle make_query_test_entity() chain.SetFloatProp("testprop_c", 1.0); ResidueHandle res = e.AppendResidue(chain, "MET"); res.SetFloatProp("testpropr", 1.0); - AtomProp c_atom; - c_atom.element="C"; - c_atom.radius=1.0; - - AtomProp o_atom; - o_atom.element="O"; - o_atom.radius=1.0; - AtomProp n_atom; - n_atom.element="N"; - n_atom.radius=1.0; - - AtomProp s_atom; - s_atom.element="S"; - s_atom.radius=1.0; - AtomHandle ah=e.InsertAtom(res, "N",geom::Vec3(21.609,35.384,56.705), n_atom); + AtomHandle ah=e.InsertAtom(res, "N",geom::Vec3(21.609,35.384,56.705), "N"); ah.SetFloatProp("testpropa", 1.0); - e.InsertAtom(res, "CA",geom::Vec3(20.601,35.494,57.793), c_atom); - e.InsertAtom(res, "C",geom::Vec3(19.654,34.300,57.789), c_atom); - e.InsertAtom(res, "O",geom::Vec3(18.447,34.456,57.595), o_atom); - e.InsertAtom(res, "CB",geom::Vec3(19.789,36.783,57.639), c_atom); - e.InsertAtom(res, "CG",geom::Vec3(20.629,38.055,57.606), c_atom); - e.InsertAtom(res, "SD",geom::Vec3(21.638,38.325,59.084), s_atom); - e.InsertAtom(res, "CE",geom::Vec3(23.233,37.697,58.529), c_atom); + e.InsertAtom(res, "CA",geom::Vec3(20.601,35.494,57.793), "C"); + e.InsertAtom(res, "C",geom::Vec3(19.654,34.300,57.789), "C"); + e.InsertAtom(res, "O",geom::Vec3(18.447,34.456,57.595), "O"); + e.InsertAtom(res, "CB",geom::Vec3(19.789,36.783,57.639), "C"); + e.InsertAtom(res, "CG",geom::Vec3(20.629,38.055,57.606), "C"); + e.InsertAtom(res, "SD",geom::Vec3(21.638,38.325,59.084), "S"); + e.InsertAtom(res, "CE",geom::Vec3(23.233,37.697,58.529), "C"); res = e.AppendResidue(chain, "ARG"); - e.InsertAtom(res, "N",geom::Vec3(20.202,33.112,58.011), n_atom); - e.InsertAtom(res, "CA",geom::Vec3(19.396,31.903,58.033), c_atom); - e.InsertAtom(res, "C",geom::Vec3(18.608,31.739,59.328), c_atom); - e.InsertAtom(res, "O",geom::Vec3(17.651,30.965,59.381), o_atom); - e.InsertAtom(res, "CB",geom::Vec3(20.284,30.681,57.801), c_atom); - e.InsertAtom(res, "CG",geom::Vec3(20.665,30.488,56.342), c_atom); - e.InsertAtom(res, "CD",geom::Vec3(21.557,29.281,56.154), c_atom); - e.InsertAtom(res, "NE",geom::Vec3(22.931,29.557,56.551), n_atom); - e.InsertAtom(res, "CZ",geom::Vec3(23.901,28.653,56.528), c_atom); - e.InsertAtom(res, "NH1",geom::Vec3(23.640,27.417,56.130), n_atom); - e.InsertAtom(res, "NH2",geom::Vec3(25.132,28.980,56.893), n_atom); + e.InsertAtom(res, "N",geom::Vec3(20.202,33.112,58.011), "N"); + e.InsertAtom(res, "CA",geom::Vec3(19.396,31.903,58.033), "C"); + e.InsertAtom(res, "C",geom::Vec3(18.608,31.739,59.328), "C"); + e.InsertAtom(res, "O",geom::Vec3(17.651,30.965,59.381), "O"); + e.InsertAtom(res, "CB",geom::Vec3(20.284,30.681,57.801), "C"); + e.InsertAtom(res, "CG",geom::Vec3(20.665,30.488,56.342), "C"); + e.InsertAtom(res, "CD",geom::Vec3(21.557,29.281,56.154), "C"); + e.InsertAtom(res, "NE",geom::Vec3(22.931,29.557,56.551), "N"); + e.InsertAtom(res, "CZ",geom::Vec3(23.901,28.653,56.528), "C"); + e.InsertAtom(res, "NH1",geom::Vec3(23.640,27.417,56.130), "N"); + e.InsertAtom(res, "NH2",geom::Vec3(25.132,28.980,56.893), "N"); res = e.AppendResidue(chain, "LEU"); - e.InsertAtom(res, "N",geom::Vec3(19.003,32.473,60.366), n_atom); - e.InsertAtom(res, "CA",geom::Vec3(18.330,32.402,61.664), c_atom); - e.InsertAtom(res, "C",geom::Vec3(17.884,33.787,62.117), c_atom); - e.InsertAtom(res, "O",geom::Vec3(17.853,34.091,63.308), o_atom); - e.InsertAtom(res, "CB",geom::Vec3(19.269,31.793,62.710), c_atom); - e.InsertAtom(res, "CG",geom::Vec3(19.695,30.340,62.501), c_atom); - e.InsertAtom(res, "CD1",geom::Vec3(20.585,29.897,63.648), c_atom); - e.InsertAtom(res, "CD2",geom::Vec3(18.461,29.459,62.420), c_atom); + e.InsertAtom(res, "N",geom::Vec3(19.003,32.473,60.366), "N"); + e.InsertAtom(res, "CA",geom::Vec3(18.330,32.402,61.664), "C"); + e.InsertAtom(res, "C",geom::Vec3(17.884,33.787,62.117), "C"); + e.InsertAtom(res, "O",geom::Vec3(17.853,34.091,63.308), "O"); + e.InsertAtom(res, "CB",geom::Vec3(19.269,31.793,62.710), "C"); + e.InsertAtom(res, "CG",geom::Vec3(19.695,30.340,62.501), "C"); + e.InsertAtom(res, "CD1",geom::Vec3(20.585,29.897,63.648), "C"); + e.InsertAtom(res, "CD2",geom::Vec3(18.461,29.459,62.420), "C"); return eh; } diff --git a/modules/qa/src/clash_score.cc b/modules/qa/src/clash_score.cc index 66b95c09635eefd8fbf2fdbde5db2e78cf5bf501..d05a4e3fef38e5ea2b28b64f154f27df36d4f5ac 100644 --- a/modules/qa/src/clash_score.cc +++ b/modules/qa/src/clash_score.cc @@ -48,12 +48,12 @@ Real do_clash_score(const T& ent_a, const mol::EntityView& ent_b) for (I i=ent_a.AtomsBegin(), e=ent_a.AtomsEnd(); i!=e; ++i) { mol::AtomViewList clashees=ent_b.FindWithin((*i).GetPos(), - (*i).GetAtomProps().radius+1.7); + (*i).GetRadius()+1.7); for (mol::AtomViewList::iterator j=clashees.begin(), e2=clashees.end(); j!=e2; ++j) { - energy+=StericEnergy((*j).GetPos(), (*j).GetAtomProps().radius-0.25, - (*i).GetPos(), (*i).GetAtomProps().radius-0.25); + energy+=StericEnergy((*j).GetPos(), (*j).GetRadius()-0.25, + (*i).GetPos(), (*i).GetRadius()-0.25); } } return energy; @@ -75,11 +75,11 @@ Real ClashScore(const mol::AtomHandle& atom, const mol::EntityView& ent_b) { Real energy=0.0; mol::AtomViewList clashees=ent_b.FindWithin(atom.GetPos(), - atom.GetAtomProps().radius+2.0); + atom.GetRadius()+2.0); for (mol::AtomViewList::iterator j=clashees.begin(), e2=clashees.end(); j!=e2; ++j) { - energy+=StericEnergy((*j).GetPos(), (*j).GetAtomProps().radius, - atom.GetPos(), atom.GetAtomProps().radius); + energy+=StericEnergy((*j).GetPos(), (*j).GetRadius(), + atom.GetPos(), atom.GetRadius()); } return energy; }