00001
00002
00003
00004
00005 #ifndef BALL_FORMAT_PDBFILE_H
00006 #define BALL_FORMAT_PDBFILE_H
00007
00008 #ifndef BALL_CONCEPT_PROPERTY_H
00009 # include <BALL/CONCEPT/property.h>
00010 #endif
00011
00012 #ifndef BALL_FORMAT_GENERICMOLFILE_H
00013 # include <BALL/FORMAT/genericMolFile.h>
00014 #endif
00015
00016 #ifndef BALL_DATATYPE_OPTIONS_H
00017 # include <BALL/DATATYPE/options.h>
00018 #endif
00019
00020 #ifndef BALL_DATATYPE_QUADRUPLE_H
00021 # include <BALL/DATATYPE/quadruple.h>
00022 #endif
00023
00024 #ifndef BALL_FORMAT_PDBDEFS_H
00025 # include <BALL/FORMAT/PDBdefs.h>
00026 #endif
00027
00028 #ifndef BALL_FORMAT_PDBINFO_H
00029 # include <BALL/FORMAT/PDBInfo.h>
00030 #endif
00031
00032 #ifndef BALL_KERNEL_PDBAtom_H
00033 # include <BALL/KERNEL/PDBAtom.h>
00034 #endif
00035
00036 #ifndef BALL_KERNEL_SYSTEM_H
00037 # include <BALL/KERNEL/system.h>
00038 #endif
00039
00040 #ifndef BALL_KERNEL_RESIDUE_H
00041 # include <BALL/KERNEL/residue.h>
00042 #endif
00043
00044 #ifndef BALL_KERNEL_SECONDARYSTRUCTURE_H
00045 # include <BALL/KERNEL/secondaryStructure.h>
00046 #endif
00047
00048 #if defined(BALL_HAS_UNORDERED_MAP) || defined(BALL_HAS_HASH_MAP)
00049 #ifdef BALL_EXTEND_HASH_IN_STD_NS
00050 namespace std
00051 {
00052 #endif
00053 namespace BALL_MAP_NAMESPACE {
00054 template<>
00055 struct hash<BALL::Quadruple<BALL::String, BALL::PDB::Character, BALL::PDB::Integer, BALL::PDB::AChar> >
00056 {
00057 size_t
00058 operator()(const BALL::Quadruple<BALL::String, BALL::PDB::Character, BALL::PDB::Integer, BALL::PDB::AChar>& f) const
00059 { return (size_t)f.third; }
00060 };
00061 }
00062 #ifdef BALL_EXTEND_HASH_IN_STD_NS
00063 }
00064 #endif
00065 #endif
00066
00067 namespace BALL
00068 {
00069
00074 class BALL_EXPORT PDBFile
00075 : public GenericMolFile,
00076 public PropertyManager
00077 {
00078 public:
00079
00085 struct BALL_EXPORT Option
00086 {
00093 static const char* VERBOSITY;
00094
00101 static const char* STRICT_LINE_CHECKING;
00102
00110 static const char* CHOOSE_MODEL;
00111
00117 static const char* STORE_SKIPPED_RECORDS;
00118
00124 static const char* IGNORE_XPLOR_PSEUDO_ATOMS;
00125
00131 static const char* PARSE_PARTIAL_CHARGES;
00132
00137 static const char* WRITE_PDBFORMAT_1996;
00138 };
00139
00142 struct BALL_EXPORT Default
00143 {
00148 static const Index VERBOSITY;
00149
00154 static const bool STRICT_LINE_CHECKING;
00155
00160 static const Index CHOOSE_MODEL;
00161
00165 static const bool STORE_SKIPPED_RECORDS;
00166
00170 static const bool IGNORE_XPLOR_PSEUDO_ATOMS;
00171
00175 static const bool PARSE_PARTIAL_CHARGES;
00176
00181 static const bool WRITE_PDBFORMAT_1996;
00182
00183 };
00184
00188
00189 Options options;
00191 PDBInfo info;
00193
00197
00200 PDBFile();
00201
00205 PDBFile(const String& filename, File::OpenMode open_mode = std::ios::in);
00206
00209 PDBFile(const Options& new_options);
00210
00213 virtual ~PDBFile();
00215
00219
00221 virtual void clear(int state);
00222
00224 virtual void clear();
00225
00227
00231
00233 virtual float getVersion() const;
00234
00239 void selectModel(Index index);
00240
00252 void selectAltLocationIndicator(char c);
00253
00255 Index getSelectedModel() const;
00256
00258 void selectAllModels();
00259
00261 Index getCurrentModel() const;
00262
00264 char* getRecordString();
00265
00267 const char* getRecordString() const;
00268
00270 Index getRecordNumber() const;
00271
00273 PDB::RecordType getRecordType() const;
00274
00278 virtual const char* getAtomElementSymbol
00279 (const PDB::Atom atom_name,
00280 PDB::Atom element_symbol);
00281
00283 virtual const char* getAtomName
00284 (const PDB::Atom atom_name);
00285
00287 virtual char getAtomRemotenessIndicator
00288 (const PDB::Atom atom_name);
00289
00291 virtual short getAtomBranchDesignator
00292 (const PDB::Atom atom_name);
00293
00295 Size countRecordFields() const;
00296
00300 Size countRecord
00301 (PDB::RecordType record_type,
00302 bool from_begin_of_file = true);
00303
00306 Size countRecords
00307 (bool from_begin_of_file = true);
00309
00316
00317 bool parseLine(const char* line, Size size, const char* format_string, ...);
00318
00320 bool readLine(char* line, Size size, bool extract_values);
00321
00323 bool readFirstRecord(bool read_values = true);
00324
00326 bool readNextRecord(bool read_values = true);
00327
00332 bool readRecords();
00333
00338 virtual bool readUnknownRecord(const char* line);
00339
00342 virtual bool readInvalidRecord(const char* line);
00343
00352 bool skipCurrentRecord();
00353
00355 virtual bool interpretRecord(const PDB::RecordANISOU& record);
00356 virtual bool fillRecord(const char* line, Size size, PDB::RecordANISOU& record);
00357 virtual bool parseRecordANISOU(const char* line, Size size);
00358
00360 virtual bool interpretRecord(const PDB::RecordATOM& record);
00361 virtual bool fillRecord(const char* line, Size size, PDB::RecordATOM& record);
00362 virtual bool parseRecordATOM(const char* line, Size size);
00363
00365 virtual bool interpretRecord(const PDB::RecordAUTHOR& record);
00366 virtual bool fillRecord(const char* line, Size size, PDB::RecordAUTHOR& record);
00367 virtual bool parseRecordAUTHOR(const char* line, Size size);
00368
00370 virtual bool interpretRecord(const PDB::RecordCAVEAT& record);
00371 virtual bool fillRecord(const char* line, Size size, PDB::RecordCAVEAT& record);
00372 virtual bool parseRecordCAVEAT(const char* line, Size size);
00373
00375 virtual bool interpretRecord(const PDB::RecordCISPEP& record);
00376 virtual bool fillRecord(const char* line, Size size, PDB::RecordCISPEP& record);
00377 virtual bool parseRecordCISPEP(const char* line, Size size);
00378
00380 virtual bool interpretRecord(const PDB::RecordCOMPND& record);
00381 virtual bool fillRecord(const char* line, Size size, PDB::RecordCOMPND& record);
00382 virtual bool parseRecordCOMPND(const char* line, Size size);
00383
00385 virtual bool interpretRecord(const PDB::RecordCONECT& record);
00386 virtual bool fillRecord(const char* line, Size size, PDB::RecordCONECT& record);
00387 virtual bool parseRecordCONECT(const char* line, Size size);
00388
00392 virtual bool interpretRecord(const PDB::RecordCRYST1& record);
00393 virtual bool fillRecord(const char* line, Size size, PDB::RecordCRYST1& record);
00394 virtual bool parseRecordCRYST1(const char* line, Size size);
00395
00397 virtual bool interpretRecord(const PDB::RecordDBREF& record);
00398 virtual bool fillRecord(const char* line, Size size, PDB::RecordDBREF& record);
00399 virtual bool parseRecordDBREF(const char* line, Size size);
00400
00402 virtual bool interpretRecord(const PDB::RecordEND& record);
00403 virtual bool fillRecord(const char* line, Size size, PDB::RecordEND& record);
00404 virtual bool parseRecordEND(const char* line, Size size);
00405
00407 virtual bool interpretRecord(const PDB::RecordENDMDL& record);
00408 virtual bool fillRecord(const char* line, Size size, PDB::RecordENDMDL& record);
00409 virtual bool parseRecordENDMDL(const char* line, Size size);
00410
00412 virtual bool interpretRecord(const PDB::RecordEXPDTA& record);
00413 virtual bool fillRecord(const char* line, Size size, PDB::RecordEXPDTA& record);
00414 virtual bool parseRecordEXPDTA(const char* line, Size size);
00415
00419 virtual bool interpretRecord(const PDB::RecordFORMUL& record);
00420 virtual bool fillRecord(const char* line, Size size, PDB::RecordFORMUL& record);
00421 virtual bool parseRecordFORMUL(const char* line, Size size);
00422
00424 virtual bool interpretRecord(const PDB::RecordFTNOTE& record);
00425 virtual bool fillRecord(const char* line, Size size, PDB::RecordFTNOTE& record);
00426 virtual bool parseRecordFTNOTE(const char* line, Size size);
00427
00431 virtual bool interpretRecord(const PDB::RecordHEADER& record);
00432 virtual bool fillRecord(const char* line, Size size, PDB::RecordHEADER& record);
00433 virtual bool parseRecordHEADER(const char* line, Size size);
00434
00436 virtual bool interpretRecord(const PDB::RecordHELIX& record);
00437 virtual bool fillRecord(const char* line, Size size, PDB::RecordHELIX& record);
00438 virtual bool parseRecordHELIX(const char* line, Size size);
00439
00441 virtual bool interpretRecord(const PDB::RecordHET& record);
00442 virtual bool fillRecord(const char* line, Size size, PDB::RecordHET& record);
00443 virtual bool parseRecordHET(const char* line, Size size);
00444
00446 virtual bool interpretRecord(const PDB::RecordHETATM& record);
00447 virtual bool fillRecord(const char* line, Size size, PDB::RecordHETATM& record);
00448 virtual bool parseRecordHETATM(const char* line, Size size);
00449
00451 virtual bool interpretRecord(const PDB::RecordHETNAM& record);
00452 virtual bool fillRecord(const char* line, Size size, PDB::RecordHETNAM& record);
00453 virtual bool parseRecordHETNAM(const char* line, Size size);
00454
00456 virtual bool interpretRecord(const PDB::RecordHETSYN& record);
00457 virtual bool fillRecord(const char* line, Size size, PDB::RecordHETSYN& record);
00458 virtual bool parseRecordHETSYN(const char* line, Size size);
00459
00461 virtual bool interpretRecord(const PDB::RecordHYDBND& record);
00462 virtual bool fillRecord(const char* line, Size size, PDB::RecordHYDBND& record);
00463 virtual bool parseRecordHYDBND(const char* line, Size size);
00464
00466 virtual bool interpretRecord(const PDB::RecordJRNL& record);
00467 virtual bool fillRecord(const char* line, Size size, PDB::RecordJRNL& record);
00468 virtual bool parseRecordJRNL(const char* line, Size size);
00469
00471 virtual bool interpretRecord(const PDB::RecordKEYWDS& record);
00472 virtual bool fillRecord(const char* line, Size size, PDB::RecordKEYWDS& record);
00473 virtual bool parseRecordKEYWDS(const char* line, Size size);
00474
00476 virtual bool interpretRecord(const PDB::RecordLINK& record);
00477 virtual bool fillRecord(const char* line, Size size, PDB::RecordLINK& record);
00478 virtual bool parseRecordLINK(const char* line, Size size);
00479
00483 virtual bool interpretRecord(const PDB::RecordMASTER& record);
00484 virtual bool fillRecord(const char* line, Size size, PDB::RecordMASTER& record);
00485 virtual bool parseRecordMASTER(const char* line, Size size);
00486
00488 virtual bool interpretRecord(const PDB::RecordMODEL& record);
00489 virtual bool fillRecord(const char* line, Size size, PDB::RecordMODEL& record);
00490 virtual bool parseRecordMODEL(const char* line, Size size);
00491
00493 virtual bool interpretRecord(const PDB::RecordMODRES& record);
00494 virtual bool fillRecord(const char* line, Size size, PDB::RecordMODRES& record);
00495 virtual bool parseRecordMODRES(const char* line, Size size);
00496
00500 virtual bool interpretRecord(const PDB::RecordMTRIX1& record);
00501 virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX1& record);
00502 virtual bool parseRecordMTRIX1(const char* line, Size size);
00503
00507 virtual bool interpretRecord(const PDB::RecordMTRIX2& record);
00508 virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX2& record);
00509 virtual bool parseRecordMTRIX2(const char* line, Size size);
00510
00514 virtual bool interpretRecord(const PDB::RecordMTRIX3& record);
00515 virtual bool fillRecord(const char* line, Size size, PDB::RecordMTRIX3& record);
00516 virtual bool parseRecordMTRIX3(const char* line, Size size);
00517
00521 virtual bool interpretRecord(const PDB::RecordOBSLTE& record);
00522 virtual bool fillRecord(const char* line, Size size, PDB::RecordOBSLTE& record);
00523 virtual bool parseRecordOBSLTE(const char* line, Size size);
00524
00528 virtual bool interpretRecord(const PDB::RecordORIGX1& record);
00529 virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX1& record);
00530 virtual bool parseRecordORIGX1(const char* line, Size size);
00531
00535 virtual bool interpretRecord(const PDB::RecordORIGX2& record);
00536 virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX2& record);
00537 virtual bool parseRecordORIGX2(const char* line, Size size);
00538
00542 virtual bool interpretRecord(const PDB::RecordORIGX3& record);
00543 virtual bool fillRecord(const char* line, Size size, PDB::RecordORIGX3& record);
00544 virtual bool parseRecordORIGX3(const char* line, Size size);
00545
00547 virtual bool interpretRecord(const PDB::RecordREMARK& record);
00548 virtual bool fillRecord(const char* line, Size size, PDB::RecordREMARK& record);
00549 virtual bool parseRecordREMARK(const char* line, Size size);
00550
00552 virtual bool interpretRecord(const PDB::RecordREVDAT& record);
00553 virtual bool fillRecord(const char* line, Size size, PDB::RecordREVDAT& record);
00554 virtual bool parseRecordREVDAT(const char* line, Size size);
00555
00557 virtual bool interpretRecord(const PDB::RecordSCALE1& record);
00558 virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE1& record);
00559 virtual bool parseRecordSCALE1(const char* line, Size size);
00560
00562 virtual bool interpretRecord(const PDB::RecordSCALE2& record);
00563 virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE2& record);
00564 virtual bool parseRecordSCALE2(const char* line, Size size);
00565
00567 virtual bool interpretRecord(const PDB::RecordSCALE3& record);
00568 virtual bool fillRecord(const char* line, Size size, PDB::RecordSCALE3& record);
00569 virtual bool parseRecordSCALE3(const char* line, Size size);
00570
00572 virtual bool interpretRecord(const PDB::RecordSEQADV& record);
00573 virtual bool fillRecord(const char* line, Size size, PDB::RecordSEQADV& record);
00574 virtual bool parseRecordSEQADV(const char* line, Size size);
00575
00577 virtual bool interpretRecord(const PDB::RecordSEQRES& record);
00578 virtual bool fillRecord(const char* line, Size size, PDB::RecordSEQRES& record);
00579 virtual bool parseRecordSEQRES(const char* line, Size size);
00580
00582 virtual bool interpretRecord(const PDB::RecordSHEET& record);
00583 virtual bool fillRecord(const char* line, Size size, PDB::RecordSHEET& record);
00584 virtual bool parseRecordSHEET(const char* line, Size size);
00585
00587 virtual bool interpretRecord(const PDB::RecordSIGATM& record);
00588 virtual bool fillRecord(const char* line, Size size, PDB::RecordSIGATM& record);
00589 virtual bool parseRecordSIGATM(const char* line, Size size);
00590
00594 virtual bool interpretRecord(const PDB::RecordSIGUIJ& record);
00595 virtual bool fillRecord(const char* line, Size size, PDB::RecordSIGUIJ& record);
00596 virtual bool parseRecordSIGUIJ(const char* line, Size size);
00597
00599 virtual bool interpretRecord(const PDB::RecordSITE& record);
00600 virtual bool fillRecord(const char* line, Size size, PDB::RecordSITE& record);
00601 virtual bool parseRecordSITE(const char* line, Size size);
00602
00604 virtual bool interpretRecord(const PDB::RecordSLTBRG& record);
00605 virtual bool fillRecord(const char* line, Size size, PDB::RecordSLTBRG& record);
00606 virtual bool parseRecordSLTBRG(const char* line, Size size);
00607
00611 virtual bool interpretRecord(const PDB::RecordSOURCE& record);
00612 virtual bool fillRecord(const char* line, Size size, PDB::RecordSOURCE& record);
00613 virtual bool parseRecordSOURCE(const char* line, Size size);
00614
00616 virtual bool interpretRecord(const PDB::RecordSPRSDE& record);
00617 virtual bool fillRecord(const char* line, Size size, PDB::RecordSPRSDE& record);
00618 virtual bool parseRecordSPRSDE(const char* line, Size size);
00619
00621 virtual bool interpretRecord(const PDB::RecordSSBOND& record);
00622 virtual bool fillRecord(const char* line, Size size, PDB::RecordSSBOND& record);
00623 virtual bool parseRecordSSBOND(const char* line, Size size);
00624
00626 virtual bool interpretRecord(const PDB::RecordTER& record);
00627 virtual bool fillRecord(const char* line, Size size, PDB::RecordTER& record);
00628 virtual bool parseRecordTER(const char* line, Size size);
00629
00631 virtual bool interpretRecord(const PDB::RecordTITLE& record);
00632 virtual bool fillRecord(const char* line, Size size, PDB::RecordTITLE& record);
00633 virtual bool parseRecordTITLE(const char* line, Size size);
00634
00636 virtual bool interpretRecord(const PDB::RecordTURN& record);
00637 virtual bool fillRecord(const char* line, Size size, PDB::RecordTURN& record);
00638 virtual bool parseRecordTURN(const char* line, Size size);
00639
00643 virtual bool interpretRecord(const PDB::RecordTVECT& record);
00644 virtual bool fillRecord(const char* line, Size size, PDB::RecordTVECT& record);
00645 virtual bool parseRecordTVECT(const char* line, Size size);
00647
00649 virtual bool hasFormat();
00650
00651 typedef HashMap<PDB::Integer, PDBAtom*> PDBAtomMap;
00652 typedef Quadruple<String, PDB::Character, PDB::Integer, PDB::AChar> ResidueQuadruple;
00653 typedef HashMap<ResidueQuadruple, Residue*> ResidueMap;
00654 typedef std::list<ResidueQuadruple> QuadrupleList;
00655 typedef std::list<SecondaryStructure*> SecStructList;
00656
00657
00660
00664 PDBFile& operator >> (Protein& protein);
00665
00669 PDBFile& operator >> (Molecule& molecule);
00670
00674 PDBFile& operator >> (System& system);
00675
00679 PDBFile& operator << (const Protein& protein);
00680
00684 PDBFile& operator << (const System& system);
00685
00689 PDBFile& operator << (const Molecule& molecule);
00690
00696 bool read(Protein& protein);
00697
00703 bool read(Molecule& protein);
00704
00710 bool read(System& system);
00711
00716 Molecule* read();
00717
00723 bool write(const Protein& protein);
00724
00730 bool write(const Molecule& molecule);
00731
00737 bool write(const System& system);
00738
00744 bool write(const System& system, const PDBInfo& info);
00746
00747 protected:
00748
00749
00750 PDBFile(const File& pdbf);
00751
00752
00753 PDBFile& operator = (const PDBFile& pdbf);
00754
00755
00756
00757
00758 void init_() ;
00759
00760 void postprocessSSBonds_();
00761 void postprocessHelices_();
00762 void postprocessSheetsTurns_(QuadrupleList& sectruct_list, SecStructList& new_secstruct_list);
00763 void postprocessRandomCoils_();
00764
00765
00766
00767
00768
00769
00770 void write_(const AtomContainer& ac, const PDBInfo& info = PDBInfo());
00771
00777 void writeRecord_(PDB::RecordType record, ...);
00778 void writeCONECTRecords_(PDB::Structure::ConectAtomList& cl);
00779
00786 void writeRawRecord_(const char* format, const char* tag, ...);
00787
00789 void addAllRecords_(const PDBInfo& info, PDB::RecordType type);
00790
00792 void writeRecord_(const PDB::RecordSEQRES& seqres);
00794 void writeRecord_(const PDB::RecordHELIX& helix);
00796 void writeRecord_(const PDB::RecordSHEET& helix);
00798 void writeRecord_(const PDB::RecordTURN& helix);
00800 void writeRecord_(const PDB::RecordSSBOND& helix);
00802 void writeRecord_(const PDB::RecordCONECT& helix);
00804 void writeRecord_(const PDB::RecordCRYST1& cryst1);
00806 void writeRecord_(const PDB::RecordMTRIX1& mtrix1);
00808 void writeRecord_(const PDB::RecordMTRIX2& mtrix2);
00810 void writeRecord_(const PDB::RecordMTRIX3& mtrix3);
00811
00812 void writeAtom_(const PDB::Structure::AtomEntry& atom, PDB::AdditionalAtomInfo& cr, bool hetatm = false);
00813
00814 void writeTitleSection_(const PDB::Structure& structure, const PDBInfo& info);
00815 void writePrimaryStructureSection_(const PDB::Structure& structure, const PDBInfo& info);
00816 void writeHeterogenSection_(const PDB::Structure& structure, const PDBInfo& info);
00817 void writeSecondaryStructureSection_(const PDB::Structure& structure, const PDBInfo& info);
00818 void writeConnectivityAnnotationSection_(const PDB::Structure& structure, const PDBInfo& info);
00819 void writeMiscellaneousFeaturesSection_(const PDB::Structure& structure, const PDBInfo& info);
00820 void writeCrystallographicSection_(const PDB::Structure& structure, const PDBInfo& info);
00821 void writeCoordinateSection_(const PDB::Structure& structure, const PDBInfo& info);
00822 void writeConnectivitySection_(const PDB::Structure& structure, const PDBInfo& info);
00823 void writeBookKeepingSection_(const PDB::Structure& structure, const PDBInfo& info);
00824
00825 void writeSEQRESSection_(const std::vector<std::pair<char, String> >& chain_residues);
00826 void writeHELIXSection_(const PDB::Structure& structure);
00827 void writeSHEETSection_(const PDB::Structure& structure);
00828 void writeTURNSection_(const PDB::Structure& structure);
00829 void writeSSBONDSection_(const PDB::Structure& structure);
00830 void writeHYDBNDSection_(const PDB::Structure& structure);
00831 void writeSLTBRGSection_(const PDB::Structure& structure);
00832 void writeCRYST1Section_(const PDB::Structure& structure);
00833 void writeMTRIXnSection_(const PDB::Structure& structure);
00834
00838 static void extractStructure_(const AtomContainer& ac, PDB::Structure& structure);
00839
00843 static bool isHeteroAtom_(const Atom& atom);
00844
00850 static void updateAdditionalAtomInfo_(const PDB::Structure::AtomEntry& atom, PDB::AdditionalAtomInfo& cr);
00851
00852
00853 char line_buffer_[PDB::SIZE_OF_PDB_LINE_BUFFER];
00854
00855 String residue_name_;
00856 Index residue_sequence_number_;
00857 Index current_model_;
00858 Index current_record_;
00859 Size record_fields_;
00860 PDB::RecordType current_record_type_;
00861 PDB::RecordTypeFormat compare_record_type_format_;
00862
00863 PDBAtomMap PDB_atom_map_;
00864 ResidueMap residue_map_;
00865 QuadrupleList ssbond_list_;
00866 QuadrupleList helix_list_;
00867 QuadrupleList sheet_list_;
00868 QuadrupleList turn_list_;
00869
00870 SecStructList new_helix_secstruc_list_;
00871 SecStructList new_sheet_secstruc_list_;
00872 SecStructList new_turn_secstruc_list_;
00873
00874 char alternate_location_indicator_;
00875 PDB::AChar insertion_code_;
00876 PDB::Character chain_ID_;
00877 PDB::Integer sequence_number_;
00878 PDB::AChar code_;
00879 Protein* current_protein_;
00880 const Protein* current_const_protein_;
00881 Chain* current_chain_;
00882 const Chain* current_const_chain_;
00883 Residue* current_residue_;
00884 const Residue* current_const_residue_;
00885 PDBAtom* current_PDB_atom_;
00886 const Atom* current_const_atom_;
00887 String name_;
00888 HashMap<const Atom*, Position> atom_map_;
00889
00891 PDB::BookKeeping book_keeping_;
00892
00894 int verbosity_;
00895
00896 bool strict_line_checking_;
00897
00899 Index selected_model_;
00900
00902 bool store_skipped_records_;
00903
00905 bool ignore_xplor_pseudo_atoms_;
00906
00908 bool parse_partial_charges_;
00909
00911 bool write_pdbformat_1996_;
00912 };
00913
00914
00915
00916
00917
00921 inline
00922 BALL_EXPORT HashIndex Hash(const PDBFile::ResidueQuadruple& quadruple)
00923
00924 {
00925 return (Index)quadruple.third;
00926 }
00927
00931 inline
00932 BALL_EXPORT std::ostream& operator << (std::ostream& s, const Quadruple<String,PDB::Character,PDB::Integer,PDB::AChar>& )
00933 {
00934 return s;
00935 }
00936
00937
00938
00939 # ifndef BALL_NO_INLINE_FUNCTIONS
00940 # include <BALL/FORMAT/PDBFile.iC>
00941 # endif
00942
00943 }
00944
00945 #endif // BALL_FORMAT_PDBFILE_H