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 GCHEMPAINT_CHAIN_H
00026 #define GCHEMPAINT_CHAIN_H
00027
00028 #include "atom.h"
00029 #include "bond.h"
00030 #include <map>
00031
00032 namespace gcp {
00033
00034 class Molecule;
00035
00036 typedef struct
00037 {
00038 Bond *fwd, *rev;
00039 } ChainElt;
00040
00041 class Chain: public gcu::Object
00042 {
00043 public:
00044 Chain (Bond* pBond, Atom* pAtom = NULL, gcu::TypeId Type = gcu::ChainType);
00045 Chain (Molecule* Molecule, Bond* pBond, gcu::TypeId Type = gcu::ChainType);
00046 Chain (Molecule* Molecule, Atom* pAtom, gcu::TypeId Type = gcu::ChainType);
00047 virtual ~Chain();
00048
00049 void FindCycles (Atom* pAtom);
00050 bool FindCycle (Atom* pAtom, Bond* pBond);
00051 virtual void Erase (Atom* pAtom1, Atom* pAtom2);
00052 virtual void Insert (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00053 void Extract (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00054 void Reverse ();
00055 void AddBond (Atom* start, Atom* end);
00056 unsigned GetUnsaturations ();
00057 unsigned GetHeteroatoms ();
00058 bool Contains (Atom* pAtom);
00059 bool Contains (Bond* pBond);
00060 unsigned GetLength ();
00061 double GetMeanBondLength ();
00062 Atom* GetNextAtom (Atom* pAtom);
00063
00064 protected:
00065 std::map<Atom*, ChainElt> m_Bonds;
00066 Molecule* m_Molecule;
00067 guint m_nMolIndex;
00068 };
00069
00070 }
00071
00072 #endif // GCHEMPAINT_CHAIN_H