00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_ENTITY_VIEW_HN
00020 #define OST_ENTITY_VIEW_HN
00021
00022
00023
00024 #include <ost/mol/module_config.hh>
00025
00026 #include <ost/mol/residue_prop.hh>
00027 #include <ost/mol/entity_base.hh>
00028 #include <ost/mol/view_type_fw.hh>
00029 #include <ost/mol/impl/entity_impl_fw.hh>
00030 #include <ost/mol/entity_visitor_fw.hh>
00031 #include <ost/mol/handle_type_fw.hh>
00032 #include <ost/mol/query.hh>
00033 #include <ost/mol/iterator_fw.hh>
00034 #include <ost/mol/property_id.hh>
00035 #include <ost/geom/geom.hh>
00036
00037 #ifdef _MSC_VER
00038 # ifdef FindAtom
00039 # undef FindAtom
00040 # endif
00041 # ifdef AddAtom
00042 # undef AddAtom
00043 # endif
00044 #endif
00045
00046 namespace ost { namespace mol {
00047
00087 class DLLEXPORT_OST_MOL EntityView: public EntityBase {
00088 friend class AtomView;
00089 friend class ResidueView;
00090 public:
00091 EntityView();
00096 EntityView(const EntityHandle& entity,
00097 ViewAddFlags flags=0);
00098
00100 Real GetMass() const;
00101
00103 geom::Vec3 GetCenterOfMass() const;
00104
00109 geom::Vec3 GetCenterOfAtoms() const;
00110
00115 geom::Vec3 GetGeometricCenter() const;
00116
00117 geom::Vec3 GetGeometricStart() const;
00118 geom::Vec3 GetGeometricEnd() const;
00119 public:
00121
00122
00123 EntityView(const EntityViewDataPtr& data,
00124 const impl::EntityImplPtr impl);
00125
00127 const EntityViewDataPtr& ViewData() const;
00129 EntityViewDataPtr& ViewData();
00131 public:
00135 EntityView Copy() const;
00145 ChainView AddChain(const ChainHandle& chain_handle,
00146 ViewAddFlags flags=0);
00147
00157 ChainView AddChain(const ChainView& chain_view,
00158 ViewAddFlags flags=0);
00159
00168 ResidueView AddResidue(const ResidueHandle& residue_handle,
00169 ViewAddFlags flags=0);
00177 ResidueView AddResidue(const ResidueView& residue_view,
00178 ViewAddFlags flags=0);
00188 AtomView AddAtom(const AtomHandle& atom_handle,
00189 ViewAddFlags flags=0);
00190
00191 AtomView AddAtom(const AtomView& atom_view,
00192 ViewAddFlags flags=0);
00195 EntityView Select(const String& query_string, QueryFlags flags=0) const;
00196
00199 EntityView Select(const Query& query, QueryFlags flags=0) const;
00200
00202 bool AddBond(const BondHandle& bond_handle);
00203
00205 int GetAtomCount() const;
00206
00208 int GetResidueCount() const;
00209
00211 int GetChainCount() const;
00212
00214 ChainView FindChain(const String& chain_name) const;
00215
00217 ResidueView FindResidue(const ResidueHandle& residue) const;
00218
00220 AtomView FindAtom(const AtomHandle& atom) const;
00221
00222 AtomView FindAtom(const String& chain_name, const ResNum& num,
00223 const String& atom_name) const;
00225 ChainView FindChain(const ChainHandle& chain) const;
00226
00229 bool IsChainIncluded(const ChainHandle& chain) const;
00230
00232 void RemoveAtom(AtomView view);
00233
00235 void RemoveResidue(ResidueView view);
00236
00238 void RemoveChain(ChainView view);
00239
00242 void AddAllInclusiveBonds();
00243
00244 const BondHandleList& GetBondList() const;
00245
00247 AtomViewList FindWithin(const geom::Vec3& center, Real radius) const;
00248
00250 int GetBondCount() const;
00251
00252 const ChainViewList& GetChainList() const;
00253
00255 AtomViewIter AtomsBegin() const;
00256
00258 AtomViewIter AtomsEnd() const;
00259
00262 ResidueViewIter ResiduesBegin() const;
00263
00266 ResidueViewIter ResiduesEnd() const;
00267
00269 ResidueViewList GetResidueList() const;
00270
00272 AtomViewList GetAtomList() const;
00273
00275 void Apply(EntityVisitor& visitor);
00276
00278 void Apply(EntityViewVisitor& visitor);
00279
00281 EntityHandle GetHandle() const;
00282
00284 std::pair<Real,Real> GetMinMax(const String& prop,
00285 Prop::Level hint=Prop::UNSPECIFIED) const;
00286
00288 Real GetAngle(const AtomHandle& a1, const AtomHandle& a2,
00289 const AtomHandle& a3) const;
00290
00292 Real GetAngle(const AtomView& a1, const AtomView& a2,
00293 const AtomView& a3) const;
00294
00297 String Dump() const;
00301 EntityView CreateFullView() const;
00303 EntityView CreateEmptyView() const;
00304 #ifdef _MSC_VER
00305
00306 AtomView AddXAtom(const AtomHandle& ah, ViewAddFlags flags=0);
00307 AtomView FindXAtom(const AtomHandle& ah);
00308 #endif
00309 void RemoveBond(const BondHandle& bond);
00310 protected:
00312 void AddAtomInternal(const AtomView& av);
00313 void RemoveAtomInternal(const AtomView& av);
00314
00315 private:
00316
00317
00318 EntityViewDataPtr data_;
00319 };
00320
00321 }}
00322
00323 #endif // OST_ENTITY_VIEW_HH
00324