00001 /********************************************************************** 00002 builder.h - OBBuilder class. 00003 00004 Copyright (C) 2007-2008 by Tim Vandermeersch 00005 <[email protected]> 00006 00007 This file is part of the Open Babel project. 00008 For more information, see <http://openbabel.org/> 00009 00010 This program is free software; you can redistribute it and/or modify 00011 it under the terms of the GNU General Public License as published by 00012 the Free Software Foundation version 2 of the License. 00013 00014 This program is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU General Public License for more details. 00018 ***********************************************************************/ 00019 00020 #ifndef OB_BUILDER_H 00021 #define OB_BUILDER_H 00022 00023 #include <vector> 00024 #include <string> 00025 #include <map> 00026 00027 #include <list> 00028 #include <set> 00029 #include <openbabel/base.h> 00030 #include <openbabel/mol.h> 00031 #include <openbabel/stereo/stereo.h> 00032 00033 namespace OpenBabel 00034 { 00037 class OBAPI OBBuilder { 00038 public: 00039 00040 OBBuilder(): _keeprings(false) {} 00041 00043 00044 00049 bool Build(OBMol &mol); 00051 00053 00054 00062 void SetKeepRings() { _keeprings = true; } 00063 void UnsetKeepRings() { _keeprings = false; } 00065 00066 00068 void LoadFragments(); 00069 00074 static vector3 GetNewBondVector(OBAtom *atom); 00075 static vector3 GetNewBondVector(OBAtom *atom, double length); 00076 00088 static bool Connect(OBMol &mol, int a, int b, vector3 &newpos, int bondOrder = 1); 00099 static bool Connect(OBMol &mol, int a, int b, int bondOrder = 1); 00127 static bool Swap(OBMol &mol, int a, int b, int c, int d); 00134 //bool Insert(OBMol &mol, int a, int b, std::string smiles, int c, int d); 00137 static void CorrectStereoBonds(OBMol &mol); 00141 static void CorrectStereoAtoms(OBMol &mol); 00144 static bool IsSpiroAtom(unsigned long atomId, OBMol &mol); 00149 static OBBitVec GetFragment(OBAtom *atom); 00150 static void AddNbrs(OBBitVec &fragment, OBAtom *atom); 00151 00152 private: 00154 static std::vector<std::pair<OBSmartsPattern*, std::vector<vector3> > > _fragments; 00156 // supports the case where the fragments overlap at a spiro atom only. 00157 static void ConnectFrags(OBMol &mol, OBMol &workmol, std::vector<int> match, std::vector<vector3> coords, 00158 std::vector<int> pivot); 00160 static void FlipSpiro(OBMol &mol, int idx); 00161 static bool FixRingStereo(std::vector<std::pair<OBStereo::Ref, bool> > atomIds, 00162 OBMol &mol, OBStereo::Refs &unfixedcenters); 00163 static void AddRingNbrs(OBBitVec &fragment, OBAtom *atom, OBMol &mol); 00164 static bool SwapWithVector(OBMol &mol, int a, int b, int c, const vector3 &newlocation); 00165 bool _keeprings; 00166 }; // class OBBuilder 00167 00168 }// namespace OpenBabel 00169 00170 #endif // OB_BUILDER_H 00171
This file is part of the documentation for Open Babel, version 2.3.