Dear all,
I want to create a new OBMol object for the ligand within a protein-ligand
complex.
The atoms can be copied successfully, but I have some trouble with the
bonds.
Since the residue name (ATP for example), residue number and chain id of
the ligand are known, I iterate all the atoms of the complex and insert the
selected ones into a new OBMol.
Codes:
- - -
void CopySelected(OBMol& new_mol, OBMol select_from, char selected_chain,
string selected_resn, unsigned int selected_res_num)
{
OBAtom *atom;
OBResidue *res;
FOR_ATOMS_OF_MOL(atom, select_from) {
res = atom->GetResidue(true);
string resn = res->GetName();
int res_num = res->GetNum();
char chain = res->GetChain();
if ((resn == selected_resn)
&& (res_num == selected_res_num)
&& (chain == selected_chain)) {
bool is_success = new_mol.InsertAtom((*atom));
for (auto bond_itr = atom->BeginBonds();
bond_itr != atom->EndBonds();
bond_itr++) {
new_mol.AddBond(*(*bond_itr));
}
}
}
}
- - -
However, when the new molecule is written into sdf or mol2 format, some of
the bonds are missing; the atom types are incorrect in mol2 file.
Is there any established method to create a new molecule from part of the
existing one while maintaining *all *the information? How can I improve my
function here?
Thanks!
Eric
------------------------------------------------------------------------------
_______________________________________________
OpenBabel-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbabel-discuss