setupEM 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: setupEM
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Python tool for configuration of gds2palace workflow with GUI.
5
5
  Author-email: Volker Muehlhaus <volker@muehlhaus.com>
6
6
  Requires-Python: >=3.9
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "setupEM"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "Python tool for configuration of gds2palace workflow with GUI."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -200,7 +200,7 @@ class FileInputTab(QWidget):
200
200
  self.main_layout.setAlignment(Qt.AlignTop)
201
201
 
202
202
  # ---------- GDSII FILE GROUP ----------
203
- left_label_width = 200
203
+ left_label_width = 220
204
204
 
205
205
  self.gds_group = QGroupBox("GDSII Layout File")
206
206
  self.gds_layout = QVBoxLayout()
@@ -221,15 +221,16 @@ class FileInputTab(QWidget):
221
221
 
222
222
 
223
223
  self.cellname_layout = QHBoxLayout()
224
- label = QLabel("Cellname (leave empty for default)")
224
+ label = QLabel("Cellname")
225
225
  label.setFixedWidth(left_label_width)
226
226
  self.cellname_layout.addWidget(label)
227
- label.setFixedWidth(left_label_width)
228
227
  self.cellname_box = QComboBox()
229
228
  self.cellname_box.setFixedWidth(250)
230
229
  self.cellname_box.setStyleSheet(COMBO_STYLE_OPTIONAL)
231
230
  self.cellname_box.addItems([""])
232
231
  self.cellname_layout.addWidget(self.cellname_box)
232
+ self.cellname_label2 = QLabel(" (leave empty for default)")
233
+ self.cellname_layout.addWidget(self.cellname_label2)
233
234
  self.cellname_layout.addStretch()
234
235
  self.gds_layout.addLayout(self.cellname_layout)
235
236
 
@@ -199,8 +199,7 @@ class FileInputTab(QWidget):
199
199
  self.main_layout.setAlignment(Qt.AlignTop)
200
200
 
201
201
  # ---------- GDSII FILE GROUP ----------
202
-
203
- left_label_width = 200
202
+ left_label_width = 220
204
203
 
205
204
  self.gds_group = QGroupBox("GDSII Layout File")
206
205
  self.gds_layout = QVBoxLayout()
@@ -221,15 +220,16 @@ class FileInputTab(QWidget):
221
220
 
222
221
 
223
222
  self.cellname_layout = QHBoxLayout()
224
- label = QLabel("Cellname (leave empty for default)")
223
+ label = QLabel("Cellname")
225
224
  label.setFixedWidth(left_label_width)
226
225
  self.cellname_layout.addWidget(label)
227
- label.setFixedWidth(left_label_width)
228
226
  self.cellname_box = QComboBox()
229
227
  self.cellname_box.setFixedWidth(250)
230
228
  self.cellname_box.setStyleSheet(COMBO_STYLE_OPTIONAL)
231
229
  self.cellname_box.addItems([""])
232
230
  self.cellname_layout.addWidget(self.cellname_box)
231
+ self.cellname_label2 = QLabel(" (leave empty for default)")
232
+ self.cellname_layout.addWidget(self.cellname_label2)
233
233
  self.cellname_layout.addStretch()
234
234
  self.gds_layout.addLayout(self.cellname_layout)
235
235
 
@@ -248,7 +248,6 @@ class FileInputTab(QWidget):
248
248
  self.gds_layout.addLayout(self.purpose_layout)
249
249
 
250
250
 
251
-
252
251
  self.viamerge_layout = QHBoxLayout()
253
252
  self.viamerge_label1 = QLabel("Merge via arrays with spacing ")
254
253
  self.viamerge_label1.setFixedWidth(left_label_width)
@@ -273,7 +272,6 @@ class FileInputTab(QWidget):
273
272
 
274
273
  self.gds_group.setLayout(self.gds_layout)
275
274
 
276
-
277
275
  # ---------- XML FILE GROUP ----------
278
276
 
279
277
  self.XML_group = QGroupBox("XML Stackup File")
@@ -1410,29 +1408,6 @@ class CodeEditor(QPlainTextEdit):
1410
1408
 
1411
1409
  # ---------- POP UP WINDOW TO SHOW STACKUP ------------------
1412
1410
 
1413
- def epsilon_to_color(erel, transparency):
1414
- # Compute raw float components
1415
- red = 250 - 30 * (erel - 1)
1416
- green = 255 - 20 * (erel - 1) + (20 / erel) + 10 * erel
1417
- blue = 100 + 15 * erel + (250 / erel)
1418
-
1419
- # Extra adjustment
1420
- if 3.8 < erel < 4.5:
1421
- red += 50 * (erel - 3.8)
1422
- green -= 100 * (erel - 3.8)
1423
-
1424
- # Clamp to range 0–255
1425
- red = min(max(red, 0), 255)
1426
- green = min(max(green, 0), 255)
1427
- blue = min(max(blue, 0), 255)
1428
-
1429
- # Convert to integer RGB
1430
- r = int(round(red))
1431
- g = int(round(green))
1432
- b = int(round(blue))
1433
-
1434
- return QColor(r, g, b, transparency)
1435
-
1436
1411
 
1437
1412
  class VectorWidget(QWidget):
1438
1413
  """This widget actually draws the stackup preview"""
@@ -1499,11 +1474,9 @@ class VectorWidget(QWidget):
1499
1474
  dielectric_shape['dielectric'] = dielectric
1500
1475
  dielectric_shape['numparts'] = parts
1501
1476
 
1502
- # dielectric color is calculated from permittivity
1503
1477
  materialname = dielectric.material
1504
1478
  material = self.materials_list.get_by_name(materialname)
1505
- eps = material.eps
1506
- dielectric_shape['color'] = epsilon_to_color(eps, 95) # QColor(Qt.white)
1479
+ dielectric_shape['color'] = QColor(Qt.white)
1507
1480
  dielectric_shape['material'] = material
1508
1481
 
1509
1482
  total_parts = total_parts + parts
@@ -1527,10 +1500,11 @@ class VectorWidget(QWidget):
1527
1500
  color = dielectric_shape['color']
1528
1501
  material = dielectric_shape['material']
1529
1502
 
1530
- material_string = f'εr={material.eps:.1f}'
1531
- if material.sigma > 1e-3:
1532
- material_string = material_string + f' σ={material.sigma:.1f}'
1533
- material_string = material_string + f'\n{dielectric.thickness:.2f}µm'
1503
+ if material.thermaltablename == "":
1504
+ material_string = f'κ={material.thermalcond:.1f}'
1505
+ else:
1506
+ material_string = "κ=table"
1507
+
1534
1508
 
1535
1509
  painter.setPen(penBlack)
1536
1510
  painter.setBrush(color)
@@ -1589,18 +1563,11 @@ class VectorWidget(QWidget):
1589
1563
  if metal.is_sheet:
1590
1564
  # sheet metal that is simulated with zero extrusion
1591
1565
  height = 3
1592
- resistance_string = f'Rs={material.Rs*1e3:.1f}mΩ'
1593
- else:
1566
+ kappa_string = ""
1567
+ else:
1594
1568
  # regular extruded metal
1569
+ kappa_string = f'κ={material.thermalcond:.1f}'
1595
1570
  height = part_height/2
1596
- if (material.sigma > 0) and (metal.thickness > 0):
1597
- Rs = 1 / (material.sigma*metal.thickness*1e-6)
1598
- if Rs < 1:
1599
- resistance_string = f'Rs={Rs*1e3:.1f} mΩ'
1600
- else:
1601
- resistance_string = f'Rs={Rs:.2f} Ω'
1602
- else:
1603
- resistance_string = '? ' + material.type + ' ?'
1604
1571
 
1605
1572
  # the box for this metal
1606
1573
  if material.type.upper() == "CONDUCTOR":
@@ -1614,12 +1581,12 @@ class VectorWidget(QWidget):
1614
1581
  height = part_height/2
1615
1582
  painter.setBrush(QColor(255,0,0, 80))
1616
1583
  painter.drawRect(xmetal, flipy(ymetal), wmetal, -int(height))
1617
- resistance_string = 'INVALID MATERIAL REFERENCE: ' + metal.material
1584
+ kappa_string = 'INVALID MATERIAL REFERENCE: ' + metal.material
1618
1585
 
1619
1586
  painter.setPen(penBlack)
1620
1587
  drawText_left(xmetal+10, flipy(ymetal), wmetal, part_height/2, f"{metal.name} ({metal.layernum})" )
1621
1588
  painter.setPen(penGray)
1622
- drawText_right(xmetal, flipy(ymetal), wmetal-10, part_height/2, resistance_string)
1589
+ drawText_right(xmetal, flipy(ymetal), wmetal-10, part_height/2, kappa_string)
1623
1590
  # store the drawing position, because vias will refer to that
1624
1591
  if not metal.zmin in stored_z:
1625
1592
  stored_z = np.append(stored_z, metal.zmin)
@@ -1687,6 +1654,14 @@ class VectorWidget(QWidget):
1687
1654
  painter.setBrush(QColor(136,192,200,80))
1688
1655
  for metal in self.metals_list.metals:
1689
1656
  if metal.is_via or metal.is_dielectric:
1657
+
1658
+ material = self.materials_list.get_by_name(metal.material)
1659
+ if material is not None:
1660
+ # regular extruded metal
1661
+ kappa_string = f'κ={material.thermalcond:.1f}'
1662
+ else:
1663
+ kappa_string = ""
1664
+
1690
1665
  y1 = z_to_y(metal.zmin)
1691
1666
  y2 = z_to_y(metal.zmax)
1692
1667
  h = abs(y2-y1)
@@ -1703,7 +1678,7 @@ class VectorWidget(QWidget):
1703
1678
 
1704
1679
  painter.setPen(penBlack)
1705
1680
  painter.drawRect(xvia, flipy(y1), w, -h)
1706
- painter.drawText(xvia+5, flipy(y1+5), f"{metal.name} ({metal.layernum})")
1681
+ painter.drawText(xvia+5, flipy(y1+5), f"{metal.name} ({metal.layernum}) {kappa_string}")
1707
1682
 
1708
1683
  painter.end()
1709
1684
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: setupEM
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Python tool for configuration of gds2palace workflow with GUI.
5
5
  Author-email: Volker Muehlhaus <volker@muehlhaus.com>
6
6
  Requires-Python: >=3.9
File without changes
File without changes
File without changes
File without changes