Skip to content
Snippets Groups Projects
Commit ce11987e authored by Alexandros Asonitis's avatar Alexandros Asonitis
Browse files

modifications so correct values can be saved at the ADU files

parent 6da64cd0
No related branches found
No related tags found
No related merge requests found
...@@ -134,19 +134,19 @@ def on_start_clicked(b): ...@@ -134,19 +134,19 @@ def on_start_clicked(b):
smu4.update(vname ='VS2',iname = 'IS2',mode = 'COMM',func='CONS') smu4.update(vname ='VS2',iname = 'IS2',mode = 'COMM',func='CONS')
#execute measurement #execute measurement
Vgs,Vds,Idmm,gm,Igmm=Transfer(smu1,smu2,smu3,smu4,integration_transfer.value,norm,device) values=Transfer(smu1,smu2,smu3,smu4,integration_transfer.value,norm,device)
Id = np.divide(Idmm,normalization_factor(width)) #Id = np.divide(Idmm,normalization_factor(width))
Ig = np.divide(Igmm,normalization_factor(width)) #Ig = np.divide(Igmm,normalization_factor(width))
gm_S = np.divide(gm,normalization_factor(width)) #gm_S = np.divide(gm,normalization_factor(width))
#plot results #plot results
#clear_output() #clear_output()
plot_transfer(Vgs,Idmm,gm,points,norm_unit) plot_transfer(values["VGS"],values["IDmm"],values["Gmmm"],points,norm_unit)
#save results #save results
if norm_unit =='mA/mm': if norm_unit =='mA/mm':
header=['VGS/V','VDS/V','ID/A',"IG/A",'gm/S',"IDmm/mA/mm","IGmm/mA/mm","gm/mS/mm"] header=['VGS/V','VDS/V','ID/A',"IG/A",'gm/S',"IDmm/mA/mm","IGmm/mA/mm","gm/mS/mm"]
else: else:
header=['VGS/V','VDS/V','ID/A',"IG/A",'gm/S',"IDmm/uA/um","IGmm/uA/um","gm/uS/um"] header=['VGS/V','VDS/V','ID/A',"IG/A",'gm/S',"IDmm/uA/um","IGmm/uA/um","gm/uS/um"]
data = {header[0]:Vgs,header[1]:Vds,header[2]:Id,header[3]:Ig,header[4]:gm_S,header[5]:Idmm,header[6]:Igmm,header[7]:gm} data = {header[0]:values["VGS"],header[1]:values["VDS"],header[2]:values["ID"],header[3]:values["IG"],header[4]:values["Gm"],header[5]:values["IDmm"],header[6]:values["IGmm"],header[7]:values["Gmmm"]}
df = pd.DataFrame(data) df = pd.DataFrame(data)
#write to file #write to file
...@@ -200,19 +200,17 @@ def on_start_clicked(b): ...@@ -200,19 +200,17 @@ def on_start_clicked(b):
smu3.update(VAR2=var2) smu3.update(VAR2=var2)
#execute measurement #execute measurement
Vgs,Vds,Idmm,Igmm = Output(smu1,smu2,smu3,smu4,integration_output.value,norm,device) values= Output(smu1,smu2,smu3,smu4,integration_output.value,norm,device)
Id = np.divide(Idmm,normalization_factor(width))
Ig = np.divide(Igmm,normalization_factor(width))
#plot results #plot results
#clear_output() #clear_output()
plot_output(Vds,Idmm,Igmm,points,norm_unit) plot_output(values["VDS"],values["IDmm"],values["IGmm"],points,norm_unit)
#save results #save results
if norm_unit == 'mA/mm': if norm_unit == 'mA/mm':
header=['VGS/V','VDS/V',"ID/A","IG/A",'IDmm/mA/mm',"IGmm/mA/mm"] header=['VGS/V','VDS/V',"ID/A","IG/A",'IDmm/mA/mm',"IGmm/mA/mm"]
else: else:
header=['VGS/V','VDS/V',"ID/A","IG/A",'IDmm/uA/um',"IGmm/uA/um"] header=['VGS/V','VDS/V',"ID/A","IG/A",'IDmm/uA/um',"IGmm/uA/um"]
data = {header[0]:Vgs,header[1]:Vds,header[2]:Id,header[3]:Ig,header[4]:Idmm,header[5]:Igmm} data = {header[0]:values["VGS"],header[1]:values["VDS"],header[2]:values["ID"],header[3]:values["IG"],header[4]:values["IDmm"],header[5]:values["IGmm"]}
df = pd.DataFrame(data) df = pd.DataFrame(data)
#write to file #write to file
...@@ -248,17 +246,17 @@ def on_start_clicked(b): ...@@ -248,17 +246,17 @@ def on_start_clicked(b):
smu3.update(VAR1=var1) smu3.update(VAR1=var1)
#execute measurement #execute measurement
Vgs,Igmm,ABSIgmm=Gatediode(smu1,smu3,smu4,integration_gatediode.value,norm,device) values=Gatediode(smu1,smu3,smu4,integration_gatediode.value,norm,device)
Ig = np.divide(Igmm,normalization_factor(width))
#clear_output() #clear_output()
plot_gatediode(Vgs,Igmm,norm_unit) plot_gatediode(values["VGS"],values["IGmm"],norm_unit)
#save results #save results
if norm_unit == 'mA/mm': if norm_unit == 'mA/mm':
header=['VGS/V','IG/A','IGmm/mA/mm'] header=['VGS/V','IG/A','IGmm/mA/mm']
else: else:
header=['VGS/V','IG/A','IGmm/uA/um'] header=['VGS/V','IG/A','IGmm/uA/um']
data = {header[0]:Vgs,header[1]:Ig,header[2]:Igmm} data = {header[0]:values["VGS"],header[1]:values["IG"],header[2]:values["IGmm"]}
df = pd.DataFrame(data) df = pd.DataFrame(data)
filename =f"{sample['sample'].value}_{sample['field'].value}_{sample['device'].value}_D.txt" filename =f"{sample['sample'].value}_{sample['field'].value}_{sample['device'].value}_D.txt"
......
...@@ -10,7 +10,7 @@ import tkinter.messagebox ...@@ -10,7 +10,7 @@ import tkinter.messagebox
import pandas as pd import pandas as pd
def plot_transfer(x,y1,y2,curves,norm_unit='mA/mm'): def plot_transfer(x,y1,y2,curves,norm_unit='mA/mm'):
with plt.ion():
x = np.array_split(x,curves) x = np.array_split(x,curves)
y1 = np.array_split(y1,curves) y1 = np.array_split(y1,curves)
y2 = np.array_split(y2,curves) y2 = np.array_split(y2,curves)
...@@ -46,11 +46,11 @@ def plot_transfer(x,y1,y2,curves,norm_unit='mA/mm'): ...@@ -46,11 +46,11 @@ def plot_transfer(x,y1,y2,curves,norm_unit='mA/mm'):
fig.suptitle('Transfer Curve', fontweight ="bold") fig.suptitle('Transfer Curve', fontweight ="bold")
# Show plot # Show plot
plt.show(block = False) display(fig)
def plot_output(x,y1,y2,curves,norm_unit = "mA/mm"): def plot_output(x,y1,y2,curves,norm_unit = "mA/mm"):
with plt.ion():
x = np.array_split(x,curves) x = np.array_split(x,curves)
y1 = np.array_split(y1,curves) y1 = np.array_split(y1,curves)
y2 = np.array_split(y2,curves) y2 = np.array_split(y2,curves)
...@@ -77,10 +77,9 @@ def plot_output(x,y1,y2,curves,norm_unit = "mA/mm"): ...@@ -77,10 +77,9 @@ def plot_output(x,y1,y2,curves,norm_unit = "mA/mm"):
ax2.tick_params(axis ='y', labelcolor = color,which = 'both') ax2.tick_params(axis ='y', labelcolor = color,which = 'both')
fig.suptitle("Output Curve",fontweight ="bold") fig.suptitle("Output Curve",fontweight ="bold")
plt.show(block = False) display(fig)
def plot_gatediode(x,y,norm_unit = "mA/mm"): def plot_gatediode(x,y,norm_unit = "mA/mm"):
with plt.ion():
fig, ax1 = plt.subplots() fig, ax1 = plt.subplots()
color = 'tab:red' color = 'tab:red'
...@@ -97,7 +96,8 @@ def plot_gatediode(x,y,norm_unit = "mA/mm"): ...@@ -97,7 +96,8 @@ def plot_gatediode(x,y,norm_unit = "mA/mm"):
ax1.tick_params(axis ='y', labelcolor = color,which = 'both') ax1.tick_params(axis ='y', labelcolor = color,which = 'both')
fig.suptitle('Gatediode Curve', fontweight ="bold") fig.suptitle('Gatediode Curve', fontweight ="bold")
plt.show(block=False) display(fig)
def number_of_points(start,step,stop): def number_of_points(start,step,stop):
......
...@@ -85,14 +85,16 @@ def Transfer(smu1,smu2,smu3,smu4,integration,norm,device): ...@@ -85,14 +85,16 @@ def Transfer(smu1,smu2,smu3,smu4,integration,norm,device):
#device.user_function('Gm','S','DIFF(ID,VGS)') #device.user_function('Gm','S','DIFF(ID,VGS)')
device.user_function('Gm','mS/mm',f'DIFF(ID,VGS)*{norm}') device.user_function('Gm','S',f'DIFF(ID,VGS)')
device.user_function('Gmmm','mS/mm',f'Gm*{norm}')
device.user_function('IDmm','mA/mm',f'ID*{norm}') device.user_function('IDmm','mA/mm',f'ID*{norm}')
device.user_function('IGmm','mA/mm',f'IG*{norm}') device.user_function('IGmm','mA/mm',f'IG*{norm}')
#display #display
device.display_variable('X','VGS') device.display_variable('X','VGS')
device.display_variable('Y1','IDmm') device.display_variable('Y1','IDmm')
device.display_variable('Y2','Gm') device.display_variable('Y2','Gmmm')
if smu3['VAR1']['start']<smu3['VAR1']['stop']: if smu3['VAR1']['start']<smu3['VAR1']['stop']:
device.display_variable_min_max('X','MIN',smu3['VAR1']['start']) device.display_variable_min_max('X','MIN',smu3['VAR1']['start'])
...@@ -106,19 +108,17 @@ def Transfer(smu1,smu2,smu3,smu4,integration,norm,device): ...@@ -106,19 +108,17 @@ def Transfer(smu1,smu2,smu3,smu4,integration,norm,device):
device.display_variable_min_max('Y1','MIN',-abs(smu2['VAR2']['comp'])*norm) device.display_variable_min_max('Y1','MIN',-abs(smu2['VAR2']['comp'])*norm)
device.display_variable_min_max('Y1','MAX',abs(smu2['VAR2']['comp'])*norm) device.display_variable_min_max('Y1','MAX',abs(smu2['VAR2']['comp'])*norm)
variables_list = ["VGS","VDS","ID","IG","Gm","IDmm","IGmm","Gmmm"]
device.variables_to_save(variables_list)
device.single_measurement() device.single_measurement()
while device.operation_completed()==False: while device.operation_completed()==False:
pass pass
device.autoscaling() device.autoscaling()
Vgs=device.return_values('VGS') values = dict([(variable,device.return_values(variable)) for variable in variables_list])
Idmm=device.return_values('IDmm') return values
gm=device.return_values('Gm')
Vds= device.return_values('VDS')
Igmm = device.return_values('IGmm')
return Vgs,Vds,Idmm,gm,Igmm
def Output(smu1,smu2,smu3,smu4,integration,norm,device): def Output(smu1,smu2,smu3,smu4,integration,norm,device):
...@@ -158,18 +158,17 @@ def Output(smu1,smu2,smu3,smu4,integration,norm,device): ...@@ -158,18 +158,17 @@ def Output(smu1,smu2,smu3,smu4,integration,norm,device):
device.display_variable_min_max('Y2','MIN',-abs(smu3['VAR2']['comp'])*norm) device.display_variable_min_max('Y2','MIN',-abs(smu3['VAR2']['comp'])*norm)
device.display_variable_min_max('Y2','MAX',abs(smu3['VAR2']['comp'])*norm) device.display_variable_min_max('Y2','MAX',abs(smu3['VAR2']['comp'])*norm)
variables_list = ["VGS","VDS","ID","IG","IDmm","IGmm"]
device.variables_to_save(variables_list)
device.single_measurement() device.single_measurement()
while device.operation_completed()==False: while device.operation_completed()==False:
pass pass
device.autoscaling() device.autoscaling()
Vds=device.return_values('VDS') values = dict([(variable,device.return_values(variable)) for variable in variables_list])
Idmm=device.return_values('IDmm') return values
Igmm=device.return_values('IGmm')
Vgs=device.return_values('VGS')
return Vgs,Vds,Idmm,Igmm
def Gatediode(smu1,smu3,smu4,integration,norm,device): def Gatediode(smu1,smu3,smu4,integration,norm,device):
device.del_user_functions() device.del_user_functions()
...@@ -210,17 +209,17 @@ def Gatediode(smu1,smu3,smu4,integration,norm,device): ...@@ -210,17 +209,17 @@ def Gatediode(smu1,smu3,smu4,integration,norm,device):
device.axis_scale('Y2','LOG') device.axis_scale('Y2','LOG')
variables_list = ["VGS","IG","IGmm","ABSIGm"]
device.variables_to_save(variables_list)
device.single_measurement() device.single_measurement()
while device.operation_completed()==False: while device.operation_completed()==False:
pass pass
device.autoscaling() device.autoscaling()
Vgs=device.return_values('VGS') values = dict([(variable,device.return_values(variable)) for variable in variables_list])
Igmm=device.return_values('IGmm') return values
ABSIGm=device.return_values('ABSIGm')
return Vgs,Igmm,ABSIGm
......
...@@ -167,6 +167,17 @@ class HP4155a(object): ...@@ -167,6 +167,17 @@ class HP4155a(object):
def stop_measurement(self): def stop_measurement(self):
self.inst.write(":PAGE:SCON:STOP") self.inst.write(":PAGE:SCON:STOP")
# list to save variables in files up to 8 variables
def variables_to_save(self,variables_list):
command = ":PAGE:DISP:LIST "
for index,variable in enumerate(variables_list):
command = command + f"{repr(variable)}"
if index != len(variables_list)-1:
command = command + ","
#test
print(command)
self.inst.write(command)
#delete all user functions #delete all user functions
def del_user_functions(self): def del_user_functions(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment