Skip to content

Commit 7052a02

Browse files
authored
Merge pull request #239 from hwpang/fix_fragment
Fix fragment smiles parser and refactor fragment adjlist parser
2 parents 49f8d1a + 8a39550 commit 7052a02

File tree

3 files changed

+567
-7
lines changed

3 files changed

+567
-7
lines changed

src/Parse.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,24 +161,28 @@ function getatomdictfromrmg(mol)
161161
molecularweight = mol.get_molecular_weight()
162162
return atmD,nbonds,molecularweight
163163
end
164-
getatomdictsmiles(smiles) = getatomdictfromrdkit(Chem.AddHs(Chem.MolFromSmiles(smiles)))
164+
function getatomdictsmiles(smiles)
165+
if occursin(r"R", smiles) || occursin(r"L", smiles)
166+
mol = fragment.Fragment().from_smiles_like_string(smiles)
167+
mol.assign_representative_molecule()
168+
getatomdictfromrmg(mol.mol_repr)
169+
else
170+
getatomdictfromrdkit(Chem.AddHs(Chem.MolFromSmiles(smiles)))
171+
end
172+
end
173+
165174
export getatomdictsmiles
166175
getatomdictinchi(inchi) = getatomdictfromrdkit(Chem.AddHs(Chem.MolFromInchi(inchi)))
167176
export getatomdictinchi
168177
function getatomdictadjlist(adjlist)
169178
_ , cutting_label_list = fragment.Fragment().detect_cutting_label(adjlist)
170179
if isempty(cutting_label_list)
171180
mol = molecule.Molecule().from_adjacency_list(adjlist)
181+
getatomdictfromrmg(mol)
172182
else
173183
mol = fragment.Fragment().from_adjacency_list(adjlist)
174-
end
175-
if pybuiltin(:isinstance)(mol, molecule.Molecule)
176-
getatomdictfromrmg(mol)
177-
elseif pybuiltin(:isinstance)(mol, fragment.Fragment)
178184
mol.assign_representative_molecule()
179185
getatomdictfromrmg(mol.mol_repr)
180-
else
181-
@error("Unrecognizable molecule type $mol")
182186
end
183187
end
184188
export getatomdictadjlist

src/TestParse.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,13 @@ s = r.products[1]
99
@test getEnthalpy(s.thermo,1000.0) 20677.0 rtol=1e-4
1010
@test getEnthalpy(out["phase"]["Species"][5].thermo,1000.0) 20677.2 rtol=1e-4
1111
end;
12+
13+
@testset "Read fragment input from file" begin
14+
out = readinput("../src/testing/minimal_rmg_fragment.rms")
15+
fragment = out["phase"]["Species"][5]
16+
17+
# check that fragment structure is parsed correctly and the representative molecule is assigned
18+
@test fragment.atomnums["C"] == 18
19+
@test fragment.molecularweight 0.25046 rtol=1e-4
20+
@test fragment.radius 4.66375e-10 rtol=1e-4
21+
end;

0 commit comments

Comments
 (0)