From 656815015ae6fc7bb9aab8379bbc561dc7337dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Fri, 28 May 2021 16:20:21 +0200 Subject: [PATCH] wl offset correction --- src/scgenerator/initialize.py | 48 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/scgenerator/initialize.py b/src/scgenerator/initialize.py index feeb007..2856779 100644 --- a/src/scgenerator/initialize.py +++ b/src/scgenerator/initialize.py @@ -559,6 +559,29 @@ def compute_init_parameters(config: Dict[str, Any]) -> Dict[str, Any]: params[key] = value params = _generate_sim_grid(params) + + # Initial field may influence the grid + custom_field = False + if "field_file" in params: + custom_field = True + field_data = np.load(params["field_file"]) + field_interp = interp1d( + field_data["time"], field_data["field"], bounds_error=False, fill_value=(0, 0) + ) + params["field_0"] = field_interp(params["t"]) + params = _comform_custom_field(params) + elif "field_0" in params: + custom_field = True + params = _evalutate_custom_field_equation(params) + params = _comform_custom_field(params) + + # central wavelength may be off with custom fields + if custom_field: + delta_w = params["w_c"][np.argmax(abs2(np.fft.fft(params["field_0"])))] + logger.debug(f"had to adjust w by {delta_w}") + params["wavelength"] = units.m.inv(units.m(params["wavelength"]) - delta_w) + _update_frequency_domain(params) + if "step_size" in params: params["error_ok"] = params["step_size"] params["adapt_step_size"] = False @@ -600,19 +623,7 @@ def compute_init_parameters(config: Dict[str, Any]) -> Dict[str, Any]: if "mean_power" in params: params["energy"] = params["mean_power"] / params["repetition_rate"] - custom_field = True - if "field_file" in params: - field_data = np.load(params["field_file"]) - field_interp = interp1d( - field_data["time"], field_data["field"], bounds_error=False, fill_value=(0, 0) - ) - params["field_0"] = field_interp(params["t"]) - params = _comform_custom_field(params) - # Initial field - elif "field_0" in params: - params = _evalutate_custom_field_equation(params) - params = _comform_custom_field(params) - else: + if not custom_field: custom_field = False params = _update_pulse_parameters(params) logger.info(f"computed initial N = {params['soliton_num']:.3g}") @@ -636,12 +647,6 @@ def compute_init_parameters(config: Dict[str, Any]) -> Dict[str, Any]: params["spec_0"] = np.fft.fft(params["field_0"]) - # central wavelength may be off with custom fields - if custom_field: - delta_w = params["w_c"][np.argmax(abs2(params["spec_0"]))] - logger.debug(f"had to adjust w by {delta_w}") - params["wavelength"] = units.m.inv(units.m(params["wavelength"]) - delta_w) - _update_frequency_domain(params) return params @@ -762,11 +767,8 @@ def _generate_sim_grid(params): params["time_window"] = length(t) params["dt"] = t[1] - t[0] params["t_num"] = len(t) - - params = _update_frequency_domain(params) - params["z_targets"] = np.linspace(0, params["length"], params["z_num"]) - + params = _update_frequency_domain(params) return params