twodsi
Submodules
twodsi.classic_algorithms_2dsi module
- class twodsi.classic_algorithms_2dsi.DirectReconstruction(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, **kwargs)[source]
Bases:
ClassicAlgorithmsBASE,RetrievePulses2DSIReconstructs a 2DSI trace non-iteratively by extracting the relative phase of the fringes for each frequency.
[1] J. R. Birge et al., Opt. Lett. 31, 2063-2065, 10.1364/OL.31.002063 (2006)
- integration_method
the integration method for the group delay. Has to be one of cumsum or euler_maclaurin_k
- Type:
str
- integration_order
the euler_maclaurin order, infered from integration_method
- Type:
None, int
- windowing
windowing type for the FFT. Can be one of False, hamming or hann.
- Type:
bool, str
- cut_off_intensity_for_GD
a cut-off which sets the GD to zero for smaller intensities. (Needed for stable numerics)
- Type:
float
- interpolate_group_delay_onto_spectral_amplitude(spectral_phase, measurement_info)[source]
The group delay is obtained on the wrong position on the frequency axis. This is solved by shifted/interpolation.
- reconstruct_2dsi_1dfft(descent_state, measurement_info, descent_info)[source]
Performs the standard 2DSI reconstruction by integrating over the group delay. Which is obtained as the phase of an fft of the measured trace along the delay axis.
- calc_error_of_reconstruction(descent_state, measurement_info, descent_info)[source]
Calculates the error of the reconstruction.
- step(descent_state, measurement_info, descent_info)[source]
Performs the reconstruction in one interation.
- Parameters:
descent_state – Pytree,
measurement_info – Pytree,
descent_info – Pytree,
- Returns:
tuple[Pytree, jnp.array], the updated descent state and the current errors
- initialize_run(population)[source]
Prepares all provided data and parameters for the reconstruction. Here the final shape/structure of descent_state, measurement_info and descent_info are determined.
- Parameters:
population – Pytree, the initial guess as created by self.create_initial_population()
- Returns:
tuple[Pytree, Callable], the initial descent state and the step-function of the algorithm.
- class twodsi.classic_algorithms_2dsi.GeneralizedProjection(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, **kwargs)[source]
Bases:
GeneralizedProjectionBASE,RetrievePulses2DSIImplements the Generalized Projection Algorithm.
DeLong et al., Opt. Lett. 19, 2152-2154 (1994)
- no_steps_descent
the numer of descent steps per iteration
- Type:
int
- optimize_spectral_phase_directly
- Type:
bool
- class twodsi.classic_algorithms_2dsi.PtychographicIterativeEngine(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, **kwargs)[source]
Bases:
PtychographicIterativeEngineBASE,RetrievePulses2DSIImplements a version of the Ptychographic Iterative Engine (PIE).
A. Maiden et al., Optica 4, 736-745 (2017) T. Schweizer, “Time-Domain Ptychography and its Applications in Ultrafast Science”, PhD Thesis, Bern (2021)
- alpha
a regularization parameter
- Type:
float
- pie_method
specifies the PIE variant. Can be one of None, PIE, ePIE, rPIE. Where None indicates that the pure gradient is used.
- Type:
None, str
- optimize_spectral_phase_directly
- Type:
bool
- class twodsi.classic_algorithms_2dsi.COPRA(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, **kwargs)[source]
Bases:
COPRABASE,RetrievePulses2DSIImplements a version of the Common Pulse Retrieval Algorithm (COPRA).
Geib et al., Optica 6, 495-505 (2019)
- class twodsi.classic_algorithms_2dsi.LSF(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, **kwargs)[source]
Bases:
LSFBASE,RetrievePulses2DSIImplements a version of the Linesearch FROG Algorithm (LSF). Despite its name the algorithm is NOT restricted to FROG.
Krook and V. Pasiskevicius, Opt. Express 33, 33258-33269 (2025)
- no_sections
number of sections to split the search line into
- Type:
int
- number_of_disection_iterations
as the name says
- Type:
int
- direction_mode
can be random or continuous
- Type:
str
- ratio_points_for_continuous
smaller value means more randomness/eratic
- Type:
int
- only_allow_improvements
if true, only steps that decrease the error will be accepted
- Type:
bool
twodsi.general_algorithms_2dsi module
- class twodsi.general_algorithms_2dsi.DifferentialEvolution(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, strategy='best1_bin', selection_mechanism='greedy', mutation_rate=0.5, crossover_rate=0.7, **kwargs)[source]
Bases:
DifferentialEvolutionBASE,RetrievePulses2DSIImplements a Differential-Evolution Algorithm. Based on Qiang, J., Mitchell, C., A Unified Differential Evolution Algorithm for Global Optimization, 2014, https://www.osti.gov/servlets/purl/1163659
- strategy
the mutation and selection strategy, analogous to scipy’s differential evolution.
- Type:
str
- mutation_rate
the mutation rate
- Type:
float
- crossover_rate
the crossover rate
- Type:
float
- selection_mechanism
the selection mechanism, can be greedy or global, defined in select_population().
- Type:
str
- temperature
a temperature value for the global selection mechanism
- Type:
float
- class twodsi.general_algorithms_2dsi.Evosax(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, solver=None, **kwargs)[source]
Bases:
EvosaxBASE,RetrievePulses2DSIEmploys the evosax package to perform the optimization.
Robert Tjarko Lange, evosax: JAX-based Evolution Strategies, arXiv preprint arXiv:2212.04180 (2022)
- solver
any evosax-solver should work
- Type:
evosax-solver
- solver_params
user defined parameters for the evosax-solver, if None the default params set in evosax are used
- Type:
any
- solver_kwargs
some evosax-solver require additional input arguments. These can be supplied via this aattribute.
- Type:
dict
- class twodsi.general_algorithms_2dsi.AutoDiff(delay, frequency, measured_trace, nonlinear_method, spectral_filter1, spectral_filter2, cross_correlation=False, solver=None, **kwargs)[source]
Bases:
AutoDiffBASE,RetrievePulses2DSIEmploys the optimistix package to perform the optimization via Automatic-Differentiation.
J. Rader, T. Lyons and P.Kidger, Optimistix: modular optimisation in JAX and Equinox, arXiv:2402.09983 (2024) DeepMind et al., The DeepMind JAX Ecosystem, http://github.com/google-deepmind (2020)
- solver
solvers need to be initialized
- Type:
optimistix-solver, optax-solver
- alternating_optimization
if true, the optimizer alternates between amplitude and phase
- Type:
bool
- optimize_group_delay
if true, the group delay will be optimized instead of the spectral phase
- Type:
bool