-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpubchem_id_cas_conversion_demo.py
More file actions
134 lines (114 loc) · 3.41 KB
/
Copy pathpubchem_id_cas_conversion_demo.py
File metadata and controls
134 lines (114 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
"""
Demo script for PubChemID CAS conversion methods.
This script demonstrates the new conversion methods added to PubChemID:
- smiles_to_cas()
- name_to_cas()
- formula_to_cas()
- batch_smiles_to_cas()
- batch_name_to_cas()
- batch_formula_to_cas()
"""
from provesid import PubChemID
print("=" * 80)
print("PubChemID CAS Conversion Methods Demo")
print("=" * 80)
print()
# Initialize PubChemID database
print("Initializing PubChemID database...")
db = PubChemID()
print(f"✓ Database loaded: {db.db_path}")
print()
# Get database stats
stats = db.get_stats()
print(f"Database contains {stats['total_compounds']:,} compounds")
print(f"Total CAS numbers: {stats['total_cas_numbers']:,}")
print()
print("=" * 80)
print("1. SMILES to CAS Conversion")
print("=" * 80)
print()
# Test SMILES to CAS
smiles_examples = {
"C": "Methane",
"CO": "Methanol",
"CCO": "Ethanol",
"CC(=O)OC1=CC=CC=C1C(=O)O": "Aspirin"
}
for smiles, name in smiles_examples.items():
cas_list = db.smiles_to_cas(smiles)
if cas_list:
print(f"{name:15s} ({smiles:30s})")
print(f" → CAS: {', '.join(cas_list[:3])}")
if len(cas_list) > 3:
print(f" ... and {len(cas_list) - 3} more")
else:
print(f"{name:15s} ({smiles:30s}) → Not found")
print()
print("=" * 80)
print("2. Chemical Name to CAS Conversion")
print("=" * 80)
print()
# Test name to CAS
names = ["aspirin", "caffeine", "glucose", "ethanol"]
for name in names:
cas_list = db.name_to_cas(name, exact=False)
if cas_list:
print(f"{name.capitalize():15s} → CAS: {', '.join(cas_list[:3])}")
if len(cas_list) > 3:
print(f"{'':15s} ... and {len(cas_list) - 3} more")
else:
print(f"{name.capitalize():15s} → Not found")
print()
print("=" * 80)
print("3. Molecular Formula to CAS Conversion")
print("=" * 80)
print()
# Test formula to CAS
formulas = ["H2O", "C9H8O4", "CH4O", "C2H6O"]
for formula in formulas:
cas_list = db.formula_to_cas(formula, limit=50)
if cas_list:
print(f"{formula:10s} → Found {len(cas_list)} compounds")
print(f"{'':10s} First 3 CAS: {', '.join(cas_list[:3])}")
if len(cas_list) > 3:
print(f"{'':10s} ... and {len(cas_list) - 3} more")
else:
print(f"{formula:10s} → Not found")
print()
print("=" * 80)
print("4. Batch Conversions")
print("=" * 80)
print()
# Batch SMILES to CAS
print("Batch SMILES to CAS:")
smiles_batch = ["C", "CO", "CCO"]
results = db.batch_smiles_to_cas(smiles_batch)
for smiles, cas_list in results.items():
if cas_list:
print(f" {smiles:6s} → {len(cas_list)} CAS number(s)")
else:
print(f" {smiles:6s} → Not found")
print()
# Batch name to CAS
print("Batch Name to CAS:")
names_batch = ["aspirin", "caffeine", "glucose"]
results = db.batch_name_to_cas(names_batch, exact=False)
for name, cas_list in results.items():
if cas_list:
print(f" {name:10s} → {len(cas_list)} CAS number(s)")
else:
print(f" {name:10s} → Not found")
print()
# Batch formula to CAS
print("Batch Formula to CAS:")
formulas_batch = ["H2O", "CH4", "C9H8O4"]
results = db.batch_formula_to_cas(formulas_batch, limit=50)
for formula, cas_list in results.items():
if cas_list:
print(f" {formula:10s} → {len(cas_list)} CAS number(s)")
else:
print(f" {formula:10s} → Not found")
print()
print("=" * 80)
print("Demo completed!")
print("=" * 80)