Hi,
I 'm beginning with OpenBabel C++ API, and I encounter a problem when I want to
save an ObMol object in PDB format. The PDB files obtained are a mess with
atoms belonging to one residu written at the end of the file, as an example:
ATOM 71 N ALA A 12 97.135 16.357 -7.674 1.00 0.00 N
ATOM 72 CA ALA A 12 98.513 16.161 -8.005 1.00 0.00 C
ATOM 73 C ALA A 12 99.328 17.016 -7.096 1.00 0.00 C
ATOM 74 O ALA A 12 98.808 17.889 -6.403 1.00 0.00 O
ATOM 75 N HIS A 13 100.643 16.746 -7.045 1.00 0.00 N
ATOM 76 CA HIS A 13 101.502 17.528 -6.211 1.00 0.00 C
ATOM 77 CB HIS A 13 102.674 16.724 -5.618 1.00 0.00 C
ATOM 78 CG HIS A 13 103.569 17.549 -4.741 1.00 0.00 C
ATOM 79 CD2 HIS A 13 104.800 18.075 -4.990 1.00 0.00 C
ATOM 80 NE2 HIS A 13 105.262 18.775 -3.889 1.00 0.00 N
ATOM 81 CE1 HIS A 13 104.299 18.659 -2.994 1.00 0.00 C
ATOM 82 ND1 HIS A 13 103.253 17.929 -3.456 1.00 0.00 N
ATOM 83 C HIS A 13 102.079 18.641 -7.078 1.00 0.00 C
ATOM 84 OXT HIS A 13 102.768 19.536 -6.520 1.00 0.00 O
ATOM 85 O HIS A 13 101.834 18.613 -8.313 1.00 0.00 O
ATOM 86 CB ALA A 12 98.864 16.545 -9.453 1.00 0.00 C
ATOM 87 O SER A 10 94.342 13.798 -7.803 1.00 0.00 O
ATOM 88 CB LEU A 9 90.275 11.881 -8.911 1.00 0.00 C
ATOM 89 CG LEU A 9 91.390 12.366 -9.849 1.00 0.00 C
ATOM 90 CD2 LEU A 9 92.037 13.642 -9.305 1.00 0.00 C
ATOM 91 CD1 LEU A 9 92.427 11.268 -10.108 1.00 0.00 C
ATOM 92 O GLU A 7 86.905 8.351 -7.293 1.00 0.00 O
ATOM 93 CB GLU A 7 87.821 5.413 -6.992 1.00 0.00 C
ATOM 94 CG GLU A 7 87.929 3.960 -6.543 1.00 0.00 C
ATOM 95 CD GLU A 7 88.926 3.975 -5.392 1.00 0.00 C
ATOM 96 OE2 GLU A 7 88.628 4.626 -4.356 1.00 0.00 O
ATOM 97 OE1 GLU A 7 90.008 3.348 -5.538 1.00 0.00 O
ATOM 98 CB VAL A 6 82.905 7.871 -7.098 1.00 0.00 C
ATOM 99 CG2 VAL A 6 81.508 8.144 -7.646 1.00 0.00 C
ATOM 100 CG1 VAL A 6 84.059 8.342 -8.000 1.00 0.00 C
ATOM 101 O GLU A 5 81.994 3.833 -6.874 1.00 0.00 O
ATOM 102 CB SER A 4 77.745 2.632 -8.286 1.00 0.00 C
ATOM 103 OG SER A 4 77.103 1.579 -8.989 1.00 0.00 O
ATOM 104 O ASN A 2 72.284 0.936 -6.052 1.00 0.00 O
ATOM 105 CB ASN A 2 73.189 -2.065 -5.246 1.00 0.00 C
ATOM 106 CG ASN A 2 72.821 -3.377 -4.565 1.00 0.00 C
ATOM 107 OD1 ASN A 2 72.515 -3.406 -3.374 1.00 0.00 O
ATOM 108 ND2 ASN A 2 72.849 -4.494 -5.340 1.00 0.00 N
This is what I have done:
#include <iostream>
#include <openbabel/obconversion.h>
#include <openbabel/mol.h>
using namespace std;
using namespace OpenBabel;
int main(void)
{
OBConversion obconversion;
obconversion.SetInFormat("pdb");
OBMol mol,ligand,receptor;
OBResidue *residue=NULL;
vector<OBAtom*> atoms;
vector<OBMol> mchains;
OBAtom *atom=NULL;
int i,j;
ofstream out;
string file;
bool notatend = obconversion.ReadFile(&mol,"complex2.pdb");
if (notatend)
{
mchains=mol.Separate();
ligand=mchains.back();
mchains.pop_back();
receptor=mchains.front();
if(mchains.size()==2)
receptor+=mchains.back();
/* i=ligand.NumResidues();
for(i=0;i<(int)ligand.NumResidues();i++)
{
residue=ligand.GetResidue(i);
atoms=residue->GetAtoms();
cout<<atoms.size();
for(j=0;j<(int)atoms.size();j++)
{
atom=atoms[j];
cout<<residue->GetName()<<"\t"<<atom->GetType()<<endl;
}
}
*/
obconversion.SetOutFormat("pdb");
// file="ligand2.pdb";
out.open("ligand2.pdb");
obconversion.Write(&ligand,&out);
out.close();
out.open("receptor2.pdb");
obconversion.Write(&receptor, &out);
out.close();
receptor.Clear();
ligand.Clear();
mol.Clear();
mchains.clear();
}
return(0);
}
What is wrong? Is there action to do before writting the molecule? When I make
the job with the babel binary, it seems to work well?
Another thing I don't understand, is that the instruction
i=ligand.NumResidues(); returns 0!
I'm somewhat desesperated to fail for this very simple task.
Thanks for your valuable help.
François
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel