indigo icon indicating copy to clipboard operation
indigo copied to clipboard

Saving reaction as CML outputs malformed data

Open abhimanyusirohi opened this issue 11 years ago • 0 comments

The following code can be used to reproduce the problem. Only the "reactantlist" part is written as CML to out buffer or file. The written CML data is not well formed.

const char* rxnV2 = "$RXN\r\nDiels Alder V2000\r\n  \r\n\r\n  2  1\r\n$MOL\r\n\r\n\r\n\r\n  6  5  0  0  0  0  0  0  0  0999 V2000\r\n    0.6489    0.9959    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.0656    0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.0656   -0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.6489   -0.9959    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.6489    0.8250    0.0000 R1  0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.6489   -0.8250    0.0000 R2  0  0  0  0  0  0  0  0  0  0  0  0\r\n  1  2  2  0        0\r\n  2  3  1  0        0\r\n  3  4  2  0        0\r\n  2  5  1  0        0\r\n  3  6  1  0        0\r\nM  END\r\n$MOL\r\n\r\n\r\n\r\n  4  3  0  0  0  0  0  0  0  0999 V2000\r\n   -0.2917    0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.2917   -0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.2917    0.9959    0.0000 R3  0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.2917   -0.9959    0.0000 R4  0  0  0  0  0  0  0  0  0  0  0  0\r\n  1  2  2  0        0\r\n  1  3  1  0        0\r\n  2  4  1  0        0\r\nM  END\r\n$MOL\r\n\r\n\r\n\r\n 10 10  0  0  0  0  0  0  0  0999 V2000\r\n   -0.7145    0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.7145   -0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.0000   -0.8250    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.7145   -0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    0.7145    0.4125    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n   -0.0000    0.8250    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0\r\n    1.4289    0.8250    0.0000 R3  0  0  0  0  0  0  0  0  0  0  0  0\r\n    1.4289   -0.8250    0.0000 R4  0  0  0  0  0  0  0  0  0  0  0  0\r\n   -1.4289    0.8250    0.0000 R1  0  0  0  0  0  0  0  0  0  0  0  0\r\n   -1.4289   -0.8250    0.0000 R2  0  0  0  0  0  0  0  0  0  0  0  0\r\n  1  2  2  0        0\r\n  2  3  1  0        0\r\n  3  4  1  0        0\r\n  4  5  1  0        0\r\n  5  6  1  0        0\r\n  6  1  1  0        0\r\n  5  7  1  0        0\r\n  4  8  1  0        0\r\n  1  9  1  0        0\r\n  2 10  1  0        0\r\nM  END\r\n";
    int rxn = indigoLoadReactionFromBuffer(rxnV2, strlen(rxnV2) + 1);
    int bufHandle = indigoWriteBuffer();
    int saver = indigoCreateSaver(bufHandle, "cml");
    indigoAppend(saver, rxn);
    indigoClose(saver);

    char* out;
    int outSize = 0;
    char* tempBuffer;
    if((indigoToBuffer(bufHandle, &tempBuffer, &outSize) > 0) && (outSize > 0))
    {
        out = new char[outSize];
        memcpy_s(out, outSize, tempBuffer, outSize);
    }

The output is:

<?xml version="1.0" ?>
<cml>
<reaction title="Diels Alder V2000">
<reactantList>
<molecule title="">
  <atomArray>
    <atom id="a0" elementType="C"
         x2="0.648900" y2="0.995900"/>
    <atom id="a1" elementType="C"
         x2="0.065600" y2="0.412500"/>
    <atom id="a2" elementType="C"
         x2="0.065600" y2="-0.412500"/>
    <atom id="a3" elementType="C"
         x2="0.648900" y2="-0.995900"/>
    <atom id="a4" elementType="R1"

abhimanyusirohi avatar Oct 20 '14 03:10 abhimanyusirohi