One of the [studies we reproduced](/writing/interface-studies-reproduced) for [Questions we need Emily to answer](/writing/questions-for-emily-testing-a-theory-of-the-interface), the companion to [the essay](/writing/testing-a-theory-of-the-interface-with-an-ontology). Generated by `scripts/reproduce_studies.py` from `reproductions/johnson_1981.py`. Every value from the paper was read by an AI agent and has not been checked by a person; the sample and history were re-read from the PDF alone by a second agent that had not seen our earlier transcription.
The study and why we depend on it
N. M. Johnson, D. K. Biegelsen and M. D. Moyer, “Low-temperature annealing and hydrogenation of defects at the Si-SiO2 interface”, J. Vac. Sci. Technol. 19, 390-394 (1981).
One of the two papers the Quantum ESPRESSO calculation of Si• + ½H₂ → Si–H bears on most directly. It measures the interface spin centre (Pb, the dangling bond the calculation models) and the interface states on the same (111) oxide, after 15 min anneals in vacuum with and without aluminium, and after atomic deuterium. Its central result is that the Pb centre goes at a lower temperature (below 300 °C with aluminium) than the characteristic interface-state peak (above 400 °C), so Pb is not the peak. The project held only five sentences of it as unverified text values; nothing was scored against it before this page.
How well can this study be reproduced?
Low. The oxidation is stated by temperature, gas and thickness only (1000 °C, dry O2, 94 to 219 nm, no post-oxidation anneal, “rapidly cooled”); no oxidation time, no clean, no cooling rate. The anneals are stated (15 min in vacuum at each temperature; 400 °C 15 min and 450 °C 60 min for the capacitors), but not the vacuum pressure, the ramps, or whether the isochronal series is one specimen annealed in turn. The two hydrogen sources that drive the result, hydrogen released by the aluminium and atomic deuterium from a remote plasma, are described qualitatively: no flux, no pressure, no hydrogen content. The spin density is in arbitrary units except one absolute value (about 6×10¹¹ cm⁻² as oxidized).
| Sample described | 1 of 6 properties we need are stated and encoded the same |
| History described | 2 of 8 steps are stated and encoded the same; 2 are stated by the paper and absent from our history; 3 are ours because the paper is silent |
| Timing | 0 of 2 simulated steps have a stated duration; 3 of 3 other steps have none; 6 timing gaps listed below |
| How the results are given | Figures only, except four sentences in the text (60% reduction at 400 °C; complete removal at 450 °C; onset of spin loss at 250 °C with Al and 400 °C without; 6×10¹¹ spins cm⁻² as oxidized). Fig. 1 and Fig. 2 read by eye here |
| Repeatability stated by the authors | Not stated; no error bars |
| Internal consistency | Fair. The capacitors (116 nm) and the ESR wafers (200 nm) have different oxides. The text says “approximately 60%” for the 400 °C anneal; Fig. 1 reads 6.7 to 2.9×10¹² at the peak, 57%. Without aluminium and without hydrogen, a vacuum anneal above 500 °C removes the spin signal, which the paper does not explain and which runs opposite to Stesmans and Afanas'ev 1996 |
| Is our model independent of this paper's data? | Yes. The trap-density program was found and fitted on Vitkavage 1990, and its hydrogen barriers (passivation 1.66 eV, release 2.56 eV with 1.2×10¹² s⁻¹) are Brower's as quoted by Stesmans and Afanas'ev 1996; the equilibrium program is computed (Quantum ESPRESSO) and not fitted. Neither has seen this paper |
| Outcome | 2 of 13 numbers within tolerance |
The grade is ours and is about the paper as a source for simulation, not about the quality of the experiment: high means the sample, every step and its timing are stated well enough that a simulation needs no choices of ours; moderate that some choices are ours and are listed; low that the result depends on choices the paper does not constrain.
The sample and its history, played back
The sample is drawn from the simulation: layer heights and the read-outs are what the ISL programs compute at each moment of the history. Steps the language cannot state (a clean, a metallization, a measurement) are on the clock and marked as recorded, not simulated.
not stated
| oxide thickness | 0 nm | 116 |
| interface state density at midgap | 2.97×10¹¹ cm⁻² eV⁻¹ | 2.50×10¹² |
| interface state density at 0.30 eV above the valence band | – cm⁻² eV⁻¹ | 6.60×10¹² |
| share of dangling bonds left uncapped at equilibrium (computed) | – 1 |
Does our sample and history match the paper's?
Left: the paper's own words, with the page of the PDF. Right: what we simulate. 3 same, 4 approximated, 5 assumed, 2 not in ours.
The timing of the history
Time is counted from the start of the first simulated step. A step the language cannot state takes no simulated time; where the paper gives its duration, the duration is in the last column. Stated means the paper gives the duration; partly stated that it gives a bound or a range; not stated; assumed that the duration in our history is ours.
MOS capacitor, 116 nm, as oxidized
| # | Step | Starts at | Lasts | Ends at | Temperature | Rate | Gas | Is the timing in the paper? |
|---|---|---|---|---|---|---|---|---|
| 1 | Pre-oxidation clean (not described) | 0 s | not simulated | not stated. not stated | ||||
| 2 | Dry oxidation at 1000 °C to 116 nm, no post-oxidation anneal | 0 s | 2 h 20 min | 2 h 20 min | 1000 → 1000 °C | held | dry_O2 | not stated; assumed. Not stated; implied by the 116 nm thickness |
| 3 | Rapid cool to room temperature in the furnace gas | 2 h 20 min | 10 min | 2 h 30 min | 1000 → 25 °C | -1.62 °C/s | dry_O2 | not stated; assumed. “rapidly”, no rate given |
| 4 | Aluminium by rf-induction evaporation (MOS gate) | 2 h 30 min | not simulated | not stated | ||||
| 5 | Current-transient DLTS, hole emission, σp = 5×10⁻¹⁴ cm² assumed | 2 h 30 min | not simulated | not stated |
Simulated time in this history: 2 h 30 min.
Across the samples
| Sample | Oxidation | Cool | VacuumAnneal | AtomicDeuterium | Total |
|---|---|---|---|---|---|
| MOS capacitor, 116 nm, as oxidized | 2 h 20 min at 1000 °C | 10 min at 1000→25 °C | – | – | 2 h 30 min |
| MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min | 2 h 20 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 400 °C | – | 2 h 45 min |
| MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min | 2 h 20 min at 1000 °C | 10 min at 1000→25 °C | 1 h 00 min at 450 °C | – | 3 h 30 min |
| ESR wafer, 200 nm, with aluminium, vacuum 275 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 275 °C | – | 6 h 25 min |
| ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 300 °C | – | 6 h 25 min |
| ESR wafer, 200 nm, with aluminium, vacuum 325 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 325 °C | – | 6 h 25 min |
| ESR wafer, 200 nm, without aluminium, vacuum 425 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 425 °C | – | 6 h 25 min |
| ESR wafer, 200 nm, without aluminium, vacuum 475 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 475 °C | – | 6 h 25 min |
| ESR wafer, atomic deuterium at 230 °C, then vacuum 600 °C 15 min | 6 h 00 min at 1000 °C | 10 min at 1000→25 °C | 15 min at 600 °C | 30 min at 230 °C | 6 h 55 min |
Timing the paper does not give
- Oxidation time for every oxide (116, 200, 94, 219 nm at 1000 °C): not stated.
- Cooling after oxidation: “rapidly cooled to room temperature in the furnace ambient”, no rate or time.
- Vacuum anneals: heat-up, cool-down and pressure not stated; only the 15 or 60 min hold.
- Whether the isochronal anneals of Fig. 2 are on one specimen in sequence or one specimen per temperature: not stated.
- Atomic deuteration of the ESR specimens: “identical conditions” to the SIMS specimens, whose Fig. 5 legend gives 30 min; D flux, chamber pressure and plasma power not stated.
- Time between oxidation, aluminium evaporation and the anneals; how and when the aluminium was removed before ESR.
What the second reading changed
- The project had no stored recipe for this paper: five sentences in data/primary_sources/johnson_biegelsen_moyer_1981_jvst_19_390/text_values_agent_read_UNVERIFIED.csv, no dataset, no script. Those five values agree with this reading.
- That file reads “onset of spin-centre loss with aluminium … 250 C”; Fig. 2 shows the with-Al density still at 1.0 at 250 °C and falling between 275 and 350 °C. 250 °C is where the fall begins, not where it is half done.
- The library note says the paper concerns “the dangling-bond centre removed by low-temperature anneals”. The removal without aluminium and without hydrogen above 400 °C in vacuum is in the paper (p. 2) and is unexplained there; it is opposite to Stesmans and Afanas'ev 1996, where a vacuum anneal of hydrogen-passivated (111) at 480-640 °C brings Pb back.
- The as-oxidized Pb density here, about 6×10¹¹ cm⁻² (p. 2), is eight times below the natural Pb density Stesmans and Afanas'ev give for a similar (111) dry oxide after full dissociation, 4.7×10¹² cm⁻². Johnson's wafers were not annealed to dissociate hydrogen before measurement, so part of their Pb may have been hydrogen-passivated as grown; the paper does not say.
- The evaluations/atomistic record lists this paper as giving a barrier for passivation or dissociation. It gives none: it reports temperatures at which signals disappear, in 15 min isochronal anneals, with no rate or activation energy.
Their terms and ours
| The paper says | We write | Kind in our vocabulary | Note |
|---|---|---|---|
| interface spin center; trivalent silicon defect bonded to three silicon atoms; g = 2.0015 | N_Pb (trap-density program, internal); N_free (equilibrium program) | STATE; quantity density-of-dangling-bonds | The trap-density program reports N_Pb only through Dit = c_mid·N_Pb; the equilibrium program reports the share N_free. Neither reports a spin density in cm⁻². |
| spin density (arbitrary units) | share of dangling bonds left uncapped (computed) | observable Normalized_Pb | Compared as a share of the level before the loss; the paper's absolute scale is given only for the as-oxidized wafer. |
| interface-state distribution, characteristic peak 0.3 eV above Ev | Dit_at_0p30eV_above_Ev | observable (target: trap_density) | The predictor gives a spectrum only after a hydrogen step (the shape of one Vitkavage curve). |
| interface states near midgap (DLTS, dashed) | Dit | observable (target: trap_density) | The paper warns that DLTS near midgap includes minority-carrier processes. |
| postmetallization anneal (PMA) in vacuo | RUN VacuumAnneal … AMBIENT vacuum | a RUN; process factor hydrogen-anneal (by the paper's mechanism) or inert-anneal (by its gas) | The ontology has no way to say a step in vacuum delivers hydrogen from a film. |
| anneal in atomic deuterium (remote plasma) | RUN AtomicDeuterium … AMBIENT vacuum (stand-in) | no ambient | Missing: an atomic hydrogen ambient with a flux. |
| aluminum overlayer releases hydrogen during sinter | (none) | no statement | Variant: written as forming gas. |
| rapidly cooled in the furnace ambient | RUN Cool … AMBIENT dry_O2 | a RUN | Rate not stated. |
| deuterium accumulation at the interface (SIMS) | (none) | no observable | No program carries hydrogen in the oxide. |
The simulation in our language
Each sample is one history file: a SAMPLE and a CONTROL_TRAJECTORY. This is the whole input; run it with PYTHONPATH=. python -m isl_harness.predict <file>.
MOS capacitor, 116 nm, as oxidized
# MOS capacitor, 116 nm, as oxidized
SAMPLE Johnson_M0 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
SUBSTRATE: p_epi_on_p_plus
FILM: Al_gate
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 8400 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 3360..13440
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation (MOS gate)
EVENT DLTS KIND measurement TIMING assumed # Current-transient DLTS, hole emission, σp = 5×10⁻¹⁴ cm² assumed
}MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min
# MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min
SAMPLE Johnson_M400 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
SUBSTRATE: p_epi_on_p_plus
FILM: Al_gate
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 8400 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 3360..13440
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation (MOS gate)
RUN VacuumAnneal DURATION 900 TEMP 400->400 AMBIENT vacuum TIMING stated
EVENT DLTS KIND measurement TIMING assumed # Current-transient DLTS, hole emission, σp = 5×10⁻¹⁴ cm² assumed
}MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min
# MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min
SAMPLE Johnson_M450 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
SUBSTRATE: p_epi_on_p_plus
FILM: Al_gate
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 8400 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 3360..13440
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation (MOS gate)
RUN VacuumAnneal DURATION 3600 TEMP 450->450 AMBIENT vacuum TIMING stated
EVENT DLTS KIND measurement TIMING assumed # Current-transient DLTS, hole emission, σp = 5×10⁻¹⁴ cm² assumed
}ESR wafer, 200 nm, with aluminium, vacuum 275 °C 15 min
# ESR wafer, 200 nm, with aluminium, vacuum 275 °C 15 min
SAMPLE Johnson_A275 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
FILM: Al_100nm
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation, 1000 Å
RUN VacuumAnneal DURATION 900 TEMP 275->275 AMBIENT vacuum TIMING stated
EVENT Strip KIND etch TIMING assumed # Aluminium removed
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min
# ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min
SAMPLE Johnson_A300 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
FILM: Al_100nm
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation, 1000 Å
RUN VacuumAnneal DURATION 900 TEMP 300->300 AMBIENT vacuum TIMING stated
EVENT Strip KIND etch TIMING assumed # Aluminium removed
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}ESR wafer, 200 nm, with aluminium, vacuum 325 °C 15 min
# ESR wafer, 200 nm, with aluminium, vacuum 325 °C 15 min
SAMPLE Johnson_A325 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
FILM: Al_100nm
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
EVENT Metal KIND metallization TIMING assumed # Aluminium by rf-induction evaporation, 1000 Å
RUN VacuumAnneal DURATION 900 TEMP 325->325 AMBIENT vacuum TIMING stated
EVENT Strip KIND etch TIMING assumed # Aluminium removed
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}ESR wafer, 200 nm, without aluminium, vacuum 425 °C 15 min
# ESR wafer, 200 nm, without aluminium, vacuum 425 °C 15 min
SAMPLE Johnson_N425 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
RUN VacuumAnneal DURATION 900 TEMP 425->425 AMBIENT vacuum TIMING stated
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}ESR wafer, 200 nm, without aluminium, vacuum 475 °C 15 min
# ESR wafer, 200 nm, without aluminium, vacuum 475 °C 15 min
SAMPLE Johnson_N475 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
RUN VacuumAnneal DURATION 900 TEMP 475->475 AMBIENT vacuum TIMING stated
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}ESR wafer, atomic deuterium at 230 °C, then vacuum 600 °C 15 min
# ESR wafer, atomic deuterium at 230 °C, then vacuum 600 °C 15 min
SAMPLE Johnson_D600 {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron
}
CONTROL_TRAJECTORY History {
EVENT Clean KIND clean TIMING assumed # Pre-oxidation clean (not described)
RUN Oxidation DURATION 21600 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 8640..34560
RUN Cool DURATION 600 TEMP 1000->25 AMBIENT dry_O2 TIMING assumed VARY duration 60..3600
RUN AtomicDeuterium DURATION 1800 TEMP 230->230 AMBIENT vacuum TIMING bound
RUN VacuumAnneal DURATION 900 TEMP 600->600 AMBIENT vacuum TIMING stated
EVENT ESR KIND measurement TIMING assumed # ESR of the interface spin centre, g = 2.0015, B normal to the interface
}Not scored: the paper's value is zero (no spin signal after any vacuum anneal up to 600 °C), which a relative tolerance cannot score. The trap-density program's release, which is Brower's (Ed 2.56 eV, 1.2×10¹² s⁻¹, as cited by Stesmans 1996), gives 84% of the sites back after 15 min at 600 °C from a passivated start; the paper sees none.
The programs the predictor ran on these histories: experiments/deal_qss/two_equilibria.isl.template, experiments/vitkavage_dit/oxide_growth.isl.template, scripts/search_growth.py (structure generated from the grammar), scripts/search_trap_density.py (structure generated from the grammar).
The model itself, scripts/search_trap_density.py, as it is written. Every equation the simulation uses is in this text; the runtime holds no physics.
#!/usr/bin/env python3
"""
Structure search for midgap trap density on planar silicon (Vitkavage 1990), with and without the hydrogen anneal.
What the measurements show before any model: the forming-gas anneal lowers the density 5 to 8 times on (100) but 10 to
29 times on (110), and on (110) the unannealed density does not fall with time at 1000 C while the annealed one does.
The grammar asks which structure accounts for that:
one_population sites relax with time at temperature; hydrogen caps them at one rate (the form used so far)
orientation_passivation the same, with the hydrogen rate fitted for each orientation
two_populations a second population set at oxidation, per orientation, that hydrogen removes and time does not
two_populations_T the same, with the second population depending on oxidation temperature
Every candidate is an ISL program (kinds Relaxation and Passivation). Since 11 November every candidate also carries Brower's hydrogen
kinetics: the passivation rate changes with temperature by E_f = 1.66 eV about 400 C (where it is fitted), and capped sites release their
hydrogen at k_d0 exp(-E_d / kT) with E_d = 2.56 eV and k_d0 = 1.2e12 /s. Every scored anneal is at 400 C, where the release is negligible
(about 1e-8 /s), so the fit is unchanged; the history now matters (a hot step after the anneal brings Pb back). Split, fixed here: the 900 C recipes and the
8 h recipes are held out; everything else is fitted. (The earlier split held out the (511) orientation; a structure
with a number per orientation cannot be scored that way, so the split was changed and that is recorded here.)
The structure is chosen on training rows only: most passed, then fewest parameters, then smallest training error.
Output: evaluations/trap_density_search_report.json
"""
import json
import math
import os
import sys
import numpy as np
from scipy.optimize import least_squares
from isl_harness.isl_runtime import ISLRuntime
from scripts import run_vitkavage_dit as d
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
REPORT = os.path.join(ROOT, "evaluations", "trap_density_search_report.json")
K_B, T_REF = 8.617333262e-5, 1173.15
STRUCTURES = ("one_population", "orientation_passivation", "two_populations", "two_populations_T")
ORIENTATIONS = ("100", "110", "111", "511")
# name: (start, low, high)
BASE = {"log_N_born": (12.0, 10.5, 13.5), "log_N_floor": (11.3, 9.5, 12.5), "log_k_ref": (-4.0, -7.0, -1.0), "E_r": (2.0, 0.0, 4.0), "log_k_H": (-2.0, -4.0, 0.0)}def parameters(structure): p = dict(BASE) if structure == "orientation_passivation": p.update({f"log_h_{o}": (0.0, -1.5, 1.5) for o in ORIENTATIONS[1:]}) if structure.startswith("two_populations"): p.update({f"log_B_{o}": (11.0, 9.0, 12.5) for o in ("100", "110", "511")}) # (111) has no unannealed measurement, so its second population cannot be fitted if structure.endswith("_T"): p["E_B"] = (0.5, 0.0, 2.0) return p
def program(structure, row, sha): o, two = row["orientation"], structure.startswith("two_populations") runs = [f" RUN Oxidation DURATION {row['t_ox_hr'] 3600.0:.1f} TEMP {row['T_ox_C']:.1f}->{row['T_ox_C']:.1f} AMBIENT dry_O2"] if row["anneal"] == "PMA": runs.append(" RUN PostMetalAnneal DURATION 1800.0 TEMP 400.0->400.0 AMBIENT forming_gas_H2") second = f""" STATE N_B {{ UNIT: cm^-2; INITIAL: B_unit exp(ln10 log_B) exp((E_B / k_B) (1 / T_ox - 1 / T_ref)); MIN: 0; MAX: 1.0e15 }} STATE N_BH {{ UNIT: cm^-2; INITIAL: 0; MIN: 0; MAX: 1.0e15 }} PARAMETER log_B {{ VALUE: 11.0; UNIT: 1; STATUS: fitted }} PARAMETER E_B {{ VALUE: 0.0; UNIT: eV; STATUS: fitted }} PARAMETER T_ox {{ VALUE: {row['T_ox_C'] + 273.15:.2f}; UNIT: K; STATUS: sourced; SOURCE: the temperature of the oxidation step in this recipe }} PARAMETER B_unit {{ VALUE: 1.0; UNIT: cm^-2; STATUS: constant }} # No source resolves how fast hydrogen removes this population; it is gone after the 30 min anneal in every sample. Its rate is given the # temperature dependence of Pb passivation (E_f), an assumption; no release of this population is written, since no source measures one. PARAMETER k_HB {{ VALUE: 1.0; UNIT: atm^-1 s^-1; STATUS: hypothesis }} OPERATOR F_SecondPopulationPassivation : Passivation {{ CONSERVATION: N_B + N_BH = const EQUATION: d(N_B)/dt = -k_HB exp(-(E_f / k_B) (1 / T - 1 / T_H)) p_H2 N_B EQUATION: d(N_BH)/dt = k_HB exp(-(E_f / k_B) (1 / T - 1 / T_H)) p_H2 N_B }}""" if two else "" return f"""# GENERATED by scripts/search_trap_density.py. Structure: {structure}. A candidate from the grammar; every rate and level is fitted. SAMPLE Wafer_{o}_{row['anneal']}_{row['T_ox_C']:.0f}C_{str(row['t_ox_hr']).replace('.', 'p')}h {{ FAMILY: Si_Planar; ORIENTATION: Si{o} }} STATE N_Pb {{ UNIT: cm^-2; INITIAL: g_or N_unit exp(ln10 log_N_born); MIN: 0; MAX: 1.0e15 }} STATE N_SiH {{ UNIT: cm^-2; INITIAL: 0; MIN: 0; MAX: 1.0e15 }} CONTROL T {{ UNIT: K }} CONTROL p_H2 {{ UNIT: atm }} PARAMETER log_N_born {{ VALUE: 12.0; UNIT: 1; STATUS: fitted }} PARAMETER log_N_floor {{ VALUE: 11.0; UNIT: 1; STATUS: fitted }} PARAMETER log_k_ref {{ VALUE: -4.0; UNIT: 1; STATUS: fitted }} PARAMETER E_r {{ VALUE: 2.0; UNIT: eV; STATUS: fitted }} PARAMETER log_k_H {{ VALUE: -2.0; UNIT: 1; STATUS: fitted }} PARAMETER log_h {{ VALUE: 0.0; UNIT: 1; STATUS: fitted }} PARAMETER g_or {{ VALUE: {d.G_OR[o]}; UNIT: 1; STATUS: sourced; SOURCE: Vitkavage, Irene and Massoud, ONR TR 34 (1990), Table VIII, ratio of silicon surface atom density to (100) }} PARAMETER c_mid {{ VALUE: 1.0; UNIT: eV^-1; STATUS: hypothesis }} PARAMETER N_unit {{ VALUE: 1.0; UNIT: cm^-2; STATUS: constant }} PARAMETER rate_unit {{ VALUE: 1.0; UNIT: s^-1; STATUS: constant }} PARAMETER H_unit {{ VALUE: 1.0; UNIT: atm^-1 s^-1; STATUS: constant }} PARAMETER T_ref {{ VALUE: {T_REF}; UNIT: K; STATUS: constant }} PARAMETER ln10 {{ VALUE: 2.302585092994046; UNIT: 1; STATUS: constant }} PARAMETER k_B {{ VALUE: 8.617333262e-5; UNIT: eV K^-1; STATUS: constant }} # Hydrogen and the Pb centre, from Brower's measurements as quoted by Stesmans and Afanas'ev 1996 (p. L505-L506). The passivation rate is fitted # at T_H, the 400 C of every scored anneal, so E_f sets only how it changes away from 400 C. The release (HPb -> Pb + H) is Brower's, prefactor and # energy both; Stesmans and Afanas'ev adopt the same prefactor without fitting it, so their release data stay an independent test. PARAMETER E_f {{ VALUE: 1.66; UNIT: eV; STATUS: sourced; SOURCE: Brower 1988 as quoted by Stesmans and Afanas'ev 1996 J. Phys. Condens. Matter 8 L505 p. L505, activation energy of Pb + H2 -> HPb + H }} PARAMETER T_H {{ VALUE: 673.15; UNIT: K; STATUS: constant }} PARAMETER E_d {{ VALUE: 2.56; UNIT: eV; STATUS: sourced; SOURCE: Brower 1990 as quoted by Stesmans and Afanas'ev 1996 J. Phys. Condens. Matter 8 L505 p. L506, activation energy of HPb -> Pb + H }} PARAMETER k_d0 {{ VALUE: 1.2e12; UNIT: s^-1; STATUS: sourced; SOURCE: Brower 1990 as quoted and adopted unfitted by Stesmans and Afanas'ev 1996 J. Phys. Condens. Matter 8 L505 p. L506, prefactor of HPb -> Pb + H }}{second} CONTROL_TRAJECTORY History {{ {chr(10).join(runs)} }} OPERATOR F_Relaxation : Relaxation {{ EQUATION: d(N_Pb)/dt = -rate_unit exp(ln10 log_k_ref) exp(-(E_r / k_B) (1 / T - 1 / T_ref)) (N_Pb - g_or N_unit exp(ln10 log_N_floor)) }} OPERATOR F_HydrogenPassivation : Passivation {{ CONSERVATION: N_Pb + N_SiH = const EQUATION: d(N_Pb)/dt = -H_unit exp(ln10 (log_k_H + log_h)) exp(-(E_f / k_B) (1 / T - 1 / T_H)) p_H2 N_Pb EQUATION: d(N_SiH)/dt = H_unit exp(ln10 (log_k_H + log_h)) exp(-(E_f / k_B) (1 / T - 1 / T_H)) p_H2 N_Pb }} OPERATOR F_HydrogenRelease : Passivation {{ CONSERVATION: N_Pb + N_SiH = const EQUATION: d(N_Pb)/dt = k_d0 exp(-E_d / (k_B T)) N_SiH EQUATION: d(N_SiH)/dt = -k_d0 exp(-E_d / (k_B T)) N_SiH }} OBSERVATION_MODEL Obs_Dit_Midgap {{ TARGET: Dit; UNIT: cm^-2 eV^-1; EQUATION: Dit = c_mid * ({'N_Pb + N_B' if two else 'N_Pb'}) }} EVALUATION_CONTRACT Contract {{ FROZEN: true DATASET: data/derived/vitkavage_1990_dit_midgap.csv DATASET_DIGEST: sha256:{sha} SPLIT: search TARGET: Dit = {row['Dit']:.4g} +/- {d.CONTRACT_TOLERANCE} rel }} """
def overrides(structure, x, names, orientation): v = dict(zip(names, [float(a) for a in x])) ov = {k: v[k] for k in BASE} ov["log_h"] = v.get(f"log_h_{orientation}", 0.0) if structure.startswith("two_populations"): ov["log_B"] = v.get(f"log_B_{orientation}", 0.0) # (111): no second population can be fitted; it is left out (zero is 1 per cm2) ov["E_B"] = v.get("E_B", 0.0) return ov
def split_of(row): return "holdout" if row["T_ox_C"] == 900 or row["t_ox_hr"] == 8.0 else "train"
def evaluate(structure): rows, sha = d.load_rows() pars = parameters(structure) names = list(pars) rts = [] for r in rows: rt = ISLRuntime() rt.parse_isl_source(program(structure, r, sha)) rts.append(rt) meas = np.array([r["Dit"] for r in rows]) train = [i for i, r in enumerate(rows) if split_of(r) == "train"] def predict(x, idx): out = [] for i in idx: try: out.append(next(iter(rts[i].execute_isl_evaluation(parameter_overrides=overrides(structure, x, names, rows[i]["orientation"]), base_dir=ROOT)["receipt"]["results"].values()))["pred"]) except Exception: out.append(float("nan")) return np.array(out) def residuals(x): p = predict(x, train) return np.where(np.isfinite(p) & (p > 0), np.log(np.maximum(p, 1.0) / meas[train]) / 0.10, 30.0) rng, best = np.random.default_rng(7), None lo, hi = [pars[n][1] for n in names], [pars[n][2] for n in names] for x0 in [[pars[n][0] for n in names]] + [[float(rng.uniform(a, b)) for a, b in zip(lo, hi)] for _ in range(5)]: f = least_squares(residuals, x0=x0, bounds=(lo, hi), diff_step=1e-2, max_nfev=60) if best is None or f.cost < best.cost: best = f pred = predict(best.x, range(len(rows))) samples = [{"orientation": r["orientation"], "anneal": r["anneal"], "T_ox_C": r["T_ox_C"], "t_ox_hr": r["t_ox_hr"], "split": split_of(r), "measured": r["Dit"], "predicted": float(p), "passed": bool(abs(p - r["Dit"]) <= d.CONTRACT_TOLERANCE * r["Dit"])} for r, p in zip(rows, pred)] out = {"structure": structure, "n_fitted": len(names), "fitted": dict(zip(names, [float(v) for v in best.x])), "samples": samples} for split in ("train", "holdout"): sel = [s for s in samples if s["split"] == split] err = [abs(s["predicted"] - s["measured"]) / s["measured"] for s in sel] out[split] = {"n": len(sel), "passed": sum(s["passed"] for s in sel), "within_25_percent": int(sum(e <= 0.25 for e in err)), "median_error": round(float(np.median(err)), 3)} return out
def run(workers=1): if workers > 1: import multiprocessing with multiprocessing.Pool(workers) as pool: results = pool.map(evaluate, STRUCTURES) else: results = [evaluate(s) for s in STRUCTURES] key = lambda r: (-r["train"]["passed"], r["n_fitted"], r["train"]["median_error"]) results.sort(key=key) report = {"what": "Structure search for midgap trap density on planar silicon, Vitkavage 1990. Candidates come from a grammar.", "data_verification": "Agent-transcribed values; four values ruled on by the project owner. Unverified otherwise.", "split": "held out: the 900 C recipes and the 8 h recipes; fitted: the rest. Changed from the earlier split (which held out (511)) because some structures have a number per orientation.", "selection_rule": "most training targets passed, then fewest parameters, then smallest training error; held-out scores are not used to choose", "selected": {k: v for k, v in results[0].items() if k != "samples"}, "ranking": [{k: v for k, v in r.items() if k != "samples"} for r in results], "samples_of_each": {r["structure"]: r["samples"] for r in results}} with open(REPORT, "w") as f: json.dump(report, f, indent=1) return report
if __name__ == "__main__": rep = run(int(sys.argv[sys.argv.index("--workers") + 1]) if "--workers" in sys.argv else 1) for r in rep["ranking"]: print(f" {r['structure']:26s} parameters {r['n_fitted']:2d} train {r['train']['passed']:2d}/{r['train']['n']} (25%: {r['train']['within_25_percent']}, median {r['train']['median_error']})" f" held-out {r['holdout']['passed']:2d}/{r['holdout']['n']} (25%: {r['holdout']['within_25_percent']}, median {r['holdout']['median_error']})") ```
Our simulation against the paper
2 within, 3 off, 8 not modelled of 13 numbers. Tolerance is stated per row; nothing was fitted for this page.
| Sample and history | Quantity | The paper | Our simulation | Difference | Verdict | What the program's own evaluation says | Where in the paper |
|---|---|---|---|---|---|---|---|
| MOS capacitor, 116 nm, as oxidized | interface state density at 0.30 eV above Ev (DLTS) | 6.60e+12 cm⁻² eV⁻¹ | no program | not modelled (±15%) | no program | Fig. 1, PDF p. 2, read by eye at 0.30 eV (the characteristic peak is at about 0.3 eV) | |
| MOS capacitor, 116 nm, as oxidized | interface state density near midgap, 0.55 eV (DLTS) | 2.50e+12 cm⁻² eV⁻¹ | 1.06e+11 cm⁻² eV⁻¹ | -96% | off (±15%) | outside the tested scope | Fig. 1, PDF p. 2, read by eye at 0.55 eV, the last solid part of the curve before the dashed region the paper calls unreliable |
| MOS capacitor, 116 nm, as oxidized | oxide thickness | 116 nm | 115 nm | -1% | within (±10%) | supported within scope | Fig. 1 legend, PDF p. 2: “116 nm SiO2” |
| MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min | interface state density at 0.30 eV above Ev (DLTS) | 2.55e+12 cm⁻² eV⁻¹ | no program | not modelled (±15%) | no program | Fig. 1, PDF p. 2, read by eye at 0.30 eV (the characteristic peak is at about 0.3 eV) | |
| MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min | interface state density near midgap, 0.55 eV (DLTS) | 1.30e+12 cm⁻² eV⁻¹ | 1.06e+11 cm⁻² eV⁻¹ | -92% | off (±15%) | outside the tested scope | Fig. 1, PDF p. 2, read by eye at 0.55 eV, the last solid part of the curve before the dashed region the paper calls unreliable |
| MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min | interface state density at 0.30 eV above Ev (DLTS) | 3.50e+11 cm⁻² eV⁻¹ | no program | not modelled (±28.6%) | no program | Fig. 1, PDF p. 2, read by eye at 0.30 eV (the characteristic peak is at about 0.3 eV) | |
| MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min | interface state density near midgap, 0.55 eV (DLTS) | 7.40e+11 cm⁻² eV⁻¹ | 1.06e+11 cm⁻² eV⁻¹ | -86% | off (±15%) | outside the tested scope | Fig. 1, PDF p. 2, read by eye at 0.55 eV, the last solid part of the curve before the dashed region the paper calls unreliable |
| ESR wafer, 200 nm, with aluminium, vacuum 275 °C 15 min | spin density (Pb), share of the level before the loss | 0.85 (Fig. 2 units) | no program | not modelled (±10%) | no program | Fig. 2, PDF p. 3, read by eye; arbitrary units in which the level before the loss is 1 (the as-oxidized point at 30 °C reads 0.86) | |
| ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min | spin density (Pb), share of the level before the loss | 0.42 (Fig. 2 units) | no program | not modelled (±10%) | no program | Fig. 2, PDF p. 3, read by eye; arbitrary units in which the level before the loss is 1 (the as-oxidized point at 30 °C reads 0.86) | |
| ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min | oxide thickness | 200 nm | 201 nm | +1% | within (±10%) | supported within scope | Fig. 2 legend, PDF p. 3: “SiO2: 2000Å” |
| ESR wafer, 200 nm, with aluminium, vacuum 325 °C 15 min | spin density (Pb), share of the level before the loss | 0.14 (Fig. 2 units) | no program | not modelled (±21.4%) | no program | Fig. 2, PDF p. 3, read by eye; arbitrary units in which the level before the loss is 1 (the as-oxidized point at 30 °C reads 0.86) | |
| ESR wafer, 200 nm, without aluminium, vacuum 425 °C 15 min | spin density (Pb), share of the level before the loss | 0.83 (Fig. 2 units) | no program | not modelled (±10%) | no program | Fig. 2, PDF p. 3, read by eye; arbitrary units in which the level before the loss is 1 (the as-oxidized point at 30 °C reads 0.86) | |
| ESR wafer, 200 nm, without aluminium, vacuum 475 °C 15 min | spin density (Pb), share of the level before the loss | 0.37 (Fig. 2 units) | no program | not modelled (±10%) | no program | Fig. 2, PDF p. 3, read by eye; arbitrary units in which the level before the loss is 1 (the as-oxidized point at 30 °C reads 0.86) |
Aligning the simulation: what the unstated things would have to be
Every step whose timing or temperature the paper leaves open carries a range in the history above (VARY). scripts/align_study.py searched those ranges against the paper's numbers through the same predictor, first one unknown at a time, then all together. No parameter a program declares fitted was touched. There are no held-out samples here: the unknowns were chosen on the same numbers they are scored on, so the aligned score is an upper bound, not a test.
| Unknown | What the paper says | Range searched | The reproduction used | Best alone | Score at the reproduction's value | Best score alone |
|---|---|---|---|---|---|---|
| Dry oxidation at 1000 °C to 116 nm, no post-oxidation anneal: duration (mos) | Not stated; implied by the 116 nm thickness | 3360 to 13440 s | 8400 s | 8400 s | 2 of 13 within tolerance, median error 85.7% | 2 of 13 within tolerance, median error 85.7% |
| Rapid cool to room temperature in the furnace gas: duration (mos) | “rapidly”, no rate given | 60 to 3600 s | 600 s | 60 s (flat: the data do not constrain it) | 2 of 13 within tolerance, median error 85.7% | 2 of 13 within tolerance, median error 85.6% |
| Dry oxidation at 1000 °C to 200 nm, no post-oxidation anneal: duration (esr) | Not stated; implied by the 116 nm thickness | 8640 to 34560 s | 21600 s | 21600 s | 2 of 13 within tolerance, median error 85.7% | 2 of 13 within tolerance, median error 85.7% |
| Rapid cool to room temperature in the furnace gas: duration (esr) | “rapidly”, no rate given | 60 to 3600 s | 600 s | 600 s (flat: the data do not constrain it) | 2 of 13 within tolerance, median error 85.7% | 2 of 13 within tolerance, median error 85.7% |
Together: Oxidation duration 8400 s (was 8400); Cool duration 60 s (was 600); Oxidation duration 21600 s (was 21600); Cool duration 600 s (was 600).
As reproduced: 2 of 13 within tolerance, median error 85.7%. Aligned: 2 of 13 within tolerance, median error 85.6%.
Choices of program or material property, each scored on its own and on top of the aligned history:
| Variant | Alone | With the aligned history |
|---|---|---|
| aluminium as a hydrogen source, written as forming gas during its anneal | 2 of 13 within tolerance, median error 97.9% | 2 of 13 within tolerance, median error 97.9% |
| atomic deuterium written as molecular hydrogen (pure H2) | 2 of 13 within tolerance, median error 85.7% | 2 of 13 within tolerance, median error 85.6% |
| both stand-ins | 2 of 13 within tolerance, median error 97.9% | 2 of 13 within tolerance, median error 97.9% |
Four unknowns were declared: the oxidation time and the cool after oxidation, each shared within one batch (the 116 nm capacitor oxide and the 200 nm ESR oxide). Three variants try the only ways the language has to put hydrogen where the paper puts it: the aluminium written as forming gas during its anneal, the atomic deuterium written as molecular H₂, and both. No sample is held out: the unknowns were chosen on the same 13 numbers they are scored on, so the aligned count is an upper bound.
As reproduced: 2 of 13 within tolerance (median error 85.7%). Aligned: 2 of 13 (85.6%). The two are the oxide thicknesses, and the oxidation times were set from the predictor's own growth law for those thicknesses, so neither is a test. No number about interface states or Pb is reproduced, as stated or aligned.
The unknowns. The thicknesses pin the oxidation times at the values assumed (2.3 h for 116 nm, 6 h for 200 nm at 1000 °C). Over its range the oxidation time moves the trap-density program's as-oxidized density between about 7×10¹⁰ and 1.9×10¹¹ cm⁻² eV⁻¹, 13 to 35 times below the paper's DLTS, so no value brings a row within tolerance. No program changes Pb or interface states in a 15 or 60 min vacuum anneal at 275 to 475 °C (the trap program's relaxation has a rate of about 2×10⁻¹⁰ s⁻¹ at 475 °C). The cool after oxidation is flat.
Aluminium as forming gas (2 of 13, median 97.9%). The interface-state spectrum appears, at a twentieth of the paper's level after 400 °C (1.1×10¹¹ against 2.55×10¹² cm⁻² eV⁻¹ at 0.30 eV; the trap program removes 32% there, the temperature its H₂ rate was fitted at) and at a four-thousandth after 450 °C for 60 min (9.3×10⁷ against 3.5×10¹¹: at 450 °C Brower's 1.66 eV makes the rate 7.2 times faster and it removes 99.94%). Before any anneal the program has 1.1×10¹¹ cm⁻² eV⁻¹ near midgap where the paper's DLTS has 2.5×10¹² at 0.55 eV. On the ESR wafers the equilibrium program leaves 3×10⁻⁸ to 3×10⁻⁷ of the Pb uncapped at 275 to 325 °C (and would at 30 °C); the paper has 0.85, 0.42 and 0.14. The trap program, whose H₂ rate is fitted at 400 °C and carries Brower's 1.66 eV away from it, removes 0.06%, 0.26% and 1.1% of its sites at 275, 300 and 325 °C. Its rate rises by a factor of 4.1 to 4.6 per 25 °C, which is the shape the measured fall from 0.85 to 0.14 over 50 °C needs, but 15 min in forming gas (0.1 atm H₂) is 180 to 330 times too slow to give it (in rate, against −ln of the measured shares). That is the paper's point: the aluminium supplies atomic hydrogen, which caps Pb without the 1.66 eV of H₂ dissociating at the bond.
Atomic deuterium as H₂. Nothing scored changes (the deuterated sample's value is zero and is not scored). The history runs: after 30 min at 230 °C the equilibrium program has Pb capped (equilibrium share 10⁻⁹), as the paper finds; the paper also says molecular deuterium under the same conditions put no deuterium at the interface, so this is the right answer by a route the paper rules out. The trap program agrees with the paper's control instead: at 230 °C its H₂ rate is 6×10⁻⁵ of the 400 °C value and it caps 0.06% of its sites. Then 15 min at 600 °C in vacuum: the equilibrium program's placeholder rate gives 26% of the Pb back; the trap program's release, Brower's measured dissociation (2.56 eV, 1.2×10¹² s⁻¹, quoted by Stesmans 1996), gives 84% back from a passivated start (40 min in H₂ at 405 °C, then this anneal: 5.1×10⁶ to 4.5×10¹⁰ of 5.3×10¹⁰ cm⁻² eV⁻¹); Stesmans's own fit with its spread gives 53%. The paper sees none.
Against the computed reaction energies. This paper measures no rate and no activation energy, only temperatures at which signals go in 15 min. Its three hydrogen results set against the Quantum ESPRESSO numbers: (1) Atomic deuterium removes Pb at 230 °C. Capping by a free atom is downhill by the full bond energy, 3.54 eV (slightly more for Si–D, whose zero-point energy is smaller), with no barrier needed: consistent. (2) Molecular hydrogen from the aluminium removes Pb only between 250 and 350 °C. Capping from H₂ is downhill by 1.28 eV, so equilibrium is not what holds it back below 250 °C (equilibrium leaves 10⁻¹⁷ uncapped at 30 °C); a barrier is. (3) After deuteration, 600 °C does not bring Pb back. Equilibrium in vacuum is all uncapped, so this, too, is kinetic, and it is slower than any dissociation rate in the literature the project holds. The equilibrium bound is consistent with every Pb density this paper reports and decides none of them.
Heating and cooling transitions (section below). The four assumed heat-up and cooling scenarios leave the count at 2 of 13; the cold-furnace ramp moves 3 of 13 numbers by more than 2% (the thickness and the as-oxidized trap density, through the extra time near 1000 °C), the hot push none. The paper's anneals are short and at 250 to 600 °C, where no program here has anything that responds to a ramp.
2 within, 3 off, 8 not modelled of 13 numbers with the aligned settings.
| Sample | Quantity | The paper | As reproduced above | Aligned | Difference | Verdict | How |
|---|---|---|---|---|---|---|---|
| MOS capacitor, 116 nm, as oxidized | interface state density at 0.30 eV above Ev (DLTS) | 6.60e+12 cm⁻² eV⁻¹ | no program | no program | not modelled (±15%) | chosen on these numbers | |
| MOS capacitor, 116 nm, as oxidized | interface state density near midgap, 0.55 eV (DLTS) | 2.50e+12 cm⁻² eV⁻¹ | 1.06e+11 | 1.06e+11 | -96% | off (±15%) | chosen on these numbers |
| MOS capacitor, 116 nm, as oxidized | oxide thickness | 116 nm | 115 | 114 | -1% | within (±10%) | chosen on these numbers |
| MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min | interface state density at 0.30 eV above Ev (DLTS) | 2.55e+12 cm⁻² eV⁻¹ | no program | no program | not modelled (±15%) | chosen on these numbers | |
| MOS capacitor, 116 nm, vacuum anneal 400 °C 15 min | interface state density near midgap, 0.55 eV (DLTS) | 1.30e+12 cm⁻² eV⁻¹ | 1.06e+11 | 1.06e+11 | -92% | off (±15%) | chosen on these numbers |
| MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min | interface state density at 0.30 eV above Ev (DLTS) | 3.50e+11 cm⁻² eV⁻¹ | no program | no program | not modelled (±29%) | chosen on these numbers | |
| MOS capacitor, 116 nm, vacuum anneal 450 °C 60 min | interface state density near midgap, 0.55 eV (DLTS) | 7.40e+11 cm⁻² eV⁻¹ | 1.06e+11 | 1.06e+11 | -86% | off (±15%) | chosen on these numbers |
| ESR wafer, 200 nm, with aluminium, vacuum 275 °C 15 min | spin density (Pb), share of the level before the loss | 0.85 (Fig. 2 units) | no program | no program | not modelled (±10%) | chosen on these numbers | |
| ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min | spin density (Pb), share of the level before the loss | 0.42 (Fig. 2 units) | no program | no program | not modelled (±10%) | chosen on these numbers | |
| ESR wafer, 200 nm, with aluminium, vacuum 300 °C 15 min | oxide thickness | 200 nm | 201 | 201 | +1% | within (±10%) | chosen on these numbers |
| ESR wafer, 200 nm, with aluminium, vacuum 325 °C 15 min | spin density (Pb), share of the level before the loss | 0.14 (Fig. 2 units) | no program | no program | not modelled (±21%) | chosen on these numbers | |
| ESR wafer, 200 nm, without aluminium, vacuum 425 °C 15 min | spin density (Pb), share of the level before the loss | 0.83 (Fig. 2 units) | no program | no program | not modelled (±10%) | chosen on these numbers | |
| ESR wafer, 200 nm, without aluminium, vacuum 475 °C 15 min | spin density (Pb), share of the level before the loss | 0.37 (Fig. 2 units) | no program | no program | not modelled (±10%) | chosen on these numbers |
What alignment cannot fix. Hydrogen that does not come from the gas. The paper's two hydrogen sources, the aluminium film during a vacuum anneal and atomic deuterium from a remote plasma, cannot be written. Every program here reads hydrogen only as p_H2 in the gas. Forming gas as a stand-in gives the equilibrium program hydrogen everywhere at once with no temperature threshold, and gives the trap program Brower's 1.66 eV for H₂, which puts its threshold near 400 °C instead of the paper's 250 °C. A metal film that releases hydrogen and an ambient of atomic hydrogen are both missing.
One release barrier, and rates for H₂ only. The trap program's passivation rate is fitted at one temperature (400 °C, Vitkavage) and carries Brower's 1.66 eV away from it; its release is Brower's single barrier (2.56 eV, 1.2×10¹² s⁻¹). The equilibrium program's rate is a placeholder. After atomic deuterium the paper sees no Pb return at 600 °C, where Brower's single barrier returns 84% and Stesmans's spread of barriers (σ = 0.105 eV) still 53%: neither a spread of release barriers, which the program also lacks, nor anything the program has explains it; a slower Si–D release or deuterium held nearby would have to.
Interface states are not Pb here. The paper's central result is that Pb goes 100 to 150 °C below the 0.3 eV peak. Both programs make interface states out of one population of dangling bonds (the trap program's second population is set to nothing on (111)), so they cannot separate them. The paper's DLTS values are also 20 times the trap program's as-oxidized density; the program was found on another laboratory's (111) wafers measured after forming gas, and on unannealed (111) it is outside its fitted range.
Vacuum that removes Pb. Without aluminium and without hydrogen in the gas the spin signal goes between 400 and 525 °C. In Stesmans 1996 a vacuum anneal of passivated Pb brings it back above 480 °C. No program here has a source of hydrogen inside the oxide, or a vacuum that is not pure, that could do what Johnson sees.
What our language and ontology cannot yet say
- An ambient of atomic hydrogen. “Annealing … in atomic deuterium at 230 °C” downstream of a plasma has no word. It needs a species (H or D atoms) with a flux or an arrival rate at the surface (cm⁻² s⁻¹) rather than a partial pressure, since the atoms recombine on the walls; e.g.
AMBIENT atomic:D FLUX 1e15. With it, a kinetic program could cap Pb at the rate atoms arrive at the interface, which this paper shows happens at 25 to 230 °C (Fig. 5). - A film as a hydrogen source. The aluminium releases hydrogen during the anneal; the same anneal without it does nothing below 400 °C. A
FILM Al { RELEASES: H }on the sample, read by hydrogen programs as a source term during any RUN, would let a post-metallization anneal in vacuum or nitrogen be written as what it is. The ontology has process factor hydrogen-anneal for a gas, nothing for a film. - Isotopes. Deuterium is written as hydrogen or not at all.
D2in the gas list (and D in the atomic ambient) with masses carried into the zero-point energy (a computed ph.x number with deuterium masses) and into any rate prefactor would let the paper's “not regained up to 600 °C” be compared with Si–H dissociation rates on the right basis. - A kinetic hydrogen program (see also Stesmans 1996): the trap program now has passivation from H₂ with Brower's 1.66 eV and release with Brower's 2.56 eV, sourced, not computed. This paper's with-Al series needs a passivation by atomic hydrogen besides, and its deuterated series a release slower than Brower's. Both barriers can be computed on the H100 with neb.x, from the relaxed cluster for H₂ + Pb and from a (111)/SiO₂ slab for dissociation into a bound site; the Stesmans page gives the plan.
- Spin density as an observable, with its units. Fig. 2 is in arbitrary units with one absolute anchor (6×10¹¹ cm⁻² as oxidized). A target
Pb_spin_densityin cm⁻² with a declared normalization (RELATIVE TO <case>) would let both programs be scored on Pb directly instead of on a share. - A series on one sample. Whether the isochronal anneals of Fig. 2 are one specimen annealed in turn is not stated. The language cannot write either reading as one statement;
REPEATover temperatures with an observation after each pass would, and an alignment could then treat the reading as a variant. - Interface states at an energy without a hydrogen step. The trap program reports a spectrum only after hydrogen, from the shape of one annealed curve. The as-oxidized (111) peak at 0.3 eV, 6.7×10¹² cm⁻² eV⁻¹, here and in Vitkavage, has no program at all.
With heating and cooling transitions
No paper we hold states how its wafers heated up or cooled down. The project owner specified scenarios for one Vitkavage wafer (isl_harness/vitkavage_transitions.py); isl_harness/thermal_transitions.py applies the same numbers to every sample here: a heat-up in nitrogen before the first furnace step (a hot push of 1 to 5 min, or a cold-furnace ramp of 60 to 120 min), the owner's radiative cooling knots after the last furnace step or after the paper's own pull (fast, or every time multiplied by 5), and ramps around an anneal at 300 to 500 °C. The paper's own steps are kept as written. All transitions are assumptions, written in the history with TIMING assumed.
| History | Within tolerance | Median error | Changed numbers |
|---|---|---|---|
| as the paper states it (above) | 2 of 13 | 85.7% | |
| heat-up A (hot push), fast cooling | 2 of 13 | 85.8% | 0 of 13 moved by more than 2% |
| heat-up A (hot push), slow cooling | 2 of 13 | 85.8% | 0 of 13 moved by more than 2% |
| heat-up B (cold-furnace ramp), fast cooling | 2 of 13 | 86.1% | 3 of 13 moved by more than 2% |
| heat-up B (cold-furnace ramp), slow cooling | 2 of 13 | 86.1% | 3 of 13 moved by more than 2% |
The paper's own conclusions
| The paper states | What we find | |
|---|---|---|
| A vacuum anneal of the capacitor at 400 °C for 15 min lowers the 0.3 eV peak by about 60%; 450 °C for 60 min removes it (p. 2, Fig. 1) | No program changes the interface states in a vacuum anneal at 400-450 °C: the trap-density program's relaxation is negligible there and its hydrogen step needs hydrogen in the gas | not reproduced |
| With aluminium the Pb signal falls between 250 and 350 °C (15 min); without aluminium between 400 and 525 °C (p. 2, Fig. 2) | Without a hydrogen step no program reports Pb. Written with the aluminium as forming gas, the equilibrium program removes Pb at every temperature including 30 °C; the trap program, whose H₂ rate carries Brower's 1.66 eV, removes 0.06%, 0.26% and 1.1% of its sites at 275, 300 and 325 °C, 180 to 330 times too slow: the aluminium supplies atomic hydrogen, which H₂ in the gas does not stand for | not reproduced |
| Pb goes below 300 °C, the interface-state peak above 400 °C: Pb is not the characteristic peak (p. 4-5) | Both programs tie the interface states to the same population of dangling bonds; the separation cannot appear | not in the program |
| Atomic deuterium at 230 °C removes Pb, and vacuum anneals up to 600 °C do not bring it back (p. 2) | The language cannot write atomic deuterium. Written as molecular hydrogen at 230 °C, the equilibrium program caps Pb and its assumed rate returns 26% of it at 600 °C; the trap program caps almost none (0.06%), its H₂ rate at 230 °C being 6×10⁻⁵ of its 400 °C value. From a passivated start the trap program's release (Brower's) returns 84% in 15 min at 600 °C | partly |
| Deuterium accumulates at the interface after atomic but not molecular deuterium, and stays to above 500 °C (Figs 3-6) | No program carries hydrogen in the oxide | not in the program |
What we would like Emily to check
- Without aluminium and without any hydrogen in the gas, the spin signal disappears in vacuum between 400 and 525 °C (Fig. 2). Is the hydrogen already in a 200 nm dry oxide (from the furnace or the rapid cool) enough to cap 6×10¹¹ cm⁻² of Pb? Or was the 1981 vacuum poor enough to supply water?
- Stesmans and Afanas'ev see the opposite in a diffusion-pumped vacuum (≤4×10⁻⁷ Torr): Pb returns above 480 °C. Is the difference the starting state (passivated or not), the vacuum, or the oxide?
- After atomic deuterium the spin signal stays away after 15 min at 600 °C, while Brower's dissociation rate (2.56 eV, 1.2×10¹² s⁻¹), which the trap-density program uses, would bring most of it back (84%). Would Si–D dissociate that much more slowly than Si–H, or does the atomic-deuterium exposure do more than cap Pb?
- Is 6×10¹¹ cm⁻² a usual as-oxidized Pb density for (111) at 1000 °C with no post-oxidation anneal, against Stesmans's 4.7×10¹² after dissociation?