def make_eta_plot(etas):
    number_of_periods = 10

    test_width = 1 * bohr_radius
    test_charge = 1 * electron_charge
    test_mass = 1 * electron_mass
    # potential_depth = 36.831335 * eV

    prefactor = ide.gaussian_prefactor_LEN(test_width, test_charge)
    tau_alpha = ide.gaussian_tau_alpha_LEN(test_width, test_mass)
    kernel = functools.partial(ide.gaussian_kernel_LEN, tau_alpha=tau_alpha)
    omega_alpha = 1 / (2 * tau_alpha)

    periods = np.linspace(0, 3, 500) * tau_alpha
    periods = periods[1:]

    def curve(periods, eta):
        results = []
        for period in periods:
            kicks = make_sine_wave_kicks(number_of_periods, period, eta)

            results.append(
                dpm.recursive_kicks(
                    kicks,
                    abs_prefactor=np.abs(prefactor),
                    kernel_func=kernel,
                    bound_state_frequency=omega_alpha,
                )[-1])

        return np.abs(results)**2

    si.vis.xy_plot(
        f"bound_state_amplitude_vs_sine_period__eta__{etas}",
        periods,
        *[curve(periods, eta) for eta in etas],
        line_labels=[
            fr"$\eta = {eta / time_field_unit:3f}$ a.u." for eta in etas
        ],
        x_label=r"Sine Wave Period $T$ ($ \tau_{\alpha} $)",
        x_unit=tau_alpha,
        y_label=r"$\left|\left\langle a | a \right\rangle\right|^2$",
        # vlines = [tau_alpha / 2, tau_alpha], vline_kwargs = [{'linestyle': ':', 'color': 'black'}, {'linestyle': ':', 'color': 'black'}],
        y_log_axis=True,
        y_log_pad=1,
        legend_kwargs={"loc": "upper right"},
        # y_lower_limit = 1e-9, y_upper_limit = 1,
        **PLOT_KWARGS,
    )
            time_initial=-pulse.pulse_width * 10,
            time_final=pulse.pulse_width * 10,
            time_step=0.1 * asec,
            electric_potential=pulse,
            electric_potential_dc_correction=True,
        )

        specs = [
            ide.IntegroDifferentialEquationSpecification(
                "gaussian",
                kernel=ide.gaussian_kernel_LEN,
                kernel_kwargs={
                    "tau_alpha":
                    ide.gaussian_tau_alpha_LEN(test_width, test_mass)
                },
                integral_prefactor=ide.gaussian_prefactor_LEN(
                    test_width, test_charge),
                **shared_kwargs,
            ),
            ide.IntegroDifferentialEquationSpecification(
                "hydrogen",
                kernel=ide.hydrogen_kernel_LEN,
                kernel_kwargs={
                    "kernel_prefactor": ide.hydrogen_kernel_prefactor_LEN()
                },
                integral_prefactor=ide.hydrogen_prefactor_LEN(test_charge),
                **shared_kwargs,
            ),
        ]

        results = si.utils.multi_map(run, specs, processes=2)
def make_eta_movie():
    length = 30
    etas = np.linspace(0.1, 1, 30 * length) * time_field_unit

    number_of_periods = 10

    test_width = 1 * bohr_radius
    test_charge = 1 * electron_charge
    test_mass = 1 * electron_mass
    # potential_depth = 36.831335 * eV

    prefactor = ide.gaussian_prefactor_LEN(test_width, test_charge)
    tau_alpha = ide.gaussian_tau_alpha_LEN(test_width, test_mass)
    kernel = functools.partial(ide.gaussian_kernel_LEN, tau_alpha=tau_alpha)
    omega_alpha = 1 / (2 * tau_alpha)

    periods = np.linspace(0, 10, 500) * tau_alpha
    periods = periods[1:]

    def curve(periods, eta):
        results = []
        for period in periods:
            kicks = make_sine_wave_kicks(number_of_periods, period, eta)

            results.append(
                dpm.recursive_kicks(
                    kicks,
                    abs_prefactor=np.abs(prefactor),
                    kernel_func=kernel,
                    bound_state_frequency=omega_alpha,
                )[-1])

        return np.abs(results)**2

    si.vis.xyt_plot(
        f"bound_state_amplitude_vs_sine_period__eta_scan",
        periods,
        etas,
        curve,
        x_label=r"Sine Wave Period $T$ ($ \tau_{\alpha} $)",
        x_unit=tau_alpha,
        y_label="Bound State Amplitude",
        t_fmt_string=r"$\eta = {} \; \mathrm{{a.u.}}$",
        t_unit=dpm.time_field_unit,
        vlines=[tau_alpha / 2, tau_alpha],
        vline_kwargs=[
            {
                "linestyle": ":",
                "color": "black"
            },
            {
                "linestyle": ":",
                "color": "black"
            },
        ],
        y_log_axis=True,
        y_log_pad=1,
        y_lower_limit=1e-9,
        y_upper_limit=1,
        length=length,
        **PLOT_KWARGS,
    )
    max_cos_kick = max(k.amplitude for k in cos_kicks)
    max_sin_kick = max(k.amplitude for k in sin_kicks)

    return max_cos_kick, max_sin_kick


if __name__ == "__main__":
    with si.utils.LogManager("simulacra",
                             "ionization",
                             stdout_level=logging.DEBUG) as logger:
        delta_t = np.linspace(0, 500, 500) * asec
        omega_alpha = ion.HydrogenBoundState(1).energy / hbar
        eta = 0.2 * time_field_unit

        tau_alpha = ide.gaussian_tau_alpha_LEN(bohr_radius, electron_mass)
        B = ide.gaussian_prefactor_LEN(bohr_radius, electron_charge)

        cos_eta, sin_eta = get_cosine_and_sine_etas(pulse_width=200 * asec,
                                                    fluence=0.001 * Jcm2)

        print(cos_eta / time_field_unit, sin_eta / time_field_unit)

        cos_beta = B * (cos_eta**2)
        sin_beta = B * (sin_eta**2)

        si.vis.xy_plot(
            "delta_t_scan",
            delta_t,
            np.ones_like(delta_t) * double_kick_no_interference(sin_beta),
            np.ones_like(delta_t) * single_kick(sin_beta),
            double_kick(sin_beta, delta_t, omega_alpha, tau_alpha),