Last active
December 7, 2020 09:36
-
-
Save sriharijayaram5/73c3c2ed4c51919b75c5fd67119c2894 to your computer and use it in GitHub Desktop.
Running pulsed measurements in Qudi with Prime95B
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"import matplotlib\n", | |
"from tqdm import tqdm\n", | |
"import datetime\n", | |
"import glob\n", | |
"import logic.pulsed.pulse_objects as po\n", | |
"import scipy.signal" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Attempt at rabi analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"locs = 'C:/Data/Prime95B/2020/11/20201126/Pulsed/auto_rabi_small_roi_2000_0_-20_500_(150, 138)pxs_-2dBm_20201127-0856-50.npz'\n", | |
"\n", | |
"data = np.load(locs)\n", | |
"a = data['data'][:,0,40:52,80:82]/data['data'][:,1,40:52,80:82]\n", | |
"y = np.mean(a, axis=(1,2))\n", | |
"x = np.arange(2000,0,-20)*1e-9*1e6\n", | |
"plt.plot(x, y, 'ro')\n", | |
"\n", | |
"fit = fitlogic.make_sinetriplewiththreeexpdecay_fit(x_axis=x/1e6, data=y, estimator=fitlogic.estimate_sinetriplewiththreeexpdecay)\n", | |
"plt.plot(x, fit.best_fit, 'b--')\n", | |
"plt.show()\n", | |
"print(fit.fit_report())\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Attempt at T1 analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"locs = 'C:/Data/Prime95B/2020/12/20201204/Pulsed/20201204-0539-49_T2_ROI3_101000_0_-200_10_(66, 80)pxs_-16dBm.npz'\n", | |
"plt.style.use(save.mpl_qd_style)\n", | |
"data = np.load(locs)\n", | |
"a = (data['data'][:,1,:,:])-(data['data'][:,0,:,:])\n", | |
"y = np.mean(a, axis=(1,2))\n", | |
"x = np.arange(101000,0,-200)*1e-9\n", | |
"plt.plot(x, y, 'ro-')\n", | |
"\n", | |
"# fit = fitlogic.make_decayexponentialstretched_fit(x_axis=np.flip(x, axis=0), data=np.flip(y, axis=0), estimator=fitlogic.estimate_decayexponentialstretched)\n", | |
"# plt.plot(np.flip(x, axis=0), fit.best_fit, 'b--')\n", | |
"# plt.show()\n", | |
"# # print(fit.fit_report())#, fit.params['frequency']/1e6, 1/fit.params['frequency'])\n", | |
"# plt.plot(x, np.mean(data['data'][:,0,:,:], axis=(1,2)),'bo-')\n", | |
"# plt.plot(x, np.mean(data['data'][:,1,:,:], axis=(1,2)), 'ro-')\n", | |
"# plt.show()\n", | |
"\n", | |
"# locs = 'C:/Data/Prime95B/2020/11/20201127/auto_T2_small_roi_6.91e6Hz_wref_3pih_201000_0_-5000_100_(150, 138)pxs_-2dBm_20201129-2314-22.npz'\n", | |
"\n", | |
"# data = np.load(locs)\n", | |
"# a = 1/(data['data'][:,0,:,:])*(data['data'][:,1,:,:])\n", | |
"# z = np.mean(a, axis=(1,2))\n", | |
"# x = np.arange(201000,0,-5000)*1e-9\n", | |
"# plt.plot(x, z, 'ro-')\n", | |
"# plt.plot(x, y, 'bo-')\n", | |
"\n", | |
"# # fit = fitlogic.make_decayexponentialstretched_fit(x_axis=np.flip(x, axis=0), data=np.flip(y-z, axis=0), estimator=fitlogic.estimate_decayexponentialstretched)\n", | |
"# # plt.plot(np.flip(x, axis=0), fit.best_fit, 'b--')\n", | |
"# plt.show()\n", | |
"# # print(fit.fit_report())#, fit.params['frequency']/1e6, 1/fit.params['frequency'])\n", | |
"# plt.plot(x, np.mean(data['data'][:,0,:,:], axis=(1,2)),'bo-')\n", | |
"# plt.plot(x, np.mean(data['data'][:,1,:,:], axis=(1,2)), 'ro-')\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## For old data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"av = []\n", | |
"x = []\n", | |
"locs = sorted(glob.glob('C:/Data/Prime95B/2020/11/20201124/Pulsed/*run_8*'), key=len)\n", | |
"for i,loc in enumerate(locs):\n", | |
" data = np.load(loc)\n", | |
"# print(loc)\n", | |
"# a = np.mean(data['data'], axis=(1,2))\n", | |
" a = data['data'][0]/data['data'][1]\n", | |
" a = np.mean(a[:,:])\n", | |
" av.append(a)\n", | |
" x.append(i)\n", | |
"x = np.arange(10,1200,20)*1e-9\n", | |
"y = np.array(av)\n", | |
"plt.plot(x, y, 'ro')\n", | |
"\n", | |
"fit = fitlogic.make_sineexponentialdecay_fit(x_axis=x[:], data=y[:], estimator=fitlogic.estimate_sineexponentialdecay)\n", | |
"plt.plot(x[:], fit.best_fit, 'b--')\n", | |
"plt.show()\n", | |
"print(fit.fit_report(), fit.params['frequency']/1e6, 1/fit.params['frequency'])\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def determine_ideal_mw_power(rabi_frequency, p0, v1):\n", | |
" p1 = p0 - 20*np.log10(rabi_frequency/v1) \n", | |
" return round(p1,2)\n", | |
"print(determine_ideal_mw_power(11.7*1e6, -6, 1/(40e-9)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"t = np.arange(5,100,2)*1e-9\n", | |
"av = np.array(av)\n", | |
"sp = np.fft.fft(av)/len(av)\n", | |
"sp = sp[range(int(len(av)/2))]\n", | |
"samplingFrequency = len(t)\n", | |
"tpCount = len(av)\n", | |
"values = np.arange(int(tpCount/2))\n", | |
"timePeriod = tpCount/samplingFrequency\n", | |
"frequencies = values/timePeriod\n", | |
"\n", | |
"# freq = np.fft.fftfreq(t.shape[-1])\n", | |
"plt.plot(frequencies, abs(sp), 'bo')#, freq, sp.imag)\n", | |
"plt.show()\n", | |
"print(frequencies[0])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Creating pulse ensemble, uploading, running, collecting images - loop and save" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# ODMR" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_odmr_pulse_block(ns, not_ref, rabi_ns):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_odmr_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Rabi" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_rabi_pulse_block(ns, not_ref, rabi_ns=None):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_rabi_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# T1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_T1_pulse_block(ns, not_ref, rabi_ns):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_T1_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Hahn Echo" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_HEcho_pulse_block(ns, not_ref, rabi_ns):\n", | |
" if not_ref:\n", | |
" last_ns = rabi_ns/4\n", | |
" else:\n", | |
" last_ns = rabi_ns*3/4\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': True, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/4*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': True, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': True, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=last_ns*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_HEcho_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Hahn Echo w/ reference" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_HEcho_pulse_block_w_ref_pih(ns, not_ref, rabi_ns):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/4*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/4*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_HEcho_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block\n", | |
"\n", | |
"def make_HEcho_pulse_block_w_ref_3pih(ns, not_ref, rabi_ns):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/4*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ns/2*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': not_ref, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=rabi_ns*3/4*1e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" d_ch = {'d_ch1': True, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=3e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=500e-9, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
"\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': False, 'd_ch5': False, 'd_ch6': False, 'd_ch7': False, 'd_ch8': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=1e-6, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'auto_HEcho_P95B_{ns}_{not_ref}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Create and upload pulse ensemble" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def make_trigger_cam_block(ms, odmr=False):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': True, 'd_ch4': False, 'd_ch3': odmr}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ms*1e-3, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'trigger_cam_{odmr}_{ms}', element_list=ele)\n", | |
" \n", | |
" return pulse_block\n", | |
"\n", | |
"def wait_block(ms):\n", | |
" ele = []\n", | |
" d_ch = {'d_ch1': False, 'd_ch2': False, 'd_ch4': False, 'd_ch3': False}\n", | |
" ele.append(po.PulseBlockElement(init_length_s=ms*1e-3, increment_s=0, pulse_function=None, digital_high=d_ch, laser_on=False))\n", | |
" \n", | |
" pulse_block = po.PulseBlock(name=f'wait_block_{ms}', element_list=ele)\n", | |
" \n", | |
" return pulse_block" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Upload function" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def upload_CW_ensemble(t_ns, rep, pulse_fnt, rabi_ns, odmr):\n", | |
" pulse = pulse_fnt(t_ns, True, rabi_ns)\n", | |
" pulse_ref = pulse_fnt(t_ns, False, rabi_ns)\n", | |
" trigger_cam_1 = make_trigger_cam_block(26, odmr)\n", | |
" trigger_cam_2 = make_trigger_cam_block(26)\n", | |
" wait = wait_block(100)\n", | |
"\n", | |
" created_blocks = [pulse, pulse_ref, trigger_cam_1, trigger_cam_2, wait]\n", | |
" for block in created_blocks:\n", | |
" sequencegeneratorlogic.save_block(block)\n", | |
"\n", | |
" bl = [(trigger_cam_1.name,1), (pulse.name,rep), (wait.name,1), (trigger_cam_2.name,1), (pulse_ref.name,rep)]\n", | |
" auto_pulse_CW = po.PulseBlockEnsemble(name=f'auto_pulse_CW_{t_ns}', block_list=bl, rotating_frame=False)\n", | |
"\n", | |
" ensemble = auto_pulse_CW\n", | |
" ensemblename = auto_pulse_CW.name\n", | |
" sequencegeneratorlogic.save_ensemble(ensemble)\n", | |
" ret,_,_ = sequencegeneratorlogic.sample_pulse_block_ensemble(ensemblename)\n", | |
" sequencegeneratorlogic.load_ensemble(ensemblename)\n", | |
" return ret" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Run pulse and collect image function" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def do_cam_CW_pulsed_measure():\n", | |
" mycamera.ready_pulsed(2)\n", | |
"\n", | |
" pulsedmeasurementlogic.pulse_generator_on()\n", | |
" mycamlogic.start_trigger_seq(2)\n", | |
" \n", | |
" pulsedmeasurementlogic.pulse_generator_off()\n", | |
" return mycamlogic.get_last_image()\n", | |
"\n", | |
"def set_start_MW(power, freq):\n", | |
" settings = {\n", | |
" 'power': power,\n", | |
" 'frequency': freq,\n", | |
" 'use_ext_microwave': True\n", | |
" }\n", | |
" pulsedmeasurementlogic.set_microwave_settings(settings_dict=settings)\n", | |
" pulsedmeasurementlogic.microwave_on()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Main function" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def main(start, stop, step, n_runs, rep, power, freq, tag, pulse_fnt, rabi_ns, odmr=False, explicit_tau_list=None):\n", | |
" sequencegeneratorlogic.pulse_generator_settings = {'activation_config':'pulsed_1'}\n", | |
" if explicit_tau_list:\n", | |
" tau_list = explicit_tau_list\n", | |
" else:\n", | |
" tau_list = np.arange(start,stop,step)\n", | |
" size = mycamlogic.get_size()\n", | |
" if odmr:\n", | |
" odmrlogic.set_sweep_parameters(start, stop, step, power)\n", | |
" odmrlogic.set_trigger(0, 1)\n", | |
" odmrlogic.mw_sweep_on()\n", | |
" else:\n", | |
" set_start_MW(power, freq)\n", | |
" save_array = np.zeros((len(tau_list), 2, size[1], size[0]), dtype = np.float64)\n", | |
" err_array = np.zeros((len(tau_list), 2), dtype = np.float32)\n", | |
" for idx, t_ns in enumerate(tqdm(tau_list)):\n", | |
" err = upload_CW_ensemble(t_ns, rep, pulse_fnt, rabi_ns, odmr)\n", | |
" if err==-1:\n", | |
" print('Memory error')\n", | |
" break\n", | |
" img = np.zeros((n_runs, 2, size[1], size[0]), dtype = np.float64)\n", | |
" for i in range(n_runs):\n", | |
" img[i] = do_cam_CW_pulsed_measure()\n", | |
" img_data = np.mean(img, axis=0)\n", | |
" save_array[idx] = img_data\n", | |
" mean = np.mean(img, axis=(2,3))\n", | |
" err_array[idx] = np.std(mean, ddof=1, axis=0)/np.sqrt(n_runs)\n", | |
" timestamp = datetime.datetime.now()\n", | |
" t = timestamp.strftime(\"%Y%m%d-%H%M-%S\")\n", | |
" parameters = {\n", | |
" 'Tag': tag,\n", | |
" 'Start_ns': start,\n", | |
" 'Step_ns': step,\n", | |
" 'Stop_ns': stop,\n", | |
" 'ROI Size(px)': size,\n", | |
" 'No. of averaging runs': n_runs,\n", | |
" 'Repetitions': rep,\n", | |
" 'Pulse function': pulse_fnt.__name__,\n", | |
" 'Rabi period(ns)': rabi_ns,\n", | |
" 'MW Freq': freq,\n", | |
" 'MW power': power,\n", | |
" 'ODMR': odmr\n", | |
" }\n", | |
" data = {\n", | |
" 'Tau list (ns)': tau_list\n", | |
" }\n", | |
" if err!=-1:\n", | |
" save.save_data(data, filepath=save.get_path_for_module('Pulsed'), parameters=parameters, filename=None, filelabel=tag, timestamp=timestamp, filetype='text', fmt='%.15e', delimiter='\\t', plotfig=None)\n", | |
" np.savez_compressed(f'{save.get_path_for_module(\"Pulsed\")}/{t}_{tag}_{start}_{stop}_{step}_{n_runs}_{size}pxs_{power}dBm', data=save_array, err=err_array)\n", | |
" pulsedmasterlogic.delete_all_pulse_blocks()\n", | |
" pulsedmasterlogic.delete_all_block_ensembles()\n", | |
" if odmr:\n", | |
" odmrlogic.reset_sweep()\n", | |
" pulsedmeasurementlogic.microwave_off()\n", | |
" mycamera.pulsed_done()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Pulsed ODMR" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"main(start=2.82e9, stop=2.92e9, step=1000e3, n_runs=1, rep=10000, power=-16, freq=None, tag='odmr_ROI3', pulse_fnt=make_odmr_pulse_block, rabi_ns=(1/1437424)*1e9, odmr=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Rabi" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"main(start=2010, stop=0, step=-25, n_runs=50, rep=10000, power=-16, freq=2.8533e9, tag='rabi_ROI3', pulse_fnt=make_rabi_pulse_block, rabi_ns=None)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### T1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"tau_list = [3.5e6, 3.0e6, 2.5e6, 2.0e6, 1.5e6, 1e6, 500e3, 100e3, 10e3, 1e3, 100, 10]\n", | |
"# tau_list = None\n", | |
"main(start=3501000, stop=0, step=-500000, n_runs=100, rep=750, power=-16, freq=2.8533e9, tag='T1_ROI3', pulse_fnt=make_T1_pulse_block, rabi_ns=(1/1488424)*1e9, explicit_tau_list=tau_list)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### HEcho" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"main(start=101000, stop=0, step=-5000, n_runs=30, rep=1000, power=-16, freq=2.8533e9, tag='T2_ROI3_err_test', pulse_fnt=make_HEcho_pulse_block, rabi_ns=(1/1488424)*1e9)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# main(start=201000, stop=0, step=-5000, n_runs=100, rep=1000, power=-2, freq=2.8625e9, tag='T2_small_roi_6.91e6Hz_wref_pih', pulse_fnt=make_HEcho_pulse_block_w_ref_pih, rabi_ns=(1/6.910936e6)*1e9)\n", | |
"# main(start=201000, stop=0, step=-5000, n_runs=100, rep=1000, power=-2, freq=2.8625e9, tag='T2_small_roi_6.91e6Hz_wref_3pih', pulse_fnt=make_HEcho_pulse_block_w_ref_pih, rabi_ns=(1/6.910936e6)*1e9)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"size = mycamlogic.get_size()\n", | |
"print(np.arange(101000,0,-5000), len(np.arange(101000,0,-100)))\n", | |
"print(26+(4.5*250)+100+26+(4.5*250))\n", | |
"# pulsedmasterlogic.delete_all_pulse_blocks()\n", | |
"# pulsedmasterlogic.delete_all_block_ensembles()\n" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Qudi", | |
"language": "python", | |
"name": "qudi" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": "3.6.5" | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment