#!/usr/bin/env python
# coding: utf-8

# # Qcodes example with Keysight N9030B

# This notebook shows how to use Keysight N9030B instrument driver in Spectrum Analyzer and Phase Noise Modes for Swept SA and Log Plot measurements respectively.
# 
# Let's begin!

# In[1]:


import os

from qcodes.dataset import (
    Measurement,
    initialise_or_create_database_at,
    load_or_create_experiment,
    plot_by_id,
    plot_dataset,
)
from qcodes.instrument_drivers.Keysight import KeysightN9030B


# In[2]:


driver = KeysightN9030B("n9030b", "driver_address")


# In[3]:


driver.IDN()


# ## Spectrum Analyzer mode with Swept SA measurement

# In[4]:


sa = driver.sa


# In[5]:


sa.setup_swept_sa_sweep(start=200, stop=10e3, npts=20001)


# ### With QCoDeS Measurement

# Initialize database and begin experiment...

# In[6]:


tutorial_db_path = os.path.join(os.getcwd(), "tutorial.db")
initialise_or_create_database_at(tutorial_db_path)
load_or_create_experiment(experiment_name="tutorial_exp", sample_name="no sample")


# In[7]:


meas1 = Measurement()
meas1.register_parameter(sa.trace)


# In[8]:


with meas1.run() as datasaver:
    datasaver.add_result((sa.trace, sa.trace.get()))

dataset = datasaver.dataset


# #### Plot data

# In[9]:


_ = plot_dataset(dataset)


# ## Phase Noise mode with Log Plot measurement

# In[10]:


pn = driver.pn


# In[11]:


pn.setup_log_plot_sweep(start_offset=10, stop_offset=200, npts=1001)


# ### With QCoDeS Measurement

# In[12]:


meas2 = Measurement()
meas2.register_parameter(pn.trace)


# In[13]:


with meas2.run() as datasaver:
    datasaver.add_result((pn.trace, pn.trace.get()))

run_id = datasaver.run_id


# #### Plot data

# In[14]:


_ = plot_by_id(run_id)


# In[ ]: