diff --git a/hp4194/cv.py b/hp4194/cv.py
new file mode 100644
index 0000000000000000000000000000000000000000..06260fb245417b70015513d231f9479b3430a66b
--- /dev/null
+++ b/hp4194/cv.py
@@ -0,0 +1,78 @@
+from interface import *
+import control
+import matplotlib.pyplot as plt
+
+
+#connect to device
+device = control.hp4194()
+device.write('reset')
+
+#create interface
+messparameter,messparameter_dict = messparameter()
+sweep_parameter,sweep_parameter_dict = sweep_parameter()
+control_panel,measure,calibrate,clear_graphs,view=control_panel()
+
+
+out = widgets.Output()
+
+hbox1 = widgets.HBox([sample,control_panel])
+display(hbox1)
+hbox2=widgets.HBox([messparameter,sweep_parameter])
+display(hbox2)
+display(out)
+
+def add_widgets_to_list(source_dictionary,target_list):
+    for widget in source_dictionary.values():
+        target_list.append(widget)
+
+
+all_widgets = [measure,calibrate,clear_graphs]
+add_widgets_to_list(view,all_widgets)
+add_widgets_to_list(sweep_parameter_dict,all_widgets)
+add_widgets_to_list(messparameter_dict,all_widgets)
+
+def change_state(widgets_list):
+    for widget in widgets_list:
+        widget.disabled = not widget.disabled
+
+
+def on_calibrate_clicked(b):
+    with out:
+        change_state(all_widgets)
+        device.write('reset')
+
+    # perform an open calibration
+    device.inst.write("RQS255")
+
+    device.write('imp_G_B')
+    device.write('bias_off')
+
+    device.write('sweep_freq')
+    device.set_parameter('set_start',sweep_parameter_dict['start'].value)
+    device.set_parameter('set_stop',sweep_parameter_dict['stop'].value)
+    device.set_parameter('set_nop',sweep_parameter_dict['nop'].value)
+
+    if sweep_parameter['type']=='Linear':
+        device.write('sweep_lin')
+    else:# log
+        device.write('sweep_log')
+    if sweep_parameter['direction']=='Up':
+        device.write('sweep_up')
+    else:
+        device.write('sweep_down')
+
+    device.write('sweep_single')
+    device.write('imp_monitor_I')
+    device.set_parameter('set_osc',sweep_parameter_dict['osc'].value)
+    device.set_parameter('set_delay_time',sweep_parameter_dict['d_time'].value)
+    device.set_parameter('set_delay_apperture',sweep_parameter_dict['d_apperture'].value)
+    device.set_parameter('aver_num',sweep_parameter_dict['averaging'].value)
+
+    device.write('open_cal_on') #data saved in registers OG and OB
+    device.write('start_open_cal')
+    device.wait()
+    
+
+
+    change_state(all_widgets)
+    
\ No newline at end of file
diff --git a/hp4194/test_interface.ipynb b/hp4194/test_interface.ipynb
index 224a8fb4a90a8f2e5c2f3e9f0e873baedc37da50..2da6bbc3c037e45a5915ac4fb3915dd430b6f552 100644
--- a/hp4194/test_interface.ipynb
+++ b/hp4194/test_interface.ipynb
@@ -71,7 +71,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "65fbeb88cf39431eb687d12f6b1ab62a",
+       "model_id": "9d5320c4d8714f21907d8a2845d1361b",
        "version_major": 2,
        "version_minor": 0
       },
@@ -85,7 +85,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "ef76aa4581d0423fb10586cd6ce61587",
+       "model_id": "0283052d535f40f3b9d71d12950bcf7f",
        "version_major": 2,
        "version_minor": 0
       },
@@ -99,7 +99,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "bc5a8b63c9054093ae38ece5ec8f77e3",
+       "model_id": "f9b54cce2db34bf0b214703d0e08d560",
        "version_major": 2,
        "version_minor": 0
       },