diff options
author | Fahim | 2014-09-09 16:11:17 +0530 |
---|---|---|
committer | Fahim | 2014-09-09 16:11:17 +0530 |
commit | c632c1009c9e095135220c809d7c799841f160b3 (patch) | |
tree | 3be2def8313164c3bf32799714ba53a4a1326ed6 /OSCAD/forntEnd/pythonPlotting.py | |
parent | e338c2a59389c22b8cca9a78d75e626ae779c405 (diff) | |
download | FreeEDA-c632c1009c9e095135220c809d7c799841f160b3.tar.gz FreeEDA-c632c1009c9e095135220c809d7c799841f160b3.tar.bz2 FreeEDA-c632c1009c9e095135220c809d7c799841f160b3.zip |
Subject: Changing all content and name of directory and file to FreeEDA
Description: The content of file,name of directory and file has been
changed in the below format.
1. Oscad to FreeEDA
2. OSCAD to FreeEDA
3. oscad to freeeda
Diffstat (limited to 'OSCAD/forntEnd/pythonPlotting.py')
-rwxr-xr-x | OSCAD/forntEnd/pythonPlotting.py | 696 |
1 files changed, 0 insertions, 696 deletions
diff --git a/OSCAD/forntEnd/pythonPlotting.py b/OSCAD/forntEnd/pythonPlotting.py deleted file mode 100755 index 3564aab..0000000 --- a/OSCAD/forntEnd/pythonPlotting.py +++ /dev/null @@ -1,696 +0,0 @@ -from __future__ import division # Used for decimal division eg 2/3=0.66 and not '0' 6/2=3.0 and 6//2=3 -import sys, os -from PyQt4.QtCore import * -from PyQt4.QtGui import * -from PyQt4 import QtGui, uic -from PyQt4 import QtCore -from decimal import * -import matplotlib -from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas -from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar -from matplotlib.figure import Figure -import tkMessageBox - - -class File_data: - def __init__(self,parent=None): - - self.data=[] #consists of all the columns of data belonging to nodes and branches - self.y=[] #stores y-axis data - self.x=[] #stores x-axis data - -#new function for finding no of points to be plotted: - - def numberFinder(self,fpath): - - with open (fpath+"/analysis") as f3: - info = f3.read() - - info = info.split(" ") - #info[0] = info[0][-3:] - #print info - - with open (fpath+"/plot_data_v.txt") as f2: - ilines = f2.read() - - p = l = vnumber = inumber = 0 - ilines = ilines.split("\n") - - for i in ilines[3:]: - if "V(" in i or "x1" in i or "u3" in i: #it has possible names of voltage nodes in ngspice - vnumber+=1 - #print "vno:",vnumber - - # for finding no of branches: - - with open (fpath+"/plot_data_i.txt") as f2: - current = f2.read() - - - current = current.split("\n") - - for i in current[3:]: - if "#branch" in i: - inumber+=1 - #print "current no:",inumber - - dec = 0 - - # For AC: - if info[0][-3:]==".ac": - - if "dec" in info: - dec = 1 - - for i in ilines[3:]: - p+=1 #'p' gives no. of lines of data for each node/branch - if "Index" in i: - l+=1 # 'l' gives the no of partitions for a single voltage node - #print "l:",l - if "AC" in i: #DC for dc files and AC for ac ones - break - analysis_type = 0 - - elif ".tran" in info: - analysis_type = 1 - for i in ilines[3:]: - p+=1 - if "Index" in i: - l+=1 # 'l' gives the no of partitions for a single voltage node - #print "l:",l - if "Transient" in i: #DC for dc files and AC for ac ones - break - - - # For DC: - else: - for i in ilines[3:]: - p+=1 - if "Index" in i: - l+=1 # 'l' gives the no of partitions for a single voltage node - #print "l:",l - if "DC" in i: #DC for dc files and AC for ac ones - break - analysis_type = 2 - - - #if ac!=1: - vnumber = vnumber//l #vnumber gives the no of voltage nodes - inumber = inumber//l #inumber gives the no of branches - #print "i'm p:",p - p=[p,vnumber,analysis_type,dec,inumber] - #print p - return p - - def openFile(self,fpath): - - # For Current: - - try: - with open (fpath+"/plot_data_i.txt") as f2: #Checking whether the files Plot_data_i.txt - I = f2.read() # and plot_data_v.txt are present or not - - I = I.split("\n") - self.butnamesi = [] - - with open (fpath+"/plot_data_v.txt") as f1: - idata = f1.read() - - except: - tkMessageBox.showinfo("Warning!!", "Click on KI->Ng button before simulation ") - exit(1) - try: - for l in I[3].split(" "): - if len(l)>0: - self.butnamesi.append(l) - self.butnamesi=self.butnamesi[2:] - len_bnamesi = len(self.butnamesi) - #print "length_new",len_bnamesi - #print self.butnamesi - except: - tkMessageBox.showinfo("Warning!!", "Error in Analysis File") - - d = self.numberFinder(fpath) - d1 = int(d[0] + 1) - #print "I'm D1:", d1 #for debugging - d2 = int(d[1]) - d3 = d[2] - d4 = d[4] - #print "I'm D4:", d4 #for debugging - dec = [d3,d[3]] - #print "No. of Nodes:", d2 - self.butnames=[] - idata=idata.split("\n") - for l in idata[3].split(" "): - if len(l)>0: - self.butnames.append(l) - self.butnames=self.butnames[2:] - len_bnames = len(self.butnames) - #print len_bnames - #print self.butnames - - ivals=[] - inum = len(idata[5].split("\t")) - inum_i = len(I[5].split("\t")) - #print inum - - full_data = [] - - # Creating list of data: - if d3 < 3 : - - for i in range(1,d2): - - for l in idata[3+i*d1].split(" "): - if len(l)>0: - self.butnames.append(l) - self.butnames.pop(len_bnames) - self.butnames.pop(len_bnames) - len_bnames = len(self.butnames) - #print "volts:",self.butnames - - for n in range(1,d4): - - for l in I[3+n*d1].split(" "): - if len(l)>0: - self.butnamesi.append(l) - #print "names:",self.butnamesi - self.butnamesi.pop(len_bnamesi) - self.butnamesi.pop(len_bnamesi) - len_bnamesi = len(self.butnamesi) - #print "current",self.butnamesi - - p=0 - k = 0 - m=0 - - for i in I[5:d1-1]: - - #print "hello:" - - if len(i.split("\t"))==inum_i: - j2=i.split("\t") - #print j2 - j2.pop(0) - j2.pop(0) - j2.pop() - if d3 == 0: #not in trans - j2.pop() - #print j2 - - for l in range(1,d4): - j3 = I[5+l*d1+k].split("\t") - j3.pop(0) - j3.pop(0) - if d3==0: - j3.pop() #not required for dc - j3.pop() - j2 = j2 + j3 - #print j2 - full_data.append(j2) - k+=1 - #print full_data - - - for i in idata[5:d1-1]: - - if len(i.split("\t"))==inum: - j=i.split("\t") - j.pop() - if d3==0: - j.pop() - - for l in range(1,d2): - j1 = idata[5+l*d1+p].split("\t") - j1.pop(0) - j1.pop(0) - if d3==0: - j1.pop() #not required for dc - if self.butnames[len(self.butnames)-1] == 'v-sweep': - self.butnames.pop() - j1.pop() - #if l==d2-1 and d3==2: - #j1.pop() - j1.pop() - j = j + j1 - #self.volts_length = len(j)-2 - j = j + full_data[m] - #print j - m+=1 - #print j[:20] - j = "\t".join(j[1:]) - j = j.replace(",","") - ivals.append(j) - - p+=1 - - self.data = ivals - #print self.data - - #print "volts:",self.butnames - self.volts_length = len(self.butnames) - #print "volts_length:",self.volts_length - self.butnames = self.butnames + self.butnamesi - #print "new butnames:",self.butnames - - #print self.data - return dec - - - def numVals(self): - a = self.volts_length # No of voltage nodes - b = len(self.data[0].split("\t")) - #print "numvals:",b - return [b,a] - - def computeAxes(self): - nums = len(self.data[0].split("\t")) - #print "i'm nums:",nums - self.y=[] - var=self.data[0].split("\t") - for i in range(1,nums): - self.y.append([Decimal(var[i])]) - #print self.y - #print y,nums - for i in self.data[1:]: - temp=i.split("\t") - for j in range(1,nums): - self.y[j-1].append(Decimal(temp[j])) - #print len(self.y) - #print self.y[3] - - for i in self.data: - temp=i.split("\t") - self.x.append(Decimal(temp[0])) - - -class Window(QMainWindow): - def __init__(self,fpath,projName, parent=None): - super(Window, self).__init__(parent) - #self.setWindowTitle('AC Analysis') - self.fpath=fpath - self.projName=projName - self.createMainFrame() - self.combo = [] - self.combo1 = [] - self.combo1_rev = [] - - def createMainFrame(self): - - self.main_frame = QWidget() - self.dpi = 100 - self.fig = Figure((7.0, 7.0), dpi=self.dpi) - self.canvas = FigureCanvas(self.fig) - self.canvas.setParent(self.main_frame) - self.axes = self.fig.add_subplot(111) - self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) - - left_vbox = QVBoxLayout() - left_vbox.addWidget(self.mpl_toolbar) - left_vbox.addWidget(self.canvas) - - right_vbox = QVBoxLayout() - right_grid = QGridLayout() - top_grid = QGridLayout() - - self.fobj = File_data() - plot_type = self.fobj.openFile(self.fpath) - #print "hi:",plot_type - self.fobj.computeAxes() - self.chkbox=[] - self.a = self.fobj.numVals() - - ########### Generating list of colours : - self.full_colors = ['r','b','g','y','c','m','k']#,(0.4,0.5,0.2),(0.1,0.4,0.9),(0.4,0.9,0.2),(0.9,0.4,0.9)] - self.color = [] - for i in range(0,self.a[0]-1): - if i%7 == 0: - self.color.append(self.full_colors[0]) - elif (i-1)%7 == 0: - self.color.append(self.full_colors[1]) - elif (i-2)%7 == 0: - self.color.append(self.full_colors[2]) - elif (i-3)%7 == 0: - self.color.append(self.full_colors[3]) - elif (i-4)%7 == 0: - self.color.append(self.full_colors[4]) - elif (i-5)%7 == 0: - self.color.append(self.full_colors[5]) - elif (i-6)%7 == 0: - self.color.append(self.full_colors[6]) - - ########### - - self.volts_length = self.a[1] - #print "I'm Volts length:",self.volts_length - self.heading1 = QLabel() - top_grid.addWidget(self.heading1,1,0) - self.heading2 = QLabel() - top_grid.addWidget(self.heading2,self.a[1]+2,0) - for i in range(0,self.a[1]):#a[0]-1 - self.chkbox.append(QCheckBox(self.fobj.butnames[i])) - self.chkbox[i].setToolTip('<b>Tick Me!</b>' ) - top_grid.addWidget(self.chkbox[i],i+2,0) - - for i in range(self.a[1],self.a[0]-1):#a[0]-1 - self.chkbox.append(QCheckBox(self.fobj.butnames[i])) - self.chkbox[i].setToolTip('<b>Tick Me!</b>' ) - top_grid.addWidget(self.chkbox[i],i+3,0) - - self.clear = QPushButton("Clear") - self.Note = QLabel() - self.Note1 = QLabel() - self.Note2 = QLabel() - - self.btn = QPushButton("Plot") - self.btn.setToolTip('<b>Press</b> to Plot' ) - self.text = QLineEdit() - self.funcLabel = QLabel() - self.palette1 = QPalette() - self.palette2 = QPalette() - self.btn1 = QPushButton("Plot Function") - self.btn1.setToolTip('<b>Press</b> to Plot the function' ) - - self.palette1.setColor(QtGui.QPalette.Foreground,QtCore.Qt.blue) - self.palette2.setColor(QtGui.QPalette.Foreground,QtCore.Qt.red) - self.Note1.setPalette(self.palette1) - self.Note2.setPalette(self.palette2) - - right_vbox.addLayout(top_grid) - right_vbox.addWidget(self.btn) - - right_grid.addWidget(self.funcLabel,1,0) - right_grid.addWidget(self.text,1,1) - right_grid.addWidget(self.btn1,2,1) - right_grid.addWidget(self.clear,2,0) - right_grid.addWidget(self.Note,3,0) - right_grid.addWidget(self.Note1,4,0) - right_grid.addWidget(self.Note2,4,1) - - right_vbox.addLayout(right_grid) - - netlist = QTextEdit() - with open (self.fpath+"/"+self.projName+'.cir.out') as f2: - fdata = f2.read() - netlist.setText(fdata) - netlist.setReadOnly(True) - - '''down_box = QHBoxLayout() - down_box.addWidget(netlist) - - left_vbox.addLayout(down_box)''' - left_vbox.addWidget(netlist) - - hbox = QHBoxLayout() - hbox.addLayout(left_vbox) - hbox.addLayout(right_vbox) - - '''finalvbox = QVBoxLayout() - finalvbox.addLayout(hbox)''' - - widget = QWidget() - widget.setLayout(hbox)#finalvbox - self.scrollArea = QScrollArea() - self.scrollArea.setWidgetResizable(True) - self.scrollArea.setWidget(widget) - - finalhbox = QHBoxLayout() - finalhbox.addWidget(self.scrollArea) - - self.main_frame.setLayout(finalhbox) - - self.showMaximized() - - self.heading1.setText("<font color='indigo'>List of Nodes:</font>") - - self.heading2.setText("<font color='indigo'>List of Branches:</font>") - - self.funcLabel.setText("<font color='indigo'>Function:</font>") - - self.Note1.setText("<font color='indigo'>Examples:</font>\ - <br><br>Addition:<br>Subtraction:<br>Multiplication:<br>Division:<br>Comparison:") - - self.Note2.setText("\n\n"+self.fobj.butnames[0]+" + "+self.fobj.butnames[1]+"\n"+self.fobj.butnames[0]+" - "+self.fobj.butnames[1]+ \ - "\n"+self.fobj.butnames[0]+" * "+self.fobj.butnames[1]+"\n"+self.fobj.butnames[0]+" / "+self.fobj.butnames[1]+ \ - "\n"+self.fobj.butnames[0]+" vs "+self.fobj.butnames[1]) - - - self.connect(self.clear,SIGNAL('clicked()'),self.pushedClear) - - self.connect(self.btn1,SIGNAL('clicked()'), self.pushedPlotFunc) - - if plot_type[0]==0: - - self.setWindowTitle('AC Analysis') - if plot_type[1]==1: - - self.connect(self.btn, SIGNAL('clicked()'), self.onPush_decade) - - else: - - self.connect(self.btn, SIGNAL('clicked()'), self.onPush_ac) - - elif plot_type[0]==1: - - self.setWindowTitle('Transient Analysis') - self.connect(self.btn, SIGNAL('clicked()'), self.onPush_trans) - - else: - - self.setWindowTitle('DC Analysis') - self.connect(self.btn, SIGNAL('clicked()'), self.onPush_dc) - - self.setCentralWidget(self.main_frame) - - - def pushedPlotFunc(self): - - self.parts = str(self.text.text()) - self.parts = self.parts.split(" ") - #print self.parts - if self.parts[len(self.parts)-1] == '': - self.parts = self.parts[0:-1] - #print self.parts - self.values = self.parts - self.comboAll = [] - self.axes.cla() - plot_type2 = self.fobj.openFile(self.fpath) - - if len(self.parts) <= 2: - self.Note.setText("Too few arguments!\nRefer syntax below!") - QMessageBox.about(self, "Warning!!", "Too Few Arguments/SYNTAX Error!\n Refer Examples") - else: - self.Note.setText("") - - a = [] - finalResult = [] - p = 0 - #print "values:",self.values - #print "parts:",self.parts - - for i in range(len(self.parts)): - #print "hello" - if i%2 == 0: - #print "I'm in:" - for j in range(len(self.fobj.butnames)): - if self.parts[i]==self.fobj.butnames[j]: - #print "I got you:",i - a.append(j) - - #print "positions",a - - if len(a) != len(self.parts)//2 + 1: - QMessageBox.about(self, "Warning!!", "One of the operands doesn't belong to the above list!!") - - for i in a: - self.comboAll.append(self.fobj.y[i]) - - #print self.comboAll - - for i in range(len(a)): - - if a[i] == len(self.fobj.butnames): - QMessageBox.about(self, "Warning!!", "One of the operands doesn't belong to the above list!!") - self.Note.setText("<font color='red'>To Err Is Human!<br>One of the operands doesn't belong to the above list!!</font>") - - if self.parts[1] == 'vs': - - if len(self.parts) > 3: - self.Note.setText("Enter two operands only!!") - QMessageBox.about(self, "Warning!!", "Recheck the expression syntax!") - - else: - self.axes.cla() - #print "plotting wait" - for i in range(len(self.fobj.y[a[0]])): - self.combo.append(self.fobj.y[a[0]][i]) - self.combo1.append(self.fobj.y[a[1]][i]) - - '''for i in reversed(self.combo1): - self.combo1_rev.append(i)''' - #print self.combo - #print "\ncombo1_rev\n",self.combo1_rev - self.axes.plot(self.combo,self.combo1,c=self.color[1],label=str(2))#_rev - if max(a) < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - self.axes.set_xlabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - self.axes.set_ylabel('Current(I)-->') - - - elif max(a) >= self.volts_length and min(a) < self.volts_length: - QMessageBox.about(self, "Warning!!", "Do not combine Voltage and Current!!") - - else: - - for j in range(len(self.comboAll[0])): - for i in range(len(self.values)): - if i%2==0: - self.values[i] = str(self.comboAll[i//2][j]) - re = " ".join(self.values[:]) - #print re - try: - finalResult.append(eval(re)) - except ArithmeticError: - QMessageBox.about(self, "Warning!!", "Dividing by zero!!") - ############################################ - if plot_type2[0]==0: - - self.setWindowTitle('AC Analysis') - if plot_type2[1]==1: - - self.axes.semilogx(self.fobj.x,finalResult,c=self.color[0],label=str(1)) - - else: - - self.axes.plot(self.fobj.x,finalResult,c=self.color[0],label=str(1)) - self.axes.set_xlabel('freq-->') - if max(a) < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - - - elif plot_type2[0]==1: - - self.setWindowTitle('Transient Analysis') - self.axes.plot(self.fobj.x,finalResult,c=self.color[0],label=str(1)) - self.axes.set_xlabel('time-->') - if max(a) < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - - - else: - - self.setWindowTitle('DC Analysis') - self.axes.plot(self.fobj.x,finalResult,c=self.color[0],label=str(1)) - self.axes.set_xlabel('I/P Voltage-->') - if max(a) < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - - ########################################## - - #self.axes.plot(self.fobj.x,finalResult,c=self.color[0],label=str(1)) - - - self.axes.grid(True) - self.canvas.draw() - self.combo = [] - self.combo1 = [] - self.combo1_rev = [] - #print "succes:",self.parts - - def pushedClear(self): - - self.text.clear() - self.axes.cla() - self.canvas.draw() - QtCore.SLOT('quit()') - - def onPush_ac(self): - self.axes.cla() - boxCheck = 0 - for i,j in zip(self.chkbox,range(len(self.chkbox))): - if i.isChecked(): - boxCheck += 1 - self.axes.plot(self.fobj.x,self.fobj.y[j],c=self.color[j],label=str(j+1)) - self.axes.set_xlabel('freq-->') - if j < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - self.axes.grid(True) - if boxCheck == 0: - QMessageBox.about(self, "Warning!!","Please select atleast one Node OR Branch") - self.canvas.draw() - - - def onPush_decade(self): - boxCheck = 0 - self.axes.cla() - - for i,j in zip(self.chkbox,range(len(self.chkbox))): - if i.isChecked(): - boxCheck += 1 - self.axes.semilogx(self.fobj.x,self.fobj.y[j],c=self.color[j],label=str(j+1)) - if j < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - self.axes.set_xlabel('freq-->') - self.axes.grid(True) - if boxCheck == 0: - QMessageBox.about(self, "Warning!!","Please select atleast one Node OR Branch") - self.canvas.draw() - - def onPush_trans(self): - boxCheck = 0 - self.axes.cla() - for i,j in zip(self.chkbox,range(len(self.chkbox))): - if i.isChecked(): - boxCheck += 1 - #print self.fobj.y[j] - self.axes.plot(self.fobj.x,self.fobj.y[j],c=self.color[j],label=str(j+1)) - self.axes.set_xlabel('time-->') - - if j < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - - else: - self.axes.set_ylabel('Current(I)-->') - self.axes.grid(True) - if boxCheck == 0: - QMessageBox.about(self,"Warning!!", "Please select atleast one Node OR Branch") - self.canvas.draw() - - def onPush_dc(self): - boxCheck = 0 - self.axes.cla() - for i,j in zip(self.chkbox,range(len(self.chkbox))): - if i.isChecked(): - boxCheck += 1 - self.axes.plot(self.fobj.x,self.fobj.y[j],c=self.color[j],label=str(j+1)) - self.axes.set_xlabel('Voltage Sweep(V)-->') - - if j < self.volts_length: - self.axes.set_ylabel('Voltage(V)-->') - else: - self.axes.set_ylabel('Current(I)-->') - self.axes.grid(True) - if boxCheck == 0: - QMessageBox.about(self,"Warning!!", "Please select atleast one Node OR Branch") - self.canvas.draw() - -if __name__=="__main__": - app = QtGui.QApplication(sys.argv) - fpath = sys.argv[1] - projName = sys.argv[2] - global main - main = Window(fpath,projName) - main.show() - sys.exit(app.exec_()) |