Package empro :: Package toolkit
[frames] | no frames]

Source Code for Package empro.toolkit

  1  # Copyright 1983-2012 Keysight Technologies, Inc  
  2  import empro 
  3  import empro.internal 
  4  import empro.geometry 
  5   
  6  import geometry 
  7  import lib3d 
  8  import output 
  9  import sensor 
 10  import simulation 
 11  import via_designer 
 12   
 13  try: 
 14      import gui 
 15  except: 
 16      # we are in non-gui mode 
 17      pass 
 18  #import pyDesignKit 
 19  import reflect 
 20  import dataset 
 21  import graphing 
 22  import ads_import 
 23   
24 -class Bunch(object):
25 - def __init__(self, **kwds):
26 self.__dict__.update(kwds)
27 - def merge(self, otherBunch):
28 self.__dict__.update(**otherBunch.__dict__)
29 - def __repr__(self):
30 s = [] 31 for k,v in self.__dict__.iteritems(): 32 s.append("%s=%s" % (str(k),str(v))) 33 return "{"+",".join(s)+"}"
34
35 -def _printexception(func):
36 ''' 37 decorator to print exception to output before reraising it. 38 ''' 39 def op(*args, **kwargs): 40 try: 41 return func(*args, **kwargs) 42 except: 43 import traceback 44 traceback.print_exc() 45 raise
46 op.__name__ == func.__name__ 47 op.__doc__ == func.__doc__ 48 return op 49
50 -def _fromHSL(H, S, L=None, a=None, e=None):
51 ''' 52 converts color from HSL to rgb space. 53 HSL channels are in 0-240 range. 54 rgb channgels are in 0-1 range. 55 ''' 56 return _fromhsl(H/240.,S/240.,L/240. if L else L,a=a,e=e)
57
58 -def _fromhsl(h, s, l=None, a=None, e=None):
59 ''' 60 converts color from hsl to rgb space. 61 all channgels are in 0-1 range. 62 ''' 63 if not e is None: 64 import math 65 l = 1/(1+.9*math.log(e)) 66 assert not l is None 67 h *= 6. 68 c = (1. - abs(2. * l - 1.)) * s 69 x = c * (1. - abs(h % 2. - 1.)) 70 if 0 <= h < 1: 71 r, g, b = c, x, 0 72 elif h < 2: 73 r, g, b = x, c, 0 74 elif h < 3: 75 r, g, b = 0, c, x 76 elif h < 4: 77 r, g, b = 0, x, c 78 elif h < 5: 79 r, g, b = x, 0, c 80 elif h < 6: 81 r, g, b = c, 0, x 82 else: 83 r, g, b = 0, 0, 0 84 m = l - .5 * c 85 rgb = (r + m, g + m, b + m) 86 if a is None: 87 return rgb 88 else: 89 return rgb + (a,)
90 91 92 _RED = (1,0,0) 93 _BLUE = (0,0,1) 94 _BLUE_TRANSPARENT = (0,0,1,0.5) 95 _GREEN = (0,1,0) 96 _ORANGE = (1,0.6,0) 97 _YELLOW = (1,1,0) 98 _BLACK = (0,0,0) 99 _WHITE = (1,1,1) 100 _INF = 1e10000 101 102 import collections as _collections 103 _HueSat = _collections.namedtuple('_HueSat', ['H', 'S']) 104
105 -class MaterialDescription(object):
106 - def __init__(self, name, color=_BLACK, **kwargs):
107 if isinstance(color, _HueSat): 108 color = _fromHSL(color.H, color.S, 180) 109 self.name, self.color = name, color 110 for key, value in kwargs.items(): 111 if key in self.acceptablePhysicalParameters(): 112 setattr(self, key, value)
114 return ['density', 'heatCapacity', 'thermalConductivity', 'thermalConductivityThroughPlane']
115 - def makePhysicalDetails(self):
116 detail = empro.material.PhysicalParameters() 117 for parameter in self.acceptablePhysicalParameters(): 118 value = self.__dict__.get(parameter) 119 if value is not None: 120 setattr(detail, parameter, value); 121 if parameter == 'thermalConductivityThroughPlane': 122 setattr(detail, 'useThermalConductivityThroughPlane', True) 123 return detail
124 - def makeMaterial(self):
125 m = empro.material.Material() 126 m.physicalDetails = self.makePhysicalDetails() 127 m.details = empro.material.PhysicalMaterial() 128 m.name = self.name 129 m.appearance.face.color = self.color 130 m.appearance.edge.color = [.5*x for x in self.color[:3]] 131 m.appearance.edge.visible = True 132 try: 133 m.appearance.vertex.visible = False 134 except AttributeError: 135 pass 136 return m
137
138 -class MaterialDescriptionDielectric(MaterialDescription):
139 - def __init__(self, name, permittivity, lossTangent=0, evaluationFrequency=1e9, color=_BLACK, **kwargs):
140 a=.80 141 if isinstance(color, _HueSat): 142 import math 143 L = 240 / max(1, 1 + .9 * math.log(permittivity)) 144 color = _fromHSL(color.H, color.S, L, a=a) 145 if len(color) == 3: 146 color = list(color) + [a] 147 MaterialDescription.__init__(self, name, color, **kwargs) 148 self.permittivity, self.lossTangent, self.evaluationFrequency = permittivity, lossTangent, evaluationFrequency
149 - def makeMaterial(self):
160
161 -class MaterialDescriptionElectricMagneticSampled(MaterialDescription):
162 - def __init__(self, name, materialData, isElectricFreespace=False, isMagneticFreespace=False, color=_BLACK, **kwargs):
163 a=.80 164 if isinstance(color, _HueSat): 165 import math 166 L = 240 / max(1, 1 + .9 * math.log(18)) 167 color = _fromHSL(color.H, color.S, L, a=a) 168 if len(color) == 3: 169 color = list(color) + [a] 170 MaterialDescription.__init__(self, name, color, **kwargs) 171 self.materialData = materialData 172 self.isElectricFreespace = isElectricFreespace 173 self.isMagneticFreespace = isMagneticFreespace
174 - def makeMaterial(self):
175 m = MaterialDescription.makeMaterial(self) 176 m.priority = 30 177 electricProperties = empro.material.ElectricSampledParameters() 178 magneticProperties = empro.material.MagneticSampledParameters() 179 with electricProperties, magneticProperties: 180 for row in self.materialData: 181 if not self.isElectricFreespace: 182 singleSampleE = empro.material.ElectricNormalParameters(row[1], row[2]) 183 electricProperties.addFrequency(float(row[0]), singleSampleE) 184 if not self.isMagneticFreespace: 185 singleSampleM = empro.material.MagneticNormalParameters(row[3], row[4]) 186 magneticProperties.addFrequency(float(row[0]), singleSampleM) 187 188 with m: 189 if not self.isElectricFreespace: 190 m.details.electricProperties = empro.material.ElectricIsotropic(electricProperties) 191 if not self.isMagneticFreespace: 192 m.details.magneticProperties = empro.material.MagneticIsotropic(magneticProperties) 193 m.appearance.face.specularColor = _WHITE 194 m.appearance.face.gloss = 30.0 195 return m
196
197 -class MaterialDescriptionConductor(MaterialDescription):
198 - def __init__(self, name, conductivity, skinDepthAt10GHz=66.0*1e-6, color=_BLACK, **kwargs):
199 MaterialDescription.__init__(self, name, color, **kwargs) 200 self.conductivity, self.skinDepthAt10GHz = conductivity, skinDepthAt10GHz 201 for key, value in kwargs.items(): 202 if key in self.acceptableResistivityParameters(): 203 setattr(self, key, value)
205 return ['nominalTemperature', 'linearTemperatureCoefficient', 'quadraticTemperatureCoefficient']
206 - def makeMaterial(self):
207 m = MaterialDescription.makeMaterial(self) 208 m.priority = 75 209 props = empro.material.ElectricIsotropic(empro.material.ElectricNormalParameters()) 210 props.parameters.conductivity = self.conductivity 211 props.parameters.relativePermittivity = 1.0 212 for attr in self.acceptableResistivityParameters(): 213 value = self.__dict__.get(attr) 214 if value is not None: 215 setattr(props.parameters, attr, value); 216 m.details.electricProperties = props 217 m.appearance.face.specularColor = m.appearance.face.color 218 m.appearance.face.gloss = 0.5 219 return m
220
221 -class MaterialDescriptionPEC(MaterialDescription):
222 - def __init__(self, name, color=_fromHSL(0, 0, 220)):
225 - def makeMaterial(self):
232
233 -class MaterialDescriptionFreespace(MaterialDescription):
234 - def __init__(self, name, color=_fromHSL(118, 113, 178, 0.5)):
235 MaterialDescription.__init__(self, name, color, density=1.205, heatCapacity=1005, thermalConductivity=0.0257) 236 self.permittivity, self.conductivity = 1, 0
237 - def makeMaterial(self):
244
245 -class MaterialDescriptionAir(MaterialDescription):
246 - def __init__(self, name, permittivity, color=_fromHSL(118, 113, 178, 0.5)):
247 MaterialDescription.__init__(self, name, color, density=1.205, heatCapacity=1005, thermalConductivity=0.0257) 248 self.permittivity = permittivity
249 - def makeMaterial(self):
259 260
261 -def _dictionaryFromDescriptions(*descriptions):
262 return dict([(desc.name, desc) for desc in descriptions])
263 264 #import data.bsr1 265 import data 266 from data import bsr1,bsr2,dsf3,dsf14,fgm40,fgm125,gds,ls18,ls20,ls22,ls24,ls26,ls30 267 from data import mcsu,mf110,mf112,mf114,mf117,mf120,mf124,mfpp120,sf1,sf2,sf4,sf9,sf10,sf15 268 from data import CZ500, CZ600, CZ700 269 defaultMaterialDescriptions = _dictionaryFromDescriptions( 270 MaterialDescriptionPEC("PEC"), 271 MaterialDescriptionFreespace("Freespace"), 272 273 # TFS #103326 274 #MaterialDescriptionFreespace("Air"), 275 MaterialDescriptionAir("Air", permittivity=1.0), 276 277 #Sampled 278 MaterialDescriptionElectricMagneticSampled("Coolzorb 500", materialData = data.CZ500.getValues(), color=_HueSat(0,60), density=3400.0, thermalConductivity=4.0), 279 MaterialDescriptionElectricMagneticSampled("Coolzorb 600", materialData = data.CZ600.getValues(), color=_HueSat(0,60), density=4100.0, thermalConductivity=3.0), 280 MaterialDescriptionElectricMagneticSampled("Coolzorb 700", materialData = data.CZ700.getValues(), color=_HueSat(0,60)), 281 MaterialDescriptionElectricMagneticSampled("ECCOSORB BSR-1", materialData = data.bsr1.getValues(), color=_HueSat(0,60), thermalConductivity=0.8778), 282 MaterialDescriptionElectricMagneticSampled("ECCOSORB BSR-2", materialData = data.bsr2.getValues(), color=_HueSat(5,60), thermalConductivity=0.8778), 283 MaterialDescriptionElectricMagneticSampled("ECCOSORB DSF-3", materialData = data.dsf3.getValues(), color=_HueSat(0,59)), 284 MaterialDescriptionElectricMagneticSampled("ECCOSORB DSF-14", materialData = data.dsf14.getValues(), color=_HueSat(5,59)), 285 MaterialDescriptionElectricMagneticSampled("ECCOSORB FGM-40", materialData = data.fgm40.getValues(), color=_HueSat(0,58)), 286 MaterialDescriptionElectricMagneticSampled("ECCOSORB FGM-125", materialData = data.fgm125.getValues(), color=_HueSat(5,58)), 287 MaterialDescriptionElectricMagneticSampled("ECCOSORB GDS", materialData = data.gds.getValues(), color=_HueSat(0,57)), 288 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-18", materialData = data.ls18.getValues(), isMagneticFreespace=True, color=_HueSat(0,56)), 289 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-20", materialData = data.ls20.getValues(), isMagneticFreespace=True, color=_HueSat(5,56)), 290 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-22", materialData = data.ls22.getValues(), isMagneticFreespace=True, color=_HueSat(10,56)), 291 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-24", materialData = data.ls24.getValues(), isMagneticFreespace=True, color=_HueSat(15,56)), 292 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-26", materialData = data.ls26.getValues(), isMagneticFreespace=True, color=_HueSat(20,56)), 293 MaterialDescriptionElectricMagneticSampled("ECCOSORB LS-30", materialData = data.ls30.getValues(), isMagneticFreespace=True, color=_HueSat(25,56)), 294 MaterialDescriptionElectricMagneticSampled("ECCOSORB MCS-U", materialData = data.mcsu.getValues(), color=_HueSat(0,55)), 295 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-110", materialData = data.mf110.getValues(), color=_HueSat(0,54), thermalConductivity=1.44), 296 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-112", materialData = data.mf112.getValues(), color=_HueSat(5,54), thermalConductivity=1.44), 297 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-114", materialData = data.mf114.getValues(), color=_HueSat(10,54), thermalConductivity=1.44), 298 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-117", materialData = data.mf117.getValues(), color=_HueSat(15,54), thermalConductivity=1.44), 299 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-120", materialData = data.mf120.getValues(), color=_HueSat(20,54), thermalConductivity=1.44), 300 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-124", materialData = data.mf124.getValues(), color=_HueSat(25,54), thermalConductivity=1.44), 301 MaterialDescriptionElectricMagneticSampled("ECCOSORB MF-PP-120", materialData = data.mfpp120.getValues(), color=_HueSat(30,54), density=4200, thermalConductivity=1.44), 302 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-1", materialData = data.sf1.getValues(), color=_HueSat(0,53)), 303 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-2", materialData = data.sf2.getValues(), color=_HueSat(5,53)), 304 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-4", materialData = data.sf4.getValues(), color=_HueSat(10,53)), 305 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-9", materialData = data.sf9.getValues(), color=_HueSat(15,53)), 306 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-10", materialData = data.sf10.getValues(), color=_HueSat(20,53)), 307 MaterialDescriptionElectricMagneticSampled("ECCOSORB SF-15", materialData = data.sf15.getValues(), color=_HueSat(25,53)), 308 309 # Reinforced Thermoset Materials 310 MaterialDescriptionDielectric("Polyester/E Fiberglass", permittivity=4.3, lossTangent=0.016, color=_HueSat(0,60), density=1600, heatCapacity=2300, thermalConductivity=0.24), 311 MaterialDescriptionDielectric("Epoxy/E Fiberglass", permittivity=4.2, lossTangent=0.015, color=_HueSat(5,60), density=1835, heatCapacity=800, thermalConductivity=0.38), 312 MaterialDescriptionDielectric("Epoxy", permittivity=4.2, lossTangent=0.015, color=_HueSat(5,60), density=1835, heatCapacity=800, thermalConductivity=0.6), 313 MaterialDescriptionDielectric("Epoxy/Quartz", permittivity=3.5, lossTangent=0.015, color=_HueSat(5,60)), 314 MaterialDescriptionDielectric("Cyanate Ester/Quartz", permittivity=3.3, lossTangent=0.003, color=_HueSat(10,60)), 315 MaterialDescriptionDielectric("Bismaleimide/Quartz", permittivity=3.3, lossTangent=0.003, color=_HueSat(15,60)), 316 MaterialDescriptionDielectric("Polymidie/E Fiberglass", permittivity=4.1, lossTangent=0.004, color=_HueSat(20,60), density=1600, heatCapacity=1200, thermalConductivity=0.3), 317 MaterialDescriptionDielectric("Polyimide/Quartz", permittivity=3.1, lossTangent=0.003, color=_HueSat(20,60), density=1310, heatCapacity=1130, thermalConductivity=0.35), 318 319 # Unfilled Thermoplastics 320 MaterialDescriptionDielectric("PEEK", permittivity=3.5, lossTangent=0.004, color=_HueSat(155,60), density=1300, heatCapacity=1390, thermalConductivity=0.25), 321 MaterialDescriptionDielectric("PPO", permittivity=2.6, lossTangent=0.0007, color=_HueSat(165,60), density=1100, heatCapacity=1020, thermalConductivity=0.22), 322 MaterialDescriptionDielectric("PEI", permittivity=3.1, lossTangent=0.002, color=_HueSat(170,60), density=1300, heatCapacity=1050, thermalConductivity=0.18), 323 MaterialDescriptionDielectric("PES", permittivity=3.0, lossTangent=0.001, color=_HueSat(175,60), density=1400, heatCapacity=1100, thermalConductivity=0.18), 324 MaterialDescriptionDielectric("ABS", permittivity=2.8, lossTangent=0.01, color=_HueSat(180,60), density=1010, heatCapacity=1386, thermalConductivity=0.188), 325 MaterialDescriptionDielectric("PTFE", permittivity=2.06, lossTangent=0.0002, color=_fromHSL(160,60,220), density=2160, heatCapacity=1400, thermalConductivity=0.25), 326 MaterialDescriptionDielectric("HDPE", permittivity=2.3, lossTangent=0.0003, color=_HueSat(185,60), density=1000, heatCapacity=1330, thermalConductivity=0.45), 327 MaterialDescriptionDielectric("Polycarbonate", permittivity=3.1, lossTangent=0.01, color=_HueSat(190,60), density=1200, heatCapacity=1200, thermalConductivity=0.144), 328 MaterialDescriptionDielectric("Polystyrene", permittivity=2.5, lossTangent=0.0004, color=_HueSat(195,60), density=960, heatCapacity=1300, thermalConductivity=0.033), 329 330 # Rain Erosion Coatings 331 MaterialDescriptionDielectric("Polyurethane Rain Erosion", permittivity=3.0, lossTangent=0.06, color=_HueSat(20,180), density=1090, heatCapacity=1400, thermalConductivity=0.024), 332 MaterialDescriptionDielectric("Fluoroelastomer Rain Erosion", permittivity=3.75, lossTangent=0.04, color=_HueSat(20,180), density=1800, heatCapacity=1670, thermalConductivity=0.2), 333 334 # Uncategorized 335 MaterialDescriptionDielectric("PTFE/Fiberglass", permittivity=2.25, lossTangent=0.001, color=_fromHSL(160,60,200), density=2200, heatCapacity=960, thermalConductivity=0.254), 336 MaterialDescriptionDielectric("PTFE/Quartz", permittivity=2.5, lossTangent=0.0005, color=_fromHSL(160,60,180), density=2100, heatCapacity=930, thermalConductivity=0.44), 337 MaterialDescriptionDielectric("PTFE/Ceramic", permittivity=10.0, lossTangent=0.0010, color=_fromHSL(160,60,120), density=2840, heatCapacity=1000, thermalConductivity=0.645), 338 MaterialDescriptionDielectric("CPS", permittivity=2.54, lossTangent=0.0004, color=_HueSat(235,120)), 339 MaterialDescriptionDielectric("CPS/Fiberglass", permittivity=2.7, lossTangent=0.0010, color=_HueSat(235,120)), 340 MaterialDescriptionDielectric("CPS/Quartz", permittivity=2.7, lossTangent=0.0005, color=_HueSat(235,120)), 341 MaterialDescriptionDielectric("Polyolefin", permittivity=2.3, lossTangent=0.0005, color=_HueSat(230,120), density=920, heatCapacity=1900, thermalConductivity=0.33), 342 MaterialDescriptionDielectric("Polyimide", permittivity=3.5, lossTangent=0.0010, color=_HueSat(225,120), density=1420, heatCapacity=1090, thermalConductivity=0.12), 343 MaterialDescriptionDielectric("PMMA", permittivity=2.6, lossTangent=0.007, color=_HueSat(220,120), density=1200, heatCapacity=1260, thermalConductivity=0.19), 344 MaterialDescriptionDielectric("Nylon", permittivity=3.1, lossTangent=0.008, color=_HueSat(215,120), density=1000, heatCapacity=1740, thermalConductivity=0.28), 345 # Uncategorized 346 MaterialDescriptionDielectric("Alumina", permittivity=9.8,lossTangent=0.000024, color=_fromHSL(129, 50, 220), density=3986, heatCapacity=775, thermalConductivity=30), 347 348 MaterialDescriptionDielectric("InP", permittivity=12.4, lossTangent=0.00030, evaluationFrequency=11.0e9, color=_fromHSL(149,35,120), density=4810, heatCapacity=310, thermalConductivity=68), 349 MaterialDescriptionDielectric("AlGaAs", permittivity=12.9, lossTangent=0.00028, evaluationFrequency=9.61e9, color=_fromHSL(149,35,120), density=5320, heatCapacity=330, thermalConductivity=55), 350 351 MaterialDescriptionDielectric("GaN", permittivity=8.9, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=6100, heatCapacity=490, thermalConductivity=130), 352 MaterialDescriptionDielectric("GaP", permittivity=11.1, lossTangent=0.00018, evaluationFrequency=10.8e9, color=_fromHSL(149,35,120), density=4138, heatCapacity=430, thermalConductivity=110), 353 MaterialDescriptionDielectric("InN", permittivity=15.3, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=6810, heatCapacity=320, thermalConductivity=45), 354 MaterialDescriptionDielectric("InAs", permittivity=15.15, lossTangent=0.0001, evaluationFrequency=10.0e9, color=_fromHSL(149,35,120), density=5670, heatCapacity=250, thermalConductivity=27), 355 356 # Lost tangent at 9.6Ghz 357 MaterialDescriptionDielectric("GaAs", permittivity=12.9, lossTangent=0.00028, evaluationFrequency=9.61e9, color=_fromHSL(149,35,120), density=5317, heatCapacity=350, thermalConductivity=55), 358 # At 3 Ghz 359 #MaterialDescriptionDielectric("Rogers RO3003", permittivity=3.0, lossTangent=8.7e-4, evaluationFrequency=3.0e9, color=_WHITE), 360 # At 8.5 Ghz 361 MaterialDescriptionDielectric("Silicon nitride", permittivity=8.5, lossTangent=0.0036, evaluationFrequency=8.5e9, color=_fromHSL(142,8,137), 362 density=3300, heatCapacity=650, thermalConductivity=27), 363 # At 14 364 MaterialDescriptionDielectric("Silicon", permittivity=12.0, lossTangent=0.009, evaluationFrequency=14.0e9, color=_fromHSL(146,50,160), 365 density=2328, heatCapacity=700, thermalConductivity=150), 366 367 # Metals 368 MaterialDescriptionConductor("Cu", conductivity=5.8*1e+7, skinDepthAt10GHz=6.6*1e-7, color=_fromHSL(20, 209, 160), 369 nominalTemperature=293.15, linearTemperatureCoefficient=0.00429, density=8960.0, heatCapacity=390, thermalConductivity=401), 370 MaterialDescriptionConductor("Copper", conductivity=5.8*1e+7, skinDepthAt10GHz=6.6*1e-7, color=_fromHSL(20, 209, 160), 371 nominalTemperature=293.15, linearTemperatureCoefficient=0.00429, density=8960.0, heatCapacity=390, thermalConductivity=401), 372 373 MaterialDescriptionConductor("Al", conductivity=3.72*1e+7, skinDepthAt10GHz=8.26*1e-7, color=_fromHSL(129, 50, 160), 374 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=2700.0, heatCapacity=900, thermalConductivity=237), 375 MaterialDescriptionConductor("Aluminium", conductivity=3.72*1e+7, skinDepthAt10GHz=8.26*1e-7, color=_fromHSL(129, 50, 160), 376 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=2700.0, heatCapacity=900, thermalConductivity=237), 377 378 MaterialDescriptionConductor("Ag", conductivity=6.17*1e+7, skinDepthAt10GHz=6.42*1e-7, color=_fromHSL(28, 50, 160), 379 nominalTemperature=293.15, linearTemperatureCoefficient=0.0061, density=10490.0, heatCapacity=240, thermalConductivity=429), 380 MaterialDescriptionConductor("Silver", conductivity=6.17*1e+7, skinDepthAt10GHz=6.42*1e-7, color=_fromHSL(28, 50, 160), 381 nominalTemperature=293.15, linearTemperatureCoefficient=0.0061, density=10490.0, heatCapacity=240, thermalConductivity=429), 382 383 MaterialDescriptionConductor("Au", conductivity=4.1*1e+7, skinDepthAt10GHz=7.85*1e-7, color=_fromHSL(30, 240, 160), 384 nominalTemperature=293.15, linearTemperatureCoefficient=0.003715, density=19300.0, heatCapacity=129, thermalConductivity=318), 385 MaterialDescriptionConductor("Gold", conductivity=4.1*1e+7, skinDepthAt10GHz=7.85*1e-7, color=_fromHSL(30, 240, 160), 386 nominalTemperature=293.15, linearTemperatureCoefficient=0.003715, density=19300.0, heatCapacity=129, thermalConductivity=318), 387 388 MaterialDescriptionConductor("In", conductivity=0.87*1e+7, skinDepthAt10GHz=17.0*1e-7, color=_fromHSL(15, 15, 160), 389 nominalTemperature=293.15, linearTemperatureCoefficient=0.0052, density=7310.0, heatCapacity=233, thermalConductivity=81.8), 390 MaterialDescriptionConductor("Indium", conductivity=0.87*1e+7, skinDepthAt10GHz=17.0*1e-7, color=_fromHSL(15, 15, 160), 391 nominalTemperature=293.15, linearTemperatureCoefficient=0.0052, density=7310.0, heatCapacity=233, thermalConductivity=81.8), 392 393 MaterialDescriptionConductor("70-30 brass", conductivity=1.57*1e+7, skinDepthAt10GHz=12.7*1e-7, color=_fromHSL(26, 230, 160), 394 nominalTemperature=293.15, linearTemperatureCoefficient=0.0015, density=8580.0, heatCapacity=375, thermalConductivity=120), 395 396 MaterialDescriptionConductor("Typical solder", conductivity=0.71*1e+7, skinDepthAt10GHz=19.0*1e-7, color=_fromhsl(0.53, 0.022, 0.54), 397 nominalTemperature=293.15, linearTemperatureCoefficient=0.0038, density=7320.0, heatCapacity=167, thermalConductivity=60), 398 399 # PWB Composites 400 MaterialDescriptionDielectric("FR-4", permittivity=4.6, lossTangent=0.01, color=_HueSat(81, 120), density=1850, heatCapacity=600, thermalConductivity=0.81, thermalConductivityThroughPlane=0.29), 401 MaterialDescriptionDielectric("FR-5", permittivity=4.5, lossTangent=0.01, color=_HueSat(81, 120), density=1900, thermalConductivity=0.29), 402 403 # Board Laminates 404 MaterialDescriptionDielectric("Arlon_25FR", permittivity=3.48, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=1800, thermalConductivity=0.45), 405 MaterialDescriptionDielectric("Arlon_25N", permittivity=3.25, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=1700, thermalConductivity=0.45), 406 MaterialDescriptionDielectric("Arlon_AD270N", permittivity=2.7, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235), 407 MaterialDescriptionDielectric("Arlon_AD300N", permittivity=3.0, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235), 408 MaterialDescriptionDielectric("Arlon_AD320N", permittivity=3.2, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235), 409 MaterialDescriptionDielectric("Arlon_AD350N", permittivity=3.5, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2400, thermalConductivity=0.235), 410 MaterialDescriptionDielectric("Arlon_AD360N", permittivity=3.6, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 411 MaterialDescriptionDielectric("Arlon_AR1000", permittivity=10.0, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2840, thermalConductivity=0.645), 412 MaterialDescriptionDielectric("Arlon_AR320", permittivity=3.2, lossTangent=0.003, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 413 MaterialDescriptionDielectric("Arlon_AR350", permittivity=3.5, lossTangent=0.0026, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 414 MaterialDescriptionDielectric("Arlon_AR450", permittivity=4.5, lossTangent=0.0026, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 415 MaterialDescriptionDielectric("Arlon_AR600", permittivity=6.0, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 416 MaterialDescriptionDielectric("Arlon_CLTE", permittivity=2.94, lossTangent=0.0025, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2380, thermalConductivity=0.5), 417 MaterialDescriptionDielectric("Arlon_CuClad217LX", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.261), 418 MaterialDescriptionDielectric("Arlon_CuClad233LX", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2260, thermalConductivity=0.258), 419 MaterialDescriptionDielectric("Arlon_CuClad250GT", permittivity=2.5, lossTangent=0.0010, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254), 420 MaterialDescriptionDielectric("Arlon_CuClad250GX", permittivity=2.5, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254), 421 MaterialDescriptionDielectric("Arlon_DiClad522", permittivity=2.5, lossTangent=0.0010, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254), 422 MaterialDescriptionDielectric("Arlon_DiClad527", permittivity=2.5, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2310, thermalConductivity=0.254), 423 MaterialDescriptionDielectric("Arlon_DiClad870", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2260, thermalConductivity=0.257), 424 MaterialDescriptionDielectric("Arlon_DiClad880", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.261), 425 MaterialDescriptionDielectric("Arlon_Intermod", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 426 MaterialDescriptionDielectric("Arlon_IsoClad917", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184), density=2230, thermalConductivity=0.263), 427 MaterialDescriptionDielectric("Arlon_DiClad933", permittivity=2.33, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 428 MaterialDescriptionDielectric("Arlon_LNB", permittivity=3.3, lossTangent=0.0035, evaluationFrequency=10.0*1.0e9, color=_HueSat(130,184)), 429 MaterialDescriptionDielectric("GE_Getek", permittivity=4.0, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(60,180)), 430 MaterialDescriptionDielectric("GIL_GML1000", permittivity=3.05, lossTangent=0.004, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180), thermalConductivity=0.228), 431 MaterialDescriptionDielectric("GIL_MC3", permittivity=3.86, lossTangent=0.019, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180)), 432 MaterialDescriptionDielectric("GIL_MC5", permittivity=3.26, lossTangent=0.014, evaluationFrequency=10.0*1.0e9, color=_HueSat(90,180)), 433 MaterialDescriptionDielectric("Isola_GigaVer210", permittivity=3.7, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180)), 434 MaterialDescriptionDielectric("Isola_GigaVer410", permittivity=3.85, lossTangent=0.007, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180), thermalConductivity=0.5), 435 MaterialDescriptionDielectric("Isola_Duraver-E-Cu", permittivity=4.8, lossTangent=0.03, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180)), 436 MaterialDescriptionDielectric("Isola_FR408", permittivity=3.6, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(70,180), thermalConductivity=0.4), 437 MaterialDescriptionDielectric("Matsushita_Megtron", permittivity=3.9, lossTangent=0.01, evaluationFrequency=10.0*1.0e9, color=_HueSat(100,180)), 438 439 MaterialDescriptionDielectric("Rogers_RO3003", permittivity=3.0, lossTangent=0.0011, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=900, thermalConductivity=0.5), 440 MaterialDescriptionDielectric("Rogers_RO3006", permittivity=6.15, lossTangent=0.0020, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2600, heatCapacity=860, thermalConductivity=0.79), 441 MaterialDescriptionDielectric("Rogers_RO3010", permittivity=10.2, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2800, heatCapacity=800, thermalConductivity=0.95), 442 MaterialDescriptionDielectric("Rogers_RO3203", permittivity=3.02, lossTangent=0.0016, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=950, thermalConductivity=0.48), 443 MaterialDescriptionDielectric("Rogers_RO3206", permittivity=6.15, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=850, thermalConductivity=0.67), 444 MaterialDescriptionDielectric("Rogers_RO3210", permittivity=10.2, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3000, heatCapacity=790, thermalConductivity=0.81), 445 MaterialDescriptionDielectric("Rogers_RO4003", permittivity=3.38, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1790, thermalConductivity=0.71), 446 MaterialDescriptionDielectric("Rogers_RO4350", permittivity=3.48, lossTangent=0.0037, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1860, thermalConductivity=0.69), 447 448 MaterialDescriptionDielectric("Rogers_RO3003_recommended4EDA", permittivity=3.0, lossTangent=0.0011, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=900, thermalConductivity=0.5), 449 MaterialDescriptionDielectric("Rogers_RO3006_recommended4EDA", permittivity=6.5, lossTangent=0.0020, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2600, heatCapacity=860, thermalConductivity=0.79), 450 MaterialDescriptionDielectric("Rogers_RO3010_recommended4EDA", permittivity=11.2, lossTangent=0.0022, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2800, heatCapacity=800, thermalConductivity=0.95), 451 MaterialDescriptionDielectric("Rogers_RO3203_recommended4EDA", permittivity=3.02, lossTangent=0.0016, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=950, thermalConductivity=0.48), 452 MaterialDescriptionDielectric("Rogers_RO3206_recommended4EDA", permittivity=6.6, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=850, thermalConductivity=0.67), 453 MaterialDescriptionDielectric("Rogers_RO3210_recommended4EDA", permittivity=10.8, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3000, heatCapacity=790, thermalConductivity=0.81), 454 MaterialDescriptionDielectric("Rogers_RO4003_recommended4EDA", permittivity=3.55, lossTangent=0.0027, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1790, thermalConductivity=0.71), 455 MaterialDescriptionDielectric("Rogers_RO4350_recommended4EDA", permittivity=3.66, lossTangent=0.0037, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=1860, thermalConductivity=0.69), 456 457 MaterialDescriptionDielectric("Rogers_RT/Duroid5870", permittivity=2.33, lossTangent=0.0012, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2200, heatCapacity=960, thermalConductivity=0.22), 458 MaterialDescriptionDielectric("Rogers_RT/Duroid5880", permittivity=2.20, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2200, heatCapacity=960, thermalConductivity=0.2), 459 MaterialDescriptionDielectric("Rogers_RT/Duroid5881", permittivity=2.17, lossTangent=0.0009, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124)), 460 MaterialDescriptionDielectric("Rogers_RT/Duroid6002", permittivity=2.93, lossTangent=0.0013, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2100, heatCapacity=930, thermalConductivity=0.6), 461 MaterialDescriptionDielectric("Rogers_RT/Duroid6006", permittivity=6.15, lossTangent=0.0012, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=2700, heatCapacity=970, thermalConductivity=0.49), 462 MaterialDescriptionDielectric("Rogers_RT/Duroid6010", permittivity=10.2, lossTangent=0.0023, evaluationFrequency=10.0*1.0e9, color=_HueSat(50,124), density=3100, heatCapacity=1000, thermalConductivity=0.86) 463 ) 464 465 defaultMaterialDescriptions.update(_dictionaryFromDescriptions( 466 *[MaterialDescriptionDielectric("Neltec_MX%04d" % (int(diel*100)), permittivity=diel, lossTangent=float(losst)*0.0001, evaluationFrequency=10.0*1.0e9, color=_HueSat(227,114)) for (diel,losst) in 467 zip( [2.94,3.0,3.26,2.43,2.45,2.48,2.5,2.55,2.6,2.7,2.8,2.94,3.0,3.18], [22,23,25,16,16,17,17,18,19,20,21,22,23,24])])) 468 469 470
471 -def availableMaterials():
472 """ 473 availableMaterials() 474 Returns a list of names of the available default materials. 475 """ 476 return sorted(list(defaultMaterialDescriptions))
477
478 -def defaultMaterials(iCb=None):
479 """ 480 defaultMaterials() 481 Returns the list of default materials. 482 """ 483 # add the loss tangent materials 484 def wrappedCall(name): 485 try: 486 if iCb!=None: 487 iCb("Loading " + name) 488 except: 489 pass 490 return name
491 matList = [defaultMaterial(wrappedCall(x)) for x in availableMaterials()] 492 return matList 493
494 -def loadDefaultMaterials(iCb=None):
495 """ 496 loadDefaultMaterials() 497 Loads the list of default materials in the current project. 498 """ 499 proj = empro.activeProject 500 ms = defaultMaterials(iCb) 501 def wrappedCall(iMat): 502 try: 503 if iCb!=None: 504 iCb("Adding " + iMat.name) 505 except: 506 pass 507 return iMat
508 [proj.materials().append(wrappedCall(m)) for m in ms] 509
510 -def defaultMaterial(name):
511 """ 512 defaultMaterial(name) 513 Load a specific material from the set of default ones. 514 @type name: string 515 @param name: the name of the material to load 516 @rtype: empro.material.Material 517 @return: the requested material 518 """ 519 return defaultMaterialDescriptions[name].makeMaterial()
520
521 -def applyMaterial(iObject, iMaterial):
522 """ 523 applyMaterial(iObject, iMaterial) 524 Recursively applies the given material to an object hiearchy. 525 @type iObject: L{Part} 526 @param iObject: a part that can be an L{Assembly} 527 @rtype: None 528 @return: None 529 """ 530 if isinstance(iMaterial, basestring): 531 iMaterial = empro.activeProject.materials()[iMaterial] 532 if not iMaterial: 533 raise KeyError("%r is not a material name" % iMaterial) 534 if isinstance(iObject,empro.geometry.Assembly): 535 for i in range(iObject.size()): 536 applyMaterial(iObject.at(i),iMaterial) 537 else: 538 iObject.material = iMaterial 539 return
540
541 -def defineAllBoundariesAsPMLs(iNumberOfLayers):
542 """ 543 defineAllBoundariesAsPMLs(iNumberOfLayers) 544 @type iNumberOfLayers: int 545 @param iNumberOfLayers: the number of PML layers 546 @rtype: none 547 @return: none 548 """ 549 boundary = empro.activeProject.boundaryConditions() 550 boundary.pmlLayers = iNumberOfLayers 551 boundary.xLowerBoundaryType = "Absorbing" 552 boundary.yLowerBoundaryType = "Absorbing" 553 boundary.zLowerBoundaryType = "Absorbing" 554 boundary.xUpperBoundaryType = "Absorbing" 555 boundary.yUpperBoundaryType = "Absorbing" 556 boundary.zUpperBoundaryType = "Absorbing" 557 boundary.absorptionType = "PML"
558 559 ########################################################### 560
561 -class CircuitMatrix:
562 - def __init__(self, path, name="data", samplingType="Linear", targetNbSamples=200):
563 """ 564 @param path Can be either the path of a sio-, cti- or touchstone file 565 or the path of a directory containing a fem simulation 566 (typically <...>/emds_dsn/design) 567 @param name name of the circuit matrix 568 """ 569 self.result = empro.analysis.CircuitResults(path, name, empro.enparams.SamplingConfig(samplingType,targetNbSamples)) 570 self.name2id_ = {} 571 for i in range(self.nbPorts()): 572 self.name2id_[self.portName(i)] = i
573 - def nbPorts(self):
574 """ 575 number of ports 576 @deprecated, use numberOfPorts 577 """ 578 return self.result.nbPorts()
579 - def numberOfPorts(self):
580 """ 581 number of ports 582 """ 583 return self.result.nbPorts()
584 - def portName(self, i):
585 """ 586 name of the i-th port (0-based indexing) 587 """ 588 return self.result.portName(i)
589 - def name2id(self, portName):
590 """ 591 returns the index for the port with name portName 592 """ 593 try: 594 return self.name2id_[portName] 595 except: 596 raise Exception("unknown port name %s" % portName)
597 - def setSamplingConfiguration(self, samplingType, targetNbSamples):
598 """ 599 sets the sampling configuration 600 @param samplingType one of ['Linear', 'Logarithmic'] 601 @param targetNbSamples target number of samples 602 """ 603 self.result.samplingConfig = empro.enparams.SamplingConfig(samplingType, targetNbSamples)
604 - def frequencies(self):
605 """ 606 returns the frequencies 607 """ 608 return self.result.frequencies()
609 - def Src(self, port1, port2, complexPart):
610 """ 611 returns the dataset for S(port1, port2) 612 @param port1 name of the port for the matrix row 613 @param port2 name of the port for the matrix column 614 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"] 615 """ 616 return self.result.Src(self.name2id(port1), self.name2id(port2), complexPart)
617 - def Zrc(self, port1, port2, complexPart):
618 """ 619 returns the dataset for the impedance Z(port1, port2) 620 @param port1 name of the port for the matrix row 621 @param port2 name of the port for the matrix column 622 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"] 623 """ 624 return self.result.Zrc(self.name2id(port1), self.name2id(port2), complexPart)
625 #def Trc(self, port1, port2): 626 # """ 627 # TODO DOC 628 # """ 629 # return self.result.Trc(self.name2id(port1), self.name2id(port2))
630 - def Rrc(self, port1, port2):
631 """ 632 returns the dataset for the resistance R(port1, port2) 633 with R(i,i) = real(1/Y(i,i)) (= all other ports shorted) 634 R(i,j) = real(Z(i,i) - 2*Z(i,j) + Z(j,j)) (= all other ports open) 635 @param port1 name of the port for the matrix row 636 @param port2 name of the port for the matrix column 637 """ 638 return self.result.Rrc(self.name2id(port1), self.name2id(port2))
639 - def Lrc(self, port1, port2):
640 """ 641 returns the dataset for the inductance L(port1, port2) 642 with L(i,i) = imag(1/Y(i,i))/omega (= all other ports shorted) 643 L(i,j) = imag(Z(i,i) - 2*Z(i,j) + Z(j,j))/omega (= all other ports open) 644 @param port1 name of the port for the matrix row 645 @param port2 name of the port for the matrix column 646 """ 647 return self.result.Lrc(self.name2id(port1), self.name2id(port2))
648 - def Crc(self, port1, port2):
649 """ 650 returns the dataset for the capacitance C(port1, port2) 651 with C(i,i) = imag(1/Z(i,i))/omega (= all other ports open) 652 C(i,j) = imag(1/Z(i,j))/omega (= all other ports open) 653 @param port1 name of the port for the matrix row 654 @param port2 name of the port for the matrix column 655 """ 656 return self.result.Crc(self.name2id(port1), self.name2id(port2))
657 - def Zref(self, port, complexPart):
658 """ 659 returns the dataset for the reference impedance Zref(port) 660 @param port name of the port 661 @param complexPart must be in ["ComplexMagnitude", "Phase", "RealPart" or "ImaginaryPart"] 662 """ 663 return self.result.Zref(self.name2id(port), complexPart)
664
665 - def Smatrix(self, freq):
666 """ 667 returns the S-matrix for at freq [Hz] 668 @param freq evaluation frequency [Hz] 669 """ 670 return self.result.Smatrix(freq)
671
672 - def write(self, targetFileName, exportFormat, precision=16):
673 """ 674 Writes the circuit result to file 675 @param targetFileName file to be written 676 @param exportFormat one of 'sio_ascii', 'sio_binary', 'cti', 'ads_dataset' or 'touchstone' 677 @param precision number of digits per double (6=single precision, 16=full precision) 678 """ 679 self.result.write(targetFileName, exportFormat, precision)
680
681 - def writeReordered(self, targetFileName, exportFormat, portOrder, precision=16):
682 """ 683 Writes the circuit result to file 684 @param targetFileName file to be written 685 @param exportFormat one of 'sio_ascii', 'sio_binary', 'cti', 'ads_dataset' or 'touchstone' 686 @param portOrder port names, in the requested order 687 @param precision number of digits per double (6=single precision, 16=full precision) 688 """ 689 self.result.writeReordered(targetFileName, exportFormat, portOrder, precision)
690
691 -def _getCircuitMatrix(proj=None, sim=None):
692 if proj == None: 693 projDir = empro.activeProject.rootDir 694 else: 695 projDir = proj 696 import os 697 if "Simulations" in os.listdir(projDir): 698 projDir = os.path.join(projDir, "Simulations") 699 if sim == None: 700 raise Exception("invalid simulation id") 701 #simId = "%06d" % sim 702 simDir = os.path.join(projDir, sim) 703 femDir = os.path.join(simDir, "emds_dsn", "design") 704 if os.path.exists(femDir): 705 return CircuitMatrix(femDir, sim) 706 fdtdCtiFile = os.path.join(simDir, "data.000.cti") 707 if os.path.exists(fdtdCtiFile): 708 return CircuitMatrix(fdtdCtiFile, sim) 709 raise Exception("no simulation results available for proj=<%s> and sim=%s" % (proj, sim)) 710 return None
711