The OBChiralData isn't used anymore. Also the functions OBAtom::IsClockwise, and OBAtom::IsAntiClockwise are obsolate. Instead, you should serialize the OBCisTransStereo and OBTetrahedralStereo data objects.
Fortunately (for me, since I don't have the time at the moment), Jérôme Pansanel has:...started the serialization of the OBCisTransStereo and OBTetrahedralStereo objects.
For the time being, I have tried the following workaround and it seems to be working well. First, I have removed now unneccessary code from the unserialization:
bool unserializeOBMol(OBBase* pOb, const char *serializedInput)
{
OBMol* pmol = pOb->CastAndClear<OBMol>();
OBMol &mol = *pmol;
unsigned int i,natoms,nbonds;
unsigned int *intptr = (unsigned int*) serializedInput;
++intptr;
natoms = *intptr;
++intptr;
nbonds = *intptr;
++intptr;
_ATOM *atomptr = (_ATOM*) intptr;
mol.ReserveAtoms(natoms);
OBAtom atom;
int stereo;
for (i = 1; i <= natoms; i++) {
atom.SetIdx(atomptr->idx);
atom.SetHyb(atomptr->hybridization);
atom.SetAtomicNum((int) atomptr->atomicnum);
atom.SetIsotope((unsigned int) atomptr->isotope);
atom.SetFormalCharge((int) atomptr->formalcharge);
stereo = atomptr->stereo;
if(stereo == 3) {
atom.SetChiral();
}
atom.SetSpinMultiplicity((short) atomptr->spinmultiplicity);
if(atomptr->aromatic != 0) {
atom.SetAromatic();
}
if (!mol.AddAtom(atom)) {
return false;
}
atom.Clear();
++atomptr;
}
_BOND *bondptr = (_BOND*) atomptr;
unsigned int start,end,order,flags;
for (i = 0;i < nbonds;i++) {
flags = 0;
start = bondptr->beginidx;
end = bondptr->endidx;
order = (int) bondptr->order;
if (start == 0 || end == 0 || order == 0 || start > natoms || end > natoms) {
return false;
}
order = (unsigned int) (order == 4) ? 5 : order;
stereo = bondptr->stereo;
if (stereo) {
if (stereo == 1) {
flags |= OB_WEDGE_BOND;
}
if (stereo == 6) {
flags |= OB_HASH_BOND;
}
}
if (bondptr->aromatic != 0) {
flags |= OB_AROMATIC_BOND;
}
if (!mol.AddBond(start,end,order,flags)) {
return false;
}
++bondptr;
}
intptr = (unsigned int*) bondptr;
mol.SetAromaticPerceived();
mol.SetKekulePerceived();
return true;
}
if (strchr (querysmi, '@') != NULL)
{
//Match against an OBMol generated from SMILES
}
else
{
//Match against an OBMol deserialized from binary
}
No comments:
Post a Comment