Skip to content

Commit

Permalink
#1534 Presence of stand alone H2 molecule on the canvas breaks Add e…
Browse files Browse the repository at this point in the history
…xplicit hydrogens feature (it stops working)

Fix code. Update UTs
  • Loading branch information
AliaksandrDziarkach committed Jan 22, 2024
1 parent 84a1f90 commit b8d2337
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 5 deletions.
2 changes: 1 addition & 1 deletion api/wasm/indigo-ketcher/indigo-ketcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ namespace indigo
IndigoObject atom(_checkResult(indigoNext(iatoms.id)));
// indigoAtomicNumber can return -1 for non-standard atoms
// just skip these atoms
if (indigoAtomicNumber(atom.id) == 1) // hydrogen
if (indigoAtomicNumber(atom.id) == 1 && indigoDegree(atom.id) > 0) // hydrogen
{
fold = true;
break;
Expand Down
21 changes: 21 additions & 0 deletions api/wasm/indigo-ketcher/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,27 @@ M END
assert.equal(unfold_smiles, '{"struct":"C([H])([H])([H])C([H])([H])[H]","format":"smiles","original_format":"chemical/x-daylight-smiles"}');
options.delete();
});

test("convert_explicit_hydrogens", "auto_with_single_h", () => {
let options = new indigo.MapStringString();
options.set("output-content-type", "application/json");
const unfold_smiles = indigo.convert_explicit_hydrogens("CC.[HH]", "auto", "smiles", options);
assert.equal(unfold_smiles, '{"struct":"C([H])([H])([H])C([H])([H])[H].[H][H]","format":"smiles","original_format":"chemical/x-daylight-smiles"}');
const fold_smiles = indigo.convert_explicit_hydrogens("C([H])([H])([H])C([H])([H])[H].[H][H]", "auto", "smiles", options);
assert.equal(fold_smiles, '{"struct":"CC.[HH]","format":"smiles","original_format":"chemical/x-daylight-smiles"}');
options.delete();
});

test("convert_explicit_hydrogens", "auto_single_h", () => {
let options = new indigo.MapStringString();
options.set("output-content-type", "application/json");
const unfold_smiles = indigo.convert_explicit_hydrogens("[HH]", "auto", "smiles", options);
assert.equal(unfold_smiles, '{"struct":"[H][H]","format":"smiles","original_format":"chemical/x-daylight-smiles"}');
const fold_smiles = indigo.convert_explicit_hydrogens("[H][H]", "auto", "smiles", options);
assert.equal(fold_smiles, '{"struct":"[HH]","format":"smiles","original_format":"chemical/x-daylight-smiles"}');
options.delete();
});

}

// Dearomatize
Expand Down
37 changes: 34 additions & 3 deletions utils/indigo-service/backend/service/tests/api/indigo_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2979,7 +2979,7 @@ def test_convert_cdxml(self):

def test_convert_explicit_hydrogens_auto(self):
params = {
"struct": "CC",
"struct": "CC.[HH]",
"mode": "auto",
"output_format": "chemical/x-daylight-smiles",
"input_format": "chemical/x-daylight-smiles",
Expand All @@ -2993,7 +2993,7 @@ def test_convert_explicit_hydrogens_auto(self):
self.assertEqual(200, result.status_code)
result_data = json.loads(result.text)
self.assertEqual(
"C([H])([H])([H])C([H])([H])[H]", result_data["struct"]
"C([H])([H])([H])C([H])([H])[H].[H][H]", result_data["struct"]
)
params = {
"struct": result_data["struct"],
Expand All @@ -3008,7 +3008,7 @@ def test_convert_explicit_hydrogens_auto(self):
)
self.assertEqual(200, result.status_code)
result_data = json.loads(result.text)
self.assertEqual("CC", result_data["struct"])
self.assertEqual("CC.[HH]", result_data["struct"])

def test_convert_explicit_hydrogens_fold(self):
params = {
Expand Down Expand Up @@ -3046,6 +3046,37 @@ def test_convert_explicit_hydrogens_unfold(self):
"C([H])([H])([H])C([H])([H])[H]", result_data["struct"]
)

def test_convert_explicit_hydrogens_auto_h(self):
params = {
"struct": "[HH]",
"mode": "auto",
"output_format": "chemical/x-daylight-smiles",
"input_format": "chemical/x-daylight-smiles",
}
headers, data = self.get_headers(params)
result = requests.post(
self.url_prefix + "/convert_explicit_hydrogens",
headers=headers,
data=data,
)
self.assertEqual(200, result.status_code)
result_data = json.loads(result.text)
self.assertEqual("[H][H]", result_data["struct"])
params = {
"struct": result_data["struct"],
"output_format": "chemical/x-daylight-smiles",
"input_format": "chemical/x-daylight-smiles",
}
headers, data = self.get_headers(params)
result = requests.post(
self.url_prefix + "/convert_explicit_hydrogens",
headers=headers,
data=data,
)
self.assertEqual(200, result.status_code)
result_data = json.loads(result.text)
self.assertEqual("[HH]", result_data["struct"])

def test_convert_sequences(self):
headers, data = self.get_headers(
{
Expand Down
3 changes: 2 additions & 1 deletion utils/indigo-service/backend/service/v2/indigo_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -985,7 +985,8 @@ def convert_explicit_hydrogens():
while iatoms.hasNext():
atom = iatoms.next()
try:
if atom.atomicNumber() == 1: # Hydrogen
if atom.atomicNumber() == 1 and atom.degree() > 0:
# Hydrogen connected to something - fold
fold = True
break
except IndigoException:
Expand Down

0 comments on commit b8d2337

Please sign in to comment.