ringAnalyser.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: ringAnalyser.h,v 1.4.10.2 2007/04/03 13:29:42 bertsch Exp $
00005 //
00006 // Author:
00007 //   Holger Franken
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 } // namespace BALL
00102 
00103 #endif // BALL_STRUCTURE_RINGANALYSER_H