Skip to content

Commit 1738e4b

Browse files
authored
#1217 Support SDF-format for Indigo-Ketcher API (#1223)
1 parent 910d14f commit 1738e4b

File tree

22 files changed

+265716
-31
lines changed

22 files changed

+265716
-31
lines changed

api/c/indigo/src/indigo_molecule.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ int IndigoMoleculeComponent::getIndex()
642642

643643
IndigoObject* IndigoMoleculeComponent::clone()
644644
{
645-
std::unique_ptr<IndigoObject> res;
645+
std::unique_ptr<IndigoBaseMolecule> res;
646646
BaseMolecule* newmol;
647647

648648
if (mol.isQueryMolecule())
@@ -658,6 +658,12 @@ IndigoObject* IndigoMoleculeComponent::clone()
658658

659659
Filter filter(mol.getDecomposition().ptr(), Filter::EQ, index);
660660
newmol->makeSubmolecule(mol, filter, 0, 0);
661+
for (auto it = newmol->properties().begin(); it != newmol->properties().end(); ++it)
662+
{
663+
auto& props = newmol->properties().value(it);
664+
res->getProperties().merge(props);
665+
}
666+
661667
return res.release();
662668
}
663669

api/c/tests/unit/tests/formats.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,8 @@ TEST_F(IndigoApiFormatsTest, fromGzFile)
264264
try
265265
{
266266
int obj = indigoLoadStructureFromFile(dataPath("molecules/basic/Compound_0000001_0000250.sdf.gz").c_str(), "query");
267-
EXPECT_EQ(31, indigoCountAtoms(obj));
268-
EXPECT_EQ(30, indigoCountBonds(obj));
267+
EXPECT_EQ(8454, indigoCountAtoms(obj));
268+
EXPECT_EQ(8478, indigoCountBonds(obj));
269269
}
270270
catch (Exception& e)
271271
{

api/tests/integration/ref/basic/load_structure.py.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ Atoms: 0
5151
Bonds: 0
5252

5353
(** #14 **): Load from compessed binary (../../../../../data/molecules/basic/benzodiazepine.sdf.gz)
54-
Atoms: 33
55-
Bonds: 35
54+
Atoms: 668941
55+
Bonds: 707945
5656

5757
---- TestLoadFromFile ----
5858

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*** KET to SDF ***
2+
acd2d_err3.sdf:SUCCEED
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*** SDF to KET ***
2+
acd2d_err.ket:SUCCEED
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import difflib
2+
import os
3+
import sys
4+
5+
6+
def find_diff(a, b):
7+
return "\n".join(difflib.unified_diff(a.splitlines(), b.splitlines()))
8+
9+
10+
sys.path.append(
11+
os.path.normpath(
12+
os.path.join(os.path.abspath(__file__), "..", "..", "..", "common")
13+
)
14+
)
15+
from env_indigo import * # noqa
16+
17+
indigo = Indigo()
18+
indigo.setOption("json-saving-pretty", True)
19+
indigo.setOption("molfile-saving-skip-date", True)
20+
indigo.setOption("ignore-stereochemistry-errors", True)
21+
22+
print("*** KET to SDF ***")
23+
24+
root = joinPathPy("molecules/", __file__)
25+
ref_path = joinPathPy("ref/", __file__)
26+
27+
files = ["acd2d_err3"]
28+
29+
files.sort()
30+
for filename in files:
31+
try:
32+
ket = indigo.loadMoleculeFromFile(
33+
os.path.join(root, filename + ".ket")
34+
)
35+
except:
36+
try:
37+
ket = indigo.loadQueryMoleculeFromFile(
38+
os.path.join(root, filename + ".ket")
39+
)
40+
except IndigoException as e:
41+
print(" %s" % (getIndigoExceptionText(e)))
42+
43+
buffer = indigo.writeBuffer()
44+
sdfSaver = indigo.createSaver(buffer, "sdf")
45+
for frag in ket.iterateComponents():
46+
sdfSaver.append(frag.clone())
47+
sdfSaver.close()
48+
sdf = buffer.toString()
49+
# with open(os.path.join(ref_path, filename) + ".sdf", "w") as file:
50+
# file.write(sdf)
51+
52+
with open(os.path.join(ref_path, filename) + ".sdf", "r") as file:
53+
sdf_ref = file.read()
54+
diff = find_diff(sdf_ref, sdf)
55+
if not diff:
56+
print(filename + ".sdf:SUCCEED")
57+
else:
58+
print(filename + ".sdf:FAILED")
59+
print(diff)

0 commit comments

Comments
 (0)