00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef OST_IO_SDF_READER_HH
00023 #define OST_IO_SDF_READER_HH
00024
00025 #include <boost/filesystem/fstream.hpp>
00026 #include <ost/mol/chain_handle.hh>
00027 #include <ost/mol/residue_handle.hh>
00028 #include <ost/io/module_config.hh>
00029
00030 namespace ost { namespace io {
00031
00032 class DLLEXPORT_OST_IO SDFReader {
00033 public:
00034 SDFReader(const String& filename);
00035 SDFReader(const boost::filesystem::path& loc);
00036 SDFReader(std::istream& instream);
00037
00038 bool HasNext();
00039
00040 void Import(mol::EntityHandle& ent);
00041
00042 private:
00043 void ClearState(const boost::filesystem::path& loc);
00044 void NextMolecule();
00045
00046 void ParseAndAddHeader(const String& line, int line_num, mol::EntityHandle& ent,
00047 mol::XCSEditor& editor);
00048
00049 void ParseAndAddAtom(const String& line, int line_num, mol::EntityHandle& ent,
00050 bool hetatm, mol::XCSEditor& editor);
00051
00052 void ParseAndAddBond(const String& line, int line_num, mol::EntityHandle& ent,
00053 mol::XCSEditor& editor);
00054
00055 mol::ChainHandle curr_chain_;
00056 mol::ResidueHandle curr_residue_;
00057 int chain_count_;
00058 int residue_count_;
00059 int atom_count_;
00060 int bond_count_;
00061 int line_num;
00062 boost::filesystem::ifstream infile_;
00063 std::istream& instream_;
00064 };
00065
00066 }}
00067
00068 #endif