00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_RESIDUE_IMPL_HH
00020 #define OST_RESIDUE_IMPL_HH
00021
00022 #include <boost/enable_shared_from_this.hpp>
00023
00024 #include <ost/geom/geom.hh>
00025
00026 #include <ost/mol/residue_prop.hh>
00027 #include <ost/mol/entity_visitor_fw.hh>
00028
00029 #include <ost/mol/impl/residue_impl_fw.hh>
00030 #include <ost/mol/impl/atom_impl_fw.hh>
00031 #include <ost/mol/impl/chain_impl_fw.hh>
00032 #include <ost/mol/impl/entity_impl_fw.hh>
00033 #include <ost/mol/sec_structure.hh>
00034 #include <ost/mol/impl/torsion_impl_fw.hh>
00035 #include <ost/mol/impl/atom_group.hh>
00036 #include <ost/mol/chem_class.hh>
00037 #include <ost/mol/chem_type.hh>
00038
00039 #include <ost/generic_property.hh>
00040 #include <ost/mol/property_id.hh>
00041
00042 namespace ost { namespace mol { namespace impl {
00043
00044
00047 class ResidueImpl: public GenericPropContainerImpl,
00048 public boost::enable_shared_from_this<ResidueImpl>
00049
00050 {
00051 public:
00052 ResidueImpl(const EntityImplPtr& ent, const ChainImplPtr& ch,
00053 const ResNum& num, const ResidueKey& key);
00054
00055 AtomImplPtr InsertAtom(const String& name, const geom::Vec3& pos,
00056 const String& ele);
00059 AtomImplPtr InsertAtom(const AtomImplPtr& atom);
00060 AtomImplPtr InsertAltAtom(const String& name, const String& alt_group,
00061 const geom::Vec3& pos, const String& ele,
00062 Real occ, Real b_factor);
00063 const ResNum& GetNumber() const {return num_;}
00064 void SetNumber(const ResNum& num) {num_=num;}
00065
00066 const ResidueKey& GetKey() const {
00067 return key_;
00068 }
00069
00070 void SetKey(const ResidueKey& key) {
00071 key_=key;
00072 }
00073
00074 ChainImplPtr GetChain() const;
00075
00076 AtomImplPtr GetCentralAtom() const;
00083 void SetCentralAtom(const AtomImplPtr& a);
00084
00085 geom::Vec3 GetCentralNormal() const;
00086
00087 char GetOneLetterCode() const;
00088
00089 void SetOneLetterCode(const char olc);
00090
00097 AtomImplPtr FindAtom(const String& aname) const;
00098
00099 void Apply(EntityVisitor& v);
00100
00102 int GetAtomCount() const;
00103
00105 int GetBondCount() const;
00106
00107 EntityImplPtr GetEntity() const;
00108
00113 TorsionImplP GetPhiTorsion() const;
00114
00119 TorsionImplP GetOmegaTorsion() const;
00120
00125 TorsionImplP GetPsiTorsion() const;
00126
00129 SecStructure GetSecStructure() const;
00130
00132 void SetSecStructure(SecStructure ss);
00133
00134 const AtomImplList& GetAtomList() const;
00135
00136 AtomImplList& GetAtomList() {
00137 return atom_list_;
00138 }
00139
00140 Real GetMass() const;
00141 geom::Vec3 GetCenterOfMass() const;
00142 geom::Vec3 GetCenterOfAtoms() const;
00143
00144 geom::AlignedCuboid GetBounds() const;
00145
00146
00147 void DeleteAtom(const AtomImplPtr& atom);
00148 void DeleteAtoms(const String& atom_name);
00149 void DeleteAllAtoms();
00150
00151 void AddTorsion(const TorsionImplP& torsion);
00152
00153 const TorsionImplList& GetTorsionList() const {
00154 return torsion_list_;
00155 }
00157 bool HasAltAtomGroup(const String& group) const;
00158
00159 std::vector<String> GetAltAtomGroupNames() const;
00160
00161 std::vector<String> GetAltAtomGroupNames(const AtomImplPtr& atom) const;
00162 bool HasAltAtoms() const;
00163
00165 Real GetAverageBFactor() const;
00166
00167 bool SwitchAtomPos(const String& group);
00168
00169 void AddAltAtomPos(const String& group,
00170 const AtomImplPtr& atom,
00171 const geom::Vec3& position,
00172 Real occ, Real b_factor);
00173 geom::Vec3 GetAltAtomPos(const AtomImplPtr& atom, const String& group) const;
00174 Real GetAltAtomOcc(const AtomImplPtr& atom, const String& group) const;
00175 Real GetAltAtomBFactor(const AtomImplPtr& atom, const String& group) const;
00176
00177
00178 const String& GetCurrentAltGroupName() const {
00179 return curr_group_;
00180 }
00181 int GetIndex() const;
00182
00186 String GetQualifiedName() const;
00187
00189 const String& GetName() const {
00190 return key_;
00191 }
00192
00194 TorsionImplList& GetTorsionList() {
00195 return torsion_list_;
00196 }
00197
00198 void SetChemClass(ChemClass cc) {
00199 chem_class_=cc;
00200 }
00201 ChemClass GetChemClass() const {
00202 return chem_class_;
00203 }
00204 ChemType GetChemType() const {
00205 return chem_type_;
00206 }
00207 void SetChemType(ChemType ct) {
00208 chem_type_=ct;
00209 }
00210
00211 TorsionImplP FindTorsion(const String& torsion_name) const;
00212
00213
00214 String GetStringProperty(Prop::ID prop_id) const;
00215
00216 Real GetFloatProperty(Prop::ID prop_id) const;
00217
00218 int GetIntProperty(Prop::ID prop_id) const;
00219
00220 void SetProtein(bool protein) { protein_=protein; }
00221
00222 bool IsProtein() const { return protein_; }
00223
00224 bool IsLigand() const { return ligand_; }
00225 void SetIsLigand(bool flag) { ligand_=flag; }
00226
00227 void UpdateTransformedPos();
00228
00229 private:
00230 void AddAltAtom(const String& group, const AtomImplPtr& atom,
00231 const geom::Vec3& position, Real occ, Real b_factor);
00232 void RemoveAltPositionsForAtom(const AtomImplPtr& atom);
00233
00234 String curr_group_;
00235 AtomEntryGroups alt_groups_;
00236 EntityImplW ent_;
00237 ChainImplW chain_;
00238 ResNum num_;
00239 ResidueKey key_;
00240 AtomImplList atom_list_;
00241 TorsionImplList torsion_list_;
00242 SecStructure sec_structure_;
00243 ChemClass chem_class_;
00244 ChemType chem_type_;
00245 char olc_;
00246
00247
00248
00249
00250 bool protein_;
00251 bool ligand_;
00252 AtomImplPtr central_atom_;
00253
00254 };
00255
00256 }}}
00257
00258 #endif
00259