00001
00002
00003
00004
00005 #ifndef BALL_KERNEL_CHAIN_H
00006 #define BALL_KERNEL_CHAIN_H
00007
00008 #ifndef BALL_KERNEL_RESIDUE_H
00009 # include <BALL/KERNEL/residue.h>
00010 #endif
00011
00012 #ifndef BALL_KERNEL_SECONDARYSTRUCTUREITERATOR_H
00013 # include <BALL/KERNEL/secondaryStructureIterator.h>
00014 #endif
00015
00016
00017 #define BALL_CHAIN_DEFAULT_NAME ' '
00018
00019 namespace BALL
00020 {
00021 class Protein;
00022
00030 class BALL_EXPORT Chain
00031 : public AtomContainer
00032 {
00033 public:
00034
00035 BALL_CREATE_DEEP(Chain)
00036
00037
00040
00043 enum Property
00044 {
00045 NUMBER_OF_PROPERTIES = AtomContainer::NUMBER_OF_PROPERTIES
00046 };
00047
00049
00052
00054 Chain();
00055
00057 Chain(const Chain& chain, bool deep = true);
00058
00060 Chain(const String& name);
00061
00063 virtual ~Chain();
00064
00066
00069
00073 void persistentWrite(PersistenceManager& pm, const char* name = 0) const;
00074
00078 void persistentRead(PersistenceManager& pm);
00079
00081
00084
00090 void set(const Chain& chain, bool deep = true);
00091
00098 Chain& operator = (const Chain& chain);
00099
00105 void get(Chain& chain, bool deep = true) const;
00106
00110 void swap(Chain& chain);
00111
00113
00118 bool operator == (const Chain& chain) const;
00119
00123 bool operator != (const Chain& chain) const;
00124
00125
00129
00134 Protein* getProtein();
00135
00140 const Protein* getProtein() const;
00141
00148 SecondaryStructure* getSecondaryStructure(Position position);
00149
00156 const SecondaryStructure* getSecondaryStructure(Position position) const;
00157
00163 Residue* getResidue(Position position);
00164
00170 const Residue* getResidue(Position position) const;
00171
00177 Residue* getNTerminal();
00178
00184 const Residue* getNTerminal() const;
00185
00191 Residue* getCTerminal();
00192
00198 const Residue* getCTerminal() const;
00199
00205 PDBAtom* getPDBAtom(Position position);
00206
00212 const PDBAtom* getPDBAtom(Position position) const;
00213
00217 Size countSecondaryStructures() const;
00218
00222 Size countResidues() const;
00223
00227 Size countPDBAtoms() const;
00228
00232 void prepend(SecondaryStructure& secondary_structure);
00233
00237 void append(SecondaryStructure& secondary_structure);
00238
00242 void insert(SecondaryStructure& secondary_structure);
00243
00248 void insertBefore(SecondaryStructure& secondary_structure, Composite& before);
00249
00254 void insertAfter(SecondaryStructure& secondary_structure, Composite& after);
00255
00259 bool remove(SecondaryStructure& secondary_structure);
00260
00264 void prepend(Residue& residue);
00265
00269 void append(Residue& residue);
00270
00274 void insert(Residue& residue);
00275
00280 void insertBefore(Residue& residue, Composite& before);
00281
00286 void insertAfter(Residue& residue, Composite& after);
00287
00291 bool remove(Residue& residue);
00292
00296 void spliceBefore(Chain& chain);
00297
00301 void spliceAfter(Chain &chain);
00302
00306 void splice(Chain &chain);
00307
00309
00312
00319 virtual void dump(std::ostream& s = std::cout, Size depth = 0) const
00320 ;
00321
00323
00324
00325
00326 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(SecondaryStructure)
00327 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(Residue)
00328 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(PDBAtom)
00329
00330 protected:
00331
00332 private:
00333 AtomContainer* getAtomContainer(Position position);
00334
00335 const AtomContainer* getAtomContainer(Position position) const;
00336
00337 Atom* getAtom(Position position);
00338
00339 const Atom* getAtom(Position position) const;
00340
00341 void prepend(Atom& atom);
00342
00343 void append(Atom& atom);
00344
00345 void insert(Atom& atom);
00346
00347 void insertBefore(Atom& atom, Composite& before);
00348
00349 void insertAfter(Atom& atom, Composite& after);
00350
00351 bool remove(Atom& atom);
00352
00353 void prepend(AtomContainer& atom_container);
00354
00355 void append(AtomContainer& atom_container);
00356
00357 void insert(AtomContainer& atom_container);
00358
00359 void insertBefore(AtomContainer& atom_container, Composite& before);
00360
00361 void insertAfter(AtomContainer& atom_container, Composite& after);
00362
00363 void spliceBefore(AtomContainer& atom_container);
00364
00365 void spliceAfter(AtomContainer& atom_container);
00366
00367 void splice(AtomContainer& atom_container);
00368
00369 bool remove(AtomContainer& atom_container);
00370
00371 BALL_KERNEL_DEFINE_ITERATOR_CREATORS(AtomContainer)
00372 };
00373 }
00374
00375 #endif // BALL_KERNEL_CHAIN_H