From e04f020f1ecd7b326110fe9327ae72cc17d94e91 Mon Sep 17 00:00:00 2001
From: unknown <asoalexandros@gmail.com>
Date: Fri, 11 Apr 2025 16:04:34 +0200
Subject: [PATCH] pn diode measurement

---
 hp4155/pn_Diode/diode.py              | 14 +++++++-------
 hp4155/pn_Diode/diode_interface.ipynb | 26 ++++++++++++++++++++------
 hp4155/pn_Diode/lib/help.py           | 25 ++++++++++++++++---------
 hp4155/pn_Diode/lib/interface.py      |  2 +-
 4 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/hp4155/pn_Diode/diode.py b/hp4155/pn_Diode/diode.py
index 5fa8004..3e0bb38 100644
--- a/hp4155/pn_Diode/diode.py
+++ b/hp4155/pn_Diode/diode.py
@@ -8,15 +8,15 @@ from help import *
 
 sample = sample_information_interface()
 parameters_1 = parameters_interface(0,0.02,10,"First Measurement")
-parameters_2 = parameters_interface(0,0.5,100,"Second Measurement")
+parameters_2 = parameters_interface(0,-0.5,-100,"Second Measurement")
 button = widgets.Button(description ='Start Measurement')
 output = widgets.Output()
 
 display(button,output)
 all_widgets = [button]
 add_widgets_to_list(sample,all_widgets)
-add_widgets_to_list(measurements_1,all_widgets)
-add_widgets_to_list(measurements_2,all_widgets)
+add_widgets_to_list(parameters_1,all_widgets)
+add_widgets_to_list(parameters_2,all_widgets)
 
 
 device = hp4155a.HP4155a('GPIB0::17::INSTR')
@@ -29,11 +29,11 @@ def on_button_clicked(b):
         
         valid = check_values(parameters_1) and check_values(parameters_2)
         if valid == True:
-            values = measure(parameters_1,parameters_2,area,device)
-            plot_results(values['VS'],values['ABSNOR'])
-            filename = f"DIODE_{sample['field'].value}.txt"
+            df = measure(parameters_1,parameters_2,area,device)
+            plot_results(df['VS'],df['ABSNOR'])
+            filename = f"pn_diode_{sample['field'].value}.txt"
             file = create_file(filename)
-            save_to_file(values,sample,parameters_1,parameters_2,file)
+            save_to_file(df,sample,parameters_1,parameters_2,file)
         
         change_state(all_widgets)
 
diff --git a/hp4155/pn_Diode/diode_interface.ipynb b/hp4155/pn_Diode/diode_interface.ipynb
index 36b70e0..68a389f 100644
--- a/hp4155/pn_Diode/diode_interface.ipynb
+++ b/hp4155/pn_Diode/diode_interface.ipynb
@@ -9,12 +9,12 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "399e5292f4d947f5b42b6090af57b70d",
+       "model_id": "0560c5f898da48b5a9865867f6d759be",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "HBox(children=(VBox(children=(Label(value='Sample Information', layout=Layout(height='auto', width='50%'), sty…"
+       "HBox(children=(VBox(children=(Label(value='Sample Information', layout=Layout(height='auto', width='auto'), st…"
       ]
      },
      "metadata": {},
@@ -23,12 +23,12 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "7eb1e9d92b4b4801b28229fe7fafc543",
+       "model_id": "5e698a443fc74b1c8e6abb0aa87200c3",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "GridspecLayout(children=(Label(value='V (SMU3)', layout=Layout(grid_area='widget001', height='auto', width='au…"
+       "GridspecLayout(children=(Label(value='First Measurement', layout=Layout(grid_area='widget001', height='auto', …"
       ]
      },
      "metadata": {},
@@ -37,7 +37,21 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "68855659a4894faf99c50de161203cef",
+       "model_id": "1ec1a195abd94a8191553ab782e2d2af",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "GridspecLayout(children=(Label(value='Second Measurement', layout=Layout(grid_area='widget001', height='auto',…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "1692c4ee58ed4f658f5b38cd2b4035d4",
        "version_major": 2,
        "version_minor": 0
       },
@@ -51,7 +65,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "072519b84c6e4ff399c113b531f0e368",
+       "model_id": "72063b77dec54b4980a4a8d946f78b98",
        "version_major": 2,
        "version_minor": 0
       },
diff --git a/hp4155/pn_Diode/lib/help.py b/hp4155/pn_Diode/lib/help.py
index 238433d..7a669ab 100644
--- a/hp4155/pn_Diode/lib/help.py
+++ b/hp4155/pn_Diode/lib/help.py
@@ -1,4 +1,7 @@
 import matplotlib.pyplot as plt
+import matplotlib
+matplotlib.use('TkAgg',force = True)
+
 import numpy as np
 import time
 from datetime import datetime
@@ -103,15 +106,16 @@ def setup(device):
     device.setup_smu(3,smu3)
     
 
+def measure(parameters_1,parameters_2,area,device):
+    #del all user functions
+    device.del_user_functions()
+    
     #define user functions
     device.user_function("AREA",'CM^2',str(area))
     device.user_function("INORM",'A/CM^2','IS/AREA')
     device.user_function("ABSNOR","A/CM^2","ABS(INORM)")
     device.user_function("ABSRAW",'A','ABS(IS)')
 
-
-def measure(parameters_1,parameters_2,area,device):    
-
     var1 = device.var1_dict()
     var1.update(
         mode = parameters_1['hyst'].value,
@@ -169,7 +173,6 @@ def measure(parameters_1,parameters_2,area,device):
     )
 
     device.setup_var1(var1)
-    
     device.integration_time(parameters_2['integration'].value)
 
     if parameters_2['start'].value < parameters_2['stop'].value:
@@ -187,10 +190,12 @@ def measure(parameters_1,parameters_2,area,device):
     device.append_measurement()
     while device.operation_completed() == False:
         pass
-
+    device.autoscaling()
     
     values = dict([(variable,device.return_values(variable)) for variable in variables_list])
-    return values
+    df = pd.DataFrame(values)
+    df = df.sort_values(by='VS')
+    return df
 
 def plot_results(x,y):
     fig, ax1 = plt.subplots()
@@ -208,10 +213,13 @@ def plot_results(x,y):
     fig.suptitle('Diode Plot', fontweight ="bold")
     fig.tight_layout()
 
-    display(fig)
+    wm = plt.get_current_fig_manager()
+    wm.window.state('zoomed')
+    plt.show(block = True)
+
 
 #also for file
-def save_to_file(values,sample,parameters_1,parameters_2,file):
+def save_to_file(df,sample,parameters_1,parameters_2,file):
     if file != None:
         with open(file,'w') as f:
             date = str(datetime.today().replace(microsecond=0))
@@ -234,7 +242,6 @@ def save_to_file(values,sample,parameters_1,parameters_2,file):
             f.write("\nResults\n")
     
         #create pandas dataframe
-        df = pd.DataFrame(values)
         #df =df.drop(columns=['ABSNOR'])
         df =df.rename(columns={'VS':'VS/V','IS':'IRAW/A','ABSRAW':'ABSRAW/A','INORM':'INORM/A/CM^2','ABSNOR':'ABSNOR/A/CM^2'})
     
diff --git a/hp4155/pn_Diode/lib/interface.py b/hp4155/pn_Diode/lib/interface.py
index 6105b0d..2253b9e 100644
--- a/hp4155/pn_Diode/lib/interface.py
+++ b/hp4155/pn_Diode/lib/interface.py
@@ -29,7 +29,7 @@ def parameters_interface(start,step,stop,title):
     grid[3,2] =widgets.Label("Hysterisis",layout=Layout(height='auto', width='auto'))#mind the gap
 
     #fourth line
-    grid[4,0]=widgets.BoundedFloatText(value=0.10,min=-0.1,max=0.1,step=0.01,layout=Layout(height='auto', width='auto'))
+    grid[4,0]=widgets.BoundedFloatText(value=0.01,min=-0.1,max=0.1,step=0.01,layout=Layout(height='auto', width='auto'))
     grid[4,1]=widgets.Dropdown(options=["SHORt","MEDium","LONG"],value="MEDium",style =style,layout=Layout(height='auto', width='auto'))
     grid[4,2]=widgets.Dropdown(options=['SINGle','DOUBle'],value='SINGle',layout=Layout(height='auto', width='auto'))#mind the gap
 
-- 
GitLab