E_p *= aberration E_p = propagator2.dot(E_p) E_p = lens(E_p, f) E_p *= aberration E_p = propagator1.dot(E_p) return E_p * R * TL fields = get_fields(cavity, np.sqrt(1-R)*E, n_rt=250) s = Spectrum(lambda phase: power(rs, fields, phase)) resonance_phases = s.compute_resonances(n_res=1, gain_thres=1) phases, spectrum = s.spectrum(linspace_kwargs={'focus_width': 1/20}) ax_spectrum.plot((phases - resonance_phases[0])/(2*np.pi), spectrum, label='2w={:.1f}'.format(2*w*1e3)) mode = total_field(fields, resonance_phases[0]) image = ih.image_from_radial(abs(mode) ** 2, N=100, ratio=0.8) images.append(image) I = abs(mode)**2 ax_mode.plot(rs/w, I / I.max()) ax_spectrum.legend() big_img = ih.stack_images(images, n_per_row=3) fig, ax = plt.subplots() ax.imshow(big_img, cmap='gray')
T = 1 - R1 base = np.sqrt(R1 * R2) * np.exp(1j * phase_map) def power(phase): u = x[len(x) // 2:] v = E.E[len(x) // 2:] b = base[len(x) // 2:] return np.trapz(x=u, y=(2 * np.pi * u * abs(v * np.sqrt(T) / (1 - b * np.exp(1j * phase)))**2)) S = Spectrum(power_fun=power) S.compute_resonances() phases, spectrum = S.spectrum() fig, ax = plt.subplots() ax.semilogy(phases, spectrum) ax.grid(which='both') ax.grid(which='minor', color=[0.9] * 3, linewidth=0.5) modes = [ E.transmit(((np.sqrt(T) / (1 - base * np.exp(1j * phase))))) for phase in S.resonance_phases ] fig, (axI, axP) = EField.create_figure() for mode in modes: print(mode.P) mode.plot(fig, normalize=False)
# exit() print('Computing fields.') fields = get_fields(np.sqrt(1 - R) * in_field, cavity_fun, 50) print('Fields computed.') print('Memory used : {:.0f} Mb'.format(fields.nbytes / 1e6)) # total_field = get_total_field(fields, 0) s = Spectrum(lambda phase: power_at_phase(fields, phase)) print('Computing resonances.') resonance_phases = s.compute_resonances(n_res=1, gain_thres=0.3) print('Resonances computed.') phases, spectrum = s.spectrum() def plot_field(field, axis=0, axI=None, axP=None, **kwargs): if axis == 0: s = np.s_[:, N // 2] else: s = np.s_[N // 2, :] if axI is not None: axI.plot(abs(field[s])**2, **kwargs) if axP is not None: phase = np.unwrap(np.angle(field[s])) axP.plot(phase - phase[N // 2], **kwargs) fig_x, (axI_x, axP_x) = plt.subplots(2, 1, sharex=True)
E_p = lens(E_p, f) E_p = propagator1.dot(E_p) E_p *= displacement_phase_factor return E_p * R * TL fields = get_fields(cavity, np.sqrt(1 - R) * E, n_rt=250) s = Spectrum(lambda phase: power(rs, fields, phase)) resonance_phases = s.compute_resonances(n_res=1, gain_thres=0.1) limits = (resonance_phases[0] - np.pi, resonance_phases[0] + np.pi) phases, spectrum = s.spectrum(linspace_kwargs={ 'focus_width': 1 / 30, 'num_focused': 300, 'limits': limits }) ret.append(phases) ret.append(spectrum) gains.append(spectrum.max()) # spectrum /= spectrum.max() idx_max = spectrum.argmax() freqs = phases * 375 / 2 / np.pi ax_spectrum.plot(freqs, spectrum, label='{:.1f}'.format(
E_p *= displacement_phase_factor E_p = lens(E_p, f) E_p *= aberration E_p = propagator1.dot(E_p) # E_p = propagator1.dot(E_p) # E_p *= apo return E_p * R * TL fields = get_fields(cavity, np.sqrt(1 - R) * E, n_rt=400) s = Spectrum(lambda phase: power(rs, fields, phase)) resonance_phases = s.compute_resonances(n_res=1, gain_thres=0.1) phases, spectrum = s.spectrum(linspace_kwargs={ 'focus_width': 1 / 15, 'num_focused': 300 }) if ref_max is None: ref_max = spectrum.max() # spectrum /= spectrum.max() idx_max = spectrum.argmax() freqs = (phases - phases[idx_max]) * 330 / 2 / np.pi freqs = phases * 330 / 2 / np.pi label = '{:.1f}'.format((d2 - delta_quadratic_compensation) * 1e6) # label = '' ax_spectrum.plot(freqs, spectrum / ref_max, label=label) mode = total_field(fields, resonance_phases[0])