Published April 10, 2026 | Version v1
Conference paper Open

Adaptive Photothermal Phase Engineering Using a Thermo-Optic Metamaterial

  • 1. ROR icon Czech Academy of Sciences, Institute of Photonics and Electronics
  • 2. National Academy of Sciences of Ukraine, Institute of Physics

Description

vortex_simulations.pkl

This file contains simulated iSCAT contrast data. The file is stored as a Python dictionary serialized with pickle.

The top-level dictionary is indexed by phase-mask configuration, including no_mask and multiple rotated vortex masks, such as vortex_000, vortex_045, ..., vortex_360.

For each mask, the following fields are stored:

  • angle_deg: vortex mask rotation angle in degrees
  • elapsed_s: computation time for the corresponding simulation
  • contrast_glass: simulated iSCAT contrast for the glass background only
  • contrast_mt: simulated iSCAT contrast for the microtubule only
  • contrast_glass_mt: simulated iSCAT contrast for the microtubule on glass background

Each contrast dataset is stored as a 3D NumPy array of shape (nx, ny, n_focus), where nx and ny are the lateral image dimensions and n_focus is the number of simulated focus positions.

The data can be loaded in Python using:

import pickle
with open("vortex_contrast_optimized_results.pkl", "rb") as f:
    results = pickle.load(f)

 

exp_data_MT.npz

This file contains experimentally acquired iSCAT image data of microtubules for multiple focus positions and vortex mask rotations. The data is stored as a compressed NumPy archive (.npz).

The main array:

  • data: a 4D NumPy array of shape (n_focus, n_angles, nx, ny)

where:

  • n_focus is the number of focus positions (z-stack)
  • n_angles is the number of phase-mask configurations
  • nx, ny are the lateral image dimensions after cropping

The second dimension (n_angles) corresponds to:

  • index 0 → iSCAT reference (no mask)
  • index 1 → vortex mask, 0°
  • index 2 → vortex mask, 45°
  • index 3 → vortex mask, 90°
  • ...
  • index 8 → vortex mask, 315°

The corresponding angles are stored in:

  • angles_deg: array of length n_angles, containing rotation angles in degrees
    (with -1 indicating the iSCAT reference image)

Additional metadata:

  • pixel_size_um: pixel size in micrometers

The data can be loaded in Python using:

import numpy as np

d = np.load("exp_data_MT.npz")

data = d["data"]
angles = d["angles_deg"]
pixel_size = d["pixel_size_um"]

 

exp_data_NP.npz

This file contains experimentally acquired iSCAT image stacks of a nanoparticle for multiple focus positions. The data is stored as a compressed NumPy archive (.npz).

The file contains four image stacks:

  • iscat_stack: iSCAT images recorded without a phase mask
  • glass_vortex_stack: iSCAT images recorded with a glass vortex mask
  • pt_slm_vortex_stack: iSCAT images recorded with a single PT-SLM vortex mask position
  • reconstructed_stack: reconstructed iSCAT images obtained from the amplitude extracted using all PT-SLM vortex positions

Each stack is stored as a 3D NumPy array of shape:

 
(n_focus, nx, ny)
 

where:

  • n_focus is the number of retained focus positions
  • nx, ny are the lateral image dimensions

Each stack is centered around the focus plane used for visualization, and includes a window of ±half_window focus positions around that center.

Additional metadata:

  • pixel_size_um: pixel size in micrometers

The data can be loaded in Python using:

import numpy as np

d = np.load("exp_data_NP.npz")

iscat = d["iscat_stack"]
glass = d["glass_vortex_stack"]
ptslm = d["pt_slm_vortex_stack"]
recon = d["reconstructed_stack"]
pixel_size = d["pixel_size_um"]

 

fit_vortex_reconstruction.py

This script reconstructs amplitude and phase maps from rotational vortex iSCAT data using a pixel-wise sinusoidal fit of the normalized contrast as a function of vortex angle.

For each pixel, the measured contrast is fitted as:

C(theta_v, x, y) = C0(x, y) + A(x, y) cos(theta_v + phi(x, y))

The fitted amplitude A(x,y) and phase phi(x,y) are saved as reconstructed amplitude and phase maps.

Example using exp_data_MT.npz:

import numpy as np
from fit_vortex_reconstruction import fit_cos_vortex, save_reconstruction_npz
d = np.load("exp_data_MT.npz")
data = d["data"]
angles = d["angles_deg"]
focus_index = 0
contrast_stack = data[focus_index, 1:, :, :]
vortex_angles = angles[1:]
result = fit_cos_vortex(contrast_stack, vortex_angles)
save_reconstruction_npz("MT_reconstruction_focus0.npz", result)

Here, index 0 in exp_data_MT.npz corresponds to the iSCAT reference without a vortex mask and is therefore excluded from the angular fit. The vortex-mask images at 0°, 45°, ..., 315° are used for the reconstruction.

Files

Files (5.2 GB)

Name Size Download all
md5:5033821f660ff14373cd36d9791bd6d0
18.7 MB Download
md5:b22cf54c77e3adeb0fc37ea4d92b7143
3.5 MB Download
md5:dd568465e3912905f4d3a41e0e90c60d
6.9 kB Download
md5:67e6e813dbf86f9073f41000d783b685
5.2 GB Download

Additional details

Funding

e-INFRA
90254