Skip to main content

Decoder-DeepONet (DDON)

Model and code of Decoder DeepONet (DDON) for electric-field reconstruction from EFISH measurements. This model is specifically designed for vertically polarized EFISH signals (for a vertically polarized probe beam).

Citation

If you use DDON, the web tool, or results generated with this model, please cite:

Yang, Z., Sugeng, E. S., Alicherif, M. and Chng, T. L. (2026). An interpretable operator-learning model for electric field profile reconstruction in discharges based on the EFISH method. Plasma Sources Science and Technology, 35(2), 025035.

DOI: 10.1088/1361-6595/ae413f

Choose how to use DDON

1. Online Web App — no installation

Run DDON directly in a web browser:

Launch the DDON E-field Reconstruction Web App

The web app supports preprocessed CSV and MATLAB MAT inputs. Inference is performed locally in the browser using ONNX Runtime Web.

For DDON, the EFISH polarization is fixed to vertical.

2. Local Packaged Inference — lightweight ONNX Runtime

This mode is recommended if you want to run DDON locally, especially for predictions of multiple EFISH profiles, without installing TensorFlow:

pip install ddon-efish

View ddon-efish on PyPI

The recommended input is a MATLAB MAT file containing:

  • Profile_Px.Px: $[z,P_x]$, size $(109,2)$
  • Profile_Px.u: phase-mismatch parameter $u$, size $(109,1)$
  • Profile_Px.Ex: normalized benchmark electric field $E_x$, size $(109,1)$, optional

A typical MATLAB input file can be prepared as:

Profile_Px.Px = [z(:), Px(:)];   % 109 x 2
Profile_Px.u  = u * ones(109,1); % 109 x 1
Profile_Px.Ex = Ex(:);           % 109 x 1, optional

save('Efish_vertical.mat', 'Profile_Px');

Python example using the MATLAB MAT file:

from ddon import DDON
from scipy.io import loadmat
import numpy as np

mat = loadmat(
    "Efish_vertical.mat",
    squeeze_me=True,
    struct_as_record=False
)

Profile = mat["Profile_Px"]

values = np.asarray(Profile.Px)       # [z, Px], shape (109, 2)
u = np.asarray(Profile.u).reshape(-1)[0]

model = DDON()

E = model.predict(
    values=values,
    u=u
)

print(E)

CSV input (optional)

from ddon import DDON
import numpy as np

values = np.loadtxt("input.csv", delimiter=",")

model = DDON()

E = model.predict(
    values=values,
    u=-0.35
)

print(E)

The verified ONNX model is downloaded automatically on first use and cached locally. This mode requires NumPy, SciPy, and ONNX Runtime.

3. Full Python Research Code — To be released

The full TensorFlow research implementation, including the original prediction, evaluation, and analysis workflow, is not included in the current public release and will be released separately in the future.

Full research implementation

The original TensorFlow research scripts are currently withheld from the public repository. The public web app and lightweight ONNX package remain available for inference.

Model versioning

DDON uses semantic model versions in the form vMAJOR.MINOR.PATCH (for example, v1.0.0).

  • Versioned releases such as DDON-v1.0.0 are reproducible snapshots and are not overwritten.
  • DDON-WEB points to the current stable ONNX model used by the Web App and lightweight local package.
  • Updating the stable model does not change older versioned releases.
  • The current stable model is v1.0.\n- Current Python package version: 1.0.1.

Model file

The current DDON TensorFlow model is available from the DDON release:

Download DDON-v1.0.0.h5

For the original TensorFlow sample, place the model under the model log directory.

Input preprocessing and E-field prediction

  1. Interpolate the EFISH profile to the recommended grid:

    $z/z_R = [-50:2:-24 , -22:1:-16 , -15:0.5:-1.5 , -1:0.2:1 , 1.5:0.5:15 , 16:1:22 , 24:2:50]$

    or

    $z/z_R = [-50:1:-2 , -1:0.2:1 , 2:1:50]$.

    The first grid is recommended and should be tried first.

  2. Normalize the coordinate using $z_{\mathrm{scale}}=50$:

    $z' = (z/z_R)/50$,

    so that $z' \in [-1,1]$. Crop the input EFISH profile if the normalized/scaled range extends beyond this interval.

    Sampling points outside the experimental range may be set to zero. The input range should preferably cover at least $4.2\times\mathrm{FWHM}$ of the normalized EFISH profile.

  3. Normalize the measured EFISH profile and, if available, the benchmark electric-field profile:

    $P_x^{\mathrm{norm}} = P_x/\max(P_x)$,

    $E_x^{\mathrm{norm}} = E_x/\max(E_x)$.

  4. Estimate the physical phase-mismatch parameter:

    $u=\Delta k \times z_R$.

    Input the physical value of $u$ directly. Do not normalize $u$ before input.

    The current DDON model automatically applies the required internal normalization,

    $u' = u/(-1)$,

    before inference.

  5. Import the preprocessed data and obtain the DDON prediction.

MATLAB input structure

Structure Field Description
Profile_Px Px $[z,,P_x/\max(P_x)]$: normalized coordinate and normalized EFISH; shape $[109,2]$
Profile_Px $u$ Physical phase-mismatch parameter $u=\Delta k \times z_R$; the web/local interfaces read the physical value and apply the required DDON normalization internally
Profile_Px Ex Optional normalized electric-field benchmark $E_x/\max(E_x)$ for comparison; shape $[109,1]$

Web and ONNX model

The browser and lightweight local modes use an ONNX version of DDON that is numerically verified against the TensorFlow model during the GitHub Actions conversion workflow.

© 2026 Zhijian Yang. All rights reserved.

Metadata

Release files for ddon-efish 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ddon-efish 1.0.1
File Size Uploaded
ddon_efish-1.0.1.tar.gz 5.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ddon-efish 1.0.1
File Interpreter ABI Platform
ddon_efish-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 12.4 kB

Release files / ddon_efish-1.0.1.tar.gz

Download URL ddon_efish-1.0.1.tar.gz
Size 5.8 kB
Tags Source
SHA-256 checksum
How to use checksums
946c0e3e642330ddcb30bdbd56f7787c02a79f1c7acc0cb54226da417816c43d
BLAKE2b-256 checksum
How to use checksums
bbdcce459fb511cd8898581b26442f16f78613ba1095720043d753a99491bce3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / ddon_efish-1.0.1-py3-none-any.whl

Download URL ddon_efish-1.0.1-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07132dd96e2565e2688bd2f22438b28f0cc8d44b4489605c69943590f6ef933f
BLAKE2b-256 checksum
How to use checksums
5f5ef026034fb6588a836e6aa4797a3a483463afd3ea8024a296fa57ae0dfb83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

1.0.3

2 release files

1.0.2

2 release files

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page