On Wed, Oct 7, 2015 at 1:07 PM, Noel O'Boyle <baoille...@gmail.com> wrote:
> Are you using the dev version? If not, sounds like a problem I fixed
> earlier this year - see github closed issues from that period.
>
Noel, thanks for the suggestion. I downloaded and installed the latest code
from git, but it made no difference. From the comments in your commit, the
bug you fixed had to do with reading InChI strings, whereas mine is with
writing them.
Here is another oddity, no doubt related. If I use an SDF for input, it has
the opposite effect: with all-zero coordinates, it doesn't print the stereo
layer of InChI, but when I generate 2D coordinates (even though it's all
flat in the Z axis), it prints the stereo layer of InChI. (See the code
below).
Which leads to the question: exactly what is InChI looking for on an atom
that makes it decide it's a stereo center? I'm digging through the code
trying to find a clue, but I've made no progress so far.
#include <string>
#include <sstream>
#include <openbabel/mol.h>
#include <openbabel/obconversion.h>
#include <openbabel/op.h>
using namespace std;
using namespace OpenBabel;
int main(int argc, char **argv)
{
char *smiles;
int smilen;
const char *sdf =
"\n"
" OpenBabel10071522293D\n"
"\n"
" 5 4 0 0 1 0 0 0 0 0999 V2000\n"
" 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0
0\n"
" 0.0000 0.0000 0.0000 C 0 0 2 0 0 0 0 0 0 0 0
0\n"
" 0.0000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0
0\n"
" 0.0000 0.0000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0
0\n"
" 0.0000 0.0000 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0
0\n"
" 1 2 1 0 0 0 0\n"
" 2 3 1 1 0 0 0\n"
" 2 4 1 0 0 0 0\n"
" 2 5 1 0 0 0 0\n"
"M END\n"
"$$$$\n";
OBConversion *pconv_sdf = new OBConversion();
OBConversion *pconv_smi = new OBConversion();
OBConversion *pconv_ich = new OBConversion();
pconv_sdf->SetInFormat("sdf");
pconv_ich->SetOutFormat("inchi");
pconv_smi->SetOutFormat("can");
OBMol *pmol = new OBMol;;
pconv_sdf->ReadString(pmol, sdf);
cout << pconv_ich->WriteString(pmol, true) << "\n";
cout << pconv_smi->WriteString(pmol, true) << "\n";
OBOp* pOp = OBOp::FindType("gen2D");
pOp->Do(pmol);
cout << pconv_ich->WriteString(pmol, true) << "\n";
cout << pconv_smi->WriteString(pmol, true) << "\n";
}
And the output. Notice that the SMILES has the stereo info both before and
after the gen2D, but the InChI only has it after.
==============================
*** Open Babel Warning in InChI code
#0 :Omitted undefined stereo
InChI=1S/C2H4BrCl/c1-2(3)4/h2H,1H3
C[C@@H](Br)Cl
InChI=1S/C2H4BrCl/c1-2(3)4/h2H,1H3/t2-/m0/s1
C[C@@H](Br)Cl
Thanks,
Craig
------------------------------------------------------------------------------
Full-scale, agent-less Infrastructure Monitoring from a single dashboard
Integrate with 40+ ManageEngine ITSM Solutions for complete visibility
Physical-Virtual-Cloud Infrastructure monitoring from one console
Real user monitoring with APM Insights and performance trend reports
Learn More http://pubads.g.doubleclick.net/gampad/clk?id=247754911&iu=/4140
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel