Skip to content

Saving reaction as CML outputs malformed data #10

@abhimanyusirohi

Description

@abhimanyusirohi

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"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions