Skip to content
Snippets Groups Projects
Commit 28aa25a3 authored by Yb Tweezer's avatar Yb Tweezer
Browse files

make timeline vertical; add dark time for andow shutter closing; relabel a few...

make timeline vertical; add dark time for andow shutter closing; relabel a few parameters for clarity; add book-keeping for varied parameters
parent a99199b4
No related branches found
No related tags found
No related merge requests found
from lib import *
import lib
from lib import CONNECTIONS as C
import numpy as np
from itertools import product
import sys
import pathlib
import timeit
import toml
timestamp = get_timestamp()
print(timestamp)
outdir = DATADIRS.narrow_cooling_tweezer.joinpath(timestamp)
# timestamp = get_timestamp()
# print(timestamp)
# outdir = DATADIRS.tweezer_atoms.joinpath(timestamp)
_save = False
_label = "atom_signal_test_exposure=70ms_loading=20ms_background"
_counter = 0
date = get_timestamp().split("_")[0]
datadir = DATADIRS.tweezer_atoms.joinpath(date)
if _save:
if not datadir.is_dir():
print(f":: mkdir -p {datadir}")
while datadir.joinpath(f"{_label}_{_counter:03.0f}").is_dir():
_counter += 1
outdir = datadir.joinpath(f"{_label}_{_counter:03.0f}")
comments = """
"""[1:-1]
# CAMERA OPTIONS
camera_config = {
flir_config = {
"exposure_time": 300,
"gain": 47.99,
"gamma": 1.25,
......@@ -40,48 +57,100 @@ clk_freq = 10e6 # serial_bits clock frequency; Hz
take_background = False # include a background image
flir_two_shots = False # use the Flir to take two shots
check_556_tweezer = False # use the 556 tweezer instead of the probe beams
use_cmot_preprobe = False # use the CMOT beams to check imaging conditions
# timings (not to scale)
# | tau_all |
# start | t0 | tau_ncool | tau_pause | tau_twzr_load | tau_hold | tau_pp | tau_dark | tau_probe | end
# | | | |
# <tau_comp> | | |
# | | <tau_flir>,<tau_flir_second> |
# | | <tau_andor>
# | t_ramp | tau_ramp | ... |
# |
# <tau_ref>
#
# Entangleware . MOGLabs
# time | start ==========================================================
# V .
# (...) <blue MOT loading> .
# .
# t0 ----- <tau_comp> --------------------------------- <tau_ref>
# | | . |
# | | . | tau_ramp
# | | . |
# | | . -----
# | | . |
# | tau_ncool | . | tau_rampdur
# | | . |
# | | . -----
# | | .
# | | . (...)
# | | .
# --------------------------------------|-----------------
# | | .
# | tau_pause | .
# | | .
# ----- <tau_flir>, <tau_flir_second> | .
# | | .
# | tau_twzr_load | .
# | | .
# ----- | .
# | | .
# | tau_preprobe | tau_all .
# | | .
# ----- | .
# | | .
# | tau_pp (parity projection) | .
# | | .
# ----- | .
# | | .
# | tau_dark_open (andor shutter) | .
# | | .
# ------------------- <tau_andor> | .
# | | | .
# | tau_probe | | .
# | | | .
# ----- | tau_image | .
# | | .
# (...) | | .
# | | .
# ------------------- | .
# | | .
# | tau_dark_close (andor shutter) | .
# | |
# end ==========================================================
t0 = 300e-3 # transfer to green MOT; s
tau_flux_block = -15e-3 # time relative to t0 to stop atom flux; s
tau_blue_overlap = 2e-3 # overlap time of blue beams with green beams relative to t0; s
tau_ncool = 100e-3 # narrow cooling/compression time; s
tau_comp = 46e-3 # start compression ramping relative to beginning of narrow cooling; s
T_COMP = t0 + tau_comp + np.linspace(0.0, 4e-3, 51) # compression ramp times
tau_pause = 0.75e-3 # pause between ncool and load; s
tau_pause = 0.0e-3 # pause between ncool and load; s
tau_twzr_load = 2.5e-3 # time to load into tweezers; s
tau_hold = 0e-3 # hold with CMOT beams at imaging (proxy) frequency
tau_dark = 27e-3 # shutter opening time for EMCCD; s
tau_twzr_load = 10e-3
tau_preprobe = 0e-3 # hold with CMOT beams at imaging (proxy) frequency
tau_dark_open = 27e-3 # shutter opening time for EMCCD; s
tau_dark_close = 40e-3 # shutter closing time for EMCCD; s
tau_pp = 0e-3 # parity projection time; s
tau_probe = 30e-3 # probe imaging time; s
TAU_PROBE = np.array([70e-3]) # probe beam time; s
# TAU_PROBE = np.array([]
# + [2e-3, 4e-3, 6e-3, 8e-3]
# + [10e-3, 20e-3, 30e-3, 50e-3, 70e-3, 100e-3, 150e-3, 200e-3]
# )
tau_image = TAU_PROBE.max() # EMCCD exposure time; s
tau_all = ( # main sequence time; s
tau_ncool
+ tau_pause
+ tau_twzr_load
+ tau_hold
+ tau_preprobe
+ tau_pp
+ tau_dark
+ tau_probe
+ tau_dark_open
+ tau_image
+ tau_dark_close
)
# camera timings
tau_flir = -10e-3 # Flir camera time rel. to end of pause after narrow cooling; s
tau_flir_second = tau_twzr_load + tau_pp + tau_dark + 0.1e-3 # second Flir shot rel. to end of pause after narrow cooling; s
tau_flir_second = tau_twzr_load + tau_pp + tau_dark_open + 0.1e-3 # second Flir shot rel. to end of pause after narrow cooling; s
TAU_ANDOR = np.array([0.0e-3]) # EMCCD camera time relative to end of dark period; s
# coil settings
SHIMS_FB = np.linspace(1.200, 1.200, 1) # Front/Back shim scans: 1.22; +1.2 for 174
SHIMS_LR = np.linspace(0.125, 0.125, 1) # Left/Right shim scans: 0.20; -0.2 for 174
SHIMS_UD = np.linspace(0.580, 0.580, 1) # Up/Down shim scans: 0.57; +0.4 for 174
SHIMS_FB = np.linspace(1.250, 1.250, 1) # Front/Back shim scans: 1.22; +1.2 for 174
SHIMS_LR = np.linspace(-0.22, -0.22, 1) # Left/Right shim scans: 0.20; -0.2 for 174
SHIMS_UD = np.linspace(0.300, 0.300, 1) # Up/Down shim scans: 0.57; +0.4 for 174
B_blue = int(441815) # blue MOT gradient setting
B_green = int(44182 * 1.25) # 174: 1.25 -> 1.1
bits_Bset = int(20) # number of bits in a servo setting
......@@ -91,7 +160,7 @@ B_COMP = np.linspace(B_green, B_green * 1.8, T_COMP.shape[0]) # compression ramp
# detunings
DET_MOT = np.linspace(+1.3, +1.3, 1) # green MOT detuning for tweezer loading (rel. to CMOT); MHz
DET_PROBE_PROXY = 3.68 + np.linspace(+0.8, +0.8, 1) # imaging conditions proxy using CMOT beams (rel. to AOM center); MHz
DET_PROBE = 3.68 + np.linspace(-0.3, -0.3, 1) # probe beam detuning for imaging (rel. to AOM center); MHz
DET_PROBE = 3.68 + np.linspace(-0.6, -0.6, 1) # probe beam detuning for imaging (rel. to AOM center); MHz
DET_PP = 3.68 + np.linspace(+0.8, +0.8, 1)
det_block = 10 # shift the RF on the MOT beams to decouple the fiber; MHz
det_556_tweezer = 3.68 # detuning on the 556 tweezer (probe) path (rel. to AOM center); MHz
......@@ -102,8 +171,8 @@ ramp_N = 1000 # number of steps in the ramp
# timings
tau_ref = -10e-3 # lead time for mogtable to start up; s
tau_ramp = 30e-3 # ramp duration; s
t_ramp = 20e-3 # start of ramp after t0; s
tau_ramp = 20e-3 # start of ramp after t0; s
tau_rampdur = 30e-3 # ramp duration; s
# frequency parameters
f_ramp = 90.0 # start of ramp; MHz
......@@ -112,33 +181,66 @@ nu_ramp = 3.58 # extent of ramp; MHz
# power parameters
p_ramp_beg = 29.0 # start of ramp; dBm
p_ramp_end = 0.0 # end of ramp; dBm
p_probe = 14.0 # power in probe beam AOMs; dBm
p_probe = 19.0 # power in probe beam AOMs; dBm
p_556_tweezer = -10.0 # power in the 556 tweezer (probe) AOM; dBm
allvars = {
k: list(v) if isinstance(v, np.ndarray) else v
for k, v in vars().items() if isinstance(v, (str, int, float, complex, tuple, list, dict, np.ndarray))
}
def make_sequence(shim_fb: float, shim_lr: float, shim_ud: float, tau_andor: float) \
-> SuperSequence:
# write book-keeping info to file(s)
if _save:
params = {
k.lower(): float(v) if isinstance(v, float)
else [float(vk) for vk in v] if isinstance(v, np.ndarray)
else v
for k, v in vars().items()
if isinstance(v, (str, int, float, complex, tuple, list, dict, np.ndarray))
if k[:1] != "_" and k not in dir(lib)
}
if not outdir.is_dir():
print(f":: mkdir -p '{str(outdir):s}'")
outdir.mkdir(parents=True)
with outdir.joinpath("params.toml").open('w') as outfile:
toml.dump(params, outfile)
with outdir.joinpath("comments.txt").open('w') as outfile:
outfile.write(comments)
def make_sequence(
shim_fb: float,
shim_lr: float,
shim_ud: float,
tau_andor: float,
tau_probe: float
) -> SuperSequence:
SEQ = SuperSequence(
outdir.joinpath("sequences"),
f"fb={shim_fb:.5f}_lr={shim_lr:.5f}_ud={shim_ud:.5f}_tau-andor={tau_andor:.5f}",
(
f"fb={shim_fb:.5f}"
f"_lr={shim_lr:.5f}"
f"_ud={shim_ud:.5f}"
f"_tau-andor={tau_andor:.5f}"
f"_tau-probe={tau_probe:.5f}"
),
{
"Flir": (Sequence()
+ Sequence.digital_pulse(
*C.flir_trig,
t0 + tau_ncool + tau_pause + tau_flir,
camera_config["exposure_time"] * 1e-6 # convert back us -> s
flir_config["exposure_time"] * 1e-6 # convert back us -> s
)
).with_color("C2"),
"EMCCD": (Sequence()
+ Sequence.digital_pulse(
*C.andor_trig,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + tau_dark + tau_andor - 27e-3, # shutter time
10e-3 # pulse length is arbitrary; currently set to exposure time
(t0
+ tau_ncool
+ tau_pause
+ tau_twzr_load
+ tau_preprobe
+ tau_pp
+ tau_dark_open
+ tau_andor - 27e-3 # shutter time
),
tau_image
)
).with_color("C2"),
......@@ -265,7 +367,7 @@ def make_sequence(shim_fb: float, shim_lr: float, shim_ud: float, tau_andor: flo
+ Sequence.digital_hilo(
*C.mot3_green_sh,
t0 - 3.8e-3,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp,
)
+ Sequence.serial_bits_c(
......@@ -297,39 +399,44 @@ def make_sequence(shim_fb: float, shim_lr: float, shim_ud: float, tau_andor: flo
},
CONNECTIONS
)
SEQ["Sequence"] = ( # dummy sequence; ensures that EW backend stays in-sequence
Sequence.digital_hilo(
*C.dummy,
0.0,
t0 + tau_all + 1e-3
)
).with_color("k")
if flir_two_shots:
SEQ["Flir"] = (
SEQ["Flir"]
+ Sequence.digital_pulse(
*C.flir_trig,
t0 + tau_ncool + tau_pause + tau_flir_second,
camera_config["exposure_time"] * 1e-6 # convert us -> s
flir_config["exposure_time"] * 1e-6 # convert us -> s
)
).with_color("C2")
if not use_cmot_preprobe:
SEQ["Pre-probe"] = (Sequence()
+ Sequence.digital_pulse(
*C.probe_green_aom,
t0 + tau_ncool + tau_pause + tau_twzr_load,
tau_preprobe,
invert=True
)
).with_color("g")
if check_556_tweezer:
SEQ["556 tweezer"] = (Sequence()
+ Sequence.digital_pulse(
*C.tweezer_green_aom,
t0 + tau_ncool + tau_pause,
camera_config["exposure_time"] * 1e-6 # convert us -> s
flir_config["exposure_time"] * 1e-6 # convert us -> s
+ 2e-3 # make sure the tweezer is on while Flir is exposed
)
+ Sequence.digital_pulse(
*C.tweezer_green_sh,
t0 + tau_ncool + tau_pause - 5e-3, # shutter time and a bit extra for noise
camera_config["exposure_time"] * 1e-6 + 10e-3
flir_config["exposure_time"] * 1e-6 + 10e-3
)
# + Sequence.digital_pulse(
# *C.probe_green_aom,
# t0 + tau_ncool + tau_pause,
# camera_config["exposure_time"] * 1e-6 # convert us -> s
# flir_config["exposure_time"] * 1e-6 # convert us -> s
# + 2e-3 # make sure the tweezer is on while Flir is exposed
# )
).with_color("g")
......@@ -337,7 +444,7 @@ def make_sequence(shim_fb: float, shim_lr: float, shim_ud: float, tau_andor: flo
SEQ["Green imaging"] = (Sequence()
+ Sequence.digital_pulse(
*C.probe_green_aom,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + tau_dark,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp + tau_dark_open,
tau_probe,
invert=True
)
......@@ -348,6 +455,14 @@ def make_sequence(shim_fb: float, shim_lr: float, shim_ud: float, tau_andor: flo
# )
).with_color("C6")
SEQ["Sequence"] = ( # dummy sequence; ensures that EW backend stays in-sequence
Sequence.digital_hilo(
*C.dummy,
0.0,
t0 + tau_all + 10e-3
)
).with_color("k")
return SEQ
# background sequence -- timings are hard-coded because they're not important
......@@ -378,7 +493,7 @@ seq_bkgd = SuperSequence(
).with_color("C6"),
"Camera": (Sequence
.digital_pulse(*C.flir_trig, 70e-3, camera_config["exposure_time"] * 1e-6)
.digital_pulse(*C.flir_trig, 70e-3, flir_config["exposure_time"] * 1e-6)
).with_color("C2"),
# "Scope": (Sequence
......@@ -391,7 +506,7 @@ seq_bkgd = SuperSequence(
def make_mot_mogtable(mot_det: float, probe_proxy_det: float, pp_det: float):
# def make_mot_mogtable(mot_det: float):
# ramp_N is number of steps, not points, so use ramp_N + 1 for number of points
RAMP_T = np.linspace(t_ramp - tau_ref, t_ramp - tau_ref + tau_ramp, ramp_N + 1)
RAMP_T = np.linspace(tau_ramp - tau_ref, tau_ramp - tau_ref + tau_rampdur, ramp_N + 1)
RAMP_F = np.linspace(f_ramp, f_ramp + nu_ramp, ramp_N + 1)
RAMP_P = np.linspace(p_ramp_beg, p_ramp_end, ramp_N + 1)
......@@ -406,22 +521,50 @@ def make_mot_mogtable(mot_det: float, probe_proxy_det: float, pp_det: float):
# apply detuning for loading
<< MOGEvent(frequency=RAMP_F[-1] + mot_det)
@ (-tau_ref + tau_ncool + tau_pause + 1.7e-3) # unknown source of timing error
)
# switch to imaging frequency to test in-tweezer cooling
<< MOGEvent(frequency=90.0 + probe_proxy_det)
@ (-tau_ref + tau_ncool + tau_pause + tau_twzr_load + 1.7e-3) # unknown source of timing error
if use_cmot_preprobe:
(mogtable
# switch to imaging frequency to test in-tweezer cooling
<< MOGEvent(frequency=90.0 + probe_proxy_det)
@ (-tau_ref + tau_ncool + tau_pause + tau_twzr_load + 1.7e-3) # unknown source of timing error
)
(mogtable
# apply detuning for parity projection
<< MOGEvent(frequency=90.0 + pp_det)
@ (-tau_ref + tau_ncool + tau_pause + tau_twzr_load + tau_hold + 1.7e-3) # unknown source of timing error
@ (-tau_ref
+ tau_ncool
+ tau_pause
+ tau_twzr_load
+ use_cmot_preprobe * tau_preprobe
+ 1.7e-3 # unknown source of timing error
)
# detune and depower the MOT beams for loading tweezers after the CMOT ramp
# is finished
<< MOGEvent(frequency=RAMP_F[-1] + det_block, power=-50.0)
@ (-tau_ref + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + 1.7e-3) # unknown source of timing error
@ (-tau_ref
+ tau_ncool
+ tau_pause
+ tau_twzr_load
+ use_cmot_preprobe * tau_preprobe
+ tau_pp
+ 1.7e-3 # unknown source of timing error
)
)
return mogtable
return MOGSuperTable(
outdir.joinpath("mot_mogtables"),
(
f"mot-det={mot_det:.5f}"
f"_probe-proxy-det={probe_proxy_det:.5f}"
f"_pp-det={pp_det:.5f}"
),
{
"cmot beam control": mogtable
}
)
# SCRIPT CONTROLLER
class NarrowCoolingTweezerAlignment(Controller):
......@@ -433,7 +576,7 @@ class NarrowCoolingTweezerAlignment(Controller):
# self.cam = FLIR.connect()
# (self.cam
# .configure_capture(**camera_config)
# .configure_capture(**flir_config)
# .configure_trigger()
# )
......@@ -441,7 +584,7 @@ class NarrowCoolingTweezerAlignment(Controller):
if not check_556_tweezer:
self.tb.set_amplitude(p_probe)
self.mog = MOGRF.connect().set_mode(1, "TSB")
self.mog = MOGRF.connect(timeout_retry=1).set_mode(1, "TSB")
if check_556_tweezer:
(self.mog
.set_frequency(2, 90.0 + det_556_tweezer).set_power(2, p_556_tweezer)
......@@ -469,9 +612,9 @@ class NarrowCoolingTweezerAlignment(Controller):
def run_sequence(self, *args):
N_mog = np.prod([len(X) for X in [DET_MOT, DET_PROBE_PROXY, DET_PP]])
N_probe = len(DET_PROBE)
N_ew = np.prod([len(X) for X in [SHIMS_FB, SHIMS_LR, SHIMS_UD, TAU_ANDOR]])
N_ew = np.prod([len(X) for X in [SHIMS_FB, SHIMS_LR, SHIMS_UD, TAU_ANDOR, TAU_PROBE]])
N = [N_mog, N_probe, N_ew, reps]
N = [reps, N_mog, N_probe, N_ew]
NN = [np.prod(N[-k:]) for k in range(1, len(N))][::-1] + [1]
TOT = np.prod(N)
......@@ -481,43 +624,52 @@ class NarrowCoolingTweezerAlignment(Controller):
)
# loop over generators for memory efficiency
mot_mogtables = lambda: (
self.mot_mogstables = lambda: (
make_mot_mogtable(d_mot, d_probe_proxy, d_pp)
for d_mot, d_probe_proxy, d_pp in product(DET_MOT, DET_PROBE_PROXY, DET_PP)
)
sequences = lambda: (
make_sequence(fb, lr, ud, tau_andor).to_sequence()
for fb, lr, ud, tau_andor in product(SHIMS_FB, SHIMS_LR, SHIMS_UD, TAU_ANDOR)
self.ssequences = lambda: (
make_sequence(fb, lr, ud, tau_andor, tau_probe)
for fb, lr, ud, tau_andor, tau_probe
in product(SHIMS_FB, SHIMS_LR, SHIMS_UD, TAU_ANDOR, TAU_PROBE)
)
t0 = timeit.default_timer()
for i, table in enumerate(mot_mogtables()):
(self.mog
.set_frequency(1, 90.0).set_power(1, -50.0) # make sure the AOM is off
.table_load(1, table)
.set_table_rearm(1, True)
.table_arm(1)
(self.mog
.set_frequency(1, 90.0).set_power(1, -50.0)
.table_load(1, make_mot_mogtable(DET_MOT[0], DET_PROBE_PROXY[0], DET_PP[0]).to_mogtable())
.set_table_rearm(1, True)
.table_arm(1)
)
)
for j, d_probe in enumerate(DET_PROBE):
(self.tb
.set_frequency(90.0 + d_probe)
)
for k, seq in enumerate(sequences()):
for rep in range(reps):
t0 = timeit.default_timer()
for rep in range(reps):
for i, table in enumerate(self.mot_mogstables()):
if N_mog > 1:
(self.mog
.table_load(1, table.to_mogtable())
.set_table_rearm(1, True)
.table_arm(1)
)
for j, d_probe in enumerate(DET_PROBE):
(self.tb
.set_frequency(90.0 + d_probe)
)
for k, seq in enumerate(self.ssequences()):
print(fmt.format(
i + 1, j + 1, k + 1, rep + 1,
100.0 * (sum(q * nnq for q, nnq in zip([i, j, k, rep], NN)) + 1) / TOT
rep + 1, i + 1, j + 1, k + 1,
100.0 * (sum(q * nnq for q, nnq in zip([rep, i, j, k], NN)) + 1) / TOT
), end="", flush=True)
(self.comp
.enqueue(seq)
.enqueue(seq.to_sequence())
.run(printflag=False)
.clear()
)
(self.mog
.table_stop(1)
.table_clear(1)
)
self.mog.table_stop(1)
if N_mog > 1:
self.mog.table_clear(1)
else:
self.mog.table_stop(1).set_table_rearm(1, True).table_arm(1)
print("")
if take_background:
print("background")
......@@ -589,7 +741,13 @@ class NarrowCoolingTweezerAlignment(Controller):
f"\n{type(err).__name__}: {err}")
def postcmd(self, *args):
pass
if _save:
for sseq in self.ssequences():
sseq.save(printflag=False)
for stab in self.mot_mogstables():
stab.save(printflag=False)
# names = list()
# for name in self.names:
# if flir_two_shots:
......@@ -617,7 +775,7 @@ class NarrowCoolingTweezerAlignment(Controller):
# data = FluorescenceScanData(
# outdir=outdir,
# arrays=arrays,
# config=camera_config,
# config=flir_config,
# comments=comments
# )
# data.compute_results(
......@@ -637,36 +795,41 @@ class NarrowCoolingTweezerAlignment(Controller):
# # sseq.save()
def cmd_visualize(self, *args):
seq = make_sequence(SHIMS_FB.mean(), SHIMS_LR.mean(), SHIMS_UD.mean(), TAU_ANDOR.mean())
seq = make_sequence(
SHIMS_FB.mean(), SHIMS_LR.mean(), SHIMS_UD.mean(), TAU_ANDOR.mean(), TAU_PROBE.mean())
try:
tmin, tmax = float(args[0]), float(args[1])
except IndexError:
tmin, tmax = 0.0, seq.max_time()
P = seq.draw_detailed(mogtables=[
( make_mot_mogtable(DET_MOT.mean(), DET_PROBE_PROXY.mean(), DET_PP.mean()).with_color("C6"),
dict(name="Green MOT AOM", offset=t0 + tau_ref) ),
(
make_mot_mogtable(DET_MOT.mean(), DET_PROBE_PROXY.mean(), DET_PP.mean())
.to_mogtable().with_color("C6"),
dict(name="Green MOT AOM", offset=t0 + tau_ref)
),
])
for t in [
t0,
t0 + tau_ncool,
t0 + tau_ncool + tau_pause,
t0 + tau_ncool + tau_pause + tau_twzr_load,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + tau_dark,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + tau_dark + tau_probe,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp + tau_dark_open,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp + tau_dark_open + TAU_PROBE.mean(),
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp + tau_dark_open + tau_image,
]:
P.axvline(t, color="r", linestyle="-", linewidth=0.4)
for t in [
t0 + t_ramp,
t0 + t_ramp + tau_ramp,
# t0 + t_ramp + tau_ramp + tau_hold,
t0 + tau_ramp,
t0 + tau_ramp + tau_rampdur,
# t0 + tau_ramp + tau_rampdur + tau_preprobe,
]:
P.axvline(t, color="g", linestyle="--", linewidth=0.4)
for t in [
t0 + tau_comp,
t0 + tau_ncool + tau_pause + tau_flir,
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_hold + tau_pp + tau_dark + TAU_ANDOR.mean(),
t0 + tau_ncool + tau_pause + tau_twzr_load + tau_preprobe + tau_pp + tau_dark_open + TAU_ANDOR.mean(),
]:
P.axvline(t, color="b", linestyle=":", linewidth=0.4)
(P
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment