bond.h Source File

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Examples

- File List
- File Members

bond.h
Go to the documentation of this file.

    00001 /**********************************************************************
    00002 bond.h - Handle OBBond class.
    00003
    00004 Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.
    00005 Some portions Copyright (C) 2001-2006 by Geoffrey R. Hutchison
    00006 Some portions Copyright (C) 2003 by Michael Banck
    00007 Some portions Copyright (C) 2008 by Tim Vandermeersch
    00008
    00009 This file is part of the Open Babel project.
    00010 For more information, see <http://openbabel.org/>
    00011
    00012 This program is free software; you can redistribute it and/or modify
    00013 it under the terms of the GNU General Public License as published by
    00014 the Free Software Foundation version 2 of the License.
    00015
    00016 This program is distributed in the hope that it will be useful,
    00017 but WITHOUT ANY WARRANTY; without even the implied warranty of
    00018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00019 GNU General Public License for more details.
    00020 ***********************************************************************/
    00021
    00022 #ifndef OB_BOND_H
    00023 #define OB_BOND_H
    00024
    00025 #include <openbabel/babelconfig.h>
    00026
    00027 #ifndef EXTERN
    00028 #  define EXTERN extern
    00029 #endif
    00030
    00031 #include <openbabel/base.h>
    00032 #include <openbabel/atom.h>
    00033
    00034 namespace OpenBabel
    00035 {
    00036   class OBAtom;
    00037   class OBRing;
    00038
    00040   typedef OBBond OBEdgeBase;
    00041
    00042   //BOND Property Macros (flags)
    00044 #define OB_AROMATIC_BOND  (1<<1)
    00045
    00046 #define OB_WEDGE_BOND     (1<<2)
    00047
    00048 #define OB_HASH_BOND      (1<<3)
    00049
    00050 #define OB_RING_BOND      (1<<4)
    00051
    00052 #define OB_TORUP_BOND     (1<<5)
    00053
    00054 #define OB_TORDOWN_BOND   (1<<6)
    00055
    00056 #define OB_KSINGLE_BOND   (1<<7)
    00057
    00058 #define OB_KDOUBLE_BOND   (1<<8)
    00059
    00060 #define OB_KTRIPLE_BOND   (1<<9)
    00061
    00062 #define OB_CLOSURE_BOND   (1<<10)
    00063   // 11-16 currently unused
    00064
    00065 #define OB_WEDGE_OR_HASH_BOND     (1<<11)
    00066 #define OB_CIS_OR_TRANS_BOND     (1<<12)
    00067
    00068   //class OBBondPrivate;
    00069   class OBAPI OBBond: public OBBase
    00070   {
    00071     protected:
    00072       unsigned int                _idx;
    00073       OBMol                      *_parent;
    00074       OBAtom                     *_bgn;
    00075       OBAtom                     *_end;
    00076       char                        _order;
    00077       unsigned short int          _flags;
    00078       unsigned long                 _id;
    00079       //OBBondPrivate * const d;
    00080
    00084       bool HasFlag(int flag) const { return ((_flags & flag) != 0); }
    00088       void SetFlag(int flag) { _flags |= flag; }
    00092       void UnsetFlag(int flag) { _flags &= (~(flag)); }
    00093
    00094     public:
    00095       enum Flag {
    00096         Aromatic = (1<<1),
    00097         Ring     = (1<<4),
    00098         Closure  = (1<<10)
    00099       };
    00100       enum StereoFlag {
    00101         Wedge       = (1<<2),
    00102         Hash        = (1<<3),
    00103         WedgeOrHash = (1<<11),
    00104         CisOrTrans  = (1<<12)
    00105       };
    00107
    00108       bool Visit;
    00109
    00111       OBBond();
    00113       virtual ~OBBond();
    00114
    00116
    00117
    00118
    00120       void SetIdx(int idx)        {          _idx = idx;        }
    00121       void SetId(unsigned long id) { _id = id; }
    00123
    00124       void SetBO(int order);
    00126       void SetBondOrder(int order);
    00128       void SetBegin(OBAtom *begin){          _bgn = begin;      }
    00130       void SetEnd(OBAtom *end)    {          _end = end;        }
    00132       void SetParent(OBMol *ptr)  {        _parent= ptr;        }
    00134       void SetLength(OBAtom *fixed,double length);
    00137       void SetLength(double length);
    00139       void Set(int index, OBAtom* begin,OBAtom* end,int order,int flags);
    00141       void SetKSingle();
    00143       void SetKDouble();
    00145       void SetKTriple();
    00147       void SetAromatic()    { SetFlag(OB_AROMATIC_BOND); }
    00152       void SetWedge() { SetFlag(Wedge); }
    00157       void SetHash() { SetFlag(Hash); }
    00162       void SetWedgeOrHash() { SetFlag(WedgeOrHash); }
    00164       void SetUp()          { SetFlag(OB_TORUP_BOND); UnsetFlag(OB_TORDOWN_BOND); }
    00166       void SetDown()        { SetFlag(OB_TORDOWN_BOND); UnsetFlag(OB_TORUP_BOND);   }
    00168       void SetInRing(bool set=true) { if(set)SetFlag(OB_RING_BOND); else UnsetFlag(OB_RING_BOND);}
    00170
    00173       void SetClosure()     { SetFlag(OB_CLOSURE_BOND);  }
    00175       void UnsetHash()      { UnsetFlag(OB_HASH_BOND);    }
    00177       void UnsetWedge()     { UnsetFlag(OB_WEDGE_BOND);   }
    00179       void UnsetUp()        { UnsetFlag(OB_TORUP_BOND);   }
    00181       void UnsetDown()      { UnsetFlag(OB_TORDOWN_BOND); }
    00183       void UnsetAromatic()  { UnsetFlag(OB_AROMATIC_BOND);}
    00185       void UnsetKekule()
    00186         {
    00187           _flags &= (~(OB_KSINGLE_BOND|OB_KDOUBLE_BOND|OB_KTRIPLE_BOND));
    00188         }
    00190
    00192
    00193
    00194       unsigned int     GetIdx()           const { return(_idx);  }
    00195       unsigned long GetId()           const { return _id; }
    00197
    00198       unsigned int     GetBO()            const { return(_order); }
    00200       unsigned int     GetBondOrder()     const { return(_order); }
    00202       unsigned int     GetFlags()         const { return(_flags);      }
    00204       unsigned int     GetBeginAtomIdx()  const
    00205         { return (_bgn ? _bgn->GetIdx() : 0); }
    00207       unsigned int     GetEndAtomIdx()    const
    00208         { return (_end ? _end->GetIdx() : 0); }
    00210       OBAtom *GetBeginAtom()    { return(_bgn);    }
    00211       const OBAtom *GetBeginAtom() const
    00212         { return(_bgn);    }
    00214       OBAtom *GetEndAtom()      { return(_end);    }
    00215       const OBAtom *GetEndAtom() const
    00216         { return(_end);    }
    00218
    00220       OBAtom *GetNbrAtom(OBAtom *ptr)
    00221         {
    00222           return((ptr != _bgn)? _bgn : _end);
    00223         }
    00225       OBMol  *GetParent()                 {return(_parent);}
    00227
    00228       double  GetEquibLength() const;
    00230       double  GetLength() const;
    00232
    00234       unsigned int     GetNbrAtomIdx(OBAtom *ptr)
    00235         {
    00236           if (ptr!=_bgn)
    00237             return (_bgn ? _bgn->GetIdx() : 0);
    00238           else
    00239             return (_end ? _end->GetIdx() : 0);
    00240         }
    00242       OBRing* FindSmallestRing() const;
    00244
    00246
    00247
    00248
    00249
    00250       bool IsAromatic() const;
    00252       bool IsInRing() const;
    00254
    00259       bool IsRotor();
    00262       bool IsAmide();
    00265       bool IsPrimaryAmide();
    00268       bool IsSecondaryAmide();
    00271       bool IsTertiaryAmide();
    00273       bool IsEster();
    00275       bool IsCarbonyl();
    00277       bool IsSingle();
    00279       bool IsDouble();
    00281       bool IsTriple();
    00283       bool IsKSingle();
    00285       bool IsKDouble();
    00287       bool IsKTriple();
    00289       bool IsClosure();
    00292       bool IsUp()    {    return(HasFlag(OB_TORUP_BOND));    }
    00295       bool IsDown()  {    return(HasFlag(OB_TORDOWN_BOND));  }
    00298       bool IsWedge() {    return(HasFlag(OB_WEDGE_BOND));    }
    00301       bool IsHash()  {    return(HasFlag(OB_HASH_BOND));     }
    00307       bool IsWedgeOrHash() const { return(HasFlag(WedgeOrHash)); }
    00312       bool IsCisOrTrans() const { return(HasFlag(CisOrTrans)); }
    00313
    00315       bool IsDoubleBondGeometry();
    00317
    00318     }; // class OBBond
    00319
    00321   typedef std::vector<OBBond*>::iterator OBBondIterator;
    00322
    00323 }// namespace OpenBabel
    00324
    00325 #endif   // OB_BOND_H
    00326

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines