PDBFile.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: PDBFile.h,v 1.35 2005/12/23 17:01:45 amoll Exp $
00005 //
00006 
00007 #ifndef BALL_FORMAT_PDBFILE_H
00008 #define BALL_FORMAT_PDBFILE_H
00009 
00010 #ifndef BALL_CONCEPT_PROPERTY_H
00011 # include <BALL/CONCEPT/property.h>
00012 #endif
00013 
00014 #ifndef BALL_FORMAT_GENERICMOLFILE_H
00015 # include <BALL/FORMAT/genericMolFile.h>
00016 #endif
00017 
00018 #ifndef BALL_DATATYPE_OPTIONS_H
00019 # include <BALL/DATATYPE/options.h>
00020 #endif
00021 
00022 #ifndef BALL_DATATYPE_QUADRUPLE_H
00023 # include <BALL/DATATYPE/quadruple.h>
00024 #endif
00025 
00026 #ifndef BALL_FORMAT_PDBDEFS_H
00027 # include <BALL/FORMAT/PDBdefs.h>
00028 #endif
00029 
00030 #ifndef BALL_FORMAT_PDBINFO_H
00031 # include <BALL/FORMAT/PDBInfo.h>
00032 #endif
00033 
00034 #ifndef BALL_KERNEL_PDBAtom_H
00035 # include <BALL/KERNEL/PDBAtom.h>
00036 #endif
00037 
00038 #ifndef BALL_KERNEL_SYSTEM_H
00039 # include <BALL/KERNEL/system.h>
00040 #endif
00041 
00042 #ifndef BALL_KERNEL_RESIDUE_H
00043 # include <BALL/KERNEL/residue.h>
00044 #endif
00045 
00046 #ifndef BALL_KERNEL_SECONDARYSTRUCTURE_H
00047 # include <BALL/KERNEL/secondaryStructure.h>
00048 #endif
00049 
00050 #if defined(BALL_HAS_UNORDERED_MAP) || defined(BALL_HAS_HASH_MAP)
00051 #ifdef BALL_EXTEND_HASH_IN_STD_NS
00052 namespace std
00053 {
00054 #endif
00055   namespace BALL_MAP_NAMESPACE {
00056     template<>
00057     struct hash<BALL::Quadruple<BALL::String, BALL::PDB::Character, BALL::PDB::Integer, BALL::PDB::AChar> >
00058     {
00059       size_t
00060       operator()(const BALL::Quadruple<BALL::String, BALL::PDB::Character, BALL::PDB::Integer, BALL::PDB::AChar>& f) const
00061       { return (size_t)f.third; }
00062     };
00063   }
00064 #ifdef BALL_EXTEND_HASH_IN_STD_NS
00065 }
00066 #endif
00067 #endif
00068 
00069 namespace BALL
00070 {
00071 
00076   class BALL_EXPORT PDBFile
00077     : public GenericMolFile,
00078       public PropertyManager
00079   {
00080     public:
00081 
00087     struct BALL_EXPORT Option 
00088     {
00095       static const char* VERBOSITY;
00096 
00103       static const char* STRICT_LINE_CHECKING;
00104       
00112       static const char* CHOOSE_MODEL;
00113 
00119       static const char* STORE_SKIPPED_RECORDS;
00120 
00126       static const char* IGNORE_XPLOR_PSEUDO_ATOMS;
00127 
00133       static const char* PARSE_PARTIAL_CHARGES;
00134     };
00135 
00138     struct BALL_EXPORT Default 
00139     {
00144       static const Index VERBOSITY;
00145 
00150       static const bool STRICT_LINE_CHECKING;
00151 
00156       static const Index CHOOSE_MODEL;
00157 
00161       static const bool STORE_SKIPPED_RECORDS;
00162 
00166       static const bool IGNORE_XPLOR_PSEUDO_ATOMS;
00167 
00171       static const bool PARSE_PARTIAL_CHARGES;
00172     };
00173 
00177 
00178     Options options;
00180     PDBInfo info;
00182 
00186 
00187     PDBFile();
00188       
00190     PDBFile(const String& filename, File::OpenMode open_mode = std::ios::in) throw(Exception::FileNotFound);
00191 
00193     PDBFile(const Options& new_options);
00194 
00196     PDBFile(const PDBFile& file) throw(Exception::FileNotFound);
00197     
00199     virtual ~PDBFile()
00200       ;
00202 
00206 
00208     virtual void clear(int state);
00209 
00211     virtual void clear();
00212 
00214 
00218 
00220     virtual float getVersion() const;
00221 
00226     void selectModel(Index index);
00227 
00229     Index getSelectedModel() const;
00230 
00232     void selectAllModels();
00233 
00235     Index getCurrentModel() const;
00236 
00238     char* getRecordString();
00239 
00241     const char* getRecordString() const;
00242 
00244     Index getRecordNumber() const;
00245 
00247     PDB::RecordType getRecordType() const;
00248 
00252     virtual const char* getAtomElementSymbol
00253       (const PDB::Atom atom_name,
00254        PDB::Atom element_symbol);
00255 
00257     virtual const char* getAtomName
00258       (const PDB::Atom atom_name);
00259 
00261     virtual char getAtomRemotenessIndicator
00262       (const PDB::Atom atom_name);
00263 
00265     virtual short getAtomBranchDesignator
00266       (const PDB::Atom atom_name);
00267 
00269     Size countRecordFields() const;
00270 
00274     Size countRecord
00275       (PDB::RecordType record_type,
00276        bool from_begin_of_file = true);
00277 
00280     Size countRecords
00281       (bool from_begin_of_file = true);
00283 
00290 
00291     bool parseLine(const char* line, Size size, const char* format_string, ...);
00292 
00294     bool readLine(char* line, Size size, bool extract_values);
00295 
00297     bool readFirstRecord(bool read_values = true);
00298 
00300     bool readNextRecord(bool read_values = true);
00301 
00306     bool readRecords();
00307 
00312     virtual bool readUnknownRecord(const char* line);
00313 
00316     virtual bool readInvalidRecord(const char* line);
00317 
00326     bool skipCurrentRecord();
00327 
00329     virtual bool interpretRecord(const PDB::RecordANISOU& record);
00330     virtual bool fillRecord(const char* line, Size size, PDB::RecordANISOU& record);
00331     virtual bool parseRecordANISOU(const char* line, Size size);
00332 
00334     virtual bool interpretRecord(const PDB::RecordATOM& record);
00335     virtual bool fillRecord(const char* line, Size size, PDB::RecordATOM& record);
00336     virtual bool parseRecordATOM(const char* line, Size size);
00337 
00339     virtual bool interpretRecord(const PDB::RecordAUTHOR& record);
00340     virtual bool fillRecord(const char* line, Size size, PDB::RecordAUTHOR& record);
00341     virtual bool parseRecordAUTHOR(const char* line, Size size);
00342 
00344     virtual bool interpretRecord(const PDB::RecordCAVEAT& record);
00345     virtual bool fillRecord(const char* line, Size size, PDB::RecordCAVEAT& record);
00346     virtual bool parseRecordCAVEAT(const char* line, Size size);
00347 
00349     virtual bool interpretRecord(const PDB::RecordCISPEP& record);
00350     virtual bool fillRecord(const char* line, Size size, PDB::RecordCISPEP& record);
00351     virtual bool parseRecordCISPEP(const char* line, Size size);
00352 
00354     virtual bool interpretRecord(const PDB::RecordCOMPND& record);
00355     virtual bool fillRecord(const char* line, Size size, PDB::RecordCOMPND& record);
00356     virtual bool parseRecordCOMPND(const char* line, Size size);
00357 
00359     virtual bool interpretRecord(const PDB::RecordCONECT& record);
00360     virtual bool fillRecord(const char* line, Size size, PDB::RecordCONECT& record);
00361     virtual bool parseRecordCONECT(const char* line, Size size);
00362 
00366     virtual bool interpretRecord(const PDB::RecordCRYST1& record);
00367     virtual bool fillRecord(const char* line, Size size, PDB::RecordCRYST1& record);
00368     virtual bool parseRecordCRYST1(const char* line, Size size);
00369 
00371     virtual bool interpretRecord(const PDB::RecordDBREF& record);
00372     virtual bool fillRecord(const char* line, Size size, PDB::RecordDBREF& record);
00373     virtual bool parseRecordDBREF(const char* line, Size size);
00374 
00376     virtual bool interpretRecord(const PDB::RecordEND& record);
00377     virtual bool fillRecord(const char* line, Size size, PDB::RecordEND& record);
00378     virtual bool parseRecordEND(const char* line, Size size);
00379 
00381     virtual bool interpretRecord(const PDB::RecordENDMDL& record);
00382     virtual bool fillRecord(const char* line, Size size, PDB::RecordENDMDL& record);
00383     virtual bool parseRecordENDMDL(const char* line, Size size);
00384 
00386     virtual bool interpretRecord(const PDB::RecordEXPDTA& record);
00387     virtual bool fillRecord(const char* line, Size size, PDB::RecordEXPDTA& record);
00388     virtual bool parseRecordEXPDTA(const char* line, Size size);
00389 
00393     virtual bool interpretRecord(const PDB::RecordFORMUL& record);
00394     virtual bool fillRecord(const char* line, Size size, PDB::RecordFORMUL& record);
00395     virtual bool parseRecordFORMUL(const char* line, Size size);
00396 
00398     virtual bool interpretRecord(const PDB::RecordFTNOTE& record);
00399     virtual bool fillRecord(const char* line, Size size, PDB::RecordFTNOTE& record);
00400     virtual bool parseRecordFTNOTE(const char* line, Size size);
00401 
00405     virtual bool interpretRecord(const PDB::RecordHEADER& record);
00406     virtual bool fillRecord(const char* line, Size size, PDB::RecordHEADER& record);
00407     virtual bool parseRecordHEADER(const char* line, Size size);
00408 
00410     virtual bool interpretRecord(const PDB::RecordHELIX& record);
00411     virtual bool fillRecord(const char* line, Size size, PDB::RecordHELIX& record);
00412     virtual bool parseRecordHELIX(const char* line, Size size);
00413 
00415     virtual bool interpretRecord(const PDB::RecordHET& record);
00416     virtual bool fillRecord(const char* line, Size size, PDB::RecordHET& record);
00417     virtual bool parseRecordHET(const char* line, Size size);
00418 
00420     virtual bool interpretRecord(const PDB::RecordHETATM& record);
00421     virtual bool fillRecord(const char* line, Size size, PDB::RecordHETATM& record);
00422     virtual bool parseRecordHETATM(const char* line, Size size);
00423 
00425     virtual bool interpretRecord(const PDB::RecordHETNAM& record);
00426     virtual bool fillRecord(const char* line, Size size, PDB::RecordHETNAM& record);
00427     virtual bool parseRecordHETNAM(const char* line, Size size);
00428 
00430     virtual bool interpretRecord(const PDB::RecordHETSYN& record);
00431     virtual bool fillRecord(const char* line, Size size, PDB::RecordHETSYN& record);
00432     virtual bool parseRecordHETSYN(const char* line, Size size);
00433 
00435     virtual bool interpretRecord(const PDB::RecordHYDBND& record);
00436     virtual bool fillRecord(const char* line, Size size, PDB::RecordHYDBND& record);
00437     virtual bool parseRecordHYDBND(const char* line, Size size);
00438 
00440     virtual bool interpretRecord(const PDB::RecordJRNL& record);
00441     virtual bool fillRecord(const char* line, Size size, PDB::RecordJRNL& record);
00442     virtual bool parseRecordJRNL(const char* line, Size size);
00443 
00445     virtual bool interpretRecord(const PDB::RecordKEYWDS& record);
00446     virtual bool fillRecord(const char* line, Size size, PDB::RecordKEYWDS& record);
00447     virtual bool parseRecordKEYWDS(const char* line, Size size);
00448 
00450     virtual bool interpretRecord(const PDB::RecordLINK& record);
00451     virtual bool fillRecord(const char* line, Size size, PDB::RecordLINK& record);
00452     virtual bool parseRecordLINK(const char* line, Size size);
00453 
00457     virtual bool interpretRecord(const PDB::RecordMASTER& record);
00458     virtual bool fillRecord(const char* line, Size size, PDB::RecordMASTER& record);
00459     virtual bool parseRecordMASTER(const char* line, Size size);
00460 
00462     virtual bool interpretRecord(const PDB::RecordMODEL& record);
00463     virtual bool fillRecord(const char* line, Size size, PDB::RecordMODEL& record);
00464     virtual bool parseRecordMODEL(const char* line, Size size);
00465 
00467     virtual bool interpretRecord(const PDB::RecordMODRES& record);
00468     virtual bool fillRecord(const char* line, Size size, PDB::RecordMODRES& record);
00469     virtual bool parseRecordMODRES(const char* line, Size size);
00470 
00474     virtual bool interpretRecord(const PDB::RecordMTRIX1& record);
00475     virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX1& record);
00476     virtual bool parseRecordMTRIX1(const char* line, Size size);
00477 
00481     virtual bool interpretRecord(const PDB::RecordMTRIX2& record);
00482     virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX2& record);
00483     virtual bool parseRecordMTRIX2(const char* line, Size size);
00484 
00488     virtual bool interpretRecord(const PDB::RecordMTRIX3& record);
00489     virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX3& record);
00490     virtual bool parseRecordMTRIX3(const char* line, Size size);
00491 
00495     virtual bool interpretRecord(const PDB::RecordOBSLTE& record);
00496     virtual bool fillRecord(const char* line, Size size, PDB::RecordOBSLTE& record);
00497     virtual bool parseRecordOBSLTE(const char* line, Size size);
00498 
00502     virtual bool interpretRecord(const PDB::RecordORIGX1& record);
00503     virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX1& record);
00504     virtual bool parseRecordORIGX1(const char* line, Size size);
00505 
00509     virtual bool interpretRecord(const PDB::RecordORIGX2& record);
00510     virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX2& record);
00511     virtual bool parseRecordORIGX2(const char* line, Size size);
00512 
00516     virtual bool interpretRecord(const PDB::RecordORIGX3& record);
00517     virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX3& record);
00518     virtual bool parseRecordORIGX3(const char* line, Size size);
00519 
00521     virtual bool interpretRecord(const PDB::RecordREMARK& record);
00522     virtual bool fillRecord(const char* line, Size size, PDB::RecordREMARK& record);
00523     virtual bool parseRecordREMARK(const char* line, Size size);
00524 
00526     virtual bool interpretRecord(const PDB::RecordREVDAT& record);
00527     virtual bool fillRecord(const char* line, Size size, PDB::RecordREVDAT& record);
00528     virtual bool parseRecordREVDAT(const char* line, Size size);
00529 
00531     virtual bool interpretRecord(const PDB::RecordSCALE1& record);
00532     virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE1& record);
00533     virtual bool parseRecordSCALE1(const char* line, Size size);
00534 
00536     virtual bool interpretRecord(const PDB::RecordSCALE2& record);
00537     virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE2& record);
00538     virtual bool parseRecordSCALE2(const char* line, Size size);
00539 
00541     virtual bool interpretRecord(const PDB::RecordSCALE3& record);
00542     virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE3& record);
00543     virtual bool parseRecordSCALE3(const char* line, Size size);
00544 
00546     virtual bool interpretRecord(const PDB::RecordSEQADV& record);
00547     virtual bool fillRecord(const char* line, Size size, PDB::RecordSEQADV& record);
00548     virtual bool parseRecordSEQADV(const char* line, Size size);
00549 
00551     virtual bool interpretRecord(const PDB::RecordSEQRES& record);
00552     virtual bool fillRecord(const char* line, Size size, PDB::RecordSEQRES& record);
00553     virtual bool parseRecordSEQRES(const char* line, Size size);
00554 
00556     virtual bool interpretRecord(const PDB::RecordSHEET& record);
00557     virtual bool fillRecord(const char* line, Size size, PDB::RecordSHEET& record);
00558     virtual bool parseRecordSHEET(const char* line, Size size);
00559 
00561     virtual bool interpretRecord(const PDB::RecordSIGATM& record);
00562     virtual bool fillRecord(const char* line, Size size, PDB::RecordSIGATM& record);
00563     virtual bool parseRecordSIGATM(const char* line, Size size);
00564 
00568     virtual bool interpretRecord(const PDB::RecordSIGUIJ& record);
00569     virtual bool fillRecord(const char* line, Size size, PDB::RecordSIGUIJ& record);
00570     virtual bool parseRecordSIGUIJ(const char* line, Size size);
00571 
00573     virtual bool interpretRecord(const PDB::RecordSITE& record);
00574     virtual bool fillRecord(const char* line, Size size, PDB::RecordSITE& record);
00575     virtual bool parseRecordSITE(const char* line, Size size);
00576 
00578     virtual bool interpretRecord(const PDB::RecordSLTBRG& record);
00579     virtual bool fillRecord(const char* line, Size size, PDB::RecordSLTBRG& record);
00580     virtual bool parseRecordSLTBRG(const char* line, Size size);
00581 
00585     virtual bool interpretRecord(const PDB::RecordSOURCE& record);
00586     virtual bool fillRecord(const char* line, Size size, PDB::RecordSOURCE& record);
00587     virtual bool parseRecordSOURCE(const char* line, Size size);
00588 
00590     virtual bool interpretRecord(const PDB::RecordSPRSDE& record);
00591     virtual bool fillRecord(const char* line, Size size, PDB::RecordSPRSDE& record);
00592     virtual bool parseRecordSPRSDE(const char* line, Size size);
00593 
00595     virtual bool interpretRecord(const PDB::RecordSSBOND& record);
00596     virtual bool fillRecord(const char* line, Size size, PDB::RecordSSBOND& record);
00597     virtual bool parseRecordSSBOND(const char* line, Size size);
00598 
00600     virtual bool interpretRecord(const PDB::RecordTER& record);
00601     virtual bool fillRecord(const char* line, Size size, PDB::RecordTER& record);
00602     virtual bool parseRecordTER(const char* line, Size size);
00603 
00605     virtual bool interpretRecord(const PDB::RecordTITLE& record);
00606     virtual bool fillRecord(const char* line, Size size, PDB::RecordTITLE& record);
00607     virtual bool parseRecordTITLE(const char* line, Size size);
00608 
00610     virtual bool interpretRecord(const PDB::RecordTURN& record);
00611     virtual bool fillRecord(const char* line, Size size, PDB::RecordTURN& record);
00612     virtual bool parseRecordTURN(const char* line, Size size);
00613 
00617     virtual bool interpretRecord(const PDB::RecordTVECT& record);
00618     virtual bool fillRecord(const char* line, Size size, PDB::RecordTVECT& record);
00619     virtual bool parseRecordTVECT(const char* line, Size size);
00621 
00623     virtual bool hasFormat();
00624 
00625     typedef HashMap<PDB::Integer, PDBAtom*> PDBAtomMap;
00626     typedef Quadruple<String, PDB::Character, PDB::Integer, PDB::AChar> ResidueQuadruple;
00627     typedef HashMap<ResidueQuadruple, Residue*> ResidueMap;
00628     typedef std::list<ResidueQuadruple> QuadrupleList;
00629     typedef std::list<SecondaryStructure*> SecStructList;
00630     
00631 
00634 
00635     PDBFile& operator >> (Protein& protein) throw(Exception::ParseError);
00637     PDBFile& operator >> (Molecule& molecule) throw(Exception::ParseError);
00638     // Read system from the file
00639     PDBFile& operator >> (System& system) throw(Exception::ParseError);
00641     PDBFile& operator << (const Protein& protein) throw(File::CannotWrite);
00642     // Write system to the file
00643     PDBFile& operator << (const System& system) throw(File::CannotWrite);
00644     // Write molecule to the file
00645     PDBFile& operator << (const Molecule& molecule) throw(File::CannotWrite);
00647     bool read(Protein& protein) throw(Exception::ParseError);
00649     bool read(Molecule& protein) throw(Exception::ParseError);
00651     bool read(System& system) throw(Exception::ParseError);
00653     Molecule* read() throw(Exception::ParseError);
00655     bool write(const Protein& protein) throw(File::CannotWrite);
00657     bool write(const Molecule& molecule) throw(File::CannotWrite);
00659     bool write(const System& system) throw(File::CannotWrite);
00661     bool write(const System& system, const PDBInfo& info) throw(File::CannotWrite);
00663 
00664     protected:
00665 
00666     //_
00667     PDBFile(const File& pdbf) throw(Exception::FileNotFound);
00668 
00669     //_
00670     PDBFile& operator = (const PDBFile& pdbf);
00671 
00672     /*_ A helper function for initializing certain data structures. Used by
00673         constructors.
00674     */
00675     void init_() ;
00676 
00677     void postprocessSSBonds_();
00678     void postprocessHelices_();
00679     void postprocessSheetsTurns_(QuadrupleList& sectruct_list, SecStructList& new_secstruct_list);
00680     void postprocessRandomCoils_();
00681 
00682     
00683 
00684     // Method related to the writing of PDB files
00685 
00686     // 
00687     void write_(const AtomContainer& ac, const PDBInfo& info = PDBInfo());
00688 
00694     void writeRecord_(PDB::RecordType record, ...);
00695     void writeCONECTRecords_(PDB::Structure::ConectAtomList& cl);
00696 
00703     void writeRawRecord_(const char* format, const char* tag, ...);
00704     
00706     void addAllRecords_(const PDBInfo& info, PDB::RecordType type);
00707     
00709     void writeRecord_(const PDB::RecordSEQRES& seqres);
00711     void writeRecord_(const PDB::RecordHELIX& helix);
00713     void writeRecord_(const PDB::RecordSHEET& helix);
00715     void writeRecord_(const PDB::RecordTURN& helix);
00717     void writeRecord_(const PDB::RecordSSBOND& helix);
00719     void writeRecord_(const PDB::RecordCONECT& helix);
00720     
00721     void writeAtom_(const PDB::Structure::AtomEntry& atom, PDB::AdditionalAtomInfo& cr, bool hetatm = false);
00722     
00723     void writeTitleSection_(const PDB::Structure& structure, const PDBInfo& info);
00724     void writePrimaryStructureSection_(const PDB::Structure& structure, const PDBInfo& info);
00725     void writeHeterogenSection_(const PDB::Structure& structure, const PDBInfo& info);
00726     void writeSecondaryStructureSection_(const PDB::Structure& structure, const PDBInfo& info);
00727     void writeConnectivityAnnotationSection_(const PDB::Structure& structure, const PDBInfo& info);
00728     void writeMiscellaneousFeaturesSection_(const PDB::Structure& structure, const PDBInfo& info);
00729     void writeCrystallographicSection_(const PDB::Structure& structure, const PDBInfo& info);
00730     void writeCoordinateSection_(const PDB::Structure& structure, const PDBInfo& info);
00731     void writeConnectivitySection_(const PDB::Structure& structure, const PDBInfo& info);
00732     void writeBookKeepingSection_(const PDB::Structure& structure, const PDBInfo& info);
00733 
00734     void writeSEQRESSection_(const std::vector<std::pair<char, String> >& chain_residues);
00735     void writeHELIXSection_(const PDB::Structure& structure);
00736     void writeSHEETSection_(const PDB::Structure& structure);
00737     void writeTURNSection_(const PDB::Structure& structure);
00738     void writeSSBONDSection_(const PDB::Structure& structure);
00739     void writeHYDBNDSection_(const PDB::Structure& structure);
00740     void writeSLTBRGSection_(const PDB::Structure& structure);
00741 
00745     static void extractStructure_(const AtomContainer& ac, PDB::Structure& structure);
00746     
00750     static bool isHeteroAtom_(const Atom& atom);
00751     
00757     static void updateAdditionalAtomInfo_(const PDB::Structure::AtomEntry& atom, PDB::AdditionalAtomInfo& cr);
00758       
00759 
00760     char line_buffer_[PDB::SIZE_OF_PDB_LINE_BUFFER];
00761 
00762     String residue_name_;
00763     Index residue_sequence_number_;
00764     Index current_model_;
00765     Index current_record_;
00766     Size record_fields_;
00767     PDB::RecordType current_record_type_;
00768     PDB::RecordTypeFormat compare_record_type_format_; 
00769 
00770     PDBAtomMap PDB_atom_map_;
00771     ResidueMap residue_map_;
00772     QuadrupleList ssbond_list_;
00773     QuadrupleList helix_list_;
00774     QuadrupleList sheet_list_;
00775     QuadrupleList turn_list_;
00776 
00777     SecStructList new_helix_secstruc_list_;
00778     SecStructList new_sheet_secstruc_list_;
00779     SecStructList new_turn_secstruc_list_;
00780 
00781     PDB::AChar insertion_code_;
00782     PDB::Character chain_ID_;
00783     PDB::Integer sequence_number_;
00784     PDB::AChar code_;
00785     Protein* current_protein_;
00786     const Protein* current_const_protein_;
00787     Chain* current_chain_;
00788     const Chain* current_const_chain_;
00789     Residue*  current_residue_;
00790     const Residue* current_const_residue_;
00791     PDBAtom* current_PDB_atom_;
00792     const Atom* current_const_atom_;
00793     String name_;
00794     HashMap<const Atom*, Position> atom_map_;
00795     
00797     PDB::BookKeeping book_keeping_;
00798 
00800     int verbosity_;
00801 
00802     bool strict_line_checking_;
00803 
00805     Index selected_model_;
00806 
00808     bool store_skipped_records_;
00809 
00811     bool ignore_xplor_pseudo_atoms_;
00812     
00814     bool parse_partial_charges_;
00815   };
00816 
00817 
00818 
00819 
00820 
00824   inline
00825   BALL_EXPORT HashIndex Hash(const PDBFile::ResidueQuadruple& quadruple)
00826     
00827   {
00828     return (Index)quadruple.third;
00829   }
00830 
00834   inline
00835   BALL_EXPORT std::ostream& operator << (std::ostream& s, const Quadruple<String,PDB::Character,PDB::Integer,PDB::AChar>& /* q */)
00836   {
00837     return s;
00838   }
00839 
00840 
00841 
00842 # ifndef BALL_NO_INLINE_FUNCTIONS
00843 #   include <BALL/FORMAT/PDBFile.iC>
00844 # endif
00845 
00846 } // namespace BALL
00847 
00848 #endif // BALL_FORMAT_PDBFILE_H