In [64]:
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import sys
from scipy import interpolate
import math
from ipywidgets import *
def firstQuad(data):
colnames = data.columns.values
colcount = len(colnames)
rowcount = len(data[colnames[0]])
# do a little clean up
# remove negative values of plate current
for i in range(1,colcount):
for j in range(rowcount):
if data[colnames[i]][j] < 0.00:
data[colnames[i]][j] = 0.0
return data
# used engauge to extract plot data from datasheet
triodefn = "6au6 plate characteristic - triode.csv"
platefn = "6au6 plate characteristic - pentode.csv"
screenfn = "6au6 screen characteristic - pentode.csv"
triodeData = firstQuad(pd.read_csv(triodefn))
plateData = firstQuad(pd.read_csv(platefn))
screenData = firstQuad(pd.read_csv(screenfn))
VaMAX = 300.0
IaMAX = 0.02
def powerDissipationData(powerDiss):
data = []
for v in range(5,int(VaMAX+5),5):
data.append((v,powerDiss/v))
return pd.DataFrame(data = data, columns = ['PlateVoltage','Current'])
def loadLineData(Va,Rp):
data = []
b = Va/Rp
m = -1/Rp
for v in range(0,int(Va+5),5):
data.append((v,m*v+b))
return pd.DataFrame(data = data, columns = ['PlateVoltage','Current'])
powerDissData = powerDissipationData(3.5)
loadLineData = loadLineData(250.0,18000)
In [65]:
def placeLabel(plt,text,x,y,angle):
null = plt.annotate(s=text,
rotation=angle,
xy=(x,y),
xycoords='data',
xytext=(0,0),
textcoords='offset points',
bbox=dict(boxstyle="round", fc="1.0"),
size=12,
# arrowprops=dict(arrowstyle="->",connectionstyle="angle,angleA=0,angleB=70,rad=10")
)
def plotData(datas):
fig = plt.figure(figsize=(15, 20))
null = plt.grid(linestyle='--', linewidth=0.5)
null = plt.xticks(np.arange(0,VaMAX+20,20))
null = plt.yticks(np.arange(0,IaMAX+0.002,0.002))
null = plt.xlim([0,VaMAX])
null = plt.ylim([0,IaMAX])
for data,color in datas:
colnames = data.columns.values
colcount = len(colnames)
rowcount = len(data[colnames[0]])
for x in range(1,colcount):
null = plt.plot(data['PlateVoltage'],
data[colnames[x]],label=colnames[x],
color=color)
return plt
def plotLabels(plt,datas):
for data in datas:
colnames = data.columns.values
colcount = len(colnames)
rowcount = len(data[colnames[0]])
for x in range(1,colcount):
for r in range(0,rowcount):
if data['PlateVoltage'][r] > VaMAX or data[colnames[x]][r] > IaMAX:
break
placeLabel(plt,colnames[x],data['PlateVoltage'][r-15],data[colnames[x]][r-5],0)
In [66]:
plotData([(triodeData,'blue'),(plateData,'black'),(powerDissData,'red'),(loadLineData,'green')])
plotLabels(plt,[triodeData,plateData])
In [ ]: