Tensorial Ptychography

Code
using Plots;
include("../src/tensorialptychography.jl");

Abstract

Ptychography is an iterative computational reconstructive technique used to retrieve the complex-valued linear transmission function in X-ray, optical, and electron microscopy. We develop ptychography for nonlinear optical microscopy and we demonstrate through simulations that the complex nonlinear susceptibility tensor \(\chi^{(n)}\) – and in particular its phase – can be retrieved from far-field nonlinear optical signals without requiring interferometry. We consider second harmonic generation on a numerically generated collagen sample. We reconstruct the independent components of the \(\chi^{(n)}\) tensor. For P-SHG, the reconstruction is used to retrieve the local collagen fibril orientation in tendon using only one measurement at each polarization. Our method is general and can be applied to other nonlinear optical imaging modalities.

Numerical Measurements

As a proof of concept the project used a numerically generated collagen sample from which diffraction-limited numerical far-field measurements were generated, detailed here is the theoretical framework from which these numerical measurements are generated and what they look like for a given collagen sample.

Code
Chi2 = tensorialptychography.LoadSample(raw"/home/evan/Documents/projects/tensorialptychography.jl/demo/collagen_sample.mat")
params = Dict(
    "pixel_size" => [0.1,0.1], #microns
    "NA" => 1,
    "beam_waist" => 10.2, #microns
    "wavelength" => 0.4,
    "resolution" => 512,
    "polarization" => [0,45,90],
    "Number_of_Measurements" => 400)
Beam = tensorialptychography.LoadBeam(parameters=params, initialize=false, directory = "beam.mat")
ExitField = tensorialptychography.CalculateExitField(Chi2, Beam, parameters=params, beam_position = (0, 0));
PlotList = []
PolarizationAngles  = get(params, "polarization",1)
InputPolarization = repeat(PolarizationAngles, inner = 3)
OutputPolarization = repeat(PolarizationAngles, outer = 3)
for k = 1:size(InputPolarization)[1]
    temp = heatmap(
        real.(ExitField[:,:,k]),
        xticks = false,
        yticks = false,
        cbar = false,
        title = string(InputPolarization[k], "° in , ", OutputPolarization[k], "° out"),
        size=(1500,1500))
    push!(PlotList, temp)
end
plot(PlotList..., plot_title = "Exit-Field")
Code
CTF = tensorialptychography.CalculateCTF(params)
FarField = tensorialptychography.DiffractionLimit(params, ExitField, CTF);
PlotList = []
for k = 1:size(InputPolarization)[1]
    temp = heatmap(
        real.(FarField[:,:,k]),
        xticks = false,
        yticks = false,
        cbar = false,
        title = string(InputPolarization[k], "° in , ", OutputPolarization[k], "° out"),
        size=(1500,1500))
    push!(PlotList, temp)
end
plot(PlotList..., plot_title = "Far-Field")

Projects