Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sriharijayaram5/73c3c2ed4c51919b75c5fd67119c2894 to your computer and use it in GitHub Desktop.
Save sriharijayaram5/73c3c2ed4c51919b75c5fd67119c2894 to your computer and use it in GitHub Desktop.
Running pulsed measurements in Qudi with Prime95B
Display the source blob
Display the rendered blob
Raw
{
"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
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment