Mikrofab SuiteMikrofab SuiteMeasurement & Analysis
Manual  /  9. Data, Database, Lab Notebook, Recipe & Script
TR
Simulation · v5.85.0

Data, Database, Lab Notebook, Recipe and Script

This chapter fully describes every data-handling layer of the Mikrofab semiconductor / TFT / PV measurement and analysis software: the SQLite database that stores measurement summaries and the Data & Search panel that filters it, the sample-centric Lab Notebook (Journal / ELN), the Recipe tools that generate automated measurement sequences, headless operation together with the local REST API, the Python Script / Console workspace, and finally presets / configuration / favorites / user modes. The goal is to let you manage the entire data flow — from a single measurement to an archive of hundreds, and from there to overnight automation and remote control.

ℹ️
Note The software's data philosophy rests on the "summary database + raw file" principle. Raw measurement series (the Vds/Vgs/Ids/Igs values of every point) are always kept on the file system (CSV / TXT / XLSX / HDF5 / JSON); only a summary (metadata + extracted metrics + the path of the related file) is written to the database. This keeps the database small and fast, so questions like "across 100+ measurements, which TFT has the highest Ion/Ioff?" are answered instantly.
🎓 What is it for? — Working with Data: Storage, Search and Automation

The job is not finished once you take a measurement: you need to store that data safely, find it again months later and replot it, query which device performed best, and have the same test repeat itself overnight. This chapter explains the software's "record-keeping and automation" side: the database that shelves measurements like a library, the lab notebook that keeps a sample's fabrication story, self-running recipes, and the headless mode that does the work via commands without opening a screen.

  • Why it is done: to turn individual measurements into a searchable, non-losing archive and into automation that runs without a human at the keyboard.
  • What it teaches / measures: where and how data is stored, how it is filtered and compared, and how it is generated automatically.
  • Where it is used: research, quality control and long-term stability studies where many devices are measured.

1. Overview of the Data Architecture

The software manages user data across three separate SQLite databases plus raw outputs distributed on the file system. All of them live under your user-data root (user_data_root) and none are written to the installation directory.

StoreFileContentAccess layer
Measurement summary DBmeasurements.dbA summary of every completed measurement + analysis resultsMeasurementDatabase
Lab Notebook DBjournal.dbSample headers + process-step cardsJournalDatabase
Raw measurement filesmeasurements/<run-folder>/…CSV / TXT / XLSX / JSON / HDF5 / reportDataWriter
Attachmentsjournal/sample_<id>/attachments/Images attached to a samplefile system
Configurationconfig/user_config.jsonUser settings, view profilesConfigManager
Presetspresets/<panel>/<name>.jsonNamed parameter setsPresetManager

All databases conform to the same database standard: single-gateway data access (all queries parameterized — no SQL injection), schema versioning + forward migration (automatic backup before migration), append-only + soft-delete (deleted_at), a full audit trail (audit_log), WAL journal mode, and the backup() / check_integrity() maintenance functions.

Overview of the data workspace and the measurement database panel
Figure. The data workspace: the measurement summary database, filters and column layout.

2. Measurement Database (measurements.db)

🎓 What is it for? — Measurement Database

The measurement database is a small, fast ledger that keeps a summary of every completed measurement like a library catalog card. All of the raw numbers stay in files; only a "who, when, which mode, which result" summary and the path of the related file are written to the database. This lets you search and sort across hundreds of measurements within seconds.

  • Why it is done: to answer questions like "which TFT has the highest Ion/Ioff?" without opening hundreds of files one by one.
  • What it teaches / measures: it shows each measurement's extracted metrics (Vth, mobility, SS, On/Off …) together with its context (geometry, device, time).
  • Where it is used: finding the best device in multi-measurement archives, comparing results and reporting.

2.1 Which fields are written?

When a measurement completes successfully and its files are saved, the software automatically adds a summary row (MeasurementDatabase.record). Geometry and measurement conditions, all extracted metrics and the device identity fall into this row; in addition, anything without a corresponding schema column is stored as a full capture in the params_json / summary_json columns (no data is lost).

Identifier and context fields

ColumnTypeDescription
idINTEGERAuto primary key
recorded_atTEXTTime recorded (local ISO)
started_atTEXTMeasurement start time
tft_idTEXTSample / device identifier (Lab Notebook bridge)
modeTEXTMeasurement mode (TRANSFER, IV, DIODE, PV_JV …)
software_versionTEXTSoftware version that took the measurement
point_countINTEGERTotal number of data points
csv_pathTEXTPath of the related raw CSV file (loaded by double-click)
user_comment / noteTEXTUser comment / analysis note

TFT / On-Off metrics (Transfer mode)

ColumnUnitDescription
ion, ioffAOn / off state current
ion_ioffOn/off ratio
ion_ioff_robust, ioff_robust, ioff_std—, A, ARobust Ioff estimate + scatter
vthVThreshold voltage (method via extraction_method)
vth_y_v, mu0_y_cm2_vs, y_r2V, cm²/Vs, —Y-function method results
mu_fecm²/VsField-effect mobility
ssmV/decSubthreshold swing
ss_r2SS linear fit quality
gm_max, gm_max_vgsS, VMaximum transconductance + the Vgs at which it occurs
dit_cm2_evcm⁻²eV⁻¹Interface trap density
vth_fwd_v, vth_bwd_v, delta_vth_vVForward/backward Vth + hysteresis shift
hysteresis_window_vVHysteresis window

Output (IV / Output) metrics

ColumnUnitDescription
ron_ohmΩOn-state resistance
output_resistance_ohmΩOutput resistance (rₒ)
lambda_per_v1/VChannel-length modulation (λ)
vth_sat_v, mu_sat_cm2_vs, mu_sat_r2V, cm²/Vs, —Vth / mobility from saturation

Diode / Schottky metrics

ColumnUnitDescription
forward_currentAForward current
reverse_leakageAReverse leakage current
turn_on_voltageVTurn-on voltage
rectification_ratioRectification ratio
series_resistance_ohmΩSeries resistance
ideality_factorIdeality factor (n)

Geometry and device conditions: w_um, l_um (µm), cox_nf_cm2 (nF/cm²), nplc, averages, sweep_direction, keithley_idn, visa_resource, drain_channel, gate_channel, relay_enabled.

Tip Metrics such as mobility are written to the database as an extracted value; the raw formula and computation are described in the relevant analysis/measurement chapter. For example, saturation mobility is computed via µ_sat = (2L / (W·Cox)) · (∂√Ids/∂Vgs)² and lands in the mu_sat_cm2_vs column; the associated fit quality goes into mu_sat_r2. The database only stores and searches these values.

2.2 Schema version, migration and durability

The database schema is versioned (schema_version); the current version is 4. An old database is upgraded to the latest version in a single step on first open without losing data (v1 → v2 → v3 → v4). The migration steps:

  • v1 → v2: Soft-delete column (deleted_at) + audit_log table + indexes.
  • v2 → v3: All collected/computed metric columns (the tables above) + the params_json / summary_json full-capture columns.
  • v3 → v4: A separate analysis_results table for analysis results.
⚠️
Warning For a database that holds user data, an automatic backup is taken before migration (db_backups/measurements.pre_migration_vN.<time>.db). Thanks to WAL (Write-Ahead Logging) journal mode, records stay consistent even if the application crashes.

2.3 Data & Search Panel — filtering, sorting, column selector

🎓 What is it for? — Data & Search Panel

This panel is a screen that queries the database live, a cross between a search engine and a spreadsheet: with sample/mode filters, free-text search and sorting by metric, you quickly find the record you are after. You can choose which columns appear and save that layout as a "view profile".

  • Why it is done: to instantly sift through a large pile of measurements and surface the best/relevant records.
  • What it teaches / measures: it presents records as a sorted, comparable table by the metric you choose (e.g. Ion/Ioff, µFE).
  • Where it is used: device screening, batch comparison and quick quality-control sweeps.

The panel in the data workspace (DatabasePanel) queries the database live. At the top there are three filters + one sort control:

ControlFunction
TFT dropdownOnly records of the selected sample/device (auto-populated from the database)
Mode dropdownOnly the selected measurement mode
Search boxFree text; LIKE search within user_comment, note and csv_path
Sort dropdownDatabase query order (table below)

The top "Sort" list determines the query's ORDER BY order; empty (NULL) values are always pushed to the end, so empty rows do not float to the top in "highest metric" queries:

LabelColumnDirection
Daterecorded_atDescending
Ion/Ioffion_ioffDescending
µFEmu_feDescending
SSssAscending (smaller is better)
VthvthAscending
Ronron_ohmAscending
µ_satmu_sat_cm2_vsDescending
Point countpoint_countDescending

Two-tier sorting: In addition to the query order, you can click any column header to re-sort the loaded rows client-side by that value (numeric/textual). Numeric columns are sorted as true numbers, including text such as "3.832e+05".

Column selector and view profiles: With the "Columns…" button (or the header right-click menu) you choose which columns are shown and their order. Columns are moved by drag-and-drop or with the To Top / Up / Down / To Bottom buttons. You can save a layout as a named view profile; a profile stores not only the columns but also the top sort selection and the filters — when selected, all of them are restored together. The selection is written to the configuration (db_view_profiles, db_visible_columns, db_column_order, db_active_profile).

2.4 Loading a result into the plot by double-click

When you double-click a table row, the raw measurement file at that record's csv_path field is opened via a signal (file_activated) and reloaded into the measurement plot — the curve is redrawn. This lets you visually review a sweep taken weeks ago with a single click. File reading is done with DataWriter.read_points_csv (columns map exactly).

Tip Double-click only works for records whose csv_path is populated. If you leave this field empty in manually added records, double-click does nothing; you can enter a file path by hand if you wish.

2.5 Manual add / edit / delete / undo

The panel is not read-only; all write operations pass through the data-access layer and are written to the audit trail:

  • Add: Opens a blank form; numeric fields are parsed, empty ones become None. If recorded_at is empty it is assigned automatically (add_manual, audit: create).
  • Edit: Opens the selected record in the same form; only whitelisted columns are written, and the previous state is recorded to the audit trail via before_json (update_measurement).
  • Delete (soft): The default deletion. The record is marked with deleted_at, hidden from queries but its data remains (soft_delete). With Ctrl/Shift you can multi-select and delete in bulk.
  • Undo: Restores a soft-deleted record (restore).
  • Hard Delete: Exceptional; first takes an automatic file backup, then deletes the row entirely (hard_delete, audit mandatory).
  • Show deleted checkbox: when ticked, soft-deleted records appear grayed out and struck through.
⚠️
Warning Although "Hard Delete" is written to the audit trail, it cannot be undone (recovery is only possible from the automatic backup). For routine cleanup, always prefer soft delete.

2.6 Analysis results table (analysis_results)

This separate table, introduced with schema v4, holds the results produced by the Analysis chapter (oscilloscope I-t / V-t, spectral, noise, PV metrics, etc.). Columns: recorded_at, title, analysis_type, source_file, source_kind, tft_id, user_comment, note, point_count, result_json, series_json, params_json. Computed results and parameters are stored in JSON columns; listing/filtering is done by analysis_type, tft_id and free text (list_analyses). It shares the same soft-delete + audit pattern as the measurement table.

3. Sample Journal (Lab Notebook / ELN)

🎓 What is it for? — Sample Journal (Lab Notebook / ELN)

The Lab Notebook is a digital sample dossier that keeps each sample's full history, from fabrication to measurement, as cards. It gathers every step — cleaning, thin-film, lithography, annealing — along with its photographs and the resulting measurements under a single sample.

  • Why it is done: to answer "why did this device turn out this way?" by relating fabrication steps to results.
  • What it teaches / measures: it shows a sample's process history and the electrical results bound to it (the tft_id bridge) in one place.
  • Where it is used: process development, reproducibility tracking and traceable/accredited laboratory records.

The Lab Notebook is a sample-centric electronic lab notebook (ELN). When you fabricate a material/sample, you record the fabrication steps (thin-film, lithography, etch, anneal, measurement, note …) as cards, attach images, and link this application's measurements (via the tft_id bridge).

Sample-centric Lab Notebook (ELN) card gallery and sample detail view
Figure. Lab Notebook: sample cards, process steps and the measurement bridge.

3.1 Two tables: samples + sample_steps

TableRow meaningKey fields
samplesA fabricated sample / wafer / diesample_id (unique), title, status, operator, facility, batch_lot, parent_wafer_id, substrate_material, active_material, ambient_temp_c, ambient_rh_pct, cleanroom_class, tags, notes
sample_stepsA process-step card belonging to that sampleordinal (order), step_type, title, params_json, attachments_json, linked_measurement_id, note

sample_id is the user-facing identity of the sample and corresponds to the tft_id field of measurements — this is the bridge between the Lab Notebook and the measurement database. Raw images are not in the database but under journal/sample_<id>/attachments/; the database only keeps the path.

3.2 Quick-add and the combined Sample ID

At the top of the list page there are four fields: Sample ID (type or pick from the list), an optional Date, a Comment and an Operator. These are combined live into a single DB-safe identifier:

Formula sample_id = base[-YYYY-MM-DD][-comment][-operator]

For example, with base TFT-ZnO, date enabled, comment rev1TFT-ZnO-2026-06-22-rev1. Spaces within parts become _ and invalid characters are dropped. When the Sample ID is empty the gallery cards are disabled; a live preview of the combined identifier (→ …) appears at the top.

The gallery in the left column consists of clickable cards that are grouped into categories, just like the Measurement page, and wrap to the available width with drag-and-drop (FlowLayout). When you click a card: the sample is found-or-created using the combined identifier, the corresponding step_type card is added, and the sample detail opens.

Supported step (card) types (by category):

GroupStep types
Core processcleaning, materials, thinfilm, tempprofile, anneal, litho, etch, process, checklist, diagram, measurement, note
R&D extensionaim, bom, equipment, contact, timeline, wiring, reference, document, xrd, microscopy, spectroscopy, test, standard, safety, protocol, signoff, result, statistics

3.4 Sample detail and the measurement bridge

The detail page splits the header fields into logical sections: Identity (sample_id, title, status, operator, facility, batch/lot, parent-wafer, location, revision), Substrate (material, supplier, size, thickness, orientation, doping type/density, active material), Ambient (temperature, relative humidity, cleanroom class) and Notes (tags, free note). Every header change is written to the audit trail. Step cards are arranged in ordinal order in a 1–3 column grid depending on screen width. A measurement card can link a record in the measurement database via linked_measurement_id; this unifies the sample's process history and its electrical results in one place.

ℹ️
Note The sample ID is UNIQUE indexed; two samples cannot be created with the same identifier. If you soft-delete a sample, its steps are hidden along with it; when restoring you may need to bring the steps back manually.

3.5 Example Lab Notebooks — 10 fully populated demo samples

The software ships with an empty Lab Notebook (ELN); however, the value of most features is hard to grasp without seeing "what a full notebook looks like." For this reason, 10 example samples representing ten different work areas are shipped with the application. Each sample follows a real laboratory scenario (microfabrication, project planning, analysis, measurement campaign, solar cell, RRAM, piezoelectric, dielectric, quality/calibration and materials characterization) from start to finish: with process steps, measurement links, result cards and Turkish HTML reports that open with a single click.

🎓 What is it for? — Example notebooks

These demos are a "teaching showcase": before you fill the notebook yourself, they show what a well-kept electronic lab notebook (ELN) looks like.

  • Traceability — substrate/material data sheet, operator, facility, batch-lot and the timestamp of each step bring a sample's entire history together in one place.
  • Process-step cards — show with live examples how each card family is filled in: cleaning, thin-film, lithography, etch, temperature profile, measurement, statistics, result, sign-off.
  • Result → report chain — shows what the printable/emailable Turkish HTML report, generated from the notebook's data with a single click, looks like.
  • Different types of work — not only measurement; examples of how project planning and quality/calibration notebooks are kept with the same tool.

Loading the demo

There are two ways to see the demo live. The application reads Lab Notebook data from the journal.db file in the user-data folder; the demo is a pre-populated copy of that file.

  1. Back up your own notebook. Copy your existing journal.db file in the user-data folder to a safe place (to restore after the demo).
  2. Copy the demo. Copy the examples/journal_demo/journal.db file into the user-data folder (over the existing one).
  3. Switch to the Lab Notebook workspace. Open the application and switch to the Lab Notebook area from the left rail; the 10 example samples are listed in the gallery, and you can click each to inspect its steps and reports.
  4. Restore the backup when done. Copy the backup you took in step 1 back into the user-data folder; your own notebook returns intact.

Alternative (no application): If you only want to see the reports, it is enough to open the HTML files under examples/journal_demo/raporlar/ (or the Open links in this manual) directly in a browser; there is no need to launch the application.

ℹ️
Note The script that produces the demo does not touch your own journal.db file; all demo output is written only to the examples/journal_demo/ folder. Since you perform the copy step above yourself, backing up your own notebook before the demo is the only important step.
The 10 example demo samples laid out in the Lab Notebook gallery: IGZO TFT, RRAM DOE, photodetector, OFET array, perovskite cell, memristor, PZT disk, MOS-cap, calibration and ZnO characterization
Figure. The Lab Notebook gallery after the demo is loaded: all ten samples together with their status badges and data sheets.

The ten samples — summary

Sample IDTopicWork area / focusStatusStepsReport
IGZO-TFT-2026-014a-IGZO thin-film transistor on glassMicrofabrication + measurement (full flow)✓ Completed11Open
PROJ-RRAM-2026-DOEHfOₓ memristor material screeningProject planning (DOE)⌛ In progress7Open
PD-aSi-2026-007a-Si:H photodetectorAnalysis (responsivity / EQE / band)✓ Completed5Open
TFT-ARRAY-2026-0225-channel common-gate OFET arrayMeasurement campaign (transfer/output)✓ Completed7Open
PV-PSC-2026-031Perovskite solar cell (n-i-p)Solar cell (J-V, stability)⌛ In progress6Open
RRAM-HfO2-2026-018TiN/HfOₓ/Ti/Pt memristorRRAM (switching / endurance)✓ Completed5Open
PIEZO-PZT-2026-005PZT-5H diskPiezoelectric (RPS / RUS)✓ Completed5Open
MOSCAP-Al2O3-2026-009Al₂O₃ MOS capacitorDielectric (C-V / Mott-Schottky)✓ Completed4Open
QA-CAL-2026-Q2SMU calibration notebookQuality / calibration (ISO/IEC 17025)✓ Completed6Open
CHAR-ZnO-2026-013Sol-gel ZnO thin filmCharacterization (XRD / SEM / Raman)✓ Completed6Open

1. IGZO-TFT-2026-014 — a-IGZO thin-film transistor on glass ✓ Completed

The notebook's "flagship" example: it documents end-to-end, in 11 steps, the from-scratch fabrication and characterization of a bottom-gate / top-contact a-IGZO TFT. The steps follow a complete microfabrication chain: substrate cleaning (solvent + UV-Ozone) → Mo gate metal sputtering → gate patterning (Mask 1) → wet etch → PECVD SiO₂ gate dielectric → a-IGZO active layer sputtering → active island patterning (Mask 2) → e-beam Ti/Au source/drain (W/L = 100/20 µm) → 300 °C / 1 h post-anneal temperature profile → transfer characterization (Id–Vg) → lot closeout sign-off. The low-temperature (≤350 °C) process is kept as a reference lot for transfer to flexible substrates. Key result: µ_sat ≈ 11.4 cm²/Vs, Vth ≈ +0.8 V, SS ≈ 0.18 V/dec and Ion/Ioff ≈ 2×10⁸.

In-app detail view of sample IGZO-TFT-2026-014: data sheet, 11 process steps and transfer measurement results
Figure. In-app sample detail (11-step fabrication + measurement).
Rendered HTML report of the IGZO TFT fabrication notebook
Figure. Rendered report — open the original report.

2. PROJ-RRAM-2026-DOE — HfOₓ memristor material screening (planning) ⌛ In progress

This notebook is a project planning example rather than a measurement: it shows that the same ELN tool is also used to document a design of experiments (DOE). 7 steps set up the research flow: research question and hypothesis (aim) → material/purchasing list (bom) → project team and collaborators (contact) → key instrument: parameter analyzer (equipment) → project milestones (timeline) → measurement setup wiring diagram (wiring) → core reference paper (reference). The design is laid out as 3 oxygen ratios × 2 top electrodes = 6 conditions, with 8 devices per condition. Hypothesis: oxygen-poor (sub-stoichiometric) HfOₓ contains more oxygen vacancies → lower forming voltage but a narrower HRS/LRS window; the expected optimum is at a medium oxygen ratio (≈8% O₂). This notebook is the parent plan from which RRAM measurement notebook number 6 below (the O₂ = 8% condition) was born.

In-app view of the PROJ-RRAM-2026-DOE planning notebook: aim, BOM, team, equipment, timeline and reference steps
Figure. In-app planning notebook (7-step DOE skeleton).
Rendered HTML report of the memristor DOE planning notebook
Figure. Rendered report — open the original report.

3. PD-aSi-2026-007 — a-Si:H photodetector analysis ✓ Completed

An analysis notebook example: the temporal response and responsivity of a p-i-n hydrogenated amorphous silicon (a-Si:H) photodetector on ITO-coated glass are documented in 5 steps, with metrics extracted by the application's Analysis module. The steps: light/dark I-V + temporal response measurement → spectral responsivity (UV-Vis spectroscopy) → response-time statistics (10 measurements) → extracted photodetector metrics (result card against target) → comment / next-step note. Key result: dark current ≈ 1.2 nA @ −2 V, light (1 mW/cm²) current ≈ 38 µA; all metrics passed the specification and the device was found suitable for 530 nm visible-light detection. The next-step note suggests reducing the i-layer thickness from 500→350 nm to roughly double the bandwidth (at the cost of a slight drop in responsivity).

In-app view of the PD-aSi-2026-007 photodetector analysis notebook: I-V, spectral, statistics and result steps
Figure. In-app analysis notebook (5 steps, result card included).
Rendered HTML report of the photodetector analysis notebook
Figure. Rendered report — open the original report.

4. TFT-ARRAY-2026-022 — 5-channel common-gate OFET array ✓ Completed

A measurement campaign example: the transfer and output measurements of a p-type pentacene OFET array (single gate + dielectric, 5 source-drain channels, Ossila low-density mask) on a thermal SiO₂ / n⁺-Si common gate are collected in 7 steps. The steps: measurement instrument and relay board (SwitchMatrix) → probe and relay connections → Channel 1 transfer (Id–Vg, saturation) → Channel 1 output (Id–Vd family) → Channels 2–5 batch transfer → array uniformity statistics (5 channels) → array acceptance criteria (against specification). Key result: µ_sat ≈ 0.42 cm²/Vs, Vth ≈ −8.5 V, hysteresis ΔVth ≈ 1.2 V; the output curves show clean saturation (no evidence of contact resistance). The array was accepted; the uniformity (CV ~10%) was found typical for pentacene.

In-app view of the TFT-ARRAY-2026-022 OFET array measurement notebook: instrument, connection, channel measurements and statistics
Figure. In-app measurement campaign (7 steps, multi-channel).
Rendered HTML report of the OFET array measurement campaign notebook
Figure. Rendered report — open the original report.

5. PV-PSC-2026-031 — perovskite solar cell (n-i-p) ⌛ In progress

A solar cell (PV) notebook: the J-V performance and stability of an FA₀.₈₃MA₀.₁₇Pb(I₀.₉Br₀.₁)₃ perovskite n-i-p cell on FTO-coated glass are tracked in 6 steps (all processing in an N₂ glovebox). The steps: solution and layer materials (materials) → perovskite layer spin-coat + anti-solvent (thin-film) → J-V scan (forward + reverse) → PV performance metrics (against target) → stability tracking (MPP, 200 h) → lead (Pb) safety note. The film was recorded as "mirror-like reflective, dark brown" and pinhole-free. Key result (reverse scan): Voc = 1.12 V, Jsc = 23.4 mA/cm², FF = 0.78, PCE = 20.4%; hysteresis index HI ≈ 0.05 (low hysteresis). Because stability tracking is ongoing, the notebook is in the "In progress" state.

In-app view of the PV-PSC-2026-031 perovskite cell notebook: material, thin-film, J-V, result, stability and safety steps
Figure. In-app PV notebook (6 steps, J-V + stability).
Rendered HTML report of the perovskite solar cell notebook
Figure. Rendered report — open the original report.

6. RRAM-HfO2-2026-018 — TiN/HfOₓ/Ti/Pt memristor ✓ Completed

An RRAM / resistive-switching notebook: the switching behavior and endurance of an ≈10 nm sub-stoichiometric HfOₓ (50×50 µm) device grown by ALD — born from the O₂ = 8% condition of DOE plan number 2 — are documented in 5 steps. The steps: HfOₓ active layer — ALD (thin-film) → electroforming + DC switching (forming +3.2 V, current limit 1 mA; Keysight B1500A) → endurance cycling (MikroFab Endurance module) → endurance metrics (against target) → failure-analysis comment. Key result: V_SET ≈ +0.9 V, V_RESET ≈ −1.1 V, R_LRS ≈ 2.5 kΩ, R_HRS ≈ 180 kΩ (×72 window); after >10⁴ cycles the window began to close. The failure analysis attributes the closure to the redistribution of oxygen vacancies in the filament and recommends increasing the top-electrode Ti thickness (oxygen getter) in the next DOE round.

In-app view of the RRAM-HfO2-2026-018 memristor notebook: ALD, forming/switching, endurance, result and failure-analysis steps
Figure. In-app RRAM notebook (5 steps, endurance included).
Rendered HTML report of the RRAM endurance notebook
Figure. Rendered report — open the original report.

7. PIEZO-PZT-2026-005 — PZT-5H disk (RPS/RUS) ✓ Completed

A piezoelectric characterization notebook: resonant piezoelectric / ultrasonic spectroscopy (RPS/RUS) is carried out on a free PZT-5H ceramic disk (Ø10 × 1 mm) in 5 steps. The steps: sample and electrode (materials) → lock-in amplifier + furnace (equipment) → RPS frequency sweep → extracted piezo/elastic parameters (result) → method reference (RUS). In the sweep, the fundamental radial mode ≈ 210 kHz, the thickness mode ≈ 2.0 MHz; a Lorentzian fit yielded Q ≈ 420. The full elastic tensor Cᵢⱼ was extracted via an inverse elastic-tensor NLLS fit (Visscher solver). Key result: d₃₃ (relative) 590 ± 20 pC/N (≥550 ✓), elastic modulus E (VRH) 62 ± 3 GPa, shear modulus G 23 ± 1.5 GPa, Poisson's ratio ν 0.31, mechanical quality factor Q 420 (≥300 ✓); Zener anisotropy ≈ 1.4. The method is based on the RUS work of Migliori & Sarrao.

In-app view of the PIEZO-PZT-2026-005 piezoelectric notebook: sample, instrument, RPS sweep and elastic-parameter steps
Figure. In-app piezo notebook (5 steps, RPS/RUS).
Rendered HTML report of the PZT resonant piezoelectric spectroscopy notebook
Figure. Rendered report — open the original report.

8. MOSCAP-Al2O3-2026-009 — Al₂O₃ MOS capacitor ✓ Completed

A dielectric characterization notebook: C-V profiling and Mott-Schottky analysis of an Al/Al₂O₃/p-Si MOS capacitor with an ALD Al₂O₃ high-k dielectric on p-type Si (100) are documented in 4 steps. The steps: Al₂O₃ dielectric — ALD (thin-film) → multi-frequency C-V (1 kHz, 10 kHz, 100 kHz and 1 MHz; Vg −3→+3 V) → Dit by the conductance method + Mott-Schottky → dielectric/interface metrics (result). Key result: C_ox ≈ 380 nF/cm² → k(Al₂O₃) ≈ 8.6 (low frequency dispersion, good interface), EOT ≈ 9.0 nm, interface trap density Dit ≈ 2.3×10¹¹ eV⁻¹cm⁻² (≤5×10¹¹ ✓), and from the Mott-Schottky slope a doping density N_A ≈ 1.1×10¹⁵ cm⁻³ (consistent with the nominal value).

In-app view of the MOSCAP-Al2O3-2026-009 MOS capacitor notebook: ALD, multi-frequency C-V, Dit/Mott-Schottky and result steps
Figure. In-app MOS-cap notebook (4 steps, C-V + Mott-Schottky).
Rendered HTML report of the Al2O3 MOS capacitor C-V notebook
Figure. Rendered report — open the original report.

9. QA-CAL-2026-Q2 — SMU calibration notebook (ISO/IEC 17025) ✓ Completed

A quality / calibration notebook: it shows that the ELN can hold not only device records but also laboratory compliance records. The periodic SMU verification for Q2 2026 is documented in 6 steps. The steps: the primary instrument being calibrated (equipment) → the standards followed (standard) → verification test plan: source/measure (test) → laboratory electrical safety note (safety) → periodic verification procedure/SOP (protocol) → calibration sign-off and certificate (signoff). A traceable Fluke 8588A (certificate #FL-2026-0412) was used as the reference; the standards followed are ISO/IEC 17025, JCGM 100:2008 (GUM) and ASTM E2655. Key result: the instrument passed all verification tests; certificate #CAL-2026-0188 was issued, with the next verification date 2027-06-25.

In-app view of the QA-CAL-2026-Q2 calibration notebook: instrument, standards, test plan, safety, SOP and sign-off steps
Figure. In-app calibration notebook (6 steps, ISO/IEC 17025).
Rendered HTML report of the ISO/IEC 17025 calibration and compliance notebook
Figure. Rendered report — open the original report.

10. CHAR-ZnO-2026-013 — sol-gel ZnO thin-film characterization ✓ Completed

A multi-technique materials characterization notebook: the structural and morphological analysis of a c-axis oriented ZnO thin film grown by sol-gel spin-coat + 500 °C anneal on Si (100) and glass is collected in 6 steps. The steps: ZnO film — sol-gel spin-coat (thin-film) → XRD: phase and crystallite size → SEM + AFM: morphology and roughness → Raman: vibrational modes → structural characterization summary (result) → grain-size statistics (SEM, n=120). Key result: a strong (002) c-axis texture in XRD, crystallite ≈ 28 nm from the Scherrer equation ((100) 31.8° and (101) 36.3° weak); a dense, crack-free granular surface in SEM/AFM, average grain ≈ 30–40 nm, AFM RMS roughness ≈ 4.2 nm; in Raman a dominant E₂(high) 437 cm⁻¹ and a weak A₁(LO) 580 cm⁻¹ — a sharp E₂(high) indicates good crystallinity.

In-app view of the CHAR-ZnO-2026-013 characterization notebook: sol-gel, XRD, SEM/AFM, Raman, summary and grain-statistics steps
Figure. In-app characterization notebook (6 steps, XRD/SEM/Raman).
Rendered HTML report of the ZnO thin-film characterization notebook
Figure. Rendered report — open the original report.

4. Recipe

🎓 What is it for? — Recipe

A recipe is the way to run several measurements in a predefined order, like a cooking recipe, without standing over them. You set it up once; the software carries out the steps in order on its own, repeating them across many devices if you wish.

  • Why it is done: to relieve you of starting repetitive or long measurement sequences one by one by hand.
  • What it teaches / measures: it produces a standard flow (e.g. before/after stress, or measure → analyze → report) consistently and reproducibly.
  • Where it is used: stability/overnight tests, multi-device wafer sweeps and end-to-end automated reporting.

The recipe covers two distinct tools for running several measurements as an automated sequence: the classic "stress recipe" (stability/overnight tests) and the new cross-domain "pipeline" (Measure → Analyze → Calc → Report).

Recipe workspace: automated measurement sequence and pipeline view
Figure. The recipe workspace: the classic stress recipe and the modern pipeline.

4.1 Classic Recipe — Transfer-Before / Bias / Transfer-After

🎓 What is it for? — Classic Stress Recipe

The classic recipe is the standard way to measure how much a TFT degrades over time: it first takes a transfer curve, then subjects the device to voltage stress for a while, and finally takes a new transfer curve to show how much the threshold voltage has shifted (ΔVth). Like wearing out a tire on a long road and comparing before and after.

  • Why it is done: to measure the device's stability/lifetime and the threshold shift under bias.
  • What it teaches / measures: the post-stress threshold shift (ΔVth) and hysteresis; that is, the device's reliability.
  • Where it is used: stability tests that run for hours/overnight and reliability qualification.

The classic recipe is the standard flow for measuring TFT stability: take a transfer curve before stress, then apply bias-stress for a while, then take the post-stress transfer curve and observe the threshold shift (ΔVth). The recipe panel (RecipePanel) offers these controls:

  • Browsing the TFT list: Checkboxes are created from the tft_mapping keys in the configuration; the recipe is repeated in turn for each TFT you select. This lets you sweep many devices on a wafer with a single start in a relay/switch-matrix setup.
  • Sequence steps: "Transfer-Before", "Bias Stress", "Transfer-After" and "Dual axis" (dual-axis plot) checkboxes. You can turn off any step (e.g. stress only).
  • Role automation (relay): Before the flow starts for each TFT, the switch matrix is routed to that device's drain/gate channels; in modes other than DIODE, if relay_enabled is set, the relay configuration is applied automatically. The operator does not need to change cables.

The flow (RecipeMeasurementRunner) carries out the following for each selected TFT:

for tft in selected_tfts:
    [Transfer-Before]  → TransferSweep (Dual direction, log scale)
    [Bias Stress]      → BiasStress (Voltage Bias, duration + sampling interval)
    [Transfer-After]   → TransferSweep (Dual direction, log scale)

The transfer sub-sweeps are taken bidirectionally (Dual) so that hysteresis and ΔVth can be extracted; each step is tagged with its own user_comment (recipe transfer before / recipe bias stress / recipe transfer after).

Recipe parameters

ParameterUnitDescriptionDefault
selected_tftsList of TFTs over which the recipe is repeated["TFT 1"]
run_transfer_beforeTake transfer before stressTrue
run_bias_stressApply bias-stressTrue
run_transfer_afterTake transfer after stressTrue
transfer_vdsVFixed Vds of the transfer sub-sweep1.0
transfer_vgs_startVTransfer Vgs start-10.0
transfer_vgs_stopVTransfer Vgs stop10.0
transfer_vgs_stepVTransfer Vgs step0.5
stress_vdsVVds during stress1.0
stress_vgsVVgs during stress10.0
bias_duration_ssTotal stress duration3600.0
bias_sample_interval_ssStress sampling interval10.0
Tip — overnight tests You set up stability studies that run all night by using the classic recipe on its own (e.g. with bias_duration_s = 28800 for 8 hours) or by combining it with --repeat / --interval in headless mode. Because each point is written to disk immediately during long measurements (*_partial.csv), the data captured so far is preserved even if power is lost (see §5.4).

4.2 New Recipe Pipeline (Measure → Analyze → Calc → Report)

🎓 What is it for? — Recipe Pipeline (Measure → Analyze → Calc → Report)

The pipeline is an end-to-end chain that, within a single recipe, not only takes the measurement but also automatically analyzes, computes and turns the result into a finished HTML report, like an assembly line. The steps are connected by name; each step takes the output of the previous one as input.

  • Why it is done: to run the entire path from raw data to finished report without human intervention, reproducibly.
  • What it teaches / measures: it delivers the measurement + extracted metrics + report as a single, auditable output chain.
  • Where it is used: standardizing routine characterization and automated reporting (e.g. TFT On/Off, PV Jsc/Voc/FF/PCE).

The main view of the recipe workspace is the modern pipeline, which treats data as the single source of truth. A recipe is JSON made of sequentially connected, named, typed steps, and the human-readable Python view is generated from it (one-way; editing the recipe edits the JSON). The step types:

Step (kind)FunctionCore fields
measureRuns a measurement modename, mode, tft_id, params, required_capabilities
analyzeApplies an analysis module to a previous measurement / filename, module, source or path, params
calcRuns a calculation module with explicit inputsname, module, inputs
reportGenerates an HTML report from upstream stepsname, title, sources

Steps are connected by name: every producing step has a unique name; downstream steps reference the upstream output by that name (source / sources). During loading, validate_wiring checks the wiring (unique name, an analysis bound to exactly one source, report sources from previous steps). The recipe page presents the bundled example recipes (examples/recipes/*.json) in a dropdown, you can load your own recipe with "Open file…", and the "Legacy Recipe Tab" button opens the classic recipe runner.

The two bundled examples:

  • tft_transfer_pipeline.json — measure TRANSFER → analyze.tft_on_off (On/Off + Vth) → HTML report.
  • pv_jv_pipeline.json — measure PV_JV → analyze.pv_metrics (Jsc / Voc / FF / PCE) → report.
Example HTML measurement report produced by the pipeline
Figure. The pipeline's report step produces an integrity-sealed HTML report from the outputs of the upstream steps.
ℹ️
Note A pipeline recipe round-trips losslessly as JSON; no step carries executable code (the calc step carries only a module identifier + inputs). This provides a safe and auditable automation chain.

5. Headless Mode

🎓 What is it for? — Headless Mode

Headless mode means running the software from the command line without opening any window — like driving an instrument by remote control. You provide a job file, and the software performs the measurements on its own; if you wish, you control it from other programs via a REST API.

  • Why it is done: to set up scheduled and repetitive automation (especially overnight runs) without waiting at the screen.
  • What it teaches / measures: it produces the same measurements, but triggered by script/remote rather than by hand and repeated in loops.
  • Where it is used: overnight stability runs, server/automation pipelines and remote control.

Headless mode lets you run measurement/automation without opening the GUI: it is designed for overnight recipes, scheduled repeated measurements and remote control. The entry point is the --headless flag of main.py.

python main.py --headless --job examples\job_example.json
python main.py --headless --job recipe.json --output C:\olcumler --repeat 3 --interval 7200
python main.py --headless --serve 8765        # REST API server only

5.1 Command-line flags

FlagArgumentDescriptionDefault
--headlessRun without the GUIoff
--jobFILEJob JSON file to run
--outputFOLDEROutput folder (overrides the one in the job)job / measurements
--mockUse the mock (hardware-free) driverper job / True
--realUse the real device driver
--repeatNTotal number of cycles (scheduling)job / 1
--intervalSECONDSWait between cyclesjob / 0
--serve[PORT]Start the local REST APIport 8765
--hostADDRESSREST API host127.0.0.1
--smu-modelMODELReal device SMU model key (e.g. 2614B)
--smu-resourceVISAVISA resource (e.g. GPIB0::26::INSTR)
--formatsLISTExport formats (csv,txt,xlsx,hdf5)csv,txt,xlsx
--sequenceFILERun a general Sequence Builder JSON headless
⚠️
Warning --mock is the default. To connect to a real device you must pass --real (or "mock": false in the job) and provide the SMU model/resource information. The real-hardware path also preserves timeout + safe-state + mock-equivalent behavior (device-communication safety rules).

5.2 Job JSON schema

A job JSON file defines one or more measurements to run without the GUI.

KeyTypeDescriptionDefault
mockboolHardware-free simulationtrue
output_directorystrOutput folder"measurements"
relay_enabledboolSwitch-matrix automation (applied except for DIODE)false
schedule.interval_snumberSeconds between cycles0
schedule.repeatnumberTotal number of cycles1
measurements[]arrayMeasurement definitions (at least 1, required)
measurements[].modestrMeasurement mode (converted to uppercase)
measurements[].tft_idstrSample/device identifier"TFT 1"
measurements[].user_commentstrUser comment""
measurements[].paramsobjectMode-specific parameters (unknown fields are ignored){}
smuobjectReal-hardware SMU connection (model, resource){}
relayobjectReal-hardware relay connection{}

Valid mode values: IV, TRANSFER, DIODE, BIAS_STRESS, HW_SWEEP, HW_TFT_SWEEP, PULSED_IV, PV_JV, PV_PULSED_JV, PV_DARK_JV, PV_HYST, PV_MPPT, PV_BIAS_DELTA, PV_SUNS_VOC, PV_INTENSITY, PV_SOAK, PV_DEGRAD, PV_THERMAL, PV_CV, PV_CI, RECIPE. An unknown mode raises an error; for each mode only the parameter fields belonging to that dataclass are accepted, and the rest are silently dropped.

Example (examples/job_example.json): every two hours, three cycles; one TRANSFER + one IV.

{
  "mock": true,
  "output_directory": "measurements",
  "relay_enabled": false,
  "schedule": { "interval_s": 7200, "repeat": 3 },
  "measurements": [
    {
      "mode": "TRANSFER",
      "tft_id": "TFT 1",
      "user_comment": "Overnight stability test",
      "params": {
        "fixed_vds": 1.0, "vgs_start": -5.0, "vgs_stop": 5.0, "vgs_step": 0.25,
        "mobility_method": "Saturation", "w_um": 100.0, "l_um": 10.0, "cox_nf_cm2": 34.5
      }
    },
    {
      "mode": "IV",
      "tft_id": "TFT 2",
      "params": { "vds_start": 0.0, "vds_stop": 5.0, "vds_step": 0.5,
                  "vgs_start": 0.0, "vgs_stop": 5.0, "vgs_step": 1.0 }
    }
  ]
}

5.3 Repeat / interval (overnight tests)

With --repeat N --interval S (or schedule in the job), the measurements in the job are repeated for N cycles, waiting S seconds between cycles. At the start of each cycle === Cycle k/N === is logged, and for each measurement the start and result (point count + files written, or an error) are logged. The wait is done with an interruptible sleep; you can stop cleanly with Ctrl+C (the safe state is triggered). The return value is the number of failed measurements (0 = all succeeded); the process exit code is set to 0/1 accordingly.

Log console showing the cycle and measurement log during a headless run
Figure. The log console: for each cycle and measurement, the start, point count, files written, or error lines.

5.4 Outputs

Each run is written to a unique subfolder under your output folder: YYYY-MM-DD-<Day>-<Kind>-<HHMMSS> (e.g. 2026-06-12-Wed-PV-103045). <Kind> is the abbreviation of the measurement family (TFT / Thin / PV / Gen). The trailing hour-minute-second makes each run unique, so that no multi-machine conflict copies are created in synced folders such as OneDrive.

The files a measurement produces:

FileContent
<name>.csvRaw points (comma-separated)
<name>.txtRaw points (tab-separated)
<name>.xlsxExcel (measurement sheet + a separate "Summary" sheet)
<name>_metadata.jsonFull data sheet (device identity, parameters, summary, point count, early-stopped)
<name>_report.jsonCanonical integrity-sealed report (checksum included)
<name>_report.csvLocale-independent report CSV
<name>.h5(optional) Sealed HDF5 binary output
<name>_partial.csvCrash-resilient file updated at every point during the measurement (deleted on successful completion)
ℹ️
Note All side outputs (XLSX, report, HDF5) are written on a best-effort basis; even if one cannot be produced, the raw CSV/TXT and metadata.json are always preserved. If openpyxl is not installed, the software still produces a minimal XLSX with the standard library.

6. Local REST API

🎓 What is it for? — Local REST API

The REST API lets you manage the running measurement controller with HTTP commands like a remote control: start/stop a measurement, read the status and live data. This way another program, script or browser can drive the measurement from the outside.

  • Why it is done: to expose the measurement to other software/automation or to a remote machine.
  • What it teaches / measures: it returns the instantaneous status (running or not, how many points, last error) and the live data captured so far.
  • Where it is used: laboratory automation integration, remote monitoring and custom control panels (only on a trusted/local network).

The REST API started with --serve lets you control/monitor a running controller (HeadlessController) over HTTP. Only the Python standard library is used (no extra dependency), and by default it binds to localhost only (127.0.0.1).

Remote control / controller status page
Figure. The status view of the controller that can be remotely controlled via the REST API.

6.1 Endpoints

MethodPathFunctionResponse
GET/healthHealth + version{"ok": true, "version": "…"}
GET/statusController statusthe status object below
GET/data/live (or /measurement/data/live)All points captured so far{"points": [ … ]}
POST/measurement/startStart a measurement200 started / 409 busy / 400 invalid parameter
POST/measurement/stopStop the measurement safely{"stopped": true}

Unknown paths return 404. The /status object: running, mode, point_count, last_error, last_paths, last_point for the last point (step_index, vds, vgs, ids, igs, elapsed_s) and, if present, summary.

6.2 Request examples

The measurement start body: mode (required), tft_id (default "TFT 1"), params (mode-specific), relay_enabled (ignored for DIODE).

# Health check
curl http://127.0.0.1:8765/health

# Start a transfer measurement
curl -X POST http://127.0.0.1:8765/measurement/start \
     -H "Content-Type: application/json" \
     -d '{"mode":"TRANSFER","tft_id":"TFT 3",
          "params":{"fixed_vds":1.0,"vgs_start":-5,"vgs_stop":5,"vgs_step":0.25}}'

# Fetch live data
curl http://127.0.0.1:8765/data/live

# Stop
curl -X POST http://127.0.0.1:8765/measurement/stop

If a measurement is already running, a start call returns 409 ("Measurement already in progress"); if the parameters are invalid, 400 and an error message are returned.

Danger The API does not authenticate and speaks plain HTTP, which is why it binds to localhost only by default. If access over the network is required, provide an explicit address with --host but always keep it behind a trusted network / VPN / reverse proxy. Do not expose it directly to the open network.

7. Python Script / Console

🎓 What is it for? — Python Script / Console

The Script workspace lets you drive the measurement engine with your own sentences — Python commands — instead of ready-made buttons. You type in a terminal or write and run a small program, then plot and analyze the results in the same place.

  • Why it is done: to flexibly build custom measurement/analysis flows that the ready-made panels do not cover.
  • What it teaches / measures: it exposes measurement, SMU control, analysis and plotting as a fully programmable API.
  • Where it is used: R&D, custom experiment design and expert users who automate repetitive work.

The Script workspace drives the software's measurement core through a Python scripting API. It opens from the "Script" card on the left rail; it offers full programmability for experts and R&D. It runs against the Qt-independent app.scripting core.

Python Script / Console workspace: terminal, editor, plot and diagram
Figure. The Script workspace: a persistent terminal session, editor, plot and flowchart diagram.

7.1 Layout: Terminal + Editor, Plot + Diagram

  • Terminal (primary surface): Like a real terminal, it echoes the >>> input and prints the response inline. Multi-line input: Enter runs, Shift+Enter adds a new line, ↑/↓ navigates history, and multi-line paste works. Each submission runs on a worker thread against a persistent session, so wait(...) does not freeze the interface and variables are preserved between commands.
  • Editor: A full 15–20 line program. The Run / Diagram buttons on the toolbar act on the editor code; output streams to the same Terminal.
  • Plot: plot() calls overlay I–V curves (they stack within a run).
  • Diagram: Draws the recorded run trace as a flowchart; with Copy Mermaid it exports it as portable text (drawn automatically in the background with debounce as you type in the editor).

7.2 API functions (quick-access examples)

The quick-action buttons below the terminal place frequently used calls into the input:

ButtonExample call
run DIODErun("DIODE", voltage_start=0.0, voltage_stop=2.0, voltage_step=0.05)
run TRANSFERrun("TRANSFER", fixed_vds=0.1, vgs_start=-10, vgs_stop=10, vgs_step=0.2)
smusmu("drain").set_voltage(0.1, compliance_a=1e-3)
measuremeasure("drain")
select_tftselect_tft(1)
plotplot(res, title="IV")
analyzeanalyze(res, "diode_iv")

A typical script:

res = run("DIODE", voltage_start=0.0, voltage_stop=2.0, voltage_step=0.05)
extra = analyze(res, "diode_iv")
log(f"n={extra.ideality_factor}  I0={extra.saturation_current}")
plot(res, title="Diode")

7.3 Simulation / Live badge and safe state

The large colored badge on the toolbar shows the operating mode: green = Simulation (Mock), red = Live (real device). Scripts run in simulation by default (safe to write, hardware-free). You switch to Live by clicking the badge. When the mode is changed, "Stop" is pressed, you leave the workspace, or the session is reset while outputs are on, the software enters the safe state (output OFF + relay OFF) — a manually held bias never outlives the page.

⚠️
Warning If you turned on a real SMU output via a script in Live mode, "Stop" not only interrupts the running run but also turns off the outputs. Even so, for long experiments it is recommended to keep a physical safe-state (emergency stop) next to your instrument.

7.4 API export for AI and experts

There is no embedded artificial intelligence or network connection inside it. Instead: API for AI copies a single-page API definition to the clipboard/Markdown (which you give to your own AI assistant); API for Expert downloads a multi-file package (type stub .pyi + cheat sheet + examples ZIP). This way you can write the script with an external LLM and paste it here.

8. Presets, Configuration, Favorites and User Modes

Settings / configuration page: user profiles and feature flags
Figure. The configuration page: user settings, view profiles and feature flags.

8.1 Configuration (ConfigManager)

Settings are two-layered: the bundled default_config.json and the user user_config.json; the latter is deep-merged over the former (_deep_update). Some keys are deliberately not overridable by the user and always come from the default:

  • Safety limits (safety_limits): Per customer request, the software does not impose artificial limits; the limit is always read from default_config.json. This way a low value in an old user_config.json (e.g. 60 V) does not get stuck, and the higher value you enter is not rejected at the start of the measurement.
  • Feature flags (ui_lcr_pv, ui_rps, ui_dmm …) are also pinned: so that a blanket save() does not write back a stale false value and silently override a new default. To turn these off, environment variables (MIKROFAB_LCR_PV=0, MIKROFAB_RPS=0, MIKROFAB_DMM=0) are used.

8.2 Preset manager (PresetManager)

🎓 What is it for? — Presets (Named Parameter Sets)

A preset is saving your frequently used measurement settings under a name and recalling them with a single click — like the saved numbers on your phone. Because different materials/technologies want very different voltage ranges, you keep a separate preset for each.

  • Why it is done: to avoid re-entering dozens of parameters by hand for every measurement and to avoid mistakes.
  • What it teaches / measures: it stores a panel's entire parameter state as a named, reusable set.
  • Where it is used: quickly switching between different technologies such as a-Si / IGZO / organic and standard measurement setups.

It saves/loads named parameter sets to disk for each measurement panel. Different TFT technologies (a-Si, IGZO, organic) want very different parameter ranges; presets enable quick switching between these sets. The directory structure:

<root>/presets/<panel_key>/<preset_name>.json
OperationBehavior
list(panel)Returns the panel's preset names alphabetically
save(panel, name, state)Saves the state dictionary as JSON (name file-safe, ≤80 characters)
load(panel, name)Reads a preset and returns the state dictionary
delete(panel, name)Deletes the preset (silently passes if it does not exist)

8.3 Favorites / recently used and user modes

  • View profiles (Data panel): The named column/sort/filter layouts described in §2.3 act in practice as "favorite views"; you bring back frequently used analysis angles with a single click. The active profile is stored in the configuration (db_active_profile) and restored on startup.
  • Recently used recipes: The recipe page automatically loads the first of the bundled recipes on startup and preserves the last selection even across a language change.
  • User modes: The complexity of the interface scales to your role via the User Mode setting (Operator / Expert / Developer); advanced tools such as Script and headless typically come to the fore in Expert / Developer modes (for details see the Introduction chapter §11).

9. Backup and Integrity

🎓 What is it for? — Backup and Integrity

These tools protect the safety and soundness of your data like an insurance policy: they take a consistent copy of the database, test whether it is corrupted, and keep a who/when/why record of every change.

  • Why it is done: to protect against data loss, corruption and the uncertainty of "who changed this record?".
  • What it teaches / measures: it ensures the consistency of the backup, database integrity and a full audit trail.
  • Where it is used: routine backup and laboratories that require accredited (ISO 17025 / 21 CFR Part 11) traceability.

Each database (measurement + Lab Notebook) offers its own consistent backup and integrity check:

OperationDescription
backup(path=None)Takes a consistent copy with the SQLite online backup API; if no path is given, db_backups/…<time>.db
Pre-migration backupAutomatic before a version upgrade (pre_migration_vN)
Pre-hard-delete backupAutomatic before hard_delete (pre_hard_delete)
check_integrity()PRAGMA integrity_check; True if the database is sound
audit_trail(entity_id=None)Lists the audit records (all of them or for a single record)
Tip If you are aiming for an accredited (ISO 17025 / 21 CFR Part 11) laboratory setup, the audit trail (audit_log), soft-delete and pre-migration backup provide the foundation of that compliance out of the box: every create/update/delete/restore stores who (actor) and why (reason), along with a full snapshot before the change (before_json).
ℹ️
Summary This chapter covered every "data-handling" face of the software: the database where measurement summaries are intelligently searched and sorted and records that turn into a plot with a double-click; the Lab Notebook that keeps the sample lifecycle as cards; recipes that sweep a wafer with a single start and set up overnight tests; headless mode + REST API for GUI-less automation and remote control; the fully programmable Python console; and the preset / configuration / favorite / user-mode layer that personalizes all of these. They all share the same safe, auditable and durable data standard.