BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 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 /*_ A helper function for initializing certain data structures. Used by 00756 constructors. 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 // Method related to the writing of PDB files 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>& /* q */) 00933 { 00934 return s; 00935 } 00936 00937 00938 00939 # ifndef BALL_NO_INLINE_FUNCTIONS 00940 # include <BALL/FORMAT/PDBFile.iC> 00941 # endif 00942 00943 } // namespace BALL 00944 00945 #endif // BALL_FORMAT_PDBFILE_H