fixup
Browse files- app.py +2 -2
- file_helpers.py +19 -25
app.py
CHANGED
|
@@ -6,7 +6,7 @@ from rotatable_bonds import process_rotatable
|
|
| 6 |
from dimorphite_dl import dimorphite_dl
|
| 7 |
import traceback
|
| 8 |
|
| 9 |
-
from file_helpers import load_interligand_moieties,
|
| 10 |
from utils import mol_to_svg, highlight_by_patterns, IMAGE_SIZE
|
| 11 |
|
| 12 |
# Remove mol_to_svg function as it's now in utils.py
|
|
@@ -67,7 +67,7 @@ def interligand_moieties(smiles: str):
|
|
| 67 |
|
| 68 |
|
| 69 |
def daylight_smarts_examples(smiles: str):
|
| 70 |
-
patterns =
|
| 71 |
return process_by_patterns(
|
| 72 |
smiles, patterns, "No SMARTS examples recognized or invalid SMILES."
|
| 73 |
)
|
|
|
|
| 6 |
from dimorphite_dl import dimorphite_dl
|
| 7 |
import traceback
|
| 8 |
|
| 9 |
+
from file_helpers import load_interligand_moieties, load_smarts_patterns_from_csv
|
| 10 |
from utils import mol_to_svg, highlight_by_patterns, IMAGE_SIZE
|
| 11 |
|
| 12 |
# Remove mol_to_svg function as it's now in utils.py
|
|
|
|
| 67 |
|
| 68 |
|
| 69 |
def daylight_smarts_examples(smiles: str):
|
| 70 |
+
patterns = load_smarts_patterns_from_csv()
|
| 71 |
return process_by_patterns(
|
| 72 |
smiles, patterns, "No SMARTS examples recognized or invalid SMILES."
|
| 73 |
)
|
file_helpers.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
|
| 2 |
from rdkit import Chem
|
| 3 |
|
| 4 |
|
|
@@ -21,31 +21,25 @@ def load_interligand_moieties():
|
|
| 21 |
return moieties
|
| 22 |
|
| 23 |
|
| 24 |
-
def
|
| 25 |
"""
|
| 26 |
-
Load and compile SMARTS from the
|
| 27 |
"""
|
|
|
|
|
|
|
| 28 |
try:
|
| 29 |
-
with open("data/
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
except Exception as e:
|
| 32 |
-
print("Error loading
|
| 33 |
-
|
| 34 |
-
compiled_yaml = {}
|
| 35 |
-
for group in data.get("groups", []):
|
| 36 |
-
group_name = group.get("name", "Unnamed Group")
|
| 37 |
-
for subgroup in group.get("subgroups", []):
|
| 38 |
-
subgroup_name = subgroup.get("name", "Unnamed Subgroup")
|
| 39 |
-
if "subsubgroups" in subgroup:
|
| 40 |
-
for subsub in subgroup.get("subsubgroups", []):
|
| 41 |
-
subsub_name = subsub.get("name", "Unnamed Subsubgroup")
|
| 42 |
-
for rule in subsub.get("rules", []):
|
| 43 |
-
if "smarts" in rule:
|
| 44 |
-
key = f"{group_name} > {subgroup_name} > {subsub_name} > {rule.get('name', 'Unnamed Rule')}"
|
| 45 |
-
compiled_yaml[key] = Chem.MolFromSmarts(rule.get("smarts"))
|
| 46 |
-
elif "rules" in subgroup:
|
| 47 |
-
for rule in subgroup.get("rules", []):
|
| 48 |
-
if "smarts" in rule:
|
| 49 |
-
key = f"{group_name}: {subgroup_name} - {rule.get('name', 'Unnamed Rule')}"
|
| 50 |
-
compiled_yaml[key] = Chem.MolFromSmarts(rule.get("smarts"))
|
| 51 |
-
return compiled_yaml
|
|
|
|
| 1 |
+
# Description: Helper functions for loading files and data.
|
| 2 |
from rdkit import Chem
|
| 3 |
|
| 4 |
|
|
|
|
| 21 |
return moieties
|
| 22 |
|
| 23 |
|
| 24 |
+
def load_smarts_patterns_from_csv():
|
| 25 |
"""
|
| 26 |
+
Load and compile SMARTS from the CSV file.
|
| 27 |
"""
|
| 28 |
+
import csv
|
| 29 |
+
compiled_patterns = {}
|
| 30 |
try:
|
| 31 |
+
with open("data/smarts_examples_parsed.csv", "r") as f:
|
| 32 |
+
reader = csv.DictReader(f)
|
| 33 |
+
for row in reader:
|
| 34 |
+
if row['Pattern']: # Skip empty patterns
|
| 35 |
+
name = f"{row['Main Topic']} > {row['Subtopic']} > {row['Sub-sub-topic']} > {row['Rule Name']}"
|
| 36 |
+
pattern = row['Pattern'].strip()
|
| 37 |
+
try:
|
| 38 |
+
mol = Chem.MolFromSmarts(pattern)
|
| 39 |
+
if mol: # Only add if pattern compiles successfully
|
| 40 |
+
compiled_patterns[name] = mol
|
| 41 |
+
except:
|
| 42 |
+
print(f"Failed to compile SMARTS pattern: {pattern}")
|
| 43 |
except Exception as e:
|
| 44 |
+
print("Error loading smarts_examples_parsed.csv:", e)
|
| 45 |
+
return compiled_patterns
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|