diff --git a/api/tests/integration/ref/formats/cdx_export.py.out b/api/tests/integration/ref/formats/cdx_export.py.out index 1d69b29c7d..2ea2e11060 100644 --- a/api/tests/integration/ref/formats/cdx_export.py.out +++ b/api/tests/integration/ref/formats/cdx_export.py.out @@ -8,6 +8,10 @@ two_bn:success *** KET to CDX *** issue_1774:success issue_1775:success +molecule json loader: 'any' bonds are allowed only for queries +*** Try as Query *** +CDXML loader: Queries not supported +issue_1777:success agents:success *** CDXML to CDX *** AlcoholOxidation_Rxn1:success diff --git a/api/tests/integration/ref/formats/mol_to_cdxml.py.out b/api/tests/integration/ref/formats/mol_to_cdxml.py.out index 1846da5287..579260cbe5 100644 --- a/api/tests/integration/ref/formats/mol_to_cdxml.py.out +++ b/api/tests/integration/ref/formats/mol_to_cdxml.py.out @@ -374,10 +374,10 @@ stereo_either-0020.mol - - - - + + + + @@ -386,14 +386,14 @@ stereo_either-0020.mol - + - - - + + + diff --git a/api/tests/integration/tests/formats/cdx_export.py b/api/tests/integration/tests/formats/cdx_export.py index a17c4ce851..9b67ccb072 100644 --- a/api/tests/integration/tests/formats/cdx_export.py +++ b/api/tests/integration/tests/formats/cdx_export.py @@ -72,6 +72,7 @@ def test_file(filename, suffix=".mol"): print("*** KET to CDX ***") test_file("issue_1774", ".ket") test_file("issue_1775", ".ket") +test_file("issue_1777", ".ket") root = joinPathPy("reactions/", __file__) files = ["agents"] diff --git a/api/tests/integration/tests/formats/molecules/issue_1777.ket b/api/tests/integration/tests/formats/molecules/issue_1777.ket new file mode 100644 index 0000000000..79c014963f --- /dev/null +++ b/api/tests/integration/tests/formats/molecules/issue_1777.ket @@ -0,0 +1,1938 @@ +{ + "root": { + "nodes": [ + { + "$ref": "mol0" + }, + { + "$ref": "mol1" + }, + { + "$ref": "mol2" + }, + { + "$ref": "mol3" + }, + { + "$ref": "mol4" + }, + { + "$ref": "mol5" + }, + { + "$ref": "mol6" + }, + { + "$ref": "mol7" + }, + { + "$ref": "mol8" + }, + { + "$ref": "mol9" + }, + { + "$ref": "mol10" + }, + { + "$ref": "mol11" + }, + { + "$ref": "mol12" + }, + { + "$ref": "mol13" + }, + { + "$ref": "mol14" + }, + { + "$ref": "mol15" + }, + { + "$ref": "mol16" + }, + { + "$ref": "mol17" + }, + { + "$ref": "mol18" + }, + { + "$ref": "mol19" + }, + { + "$ref": "mol20" + }, + { + "$ref": "mol21" + }, + { + "$ref": "mol22" + }, + { + "$ref": "mol23" + }, + { + "$ref": "mol24" + }, + { + "$ref": "mol25" + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"single\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 4.8912288733444775, + "y": -2.945274369570217, + "z": 0 + }, + "pos": [ + { + "x": 4.8912288733444775, + "y": -2.945274369570217, + "z": 0 + }, + { + "x": 4.8912288733444775, + "y": -3.370274369570217, + "z": 0 + }, + { + "x": 5.887469107719477, + "y": -3.370274369570217, + "z": 0 + }, + { + "x": 5.887469107719477, + "y": -2.945274369570217, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"double\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 4.806171477725268, + "y": -4.244927748122193, + "z": 0 + }, + "pos": [ + { + "x": 4.806171477725268, + "y": -4.244927748122193, + "z": 0 + }, + { + "x": 4.806171477725268, + "y": -4.669927748122193, + "z": 0 + }, + { + "x": 5.948712981631518, + "y": -4.669927748122193, + "z": 0 + }, + { + "x": 5.948712981631518, + "y": -4.244927748122193, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"triple\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 5.067681671018786, + "y": -5.519621312388802, + "z": 0 + }, + "pos": [ + { + "x": 5.067681671018786, + "y": -5.519621312388802, + "z": 0 + }, + { + "x": 5.067681671018786, + "y": -5.944621312388802, + "z": 0 + }, + { + "x": 5.921929717893786, + "y": -5.944621312388802, + "z": 0 + }, + { + "x": 5.921929717893786, + "y": -5.519621312388802, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"duble dashed double\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":19,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 8.102779329034025, + "y": -2.7696546162238285, + "z": 0 + }, + "pos": [ + { + "x": 8.102779329034025, + "y": -2.7696546162238285, + "z": 0 + }, + { + "x": 8.102779329034025, + "y": -3.1946546162238283, + "z": 0 + }, + { + "x": 11.601522004815275, + "y": -3.1946546162238283, + "z": 0 + }, + { + "x": 11.601522004815275, + "y": -2.7696546162238285, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"double cis/trans unqnown\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":24,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.396393908775671, + "y": -4.04432142964565, + "z": 0 + }, + "pos": [ + { + "x": 7.396393908775671, + "y": -4.04432142964565, + "z": 0 + }, + { + "x": 7.396393908775671, + "y": -4.46932142964565, + "z": 0 + }, + { + "x": 11.649518908775672, + "y": -4.46932142964565, + "z": 0 + }, + { + "x": 11.649518908775672, + "y": -4.04432142964565, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"=aromatic\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":9,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 12.365948919335281, + "y": -2.944687936591424, + "z": 0 + }, + "pos": [ + { + "x": 12.365948919335281, + "y": -2.944687936591424, + "z": 0 + }, + { + "x": 12.365948919335281, + "y": -3.369687936591424, + "z": 0 + }, + { + "x": 14.035369543114578, + "y": -3.369687936591424, + "z": 0 + }, + { + "x": 14.035369543114578, + "y": -2.944687936591424, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"single down\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":11,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 4.886369951001271, + "y": -8.293781298368101, + "z": 0 + }, + "pos": [ + { + "x": 4.886369951001271, + "y": -8.293781298368101, + "z": 0 + }, + { + "x": 4.886369951001271, + "y": -8.718781298368102, + "z": 0 + }, + { + "x": 6.866838701001271, + "y": -8.718781298368102, + "z": 0 + }, + { + "x": 6.866838701001271, + "y": -8.293781298368101, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"dashed\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 3.4029455282784333, + "y": -9.418614707834442, + "z": 0 + }, + "pos": [ + { + "x": 3.4029455282784333, + "y": -9.418614707834442, + "z": 0 + }, + { + "x": 3.4029455282784333, + "y": -9.843614707834442, + "z": 0 + }, + { + "x": 4.633414278278433, + "y": -9.843614707834442, + "z": 0 + }, + { + "x": 4.633414278278433, + "y": -9.418614707834442, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"hashed\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 3.327972159521792, + "y": -10.268368339922135, + "z": 0 + }, + "pos": [ + { + "x": 3.327972159521792, + "y": -10.268368339922135, + "z": 0 + }, + { + "x": 3.327972159521792, + "y": -10.693368339922136, + "z": 0 + }, + { + "x": 4.558440909521792, + "y": -10.693368339922136, + "z": 0 + }, + { + "x": 4.558440909521792, + "y": -10.268368339922135, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"hashed wedged\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":13,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 2.0085107712812285, + "y": -11.093148246003254, + "z": 0 + }, + "pos": [ + { + "x": 2.0085107712812285, + "y": -11.093148246003254, + "z": 0 + }, + { + "x": 2.0085107712812285, + "y": -11.518148246003255, + "z": 0 + }, + { + "x": 4.656948080546365, + "y": -11.518148246003255, + "z": 0 + }, + { + "x": 4.656948080546365, + "y": -11.093148246003254, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"single up\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":9,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 9.872087590980076, + "y": -8.718781300770269, + "z": 0 + }, + "pos": [ + { + "x": 9.872087590980076, + "y": -8.718781300770269, + "z": 0 + }, + { + "x": 9.872087590980076, + "y": -9.14378130077027, + "z": 0 + }, + { + "x": 11.389629094886326, + "y": -9.14378130077027, + "z": 0 + }, + { + "x": 11.389629094886326, + "y": -8.718781300770269, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"bold\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":4,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 8.195107686959009, + "y": -9.343614707410529, + "z": 0 + }, + "pos": [ + { + "x": 8.195107686959009, + "y": -9.343614707410529, + "z": 0 + }, + { + "x": 8.195107686959009, + "y": -9.76861470741053, + "z": 0 + }, + { + "x": 8.904092061959009, + "y": -9.76861470741053, + "z": 0 + }, + { + "x": 8.904092061959009, + "y": -9.343614707410529, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"wedged\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.688829522838038, + "y": -10.293361771529757, + "z": 0 + }, + "pos": [ + { + "x": 7.688829522838038, + "y": -10.293361771529757, + "z": 0 + }, + { + "x": 7.688829522838038, + "y": -10.718361771529757, + "z": 0 + }, + { + "x": 9.027501397838037, + "y": -10.718361771529757, + "z": 0 + }, + { + "x": 9.027501397838037, + "y": -10.293361771529757, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"hollow wedged\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":13,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 6.632944421079607, + "y": -11.243121972716349, + "z": 0 + }, + "pos": [ + { + "x": 6.632944421079607, + "y": -11.243121972716349, + "z": 0 + }, + { + "x": 6.632944421079607, + "y": -11.66812197271635, + "z": 0 + }, + { + "x": 9.114194421079606, + "y": -11.66812197271635, + "z": 0 + }, + { + "x": 9.114194421079606, + "y": -11.243121972716349, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"dative\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 15.323027570361795, + "y": -2.97030768908999, + "z": 0 + }, + "pos": [ + { + "x": 15.323027570361795, + "y": -2.97030768908999, + "z": 0 + }, + { + "x": 15.323027570361795, + "y": -3.39530768908999, + "z": 0 + }, + { + "x": 16.340141828174296, + "y": -3.39530768908999, + "z": 0 + }, + { + "x": 16.340141828174296, + "y": -2.97030768908999, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"wavy\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":4,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 15.43269143721379, + "y": -3.8950678305465214, + "z": 0 + }, + "pos": [ + { + "x": 15.43269143721379, + "y": -3.8950678305465214, + "z": 0 + }, + { + "x": 15.43269143721379, + "y": -4.320067830546521, + "z": 0 + }, + { + "x": 16.324561554401292, + "y": -4.320067830546521, + "z": 0 + }, + { + "x": 16.324561554401292, + "y": -3.8950678305465214, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"any\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":3,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 16.197140982973956, + "y": -9.068648025234651, + "z": 0 + }, + "pos": [ + { + "x": 16.197140982973956, + "y": -9.068648025234651, + "z": 0 + }, + { + "x": 16.197140982973956, + "y": -9.493648025234652, + "z": 0 + }, + { + "x": 16.814255240786455, + "y": -9.493648025234652, + "z": 0 + }, + { + "x": 16.814255240786455, + "y": -9.068648025234651, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"singe/duble\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":11,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 15.031505166749941, + "y": -10.093341588088222, + "z": 0 + }, + "pos": [ + { + "x": 15.031505166749941, + "y": -10.093341588088222, + "z": 0 + }, + { + "x": 15.031505166749941, + "y": -10.518341588088223, + "z": 0 + }, + { + "x": 16.966160928468693, + "y": -10.518341588088223, + "z": 0 + }, + { + "x": 16.966160928468693, + "y": -10.093341588088222, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"single/aromatic\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":15,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 14.425873260413113, + "y": -11.11802810569805, + "z": 0 + }, + "pos": [ + { + "x": 14.425873260413113, + "y": -11.11802810569805, + "z": 0 + }, + { + "x": 14.425873260413113, + "y": -11.54302810569805, + "z": 0 + }, + { + "x": 16.960284881506862, + "y": -11.54302810569805, + "z": 0 + }, + { + "x": 16.960284881506862, + "y": -11.11802810569805, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"double/aromatic\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":15,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 14.190855513503195, + "y": -12.167755464781447, + "z": 0 + }, + "pos": [ + { + "x": 14.190855513503195, + "y": -12.167755464781447, + "z": 0 + }, + { + "x": 14.190855513503195, + "y": -12.592755464781447, + "z": 0 + }, + { + "x": 16.871568404128194, + "y": -12.592755464781447, + "z": 0 + }, + { + "x": 16.871568404128194, + "y": -12.167755464781447, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"=double ether\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":13,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 12.628459740312387, + "y": -4.244301248464978, + "z": 0 + }, + "pos": [ + { + "x": 12.628459740312387, + "y": -4.244301248464978, + "z": 0 + }, + { + "x": 12.628459740312387, + "y": -4.669301248464977, + "z": 0 + }, + { + "x": 14.95759868684559, + "y": -4.669301248464977, + "z": 0 + }, + { + "x": 14.95759868684559, + "y": -4.244301248464978, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"topology\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":8,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 5.736023611680789, + "y": -12.617741376837438, + "z": 0 + }, + "pos": [ + { + "x": 5.736023611680789, + "y": -12.617741376837438, + "z": 0 + }, + { + "x": 5.736023611680789, + "y": -13.042741376837439, + "z": 0 + }, + { + "x": 7.191309256212039, + "y": -13.042741376837439, + "z": 0 + }, + { + "x": 7.191309256212039, + "y": -12.617741376837438, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"ring\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":4,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 4.259423981453789, + "y": -13.442488916960205, + "z": 0 + }, + "pos": [ + { + "x": 4.259423981453789, + "y": -13.442488916960205, + "z": 0 + }, + { + "x": 4.259423981453789, + "y": -13.867488916960205, + "z": 0 + }, + { + "x": 4.884814606453789, + "y": -13.867488916960205, + "z": 0 + }, + { + "x": 4.884814606453789, + "y": -13.442488916960205, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"chain\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":5,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 3.7545586069283345, + "y": -14.667168867166783, + "z": 0 + }, + "pos": [ + { + "x": 3.7545586069283345, + "y": -14.667168867166783, + "z": 0 + }, + { + "x": 3.7545586069283345, + "y": -15.092168867166784, + "z": 0 + }, + { + "x": 4.6510429819283345, + "y": -15.092168867166784, + "z": 0 + }, + { + "x": 4.6510429819283345, + "y": -14.667168867166783, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"reaction\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":8,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 9.948067070083582, + "y": -12.44278878571426, + "z": 0 + }, + "pos": [ + { + "x": 9.948067070083582, + "y": -12.44278878571426, + "z": 0 + }, + { + "x": 9.948067070083582, + "y": -12.86778878571426, + "z": 0 + }, + { + "x": 11.282442070083581, + "y": -12.86778878571426, + "z": 0 + }, + { + "x": 11.282442070083581, + "y": -12.44278878571426, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"center\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 8.11888815204474, + "y": -13.292561646692944, + "z": 0 + }, + "pos": [ + { + "x": 8.11888815204474, + "y": -13.292561646692944, + "z": 0 + }, + { + "x": 8.11888815204474, + "y": -13.717561646692944, + "z": 0 + }, + { + "x": 9.18624655048224, + "y": -13.717561646692944, + "z": 0 + }, + { + "x": 9.18624655048224, + "y": -13.292561646692944, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"make/break\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":10,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.201745813776757, + "y": -14.092348597876498, + "z": 0 + }, + "pos": [ + { + "x": 7.201745813776757, + "y": -14.092348597876498, + "z": 0 + }, + { + "x": 7.201745813776757, + "y": -14.517348597876499, + "z": 0 + }, + { + "x": 9.173474329401756, + "y": -14.517348597876499, + "z": 0 + }, + { + "x": 9.173474329401756, + "y": -14.092348597876498, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"change\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":6,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.751692315195871, + "y": -14.842135548777446, + "z": 0 + }, + "pos": [ + { + "x": 7.751692315195871, + "y": -14.842135548777446, + "z": 0 + }, + { + "x": 7.751692315195871, + "y": -15.267135548777446, + "z": 0 + }, + { + "x": 8.998420830820871, + "y": -15.267135548777446, + "z": 0 + }, + { + "x": 8.998420830820871, + "y": -14.842135548777446, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"make and change\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":15,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 6.181138695919678, + "y": -15.541961910597875, + "z": 0 + }, + "pos": [ + { + "x": 6.181138695919678, + "y": -15.541961910597875, + "z": 0 + }, + { + "x": 6.181138695919678, + "y": -15.966961910597876, + "z": 0 + }, + { + "x": 9.178904809200928, + "y": -15.966961910597876, + "z": 0 + }, + { + "x": 9.178904809200928, + "y": -15.541961910597875, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"not center\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":10,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.4226005048766694, + "y": -16.29175590674256, + "z": 0 + }, + "pos": [ + { + "x": 7.4226005048766694, + "y": -16.29175590674256, + "z": 0 + }, + { + "x": 7.4226005048766694, + "y": -16.71675590674256, + "z": 0 + }, + { + "x": 9.11544718456417, + "y": -16.71675590674256, + "z": 0 + }, + { + "x": 9.11544718456417, + "y": -16.29175590674256, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"not modified\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":12,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.064429321208962, + "y": -17.141528767721248, + "z": 0 + }, + "pos": [ + { + "x": 7.064429321208962, + "y": -17.141528767721248, + "z": 0 + }, + { + "x": 7.064429321208962, + "y": -17.56652876772125, + "z": 0 + }, + { + "x": 9.107398071208962, + "y": -17.56652876772125, + "z": 0 + }, + { + "x": 9.107398071208962, + "y": -17.141528767721248, + "z": 0 + } + ] + } + }, + { + "type": "text", + "data": { + "content": "{\"blocks\":[{\"text\":\"unmapped\",\"inlineStyleRanges\":[{\"offset\":0,\"length\":8,\"style\":\"CUSTOM_FONT_SIZE_15px\"}],\"entityRanges\":[],\"data\":{}}],\"entityMap\":{}}", + "position": { + "x": 7.293068948688582, + "y": -18.04130258240265, + "z": 0 + }, + "pos": [ + { + "x": 7.293068948688582, + "y": -18.04130258240265, + "z": 0 + }, + { + "x": 7.293068948688582, + "y": -18.46630258240265, + "z": 0 + }, + { + "x": 9.065725198688583, + "y": -18.46630258240265, + "z": 0 + }, + { + "x": 9.065725198688583, + "y": -18.04130258240265, + "z": 0 + } + ] + } + } + ], + "connections": [], + "templates": [] + }, + "mol0": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 5.7055315679142815, + -3.351879184922522, + 0 + ] + }, + { + "label": "C", + "location": [ + 6.571634131914557, + -2.852012444713126, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol1": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 6.030444987038223, + -4.626539370221905, + 0 + ] + }, + { + "label": "C", + "location": [ + 6.8965477893935265, + -4.126672644909698, + 0 + ] + } + ], + "bonds": [ + { + "type": 2, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol2": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 6.130418475113679, + -5.72624607056675, + 0 + ] + }, + { + "label": "C", + "location": [ + 6.996521039113958, + -5.226379345254542, + 0 + ] + } + ], + "bonds": [ + { + "type": 3, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol3": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 11.778779288969762, + -4.350926721142796, + 0 + ] + }, + { + "label": "C", + "location": [ + 12.644881376259978, + -3.8510595191205317, + 0 + ] + } + ], + "bonds": [ + { + "type": 2, + "atoms": [ + 0, + 1 + ], + "stereo": 3 + } + ] + }, + "mol4": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 11.55379242476539, + -3.151279375390904, + 0 + ] + }, + { + "label": "C", + "location": [ + 12.41989451205561, + -2.651412650078697, + 0 + ] + } + ], + "bonds": [ + { + "type": 4, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol5": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 16.47765959373436, + -3.126939134696526, + 0 + ] + }, + { + "label": "C", + "location": [ + 17.343761681024574, + -2.627072421488286, + 0 + ] + } + ], + "bonds": [ + { + "type": 9, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol6": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 4.805771605365326, + -9.575219998483762, + 0 + ] + }, + { + "label": "C", + "location": [ + 5.671874169365601, + -9.075353273171556, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 6 + } + ] + }, + "mol7": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 4.755784980505112, + -10.325020086452074, + 0 + ] + }, + { + "label": "C", + "location": [ + 5.6218875445053875, + -9.825153361139867, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 6 + } + ] + }, + "mol8": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 4.8307647986179205, + -11.174793424140814, + 0 + ] + }, + { + "label": "C", + "location": [ + 5.696867600973224, + -10.674926698828608, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 6 + } + ] + }, + "mol9": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.404545621250652, + -9.625206861699008, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.27064770854087, + -9.125340136386798, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 1 + } + ] + }, + "mol10": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.329565326427783, + -10.574953449108179, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.195667890428059, + -10.07508672379597, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 1 + } + ] + }, + "mol11": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.329565326427783, + -11.399733831899352, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.195667890428059, + -10.899867106587147, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 1 + } + ] + }, + "mol12": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 16.502652548631925, + -4.151665957339805, + 0 + ] + }, + { + "label": "C", + "location": [ + 17.36875463592214, + -3.6517992320275985, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "stereo": 4 + } + ] + }, + "mol13": { + "type": "molecule", + "atoms": [ + { + "label": "Al", + "location": [ + 17.003146250311403, + -9.32525331644919, + 0 + ] + }, + { + "label": "C", + "location": [ + 17.86924833760162, + -8.825386591136985, + 0 + ] + } + ], + "bonds": [ + { + "type": 8, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol14": { + "type": "molecule", + "atoms": [ + { + "label": "Si", + "location": [ + 17.128139205774186, + -10.324980198539924, + 0 + ] + }, + { + "label": "F", + "location": [ + 17.994241293064402, + -9.825113473227715, + 0 + ] + } + ], + "bonds": [ + { + "type": 5, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol15": { + "type": "molecule", + "atoms": [ + { + "label": "S", + "location": [ + 17.178146251300532, + -11.27466014719216, + 0 + ] + }, + { + "label": "Ar", + "location": [ + 18.044248338590748, + -10.77479342187995, + 0 + ] + } + ], + "bonds": [ + { + "type": 6, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol16": { + "type": "molecule", + "atoms": [ + { + "label": "B", + "location": [ + 17.228112932204674, + -12.299406735025242, + 0 + ] + }, + { + "label": "As", + "location": [ + 18.094215019494893, + -11.799540009713034, + 0 + ] + } + ], + "bonds": [ + { + "type": 7, + "atoms": [ + 0, + 1 + ] + } + ] + }, + "mol17": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 5.155678217741858, + -13.799093732029904, + 0 + ] + }, + { + "label": "C", + "location": [ + 6.021780781742137, + -13.299227006717695, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "topology": 1 + } + ] + }, + "mol18": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 5.180671649349481, + -14.94878777230005, + 0 + ] + }, + { + "label": "C", + "location": [ + 6.046774213349757, + -14.448921046987842, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "topology": 2 + } + ] + }, + "mol19": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.479525439363456, + -13.474180551260991, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.345627526653676, + -12.974313825948782, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": 1 + } + ] + }, + "mol20": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.429538576148214, + -14.323954365659787, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.295640663438434, + -13.824087640347583, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": 4 + } + ] + }, + "mol21": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.229592076707355, + -15.04876054531042, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.095694163997575, + -14.548893819998213, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": 8 + } + ] + }, + "mol22": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.30457189482016, + -15.723580815165922, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.17067398211038, + -15.223714089853717, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": 12 + } + ] + }, + "mol23": { + "type": "molecule", + "atoms": [ + { + "label": "O", + "location": [ + 9.329565326427783, + -16.52336776634948, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.195667890428059, + -16.02350104103727, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": -1 + } + ] + }, + "mol24": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.354558758035406, + -17.398134535645838, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.220660845325622, + -16.898267810333635, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ], + "center": 2 + } + ] + }, + "mol25": { + "type": "molecule", + "atoms": [ + { + "label": "C", + "location": [ + 9.329565326427783, + -18.172927578511718, + 0 + ] + }, + { + "label": "C", + "location": [ + 10.195667890428059, + -17.67306085319951, + 0 + ] + } + ], + "bonds": [ + { + "type": 1, + "atoms": [ + 0, + 1 + ] + } + ] + } +} \ No newline at end of file diff --git a/api/tests/integration/tests/formats/ref/issue_1777.b64cdx b/api/tests/integration/tests/formats/ref/issue_1777.b64cdx new file mode 100644 index 0000000000..597ddbd480 --- /dev/null +++ b/api/tests/integration/tests/formats/ref/issue_1777.b64cdx @@ -0,0 +1 @@ +VmpDRDAxMDAEAwIBAAAAAAAAAAAAAAAAAAAAAAUIBAAAAB4AGggCAAMAGwgCAAQAAAEkAAAAAgACAOn9BQBBcmlhbAMA6f0PAFRpbWVzIE5ldyBSb21hbgADMgAIAP///////wAAAAAAAP//AAAAAP////8AAAAA//8AAAAA/////wAAAAD/////AAD//wGAAAAAABAIAgABAA8IAgABAAOABAAAAASABQAAAAACCACEvjMADX46AAAABIAGAAAAAAIIAIq/JAC5eVQAAAAEgAcAAAAAAggA6PtZAGQ9RAAAAASACAAAAAACCADu/EoADzleAAAABIAJAAAAAAIIAKf5egAvPUcAAAAEgAoAAAAAAggArfprANo4YQAAAASACwAAAAACCAA0t1EAmLDwAAAABIAMAAAAAAIIADi4QgBCrAoBAAAEgA0AAAAAAggA6bktALLw6QAAAASADgAAAAACCADvuh4AXOwDAQAABIAPAAAAAAIIAPr+LAD+p30BAAAEgBAAAAAAAggAAAAeAKijlwEAAASAEQAAAAACCADGce4A5n8fAAAABIASAAAAAAIIAM1y3wCQezkAAAAEgBMAAAAAAggAPPAEAQAAHgAAAASAFAAAAAACCABD8fUAq/s3AAAABIAVAAAAAAIIAIBuHgHYPyAAAAAEgBYAAAAAAggAhm8PAYM7OgAAAASAFwAAAAACCACs8e8AfHapAAAABIAYAAAAAAIIALPy4AAmcsMAAAAEgBkAAAAAAggAum8MAaI2pwAAAASAGgAAAAACCADAcP0ATjLBAAAABIAbAAAAAAIIAAouJQGiNqcAAAAEgBwAAAAAAggAEC8WAU4ywQAAAASAHQAAAAACCADhvEsA8md+AQAABIAeAAAAAAIIAOe9PACcY5gBAAAEgB8AAAACBAIADQAAAggACPLmAL5rjQEGgAAAAAAAAggACPLmAL5rjQEjCAEAAAAHDgABAAAAAwBgAMgAAABBbAAAAAAEgCAAAAAAAggADvPXAGRnpwEAAASAIQAAAAIEAgAOAAACCADu7wQBriuRAQaAAAAAAAACCADu7wQBriuRASMIAQAAAAcOAAEAAAADAGAAyAAAAFNpAAAAAASAIgAAAAIEAgAJAAACCAD08PUAWCerAQaAAAAAAAACCAD08PUAWCerASMIAQAAAAcNAAEAAAA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 \ No newline at end of file diff --git a/api/tests/integration/tests/formats/ref/stereo_either-0020.b64cdx b/api/tests/integration/tests/formats/ref/stereo_either-0020.b64cdx index 747ac973b3..78b40fa1f7 100644 --- a/api/tests/integration/tests/formats/ref/stereo_either-0020.b64cdx +++ b/api/tests/integration/tests/formats/ref/stereo_either-0020.b64cdx @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/core/indigo-core/molecule/CDXCommons.h b/core/indigo-core/molecule/CDXCommons.h index 9ccad8b4f0..ab54065664 100644 --- a/core/indigo-core/molecule/CDXCommons.h +++ b/core/indigo-core/molecule/CDXCommons.h @@ -2,6 +2,7 @@ #define _H_CDXCommons #include "CDXConstants.h" +#include "reaction/reaction.h" #include #include #include @@ -1278,6 +1279,33 @@ namespace indigo {kCDXBondTopology_Ring, "Ring"}, {kCDXBondTopology_Chain, "Chain"}, {kCDXBondTopology_RingOrChain, "RingOrChain"}}; + + static const std::unordered_map bond_rxn_participation_to_reaction_center = { + {kCDXBondReactionParticipation_Unspecified, RC_UNMARKED}, + {kCDXBondReactionParticipation_ReactionCenter, RC_CENTER}, + {kCDXBondReactionParticipation_MakeOrBreak, RC_MADE_OR_BROKEN}, + {kCDXBondReactionParticipation_ChangeType, RC_ORDER_CHANGED}, + {kCDXBondReactionParticipation_MakeAndChange, RC_MADE_OR_BROKEN | RC_ORDER_CHANGED}, + {kCDXBondReactionParticipation_NotReactionCenter, RC_NOT_CENTER}, + {kCDXBondReactionParticipation_NoChange, RC_UNCHANGED}, + {kCDXBondReactionParticipation_Unmapped, RC_UNMARKED}}; + static const std::unordered_map reaction_center_to_bond_rxn_participation = { + {RC_UNMARKED, kCDXBondReactionParticipation_Unspecified}, + {RC_CENTER, kCDXBondReactionParticipation_ReactionCenter}, + {RC_MADE_OR_BROKEN, kCDXBondReactionParticipation_MakeOrBreak}, + {RC_ORDER_CHANGED, kCDXBondReactionParticipation_ChangeType}, + {RC_MADE_OR_BROKEN | RC_ORDER_CHANGED, kCDXBondReactionParticipation_MakeAndChange}, + {RC_NOT_CENTER, kCDXBondReactionParticipation_NotReactionCenter}, + {RC_UNCHANGED, kCDXBondReactionParticipation_NoChange}, + {RC_UNMARKED, kCDXBondReactionParticipation_Unmapped}}; + + static const std::unordered_map cdx_topology_to_topology = {{kCDXBondTopology_Unspecified, TOPOLOGY_ANY}, + {kCDXBondTopology_Ring, TOPOLOGY_RING}, + {kCDXBondTopology_Chain, TOPOLOGY_CHAIN}, + {kCDXBondTopology_RingOrChain, TOPOLOGY_ANY}}; + static const std::unordered_map topology_to_cdx_topology = { + {TOPOLOGY_ANY, kCDXBondTopology_Unspecified}, {TOPOLOGY_RING, kCDXBondTopology_Ring}, {TOPOLOGY_CHAIN, kCDXBondTopology_Chain}}; + } #ifdef _WIN32 diff --git a/core/indigo-core/molecule/src/molecule_cdxml_loader.cpp b/core/indigo-core/molecule/src/molecule_cdxml_loader.cpp index 7690721cd8..df5fdd12f6 100644 --- a/core/indigo-core/molecule/src/molecule_cdxml_loader.cpp +++ b/core/indigo-core/molecule/src/molecule_cdxml_loader.cpp @@ -756,14 +756,18 @@ void MoleculeCdxmlLoader::_updateConnection(const CdxmlNode& node, int atom_idx) int MoleculeCdxmlLoader::_addBond(Molecule& mol, const CdxmlBond& bond, int begin, int end) { - int bond_idx = mol.addBond_Silent(begin, end, bond.order); + // bond topology is allowed only for queries but queries not supported for now + // if (bond.topology > 0 && _pqmol == nullptr) + // throw Error("bond topology is allowed only for queries"); + int bond_idx = _pmol != nullptr ? _pmol->addBond_Silent(begin, end, bond.order) + : _pqmol->addBond(begin, end, QueryMolecule::createQueryMoleculeBond(bond.order, bond.topology, bond.dir)); if (bond.order == BOND_DOUBLE && bond.dir == BOND_EITHER) mol.cis_trans.ignore(bond_idx); else if (bond.dir > 0) mol.setBondDirection(bond_idx, bond.dir); if (bond.reaction_center > 0) mol.reaction_bond_reacting_center[bond_idx] = bond.reaction_center; - // bond topology is allowed only for queries but queries not supported for now + return bond_idx; } @@ -1285,27 +1289,14 @@ void MoleculeCdxmlLoader::_parseBond(CdxmlBond& bond, BaseCDXProperty& prop) auto reaction_center_lambda = [&bond](const std::string& data) { uint8_t rxn_participation = kBondReactionParticipationNameToInt.at(data); - static const std::unordered_map bond_rxn_participation_map = { - {kCDXBondReactionParticipation_Unspecified, RC_UNMARKED}, - {kCDXBondReactionParticipation_ReactionCenter, RC_CENTER}, - {kCDXBondReactionParticipation_MakeOrBreak, RC_MADE_OR_BROKEN}, - {kCDXBondReactionParticipation_ChangeType, RC_ORDER_CHANGED}, - {kCDXBondReactionParticipation_MakeAndChange, RC_MADE_OR_BROKEN | RC_ORDER_CHANGED}, - {kCDXBondReactionParticipation_NotReactionCenter, RC_NOT_CENTER}, - {kCDXBondReactionParticipation_NoChange, RC_UNCHANGED}, - {kCDXBondReactionParticipation_Unmapped, RC_UNMARKED}}; - auto it = bond_rxn_participation_map.find(rxn_participation); - if (it != bond_rxn_participation_map.end()) + auto it = bond_rxn_participation_to_reaction_center.find(rxn_participation); + if (it != bond_rxn_participation_to_reaction_center.end()) bond.reaction_center = it->second; }; auto topology_lambda = [&bond](const std::string& data) { uint8_t topology = kBondTopologyNameToInt.at(data); - static const std::unordered_map topology_map = {{kCDXBondTopology_Unspecified, TOPOLOGY_ANY}, - {kCDXBondTopology_Ring, TOPOLOGY_RING}, - {kCDXBondTopology_Chain, TOPOLOGY_CHAIN}, - {kCDXBondTopology_RingOrChain, TOPOLOGY_ANY}}; - bond.topology = topology_map.at(topology); + bond.topology = cdx_topology_to_topology.at(topology); }; std::unordered_map> bond_dispatcher = {{"id", id_lambda}, diff --git a/core/indigo-core/molecule/src/molecule_cdxml_saver.cpp b/core/indigo-core/molecule/src/molecule_cdxml_saver.cpp index 227dcd8924..ac64b6df2a 100644 --- a/core/indigo-core/molecule/src/molecule_cdxml_saver.cpp +++ b/core/indigo-core/molecule/src/molecule_cdxml_saver.cpp @@ -957,44 +957,57 @@ void MoleculeCdxmlSaver::addBondToFragment(BaseMolecule& mol, tinyxml2::XMLEleme bond->SetAttribute("E", _atoms_ids[edge.end]); int order = mol.getBondOrder(bond_idx); + if (order < 0 && mol.isQueryMolecule()) + order = QueryMolecule::getQueryBondType(mol.asQueryMolecule().getBond(bond_idx)); + + int dir = mol.getBondDirection(bond_idx); + + if (mol.cis_trans.isIgnored(bond_idx)) + { + order = BOND_DOUBLE; + dir = BOND_EITHER; + } if (order == BOND_DOUBLE || order == BOND_TRIPLE) bond->SetAttribute("Order", order); else if (order == BOND_AROMATIC) { - bond->SetAttribute("Order", "1.5"); - bond->SetAttribute("Display", "Dash"); - bond->SetAttribute("Display2", "Dash"); + bond->SetAttribute("Order", kBondOrderIntToStr.at(kCDXBondOrder_OneHalf).c_str()); + bond->SetAttribute("Display", kCDXProp_Bond_DisplayIdToStr.at(kCDXBondDisplay_Dash).c_str()); + bond->SetAttribute("Display2", kCDXProp_Bond_DisplayIdToStr.at(kCDXBondDisplay_Dash).c_str()); } else if (order == _BOND_SINGLE_OR_DOUBLE) { - bond->SetAttribute("Order", "1 2"); + bond->SetAttribute("Order", (kBondOrderIntToStr.at(kCDXBondOrder_Single) + " " + kBondOrderIntToStr.at(kCDXBondOrder_Double)).c_str()); } else if (order == _BOND_SINGLE_OR_AROMATIC) { - bond->SetAttribute("Order", "1 1.5"); + bond->SetAttribute("Order", (kBondOrderIntToStr.at(kCDXBondOrder_Single) + " " + kBondOrderIntToStr.at(kCDXBondOrder_OneHalf)).c_str()); } else if (order == _BOND_DOUBLE_OR_AROMATIC) { - bond->SetAttribute("Order", "1.5 2"); + bond->SetAttribute("Order", (kBondOrderIntToStr.at(kCDXBondOrder_Double) + " " + kBondOrderIntToStr.at(kCDXBondOrder_OneHalf)).c_str()); + } + else if (order == _BOND_ANY) + { + bond->SetAttribute("Order", kBondOrderIntToStr.at(kCDXBondOrder_Any).c_str()); } else if (order == _BOND_COORDINATION) { - bond->SetAttribute("Order", "dative"); + bond->SetAttribute("Order", kBondOrderIntToStr.at(kCDXBondOrder_Dative).c_str()); } else if (order == _BOND_HYDROGEN) { - bond->SetAttribute("Order", "hydrogen"); + bond->SetAttribute("Order", kBondOrderIntToStr.at(kCDXBondOrder_Hydrogen).c_str()); } else ; // Do not write single bond order - int dir = mol.getBondDirection(bond_idx); int parity = mol.cis_trans.getParity(bond_idx); if (mol.have_xyz && (dir == BOND_UP || dir == BOND_DOWN)) { - bond->SetAttribute("Display", (dir == BOND_UP) ? "WedgeBegin" : "WedgedHashBegin"); + bond->SetAttribute("Display", kCDXProp_Bond_DisplayIdToStr.at((dir == BOND_UP) ? kCDXBondDisplay_WedgeBegin : kCDXBondDisplay_WedgedHashBegin).c_str()); } else if (!mol.have_xyz && parity != 0) { @@ -1013,6 +1026,25 @@ void MoleculeCdxmlSaver::addBondToFragment(BaseMolecule& mol, tinyxml2::XMLEleme buf.push(0); bond->SetAttribute("BondCircularOrdering", buf.ptr()); } + else if (dir == BOND_EITHER) + { + bond->SetAttribute("Display", kCDXProp_Bond_DisplayIdToStr.at(kCDXBondDisplay_Wavy).c_str()); + } + + if (mol.reaction_bond_reacting_center[bond_idx] != RC_UNMARKED) + { + auto it = reaction_center_to_bond_rxn_participation.find(mol.reaction_bond_reacting_center[bond_idx]); + if (it != reaction_center_to_bond_rxn_participation.end()) + bond->SetAttribute("RxnParticipation", it->second); + } + + if (mol.isQueryMolecule()) + { + int topology = VALUE_UNKNOWN; + mol.asQueryMolecule().getBond(bond_idx).sureValue(QueryMolecule::BOND_TOPOLOGY, topology); + if (topology > 0) + bond->SetAttribute("Topology", topology_to_cdx_topology.at(topology)); + } } void MoleculeCdxmlSaver::addBondsToFragment(BaseMolecule& mol, tinyxml2::XMLElement* fragment) diff --git a/core/indigo-core/molecule/src/molecule_json_loader.cpp b/core/indigo-core/molecule/src/molecule_json_loader.cpp index 24fe6cbd12..56b01f0f38 100644 --- a/core/indigo-core/molecule/src/molecule_json_loader.cpp +++ b/core/indigo-core/molecule/src/molecule_json_loader.cpp @@ -708,6 +708,7 @@ void MoleculeJsonLoader::parseBonds(const rapidjson::Value& bonds, BaseMolecule& break; case BIOVIA_STEREO_DOUBLE_CISTRANS: mol.cis_trans.ignore(bond_idx); + mol.setBondDirection(bond_idx, BOND_EITHER); break; case BIOVIA_STEREO_ETHER: mol.setBondDirection(bond_idx, BOND_EITHER); @@ -1458,7 +1459,12 @@ void MoleculeJsonLoader::loadMolecule(BaseMolecule& mol, bool load_arrows) for (int i = 0; i < mol.edgeCount(); i++) if (mol.getBondDirection(i) == BOND_EITHER) { - if (MoleculeCisTrans::isGeomStereoBond(mol, i, 0, true)) + if (mol.cis_trans.isIgnored(i)) + { + ignore_cistrans[i] = 1; + sensible_bond_directions[i] = 1; + } + else if (MoleculeCisTrans::isGeomStereoBond(mol, i, 0, true)) { ignore_cistrans[i] = 1; sensible_bond_directions[i] = 1;