00001
00002
00003
00004
00005 #ifndef BALL_KERNEL_SECONDARYSTRUCTURE_H
00006 #define BALL_KERNEL_SECONDARYSTRUCTURE_H
00007
00008 #ifndef BALL_KERNEL_RESIDUE_H
00009 # include <BALL/KERNEL/residue.h>
00010 #endif
00011
00012 #ifndef BALL_KERNEL_RESIDUEITERATOR_H
00013 # include <BALL/KERNEL/residueIterator.h>
00014 #endif
00015
00016 #ifndef BALL_KERNEL_ATOMCONTAINER_H
00017 # include <BALL/KERNEL/atomContainer.h>
00018 #endif
00019
00020 namespace BALL
00021 {
00029 class BALL_EXPORT SecondaryStructure
00030 : public AtomContainer
00031 {
00032 public:
00033
00034 BALL_CREATE_DEEP(SecondaryStructure)
00035
00036
00039
00042 enum Type
00043 {
00045 HELIX,
00047 COIL,
00049 STRAND,
00051 TURN,
00053 UNKNOWN,
00055 NUMBER_OF_TYPES
00056 };
00057
00059
00060
00064
00066 SecondaryStructure();
00067
00069 SecondaryStructure(const SecondaryStructure& secondary_structure, bool deep = true);
00070
00072 SecondaryStructure(const String& name);
00073
00075 virtual ~SecondaryStructure();
00076
00078 virtual void clear();
00079
00081 virtual void destroy();
00083
00091 bool operator == (const SecondaryStructure& secondary_structure) const;
00092
00096 bool operator != (const SecondaryStructure& secondary_structure) const;
00098
00102
00106 void persistentWrite(PersistenceManager& pm, const char* name = 0) const;
00107
00111 void persistentRead(PersistenceManager& pm);
00113
00117
00123 void set(const SecondaryStructure& secondary_structure, bool deep = true);
00124
00130 SecondaryStructure& operator = (const SecondaryStructure& secondary_structure);
00131
00137 void get(SecondaryStructure& secondary_structure, bool deep = true) const;
00138
00142 void swap(SecondaryStructure& secondary_structure);
00144
00148
00150 Type getType() const { return type_; }
00151
00153 void setType(Type type) { type_ = type; }
00154
00159 Protein* getProtein();
00160
00165 const Protein* getProtein() const;
00166
00171 Chain* getChain();
00172
00177 const Chain* getChain() const;
00178
00184 Residue* getResidue(Position position);
00185
00191 const Residue* getResidue(Position position) const;
00192
00198 Residue* getNTerminal();
00199
00205 const Residue* getNTerminal() const;
00206
00212 Residue* getCTerminal();
00213
00219 const Residue* getCTerminal() const;
00220
00226 PDBAtom* getPDBAtom(Position position);
00227
00233 const PDBAtom* getPDBAtom(Position position) const;
00234
00238 Size countResidues() const;
00239
00243 Size countPDBAtoms() const;
00244
00248 void prepend(Residue& residue);
00249
00253 void append(Residue& residue);
00254
00258 void insert(Residue& residue);
00259
00264 void insertBefore(Residue& residue, Composite& before);
00265
00270 void insertAfter(Residue& residue, Composite& after);
00271
00275 bool remove(Residue& residue);
00276
00281 void spliceBefore(SecondaryStructure& secondary_structure);
00282
00287 void spliceAfter(SecondaryStructure& secondary_structure);
00288
00292 void splice(SecondaryStructure& secondary_structure);
00294
00298
00303 virtual bool isValid() const;
00304
00311 virtual void dump(std::ostream& s = std::cout, Size depth = 0) const;
00312
00314
00315
00316
00317 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(Residue)
00318 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(PDBAtom)
00319
00320 protected:
00321
00323 Type type_;
00324
00325 private:
00326
00327 Fragment* getFragment(Position position);
00328
00329 const Fragment* getFragment(Position position) const;
00330
00331 Atom* getAtom(Position position);
00332
00333 const Atom* getAtom(Position position) const;
00334
00335 void prepend(Atom& atom);
00336
00337 void append(Atom& atom);
00338
00339 void insert(Atom& atom);
00340
00341 void insertBefore(Atom& atom, Composite& before);
00342
00343 void insertAfter(Atom& atom, Composite& after);
00344
00345 bool remove(Atom& atom);
00346
00347 void prepend(AtomContainer& atom_container);
00348
00349 void append(AtomContainer& atom_container);
00350
00351 void insert(AtomContainer& atom_container);
00352
00353 void insertBefore(AtomContainer& atom_container, Composite& before);
00354
00355 void insertAfter(AtomContainer& atom_container, Composite& after);
00356
00357 void spliceBefore(AtomContainer& atom_container);
00358
00359 void spliceAfter(AtomContainer& atom_container);
00360
00361 void splice(AtomContainer& atom_container);
00362
00363 bool remove(AtomContainer& atom_container);
00364
00365 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(AtomContainer)
00366
00367 };
00368
00369 }
00370
00371 #endif // BALL_KERNEL_SECONDARYSTRUCTURE_H