mirror of
https://github.com/vale981/fibre_walk_project_code
synced 2025-03-04 17:31:39 -05:00
RESULT: only illuminate hybridized modes
This commit is contained in:
parent
b7b20d5616
commit
6850fb635f
10 changed files with 159 additions and 2 deletions
|
@ -60,7 +60,7 @@ def make_params_and_solve(
|
||||||
|
|
||||||
case "hybrid_to_one_bath":
|
case "hybrid_to_one_bath":
|
||||||
params.drive_override = (
|
params.drive_override = (
|
||||||
np.array([params.Ω * (1 - params.δ), params.Ω * params.δ * 2]),
|
np.array([params.Ω * (1 - params.δ), params.Ω * (1 + params.δ)]),
|
||||||
np.ones(2),
|
np.ones(2),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ def generate_phase_one_data(
|
||||||
ax_realtime.set_title("Photo-diode AC Intensity")
|
ax_realtime.set_title("Photo-diode AC Intensity")
|
||||||
|
|
||||||
# now we plot the power spectrum
|
# now we plot the power spectrum
|
||||||
window = (float(params.laser_off_time or 0), t[-1])
|
window = (float(params.laser_off_time) or 0, t[-1])
|
||||||
# window = (0, float(params.laser_off_time or 0))
|
# window = (0, float(params.laser_off_time or 0))
|
||||||
|
|
||||||
ringdown_params = RingdownParams(
|
ringdown_params = RingdownParams(
|
||||||
|
@ -260,3 +260,22 @@ if __name__ == "__main__":
|
||||||
""",
|
""",
|
||||||
)
|
)
|
||||||
save_figure(fig, "004_05_11_07_simulation_only_a_drive_on_bath")
|
save_figure(fig, "004_05_11_07_simulation_only_a_drive_on_bath")
|
||||||
|
|
||||||
|
fig = generate_phase_one_data(
|
||||||
|
laser_detuning=13 - 3.25,
|
||||||
|
g_0=0.3,
|
||||||
|
drive_mode="hybrid_to_one_bath",
|
||||||
|
off_factor=0.4,
|
||||||
|
noise=True,
|
||||||
|
yscale="log",
|
||||||
|
extra_title="""
|
||||||
|
The same as the first simulation, but with the laser at a bath mode and driving at Ω-δ,Ω+δ i.e coupling Bath-Hyb-Hyb-Bath.
|
||||||
|
|
||||||
|
From a simple analytical estimate, this can be seen as advantageous!
|
||||||
|
|
||||||
|
The log-scale on the spectrum is necessary as the bath mode gets way more excited! However the noise magnitude is the same as in the other simulations.
|
||||||
|
|
||||||
|
Timing is /not/ important here *if* the drive amplitude is low engough!
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
save_figure(fig, "004_06_11_07_bhhb_best")
|
||||||
|
|
110
scripts/ringdown_spectrum_analysis/005_11_07_analysis_on_bath.py
Normal file
110
scripts/ringdown_spectrum_analysis/005_11_07_analysis_on_bath.py
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
from rabifun.system import *
|
||||||
|
from rabifun.plots import *
|
||||||
|
from rabifun.utilities import *
|
||||||
|
from rabifun.analysis import *
|
||||||
|
from ringfit.data import ScanData
|
||||||
|
from ringfit.plotting import *
|
||||||
|
import gc
|
||||||
|
|
||||||
|
path = "../../data/11_07_24/second_signal"
|
||||||
|
scan = ScanData.from_dir(path, extension="npz")
|
||||||
|
|
||||||
|
|
||||||
|
# %% plot scan
|
||||||
|
gc.collect()
|
||||||
|
fig = plt.figure("interactive", constrained_layout=True, figsize=(20, 3 * 5))
|
||||||
|
fig.clf()
|
||||||
|
(ax_signal, ax_window, ax_spectrum) = fig.subplot_mosaic("AA;BC").values()
|
||||||
|
plot_scan(scan, ax=ax_signal, linewidth=0.5, every=1000)
|
||||||
|
|
||||||
|
|
||||||
|
# %% window
|
||||||
|
|
||||||
|
# here we select a step that is resonant with a hybridized peak and
|
||||||
|
# then plot the full photodiode voltage trace and just the window
|
||||||
|
|
||||||
|
T_step = 0.0002
|
||||||
|
N = 100
|
||||||
|
t_scan_peak = 0.0057815 + 0.1e-6 # T * N_steps
|
||||||
|
t_scan_peak = 0.0057815 - 0.095e-6 + 28 * T_step # T * N_steps
|
||||||
|
t_peak = t_scan_peak + N * T_step
|
||||||
|
win_length = 5e-05
|
||||||
|
|
||||||
|
window = t_scan_peak, t_scan_peak + win_length * 0.2
|
||||||
|
|
||||||
|
|
||||||
|
ax_signal.axvline(t_peak, color="r", linestyle="--")
|
||||||
|
ax_signal.axvline(t_scan_peak, color="r", linestyle="--")
|
||||||
|
ax_signal.axvspan(*window, color="r", linestyle="--")
|
||||||
|
ax_signal.set_title("Full photodiode voltage trace")
|
||||||
|
ax_signal.set_xlabel("Time [s]")
|
||||||
|
ax_signal.set_ylabel("Voltage [arb]")
|
||||||
|
|
||||||
|
mask = (scan.time > window[0]) & (scan.time < window[1])
|
||||||
|
ax_window.clear()
|
||||||
|
ax_window.plot(scan.time[mask], scan.output[mask], linewidth=0.1)
|
||||||
|
ax_window.set_title("Windowed photodiode voltage trace")
|
||||||
|
ax_window.set_xlabel("Time [s]")
|
||||||
|
|
||||||
|
# %% peak analysis
|
||||||
|
## herein we detect the pertinent peaks and refine them using a lorentzian fit
|
||||||
|
ringdown_params = RingdownParams(
|
||||||
|
fω_shift=0,
|
||||||
|
mode_window=(0, 4),
|
||||||
|
fΩ_guess=12.9e6,
|
||||||
|
fδ_guess=0.2 * 12.9e6,
|
||||||
|
η_guess=0.5e6,
|
||||||
|
absolute_low_cutoff=5e6,
|
||||||
|
)
|
||||||
|
|
||||||
|
peak_info = find_peaks(scan, ringdown_params, window, prominence=0.1)
|
||||||
|
peak_info = refine_peaks(peak_info, ringdown_params)
|
||||||
|
plot_spectrum_and_peak_info(ax_spectrum, peak_info, ringdown_params, annotate=True)
|
||||||
|
|
||||||
|
|
||||||
|
# %% hand-crafted interpretation
|
||||||
|
b1, b2, b3 = peak_info.peak_freqs[[0, 1, 2]]
|
||||||
|
Ω = b3 - b2
|
||||||
|
hyb_freq = b1 - 0.18 * Ω
|
||||||
|
alt_Ω = b2 - b1
|
||||||
|
|
||||||
|
hyb_amp = peak_info.power[peak_info.peaks[1]] / (np.sqrt(2) * 5) ** 2 * 10
|
||||||
|
hyb_width = peak_info.peak_widths[1] * 5
|
||||||
|
|
||||||
|
ax_spectrum.plot(
|
||||||
|
peak_info.freq,
|
||||||
|
lorentzian(peak_info.freq, hyb_amp, hyb_freq, hyb_width),
|
||||||
|
color="C3",
|
||||||
|
label="hybridized mode?",
|
||||||
|
)
|
||||||
|
# %%
|
||||||
|
ax_spectrum.legend()
|
||||||
|
fig.suptitle(
|
||||||
|
f"""
|
||||||
|
Analysis of the data from the 11/07.
|
||||||
|
We modulated at the FSR (13MHz) and FSR-δ and 2δ.
|
||||||
|
*Laser on first bath mode*
|
||||||
|
|
||||||
|
Here the laser hits the first bathmode beside the hybidized modes. This is the reason
|
||||||
|
why the peaks toward higher frequencies are split (we're detuned from the unperturbed spectrum).
|
||||||
|
|
||||||
|
The FSR here is {Ω*1e-6:.2f}MHz as ascertained from the bath modes. According to the simulation for driving
|
||||||
|
on the bath mode, we should see at least one hybridized mode where the red lorentzian is plotted. It's amplitude
|
||||||
|
is fantasy, but there certainly there seems to be something there!
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# %% save
|
||||||
|
if __name__ == "__main__":
|
||||||
|
save_figure(fig, "005_11_07_analysis_on_bath")
|
||||||
|
|
||||||
|
quick_save_pickle(
|
||||||
|
dict(
|
||||||
|
window=window,
|
||||||
|
peak_info=peak_info,
|
||||||
|
ringdown_parms=ringdown_params,
|
||||||
|
Ω=Ω,
|
||||||
|
),
|
||||||
|
"005_results",
|
||||||
|
)
|
Binary file not shown.
|
@ -0,0 +1,8 @@
|
||||||
|
change_id: rxrtsmmqspvtqxwvltyzqxntmowrvuxk
|
||||||
|
commit_id: 27d6a0603bbd5f1af744cecebc9d34e9e817f417
|
||||||
|
description: ''
|
||||||
|
extra_meta: null
|
||||||
|
function: <module>
|
||||||
|
name: 004_06_11_07_bhhb_best
|
||||||
|
refers_to: ./figs/004_06_11_07_bhhb_best.pdf
|
||||||
|
source: scripts/ringdown_spectrum_analysis/004_simulation_11_07.py
|
Binary file not shown.
After Width: | Height: | Size: 2.8 MiB |
Binary file not shown.
|
@ -0,0 +1,8 @@
|
||||||
|
change_id: rxrtsmmqspvtqxwvltyzqxntmowrvuxk
|
||||||
|
commit_id: 79ac3014d82cc3dbecb65c44ae375c44019795d3
|
||||||
|
description: ''
|
||||||
|
extra_meta: null
|
||||||
|
function: <module>
|
||||||
|
name: 005_11_07_analysis_on_bath
|
||||||
|
refers_to: ./figs/005_11_07_analysis_on_bath.pdf
|
||||||
|
source: scripts/ringdown_spectrum_analysis/005_11_07_analysis_on_bath.py
|
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
|
@ -0,0 +1,6 @@
|
||||||
|
change_id: rxrtsmmqspvtqxwvltyzqxntmowrvuxk
|
||||||
|
commit_id: e2b1c2a8ffea1ab07e45ab07b0a3a66d4ae6207f
|
||||||
|
description: ''
|
||||||
|
function: <module>
|
||||||
|
refers_to: outputs/005_results.pkl
|
||||||
|
source: scripts/ringdown_spectrum_analysis/005_11_07_analysis_on_bath.py
|
|
@ -136,6 +136,8 @@ def write_meta(path, **kwargs):
|
||||||
|
|
||||||
@noop_if_interactive
|
@noop_if_interactive
|
||||||
def save_figure(fig, name, extra_meta=None, *args, **kwargs):
|
def save_figure(fig, name, extra_meta=None, *args, **kwargs):
|
||||||
|
import pickle
|
||||||
|
|
||||||
dir = pathlib.Path(f"./figs/")
|
dir = pathlib.Path(f"./figs/")
|
||||||
dir.mkdir(exist_ok=True)
|
dir.mkdir(exist_ok=True)
|
||||||
fig.tight_layout()
|
fig.tight_layout()
|
||||||
|
@ -146,6 +148,10 @@ def save_figure(fig, name, extra_meta=None, *args, **kwargs):
|
||||||
plt.savefig(f"./figs/{name}.png", *args, dpi=600, **kwargs)
|
plt.savefig(f"./figs/{name}.png", *args, dpi=600, **kwargs)
|
||||||
|
|
||||||
print(f"Figure saved as ./figs/{name}.pdf")
|
print(f"Figure saved as ./figs/{name}.pdf")
|
||||||
|
pickle_path = dir / f"{name}.pkl"
|
||||||
|
|
||||||
|
with open(pickle_path, "wb") as f:
|
||||||
|
pickle.dump(fig, f)
|
||||||
|
|
||||||
|
|
||||||
@noop_if_interactive
|
@noop_if_interactive
|
||||||
|
|
Loading…
Add table
Reference in a new issue