From b55f693aae4b4874e89514b83d59f5566f8d3998 Mon Sep 17 00:00:00 2001
From: fahim
Date: Mon, 1 Jun 2015 17:56:05 +0530
Subject: Subject: Adding changes for Model Editor
Description: Adding Changes for Model Editor
---
src/deviceModelLibrary/Templates/CORE.lib | 2 +
src/deviceModelLibrary/Templates/CORE.xml | 12 +
src/deviceModelLibrary/Templates/D.lib | 3 +
src/deviceModelLibrary/Templates/D.xml | 24 ++
src/deviceModelLibrary/Templates/NIGBT.lib | 10 +
src/deviceModelLibrary/Templates/NIGBT.xml | 15 +
src/deviceModelLibrary/Templates/NJF.lib | 4 +
src/deviceModelLibrary/Templates/NJF.xml | 29 ++
src/deviceModelLibrary/Templates/NMOS-0.5um.lib | 6 +
src/deviceModelLibrary/Templates/NMOS-0.5um.xml | 32 ++
src/deviceModelLibrary/Templates/NMOS-180nm.lib | 13 +
src/deviceModelLibrary/Templates/NMOS-180um.xml | 112 +++++++
src/deviceModelLibrary/Templates/NMOS-5um.lib | 5 +
src/deviceModelLibrary/Templates/NMOS-5um.xml | 24 ++
src/deviceModelLibrary/Templates/NPN.lib | 4 +
src/deviceModelLibrary/Templates/NPN.xml | 33 ++
src/deviceModelLibrary/Templates/PIGBT.lib | 10 +
src/deviceModelLibrary/Templates/PIGBT.xml | 15 +
src/deviceModelLibrary/Templates/PJF.lib | 5 +
src/deviceModelLibrary/Templates/PJF.xml | 27 ++
src/deviceModelLibrary/Templates/PMOS-0.5um.lib | 6 +
src/deviceModelLibrary/Templates/PMOS-0.5um.xml | 32 ++
src/deviceModelLibrary/Templates/PMOS-180nm.lib | 11 +
src/deviceModelLibrary/Templates/PMOS-180um.xml | 112 +++++++
src/deviceModelLibrary/Templates/PMOS-5um.lib | 5 +
src/deviceModelLibrary/Templates/PMOS-5um.xml | 23 ++
src/deviceModelLibrary/Templates/PNP.lib | 4 +
src/deviceModelLibrary/Templates/PNP.xml | 33 ++
src/frontEnd/Application.py | 13 +-
src/frontEnd/DockArea.py | 23 ++
src/modelEditor/ModelEditor.py | 415 ++++++++++++++++++++++++
src/modelEditor/__init__.py | 0
32 files changed, 1061 insertions(+), 1 deletion(-)
create mode 100755 src/deviceModelLibrary/Templates/CORE.lib
create mode 100644 src/deviceModelLibrary/Templates/CORE.xml
create mode 100755 src/deviceModelLibrary/Templates/D.lib
create mode 100644 src/deviceModelLibrary/Templates/D.xml
create mode 100755 src/deviceModelLibrary/Templates/NIGBT.lib
create mode 100644 src/deviceModelLibrary/Templates/NIGBT.xml
create mode 100755 src/deviceModelLibrary/Templates/NJF.lib
create mode 100644 src/deviceModelLibrary/Templates/NJF.xml
create mode 100755 src/deviceModelLibrary/Templates/NMOS-0.5um.lib
create mode 100644 src/deviceModelLibrary/Templates/NMOS-0.5um.xml
create mode 100755 src/deviceModelLibrary/Templates/NMOS-180nm.lib
create mode 100644 src/deviceModelLibrary/Templates/NMOS-180um.xml
create mode 100755 src/deviceModelLibrary/Templates/NMOS-5um.lib
create mode 100644 src/deviceModelLibrary/Templates/NMOS-5um.xml
create mode 100755 src/deviceModelLibrary/Templates/NPN.lib
create mode 100644 src/deviceModelLibrary/Templates/NPN.xml
create mode 100755 src/deviceModelLibrary/Templates/PIGBT.lib
create mode 100644 src/deviceModelLibrary/Templates/PIGBT.xml
create mode 100755 src/deviceModelLibrary/Templates/PJF.lib
create mode 100644 src/deviceModelLibrary/Templates/PJF.xml
create mode 100755 src/deviceModelLibrary/Templates/PMOS-0.5um.lib
create mode 100644 src/deviceModelLibrary/Templates/PMOS-0.5um.xml
create mode 100755 src/deviceModelLibrary/Templates/PMOS-180nm.lib
create mode 100644 src/deviceModelLibrary/Templates/PMOS-180um.xml
create mode 100755 src/deviceModelLibrary/Templates/PMOS-5um.lib
create mode 100644 src/deviceModelLibrary/Templates/PMOS-5um.xml
create mode 100755 src/deviceModelLibrary/Templates/PNP.lib
create mode 100644 src/deviceModelLibrary/Templates/PNP.xml
create mode 100644 src/modelEditor/ModelEditor.py
create mode 100644 src/modelEditor/__init__.py
diff --git a/src/deviceModelLibrary/Templates/CORE.lib b/src/deviceModelLibrary/Templates/CORE.lib
new file mode 100755
index 00000000..c48c4b51
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/CORE.lib
@@ -0,0 +1,2 @@
+.model K3019PL_3C8 Core(MS=415.2K A=44.82 C=.4112 K=25.74
++ Area=1.38 Path=4.52)
diff --git a/src/deviceModelLibrary/Templates/CORE.xml b/src/deviceModelLibrary/Templates/CORE.xml
new file mode 100644
index 00000000..09129f74
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/CORE.xml
@@ -0,0 +1,12 @@
+
+Core
+K3019PL_3C8
+
+415.2K
+44.82
+.4112
+25.74
+1.38
+4.52
+
+
diff --git a/src/deviceModelLibrary/Templates/D.lib b/src/deviceModelLibrary/Templates/D.lib
new file mode 100755
index 00000000..890c37fe
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/D.lib
@@ -0,0 +1,3 @@
+.model D1N750 D( Is=880.5E-18 Rs=.25 Ikf=0 N=1 Xti=3 Eg=1.11 Cjo=175p M=.5516
++ Vj=.75 Fc=.5 Isr=1.859n Nr=2 Bv=8.1 Ibv=20.245m Nbv=1.6989 Ibvl=1.9556m
++ Nbvl=14.976 Tbv1=-21.277u)
diff --git a/src/deviceModelLibrary/Templates/D.xml b/src/deviceModelLibrary/Templates/D.xml
new file mode 100644
index 00000000..61312a8a
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/D.xml
@@ -0,0 +1,24 @@
+
+D
+D1N750
+
+ 880.5E-18
+ .25
+ 0
+ 1
+ 3
+ 1.11
+ 175p
+ .5516
+ .75
+ .5
+ 1.859n
+ 2
+ 8.1
+ 20.245m
+ 1.6989
+ 1.9556m
+ 14.976
+ -21.277u
+
+
diff --git a/src/deviceModelLibrary/Templates/NIGBT.lib b/src/deviceModelLibrary/Templates/NIGBT.lib
new file mode 100755
index 00000000..8c09dcbc
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NIGBT.lib
@@ -0,0 +1,10 @@
+.MODEL IXGH40N60 NIGBT (
++ TAU=287.56E-9
++ KP=50.034
++ AREA=37.500E-6
++ AGD=18.750E-6
++ VT=4.1822
++ KF=.36047
++ CGS=31.942E-9
++ COXD=53.188E-9
++ VTD=2.6570)
diff --git a/src/deviceModelLibrary/Templates/NIGBT.xml b/src/deviceModelLibrary/Templates/NIGBT.xml
new file mode 100644
index 00000000..a945522a
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NIGBT.xml
@@ -0,0 +1,15 @@
+
+NIGBT
+IXGH40N60
+
+287.56E-9
+50.034
+37.500E-6
+18.750E-6
+4.1822
+.36047
+31.942E-9
+53.188E-9
+2.6570
+
+
diff --git a/src/deviceModelLibrary/Templates/NJF.lib b/src/deviceModelLibrary/Templates/NJF.lib
new file mode 100755
index 00000000..dbb2cbae
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NJF.lib
@@ -0,0 +1,4 @@
+.model J2N3819 NJF(Beta=1.304m Betatce=-.5 Rd=1 Rs=1 Lambda=2.25m Vto=-3
++ Vtotc=-2.5m Is=33.57f Isr=322.4f N=1 Nr=2 Xti=3 Alpha=311.7u
++ Vk=243.6 Cgd=1.6p M=.3622 Pb=1 Fc=.5 Cgs=2.414p Kf=9.882E-18
++ Af=1)
diff --git a/src/deviceModelLibrary/Templates/NJF.xml b/src/deviceModelLibrary/Templates/NJF.xml
new file mode 100644
index 00000000..1b73fc73
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NJF.xml
@@ -0,0 +1,29 @@
+
+NJF
+J2N3819
+
+1.304m
+-.5
+1
+1
+2.25m
+-3
+-2.5m
+33.57f
+322.4f
+1
+2
+3
+311.7u
+243.6
+1.6p
+.3622
+1
+.5
+2.414p
+9.882E-18
+1
+
+
+
+
diff --git a/src/deviceModelLibrary/Templates/NMOS-0.5um.lib b/src/deviceModelLibrary/Templates/NMOS-0.5um.lib
new file mode 100755
index 00000000..2e6f4635
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-0.5um.lib
@@ -0,0 +1,6 @@
+.model mos_n NMOS( TPG=1 TOX=9.5n CJ=550u ETA=0.02125 VMAX=1.8E05
++ GAMMA=0.62 CGSO=0.3n LD=50n MJSW=0.35 PB=1.1
++ CGBO=0.45n XJ=0.2U CGDO=0.3n KAPPA=0.1 LEVEL=3
++ VTO=0.6 NFS=7.20E11 THETA=0.23 CJSW=0.3n PHI=0.7
++ RSH=2.0 MJ=0.6 UO=420 KP=156u DELTA=0.88
++ NSUB=1.40E17 )
\ No newline at end of file
diff --git a/src/deviceModelLibrary/Templates/NMOS-0.5um.xml b/src/deviceModelLibrary/Templates/NMOS-0.5um.xml
new file mode 100644
index 00000000..9ee36496
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-0.5um.xml
@@ -0,0 +1,32 @@
+
+NMOS
+mos_n
+
+1
+9.5n
+550u
+0.02125
+1.8E05
+0.62
+0.3n
+50n
+0.35
+1.1
+0.45n
+0.2U
+0.3n
+0.1
+3
+0.6
+7.20E11
+0.23
+0.3n
+0.7
+2.0
+0.6
+420
+156u
+0.88
+1.40E17
+
+
diff --git a/src/deviceModelLibrary/Templates/NMOS-180nm.lib b/src/deviceModelLibrary/Templates/NMOS-180nm.lib
new file mode 100755
index 00000000..51e9b119
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-180nm.lib
@@ -0,0 +1,13 @@
+.model CMOSN NMOS (LEVEL=8 VERSION=3.2 TNOM=27 TOX=4.1E-9 XJ=1E-7 NCH=2.3549E17 VTH0=0.3823463 K1=0.5810697
++ K2=4.774618E-3 K3=0.0431669 K3B=1.1498346 W0=1E-7 NLX=1.910552E-7 DVT0W=0 DVT1W=0 DVT2W=0
++ DVT0=1.2894824 DVT1=0.3622063 DVT2=0.0713729 U0=280.633249 UA=-1.208537E-9 UB=2.158625E-18
++ UC=5.342807E-11 VSAT=9.366802E4 A0=1.7593146 AGS=0.3939741 B0=-6.413949E-9 B1=-1E-7 KETA=-5.180424E-4
++ A1=0 A2=1 RDSW=105.5517558 PRWG=0.5 PRWB=-0.1998871 WR=1 WINT=7.904732E-10 LINT=1.571424E-8 XL=0
++ XW=-1E-8 DWG=1.297221E-9 DWB=1.479041E-9 VOFF=-0.0955434 NFACTOR=2.4358891 CIT=0 CDSC=2.4E-4 CDSCD=0
++ CDSCB=0 ETA0=3.104851E-3 ETAB=-2.512384E-5 DSUB=0.0167075 PCLM=0.8073191 PDIBLC1=0.1666161 PDIBLC2=3.112892E-3
++ PDIBLCB=-0.1 DROUT=0.7875618 PSCBE1=8E10 PSCBE2=9.213635E-10 PVAG=3.85243E-3 DELTA=0.01 RSH=6.7 MOBMOD=1
++ PRT=0 UTE=-1.5 KT1=-0.11 KT1L=0 KT2=0.022 UA1=4.31E-9 UB1=-7.61E-18 UC1=-5.6E-11 AT=3.3E4 WL=0 WLN=1
++ WW=0 WWN=1 WWL=0 LL=0 LLN=1 LW=0 LWN=1 LWL=0 CAPMOD=2 XPART=0.5 CGDO=7.08E-10 CGSO=7.08E-10 CGBO=1E-12
++ CJ=9.68858E-4 PB=0.8 MJ=0.3864502 CJSW=2.512138E-10 PBSW=0.809286 MJSW=0.1060414 CJSWG=3.3E-10 PBSWG=0.809286
++ MJSWG=0.1060414 CF=0 PVTH0=-1.192722E-3 PRDSW=-5 PK2=6.450505E-5 WKETA=-4.27294E-4 LKETA=-0.0104078
++ PU0=6.3268729 PUA=2.226552E-11 PUB=0 PVSAT=969.1480157 PETA0=1E-4 PKETA=-1.049509E-3)
diff --git a/src/deviceModelLibrary/Templates/NMOS-180um.xml b/src/deviceModelLibrary/Templates/NMOS-180um.xml
new file mode 100644
index 00000000..fc3b7a47
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-180um.xml
@@ -0,0 +1,112 @@
+
+NMOS
+CMOSN
+
+8
+3.2
+27
+4.1E-9
+1E-7
+2.3549E17
+0.3823463
+0.5810697
+4.774618E-3
+0.0431669
+1.1498346
+1E-7
+1.910552E-7
+0
+0
+0
+1.2894824
+0.3622063
+0.0713729
+280.633249
+-1.208537E-9
+2.158625E-18
+5.342807E-11
+9.366802E4
+1.7593146
+0.3939741
+-6.413949E-9
+-1E-7
+-5.180424E-4
+0
+1
+105.5517558
+0.5
+-0.1998871
+1
+7.904732E-10
+1.571424E-8
+0
+-1E-8
+1.297221E-9
+1.479041E-9
+-0.0955434
+2.4358891
+0
+2.4E-4
+0
+0
+=3.104851E-3
+-2.512384E-5
+0.0167075
+0.8073191
+0.1666161
+3.112892E-3
+-0.1
+0.7875618
+8E10
+9.213635E-10
+3.85243E-3
+0.01
+6.7
+1
+0
+-1.5
+-0.11
+0
+0.022
+4.31E-9
+-7.61E-18
+-5.6E-11
+3.3E4
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+2
+0.5
+7.08E-10
+7.08E-10 /
+1E-12
+9.68858E-4
+0.8
+0.3864502
+2.512138E-10
+0.809286
+0.1060414
+3.3E-10
+0.809286
+0.1060414
+0
+-1.192722E-3
+-5
+6.450505E-5
+-4.27294E-4
+-0.0104078
+6.3268729
+2.226552E-11
+0
+969.1480157
+1E-4
+-1.049509E-3
+
+
diff --git a/src/deviceModelLibrary/Templates/NMOS-5um.lib b/src/deviceModelLibrary/Templates/NMOS-5um.lib
new file mode 100755
index 00000000..a237e1fe
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-5um.lib
@@ -0,0 +1,5 @@
+* 5um technology
+
+.model mos_n NMOS( Cgso=0.4n Tox=85n Vto=1 phi=0.7
++ Level=1
++ Mj=.5 UO=750 Cgdo=0.4n Gamma=1.4 LAMBDA=0.01 LD=0.7u JS=1u CJ=0.4m CJSW=0.8n MJSW=0.5 PB=0.7 CGBO=0.2n )
diff --git a/src/deviceModelLibrary/Templates/NMOS-5um.xml b/src/deviceModelLibrary/Templates/NMOS-5um.xml
new file mode 100644
index 00000000..a72abbf1
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NMOS-5um.xml
@@ -0,0 +1,24 @@
+
+NMOS
+mos_n
+
+0.4n
+85n
+1
+0.7
+1
+.5
+750
+0.4n
+1.4
+0.01
+0.7u
+1u
+0.4m
+0.8n
+0.5
+0.7
+0.2n
+
+
+
diff --git a/src/deviceModelLibrary/Templates/NPN.lib b/src/deviceModelLibrary/Templates/NPN.lib
new file mode 100755
index 00000000..6509fe7a
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NPN.lib
@@ -0,0 +1,4 @@
+.model Q2N2222 NPN( Is=14.34f Xti=3 Eg=1.11 Vaf=74.03 Bf=400 Ne=1.307
++ Ise=14.34f Ikf=.2847 Xtb=1.5 Br=6.092 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=7.306p
++ Mjc=.3416 Vjc=.75 Fc=.5 Cje=22.01p Mje=.377 Vje=.75 Tr=46.91n Tf=411.1p
++ Itf=.6 Vtf=1.7 Xtf=3 Rb=10)
diff --git a/src/deviceModelLibrary/Templates/NPN.xml b/src/deviceModelLibrary/Templates/NPN.xml
new file mode 100644
index 00000000..f0679885
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/NPN.xml
@@ -0,0 +1,33 @@
+
+NPN
+Q2N2222
+
+14.34f
+3
+1.11
+74.03
+400
+1.307
+14.34f
+.2847
+1.5
+
6.092
+2
+0
+0
+1
+7.306p
+.3416
+.75
+.5
+22.01p
+.377
+.75
+46.91n
+411.1p
+.6
+1.7
+3
+10
+
+
diff --git a/src/deviceModelLibrary/Templates/PIGBT.lib b/src/deviceModelLibrary/Templates/PIGBT.lib
new file mode 100755
index 00000000..d4f9e814
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PIGBT.lib
@@ -0,0 +1,10 @@
+.MODEL IXGH40N60 PIGBT (
++ TAU=287.56E-9
++ KP=50.034
++ AREA=37.500E-6
++ AGD=18.750E-6
++ VT=4.1822
++ KF=.36047
++ CGS=31.942E-9
++ COXD=53.188E-9
++ VTD=2.6570)
diff --git a/src/deviceModelLibrary/Templates/PIGBT.xml b/src/deviceModelLibrary/Templates/PIGBT.xml
new file mode 100644
index 00000000..2e316860
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PIGBT.xml
@@ -0,0 +1,15 @@
+
+PIGBT
+IXGH40N60
+
+287.56E-9
+50.034
+37.500E-6
+18.750E-6
+4.1822
+.36047
+31.942E-9
+53.188E-9
+2.6570
+
+
diff --git a/src/deviceModelLibrary/Templates/PJF.lib b/src/deviceModelLibrary/Templates/PJF.lib
new file mode 100755
index 00000000..5589571d
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PJF.lib
@@ -0,0 +1,5 @@
+.model J2N3820 PJF(Beta=1.304m Betatce=-.5 Rd=1 Rs=1 Lambda=2.25m Vto=-3
++ Vtotc=-2.5m Is=33.57f Isr=322.4f N=1 Nr=2 Xti=3 Alpha=311.7u
++ Vk=243.6 Cgd=1.6p M=.3622 Pb=1 Fc=.5 Cgs=2.414p Kf=9.882E-18
++ Af=1)
+
diff --git a/src/deviceModelLibrary/Templates/PJF.xml b/src/deviceModelLibrary/Templates/PJF.xml
new file mode 100644
index 00000000..05184f6f
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PJF.xml
@@ -0,0 +1,27 @@
+
+PJF
+J2N3820
+
+1.304m
+-.5
+1
+1
+2.25m
+-3
+-2.5m
+33.57f
+322.4f
+1
+2
+3
+311.7u
+243.6
+1.6p
+.3622
+1
+.5
+2.414p
+9.882E-18
+1
+
+
diff --git a/src/deviceModelLibrary/Templates/PMOS-0.5um.lib b/src/deviceModelLibrary/Templates/PMOS-0.5um.lib
new file mode 100755
index 00000000..848e8b05
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-0.5um.lib
@@ -0,0 +1,6 @@
+.model mos_p PMOS( TPG=-1 TOX=9.5n CJ=950u ETA=0.025 VMAX=0.3u
++ GAMMA=0.52 CGSO=0.35n LD=70n MJSW=0.25 PB=1
++ CGBO=0.45n XJ=0.2U CGDO=0.35n KAPPA=8.0 LEVEL=3
++ VTO=-0.6 NFS=6.50E11 THETA=0.2 CJSW=0.2n PHI=0.7
++ RSH=2.5 MJ=0.5 UO=130 KP=48u DELTA=0.25
++ NSUB=1.0E17 )
\ No newline at end of file
diff --git a/src/deviceModelLibrary/Templates/PMOS-0.5um.xml b/src/deviceModelLibrary/Templates/PMOS-0.5um.xml
new file mode 100644
index 00000000..a4555169
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-0.5um.xml
@@ -0,0 +1,32 @@
+
+PMOS
+mos_p
+
+-1
+9.5n
+950u
+0.025
+0.3u
+0.52
+0.35n
+70n
+0.25
+1
+0.45n
+0.2U
+0.35n
+8.0
+3
+-0.6
+6.50E11
+0.2
+0.2n
+0.7
+2.5
+0.5
+130
+48u
+0.25
+1.0E17
+
+
diff --git a/src/deviceModelLibrary/Templates/PMOS-180nm.lib b/src/deviceModelLibrary/Templates/PMOS-180nm.lib
new file mode 100755
index 00000000..032b5b95
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-180nm.lib
@@ -0,0 +1,11 @@
+.model CMOSP PMOS (LEVEL=8 VERSION=3.2 TNOM=27 TOX=4.1E-9 XJ=1E-7 NCH=4.1589E17 VTH0=-0.3938813 K1=0.5479015
++ K2=0.0360586 K3=0.0993095 K3B=5.7086622 W0=1E-6 NLX=1.313191E-7 DVT0W=0 DVT1W=0 DVT2W=0 DVT0=0.4911363
++ DVT1=0.2227356 DVT2=0.1 U0=115.6852975 UA=1.505832E-9 UB=1E-21 UC=-1E-10 VSAT=1.329694E5 A0=1.7590478
++ AGS=0.3641621 B0=3.427126E-7 B1=1.062928E-6 KETA=0.0134667 A1=0.6859506 A2=0.3506788 RDSW=168.5705677
++ PRWG=0.5 PRWB=-0.4987371 WR=1 WINT=0 LINT=3.028832E-8 XL=0 XW=-1E-8 DWG=-2.349633E-8 DWB=-7.152486E-9
++ VOFF=-0.0994037 NFACTOR=1.9424315 CIT=0 CDSC=2.4E-4 CDSCD=0 CDSCB=0 ETA0=0.0608072 ETAB=-0.0426148
++ DSUB=0.7343015 PCLM=3.2579974 PDIBLC1=7.229527E-6 PDIBLC2=0.025389 PDIBLCB=-1E-3 DROUT=0 PSCBE1=1.454878E10
++ PSCBE2=4.202027E-9 PVAG=15 DELTA=0.01 RSH=7.8 MOBMOD=1 PRT=0 UTE=-1.5 KT1=-0.11 KT1L=0 KT2=0.022 UA1=4.31E-9
++ UB1=-7.61E-18 UC1=-5.6E-11 AT=3.3E4 WL=0 WLN=1 WW=0 WWN=1 WWL=0 LL=0 LLN=1 LW=0 LWN=1 LWL=0 CAPMOD=2 XPART=0.5
++ CGDO=6.32E-10 CGSO=6.32E-10 CGBO=1E-12 CJ=1.172138E-3 PB=0.8421173 MJ=0.4109788 CJSW=2.242609E-10 PBSW=0.8 + MJSW=0.3752089 CJSWG=4.22E-10 PBSWG=0.8 MJSWG=0.3752089 CF=0 PVTH0=1.888482E-3 PRDSW=11.5315407 PK2=1.559399E-3
++ WKETA=0.0319301 LKETA=2.955547E-3 PU0=-1.1105313 PUA=-4.62102E-11 PUB=1E-21 PVSAT=50 PETA0=1E-4 PKETA=-4.346368E-3)
diff --git a/src/deviceModelLibrary/Templates/PMOS-180um.xml b/src/deviceModelLibrary/Templates/PMOS-180um.xml
new file mode 100644
index 00000000..99916972
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-180um.xml
@@ -0,0 +1,112 @@
+
+PMOS
+CMOSP
+
+8
+3.2
+27
+4.1E-9
+1E-7
+4.1589E17
+-0.3938813
+0.5479015
+0.0360586
+0.0993095
+5.7086622
+1E-6
+1.313191E-7
+0
+0
+0
+0.4911363
+0.2227356
+0.1
+115.6852975
+1.505832E-9
+1E-21
+-1E-10
+1.329694E5
+1.7590478
+0.3641621
+3.427126E-7
+1.062928E-6
+0.0134667
+0.6859506
+0.3506788
+168.5705677
+0.5
+-0.4987371
+1
+0
+3.028832E-8
+0
+-1E-8
+-2.349633E-8
+-7.152486E-9
+-0.0994037
+1.9424315
+0
+2.4E-4
+0
+0
+0.0608072
+-0.0426148
+0.7343015
+3.2579974
+7.229527E-6
+0.025389
+-1E-3
+0
+1.454878E10
+4.202027E-9
+15
+0.01
+7.8
+1
+0
+-1.5
+-0.11
+0
+0.022
+4.31E-9
+-7.61E-18
+-5.6E-11
+3.3E4
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+2
+0.5
+6.32E-10
+6.32E-10
+1E-12
+1.172138E-3
+0.8421173
+0.4109788
+2.242609E-10
+0.8
+0.3752089
+4.22E-10
+0.8
+0.3752089
+0
+1.888482E-3
+11.5315407
+1.559399E-3
+0.0319301
+2.955547E-3
+-1.1105313
+-4.62102E-11
+1E-21
+50
+1E-4
+-4.346368E-3
+
+
diff --git a/src/deviceModelLibrary/Templates/PMOS-5um.lib b/src/deviceModelLibrary/Templates/PMOS-5um.lib
new file mode 100755
index 00000000..9c3ed976
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-5um.lib
@@ -0,0 +1,5 @@
+*5um technology
+
+.model mos_p PMOS( Cgso=0.4n Tox=85n Vto=-1 phi=0.65
++ Level=1
++ Mj=.5 UO=250 Cgdo=0.4n Gamma=0.65 LAMBDA=0.03 LD=0.6u JS=1u CJ=0.18m CJSW=0.6n MJSW=0.5 PB=0.7 CGBO=0.2n )
diff --git a/src/deviceModelLibrary/Templates/PMOS-5um.xml b/src/deviceModelLibrary/Templates/PMOS-5um.xml
new file mode 100644
index 00000000..b82c5ae6
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PMOS-5um.xml
@@ -0,0 +1,23 @@
+
+PMOS
+mos_p
+
+0.4n
+85n
+-1
+0.65
+1
+.5
+250
+0.4n
+0.65
+0.03
+0.6u
+1u
+0.18m
+0.6n
+0.5
+0.7
+0.2n
+
+
diff --git a/src/deviceModelLibrary/Templates/PNP.lib b/src/deviceModelLibrary/Templates/PNP.lib
new file mode 100755
index 00000000..7edda0ea
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PNP.lib
@@ -0,0 +1,4 @@
+.model Q2N2907A PNP(Is=650.6E-18 Xti=3 Eg=1.11 Vaf=115.7 Bf=231.7 Ne=1.829
++ Ise=54.81f Ikf=1.079 Xtb=1.5 Br=3.563 Nc=2 Isc=0 Ikr=0 Rc=.715
++ Cjc=14.76p Mjc=.5383 Vjc=.75 Fc=.5 Cje=19.82p Mje=.3357 Vje=.75
++ Tr=111.3n Tf=603.7p Itf=.65 Vtf=5 Xtf=1.7 Rb=10)
diff --git a/src/deviceModelLibrary/Templates/PNP.xml b/src/deviceModelLibrary/Templates/PNP.xml
new file mode 100644
index 00000000..a25276a9
--- /dev/null
+++ b/src/deviceModelLibrary/Templates/PNP.xml
@@ -0,0 +1,33 @@
+
+PNP
+Q2N2907A
+
+650.6E-18
+3
+1.11
+115.7
+231.7
+1.829
+54.81f
+1.079
+1.5
+
3.563
+2
+0
+0
+.715
+14.76p
+.5383
+.75
+.5
+19.82p
+.3357
+.75
+111.3n
+603.7p
+.65
+5
+1.7
+10
+
+
diff --git a/src/frontEnd/Application.py b/src/frontEnd/Application.py
index 7f00e7a7..ca9471c6 100755
--- a/src/frontEnd/Application.py
+++ b/src/frontEnd/Application.py
@@ -26,7 +26,6 @@ from projManagement.Kicad import Kicad
from frontEnd import ProjectExplorer
import Workspace
import DockArea
-
import os
import sys
import time
@@ -106,6 +105,9 @@ class Application(QtGui.QMainWindow):
self.pcb = QtGui.QAction(QtGui.QIcon('../images/pcb.png'),'PCB Layout',self)
self.pcb.triggered.connect(self.obj_kicad.openLayout)
+
+ self.model = QtGui.QAction(QtGui.QIcon('../images/model.png'),'Model Editor',self)
+ self.model.triggered.connect(self.open_modelEditor)
#Adding Action Widget to tool bar
self.lefttoolbar = QtGui.QToolBar('Left ToolBar')
@@ -115,6 +117,7 @@ class Application(QtGui.QMainWindow):
self.lefttoolbar.addAction(self.ngspice)
self.lefttoolbar.addAction(self.footprint)
self.lefttoolbar.addAction(self.pcb)
+ self.lefttoolbar.addAction(self.model)
self.lefttoolbar.setOrientation(QtCore.Qt.Vertical)
def new_project(self):
@@ -205,6 +208,14 @@ class Application(QtGui.QMainWindow):
print "Current Project : ",self.obj_appconfig.current_project
#self.obj_Mainview.obj_dockarea.plottingEditor()
+
+ def open_modelEditor(self):
+ print "model editor is called"
+ self.obj_Mainview.obj_dockarea.modelEditor()
+
+ def testing(self):
+ print "Success hit kicad button"
+
class MainView(QtGui.QWidget):
"""
diff --git a/src/frontEnd/DockArea.py b/src/frontEnd/DockArea.py
index 875b3b90..76216aa6 100644
--- a/src/frontEnd/DockArea.py
+++ b/src/frontEnd/DockArea.py
@@ -2,6 +2,7 @@ from PyQt4 import QtGui,QtCore
from ngspiceSimulation.pythonPlotting import plotWindow
from ngspiceSimulation.NgspiceWidget import NgspiceWidget
from configuration.Appconfig import Appconfig
+from modelEditor.ModelEditor import ModelEditorclass
import os
dockList = ['Welcome']
@@ -107,6 +108,28 @@ class DockArea(QtGui.QMainWindow):
dock['NgSpice-'+str(count)].raise_()
count = count + 1
+
+ def modelEditor(self):
+ print"in model editor"
+ global count
+ self.modelwidget = QtGui.QWidget()
+
+ self.modellayout = QtGui.QVBoxLayout()
+ self.modellayout.addWidget(ModelEditorclass())
+
+ #Adding to main Layout
+ self.modelwidget.setLayout(self.modellayout)
+
+ dock['Model Editor-'+str(count)] = QtGui.QDockWidget('Model Editor-'+str(count))
+ dock['Model Editor-'+str(count)].setWidget(self.modelwidget)
+ self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock['Model Editor-'+str(count)])
+ self.tabifyDockWidget(dock['Welcome'],dock['Model Editor-'+str(count)])
+
+ dock['Model Editor-'+str(count)].setVisible(True)
+ dock['Model Editor-'+str(count)].setFocus()
+ dock['Model Editor-'+str(count)].raise_()
+
+ count = count + 1
diff --git a/src/modelEditor/ModelEditor.py b/src/modelEditor/ModelEditor.py
new file mode 100644
index 00000000..0ce32a61
--- /dev/null
+++ b/src/modelEditor/ModelEditor.py
@@ -0,0 +1,415 @@
+from PyQt4 import QtGui, QtCore
+from PyQt4.Qt import QTableWidgetItem
+import xml.etree.ElementTree as ET
+import os
+
+class ModelEditorclass(QtGui.QWidget):
+ def __init__(self):
+ QtGui.QWidget.__init__(self)
+ self.savepathtest = '../deviceModelLibrary'
+ self.newflag=0
+ self.layout = QtGui.QVBoxLayout()
+ self.splitter= QtGui.QSplitter()
+ self.grid= QtGui.QGridLayout()
+ self.splitter.setOrientation(QtCore.Qt.Vertical)
+
+ self.newbtn = QtGui.QPushButton('New')
+ self.newbtn.clicked.connect(self.opennew)
+ self.editbtn = QtGui.QPushButton('Edit')
+ self.editbtn.clicked.connect(self.openedit)
+ self.savebtn = QtGui.QPushButton('Save')
+ self.savebtn.setDisabled(True)
+ self.savebtn.clicked.connect(self.savemodelfile)
+ self.removebtn = QtGui.QPushButton('Remove')
+ self.removebtn.setHidden(True)
+ self.removebtn.clicked.connect(self.removeparameter)
+ self.addbtn = QtGui.QPushButton('Add')
+ self.addbtn.setHidden(True)
+ self.addbtn.clicked.connect(self.addparameters)
+ #self.splitter.addWidget(self.newbtn)
+ self.grid.addWidget(self.newbtn, 1,2)
+ self.grid.addWidget(self.editbtn, 1,3)
+ self.grid.addWidget(self.savebtn, 1,4)
+ self.grid.addWidget(self.removebtn, 8,4)
+ self.grid.addWidget(self.addbtn, 5,4)
+
+ self.radiobtnbox = QtGui.QButtonGroup()
+ self.diode = QtGui.QRadioButton('Diode')
+ self.diode.setDisabled(True)
+ self.bjt = QtGui.QRadioButton('BJT')
+ self.bjt.setDisabled(True)
+ self.mos = QtGui.QRadioButton('MOS')
+ self.mos.setDisabled(True)
+ self.jfet = QtGui.QRadioButton('JFET')
+ self.jfet.setDisabled(True)
+ self.igbt = QtGui.QRadioButton('IGBT')
+ self.igbt.setDisabled(True)
+ self.magnetic = QtGui.QRadioButton('Magnetic Core')
+ self.magnetic.setDisabled(True)
+
+ self.radiobtnbox.addButton(self.diode)
+ self.diode.clicked.connect(self.diode_click)
+ self.radiobtnbox.addButton(self.bjt)
+ self.bjt.clicked.connect(self.bjt_click)
+ self.radiobtnbox.addButton(self.mos)
+ self.mos.clicked.connect(self.mos_click)
+ self.radiobtnbox.addButton(self.jfet)
+ self.jfet.clicked.connect(self.jfet_click)
+ self.radiobtnbox.addButton(self.igbt)
+ self.igbt.clicked.connect(self.igbt_click)
+ self.radiobtnbox.addButton(self.magnetic)
+ self.magnetic.clicked.connect(self.magnetic_click)
+
+ self.types= QtGui.QComboBox()
+ self.types.setHidden(True)
+
+ self.grid.addWidget(self.types,2,2,2,3)
+ self.grid.addWidget(self.diode, 3,1)
+ self.grid.addWidget(self.bjt,4,1)
+ self.grid.addWidget(self.mos,5,1)
+ self.grid.addWidget(self.jfet,6,1)
+ self.grid.addWidget(self.igbt,7,1)
+ self.grid.addWidget(self.magnetic,8,1)
+
+ #self.layout.addWidget(self.splitter)
+ self.setLayout(self.grid)
+ #self.setLayout(self.layout)
+ self.show()
+
+ '''To create New Model file '''
+ def opennew(self):
+ self.addbtn.setHidden(True)
+ try:
+ self.modeltable.setHidden(True)
+ except:
+ pass
+ text, ok = QtGui.QInputDialog.getText(self, 'New Model','Enter Model Name:')
+ if ok:
+ self.newflag=1
+ self.diode.setDisabled(False)
+ self.bjt.setDisabled(False)
+ self.mos.setDisabled(False)
+ self.jfet.setDisabled(False)
+ self.igbt.setDisabled(False)
+ self.magnetic.setDisabled(False)
+ self.modelname = (str(text))
+ else:
+ pass
+
+ self.validation(text)
+
+ def diode_click(self):
+ self.openfiletype('Diode')
+ self.types.setHidden(True)
+ '''
+ self.types.clear()
+ self.types.addItem('Diode')
+ filetype = str(self.types.currentText())
+ self.types.activated[str].connect(self.setfiletype)
+ '''
+ def bjt_click(self):
+ self.types.setHidden(False)
+ self.types.clear()
+ self.types.addItem('NPN')
+ self.types.addItem('PNP')
+ filetype = str(self.types.currentText())
+ self.openfiletype(filetype)
+ self.types.activated[str].connect(self.setfiletype)
+
+ def mos_click(self):
+ self.types.setHidden(False)
+ self.types.clear()
+ self.types.addItem('NMOS(Level-1 5um)')
+ self.types.addItem('NMOS(Level-3 0.5um)')
+ self.types.addItem('NMOS(Level-8 180um)')
+ self.types.addItem('PMOS(Level-1 5um)')
+ self.types.addItem('PMOS(Level-3 0.5um)')
+ self.types.addItem('PMOS(Level-8 180um)')
+ filetype = str(self.types.currentText())
+ self.openfiletype(filetype)
+ self.types.activated[str].connect(self.setfiletype)
+
+ def jfet_click(self):
+ self.types.setHidden(False)
+ self.types.clear()
+ self.types.addItem('N-JFET')
+ self.types.addItem('P-JFET')
+ filetype = str(self.types.currentText())
+ self.openfiletype(filetype)
+ self.types.activated[str].connect(self.setfiletype)
+
+ def igbt_click(self):
+ self.types.setHidden(False)
+ self.types.clear()
+ self.types.addItem('N-IGBT')
+ self.types.addItem('P-IGBT')
+ filetype = str(self.types.currentText())
+ self.openfiletype(filetype)
+ self.types.activated[str].connect(self.setfiletype)
+
+ def magnetic_click(self):
+ self.openfiletype('Magnetic Core')
+ self.types.setHidden(True)
+ '''
+ self.types.clear()
+ self.types.addItem('Magnetic Core')
+ filetype = str(self.types.currentText())
+ self.types.activated[str].connect(self.setfiletype)
+ '''
+ def setfiletype(self,text):
+ self.filetype = str(text)
+ self.openfiletype(self.filetype)
+
+ '''Select the path of the file to be opened depending upon selected file type '''
+ def openfiletype(self,filetype):
+ self.path = '../deviceModelLibrary/Templates'
+ if self.diode.isChecked():
+ if filetype == 'Diode':
+ path = os.path.join(self.path,'D.xml')
+ self.createtable(path)
+ if self.bjt.isChecked():
+ if filetype == 'NPN':
+ path = os.path.join(self.path,'NPN.xml')
+ self.createtable(path)
+ elif filetype == 'PNP':
+ path = os.path.join(self.path, 'PNP.xml')
+ self.createtable(path)
+ if self.mos.isChecked():
+ if filetype == 'NMOS(Level-1 5um)':
+ path = os.path.join(self.path, 'NMOS-5um.xml')
+ self.createtable(path)
+ elif filetype == 'NMOS(Level-3 0.5um)':
+ path = os.path.join(self.path, 'NMOS-0.5um.xml')
+ self.createtable(path)
+ elif filetype == 'NMOS(Level-8 180um)':
+ path = os.path.join(self.path, 'NMOS-180nm.xml')
+ self.createtable(path)
+ elif filetype == 'PMOS(Level-1 5um)':
+ path = os.path.join(self.path, 'PMOS-5um.xml')
+ self.createtable(path)
+ elif filetype == 'PMOS(Level-3 0.5um)':
+ path = os.path.join(self.path, 'PMOS-0.5um.xml')
+ self.createtable(path)
+ elif filetype == 'PMOS(Level-8 180um)':
+ path = os.path.join(self.path, 'PMOS-180nm.xml')
+ self.createtable(path)
+ if self.jfet.isChecked():
+ if filetype == 'N-JFET':
+ path = os.path.join(self.path, 'NJF.xml')
+ self.createtable(path)
+ elif filetype == 'P-JFET':
+ path = os.path.join(self.path, 'PJF.xml')
+ self.createtable(path)
+ if self.igbt.isChecked():
+ if filetype == 'N-IGBT':
+ path = os.path.join(self.path, 'NIGBT.xml')
+ self.createtable(path)
+ elif filetype == 'P-IGBT':
+ path = os.path.join(self.path, 'PIGBT.xml')
+ self.createtable(path)
+ if self.magnetic.isChecked():
+ if filetype == 'Magnetic Core':
+ path = os.path.join(self.path, 'CORE.xml')
+ self.createtable(path)
+ else :
+ pass
+
+ def openedit(self):
+ self.newflag=0
+ self.addbtn.setHidden(True)
+ self.types.setHidden(True)
+ self.diode.setDisabled(True)
+ self.mos.setDisabled(True)
+ self.jfet.setDisabled(True)
+ self.igbt.setDisabled(True)
+ self.bjt.setDisabled(True)
+ self.magnetic.setDisabled(True)
+ self.editfile=str(QtGui.QFileDialog.getOpenFileName(self))
+ #self.path='/home/workspace/eSim/src/deviceModelLibrary/Diode'
+ self.createtable(self.editfile)
+
+ '''Creates the model table by parsinf th .xml file '''
+ def createtable(self, modelfile):
+ self.savebtn.setDisabled(False)
+ self.addbtn.setHidden(False)
+ self.removebtn.setHidden(False)
+ self.modelfile = modelfile
+ self.modeldict = {}
+ self.modeltable = QtGui.QTableWidget()
+ self.modeltable.resizeColumnsToContents()
+ self.modeltable.setColumnCount(2)
+ self.modeltable.resizeRowsToContents()
+ self.modeltable.resize(200,200)
+ self.grid.addWidget(self.modeltable, 3,2,8,2)
+
+ self.tree = ET.parse(self.modelfile)
+ self.root= self.tree.getroot()
+ for elem in self.tree.iter(tag='refrence'):
+ self.reference = elem.text
+ for elem in self.tree.iter(tag='model_name'):
+ self.model_name = elem.text
+ row=0
+ for params in self.tree.findall('param'):
+ for paramlist in params:
+ self.modeldict[paramlist.tag]= paramlist.text
+ row= row+1
+ self.modeltable.setRowCount(row)
+ count =0
+ for tags, values in self.modeldict.items():
+ self.modeltable.setItem(count,0, QTableWidgetItem(tags))
+ try:
+ valueitem = QTableWidgetItem(values)
+ except:
+ pass
+ self.modeltable.setItem(count,1, valueitem)
+ count= count +1
+ self.modeltable.setHorizontalHeaderLabels(QtCore.QString("Parameters;Values").split(";"))
+ self.modeltable.show()
+ self.modeltable.itemChanged.connect(self.edit_modeltable)
+
+ def edit_modeltable(self):
+ self.savebtn.setDisabled(False)
+ try:
+ indexitem = self.modeltable.currentItem()
+ name = str(indexitem.data(0).toString())
+ rowno = indexitem.row()
+ para = self.modeltable.item(rowno,0)
+ val = str(para.data(0).toString())
+ self.modeldict[val]= name
+ except:
+ pass
+
+ ''' new parameters can be added in the table '''
+ def addparameters(self):
+ text1, ok = QtGui.QInputDialog.getText(self, 'Parameter','Enter Parameter')
+ if ok:
+ if text1 in self.modeldict.keys():
+ self.msg = QtGui.QErrorMessage(self)
+ self.msg.showMessage("The paramaeter " + text1 + " is already in the list")
+ self.msg.setWindowTitle("Error Message")
+ return
+ text2, ok = QtGui.QInputDialog.getText(self, 'Value','Enter Value')
+ if ok :
+ currentRowCount = self.modeltable.rowCount()
+ self.modeltable.insertRow(currentRowCount)
+ self.modeltable.setItem(currentRowCount, 0, QTableWidgetItem(text1))
+ self.modeltable.setItem(currentRowCount, 1, QTableWidgetItem(text2))
+ self.modeldict[str(text1)]= str(text2)
+ else:
+ pass
+ else:
+ pass
+
+
+ def savemodelfile(self):
+ if self.newflag== 1:
+ self.createXML(self.model_name)
+ else:
+ self.savethefile(self.editfile)
+
+ '''creates an .xml an .lib files from the model table'''
+ def createXML(self,model_name):
+ root = ET.Element("library")
+ ET.SubElement(root, "model_name").text = model_name
+ ET.SubElement(root, "refrence").text = self.modelname
+ param = ET.SubElement(root, "param")
+ for tags, text in self.modeldict.items():
+ ET.SubElement(param, tags).text = text
+ tree = ET.ElementTree(root)
+ defaultcwd = os.getcwd()
+ self.savepath = '../deviceModelLibrary'
+ if self.diode.isChecked():
+ savepath = os.path.join(self.savepath, 'Diode')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ if self.mos.isChecked():
+ savepath = os.path.join(self.savepath, 'MOS')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ if self.jfet.isChecked():
+ savepath = os.path.join(self.savepath, 'JFET')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ if self.igbt.isChecked():
+ savepath = os.path.join(self.savepath, 'IGBT')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ if self.magnetic.isChecked():
+ savepath = os.path.join(self.savepath, 'Misc')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ if self.bjt.isChecked():
+ savepath = os.path.join(self.savepath, 'Transistor')
+ os.chdir(savepath)
+ txtfile = open(self.modelname+'.lib', 'w')
+ txtfile.write('.MODEL ' + self.modelname +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ txtfile.write('+ ' + tags + ' = ' + text +'\n')
+ txtfile.write(')')
+ tree.write(self.modelname +".xml")
+ txtfile.close()
+ os.chdir(defaultcwd)
+
+ '''Checks if the file with the name already exists'''
+ def validation(self,text):
+ newfilename = text+'.xml'
+ all_dir = [x[0] for x in os.walk(self.savepathtest)]
+ for each_dir in all_dir:
+ all_files = os.listdir(each_dir)
+ if newfilename in all_files:
+ self.msg = QtGui.QErrorMessage(self)
+ self.msg.showMessage('The file with name ' + text+ ' already exists.')
+ self.msg.setWindowTitle("Error Message")
+
+ '''save the editing in the model table '''
+ def savethefile(self,editfile):
+
+ xmlpath, file = os.path.split(editfile)
+ filename = os.path.splitext(file)[0]
+ libpath = os.path.join(xmlpath,filename+'.lib')
+ libfile = open(libpath, 'w')
+ libfile.write('.MODEL ' + self.reference +' ' + self.model_name + '(\n' )
+ for tags, text in self.modeldict.items():
+ libfile.write('+ ' + tags + ' = ' + text +'\n')
+ libfile.write(')')
+ libfile.close()
+ for params in self.tree.findall('param'):
+ self.root.remove(params)
+ param = ET.SubElement(self.root,'param')
+ for tags, text in self.modeldict.items():
+ ET.SubElement(param, tags).text = text
+ self.tree.write(editfile)
+
+ def removeparameter(self):
+ self.savebtn.setDisabled(False)
+ index = self.modeltable.currentIndex()
+ param = index.data().toString()
+ remove_item = self.modeltable.item(index.row(),0).text()
+ self.modeltable.removeRow(index.row())
+ del self.modeldict[str(remove_item)]
+
\ No newline at end of file
diff --git a/src/modelEditor/__init__.py b/src/modelEditor/__init__.py
new file mode 100644
index 00000000..e69de29b
--
cgit