Benzoyl Peroxide O-O Bond Scan with UMA

Requires: AMS2026 or later

Related documentation
../_images/pes_scan_6338422e.png

Relative energies along the peroxide O-O bond scan.

This report summarizes three AMS PES scans for benzoyl peroxide using the MLPotential engine with model UMA-S-1.2-OMol. The peroxide O-O bond was identified by looping over oxygen atoms and inspecting ChemicalSystem.bonds for an oxygen neighbor.

Provenance

  • spinpol_0 loaded from 01-benzoyl-peroxide-oo-scan_workdir/spinpol_0/ams.rkf. Closed-shell reference PES scan for the peroxide O-O cleavage.

  • spinpol_1 loaded from 01-benzoyl-peroxide-oo-scan_workdir/spinpol_1/ams.rkf. Open-shell PES scan with one excess alpha electron.

  • spinpol_2 loaded from 01-benzoyl-peroxide-oo-scan_workdir/spinpol_2/ams.rkf. Open-shell PES scan with two excess alpha electrons.

Energy Plot

Energy vs O-O distance

Summary Table

spinpolarization

min_distance_angstrom

max_distance_angstrom

minimum_energy_hartree

minimum_relative_energy_kcal_per_mol

0.000000

1.362770

3.000000

-840.394601

0.000000

1.000000

1.362770

3.000000

-840.370230

15.292577

2.000000

1.362770

3.000000

-840.339771

34.406324

Lowest-Energy Structures

The lowest-energy bonded state in the full scan set occurs at spinpolarization = 0 and d(O-O) = 1.465 angstrom. Here, ‘bonded’ means d(O-O) <= 2.0 angstrom.

Lowest-energy bonded state

The lowest-energy dissociated state was defined as the lowest-energy structure at the largest scanned O-O distance (d(O-O) = 3.000 angstrom). It occurs for spinpolarization = 2.

Lowest-energy dissociated state

Calculation Inputs

spinpol_0

PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 0
  Unrestricted yes
EndEngine

spinpol_1

PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 1
  Unrestricted yes
EndEngine

spinpol_2

PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 2
  Unrestricted yes
EndEngine

Conclusion

Among the three scans, the global minimum is found for spinpolarization = 0. At the dissociation limit sampled here (~3.0 angstrom), the lowest-energy state is obtained for spinpolarization = 2.

Prompts and Python scripts

Prompt (instruction for AI agent)
Use $ams2026

Do O-O bond scans for benzoyl peroxide smiles: c1ccc(cc1)C(=O)OOC(=O)c2ccccc2

Find out which bond is the O-O bond by looping over the atoms and inspecting
the ChemicalSystem bonds

Set up a AMS PES Scan with MLPotential Model UMA-S-1.2-Omol. Run three
equivalent jobs with three different values for spinpolarization: 0, 1,
and 2. Run the bond scan until dissociation (distance 3 angstrom, with
approximately 0.1 angstrom steps)

Plot the energy vs bond length in all three cases (get_pesscan_results)

Include the graph in the report.

Include pictures of structures for the lowest-energy bonded state and
the lowest-energy dissociated state (and indicate the corresponding spin
polarization).
01-benzoyl-peroxide-oo-scan.py
#!/usr/bin/env amspython
from __future__ import annotations

from pathlib import Path

from scm.base import ChemicalSystem
from scm.plams import AMSJob, Settings, finish, init


SMILES = "c1ccc(cc1)C(=O)OOC(=O)c2ccccc2"
MODEL = "UMA-S-1.2-OMol"
TARGET_DISTANCE_ANGSTROM = 3.0
STEP_ANGSTROM = 0.1
WORKDIR = "01-benzoyl-peroxide-oo-scan_workdir"


def build_system() -> ChemicalSystem:
    system = ChemicalSystem.from_smiles(SMILES)
    system.guess_bonds()
    return system


def find_oo_bond(system: ChemicalSystem) -> tuple[int, int]:
    for atom_index, atom in enumerate(system.atoms):
        if atom.symbol != "O":
            continue
        for i, j, _bond in system.bonds.get_bonds_for_atom(atom_index):
            other_index = j if i == atom_index else i
            if system.atoms[other_index].symbol == "O":
                return tuple(sorted((atom_index, other_index)))
    raise RuntimeError("Could not locate an O-O bond in the ChemicalSystem")


def bond_distance_angstrom(system: ChemicalSystem, i: int, j: int) -> float:
    return float(system.get_distance(i, j))


def build_settings(
    atom_i: int,
    atom_j: int,
    start_distance: float,
    spinpolarization: int,
) -> Settings:
    settings = Settings()
    settings.runscript.nproc = 1
    settings.runscript.preamble_lines = ["export OMP_NUM_THREADS=1"]
    settings.input.ams.task = "PESScan"
    settings.input.ams.pesscan.scancoordinate = [Settings()]
    settings.input.ams.pesscan.scancoordinate[0].distance = [
        f"{atom_i + 1} {atom_j + 1} {start_distance:.6f} {TARGET_DISTANCE_ANGSTROM:.6f}"
    ]
    npoints = int(round((TARGET_DISTANCE_ANGSTROM - start_distance) / STEP_ANGSTROM)) + 1
    settings.input.ams.pesscan.scancoordinate[0].npoints = max(npoints, 2)
    settings.input.ams.pesscan.calcpropertiesatpespoints = "Yes"
    settings.input.mlpotential.model = MODEL
    settings.input.mlpotential.unrestricted = "Yes"
    settings.input.mlpotential.unpairedelectrons = spinpolarization
    return settings


def run_scan(
    base_system: ChemicalSystem,
    atom_i: int,
    atom_j: int,
    spinpolarization: int,
) -> AMSJob:
    system = base_system.copy()
    start_distance = bond_distance_angstrom(system, atom_i, atom_j)
    settings = build_settings(atom_i, atom_j, start_distance, spinpolarization)
    job = AMSJob(
        molecule=system,
        settings=settings,
        name=f"spinpol_{spinpolarization}",
    )
    result = job.run()
    if not result.ok():
        raise RuntimeError(f"Job {job.name} failed")
    return job


def main() -> None:
    init(folder=WORKDIR)
    try:
        system = build_system()
        atom_i, atom_j = find_oo_bond(system)
        start_distance = bond_distance_angstrom(system, atom_i, atom_j)
        print(f"O-O bond found between atoms {atom_i} and {atom_j} (0-based indexing)")
        print(f"O-O bond found between atoms {atom_i + 1} and {atom_j + 1} (AMS 1-based indexing)")
        print(f"Starting O-O distance: {start_distance:.3f} angstrom")

        for spinpolarization in (0, 1, 2):
            job = run_scan(system, atom_i, atom_j, spinpolarization)
            print(f"Finished {job.name}: {Path(job.path) / 'ams.rkf'}")
    finally:
        finish()


if __name__ == "__main__":
    main()
report.py
#!/usr/bin/env amspython
from __future__ import annotations

from pathlib import Path
from typing import Any

import matplotlib.pyplot as plt
import pandas as pd
from scm.base import Units
from scm.plams import AMSJob, view


WORKDIR = Path("01-benzoyl-peroxide-oo-scan_workdir")
REPORT_PATH = Path("report.md")
PLOT_PATH = Path("pes_scan.png")
BONDED_IMAGE_PATH = Path("bonded_state.png")
DISSOCIATED_IMAGE_PATH = Path("dissociated_state.png")
BOND_CUTOFF_ANGSTROM = 2.0


JOB_METADATA = {
    0: {
        "path": WORKDIR / "spinpol_0" / "ams.rkf",
        "why": "Closed-shell reference PES scan for the peroxide O-O cleavage.",
    },
    1: {
        "path": WORKDIR / "spinpol_1" / "ams.rkf",
        "why": "Open-shell PES scan with one excess alpha electron.",
    },
    2: {
        "path": WORKDIR / "spinpol_2" / "ams.rkf",
        "why": "Open-shell PES scan with two excess alpha electrons.",
    },
}


def load_jobs() -> dict[int, AMSJob]:
    jobs: dict[int, AMSJob] = {}
    for spinpol, metadata in JOB_METADATA.items():
        job = AMSJob.load_external(str(metadata["path"]))
        print(f"Loaded spinpol={spinpol}: {metadata['why']}")
        jobs[spinpol] = job
    return jobs


def build_dataframe(jobs: dict[int, AMSJob]) -> pd.DataFrame:
    rows: list[dict[str, Any]] = []
    for spinpol, job in jobs.items():
        results = job.results.get_pesscan_results(molecules=True)
        conversion = Units.conversion_factor("bohr", "angstrom")
        distances = [distance * conversion for distance in results["RaveledPESCoords"][0]]
        energies = list(results["PES"])
        for point_index, (distance, energy, converged, molecule) in enumerate(
            zip(distances, energies, results["Converged"], results["Molecules"])
        ):
            rows.append(
                {
                    "spinpolarization": spinpol,
                    "point_index": point_index,
                    "distance_angstrom": float(distance),
                    "energy_hartree": float(energy),
                    "converged": bool(converged),
                    "molecule": molecule,
                }
            )
    df = pd.DataFrame(rows)
    global_min = float(df["energy_hartree"].min())
    df["relative_energy_kcal_per_mol"] = (
        df["energy_hartree"] - global_min
    ) * Units.conversion_factor("hartree", "kcal/mol")
    return df


def plot_curves(df: pd.DataFrame) -> None:
    fig, ax = plt.subplots(figsize=(6, 4))
    for spinpol, subdf in df.groupby("spinpolarization"):
        ordered = subdf.sort_values("distance_angstrom")
        ax.plot(
            ordered["distance_angstrom"],
            ordered["relative_energy_kcal_per_mol"],
            marker="o",
            label=f"spinpolarization = {spinpol}",
        )
    ax.set_xlabel("O-O distance [angstrom]")
    ax.set_ylabel("Relative energy [kcal/mol]")
    ax.set_title("Benzoyl peroxide O-O bond PES scan with UMA-S-1.2-OMol")
    ax.legend()
    ax.grid(alpha=0.3)
    fig.tight_layout()
    fig.savefig(PLOT_PATH, dpi=200)
    plt.close(fig)


def select_state_rows(df: pd.DataFrame) -> tuple[pd.Series, pd.Series]:
    bonded_candidates = df[df["distance_angstrom"] <= BOND_CUTOFF_ANGSTROM]
    if bonded_candidates.empty:
        bonded_candidates = df
    bonded_row = bonded_candidates.loc[bonded_candidates["energy_hartree"].idxmin()]
    max_distance = float(df["distance_angstrom"].max())
    dissociated_candidates = df[df["distance_angstrom"] >= max_distance - 1.0e-6]
    dissociated_row = dissociated_candidates.loc[dissociated_candidates["energy_hartree"].idxmin()]
    return bonded_row, dissociated_row


def render_state_images(bonded_row: pd.Series, dissociated_row: pd.Series) -> None:
    view(
        bonded_row["molecule"],
        guess_bonds=True,
        width=350,
        height=260,
        direction="along_pca3",
        picture_path=str(BONDED_IMAGE_PATH),
    )
    view(
        dissociated_row["molecule"],
        guess_bonds=True,
        width=350,
        height=260,
        direction="along_pca3",
        picture_path=str(DISSOCIATED_IMAGE_PATH),
    )


def build_summary_table(df: pd.DataFrame) -> pd.DataFrame:
    summary = (
        df.sort_values(["spinpolarization", "distance_angstrom"])
        .groupby("spinpolarization", as_index=False)
        .agg(
            min_distance_angstrom=("distance_angstrom", "min"),
            max_distance_angstrom=("distance_angstrom", "max"),
            minimum_energy_hartree=("energy_hartree", "min"),
            minimum_relative_energy_kcal_per_mol=("relative_energy_kcal_per_mol", "min"),
        )
    )
    return summary


def write_report(
    df: pd.DataFrame,
    summary: pd.DataFrame,
    bonded_row: pd.Series,
    dissociated_row: pd.Series,
    jobs: dict[int, AMSJob],
) -> None:
    if REPORT_PATH.exists():
        REPORT_PATH.replace(REPORT_PATH.with_suffix(".md.bk"))

    intro = (
        "# Benzoyl Peroxide O-O Bond Scan\n\n"
        "This report summarizes three AMS PES scans for benzoyl peroxide "
        "using the MLPotential engine with model `UMA-S-1.2-OMol`. "
        "The peroxide O-O bond was identified by looping over oxygen atoms "
        "and inspecting `ChemicalSystem.bonds` for an oxygen neighbor.\n\n"
    )

    provenance_lines = []
    for spinpol, metadata in JOB_METADATA.items():
        provenance_lines.append(
            f"- `spinpol_{spinpol}` loaded from `{metadata['path']}`. {metadata['why']}"
        )

    summary_table = summary.to_markdown(index=False, floatfmt=".6f")

    lowest_states = (
        "## Lowest-Energy Structures\n\n"
        f"The lowest-energy bonded state in the full scan set occurs at "
        f"`spinpolarization = {int(bonded_row['spinpolarization'])}` and "
        f"`d(O-O) = {bonded_row['distance_angstrom']:.3f}` angstrom. "
        f"Here, 'bonded' means `d(O-O) <= {BOND_CUTOFF_ANGSTROM:.1f}` angstrom.\n\n"
        f"![Lowest-energy bonded state]({BONDED_IMAGE_PATH})\n\n"
        f"The lowest-energy dissociated state was defined as the lowest-energy "
        f"structure at the largest scanned O-O distance "
        f"(`d(O-O) = {dissociated_row['distance_angstrom']:.3f}` angstrom). "
        f"It occurs for `spinpolarization = {int(dissociated_row['spinpolarization'])}`.\n\n"
        f"![Lowest-energy dissociated state]({DISSOCIATED_IMAGE_PATH})\n\n"
    )

    conclusion = (
        "## Conclusion\n\n"
        f"Among the three scans, the global minimum is found for "
        f"`spinpolarization = {int(bonded_row['spinpolarization'])}`. "
        f"At the dissociation limit sampled here (`~3.0` angstrom), the lowest-energy "
        f"state is obtained for `spinpolarization = {int(dissociated_row['spinpolarization'])}`.\n"
    )

    inputs = []
    for spinpol, job in jobs.items():
        inputs.append(f"### spinpol_{spinpol}\n\n```text\n{job.get_input()}\n```\n")

    report_text = (
        intro
        + "## Provenance\n\n"
        + "\n".join(provenance_lines)
        + "\n\n## Energy Plot\n\n"
        + f"![Energy vs O-O distance]({PLOT_PATH})\n\n"
        + "## Summary Table\n\n"
        + summary_table
        + "\n\n"
        + lowest_states
        + "## Calculation Inputs\n\n"
        + "\n".join(inputs)
        + conclusion
    )
    REPORT_PATH.write_text(report_text)


def main() -> None:
    jobs = load_jobs()
    df = build_dataframe(jobs)
    summary = build_summary_table(df)
    plot_curves(df)
    bonded_row, dissociated_row = select_state_rows(df)
    render_state_images(bonded_row, dissociated_row)
    write_report(df, summary, bonded_row, dissociated_row, jobs)


if __name__ == "__main__":
    main()
Original Markdown report
# Benzoyl Peroxide O-O Bond Scan

This report summarizes three AMS PES scans for benzoyl peroxide using the MLPotential engine with model `UMA-S-1.2-OMol`. The peroxide O-O bond was identified by looping over oxygen atoms and inspecting `ChemicalSystem.bonds` for an oxygen neighbor.

## Provenance

- `spinpol_0` loaded from `01-benzoyl-peroxide-oo-scan_workdir/spinpol_0/ams.rkf`. Closed-shell reference PES scan for the peroxide O-O cleavage.
- `spinpol_1` loaded from `01-benzoyl-peroxide-oo-scan_workdir/spinpol_1/ams.rkf`. Open-shell PES scan with one excess alpha electron.
- `spinpol_2` loaded from `01-benzoyl-peroxide-oo-scan_workdir/spinpol_2/ams.rkf`. Open-shell PES scan with two excess alpha electrons.

## Energy Plot

![Energy vs O-O distance](pes_scan.png)

## Summary Table

|   spinpolarization |   min_distance_angstrom |   max_distance_angstrom |   minimum_energy_hartree |   minimum_relative_energy_kcal_per_mol |
|-------------------:|------------------------:|------------------------:|-------------------------:|---------------------------------------:|
|           0.000000 |                1.362770 |                3.000000 |              -840.394601 |                               0.000000 |
|           1.000000 |                1.362770 |                3.000000 |              -840.370230 |                              15.292577 |
|           2.000000 |                1.362770 |                3.000000 |              -840.339771 |                              34.406324 |

## Lowest-Energy Structures

The lowest-energy bonded state in the full scan set occurs at `spinpolarization = 0` and `d(O-O) = 1.465` angstrom. Here, 'bonded' means `d(O-O) <= 2.0` angstrom.

![Lowest-energy bonded state](bonded_state.png)

The lowest-energy dissociated state was defined as the lowest-energy structure at the largest scanned O-O distance (`d(O-O) = 3.000` angstrom). It occurs for `spinpolarization = 2`.

![Lowest-energy dissociated state](dissociated_state.png)

## Calculation Inputs

### spinpol_0

```ams
PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 0
  Unrestricted yes
EndEngine


```

### spinpol_1

```ams
PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 1
  Unrestricted yes
EndEngine


```

### spinpol_2

```ams
PESScan
  CalcPropertiesAtPESPoints yes
  ScanCoordinate
    Distance 9 10 1.362770 3.000000
    nPoints 17
  End
End

Task PESScan

System
  Atoms
              C      -5.7853396399      -0.3775293408       0.0534624364
              C      -5.2739631081      -1.6580062127      -0.1693324182
              C      -3.8914954472      -1.8626507642      -0.2206186121
              C      -3.0051209562      -0.7825471751      -0.0485731184
              C      -3.5318256026       0.5027433484       0.1752200639
              C      -4.9152265407       0.7014132161       0.2255077074
              C      -1.5415025506      -0.9907446742      -0.1014385978
              O      -1.0682590904      -2.1425240610      -0.3020011407
              O      -0.6753399226       0.0875991932       0.0705568759
              O       0.6753406192      -0.0876011042       0.0246319173
              C       1.5415028692       0.9907428504       0.1966270716
              O       1.0682589594       2.1425216033       0.3971938037
              C       3.0051212579       0.7825461682       0.1437610029
              C       3.8914945837       1.8626501390       0.3158080689
              C       5.2739621418       1.6580070013       0.2645206976
              C       5.7853400594       0.3775310800       0.0417224843
              C       4.9152277561      -0.7014117837      -0.1303242755
              C       3.5318266896      -0.5027431696      -0.0800346166
              H      -6.8556482602      -0.2213784496       0.0927828415
              H      -5.9492663902      -2.4933590925      -0.3025168635
              H      -3.5178200329      -2.8639890493      -0.3945270611
              H      -2.8770162470       1.3542663339       0.3113864878
              H      -5.3127831836       1.6932542256       0.3980989839
              H       3.5178177234       2.8639876480       0.4897194499
              H       5.9492634706       2.4933607184       0.3977065034
              H       6.8556482458       0.2213806547       0.0024015641
              H       5.3127847693      -1.6932521841      -0.3029171726
              H       2.8770178270      -1.3542671195      -0.2162024114
  End
  BondOrders
     1 2 1.5
     1 6 1.5
     1 19 1.0
     2 3 1.5
     2 20 1.0
     3 4 1.5
     3 21 1.0
     4 5 1.5
     4 7 1.0
     5 6 1.5
     5 22 1.0
     6 23 1.0
     7 8 2.0
     7 9 1.0
     9 10 1.0
     10 11 1.0
     11 12 2.0
     11 13 1.0
     13 14 1.5
     13 18 1.5
     14 15 1.5
     14 24 1.0
     15 16 1.5
     15 25 1.0
     16 17 1.5
     16 26 1.0
     17 18 1.5
     17 27 1.0
     18 28 1.0
  End
End

Engine mlpotential
  Model UMA-S-1.2-OMol
  UnpairedElectrons 2
  Unrestricted yes
EndEngine


```
## Conclusion

Among the three scans, the global minimum is found for `spinpolarization = 0`. At the dissociation limit sampled here (`~3.0` angstrom), the lowest-energy state is obtained for `spinpolarization = 2`.

Note on AI-generated content

This page was generated by a Python script. That Python script was AI-generated.

All numbers, figures, and tables are extracted or postprocessed from actual AMS calculations, and can be transparently regenerated from the provided Python scripts.

Any scientific reasoning or citations was written by AI. This page is the actual one-shot output from using the ams2026 skill with an AI coding agent.