00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_CONOP_CHEMDICT_PARSER_HH
00020 #define OST_CONOP_CHEMDICT_PARSER_HH
00021
00022
00023
00024
00025
00026
00027 #include <ost/mol/chem_class.hh>
00028 #include <ost/mol/chem_type.hh>
00029 #include <ost/io/mol/star_parser.hh>
00030 #include <ost/conop/compound_lib.hh>
00031
00032 namespace ost { namespace io {
00033
00034 typedef enum {
00035 ATOM_SPEC,
00036 BOND_SPEC,
00037 DESC_SPEC,
00038 DONT_KNOW
00039 } LoopType;
00040
00041 class DLLEXPORT_OST_IO ChemdictParser : public StarParser {
00042 public:
00043 ChemdictParser(std::istream& stream, conop::Compound::Dialect dialect):
00044 StarParser(stream), compound_(new conop::Compound("UNK")),
00045 last_(0), loop_type_(DONT_KNOW), dialect_(dialect)
00046 {
00047 this->InitTypeMap();
00048 this->InitPDBXTypeMap();
00049 }
00050
00051 virtual bool OnBeginData(const StringRef& data_name);
00052
00053 virtual bool OnBeginLoop(const StarLoopDesc& header);
00054
00055 virtual void OnDataRow(const StarLoopDesc& header,
00056 const std::vector<StringRef>& columns);
00057
00058 virtual void OnDataItem(const StarDataItem& item);
00059
00060 virtual void OnEndData();
00061
00062 void SetCompoundLib(const conop::CompoundLibPtr& lib)
00063 {
00064 lib_=lib;
00065 }
00066 private:
00067 void InitTypeMap();
00068 void InitPDBXTypeMap();
00069 conop::CompoundLibPtr lib_;
00070 conop::CompoundPtr compound_;
00071 typedef enum {
00072 ATOM_NAME=0,
00073 ALT_ATOM_NAME=1,
00074 IS_AROMATIC=2,
00075 ORDINAL=3,
00076 IS_LEAVING=4,
00077 ELE=5,
00078 STEREO_CONF=6,
00079 ATOM_ID1=0,
00080 ATOM_ID2=1,
00081 BOND_ORDER=2,
00082 DESC_TYPE=0,
00083 DESC=1
00084 } PropIndex;
00085 char last_;
00086 int indices_[10];
00087 bool insert_;
00088 static std::map<String, mol::ChemClass> tm_;
00089 static std::map<String, mol::ChemType> xtm_;
00090 std::map<String, int> atom_map_;
00091 LoopType loop_type_;
00092 conop::AtomSpec atom_;
00093 conop::Compound::Dialect dialect_;
00094 };
00095
00096
00097 }}
00098
00099
00100 #endif