summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/frontEnd/ProjectExplorer.py9
-rw-r--r--src/kicadtoNgspice/Analysis.py122
-rw-r--r--src/kicadtoNgspice/DeviceModel.py78
-rw-r--r--src/kicadtoNgspice/KicadtoNgspice.py269
-rw-r--r--src/kicadtoNgspice/Model.py38
-rw-r--r--src/kicadtoNgspice/Source.py103
6 files changed, 590 insertions, 29 deletions
diff --git a/src/frontEnd/ProjectExplorer.py b/src/frontEnd/ProjectExplorer.py
index b518d863..906001d5 100644
--- a/src/frontEnd/ProjectExplorer.py
+++ b/src/frontEnd/ProjectExplorer.py
@@ -87,9 +87,8 @@ class ProjectExplorer(QtGui.QWidget):
self.windowgrid = QtGui.QGridLayout()
if (os.path.isfile(str(self.filePath)))== True:
self.fopen = open(str(self.filePath), 'r')
- lines = self.fopen.readlines()
- for line in lines:
- self.text.append(line)
+ lines = self.fopen.read()
+ self.text.setText(lines)
QtCore.QObject.connect(self.text,QtCore.SIGNAL("textChanged()"), self.enable_save)
@@ -108,9 +107,7 @@ class ProjectExplorer(QtGui.QWidget):
def save_data(self):
self.fopen=open(self.filePath, 'w')
- lines = str(self.text.toPlainText()).split('\n')
- lines=[i+'\r' if i in lines[:-1] else i for i in lines]
- self.fopen.writelines(lines)
+ self.fopen.write(self.text.toPlainText())
self.fopen.close()
self.textwindow.close()
diff --git a/src/kicadtoNgspice/Analysis.py b/src/kicadtoNgspice/Analysis.py
index 21ae02ee..1a36196d 100644
--- a/src/kicadtoNgspice/Analysis.py
+++ b/src/kicadtoNgspice/Analysis.py
@@ -1,6 +1,10 @@
from PyQt4 import QtGui,QtCore
+from PyQt4.Qt import QRect
import TrackWidget
+import os
+import sys
+from xml.etree import ElementTree as ET
class Analysis(QtGui.QWidget):
"""
@@ -83,6 +87,23 @@ class Analysis(QtGui.QWidget):
self.track_obj.set_CheckBox["ITEMS"]="TRAN"
def createACgroup(self):
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="analysis":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
self.acbox = QtGui.QGroupBox()
self.acbox.setTitle("AC Analysis")
self.acgrid = QtGui.QGridLayout()
@@ -160,7 +181,33 @@ class Analysis(QtGui.QWidget):
self.acbox.setStyleSheet(" \
QGroupBox { border: 1px solid gray; border-radius: 9px; margin-top: 0.5em; } \
QGroupBox::title { subcontrol-origin: margin; left: 10px; padding: 0 3px 0 3px; } \
- ")
+ ")
+ if check:
+ try:
+ if root[0][0].text=="true":
+ self.Lin.setChecked(True)
+ self.Dec.setChecked(False)
+ self.Oct.setChecked(False)
+ elif root[0][1].text=="true":
+ self.Lin.setChecked(False)
+ self.Dec.setChecked(True)
+ self.Oct.setChecked(False)
+ elif root[0][2].text=="true":
+ self.Lin.setChecked(False)
+ self.Dec.setChecked(False)
+ self.Oct.setChecked(True)
+ else:
+ pass
+ self.ac_entry_var[0].setText(root[0][3].text)
+ self.ac_entry_var[1].setText(root[0][4].text)
+ self.ac_entry_var[2].setText(root[0][5].text)
+ index=self.start_fre_combo.findText(root[0][6].text)
+ self.start_fre_combo.setCurrentIndex(index)
+ index=self.stop_fre_combo.findText(root[0][7].text)
+ self.stop_fre_combo.setCurrentIndex(index)
+ except:
+ print "XML Parse Error"
+
return self.acbox
def start_combovalue(self, text):
@@ -181,6 +228,23 @@ class Analysis(QtGui.QWidget):
pass
def createDCgroup(self):
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="analysis":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
self.dcbox = QtGui.QGroupBox()
self.dcbox.setTitle("DC Analysis")
self.dcgrid = QtGui.QGridLayout()
@@ -272,7 +336,24 @@ class Analysis(QtGui.QWidget):
QGroupBox { border: 1px solid gray; border-radius: 9px; margin-top: 0.5em; } \
QGroupBox::title { subcontrol-origin: margin; left: 10px; padding: 0 3px 0 3px; } \
")
-
+ if check:
+ try:
+ self.dc_entry_var[0].setText(root[1][0].text)
+ self.dc_entry_var[1].setText(root[1][1].text)
+ self.dc_entry_var[2].setText(root[1][2].text)
+ self.dc_entry_var[3].setText(root[1][3].text)
+ index=self.start_combo.findText(root[1][5].text)
+ self.start_combo.setCurrentIndex(index)
+ index=self.increment_combo.findText(root[1][6].text)
+ self.increment_combo.setCurrentIndex(index)
+ index=self.stop_combo.findText(root[1][7].text)
+ self.stop_combo.setCurrentIndex(index)
+ if root[1][4].text:
+ self.check.setCheckState(True)
+ else:
+ self.check.setCheckedState(False)
+ except:
+ print "XML Parse Error"
return self.dcbox
@@ -286,6 +367,23 @@ class Analysis(QtGui.QWidget):
self.dc_parameter[2]=str(text)
def createTRANgroup(self):
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="analysis":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
self.trbox = QtGui.QGroupBox()
self.trbox.setTitle("Transient Analysis")
self.trgrid = QtGui.QGridLayout()
@@ -356,8 +454,22 @@ class Analysis(QtGui.QWidget):
QGroupBox { border: 1px solid gray; border-radius: 9px; margin-top: 0.5em; } \
QGroupBox::title { subcontrol-origin: margin; left: 10px; padding: 0 3px 0 3px; } \
")
-
-
+ if check:
+ try:
+ self.tran_entry_var[0].setText(root[2][0].text)
+ self.tran_entry_var[1].setText(root[2][1].text)
+ self.tran_entry_var[2].setText(root[2][2].text)
+ index=self.start_combobox.findText(root[2][3].text)
+ self.start_combobox.setCurrentIndex(index)
+ index=self.step_combobox.findText(root[2][4].text)
+ self.step_combobox.setCurrentIndex(index)
+
+ index=self.stop_combobox.findText(root[2][5].text)
+ self.stop_combobox.setCurrentIndex(index)
+ except:
+ print "XML Parse Error"
+
+
return self.trbox
def start_combo_change(self,text):
@@ -367,4 +479,4 @@ class Analysis(QtGui.QWidget):
self.tran_parameter[1]=str(text)
def stop_combo_change(self,text):
- self.tran_parameter[3]=str(text)
+ self.tran_parameter[2]=str(text)
diff --git a/src/kicadtoNgspice/DeviceModel.py b/src/kicadtoNgspice/DeviceModel.py
index 0ae421b6..56ffb7f1 100644
--- a/src/kicadtoNgspice/DeviceModel.py
+++ b/src/kicadtoNgspice/DeviceModel.py
@@ -1,4 +1,7 @@
from PyQt4 import QtGui
+import sys
+import os
+from xml.etree import ElementTree as ET
import TrackWidget
@@ -10,6 +13,25 @@ class DeviceModel(QtGui.QWidget):
"""
def __init__(self,schematicInfo):
+
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="devicemodel":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
+
QtGui.QWidget.__init__(self)
#Creating track widget object
@@ -24,8 +46,8 @@ class DeviceModel(QtGui.QWidget):
self.widthLabel = {}
self.lengthLabel = {}
self.multifactorLable = {}
-
-
+ self.devicemodel_dict_beg={}
+ self.devicemodel_dict_end={}
#List to hold information about device
self.deviceDetail = {}
@@ -37,11 +59,22 @@ class DeviceModel(QtGui.QWidget):
words = eachline.split()
if eachline[0] == 'q':
print "Words ",words[0]
+ self.devicemodel_dict_beg[words[0]]=self.count
transbox=QtGui.QGroupBox()
transgrid=QtGui.QGridLayout()
transbox.setTitle("Add library for Transistor "+words[0]+" : "+words[4])
self.entry_var[self.count] = QtGui.QLineEdit()
self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ if child.tag[0]==eachline[0] and child.tag[1]==eachline[1]:
+ #print "DEVICE MODEL MATCHING---",child.tag[0],child.tag[1],eachline[0],eachline[1]
+ try:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ print "ERROR WHEN SET TEXT"
+ except:
+ pass
transgrid.addWidget(self.entry_var[self.count],self.row,1)
self.addbtn = QtGui.QPushButton("Add")
self.addbtn.setObjectName("%d" %self.count)
@@ -62,15 +95,27 @@ class DeviceModel(QtGui.QWidget):
#Increment row and widget count
self.row = self.row+1
+ self.devicemodel_dict_end[words[0]]=self.count
self.count = self.count+1
elif eachline[0] == 'd':
print "Words",words[0]
+ self.devicemodel_dict_beg[words[0]]=self.count
diodebox=QtGui.QGroupBox()
diodegrid=QtGui.QGridLayout()
diodebox.setTitle("Add library for Diode "+words[0]+" : "+words[3])
self.entry_var[self.count] = QtGui.QLineEdit()
self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ if child.tag[0]==eachline[0] and child.tag[1]==eachline[1]:
+ print "DEVICE MODEL MATCHING---",child.tag[0],child.tag[1],eachline[0],eachline[1]
+ try:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ print "ERROR WHEN SET TEXT"
+ except:
+ pass
diodegrid.addWidget(self.entry_var[self.count],self.row,1)
self.addbtn = QtGui.QPushButton("Add")
self.addbtn.setObjectName("%d" %self.count)
@@ -91,15 +136,27 @@ class DeviceModel(QtGui.QWidget):
#Increment row and widget count
self.row = self.row+1
+ self.devicemodel_dict_end[words[0]]=self.count
self.count = self.count+1
elif eachline[0] == 'j':
print "Words",words[0]
+ self.devicemodel_dict_beg[words[0]]=self.count
jfetbox=QtGui.QGroupBox()
jfetgrid=QtGui.QGridLayout()
jfetbox.setTitle("Add library for JFET "+words[0]+" : "+words[4])
self.entry_var[self.count] = QtGui.QLineEdit()
self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ if child.tag[0]==eachline[0] and child.tag[1]==eachline[1]:
+ print "DEVICE MODEL MATCHING---",child.tag[0],child.tag[1],eachline[0],eachline[1]
+ try:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ print "ERROR WHEN SET TEXT"
+ except:
+ pass
jfetgrid.addWidget(self.entry_var[self.count],self.row,1)
self.addbtn = QtGui.QPushButton("Add")
self.addbtn.setObjectName("%d" %self.count)
@@ -120,13 +177,17 @@ class DeviceModel(QtGui.QWidget):
#Increment row and widget count
self.row = self.row+1
+ self.devicemodel_dict_end[words[0]]=self.count
self.count = self.count+1
elif eachline[0] == 'm':
+ self.devicemodel_dict_beg[words[0]]=self.count
mosfetbox=QtGui.QGroupBox()
mosfetgrid=QtGui.QGridLayout()
+ i=self.count
+ beg=self.count
mosfetbox.setTitle("Add library for MOSFET "+words[0]+" : "+words[5])
self.entry_var[self.count] =QtGui.QLineEdit()
self.entry_var[self.count].setText("")
@@ -167,12 +228,22 @@ class DeviceModel(QtGui.QWidget):
mosfetgrid.addWidget(self.multifactorLable[self.count],self.row,0)
self.entry_var[self.count] = QtGui.QLineEdit()
self.entry_var[self.count].setText("")
+ end=self.count
self.entry_var[self.count].setMaximumWidth(150)
mosfetgrid.addWidget(self.entry_var[self.count],self.row,1)
self.row = self.row + 1
+ self.devicemodel_dict_end[words[0]]=self.count
self.count = self.count+1
mosfetbox.setLayout(mosfetgrid)
-
+ try:
+ for child in root:
+ if child.tag[0]==eachline[0] and child.tag[1]==eachline[1]:
+ print "DEVICE MODEL MATCHING---",child.tag[0],child.tag[1],eachline[0],eachline[1]
+ while i<=end:
+ self.entry_var[i].setText(child[i-beg].text)
+ i=i+1
+ except:
+ pass
#CSS
mosfetbox.setStyleSheet(" \
QGroupBox { border: 1px solid gray; border-radius: 9px; margin-top: 0.5em; } \
@@ -180,6 +251,7 @@ class DeviceModel(QtGui.QWidget):
")
self.grid.addWidget(mosfetbox)
+
self.show()
diff --git a/src/kicadtoNgspice/KicadtoNgspice.py b/src/kicadtoNgspice/KicadtoNgspice.py
index dbb39ddc..7c5f46b4 100644
--- a/src/kicadtoNgspice/KicadtoNgspice.py
+++ b/src/kicadtoNgspice/KicadtoNgspice.py
@@ -26,6 +26,8 @@ import DeviceModel
import Convert
import TrackWidget
+from xml.etree import ElementTree as ET
+
class MainWindow(QtGui.QWidget):
@@ -81,25 +83,29 @@ class MainWindow(QtGui.QWidget):
def createcreateConvertWidget(self):
-
+ global obj_analysis
self.convertWindow = QtGui.QWidget()
self.analysisTab = QtGui.QScrollArea()
- self.analysisTab.setWidget(Analysis.Analysis())
+ obj_analysis=Analysis.Analysis()
+ self.analysisTab.setWidget(obj_analysis)
#self.analysisTabLayout = QtGui.QVBoxLayout(self.analysisTab.widget())
self.analysisTab.setWidgetResizable(True)
-
+ global obj_source
self.sourceTab = QtGui.QScrollArea()
- self.sourceTab.setWidget(Source.Source(sourcelist,sourcelisttrack))
+ obj_source=Source.Source(sourcelist,sourcelisttrack)
+ self.sourceTab.setWidget(obj_source)
#self.sourceTabLayout = QtGui.QVBoxLayout(self.sourceTab.widget())
self.sourceTab.setWidgetResizable(True)
-
+ global obj_model
self.modelTab = QtGui.QScrollArea()
- self.modelTab.setWidget(Model.Model(schematicInfo,modelList))
+ obj_model=Model.Model(schematicInfo,modelList)
+ self.modelTab.setWidget(obj_model)
#self.modelTabLayout = QtGui.QVBoxLayout(self.modelTab.widget())
self.modelTab.setWidgetResizable(True)
-
+ global obj_devicemodel
self.deviceModelTab = QtGui.QScrollArea()
- self.deviceModelTab.setWidget(DeviceModel.DeviceModel(schematicInfo))
+ obj_devicemodel=DeviceModel.DeviceModel(schematicInfo)
+ self.deviceModelTab.setWidget(obj_devicemodel)
self.deviceModelTab.setWidgetResizable(True)
@@ -125,6 +131,250 @@ class MainWindow(QtGui.QWidget):
"""
global schematicInfo
global analysisoutput
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJ PATH---",projpath
+
+
+ check=1
+ try:
+ fr=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ temp_tree=ET.parse(fr)
+ temp_root=temp_tree.getroot()
+ except:
+ check=0
+
+
+
+ fw=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'w')
+ if check==0:
+ attr_parent=ET.Element("KicadtoNgspice")
+ if check==1:
+ attr_parent=temp_root
+
+ for child in attr_parent:
+ if child.tag=="analysis":
+ attr_parent.remove(child)
+
+ attr_analysis=ET.SubElement(attr_parent,"analysis")
+ attr_ac=ET.SubElement(attr_analysis,"ac")
+ if obj_analysis.Lin.isChecked():
+ ET.SubElement(attr_ac,"field1",name="Lin").text="true"
+ ET.SubElement(attr_ac,"field2",name="Dec").text="false"
+ ET.SubElement(attr_ac,"field3",name="Oct").text="false"
+ elif obj_analysis.Dec.isChecked():
+ ET.SubElement(attr_ac,"field1",name="Lin").text="false"
+ ET.SubElement(attr_ac,"field2",name="Dec").text="true"
+ ET.SubElement(attr_ac,"field3",name="Oct").text="false"
+ if obj_analysis.Oct.isChecked():
+ ET.SubElement(attr_ac,"field1",name="Lin").text="false"
+ ET.SubElement(attr_ac,"field2",name="Dec").text="false"
+ ET.SubElement(attr_ac,"field3",name="Oct").text="true"
+ else:
+ pass
+ ET.SubElement(attr_ac,"field4",name="Start Frequency").text= str(obj_analysis.ac_entry_var[0].text())
+ ET.SubElement(attr_ac,"field5",name="Stop Frequency").text= str(obj_analysis.ac_entry_var[1].text())
+ ET.SubElement(attr_ac,"field6",name="No. of points").text= str(obj_analysis.ac_entry_var[2].text())
+ ET.SubElement(attr_ac,"field7",name="Start Fre Combo").text= obj_analysis.ac_parameter[0]
+ ET.SubElement(attr_ac,"field8",name="Stop Fre Combo").text= obj_analysis.ac_parameter[1]
+ attr_dc=ET.SubElement(attr_analysis,"dc")
+ ET.SubElement(attr_dc,"field1",name="Source Name").text= str(obj_analysis.dc_entry_var[0].text())
+ ET.SubElement(attr_dc,"field2",name="Start").text= str(obj_analysis.dc_entry_var[1].text())
+ ET.SubElement(attr_dc,"field3",name="Increment").text= str(obj_analysis.dc_entry_var[2].text())
+ ET.SubElement(attr_dc,"field4",name="Stop").text= str(obj_analysis.dc_entry_var[3].text())
+ ET.SubElement(attr_dc,"field5",name="Operating Point").text=str(obj_analysis.check.isChecked())
+ print "OBJ_ANALYSIS.CHECK -----",obj_analysis.check.isChecked()
+ ET.SubElement(attr_dc,"field6",name="Start Combo").text= obj_analysis.dc_parameter[0]
+ ET.SubElement(attr_dc,"field7",name="Increment Combo").text=obj_analysis.dc_parameter[1]
+ ET.SubElement(attr_dc,"field8",name="Stop Combo").text= obj_analysis.dc_parameter[2]
+ attr_tran=ET.SubElement(attr_analysis,"tran")
+ ET.SubElement(attr_tran,"field1",name="Start Time").text= str(obj_analysis.tran_entry_var[0].text())
+ ET.SubElement(attr_tran,"field2",name="Step Time").text= str(obj_analysis.tran_entry_var[1].text())
+ ET.SubElement(attr_tran,"field3",name="Stop Time").text= str(obj_analysis.tran_entry_var[2].text())
+ ET.SubElement(attr_tran,"field4",name="Start Combo").text= obj_analysis.tran_parameter[0]
+ ET.SubElement(attr_tran,"field5",name="Step Combo").text= obj_analysis.tran_parameter[1]
+ ET.SubElement(attr_tran,"field6",name="Stop Combo").text= obj_analysis.tran_parameter[2]
+ print "TRAN PARAMETER 2-----",obj_analysis.tran_parameter[2]
+
+ #tree=ET.ElementTree(attr_analysis)
+ #tree.write(f)
+
+
+ if check==0:
+ attr_source=ET.SubElement(attr_parent,"source")
+ if check==1:
+ for child in attr_parent:
+ if child.tag=="source":
+ attr_source=child
+ count=1
+ grand_child_count=1
+ #global tmp_check
+ #tmp_check=0
+ for i in schematicInfo:
+ tmp_check=0
+ words=i.split(' ')
+ wordv=words[0]
+ for child in attr_source:
+ if child.tag==wordv and child.text==words[len(words)-1]:
+ tmp_check=1
+ for grand_child in child:
+ grand_child.text=str(obj_source.entry_var[grand_child_count].text())
+ grand_child_count=grand_child_count+1
+ grand_child_count=grand_child_count+1
+ if tmp_check==0:
+ words=i.split(' ')
+ wordv=words[0]
+ if wordv[0]=="v":
+ attr_var=ET.SubElement(attr_source,words[0],name="Source type")
+ attr_var.text=words[len(words)-1]
+ #ET.SubElement(attr_ac,"field1",name="Lin").text="true"
+ if words[len(words)-1]=="ac":
+ #attr_ac=ET.SubElement(attr_var,"ac")
+ ET.SubElement(attr_var,"field1",name="Amplitude").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ elif words[len(words)-1]=="dc":
+ #attr_dc=ET.SubElement(attr_var,"dc")
+ ET.SubElement(attr_var,"field1",name="Value").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ elif words[len(words)-1]=="sine":
+ #attr_sine=ET.SubElement(attr_var,"sine")
+ ET.SubElement(attr_var,"field1",name="Offset Value").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field2",name="Amplitude").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field3",name="Frequency").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field4",name="Delay Time").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field5",name="Damping Factor").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ elif words[len(words)-1]=="pulse":
+ #attr_pulse=ET.SubElement(attr_var,"pulse")
+ ET.SubElement(attr_var,"field1",name="Initial Value").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field2",name="Pulse Value").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field3",name="Delay Time").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field4",name="Rise Time").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field5",name="Fall Time").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field5",name="Pulse width").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field5",name="Period").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ elif words[len(words)-1]=="pwl":
+ #attr_pwl=ET.SubElement(attr_var,"pwl")
+ ET.SubElement(attr_var,"field1",name="Enter in pwl format").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ elif words[len(words)-1]=="exp":
+ #attr_exp=ET.SubElement(attr_var,"exp")
+ ET.SubElement(attr_var,"field1",name="Initial Value").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field2",name="Pulsed Value").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field3",name="Rise Delay Time").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field4",name="Rise Time Constant").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field5",name="Fall TIme").text=str(obj_source.entry_var[count].text())
+ count=count+1
+ ET.SubElement(attr_var,"field6",name="Fall Time Constant").text=str(obj_source.entry_var[count].text())
+ count=count+2
+ else:
+ pass
+
+ #tree=ET.ElementTree(attr_source)
+ #tree.write(f1)
+
+
+
+ if check==0:
+ attr_model=ET.SubElement(attr_parent,"model")
+ if check==1:
+ for child in attr_parent:
+ if child.tag=="model":
+ attr_model=child
+ i=0
+ #tmp_check is a variable to check for duplicates in the xml file
+ tmp_check=0
+ #tmp_i is the iterator in case duplicates are there; then in that case we need to replace only the child node and not create a new parent node
+
+ for line in modelList:
+ print "i for each line in model List------",i
+ tmp_check=0
+ for rand_itr in obj_model.obj_trac.modelTrack:
+ if rand_itr[2]==line[2] and rand_itr[3]==line[3]:
+ start=rand_itr[7]
+ end=rand_itr[8]
+ i=start
+ for child in attr_model:
+ if child.text==line[2] and child.tag==line[3]:
+ for grand_child in child:
+ if i<=end:
+ grand_child.text=str(obj_model.obj_trac.model_entry_var[i].text())
+ print "STR OF MODEL----",str(obj_model.obj_trac.model_entry_var[i].text())
+ i=i+1
+ print "i incremented to ",i
+ else:
+ pass
+ tmp_check=1
+
+ if tmp_check==0:
+ attr_ui=ET.SubElement(attr_model,line[3],name="type")
+ attr_ui.text=line[2]
+ for key,value in line[7].iteritems():
+ if hasattr(value, '__iter__') and i<=end:
+ for item in value:
+ ET.SubElement(attr_ui,"field"+str(i+1),name=item).text=str(obj_model.obj_trac.model_entry_var[i].text())
+ print "STR OF MODEL----",str(obj_model.obj_trac.model_entry_var[i].text())
+ i=i+1
+ print "i incremented to ",i
+ else:
+ ET.SubElement(attr_ui,"field"+str(i+1),name=value).text=str(obj_model.obj_trac.model_entry_var[i].text())
+ print "STR OF MODEL----",str(obj_model.obj_trac.model_entry_var[i].text())
+ i=i+1
+ print "i incremented to ",i
+ #################################################################################################################
+ if check==0:
+ attr_devicemodel=ET.SubElement(attr_parent,"devicemodel")
+ if check==1:
+ for child in attr_parent:
+ if child.tag=="devicemodel":
+ attr_devicemodel=child
+ print "Device model dict",obj_devicemodel.devicemodel_dict_beg
+ print "Device model dict end",obj_devicemodel.devicemodel_dict_end
+ ##########################
+ for i in obj_devicemodel.devicemodel_dict_beg:
+ attr_var=ET.SubElement(attr_devicemodel,i)
+ it=obj_devicemodel.devicemodel_dict_beg[i]
+ end=obj_devicemodel.devicemodel_dict_end[i]
+ while it<=end:
+ ET.SubElement(attr_var,"field").text=str(obj_devicemodel.entry_var[it].text())
+ it=it+1
+ #####################################
+
+ """keys=obj_devicemodel.devicemodel_dict.keys()
+ n=len(keys)
+ for i in range(n):
+ thisKey=keys[i]
+ nextKey=keys[(i+1)%n]
+ nextValue=obj_devicemodel.devicemodel_dict[nextKey]
+ attr_var=ET.SubElement(attr_devicemodel,thisKey)
+ it=obj_devicemodel.devicemodel_dict[thisKey]
+ while it<=nextValue:
+ ET.SubElement(attr_var,"field").text=obj_devicemodel.entry_var[it]"""
+
+ ###################################################################################################################
+
+
+ tree=ET.ElementTree(attr_parent)
+ tree.write(fw)
+
+
self.obj_convert = Convert.Convert(self.obj_track.sourcelisttrack["ITEMS"],
self.obj_track.source_entry_var["ITEMS"],
schematicInfo)
@@ -139,8 +389,7 @@ class MainWindow(QtGui.QWidget):
#Adding Device Library to SchematicInfo
schematicInfo = self.obj_convert.addDeviceLibrary(schematicInfo,kicadFile)
-
-
+
analysisoutput = self.obj_convert.analysisInsertor(self.obj_track.AC_entry_var["ITEMS"],
self.obj_track.DC_entry_var["ITEMS"],
self.obj_track.TRAN_entry_var["ITEMS"],
diff --git a/src/kicadtoNgspice/Model.py b/src/kicadtoNgspice/Model.py
index 8ec6de7b..8170f056 100644
--- a/src/kicadtoNgspice/Model.py
+++ b/src/kicadtoNgspice/Model.py
@@ -2,6 +2,9 @@
from PyQt4 import QtGui
import TrackWidget
+from xml.etree import ElementTree as ET
+import sys
+import os
class Model(QtGui.QWidget):
@@ -11,6 +14,26 @@ class Model(QtGui.QWidget):
"""
def __init__(self,schematicInfo,modelList):
+
+
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ #print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="model":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
+
QtGui.QWidget.__init__(self)
#Creating track widget object
self.obj_trac = TrackWidget.TrackWidget()
@@ -37,6 +60,7 @@ class Model(QtGui.QWidget):
modelbox.setTitle(line[5])
self.start=self.nextcount
#line[7] is parameter dictionary holding parameter tags.
+ i=0
for key,value in line[7].iteritems():
#print "Key : ",key
#print "Value : ",value
@@ -49,6 +73,13 @@ class Model(QtGui.QWidget):
modelgrid.addWidget(paramLabel,self.nextrow,0)
self.obj_trac.model_entry_var[self.nextcount]= QtGui.QLineEdit()
modelgrid.addWidget(self.obj_trac.model_entry_var[self.nextcount],self.nextrow,1)
+ try:
+ for child in root:
+ if child.text==line[2] and child.tag==line[3]:
+ self.obj_trac.model_entry_var[self.nextcount].setText(child[i].text)
+ i=i+1
+ except:
+ pass
temp_tag.append(self.nextcount)
self.nextcount = self.nextcount+1
self.nextrow = self.nextrow+1
@@ -58,6 +89,13 @@ class Model(QtGui.QWidget):
modelgrid.addWidget(paramLabel,self.nextrow,0)
self.obj_trac.model_entry_var[self.nextcount]= QtGui.QLineEdit()
modelgrid.addWidget(self.obj_trac.model_entry_var[self.nextcount],self.nextrow,1)
+ try:
+ for child in root:
+ if child.text==line[2] and child.tag==line[3]:
+ self.obj_trac.model_entry_var[self.nextcount].setText(child[i].text)
+ i=i+1
+ except:
+ pass
tag_dict[key] = self.nextcount
self.nextcount = self.nextcount+1
self.nextrow = self.nextrow+1
diff --git a/src/kicadtoNgspice/Source.py b/src/kicadtoNgspice/Source.py
index 3ff7c975..ef4db1cc 100644
--- a/src/kicadtoNgspice/Source.py
+++ b/src/kicadtoNgspice/Source.py
@@ -1,7 +1,10 @@
-
+import sys
+import os
from PyQt4 import QtGui
from Processing import PrcocessNetlist
import TrackWidget
+from xml.etree import ElementTree as ET
+
class Source(QtGui.QWidget):
@@ -29,10 +32,32 @@ class Source(QtGui.QWidget):
"""
This function dynamically create source widget in the Source tab of KicadtoNgSpice window
"""
-
+ kicadFile = sys.argv[1]
+ (projpath,filename)=os.path.split(kicadFile)
+ project_name=projpath.split("/")
+ project_name=project_name[len(project_name)-1]
+ print "PROJECT NAME---------",project_name
+ check=1
+ try:
+ f=open(os.path.join(projpath,project_name+"_Previous_Values.xml"),'r')
+ tree=ET.parse(f)
+ parent_root=tree.getroot()
+ for child in parent_root:
+ if child.tag=="source":
+ root=child
+ except:
+ check=0
+ print "Empty XML"
+
self.grid = QtGui.QGridLayout()
self.setLayout(self.grid)
-
+ xml_num=0
+ """self.ac_check=0
+ self.dc_check=0
+ self.sine_check=0
+ self.pulse_check=0
+ self.pwl_check=0
+ self.exp_check=0"""
if sourcelist:
for line in sourcelist:
#print "Voltage source line index: ",line[0]
@@ -51,6 +76,17 @@ class Source(QtGui.QWidget):
acgrid.addWidget(self.entry_var[self.count],self.row,1)
#Value Need to check previuouse value
self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ pass
+ #Value Need to check previuouse value
+ #self.entry_var[self.count].setText("")
self.row=self.row+1
self.end=self.count
self.count=self.count+1
@@ -69,6 +105,7 @@ class Source(QtGui.QWidget):
dcbox=QtGui.QGroupBox()
dcbox.setTitle(line[3])
dcgrid=QtGui.QGridLayout()
+ self.row=self.row+1
self.start=self.count
label=QtGui.QLabel(line[4])
dcgrid.addWidget(label,self.row,0)
@@ -76,6 +113,16 @@ class Source(QtGui.QWidget):
self.entry_var[self.count].setMaximumWidth(150)
dcgrid.addWidget(self.entry_var[self.count],self.row,1)
self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ pass
+
self.row=self.row+1
self.end=self.count
self.count=self.count+1
@@ -94,6 +141,7 @@ class Source(QtGui.QWidget):
sinebox=QtGui.QGroupBox()
sinebox.setTitle(line[3])
sinegrid=QtGui.QGridLayout()
+ self.row=self.row+1
self.start=self.count
for it in range(4,9):
@@ -102,7 +150,17 @@ class Source(QtGui.QWidget):
self.entry_var[self.count]=QtGui.QLineEdit()
self.entry_var[self.count].setMaximumWidth(150)
sinegrid.addWidget(self.entry_var[self.count],self.row,1)
- self.entry_var[self.count].setText("")
+ self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
self.row=self.row+1
self.count=self.count+1
self.end=self.count-1
@@ -129,6 +187,17 @@ class Source(QtGui.QWidget):
self.entry_var[self.count].setMaximumWidth(150)
pulsegrid.addWidget(self.entry_var[self.count],self.row,1)
self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
self.row=self.row+1
self.count=self.count+1
self.end=self.count-1
@@ -146,6 +215,7 @@ class Source(QtGui.QWidget):
elif line[2]=='pwl':
pwlbox=QtGui.QGroupBox()
pwlbox.setTitle(line[3])
+ self.start=self.count
pwlgrid=QtGui.QGridLayout()
self.start=self.count
label=QtGui.QLabel(line[4])
@@ -153,7 +223,18 @@ class Source(QtGui.QWidget):
self.entry_var[self.count]=QtGui.QLineEdit()
self.entry_var[self.count].setMaximumWidth(150)
pwlgrid.addWidget(self.entry_var[self.count],self.row,1)
- self.entry_var[self.count].setText("");
+ self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ pass
+
+
self.row=self.row+1
self.end=self.count
self.count=self.count+1
@@ -180,6 +261,17 @@ class Source(QtGui.QWidget):
self.entry_var[self.count].setMaximumWidth(150)
expgrid.addWidget(self.entry_var[self.count],self.row,1)
self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
self.row=self.row+1
self.count=self.count+1
self.end=self.count-1
@@ -197,6 +289,7 @@ class Source(QtGui.QWidget):
self.count=self.count+1
+ xml_num=xml_num+1
else: