diff options
Diffstat (limited to 'src/ngspiceSimulation/pythonPlotting.py')
-rw-r--r-- | src/ngspiceSimulation/pythonPlotting.py | 661 |
1 files changed, 362 insertions, 299 deletions
diff --git a/src/ngspiceSimulation/pythonPlotting.py b/src/ngspiceSimulation/pythonPlotting.py index 722b8f4e..136f5ed8 100644 --- a/src/ngspiceSimulation/pythonPlotting.py +++ b/src/ngspiceSimulation/pythonPlotting.py @@ -1,139 +1,150 @@ # Used for decimal division eg 2/3=0.66 and not '0' 6/2=3.0 and 6//2=3 import os from PyQt4 import QtGui, QtCore -from decimal import Decimal,getcontext +from decimal import Decimal, getcontext from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure from configuration.Appconfig import Appconfig import numpy as np + class plotWindow(QtGui.QMainWindow): - def __init__(self,fpath,projectName): + def __init__(self, fpath, projectName): QtGui.QMainWindow.__init__(self) self.fpath = fpath self.projectName = projectName self.obj_appconfig = Appconfig() - print("Complete Project Path : ",self.fpath) - print("Project Name : ",self.projectName) - self.obj_appconfig.print_info('Ngspice simulation is called : ' + self.fpath) - self.obj_appconfig.print_info('PythonPlotting is called : ' + self.fpath) + print("Complete Project Path : ", self.fpath) + print("Project Name : ", self.projectName) + self.obj_appconfig.print_info( + 'Ngspice simulation is called : ' + self.fpath) + self.obj_appconfig.print_info( + 'PythonPlotting is called : ' + self.fpath) self.combo = [] self.combo1 = [] self.combo1_rev = [] - #Creating Frame - self.createMainFrame() - + # Creating Frame + self.createMainFrame() + def createMainFrame(self): self.mainFrame = QtGui.QWidget() self.dpi = 100 self.fig = Figure((7.0, 7.0), dpi=self.dpi) - #Creating Canvas which will figure + # Creating Canvas which will figure self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.mainFrame) self.axes = self.fig.add_subplot(111) self.navToolBar = NavigationToolbar(self.canvas, self.mainFrame) - - #LeftVbox hold navigation tool bar and canvas + + # LeftVbox hold navigation tool bar and canvas self.left_vbox = QtGui.QVBoxLayout() self.left_vbox.addWidget(self.navToolBar) self.left_vbox.addWidget(self.canvas) - #right VBOX is main Layout which hold right grid(bottom part) and top grid(top part) + # right VBOX is main Layout which hold right grid(bottom part) and top + # grid(top part) self.right_vbox = QtGui.QVBoxLayout() self.right_grid = QtGui.QGridLayout() self.top_grid = QtGui.QGridLayout() - - #Get DataExtraction Details + + # Get DataExtraction Details self.obj_dataext = DataExtraction() self.plotType = self.obj_dataext.openFile(self.fpath) self.obj_dataext.computeAxes() self.a = self.obj_dataext.numVals() - - self.chkbox=[] - - ########### Generating list of colors : - 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.chkbox = [] + + # Generating list of colors : + # ,(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.full_colors = ['r', 'b', 'g', 'y', 'c', 'm', 'k'] self.color = [] - for i in range(0,self.a[0]-1): - if i%7 == 0: + 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: + elif (i - 1) % 7 == 0: self.color.append(self.full_colors[1]) - elif (i-2)%7 == 0: + elif (i - 2) % 7 == 0: self.color.append(self.full_colors[2]) - elif (i-3)%7 == 0: + elif (i - 3) % 7 == 0: self.color.append(self.full_colors[3]) - elif (i-4)%7 == 0: + elif (i - 4) % 7 == 0: self.color.append(self.full_colors[4]) - elif (i-5)%7 == 0: + elif (i - 5) % 7 == 0: self.color.append(self.full_colors[5]) - elif (i-6)%7 == 0: + elif (i - 6) % 7 == 0: self.color.append(self.full_colors[6]) - ###########Color generation ends here - - - #Total number of voltage source + # Color generation ends here + + # Total number of voltage source self.volts_length = self.a[1] self.analysisType = QtGui.QLabel() - self.top_grid.addWidget(self.analysisType,0,0) + self.top_grid.addWidget(self.analysisType, 0, 0) self.listNode = QtGui.QLabel() - self.top_grid.addWidget(self.listNode,1,0) + self.top_grid.addWidget(self.listNode, 1, 0) self.listBranch = QtGui.QLabel() - self.top_grid.addWidget(self.listBranch,self.a[1]+2,0) - for i in range(0,self.a[1]):#a[0]-1 + self.top_grid.addWidget(self.listBranch, self.a[1] + 2, 0) + for i in range(0, self.a[1]): # a[0]-1 self.chkbox.append(QtGui.QCheckBox(self.obj_dataext.NBList[i])) self.chkbox[i].setStyleSheet('color') - self.chkbox[i].setToolTip('<b>Check To Plot</b>' ) - self.top_grid.addWidget(self.chkbox[i],i+2,0) + self.chkbox[i].setToolTip('<b>Check To Plot</b>') + self.top_grid.addWidget(self.chkbox[i], i + 2, 0) self.colorLab = QtGui.QLabel() self.colorLab.setText('____') - self.colorLab.setStyleSheet(self.colorName(self.color[i])+'; font-weight = bold;') - self.top_grid.addWidget(self.colorLab,i+2,1) + self.colorLab.setStyleSheet( + self.colorName( + self.color[i]) + + '; font-weight = bold;') + self.top_grid.addWidget(self.colorLab, i + 2, 1) - for i in range(self.a[1],self.a[0]-1):#a[0]-1 + for i in range(self.a[1], self.a[0] - 1): # a[0]-1 self.chkbox.append(QtGui.QCheckBox(self.obj_dataext.NBList[i])) - self.chkbox[i].setToolTip('<b>Check To Plot</b>' ) - self.top_grid.addWidget(self.chkbox[i],i+3,0) + self.chkbox[i].setToolTip('<b>Check To Plot</b>') + self.top_grid.addWidget(self.chkbox[i], i + 3, 0) self.colorLab = QtGui.QLabel() self.colorLab.setText('____') - self.colorLab.setStyleSheet(self.colorName(self.color[i])+'; font-weight = bold;') - self.top_grid.addWidget(self.colorLab,i+3,1) - + self.colorLab.setStyleSheet( + self.colorName( + self.color[i]) + + '; font-weight = bold;') + self.top_grid.addWidget(self.colorLab, i + 3, 1) + self.clear = QtGui.QPushButton("Clear") self.warnning = QtGui.QLabel() self.funcName = QtGui.QLabel() self.funcExample = QtGui.QLabel() self.plotbtn = QtGui.QPushButton("Plot") - self.plotbtn.setToolTip('<b>Press</b> to Plot' ) + self.plotbtn.setToolTip('<b>Press</b> to Plot') self.multimeterbtn = QtGui.QPushButton("Multimeter") - self.multimeterbtn.setToolTip('<b>RMS</b> value of the current and voltage is displayed' ) + self.multimeterbtn.setToolTip( + '<b>RMS</b> value of the current and voltage is displayed') self.text = QtGui.QLineEdit() self.funcLabel = QtGui.QLabel() self.palette1 = QtGui.QPalette() self.palette2 = QtGui.QPalette() self.plotfuncbtn = QtGui.QPushButton("Plot Function") - self.plotfuncbtn.setToolTip('<b>Press</b> to Plot the function' ) + self.plotfuncbtn.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.palette1.setColor(QtGui.QPalette.Foreground, QtCore.Qt.blue) + self.palette2.setColor(QtGui.QPalette.Foreground, QtCore.Qt.red) self.funcName.setPalette(self.palette1) self.funcExample.setPalette(self.palette2) self.right_vbox.addLayout(self.top_grid) self.right_vbox.addWidget(self.plotbtn) self.right_vbox.addWidget(self.multimeterbtn) - - self.right_grid.addWidget(self.funcLabel,1,0) - self.right_grid.addWidget(self.text,1,1) - self.right_grid.addWidget(self.plotfuncbtn,2,1) - self.right_grid.addWidget(self.clear,2,0) - self.right_grid.addWidget(self.warnning,3,0) - self.right_grid.addWidget(self.funcName,4,0) - self.right_grid.addWidget(self.funcExample,4,1) + + self.right_grid.addWidget(self.funcLabel, 1, 0) + self.right_grid.addWidget(self.text, 1, 1) + self.right_grid.addWidget(self.plotfuncbtn, 2, 1) + self.right_grid.addWidget(self.clear, 2, 0) + self.right_grid.addWidget(self.warnning, 3, 0) + self.right_grid.addWidget(self.funcName, 4, 0) + self.right_grid.addWidget(self.funcExample, 4, 1) self.right_vbox.addLayout(self.right_grid) self.hbox = QtGui.QHBoxLayout() @@ -141,7 +152,7 @@ class plotWindow(QtGui.QMainWindow): self.hbox.addLayout(self.right_vbox) self.widget = QtGui.QWidget() - self.widget.setLayout(self.hbox)#finalvbox + self.widget.setLayout(self.hbox) # finalvbox self.scrollArea = QtGui.QScrollArea() self.scrollArea.setWidgetResizable(True) self.scrollArea.setWidget(self.widget) @@ -153,32 +164,51 @@ class plotWindow(QtGui.QMainWindow): self.showMaximized() self.listNode.setText("<font color='indigo'>List of Nodes:</font>") - self.listBranch.setText("<font color='indigo'>List of Branches:</font>") + self.listBranch.setText( + "<font color='indigo'>List of Branches:</font>") self.funcLabel.setText("<font color='indigo'>Function:</font>") self.funcName.setText("<font color='indigo'>Standard functions</font>\ <br><br>Addition:<br>Subtraction:<br>Multiplication:<br>Division:<br>Comparison:") - self.funcExample.setText("\n\nNode1 + Node2\nNode1 - Node2\nNode1 * Node2\nNode1 / Node2\nNode1 vs Node2") + self.funcExample.setText( + "\n\nNode1 + Node2\nNode1 - Node2\nNode1 * Node2\nNode1 / Node2\nNode1 vs Node2") - #Connecting to plot and clear function - self.connect(self.clear,QtCore.SIGNAL('clicked()'),self.pushedClear) - self.connect(self.plotfuncbtn,QtCore.SIGNAL('clicked()'), self.pushedPlotFunc) - self.connect(self.multimeterbtn,QtCore.SIGNAL('clicked()'), self.multiMeter) - + # Connecting to plot and clear function + self.connect(self.clear, QtCore.SIGNAL('clicked()'), self.pushedClear) + self.connect( + self.plotfuncbtn, + QtCore.SIGNAL('clicked()'), + self.pushedPlotFunc) + self.connect( + self.multimeterbtn, + QtCore.SIGNAL('clicked()'), + self.multiMeter) - if self.plotType[0]==0: + if self.plotType[0] == 0: self.analysisType.setText("<b>AC Analysis</b>") - if self.plotType[1]==1: - self.connect(self.plotbtn, QtCore.SIGNAL('clicked()'), self.onPush_decade) + if self.plotType[1] == 1: + self.connect( + self.plotbtn, + QtCore.SIGNAL('clicked()'), + self.onPush_decade) else: - self.connect(self.plotbtn, QtCore.SIGNAL('clicked()'), self.onPush_ac) + self.connect( + self.plotbtn, + QtCore.SIGNAL('clicked()'), + self.onPush_ac) - elif self.plotType[0]==1: + elif self.plotType[0] == 1: self.analysisType.setText("<b>Transient Analysis</b>") - self.connect(self.plotbtn, QtCore.SIGNAL('clicked()'), self.onPush_trans) + self.connect( + self.plotbtn, + QtCore.SIGNAL('clicked()'), + self.onPush_trans) else: self.analysisType.setText("<b>DC Analysis</b>") - self.connect(self.plotbtn, QtCore.SIGNAL('clicked()'), self.onPush_dc) + self.connect( + self.plotbtn, + QtCore.SIGNAL('clicked()'), + self.onPush_dc) self.setCentralWidget(self.mainFrame) @@ -191,8 +221,8 @@ class plotWindow(QtGui.QMainWindow): def pushedPlotFunc(self): self.parts = str(self.text.text()) self.parts = self.parts.split(" ") - - if self.parts[len(self.parts)-1] == '': + + if self.parts[len(self.parts) - 1] == '': self.parts = self.parts[0:-1] self.values = self.parts @@ -203,40 +233,46 @@ class plotWindow(QtGui.QMainWindow): if len(self.parts) <= 2: self.warnning.setText("Too few arguments!\nRefer syntax below!") - QtGui.QMessageBox.about(self, "Warning!!", "Too Few Arguments/SYNTAX Error!\n Refer Examples") + QtGui.QMessageBox.about( + self, "Warning!!", "Too Few Arguments/SYNTAX Error!\n Refer Examples") else: self.warnning.setText("") - - a = [] - finalResult = [] + + a = [] + finalResult = [] p = 0 for i in range(len(self.parts)): #print "I",i - if i%2 == 0: + if i % 2 == 0: #print "I'm in:" for j in range(len(self.obj_dataext.NBList)): - if self.parts[i]==self.obj_dataext.NBList[j]: + if self.parts[i] == self.obj_dataext.NBList[j]: #print "I got you:",self.parts[i] a.append(j) - - if len(a) != len(self.parts)//2 + 1: - QtGui.QMessageBox.about(self, "Warning!!", "One of the operands doesn't belong to the above list of Nodes!!") - + + if len(a) != len(self.parts) // 2 + 1: + QtGui.QMessageBox.about( + self, + "Warning!!", + "One of the operands doesn't belong to the above list of Nodes!!") + for i in a: self.comboAll.append(self.obj_dataext.y[i]) - - + for i in range(len(a)): if a[i] == len(self.obj_dataext.NBList): - QtGui.QMessageBox.about(self, "Warning!!", "One of the operands doesn't belong to the above list!!") - self.warnning.setText("<font color='red'>To Err Is Human!<br>One of the operands doesn't belong to the above list!!</font>") - + QtGui.QMessageBox.about( + self, "Warning!!", "One of the operands doesn't belong to the above list!!") + self.warnning.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.warnning.setText("Enter two operands only!!") - QtGui.QMessageBox.about(self, "Warning!!", "Recheck the expression syntax!") + QtGui.QMessageBox.about( + self, "Warning!!", "Recheck the expression syntax!") else: self.axes.cla() @@ -244,9 +280,13 @@ class plotWindow(QtGui.QMainWindow): for i in range(len(self.obj_dataext.y[a[0]])): self.combo.append(self.obj_dataext.y[a[0]][i]) self.combo1.append(self.obj_dataext.y[a[1]][i]) - - self.axes.plot(self.combo,self.combo1,c=self.color[1],label=str(2))#_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)-->') @@ -255,36 +295,50 @@ class plotWindow(QtGui.QMainWindow): self.axes.set_ylabel('Current(I)-->') elif max(a) >= self.volts_length and min(a) < self.volts_length: - QtGui.QMessageBox.about(self, "Warning!!", "Do not combine Voltage and Current!!") + QtGui.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]) + if i % 2 == 0: + self.values[i] = str(self.comboAll[i // 2][j]) re = " ".join(self.values[:]) try: finalResult.append(eval(re)) except ArithmeticError: - QtGui.QMessageBox.about(self, "Warning!!", "Dividing by zero!!") - - if self.plotType2[0]==0: + QtGui.QMessageBox.about( + self, "Warning!!", "Dividing by zero!!") + + if self.plotType2[0] == 0: #self.setWindowTitle('AC Analysis') - if self.plotType2[1]==1: - self.axes.semilogx(self.obj_dataext.x,finalResult,c=self.color[0],label=str(1)) + if self.plotType2[1] == 1: + self.axes.semilogx( + self.obj_dataext.x, + finalResult, + c=self.color[0], + label=str(1)) else: - self.axes.plot(self.obj_dataext.x,finalResult,c=self.color[0],label=str(1)) - + self.axes.plot( + self.obj_dataext.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 self.plotType2[0]==1: + + elif self.plotType2[0] == 1: #self.setWindowTitle('Transient Analysis') - self.axes.plot(self.obj_dataext.x,finalResult,c=self.color[0],label=str(1)) + self.axes.plot( + self.obj_dataext.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)-->') @@ -293,32 +347,35 @@ class plotWindow(QtGui.QMainWindow): else: #self.setWindowTitle('DC Analysis') - self.axes.plot(self.obj_dataext.x,finalResult,c=self.color[0],label=str(1)) + self.axes.plot( + self.obj_dataext.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.grid(True) self.canvas.draw() self.combo = [] self.combo1 = [] self.combo1_rev = [] - - - - def onPush_decade(self): #print "Calling on push Decade" boxCheck = 0 self.axes.cla() - for i,j in zip(self.chkbox,list(range(len(self.chkbox)))): + for i, j in zip(self.chkbox, list(range(len(self.chkbox)))): if i.isChecked(): boxCheck += 1 - self.axes.semilogx(self.obj_dataext.x,self.obj_dataext.y[j],c=self.color[j],label=str(j+1)) + self.axes.semilogx( + self.obj_dataext.x, + self.obj_dataext.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)-->') @@ -327,17 +384,22 @@ class plotWindow(QtGui.QMainWindow): self.axes.grid(True) if boxCheck == 0: - QtGui.QMessageBox.about(self, "Warning!!","Please select at least one Node OR Branch") + QtGui.QMessageBox.about( + self, "Warning!!", "Please select at least one Node OR Branch") self.canvas.draw() - def onPush_ac(self): self.axes.cla() boxCheck = 0 - for i,j in zip(self.chkbox,list(range(len(self.chkbox)))): + for i, j in zip(self.chkbox, list(range(len(self.chkbox)))): if i.isChecked(): boxCheck += 1 - self.axes.plot(self.obj_dataext.x,self.obj_dataext.y[j],c=self.color[j],label=str(j+1)) + self.axes.plot( + self.obj_dataext.x, + self.obj_dataext.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)-->') @@ -345,16 +407,22 @@ class plotWindow(QtGui.QMainWindow): self.axes.set_ylabel('Current(I)-->') self.axes.grid(True) if boxCheck == 0: - QtGui.QMessageBox.about(self, "Warning!!","Please select at least one Node OR Branch") + QtGui.QMessageBox.about( + self, "Warning!!", "Please select at least one Node OR Branch") self.canvas.draw() def onPush_trans(self): self.axes.cla() boxCheck = 0 - for i,j in zip(self.chkbox,list(range(len(self.chkbox)))): + for i, j in zip(self.chkbox, list(range(len(self.chkbox)))): if i.isChecked(): boxCheck += 1 - self.axes.plot(self.obj_dataext.x,self.obj_dataext.y[j],c=self.color[j],label=str(j+1)) + self.axes.plot( + self.obj_dataext.x, + self.obj_dataext.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)-->') @@ -362,17 +430,22 @@ class plotWindow(QtGui.QMainWindow): self.axes.set_ylabel('Current(I)-->') self.axes.grid(True) if boxCheck == 0: - QtGui.QMessageBox.about(self, "Warning!!","Please select at least one Node OR Branch") + QtGui.QMessageBox.about( + self, "Warning!!", "Please select at least one Node OR Branch") self.canvas.draw() - - + def onPush_dc(self): boxCheck = 0 - self.axes.cla() - for i,j in zip(self.chkbox,list(range(len(self.chkbox)))): + self.axes.cla() + for i, j in zip(self.chkbox, list(range(len(self.chkbox)))): if i.isChecked(): boxCheck += 1 - self.axes.plot(self.obj_dataext.x,self.obj_dataext.y[j],c=self.color[j],label=str(j+1)) + self.axes.plot( + self.obj_dataext.x, + self.obj_dataext.y[j], + c=self.color[j], + label=str( + j + 1)) self.axes.set_xlabel('Voltage Sweep(V)-->') if j < self.volts_length: @@ -381,18 +454,19 @@ class plotWindow(QtGui.QMainWindow): self.axes.set_ylabel('Current(I)-->') self.axes.grid(True) if boxCheck == 0: - QtGui.QMessageBox.about(self,"Warning!!", "Please select atleast one Node OR Branch") - self.canvas.draw() - - def colorName(self,letter): + QtGui.QMessageBox.about( + self, "Warning!!", "Please select atleast one Node OR Branch") + self.canvas.draw() + + def colorName(self, letter): return { - 'r':'color:red', - 'b':'color:blue', - 'g':'color:green', - 'y':'color:yellow', - 'c':'color:cyan', - 'm':'color:magenta', - 'k':'color:black' + 'r': 'color:red', + 'b': 'color:blue', + 'g': 'color:green', + 'y': 'color:yellow', + 'c': 'color:cyan', + 'm': 'color:magenta', + 'k': 'color:black' }[letter] def multiMeter(self): @@ -401,55 +475,58 @@ class plotWindow(QtGui.QMainWindow): boxCheck = 0 loc_x = 300 loc_y = 300 - - for i,j in zip(self.chkbox,list(range(len(self.chkbox)))): + + for i, j in zip(self.chkbox, list(range(len(self.chkbox)))): if i.isChecked(): - print("Check box",self.obj_dataext.NBList[j]) + print("Check box", self.obj_dataext.NBList[j]) boxCheck += 1 if self.obj_dataext.NBList[j] in self.obj_dataext.NBIList: voltFlag = False else: voltFlag = True - #Initializing Multimeter - self.obj[j] = MultimeterWidgetClass(self.obj_dataext.NBList[j],self.getRMSValue(self.obj_dataext.y[j]),loc_x,loc_y,voltFlag) + # Initializing Multimeter + self.obj[j] = MultimeterWidgetClass( + self.obj_dataext.NBList[j], self.getRMSValue( + self.obj_dataext.y[j]), loc_x, loc_y, voltFlag) loc_x += 50 loc_y += 50 - ## Adding object of multimeter to dictionary - self.obj_appconfig.dock_dict[self.obj_appconfig.current_project['ProjectName']].append(self.obj[j]) - + # Adding object of multimeter to dictionary + self.obj_appconfig.dock_dict[self.obj_appconfig.current_project['ProjectName']].append( + self.obj[j]) + if boxCheck == 0: - QtGui.QMessageBox.about(self, "Warning!!","Please select at least one Node OR Branch") - - - def getRMSValue(self,dataPoints): + QtGui.QMessageBox.about( + self, "Warning!!", "Please select at least one Node OR Branch") + + def getRMSValue(self, dataPoints): getcontext().prec = 5 return np.sqrt(np.mean(np.square(dataPoints))) - + + class MultimeterWidgetClass(QtGui.QWidget): - def __init__(self,node_branch,rmsValue,loc_x,loc_y,voltFlag): + def __init__(self, node_branch, rmsValue, loc_x, loc_y, voltFlag): QtGui.QWidget.__init__(self) self.multimeter = QtGui.QWidget(self) if voltFlag: self.node_branchLabel = QtGui.QLabel("Node") - self.rmsValue = QtGui.QLabel(str(rmsValue)+" Volts") + self.rmsValue = QtGui.QLabel(str(rmsValue) + " Volts") else: self.node_branchLabel = QtGui.QLabel("Branch") - self.rmsValue = QtGui.QLabel(str(rmsValue)+" Amp") - + self.rmsValue = QtGui.QLabel(str(rmsValue) + " Amp") + self.rmsLabel = QtGui.QLabel("RMS Value") self.nodeBranchValue = QtGui.QLabel(str(node_branch)) - - + self.layout = QtGui.QGridLayout(self) - self.layout.addWidget(self.node_branchLabel,0,0) - self.layout.addWidget(self.rmsLabel,0,1) - self.layout.addWidget(self.nodeBranchValue,1,0) - self.layout.addWidget(self.rmsValue,1,1) - + self.layout.addWidget(self.node_branchLabel, 0, 0) + self.layout.addWidget(self.rmsLabel, 0, 1) + self.layout.addWidget(self.nodeBranchValue, 1, 0) + self.layout.addWidget(self.rmsValue, 1, 1) + self.multimeter.setLayout(self.layout) - self.setGeometry(loc_x,loc_y,200,100) - self.setGeometry(loc_x,loc_y,300,100) + self.setGeometry(loc_x, loc_y, 200, 100) + self.setGeometry(loc_x, loc_y, 300, 100) self.setWindowTitle("MultiMeter") self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) self.show() @@ -458,121 +535,116 @@ class MultimeterWidgetClass(QtGui.QWidget): class DataExtraction: def __init__(self): self.obj_appconfig = Appconfig() - 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 - - - def numberFinder(self,fpath): - #Opening ANalysis file - with open(os.path.join(fpath,"analysis")) as f3: + 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 + + def numberFinder(self, fpath): + # Opening ANalysis file + with open(os.path.join(fpath, "analysis")) as f3: self.analysisInfo = f3.read() self.analysisInfo = self.analysisInfo.split(" ") - - - #Reading data file for voltage - with open(os.path.join(fpath,"plot_data_v.txt")) as f2: + + # Reading data file for voltage + with open(os.path.join(fpath, "plot_data_v.txt")) as f2: self.voltData = f2.read() self.voltData = self.voltData.split("\n") - - #Initializing variable - #'p' gives no. of lines of data for each node/branch + + # Initializing variable + #'p' gives no. of lines of data for each node/branch # 'l' gives the no of partitions for a single voltage node #'vnumber' gives total number of voltage #'inumber' gives total number of current p = l = vnumber = inumber = 0 #print "VoltsData : ",self.voltData - - #Finding totla number of voltage node + + # Finding totla number of voltage node for i in self.voltData[3:]: - #it has possible names of voltage nodes in NgSpice - if "Index" in i:#"V(" in i or "x1" in i or "u3" in i: - vnumber+=1 - + # it has possible names of voltage nodes in NgSpice + if "Index" in i: # "V(" in i or "x1" in i or "u3" in i: + vnumber += 1 + #print "Voltage Number :",vnumber - - #Reading Current Source Data - with open (os.path.join(fpath,"plot_data_i.txt")) as f1: + + # Reading Current Source Data + with open(os.path.join(fpath, "plot_data_i.txt")) as f1: self.currentData = f1.read() - self.currentData = self.currentData.split("\n") - - #print "CurrentData : ",self.currentData - - #Finding Number of Branch + self.currentData = self.currentData.split("\n") + + #print "CurrentData : ",self.currentData + + # Finding Number of Branch for i in self.currentData[3:]: if "#branch" in i: - inumber+=1 - - #print "Current Number :",inumber - - self.dec = 0 - - #For AC - if self.analysisInfo[0][-3:]==".ac": + inumber += 1 + + #print "Current Number :",inumber + + self.dec = 0 + + # For AC + if self.analysisInfo[0][-3:] == ".ac": self.analysisType = 0 if "dec" in self.analysisInfo: self.dec = 1 for i in self.voltData[3:]: - p+=1 #'p' gives no. of lines of data for each node/branch + 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 + 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 + if "AC" in i: # DC for dc files and AC for ac ones break elif ".tran" in self.analysisInfo: self.analysisType = 1 for i in self.voltData[3:]: - p+=1 - if "Index" in i: - l+=1 # 'l' gives the no of partitions for a single voltage node + 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 + if "Transient" in i: # DC for dc files and AC for ac ones break - # For DC: else: self.analysisType = 2 for i in self.voltData[3:]: - p+=1 - if "Index" in i: - l+=1 # 'l' gives the no of partitions for a single voltage node + 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 + if "DC" in i: # DC for dc files and AC for ac ones break - - #print "VoltNumber",vnumber #print "CurrentNumber",inumber - vnumber = vnumber//l #vnumber gives the no of voltage nodes - inumber = inumber//l #inumber gives the no of branches - + vnumber = vnumber // l # vnumber gives the no of voltage nodes + inumber = inumber // l # inumber gives the no of branches + #print "VoltNumber",vnumber #print "CurrentNumber",inumber - - p=[p,vnumber,self.analysisType,self.dec,inumber] - + + p = [p, vnumber, self.analysisType, self.dec, inumber] + return p - - def openFile(self,fpath): + + def openFile(self, fpath): try: - with open (os.path.join(fpath,"plot_data_i.txt")) as f2: + with open(os.path.join(fpath, "plot_data_i.txt")) as f2: alli = f2.read() alli = alli.split("\n") self.NBIList = [] - with open (os.path.join(fpath,"plot_data_v.txt")) as f1: + with open(os.path.join(fpath, "plot_data_v.txt")) as f1: allv = f1.read() except Exception as e: - print("Exception Message : ",str(e)) + print("Exception Message : ", str(e)) self.obj_appconfig.print_error('Exception Message :' + str(e)) self.msg = QtGui.QErrorMessage(None) self.msg.showMessage('Unable to open plot data files.') @@ -580,108 +652,102 @@ class DataExtraction: try: for l in alli[3].split(" "): - if len(l)>0: + if len(l) > 0: self.NBIList.append(l) self.NBIList = self.NBIList[2:] len_NBIList = len(self.NBIList) #print "NBILIST : ",self.NBIList except Exception as e: - print("Exception Message : ",str(e)) + print("Exception Message : ", str(e)) self.obj_appconfig.print_error('Exception Message :' + str(e)) self.msg = QtGui.QErrorMessage(None) self.msg.showMessage('Error in Analysis File.') self.msg.setWindowTitle("Error Message:openFile") - - d = self.numberFinder(fpath) d1 = int(d[0] + 1) d2 = int(d[1]) d3 = d[2] d4 = d[4] - - dec = [d3,d[3]] + + dec = [d3, d[3]] #print "No. of Nodes:", d2 self.NBList = [] - allv=allv.split("\n") + allv = allv.split("\n") for l in allv[3].split(" "): - if len(l)>0: + if len(l) > 0: self.NBList.append(l) - self.NBList=self.NBList[2:] + self.NBList = self.NBList[2:] len_NBList = len(self.NBList) - print("NBLIST",self.NBList) - - ivals=[] + print("NBLIST", self.NBList) + + ivals = [] inum = len(allv[5].split("\t")) inum_i = len(alli[5].split("\t")) - - - + full_data = [] # Creating list of data: - if d3 < 3 : - for i in range(1,d2): - for l in allv[3+i*d1].split(" "): - if len(l)>0: + if d3 < 3: + for i in range(1, d2): + for l in allv[3 + i * d1].split(" "): + if len(l) > 0: self.NBList.append(l) self.NBList.pop(len_NBList) self.NBList.pop(len_NBList) len_NBList = len(self.NBList) - - for n in range(1,d4): - for l in alli[3+n*d1].split(" "): - if len(l)>0: + + for n in range(1, d4): + for l in alli[3 + n * d1].split(" "): + if len(l) > 0: self.NBIList.append(l) self.NBIList.pop(len_NBIList) self.NBIList.pop(len_NBIList) len_NBIList = len(self.NBIList) - - p=0 + + p = 0 k = 0 - m=0 - - for i in alli[5:d1-1]: - if len(i.split("\t"))==inum_i: - j2=i.split("\t") + m = 0 + + for i in alli[5:d1 - 1]: + 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 + if d3 == 0: # not in trans j2.pop() #print j2 - - for l in range(1,d4): - j3 = alli[5+l*d1+k].split("\t") + + for l in range(1, d4): + j3 = alli[5 + l * d1 + k].split("\t") j3.pop(0) j3.pop(0) - if d3==0: - j3.pop() #not required for dc + if d3 == 0: + j3.pop() # not required for dc j3.pop() j2 = j2 + j3 #print j2 - full_data.append(j2) - - k+=1 - + + k += 1 + #print "FULL DATA :",full_data - - for i in allv[5:d1-1]: - if len(i.split("\t"))==inum: - j=i.split("\t") + for i in allv[5:d1 - 1]: + if len(i.split("\t")) == inum: + j = i.split("\t") j.pop() - if d3==0: + if d3 == 0: j.pop() - for l in range(1,d2): - j1 = allv[5+l*d1+p].split("\t") + for l in range(1, d2): + j1 = allv[5 + l * d1 + p].split("\t") j1.pop(0) j1.pop(0) - if d3==0: - j1.pop() #not required for dc - if self.NBList[len(self.NBList)-1] == 'v-sweep': + if d3 == 0: + j1.pop() # not required for dc + if self.NBList[len(self.NBList) - 1] == 'v-sweep': self.NBList.pop() j1.pop() @@ -689,45 +755,42 @@ class DataExtraction: j = j + j1 j = j + full_data[m] #print j - m+=1 - #print j[:20] + m += 1 + #print j[:20] j = "\t".join(j[1:]) - j = j.replace(",","") + j = j.replace(",", "") ivals.append(j) - - p+=1 - + + p += 1 + self.data = ivals #print "volts:",self.butnames self.volts_length = len(self.NBList) self.NBList = self.NBList + self.NBIList - - - print(dec) + + print(dec) 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] - + 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 = [] + var = self.data[0].split("\t") + for i in range(1, nums): self.y.append([Decimal(var[i])]) for i in self.data[1:]: - temp=i.split("\t") - for j in range(1,nums): - self.y[j-1].append(Decimal(temp[j])) + temp = i.split("\t") + for j in range(1, nums): + self.y[j - 1].append(Decimal(temp[j])) for i in self.data: - temp=i.split("\t") + temp = i.split("\t") self.x.append(Decimal(temp[0])) |