00001
00002
00003
00004
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
00639 PDBFile& operator >> (System& system) throw(Exception::ParseError);
00641 PDBFile& operator << (const Protein& protein) throw(File::CannotWrite);
00642
00643 PDBFile& operator << (const System& system) throw(File::CannotWrite);
00644
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
00673
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
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>& )
00836 {
00837 return s;
00838 }
00839
00840
00841
00842 # ifndef BALL_NO_INLINE_FUNCTIONS
00843 # include <BALL/FORMAT/PDBFile.iC>
00844 # endif
00845
00846 }
00847
00848 #endif // BALL_FORMAT_PDBFILE_H