Commit 41cb812d authored by Yb Tweezer's avatar Yb Tweezer
Browse files

move tau_hold to be a probe-proxy block; update visualizer markers

parent 783ee27c
......@@ -42,13 +42,13 @@ flir_two_shots = False # use the Flir to take two shots
check_556_tweezer = False # use the 556 tweezer instead of the probe beams
# timings (not to scale)
# | tau_all |
# start | t0 | tau_ncool | tau_twzr_load | tau_pp | tau_dark | tau_probe | end
# | | |
# <tau_comp> | |
# | <tau_flir> |
# | | <tau_andor>
# | t_ramp | tau_ramp | tau_hold |
# | tau_all |
# start | t0 | tau_ncool | tau_twzr_load | tau_hold | tau_pp | tau_dark | tau_probe | end
# | | |
# <tau_comp> | |
# | <tau_flir> |
# | | <tau_andor>
# | t_ramp | tau_ramp |
# |
# <tau_ref>
t0 = 300e-3 # transfer to green MOT; s
......@@ -57,11 +57,12 @@ tau_blue_overlap = 2e-3 # overlap time of blue beams with green beams relative t
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_twzr_load = 100e-3 # time to load into tweezers; s
tau_twzr_load = 50e-3 # time to load into tweezers; s
tau_hold = 10e-3 # hold with CMOT beams at imaging (proxy) frequency
tau_dark = 27e-3 # shutter opening time for EMCCD; s
tau_pp = 0e-3 # parity projection time; s
tau_probe = 100e-3 # probe imaging time; s
tau_all = tau_ncool + tau_twzr_load + tau_pp + tau_dark + tau_probe # main sequence time; s
tau_probe = 50e-3 # probe imaging time; s
tau_all = tau_ncool + tau_twzr_load + tau_hold + tau_pp + tau_dark + tau_probe # main sequence time; s
# camera timings
tau_flir = -10e-3 # Flir camera time relative to end of narrow cooling; s
......@@ -86,6 +87,7 @@ B_COMP = np.linspace(B_green, B_green * 1.8, T_COMP.shape[0]) # compression ramp
# detunings
DET_MOT = np.linspace(+0.9, +0.9, 1) # green MOT detuning for tweezer loading (rel. to CMOT); MHz
DET_PROBE_PROXY = 3.68 + np.linspace(-1.0, +1.0, 11) # imaging conditions proxy using CMOT beams (rel. to AOM center); MHz
DET_PROBE = 3.68 + np.linspace(-0.4, -0.4, 1) # probe beam detuning for imaging (rel. to AOM center); MHz
# DET_PP = 3.68 + np.linspace(-1.0, +1.0, 11) # green MOT detuning for parity projection (rel. to AOM center); MHz
DET_PP = 3.68 + np.linspace(+0.8, +0.8, 1)
......@@ -100,7 +102,6 @@ ramp_N = 1000 # number of steps in the ramp
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_hold = 50e-3 # post-ramp holding time; s
# frequency parameters
f_ramp = 90.0 # start of ramp; MHz
......@@ -129,7 +130,7 @@ def make_sequence(name: str, shim_fb: float, shim_lr: float, shim_ud: float, tau
"EMCCD": (Sequence()
+ Sequence.digital_pulse(
*C.andor_trig,
t0 + tau_ncool + tau_twzr_load + tau_pp + tau_dark + tau_andor - 27e-3, # shutter time
t0 + tau_ncool + 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
)
).with_color("C2"),
......@@ -257,7 +258,7 @@ def make_sequence(name: str, shim_fb: float, shim_lr: float, shim_ud: float, tau
+ Sequence.digital_hilo(
*C.mot3_green_sh,
t0 - 1e-3,
t0 + tau_ncool + tau_twzr_load + tau_pp,
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp,
)
+ Sequence.serial_bits_c(
......@@ -329,7 +330,7 @@ def make_sequence(name: str, shim_fb: float, shim_lr: float, shim_ud: float, tau
SEQ["Green imaging"] = (Sequence()
+ Sequence.digital_pulse(
*C.probe_green_aom,
t0 + tau_ncool + tau_twzr_load + tau_pp + tau_dark,
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp + tau_dark,
tau_probe,
invert=True
)
......@@ -380,7 +381,7 @@ seq_bkgd = SuperSequence(
}, CONNECTIONS)
# DEFINE MOGRF SEQUENCE
def make_mot_mogtable(mot_det: float, pp_det: float):
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)
......@@ -397,15 +398,20 @@ def make_mot_mogtable(mot_det: float, pp_det: float):
(mogtable
# apply detuning for loading
<< MOGEvent(frequency=RAMP_F[-1] + mot_det)
@ (RAMP_T[-1] + tau_hold + 1.7e-3) # unknown source of timing error
@ (-tau_ref + tau_ncool + 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_twzr_load + 1.7e-3) # unknown source of timing error
# apply detuning for parity projection
<< MOGEvent(frequency=90.0 + pp_det)
@ (RAMP_T[-1] + tau_hold + tau_twzr_load + 1.7e-3) # unknown source of timing error
@ (-tau_ref + tau_ncool + tau_twzr_load + tau_hold + 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)
@ (RAMP_T[-1] + tau_hold + tau_twzr_load + tau_pp + 1.7e-3) # unknown source of timing error
@ (-tau_ref + tau_ncool + tau_twzr_load + tau_hold + tau_pp + 1.7e-3) # unknown source of timing error
)
return mogtable
......@@ -447,14 +453,16 @@ class NarrowCoolingTweezerAlignment(Controller):
# track the mogtables separately because they're slow to load to the controller
# they should be the slowest-varying parameter in scans
self.mot_mogtables = [make_mot_mogtable(d_mot, d_pp) for d_mot, d_pp in product(DET_MOT, DET_PP)]
# self.mot_mogtables = [make_mot_mogtable(d_mot) for d_mot in DET_MOT]
self.mot_mogtables = [
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)
]
print(f"done ({len(self.mot_mogtables) * len(DET_PROBE) * len(self.sequences) * reps})")
print(f"done ({len(self.mot_mogtables) * len(self.sequences) * reps})")
def run_sequence(self, *args):
fmt = ("\r "
+ " ".join(
fmt = ("\r "
+ " ".join(
f"{{:{int(np.log10(len(X))) + 1:.0f}}}/{len(X)}"
for X in [self.mot_mogtables, DET_PROBE, self.sequences, range(reps)]
)
......@@ -609,28 +617,29 @@ class NarrowCoolingTweezerAlignment(Controller):
except IndexError:
tmin, tmax = 0.0, seq.max_time()
P = seq.draw_detailed(mogtables=[
( make_mot_mogtable(DET_MOT.mean(), DET_PP.mean()).with_color("C6"),
( 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) ),
])
for t in [
t0,
t0 + tau_ncool,
t0 + tau_ncool + tau_twzr_load,
t0 + tau_ncool + tau_twzr_load + tau_pp,
t0 + tau_ncool + tau_twzr_load + tau_pp + tau_dark,
t0 + tau_ncool + tau_twzr_load + tau_pp + tau_dark + tau_probe,
t0 + tau_ncool + tau_twzr_load + tau_hold,
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp,
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp + tau_dark,
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp + tau_dark + tau_probe,
]:
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 + t_ramp + tau_ramp + tau_hold,
]:
P.axvline(t, color="g", linestyle="--", linewidth=0.4)
for t in [
t0 + tau_comp,
t0 + tau_ncool + tau_flir,
t0 + tau_ncool + tau_twzr_load + tau_pp + tau_dark + TAU_ANDOR.mean(),
t0 + tau_ncool + tau_twzr_load + tau_hold + tau_pp + tau_dark + TAU_ANDOR.mean(),
]:
P.axvline(t, color="b", linestyle=":", linewidth=0.4)
(P
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment