EFISH E-field Reconstruction

Decoder-DeepONet (DDON) · Stable model: v1.0

DDON is designed for vertically polarized EFISH signals.

MAT:
Profile_Px.Px = \([z,\,P_x]\), size \((109,2)\): normalized \(z\) and normalized EFISH \(P_x\).
Profile_Px.u, size \((109,1)\): phase-mismatch parameter \(u\).
Profile_Px.Ex, size \((109,1)\): normalized benchmark electric field \(E_x\) (optional).

CSV: exactly 109 points of normalized \(z\) and normalized EFISH \(P\).

Note: The input profiles \(P(z)\), \(E(z)\), and coordinate \(z\) should be pre-normalized and interpolated (to 109 points) following the preprocessing procedure in README.md.

MATLAB preprocessing sample

% Raw experimental data:
% z_raw   : measurement position
% Px_raw  : measured EFISH profile
% zR      : Rayleigh range
% delta_k : wave-vector mismatch

z_over_zR = z_raw ./ zR;

% Recommended 109-point DDON grid
z_grid = [-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]';

% Interpolate EFISH profile and normalize
Px = interp1(z_over_zR, Px_raw, z_grid, 'linear', 0);
Px = Px ./ max(Px);

% Normalize coordinate
z = z_grid ./ 50;

% Physical phase-mismatch parameter (do not normalize manually)
u = delta_k * zR;

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

% Optional benchmark electric field:
% Ex = interp1(zE_over_zR, Ex_raw, z_grid, 'linear', 0);
% Ex = Ex ./ max(Ex);
% Profile_Px.Ex = Ex(:);             % 109 x 1

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

Local Python Package

If you want to run DDON locally, especially for predictions of multiple EFISH profiles, install the lightweight ONNX package:

pip install ddon-efish

Example using a 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)

View ddon-efish on PyPI