chain.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GCU_CHAIN_H
00026 #define GCU_CHAIN_H
00027
00028 #include "object.h"
00029 #include <map>
00030
00031 namespace gcu {
00032
00033 class Atom;
00034 class Bond;
00035 class Molecule;
00036
00037 typedef struct
00038 {
00039 Bond *fwd, *rev;
00040 } ChainElt;
00041
00042 class Chain: public Object
00043 {
00044 public:
00045 Chain (Bond* pBond, Atom* pAtom = NULL, TypeId Type = ChainType);
00046 Chain (Molecule* Molecule, Bond* pBond, TypeId Type = ChainType);
00047 Chain (Molecule* Molecule, Atom* pAtom, TypeId Type = ChainType);
00048 virtual ~Chain();
00049
00050 void FindCycles (Atom* pAtom);
00051 bool FindCycle (Atom* pAtom, Bond* pBond);
00052 virtual void Erase (Atom* pAtom1, Atom* pAtom2);
00053 virtual void Insert (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00054 void Extract (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00055 void Reverse ();
00056 void AddBond (Atom* start, Atom* end);
00057 unsigned GetUnsaturations ();
00058 unsigned GetHeteroatoms ();
00059 bool Contains (Atom* pAtom);
00060 bool Contains (Bond* pBond);
00061 unsigned GetLength ();
00062 double GetMeanBondLength ();
00063 Atom* GetNextAtom (Atom* pAtom);
00064
00065 protected:
00066 std::map<Atom*, ChainElt> m_Bonds;
00067 Molecule* m_Molecule;
00068 guint m_nMolIndex;
00069 };
00070
00071 }
00072
00073 #endif // GCHEMPAINT_CHAIN_H