#!/usr/bin/env python3
"""Educational front-end process model summaries for SemiAgora replays.

This script documents the simple calculations used by the public process
fundamentals packet. It does not write recipes, control equipment, or qualify
any process.
"""

from __future__ import annotations

import math


def silicon_consumed_nm(oxide_nm: float) -> float:
    return 0.46 * oxide_nm


def lithography_pass_count(cd_error_matrix: list[list[float]], tolerance_nm: float = 10.0) -> int:
    return sum(1 for row in cd_error_matrix for error in row if abs(error) <= tolerance_nm)


def mask_remaining_nm(mask_start_nm: float, vertical_etched_nm: float, selectivity: float) -> float:
    return mask_start_nm - vertical_etched_nm / selectivity


def half_range_nonuniformity_percent(samples: list[float]) -> float:
    mean = sum(samples) / len(samples)
    return (max(samples) - min(samples)) / (2 * mean) * 100


def gaussian_peak_cm3(dose_cm2: float, straggle_nm: float) -> float:
    straggle_cm = straggle_nm * 1e-7
    return dose_cm2 / (math.sqrt(2 * math.pi) * straggle_cm)


def main() -> None:
    cd_errors = [
        [18, 12, 7, 5, 9],
        [12, 5, 1, -2, 2],
        [10, 3, 0, -3, -8],
        [14, 7, 2, -1, 4],
        [22, 15, 9, 6, 11],
    ]
    cmp_radial = [95, 98, 100, 99, 97]

    print("wet 40 min consumed silicon nm:", round(silicon_consumed_nm(174), 1))
    print("lithography pass points:", lithography_pass_count(cd_errors))
    print("rie mask remaining nm:", round(mask_remaining_nm(60, 120, 8), 1))
    print("cmp half-range nonuniformity %:", round(half_range_nonuniformity_percent(cmp_radial), 2))
    print("50 keV teaching peak cm^-3:", f"{gaussian_peak_cm3(1e13, 30):.2e}")


if __name__ == "__main__":
    main()
