alias.h
Go to the documentation of this file.
00001 /**********************************************************************
00002 alias.h - OBGenericData class to hold alias information on atoms
00003 Copyright (C) Copyright (C) 2007 by Chris Morley
00004 
00005 This program is free software; you can redistribute it and/or modify
00006 it under the terms of the GNU General Public License as published by
00007 the Free Software Foundation version 2 of the License.
00008 
00009 This program is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 GNU General Public License for more details.
00013 ***********************************************************************/
00014 
00015 #ifndef OB_ALIAS_H
00016 #define OB_ALIAS_H
00017 
00018 #include <vector>
00019 #include <openbabel/shared_ptr.h>
00020 #include <openbabel/mol.h>
00021 
00022 namespace OpenBabel
00023 {
00024 // This macro is used in DLL builds. If it has not
00025 // been set in babelconfig.h, define it as nothing.
00026 #ifndef OBCOMMON
00027   #define OBCOMMON
00028 #endif
00029 
00030 const unsigned int AliasDataType = 0x7883;
00031 
00049 class OBCOMMON AliasData : public OBGenericData
00050 {
00051 protected:
00052   std::string _alias;
00053   std::string _right_form;
00054   std::vector<unsigned long> _expandedatoms; //atom ids (not idxs)
00055   std::string _color;
00056 public:
00057 
00058   AliasData(): OBGenericData("Alias", AliasDataType){ }
00059 
00060   virtual OBGenericData* Clone(OBBase* /*parent*/) const{return new AliasData(*this);}
00061 
00063   void SetAlias(const std::string& alias) {_alias = alias;}
00064   void SetAlias(const char* alias) {_alias = alias;}
00065 
00067   std::string GetAlias(bool rightAligned = false) const;
00068 
00070   std::string GetColor() const { return _color; }
00071 
00073   void SetColor(std::string color){ _color = color; }
00074 
00075   bool IsExpanded()const { return !_expandedatoms.empty(); }
00076 
00079   static void RevertToAliasForm(OBMol& mol);
00080 
00082   bool Expand(OBMol& mol, const unsigned int atomindex);
00083 
00084  #ifdef HAVE_SHARED_POINTER
00085 
00086 
00087   static bool AddAliases(OBMol* pmol);
00088  #endif
00089 
00090 private:
00092   bool FormulaParse(OBMol& mol, const unsigned atomindex);
00093 
00095   void AddExpandedAtom(int id);
00096 
00098   void DeleteExpandedAtoms(OBMol& mol);
00099 
00100   struct AliasItem
00101   {
00102     std::string right_form;
00103     std::string smiles;
00104     std::string color;
00105   };
00106   typedef std::map<std::string, AliasItem> SuperAtomTable; //key=alias left-form
00107 
00108   static bool LoadFile(SuperAtomTable& table);
00109   static SuperAtomTable& table()
00110   {
00111     static SuperAtomTable t;
00112     if(t.empty())
00113       LoadFile(t);
00114     return t;
00115   }
00116   bool        FromNameLookup(OBMol& mol, const unsigned int atomindex);
00117 #ifdef HAVE_SHARED_POINTER
00118   typedef std::vector< std::pair<std::string, shared_ptr<OBSmartsPattern> > > SmartsTable;
00119   static bool LoadFile(SmartsTable& smtable);
00120 #endif
00121 };
00122 } //namespace
00123 
00124 #endif // OB_ALIAS_H
00125 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines