File size: 4,270 Bytes
31ee18f | 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 | from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
from pino.registry import AromaRegistry
# Approximate placeholder records for natural extracts / complex mixtures that lack
# a single PubChem structure. These are used so literature formulas containing them
# can still be simulated (VLE falls back to ideal gamma=1.0).
NATURAL_PLACEHOLDERS = {
"68606-83-7": ("Rosa centifolia absolute", "rose absolute", 250.0),
"68916-26-7": ("Musk extract", "musk", 300.0),
"7462-86-6": ("Jasmin absolute", "jasmin", 240.0),
"8000-25-7": ("Bay oil", "bay", 180.0),
"8000-27-9": ("Lemon oil", "lemon", 180.0),
"8000-28-0": ("Lime oil", "lime", 180.0),
"8000-29-1": ("Neroli oil", "neroli", 200.0),
"8000-41-7": ("Rose oil", "rose", 220.0),
"8000-46-2": ("Rosemary oil", "rosemary", 180.0),
"8002-73-1": ("Resinoid", "resin", 300.0),
"8006-80-2": ("Citronella oil", "citronella", 180.0),
"8006-81-3": ("Ginger oil", "ginger", 200.0),
"8007-00-9": ("Amber oil", "amber", 250.0),
"8007-46-3": ("Cinnamon oil", "cinnamon", 180.0),
"8007-80-5": ("Musk seed oil", "musk seed", 250.0),
"8008-31-9": ("Pine oil", "pine", 170.0),
"8008-56-8": ("Palmarosa oil", "palmarosa", 190.0),
"8008-57-9": ("Patchouli oil", "patchouli", 220.0),
"8013-76-1": ("Cananga oil", "cananga", 190.0),
"8014-17-3": ("Petitgrain oil", "petitgrain", 180.0),
"8016-38-4": ("Basil oil", "basil", 180.0),
"8016-63-5": ("Lavender oil", "lavender", 180.0),
"8016-78-2": ("Pine needle oil", "pine needle", 170.0),
"8016-96-4": ("Geranium oil", "geranium", 190.0),
"8023-75-2": ("Ylang ylang oil", "ylang", 190.0),
"8023-79-2": ("Musk tonkin", "musk tonkin", 300.0),
"8023-91-4": ("Jasmin sambac", "jasmin sambac", 240.0),
"8024-13-1": ("Styrax resinoid", "styrax", 280.0),
"8031-03-6": ("Cardamom oil", "cardamom", 190.0),
"8032-35-1": ("Pumilio pine oil", "pumilio pine", 170.0),
"8046-19-3": ("Labdanum resinoid", "labdanum", 280.0),
"8047-24-3": ("Benzoin resinoid", "benzoin", 280.0),
"85409-36-9": ("Olibanum oil", "olibanum", 250.0),
"85940-31-4": ("Elemi oil", "elemi", 220.0),
"89997-75-1": ("Narcissus absolute", "narcissus", 250.0),
"9000-50-4": ("Frankincense oil", "frankincense", 250.0),
"9000-64-0": ("Mimosa absolute", "mimosa", 250.0),
"9000-64-2": ("Orange flower absolute", "orange flower", 240.0),
"8015-61-0": ("Cassie absolute", "cassie", 250.0),
"8015-77-8": ("Rosewood oil", "rosewood", 190.0),
"8016-26-0": ("Labdanum clair", "labdanum clair", 280.0),
"8022-96-6": ("Jasmin absolute", "jasmin absolute", 240.0),
"8000-34-8": ("Clove oil", "clove", 180.0),
"8006-87-9": ("Sandalwood oil", "sandalwood", 220.0),
"8007-01-0": ("Rose otto", "rose otto", 220.0),
"8007-06-5": ("Cascarilla oil", "cascarilla", 180.0),
"8007-75-8": ("Bergamot oil", "bergamot", 180.0),
"8008-45-5": ("Nutmeg oil", "nutmeg", 180.0),
"8013-90-9": ("Ionone", "ionone", 190.0),
"8014-09-3": ("Patchouli oil", "patchouli", 220.0),
}
def main() -> int:
parser = argparse.ArgumentParser(description="Add natural-extract placeholders to registry")
parser.add_argument("--registry", default="src/pino/registry.db", help="Path to registry.db")
args = parser.parse_args()
registry = AromaRegistry(args.registry)
added = 0
for cas, (name, _, mw) in NATURAL_PLACEHOLDERS.items():
try:
registry.add({
"cas": cas,
"name": name,
"smiles": f"NATURAL:{cas}",
"molecular_weight": mw,
"logp": 3.0,
"unifac_groups": {},
"vapor_pressure_pa": 0.01,
"boiling_point_k": 450.0,
"odor_threshold_ug_m3": None,
"odor_description": "",
})
added += 1
print(f"Added {cas} ({name})")
except Exception as e:
print(f"Skipped {cas}: {e}")
registry.close()
print(f"Added {added} natural placeholders")
return 0
if __name__ == "__main__":
raise SystemExit(main())
|