/* * PdbParser.hpp * * Created on: Aug 17, 2010 * Author: heber */ #ifndef PDBPARSER_HPP_ #define PDBPARSER_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include #include "FormatParser.hpp" #include "PdbAtomInfoContainer.hpp" #include "PdbKey.hpp" /** * Loads a PDB format 3.2 file into the World and saves the World as a PDB file. */ class PdbParser : public FormatParser { public: PdbParser(); virtual ~PdbParser(); void load(std::istream* file); void save(std::ostream* file, const std::vector &atoms); bool operator==(const PdbParser& b) const; void printAtomInfo(const atom *newAtom) const; protected: void AtomInserted(atomId_t); void AtomRemoved(atomId_t); private: enum PdbKey::KnownTokens getToken(string &line); void readAtomDataLine(const unsigned int _step, string &line, molecule *newmol); void parseAtomDataKeysLine(string line, int offset); void readNeighbors(const unsigned int _step, std::string &line); // void adaptImprData(); // void adaptTorsion(); // std::string adaptIdDependentDataString(std::string data); bool isUsedField(std::string fieldName); void writeNeighbors(std::ostream* file, int numberOfNeighbors, atom* currentAtom); void saveLine(ostream* file, const PdbAtomInfoContainer &atomInfo); // internal getter and setter bool isPresentadditionalAtomData(unsigned int _id); PdbAtomInfoContainer& getadditionalAtomData(atom *_atom); size_t getSerial(const size_t atomid) const; void setSerial(const size_t localatomid, const size_t atomid); // internal helper functions atom* getAtomToParse(std::string id_string) const; void readPdbAtomInfoContainer(PdbAtomInfoContainer &atomInfo, std::string &line) const; /** * argh, why can't just PdbKey::X+(size_t)i */ std::map PositionEnumMap; /** * Map to associate the known keys with numbers. */ std::map knownTokens; /** * Data which is currently not stored in atoms but was provided by the input * file. */ std::map additionalAtomData; /** * Default additional atom data. */ PdbAtomInfoContainer defaultAdditionalData; /** * Maps original atom IDs received from the parsed file to atom IDs in the * world. */ std::map atomIdMap; /** * Ascertaining uniqueness of Ids. */ std::set SerialSet; }; #endif /* PDBPARSER_HPP_ */