tonigi commited on
Commit
58795a2
·
1 Parent(s): b9da99b
Files changed (2) hide show
  1. app.py +2 -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, load_yaml_smarts
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 = load_yaml_smarts()
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
- import yaml
2
  from rdkit import Chem
3
 
4
 
@@ -21,31 +21,25 @@ def load_interligand_moieties():
21
  return moieties
22
 
23
 
24
- def load_yaml_smarts():
25
  """
26
- Load and compile SMARTS from the YAML file.
27
  """
 
 
28
  try:
29
- with open("data/daylight_smarts.yml", "r") as f:
30
- data = yaml.safe_load(f)
 
 
 
 
 
 
 
 
 
 
31
  except Exception as e:
32
- print("Error loading daylight_smarts.yml:", e)
33
- return {}
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