QM Annotation#

enerzyme annotate drives batch quantum chemistry on structures from a Supplier and writes labeled pickles for training. Entry: enerzyme/annotate.py.

Command#

enerzyme annotate -c annotate.yaml -o labeled/ -t tmp/ -s 0 -e -1
  • -t — scratch directory for QM jobs

  • -s, -e — slice supplier records (0-based start, exclusive end; -1 = all)

Configuration#

Supplier:
    path: fragments.sdf
QMDriver:
    engine: TeraChem
    bs: 6-31gs
    xc: b3lyp
    pcm: cosmo
    dftd: d3
    pcm_radii_file: /path/to/pcm_radii
    epsilon: 10
    keep_molden: false
    keep_output: false
    clean_tmp: true
    pickle_name: fragments.pkl
    dump_single_run: false
    n_processes: 8

Suppliers#

Implemented in enerzyme/data/supplier.py:

  • SDFSupplier — SDF with formal charges (RDKit)

  • PickleSupplier — pre-built datapoint lists

annotate.py currently wires TeraChem only (enerzyme/qm/qm_driver.py). Other engines (ORCA, PySCF, Psi4) may exist as stubs — verify before use.

QMDriver options#

  • n_processes — parallel QM submissions

  • dump_single_run — cache per-structure outputs

  • keep_output / keep_molden — retain QC logs

  • clean_tmp — remove scratch after success

Output schema#

Labeled pickle fields should map to Datahub the same way as raw training data (coordRa, gradFa with negative_gradient, etc.).

Merging into training#

  1. Run annotate on extracted fragments

  2. Merge fragments.pkl into training_set.pkl / validation_set.pkl

  3. Update Datahub.datasets paths in the next train.yaml

Environment#

  • terachem on PATH with valid license

  • PCM radius file when using pcm: cosmo or similar

  • RDKit for SDF parsing