#include #include "mmdb_manager.h" int main(int argc, char **argv) { CMMDBManager *MMDBManager = new CMMDBManager; int err; // Needed for the error message printing: // MMDBManager->GetInputBuffer(S, lcount); // Used by reference and as a pointer. Grimness indeed. int error_count; char error_buf[500]; // Make routine initializations // InitMatType(); MMDBManager->SetFlag ( MMDBF_IgnoreBlankLines | MMDBF_IgnoreDuplSeqNum | MMDBF_IgnoreNonCoorPDBErrors | MMDBF_IgnoreRemarks); if (argc > 1) { std::string pdb_name(argv[1]); std::cout << "Reading coordinate file: " << pdb_name.c_str() << "\n"; err = MMDBManager->ReadCoorFile((char *)pdb_name.c_str()); if (err) { // does_file_exist(pdb_name.c_str()); std::cout << "There was an error reading " << pdb_name.c_str() << ". \n"; std::cout << "ERROR " << err << " READ: " << GetErrorDescription(err) << std::endl; // // This makes my stomach churn too. Sorry. // MMDBManager->GetInputBuffer(error_buf, error_count); if (error_count >= 0) { std::cout << " LINE #" << error_count << "\n " << error_buf << std::endl << std::endl; } else { if (error_count == -1) { std::cout << " CIF ITEM: " << error_buf << std::endl << std::endl; } } // } else { // we read the coordinate file OK. // switch (MMDBManager->GetFileType()) { case MMDB_FILE_PDB : std::cout << " PDB" ; break; case MMDB_FILE_CIF : std::cout << " mmCIF" ; break; case MMDB_FILE_Binary : std::cout << " MMDB binary" ; break; default: std::cout << " Unknown (report as a bug!)\n"; } std::cout << " file " << pdb_name.c_str() << " has been read.\n"; } char *str = MMDBManager->GetSpaceGroup(); if (str) { std::string sgrp(str); std::cout << "Spacegroup: " << sgrp << "\n"; } else { std::cout << "No Spacegroup found for this PDB file\n"; } // Examine the atom names: int imod = 1; CModel *model_p = MMDBManager->GetModel(imod); CChain *chain_p; // run over chains of the existing MMDBManager int nchains = model_p->GetNumberOfChains(); for (int ichain=0; ichainGetChain(ichain); int nres = chain_p->GetNumberOfResidues(); PCResidue residue_p; CAtom *at; for (int ires=0; iresGetResidue(ires); int n_atoms = residue_p->GetNumberOfAtoms(); for (int iat=0; iatGetAtom(iat); std::cout << "Atom name :" << at->name << ":\n"; } } } } return 0; }