00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef BALL_STRUCTURE_RINGANALYSER_H
00012 #define BALL_STRUCTURE_RINGANALYSER_H
00013
00014 #include <BALL/common.h>
00015
00016 #include <vector>
00017
00018 namespace BALL
00019 {
00020 class Atom;
00021
00026 class BALL_EXPORT RingAnalyser
00027 {
00028 public:
00029
00030 enum RingType
00031 {
00032 NONE,
00033 TEMPLATE,
00034 FUSED,
00035 BRIDGED,
00036 SPIRO,
00037 CORE
00038 };
00039
00040
00041 struct RingInfo
00042 {
00043 vector<Atom*> ring;
00044 RingType assignment;
00045 bool neg_angle;
00046 };
00047
00048
00052 RingAnalyser();
00053
00057 virtual ~RingAnalyser();
00058
00064 std::vector<RingInfo> analyseRings(std::vector<std::vector<Atom*> >& ringsystem);
00065
00072 bool isInRing(const Atom* atom, std::vector<Atom*>& ring);
00073
00074 private:
00075
00081 bool checkRTD(std::vector<Atom*>& ring);
00082
00090 RingType checkFusedOrBridged(vector<Atom*>& ring, vector<RingInfo>& ringset, bool& first_bridged_to_fused);
00091
00098 RingType checkSpiro(vector<Atom*>& ring, vector<RingInfo>& ringset);
00099 };
00100
00101 }
00102
00103 #endif // BALL_STRUCTURE_RINGANALYSER_H