From a15417cfedab417bfc6bcab5d6f36dfb7c16f43d Mon Sep 17 00:00:00 2001 From: even1024 Date: Mon, 26 Dec 2022 14:36:47 +0300 Subject: [PATCH] Backmerge: Bugfix/950 cdx aromatized structures (#954) * rgroups (#946) Co-authored-by: Roman Porozhnetov * CDX import: Reaction arrows disappear when opening a file https://github.com/epam/Indigo/issues/943 (#948) * marvin cdx fix * clang fix Co-authored-by: Roman Porozhnetov * CDX import: Aromatized structures are not recognized when Pasting from Clipboard #950 (#953) * bond order fix * clang fix * test fix Co-authored-by: Roman Porozhnetov Co-authored-by: Roman Porozhnetov --- .../integration/ref/formats/cdx_to_ket.py.out | 2 + .../tests/formats/molecules/cdx/arom64.cdx | 81 +++++++++++++++++++ core/indigo-core/molecule/CDXCommons.h | 40 +++++++++ .../molecule/molecule_cdxml_loader.h | 3 + 4 files changed, 126 insertions(+) create mode 100644 api/tests/integration/tests/formats/molecules/cdx/arom64.cdx diff --git a/api/tests/integration/ref/formats/cdx_to_ket.py.out b/api/tests/integration/ref/formats/cdx_to_ket.py.out index 53b0d3ff43..b5e5bce009 100644 --- a/api/tests/integration/ref/formats/cdx_to_ket.py.out +++ b/api/tests/integration/ref/formats/cdx_to_ket.py.out @@ -1,4 +1,6 @@ *** CDXML to mol *** +arom64.cdx +{"root":{"nodes":[{"$ref":"mol0"}]},"mol0":{"type":"molecule","atoms":[{"label":"Br","location":[0.27766722440719607,-3.042332887649536,0.0]},{"label":"C","location":[0.6933329105377197,-2.8023335933685304,0.0]},{"label":"C","location":[0.6933329105377197,-2.322333812713623,0.0]},{"label":"C","location":[1.1090006828308106,-2.0823333263397219,0.0]},{"label":"C","location":[1.5246663093566895,-2.322333812713623,0.0]},{"label":"C","location":[1.9403340816497803,-2.0823333263397219,0.0]},{"label":"O","location":[2.355999708175659,-2.322333812713623,0.0]},{"label":"C","location":[2.77166748046875,-2.0823333263397219,0.0]},{"label":"C","location":[3.187666893005371,-2.322333812713623,0.0]},{"label":"N","location":[3.603334665298462,-2.0823333263397219,0.0]},{"label":"C","location":[3.653334617614746,-1.6049997806549073,0.0]},{"label":"C","location":[4.123000144958496,-1.5049997568130494,0.0]},{"label":"N","location":[4.363000392913818,-1.9206664562225342,0.0]},{"label":"C","location":[4.041666507720947,-2.2776663303375246,0.0]},{"label":"C","location":[2.77166748046875,-1.6023335456848145,0.0]},{"label":"C","location":[3.187666893005371,-1.3623331785202027,0.0]},{"label":"C","location":[3.187666893005371,-0.8823333978652954,0.0]},{"label":"C","location":[2.77166748046875,-0.6423329710960388,0.0]},{"label":"Cl","location":[2.77166748046875,-0.1623331755399704,0.0]},{"label":"C","location":[2.355999708175659,-0.8823333978652954,0.0]},{"label":"C","location":[2.355999708175659,-1.3623331785202027,0.0]},{"label":"Cl","location":[1.9403340816497803,-1.6023335456848145,0.0]},{"label":"C","location":[1.5246663093566895,-2.8023335933685304,0.0]},{"label":"Cl","location":[1.9403340816497803,-3.042332887649536,0.0]},{"label":"C","location":[1.1090006828308106,-3.042332887649536,0.0]}],"bonds":[{"type":1,"atoms":[0,1]},{"type":4,"atoms":[1,2]},{"type":4,"atoms":[2,3]},{"type":4,"atoms":[3,4]},{"type":1,"atoms":[4,5]},{"type":1,"atoms":[5,6]},{"type":1,"atoms":[6,7]},{"type":1,"atoms":[7,8]},{"type":1,"atoms":[8,9]},{"type":4,"atoms":[9,10]},{"type":4,"atoms":[10,11]},{"type":4,"atoms":[11,12]},{"type":4,"atoms":[12,13]},{"type":4,"atoms":[9,13]},{"type":1,"atoms":[7,14]},{"type":4,"atoms":[14,15]},{"type":4,"atoms":[15,16]},{"type":4,"atoms":[16,17]},{"type":1,"atoms":[17,18]},{"type":4,"atoms":[17,19]},{"type":4,"atoms":[19,20]},{"type":4,"atoms":[14,20]},{"type":1,"atoms":[20,21]},{"type":4,"atoms":[4,22]},{"type":1,"atoms":[22,23]},{"type":4,"atoms":[22,24]},{"type":4,"atoms":[1,24]}]}} marvin.cdx CDXML loader: Not a molecule. Found 1 arrows. *** Try as Reaction *** diff --git a/api/tests/integration/tests/formats/molecules/cdx/arom64.cdx b/api/tests/integration/tests/formats/molecules/cdx/arom64.cdx new file mode 100644 index 0000000000..cfd23a448c --- /dev/null +++ b/api/tests/integration/tests/formats/molecules/cdx/arom64.cdx @@ -0,0 +1,81 @@ +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 +AAAAAAA= \ No newline at end of file diff --git a/core/indigo-core/molecule/CDXCommons.h b/core/indigo-core/molecule/CDXCommons.h index 1d3e7b0145..3bedc78876 100644 --- a/core/indigo-core/molecule/CDXCommons.h +++ b/core/indigo-core/molecule/CDXCommons.h @@ -77,6 +77,46 @@ enum class ECDXType CDXFontStyle }; +const std::unordered_map kBondOrderIntToStr = {{kCDXBondOrder_Single, "1"}, + {kCDXBondOrder_Double, "2"}, + {kCDXBondOrder_Triple, "3"}, + {kCDXBondOrder_Quadruple, "4"}, + {kCDXBondOrder_Quintuple, "5"}, + {kCDXBondOrder_Sextuple, "6"}, + {kCDXBondOrder_Half, "0.5"}, + {kCDXBondOrder_OneHalf, "1.5"}, + {kCDXBondOrder_TwoHalf, "2.5"}, + {kCDXBondOrder_ThreeHalf, "3.5"}, + {kCDXBondOrder_FourHalf, "4.5"}, + {kCDXBondOrder_FiveHalf, "5.5"}, + {kCDXBondOrder_Dative, "dative"}, + {kCDXBondOrder_Ionic, "ionic"}, + {kCDXBondOrder_Hydrogen, "hydrogen"}, + {kCDXBondOrder_ThreeCenter, "threecenter"}, + {kCDXBondOrder_SingleOrDouble, "singleordouble"}, + {kCDXBondOrder_SingleOrAromatic, "singleoraromatic"}, + {kCDXBondOrder_DoubleOrAromatic, "doubleoraromatic"}}; + +const std::unordered_map kBondOrderStrToId = {{"1", kCDXBondOrder_Single}, + {"2", kCDXBondOrder_Double}, + {"3", kCDXBondOrder_Triple}, + {"4", kCDXBondOrder_Quadruple}, + {"5", kCDXBondOrder_Quintuple}, + {"6", kCDXBondOrder_Sextuple}, + {"0.5", kCDXBondOrder_Half}, + {"1.5", kCDXBondOrder_OneHalf}, + {"2.5", kCDXBondOrder_TwoHalf}, + {"3.5", kCDXBondOrder_ThreeHalf}, + {"4.5", kCDXBondOrder_FourHalf}, + {"5.5", kCDXBondOrder_FiveHalf}, + {"dative", kCDXBondOrder_Dative}, + {"ionic", kCDXBondOrder_Ionic}, + {"hydrogen", kCDXBondOrder_Hydrogen}, + {"threecenter", kCDXBondOrder_ThreeCenter}, + {"singleordouble", kCDXBondOrder_SingleOrDouble}, + {"singleoraromatic", kCDXBondOrder_SingleOrAromatic}, + {"doubleoraromatic", kCDXBondOrder_DoubleOrAromatic}}; + const std::unordered_map kCDXProp_Arrow_TypeStrToID = {{"NoHead", kCDXArrowType_NoHead}, {"HalfHead", kCDXArrowType_HalfHead}, {"FullHead", kCDXArrowType_FullHead}, diff --git a/core/indigo-core/molecule/molecule_cdxml_loader.h b/core/indigo-core/molecule/molecule_cdxml_loader.h index 794e3376c9..48779c6821 100644 --- a/core/indigo-core/molecule/molecule_cdxml_loader.h +++ b/core/indigo-core/molecule/molecule_cdxml_loader.h @@ -440,6 +440,9 @@ namespace indigo { switch (tag) { + case kCDXProp_Bond_Order: { + return kBondOrderIntToStr.at(val); + } case kCDXProp_Node_Type: { return KNodeTypeIntToName.at(val); }