print('Computing fields.')
fields = get_fields(np.sqrt(1 - R) * in_field, cavity_fun,
                    50)  # take at least 2*finesse
print('Fields computed.')
print('Memory used : {:.0f} Mb'.format(fields.nbytes / 1e6))

r = N // 2**7
reduced_fields = np.copy(
    fields[::r, ::r, :]) * r  # We reduce the number of points, so renormalize
s = Spectrum(lambda phase: power_at_phase(reduced_fields, phase)
             )  # faster to compute the spectrum than using
# all the preceeding points

print('Computing resonances.')
resonance_phases = s.compute_resonances(n_res=1, gain_thres=0.3)
print('Resonances computed.')

limits = (resonance_phases[0] - np.pi, resonance_phases[0] + np.pi)
phases, spectrum = s.spectrum()
print('resonances = ', resonance_phases)

# *** Plot some cuts of the cavity fields ***
plt.rcParams['figure.figsize'] = (14.0, 6.0)
plt.rcParams['font.size'] = 18


def plot_field(field, axis=0, axI=None, axP=None, **kwargs):
    if axis == 0:
        s = np.s_[:, N // 2]
    else: