示例#1
0
	def load(self):
		self.contacts=self.epi.contacts
		self.tab.clear()
		self.tab.setHorizontalHeaderLabels([_("Name"),_("Top/Bottom"),_("Applied\nvoltage"),_("Start")+" (m)", _("Width")+" (m)" , _("Contact resistance\n")+" (Ohms m^2)",_("Shunt resistance")+"\n(Ohms m^2)",_("Charge density/\nFermi-offset"),_("Majority\ncarrier"),_("ve0 (m/s)"),_("vh0 (m/s)"),_("Physical\nmodel"),_("ID")])
		self.tab.setColumnHidden(5,True)
		self.tab.setColumnHidden(6,True)

		self.tab.horizontalHeader().setFixedHeight(60)
		self.contacts.load()

		if get_mesh().get_zpoints()!=1 or get_mesh().get_xpoints()!=1: 
			self.hide_cols(False)
		else:
			self.hide_cols(True)

		#contacts_print()
		i=0
		for c in self.contacts.contacts:
			self.add_row()
			if c.position=="top" or c.position=="bottom":
				start=str(c.x0)
				width=str(c.dx)
			else:
				start=str(c.y0)
				width=str(c.dy)

			self.set_row(i,str(c.name),c.position,c.applied_voltage_type,c.applied_voltage,start,width,str(c.contact_resistance_sq),c.shunt_resistance_sq,str(c.np),str(c.charge_type),str(c.ve0),str(c.vh0),str(c.physical_model),c.id )

			i=i+1

		self.show_hide_cols()
示例#2
0
    def __init__(self):
        QWidgetSavePos.__init__(self, "dim_editor")

        self.setWindowTitle(
            _("xz dimension editor") + " https://www.gpvdm.com")
        self.setWindowIcon(icon_get("dimensions"))
        self.resize(400, 200)

        self.cost_window = False

        self.main_vbox = QVBoxLayout()

        self.toolbar = QToolBar()
        self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self.toolbar.setIconSize(QSize(42, 42))

        spacer = QWidget()

        spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.toolbar.addWidget(spacer)

        self.help = QAction(icon_get("internet-web-browser"), _("Help"), self)
        self.toolbar.addAction(self.help)

        self.main_vbox.addWidget(self.toolbar)

        self.widget0 = QWidget()
        self.widget0_hbox = QHBoxLayout()
        self.widget0.setLayout(self.widget0_hbox)

        self.widget0_label = QLabel("x size")
        self.widget0_hbox.addWidget(self.widget0_label)

        self.widget0_edit = QLineEdit()
        self.widget0_edit.setText(str(get_mesh().get_xlen()))
        self.widget0_edit.textChanged.connect(self.apply)
        self.widget0_hbox.addWidget(self.widget0_edit)
        self.widget0_label = QLabel("m")
        self.widget0_hbox.addWidget(self.widget0_label)

        self.main_vbox.addWidget(self.widget0)

        self.widget1 = QWidget()
        self.widget1_hbox = QHBoxLayout()
        self.widget1.setLayout(self.widget1_hbox)
        self.widget1_label = QLabel("z size")
        self.widget1_hbox.addWidget(self.widget1_label)
        self.widget1_edit = QLineEdit()
        self.widget1_edit.setText(str(get_mesh().get_zlen()))
        self.widget1_edit.textChanged.connect(self.apply)
        self.widget1_hbox.addWidget(self.widget1_edit)
        self.widget1_label = QLabel("m")
        self.widget1_hbox.addWidget(self.widget1_label)
        self.main_vbox.addWidget(self.widget1)

        #self.tab.itemSelectionChanged.connect(self.callback_tab_selection_changed)

        self.setLayout(self.main_vbox)
    def draw_light_profile(self):

        self.gl_objects_remove_regex("light_profile")
        name = inp_get_token_value(os.path.join(get_sim_path(), "light.inp"),
                                   "#light_profile")
        if name != "box":
            epi = get_epi()

            s = shape()
            s.type = name
            s.load_triangles()
            s.triangles.data = triangles_remove_below(s.triangles.data, 0.1)

            a = gl_base_object()
            a.id = ["light_profile"]
            a.type = "open_triangles"

            a.x = gl_scale.project_m2screen_x(0)
            a.y = gl_scale.project_m2screen_y(0)
            a.z = gl_scale.project_m2screen_z(0)

            a.dx = 1.0
            a.dy = scale_get_ymul() * 1.0
            a.dz = 1.0

            a.r = 0.0
            a.g = 1.0
            a.b = 0.0
            a.alpha = 1.0

            my_vec = vec()
            my_vec.x = get_mesh().get_xlen()
            my_vec.y = epi.ylen() * 1.0
            my_vec.z = get_mesh().get_zlen()

            t = triangles_mul_vec(s.triangles.data, my_vec)

            my_vec = vec()
            my_vec.x = 0.0
            my_vec.y = -epi.ylen() * 3.0
            my_vec.z = 0.0

            t = triangles_add_vec(t, my_vec)

            a.triangles = scale_trianges_m2screen(t)
            #triangles_mul_vec(triangles_flip_in_box(s.triangles.data),my_vec)
            #print("bing!",gl_scale.project_m2screen_x(0))
            self.gl_objects_add(a)
示例#4
0
	def device_mask(self,x,y,z):
		#print(y)
		mesh=get_mesh()
		#1D case
		if mesh.x.points==1 and mesh.z.points==1:
			return True

		#check for contact
		layer=self.get_layer_by_cordinate(y)
		#print(y,layer)
		l=self.layers[layer]

		if l.layer_type=="contact" and layer==0:
			for c in self.contacts.contacts:
				if c.position=="top":
					if x>=c.x0 and x<=c.x0+c.dx:
						return True
			return False

		if l.layer_type=="contact" and layer==len(self.layers)-1:
			for c in self.contacts.contacts:
				if c.position=="bottom":
					if x>=c.x0 and x<=c.x0+c.dx:
						return True
			return False

		return True
示例#5
0
    def project(self, col0, col1):
        mesh = get_mesh().y
        x, y = mesh.calculate_points()
        lay = mesh.mesh_cal_epi_layers(self.epi)
        device_start = self.epi.get_device_start()
        line = 0
        layer = self.epi.get_next_dos_layer(-1)

        for i in range(0, len(x)):
            if x[i] + device_start > self.epi.layers[layer].end:
                layer = layer + 1
                line = line + 1

            try:
                Nad0 = float(self.tab.item(line, col0).text())
                Nad1 = float(self.tab.item(line, col1).text())
            except:
                Nad0 = 0.0
                Nad1 = 0.0

            dy = self.epi.layers[layer].dy
            y[i] = Nad0 + (Nad1 - Nad0) * (
                x[i] - self.epi.layers[layer].start + device_start) / dy

        return x, y
示例#6
0
    def menu_energy_slice_dump(self):
        obj = self.gl_objects_get_first_selected()
        if obj != None:
            s = obj.id_starts_with("mesh").split(":")

            x = int(s[1])
            y = int(s[2])
            z = int(s[3])

            if self.dump_energy_slice_xpos == x and self.dump_energy_slice_ypos == y and self.dump_energy_slice_zpos == z:
                self.dump_energy_slice_xpos = -1
                self.dump_energy_slice_ypos = -1
                self.dump_energy_slice_zpos = -1
            else:
                self.dump_energy_slice_xpos = x
                self.dump_energy_slice_ypos = y
                self.dump_energy_slice_zpos = z

            mesh = get_mesh()
            f = inp()
            f.load("dump.inp")
            f.replace("#dump_energy_slice_xpos", str(x))
            f.replace("#dump_energy_slice_ypos",
                      str(len(mesh.y.points) - 1 - y))
            f.replace("#dump_energy_slice_zpos", str(z))
            f.save()

            self.gl_objects_remove_regex("mesh")
            self.draw_mesh()

            self.do_draw()
示例#7
0
	def layer_add(self):
		obj=self.gl_objects_get_first_selected()
		if obj!=None:
			epi=get_epi()
			s=epi.find_shape_by_id(obj.id[0])
			if type(s)==epi_layer or type(s)==shape:
				layer_index=epi.find_layer_by_id(obj.id[0])
				new_filename=epi.new_electrical_file("shape")+".inp"
				orig_filename=os.path.join(get_default_material_path(),"shape.inp")
				inp_copy_file(os.path.join(get_sim_path(),new_filename),os.path.join(get_sim_path(),orig_filename))

				mesh=get_mesh()
				my_shape=shape()
				my_shape.load(new_filename)
				my_shape.dy=epi.layers[layer_index].dy
				my_shape.dx=mesh.get_xlen()
				my_shape.dz=mesh.get_zlen()
				my_shape.shape_electrical=epi.gen_new_electrical_file("electrical")
				my_shape.shape_nx=1
				my_shape.shape_ny=1
				my_shape.shape_nz=1
				my_shape.name="New shape"
				my_shape.save()

				epi.layers[layer_index].shapes.append(my_shape)
				epi.save()
				self.force_redraw()
示例#8
0
    def change_dir_and_refresh_interface(self, new_dir):
        used_files_add(os.path.join(new_dir, "sim.gpvdm"))
        self.scan_human_labels.clear()
        inp_callbacks_clear()
        get_watch().reset()
        self.splash.inc_value()

        self.scan_human_labels.populate_from_known_tokens()
        self.splash.inc_value()

        self.splash.inc_value()

        set_sim_path(new_dir)
        self.splash.inc_value()

        calculate_paths()
        self.splash.inc_value()

        epi = get_epi()
        epi.load(get_sim_path())
        self.splash.inc_value()

        self.splash.inc_value()

        if get_mesh().load(epi) == False:
            error_dlg(
                self,
                _("There was a problem loading the electrical mesh, I suspect you are trying to open a file generated in a very old version of gpvdm."
                  ))
            return

        self.statusBar().showMessage(get_sim_path())
        self.splash.inc_value()

        self.notebook.load()

        self.update_interface()
        self.enable_disable_buttons()

        self.splash.inc_value()

        if self.notebook.terminal != None:
            self.my_server.set_terminal(self.notebook.terminal)

        if self.notebook.update_display_function != None:
            self.my_server.set_display_function(
                self.notebook.update_display_function)

        self.scan_human_labels.add_item("sim.inp", "#simmode", "sim mode")
        self.scan_human_labels.add_item("light.inp", "#Psun",
                                        "light intensity")
        #scan_populate_from_file("light.inp")

        self.ribbon.update()
        self.splash.inc_value()

        if self.notebook.is_loaded() == True:
            self.l.run()
            self.notebook.tab_main.three_d.update()
        get_watch().rebase()
示例#9
0
def set_m2screen():
    global x_mul
    global y_mul
    global z_mul
    global device_x
    global device_y
    global device_z
    global x_start
    global y_start
    global z_start

    mesh_max = 30

    epi = get_epi()
    x_len = get_mesh().get_xlen()
    z_len = get_mesh().get_zlen()

    z_mul = scale(z_len)
    x_mul = scale(x_len)

    #print(x_mul,z_mul)
    mul = x_mul
    if z_len < x_len:
        mul = z_mul

    x_mul = mul
    z_mul = mul

    #print("m",mul)
    #z_mul=mul
    #x_mul=mul

    #print(x_len*x_mul,z_len*z_mul)
    if z_len * z_mul > mesh_max:
        z_mul = mesh_max / z_len

    if x_len * x_mul > mesh_max:
        x_mul = mesh_max / x_len

    y_mul = device_y / epi.ylen()

    device_x = get_mesh().get_xlen() * x_mul
    device_z = get_mesh().get_zlen() * z_mul

    x_start = -device_x / 2.0
    z_start = -device_z / 2.0
    y_start = device_y
示例#10
0
	def save(self):
		lines=self.gen_output()
		inp_save(os.path.join(get_sim_path(),"epitaxy.inp"),lines,id="epitaxy")
		for l in epi.layers:
			l.save()

		ymesh=get_mesh().y
		ymesh.do_remesh(self.ylen_active())
示例#11
0
	def get_device_start(self):
		if get_mesh().y.circuit_model==True:
			return 0.0

		pos=0.0
		for i in range(0, len(self.layers)):
			if self.layers[i].dos_file.startswith("dos")==True:
				return pos

			pos=pos+self.layers[i].dy

		return None
示例#12
0
    def update_dim(self):
        if get_mesh().get_xpoints() == 1 and get_mesh().get_zpoints() == 1:
            self.one_d.setEnabled(False)
            self.two_d.setEnabled(True)
            self.three_d.setEnabled(True)
            self.emesh_editor_y.setEnabled(True)
            self.emesh_editor_x.setEnabled(False)
            self.emesh_editor_z.setEnabled(False)
            self.emesh_editor_y.show()
            self.emesh_editor_x.hide()
            self.emesh_editor_z.hide()

        if get_mesh().get_xpoints() > 1 and get_mesh().get_zpoints() == 1:
            self.one_d.setEnabled(True)
            self.two_d.setEnabled(False)
            self.three_d.setEnabled(True)
            self.emesh_editor_y.setEnabled(True)
            self.emesh_editor_x.setEnabled(True)
            self.emesh_editor_z.setEnabled(False)
            self.emesh_editor_y.show()
            self.emesh_editor_x.show()
            self.emesh_editor_z.hide()

        if get_mesh().get_xpoints() > 1 and get_mesh().get_zpoints() > 1:
            self.one_d.setEnabled(True)
            self.two_d.setEnabled(True)
            self.three_d.setEnabled(False)
            self.emesh_editor_y.setEnabled(True)
            self.emesh_editor_x.setEnabled(True)
            self.emesh_editor_z.setEnabled(True)
            self.emesh_editor_y.show()
            self.emesh_editor_x.show()
            self.emesh_editor_z.show()

        self.emit_now()
示例#13
0
def epitaxy_mesh_update():
    mesh = get_mesh().y
    if len(mesh.layers) == 1:
        tot = 0.0
        for i in range(0, epitaxy_get_layers()):
            width = float(epitaxy_get_dy(i))
            dos_layer = epitaxy_get_dos_file(i)
            print(dos_layer, width)
            if dos_layer.startswith("dos") == True:
                tot = tot + width

        mesh.layers[0].thick = tot
        mesh.save()
示例#14
0
    def shape_layer(self, epi_layer, y_padding=0.0, name="name"):
        self.gl_objects_remove_regex(name)

        a = gl_base_object()

        pos = vec()
        pos.x = epi_layer.x0
        pos.y = epi_layer.y0
        pos.z = epi_layer.z0
        epi_layer.dx = get_mesh().get_xlen()
        epi_layer.dz = get_mesh().get_zlen()

        a.origonal_object = True
        self.shape_to_screen(a, pos, epi_layer)

        for s in epi_layer.shapes:
            n = 0
            for pos in s.expand_xyz0(epi_layer):

                a = gl_base_object()
                if n == 0:
                    a.origonal_object = True
                n = n + 1
                self.shape_to_screen(a, pos, s)
示例#15
0
    def curciut_mesh_add_links(self, z):
        epi = get_epi()
        mesh = get_mesh()
        for zi in range(0, len(z)):

            for x_sub_mesh_index in range(0, len(mesh.x.layers)):

                xl = mesh.x.layers[x_sub_mesh_index]
                if xl.points == 0:  #if there is a gap in the mesh
                    if x_sub_mesh_index != 0 and x_sub_mesh_index != len(
                            mesh.x.layers
                    ) - 1:  #get left and right points to the gap
                        xl_l = mesh.x.layers[x_sub_mesh_index - 1]
                        xl_r = mesh.x.layers[x_sub_mesh_index + 1]

                        x0 = xl_l.mesh[-1]
                        x1 = xl_r.mesh[
                            0]  #look for a shape which fills the gap

                        shapes = epi.get_shapes_between_x(x0, x1)
                        for s in shapes:
                            if s.shape_electrical != "none":
                                f = inp()
                                f.load(s.shape_electrical + ".inp")
                                component = f.get_token(
                                    "#electrical_component")
                                nl = epi.find_layer_by_id(s.id)
                                y0 = epi.layers[nl].start
                                if component == "link":
                                    a = gl_base_object()
                                    a.id = ["electrical_mesh"]
                                    a.type = "line"
                                    a.xyz.x = gl_scale.project_m2screen_x(x0)
                                    a.xyz.y = gl_scale.project_m2screen_y(y0 +
                                                                          s.dy)
                                    a.xyz.z = z[zi]
                                    a.dxyz.x = (x1 - x0) * scale_get_xmul()
                                    a.dxyz.y = s.dy * scale_get_ymul() * 0.9
                                    a.dxyz.z = 0.0
                                    a.r = 1.0
                                    a.g = 0.0
                                    a.b = 0.0
                                    a.alpha = 1.0
                                    self.gl_objects_add(a)
示例#16
0
	def draw_mesh(self):
		x=[]
		y=[]
		z=[]
		epi=get_epi()
		device_start=epi.get_device_start()
		mesh=get_mesh()

		y,temp=mesh.y.calculate_points()
		x,temp=mesh.x.calculate_points()
		z,temp=mesh.z.calculate_points()

		x=gl_scale.project_m2screen_x(x)
		y=gl_scale.project_m2screen_y(y)
		z=gl_scale.project_m2screen_z(z)

		glLineWidth(3)
		if mesh.y.circuit_model==False:
			self.drift_diffusion_mesh()
示例#17
0
    def project_object_through_electrical_mesh(self, o):
        mesh = get_mesh()
        mesh_with_gaps = False
        for l in mesh.x.layers:
            if l.points == 0:
                mesh_with_gaps = True
                break

        if mesh_with_gaps == False:
            self.gl_objects_add(o)
        else:
            for l in mesh.x.layers:
                if l.points != 0:
                    new_obj = gl_base_object()
                    new_obj.copy(o)
                    #print(layer,l.start,l.end-l.start)
                    new_obj.xyz.x = gl_scale.project_m2screen_x(l.start)
                    new_obj.dxyz.x = (l.end - l.start) * scale_get_xmul()
                    #print(layer,o.xyz.x,o.dxyz.x)
                    self.gl_objects_add(new_obj)
示例#18
0
        def load_data(self):
            lines = []

            val = inp_get_token_value(
                os.path.join(get_sim_path(), "light.inp"), "#Psun")
            self.dump_energy_slice_xpos = int(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_energy_slice_xpos"))
            self.dump_energy_slice_ypos = int(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_energy_slice_ypos"))
            self.dump_energy_slice_zpos = int(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_energy_slice_zpos"))
            self.light_illuminate_from = inp_get_token_value(
                os.path.join(get_sim_path(), "light.inp"),
                "#light_illuminate_from")
            self.dump_1d_slice_xpos = int(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_1d_slice_xpos"))
            self.dump_1d_slice_zpos = int(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_1d_slice_zpos"))

            self.dump_verbose_electrical_solver_results = str2bool(
                inp_get_token_value(os.path.join(get_sim_path(), "dump.inp"),
                                    "#dump_verbose_electrical_solver_results"))
            try:
                self.suns = float(val)
            except:
                self.suns = 0.0

            #self.y_mesh=get_mesh().y
            #self.x_mesh=get_mesh().x
            #self.z_mesh=get_mesh().z

            self.x_len = get_mesh().get_xlen()
            if os.path.isdir(
                    os.path.join(os.path.join(get_sim_path(),
                                              "ray_trace"))) == True:
                self.view.render_photons = False
示例#19
0
	def new_shape_file(self,layer):
		new_filename=self.gen_new_electrical_file("shape")

		mesh=get_mesh()
		my_shape=shape()
		my_shape.load(os.path.join(get_sim_path(),new_filename)+".inp")

		if layer!=None:
			my_shape.dy=layer.dy

		my_shape.dx=mesh.get_xlen()
		my_shape.dz=mesh.get_zlen()
		my_shape.shape_electrical=self.gen_new_electrical_file("electrical")
		my_shape.shape_nx=1
		my_shape.shape_ny=1
		my_shape.shape_nz=1
		my_shape.name="New shape"
		my_shape.optical_material="blends/p3htpcbm"
		my_shape.save()

		return my_shape
示例#20
0
    def load(self):
        self.clear()
        self.last_page = 0

        #self.setTabsClosable(True)
        self.setMovable(True)
        if (os.path.isfile(os.path.join(get_sim_path(), "sim.gpvdm")) == True):

            self.tab_main = tab_main()
            self.addTab(self.tab_main, _("Device structure"))

            mesh = get_mesh()
            if mesh.y.circuit_model == True:  # or mesh.x.tot_points!=1 or mesh.z.tot_points!=1:
                self.display_mesh = display_mesh()

                if mesh.y.circuit_model == True:
                    self.addTab(self.display_mesh, _("Circuit diagram"))
                else:
                    self.addTab(self.display_mesh, _("Electrical mesh"))

            self.update_display_function = self.tab_main.update
            #self.tab_main.three_d.display.force_redraw()

            self.terminal = tab_terminal()
            self.terminal.init()
            self.addTab(self.terminal, _("Terminal"))
            self.terminal.run(
                os.getcwd(),
                get_exe_command() + " --version2 " + get_exe_args())
            global_object_register("terminal", self.terminal)

            widget = tab_view()
            self.addTab(widget, _("Output"))
            self.add_docs_page()
            self.state_loaded = True

        else:
            self.add_info_page()
            self.goto_page(_("Information"))
            self.state_loaded = False
示例#21
0
    def apply(self):
        try:
            val = float(self.widget0_edit.text())
            if val <= 0:
                return
        except:
            return
        get_mesh().set_xlen(val)

        try:
            val = float(self.widget1_edit.text())
            if val <= 0:
                return

        except:
            return

        get_mesh().set_zlen(val)

        get_mesh().x.save()
        get_mesh().z.save()

        global_object_run("mesh_update")
        global_object_run("gl_force_redraw")
示例#22
0
    def draw_mesh(self):
        x = []
        y = []
        z = []
        epi = get_epi()
        device_start = epi.get_device_start()
        mesh = get_mesh()

        y, temp = mesh.y.calculate_points()
        x, temp = mesh.x.calculate_points()
        z, temp = mesh.z.calculate_points()

        old_layer = -1
        components = []
        component = ""

        for i in range(0, len(y)):
            y[i] = y[i] + device_start
            layer = epi.get_layer_by_cordinate(y[i])
            if old_layer != layer:
                old_layer = layer
                f = inp()
                f.load(epi.layers[layer].electrical_file + ".inp")
                component = f.get_token("#electrical_component")
                if component == "resistance":
                    component = "resistor"
            components.append(component)

        x = gl_scale.project_m2screen_x(x)
        y = gl_scale.project_m2screen_y(y)
        z = gl_scale.project_m2screen_z(z)

        glLineWidth(3)
        if mesh.y.circuit_model == False:
            self.drift_diffusion_mesh()
        else:
            self.circuit_mesh()
 def __init__(self):
     self.list = []
     self.my_token_lib = tokens().get_lib()
     self.epi = get_epi()
     self.mesh = get_mesh()
示例#24
0
    def draw_contacts(self):
        #print("draw contacts")
        epi = get_epi()
        box = vec()
        pos = vec()
        y_mesh = get_mesh().y
        x_mesh = get_mesh().x
        z_mesh = get_mesh().z

        self.gl_objects_remove_regex("contact")
        top_contact_layer = epi.get_top_contact_layer()
        btm_contact_layer = epi.get_btm_contact_layer()

        for c in epi.contacts.contacts:
            if c.shape_enabled == True:
                a = gl_base_object()
                a.id = [c.id]

                if c.position == "left":
                    if len(x_mesh.points) > 1:
                        sticking_out_bit = 0.2
                        a.type = "solid_and_mesh"
                        a.xyz.x = gl_scale.project_m2screen_x(
                            0) - sticking_out_bit
                        a.xyz.y = gl_scale.project_m2screen_y(c.y0)
                        a.xyz.z = gl_scale.project_m2screen_z(0)
                        a.dxyz.x = 1.0
                        a.dxyz.y = scale_get_ymul() * c.dy
                        a.dxyz.z = scale_get_device_z()

                        a.r = c.r
                        a.g = c.g
                        a.b = c.b
                        a.alpha = 1.0
                        my_vec = vec()
                        my_vec.x = sticking_out_bit / scale_get_xmul(
                        )  #+c.ingress
                        my_vec.y = c.dy
                        my_vec.z = get_mesh().get_zlen()

                        if c.triangles != None:
                            a.triangles = triangles_flip_in_box(
                                c.triangles.data)
                            a.triangles = triangles_mul_vec(a.triangles, box)
                            a.triangles = triangles_add_vec(a.triangles, pos)
                            a.triangles = scale_trianges_m2screen(a.triangles)
                            self.gl_objects_add(a)

                elif c.position == "top":
                    if top_contact_layer != -1:
                        #if epi.layers[0].name!="air":
                        box = vec()
                        if len(x_mesh.points) == 1 and len(z_mesh.points) == 1:
                            xstart = 0
                            box.x = get_mesh().get_xlen()
                        else:
                            xstart = c.x0
                            box.x = c.dx

                        box.y = epi.layers[0].dy  #+c.ingress
                        box.z = get_mesh().get_zlen()

                        if self.draw_device_cut_through == False:
                            a.type = "solid_and_mesh"
                        else:
                            a.type = "solid_and_mesh_cut_through"

                        a.xyz.x = gl_scale.project_m2screen_x(xstart)
                        if c.shape_flip_y == False:
                            a.xyz.y = gl_scale.project_m2screen_y(
                                epi.get_layer_start(0))
                        else:
                            a.xyz.y = gl_scale.project_m2screen_y(
                                epi.get_layer_end(0))
                        a.xyz.z = gl_scale.project_m2screen_z(0.0)

                        a.dxyz.x = box.x * scale_get_xmul()
                        a.dxyz.y = box.y * scale_get_ymul()
                        a.dxyz.z = scale_get_device_z()
                        if c.shape_flip_y == False:
                            a.dxyz.y = a.dxyz.y * -1.0

                        a.r = c.r
                        a.g = c.g
                        a.b = c.b
                        a.alpha = 1.0

                        if c.triangles != None:
                            a.triangles = triangles_mul_vec(
                                c.triangles.data, box)
                            if c.shape_flip_y == True:
                                a.triangles = triangles_flip(a.triangles)

                            a.triangles = scale_trianges_m2screen(a.triangles)
                            self.gl_objects_add(a)

                elif c.position == "bottom":
                    if btm_contact_layer != -1:
                        if len(x_mesh.points) == 1 and len(z_mesh.points) == 1:

                            xstart = 0
                            box.x = get_mesh().get_xlen()
                        else:
                            xstart = c.x0
                            box.x = c.dx

                        box.y = epi.layers[len(epi.layers) - 1].dy  #+c.ingress
                        box.z = get_mesh().get_zlen()

                        a.type = "solid_and_mesh"

                        pos.x = xstart
                        pos.y = epi.get_layer_start(len(epi.layers) - 1)
                        pos.z = 0

                        a.xyz.x = gl_scale.project_m2screen_x(pos.x)
                        a.xyz.y = gl_scale.project_m2screen_y(pos.y)
                        a.xyz.z = gl_scale.project_m2screen_z(pos.z)

                        a.dxyz.x = box.x * scale_get_xmul()
                        a.dxyz.y = -box.y * scale_get_ymul()
                        a.dxyz.z = scale_get_device_z()

                        a.r = epi.layers[len(epi.layers) - 1].r
                        a.g = epi.layers[len(epi.layers) - 1].g
                        a.b = epi.layers[len(epi.layers) - 1].b

                        a.alpha = 1.0
                        my_vec = vec()
                        my_vec.x = c.dx
                        my_vec.y = epi.layers[len(epi.layers) - 1].dy
                        my_vec.z = get_mesh().get_zlen()

                        a.r = c.r
                        a.g = c.g
                        a.b = c.b
                        a.alpha = 1.0

                        a.triangles = triangles_flip_in_box(c.triangles.data)
                        a.triangles = triangles_mul_vec(a.triangles, box)
                        #a.triangles=triangles_add_vec(a.triangles,pos)
                        a.triangles = scale_trianges_m2screen(a.triangles)

                        self.gl_objects_add(a)
示例#25
0
文件: gl_list.py 项目: Ly0n/gpvdm
    def gl_objects_move(self, dx, dy):
        i = 0
        epi = get_epi()

        min, max = self.gl_objects_selected_min_max_vec()

        x_min_new_screen = min.x + dx
        x_min_new_m = gl_scale.project_screen_x_to_m(x_min_new_screen)

        x_max_new_screen = max.x + dx
        x_max_new_m = gl_scale.project_screen_x_to_m(x_max_new_screen)

        y_min_new_screen = min.y + dy
        y_max_new_m = gl_scale.project_screen_y_to_m(y_min_new_screen)

        y_max_new_screen = max.y + dy
        y_min_new_m = gl_scale.project_screen_y_to_m(y_max_new_screen)

        move_x = True
        move_y = True

        for obj in self.objects:
            if obj.selected == True:
                s = None

                if len(obj.id) > 0:
                    s = epi.find_shape_by_id(obj.id[0])

                    if type(s) == shape:

                        nl = epi.find_layer_by_id(obj.id[0])

                        y_start = epi.get_layer_start(nl)
                        y_stop = epi.get_layer_end(nl)

                        x_stop = get_mesh().get_xlen()

                        if x_min_new_m < 0:
                            move_x = False

                        if y_min_new_m < y_start:
                            move_y = False

                        if y_max_new_m >= y_stop:
                            move_y = False

                        if x_max_new_m >= x_stop:
                            move_x = False
                else:
                    move_x = False
                    move_y = False

        if move_y == True:
            for obj in self.objects:
                if obj.selected == True:
                    s = epi.find_shape_by_id(obj.id[0])
                    if type(s) == shape:
                        obj.xyz.y = obj.xyz.y + dy
                        s.y0 = gl_scale.project_screen_y_to_m(obj.xyz.y)

        if move_x == True:
            for obj in self.objects:
                if obj.selected == True:
                    s = epi.find_shape_by_id(obj.id[0])
                    if type(s) == shape:
                        obj.xyz.x = obj.xyz.x + dx

                        if obj.origonal_object == True:
                            s.x0 = gl_scale.project_screen_x_to_m(obj.xyz.x)
示例#26
0
    def drift_diffusion_mesh(self):
        x = []
        y = []
        z = []
        epi = get_epi()
        device_start = epi.get_device_start()
        mesh = get_mesh()

        y, temp = mesh.y.calculate_points()
        x, temp = mesh.x.calculate_points()
        z, temp = mesh.z.calculate_points()

        for i in range(0, len(y)):
            y[i] = y[i] + device_start

        x = gl_scale.project_m2screen_x(x)
        y = gl_scale.project_m2screen_y(y)
        z = gl_scale.project_m2screen_z(z)

        glLineWidth(3)

        for zi in range(0, len(z)):
            for xi in range(0, len(x)):
                for yi in range(0, len(y)):
                    name = "mesh:" + str(xi) + ":" + str(yi) + ":" + str(zi)
                    if yi == self.dump_energy_slice_ypos and xi == self.dump_energy_slice_xpos and zi == self.dump_energy_slice_zpos:
                        a = gl_base_object()
                        a.id = [name]
                        a.type = "ball"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = 0.08
                        a.r = 0.0
                        a.g = 1.0
                        a.b = 0.0
                        self.gl_objects_add(a)
                    elif xi == self.dump_1d_slice_xpos and zi == self.dump_1d_slice_zpos:
                        a = gl_base_object()
                        a.id = [name]
                        a.type = "ball"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = 0.05
                        a.r = 0.0
                        a.g = 0.0
                        a.b = 1.0
                        self.gl_objects_add(a)
                    else:
                        a = gl_base_object()
                        a.id = [name]
                        a.type = "ball"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = 0.05
                        if self.dump_verbose_electrical_solver_results == False:
                            a.alpha = 0.5
                        else:
                            a.alpha = 0.9
                        a.r = 1.0
                        a.g = 0.0
                        a.b = 0.0
                        self.gl_objects_add(a)

                    if yi != len(y) - 1:
                        a = gl_base_object()
                        a.id = ["electrical_mesh"]
                        a.type = "line"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = 0.0
                        a.dy = y[yi + 1] - y[yi]
                        a.dz = 0.0
                        a.r = 1.0
                        a.g = 0.0
                        a.b = 0.0
                        self.gl_objects_add(a)

                    if xi != len(x) - 1:
                        a = gl_base_object()
                        a.id = ["electrical_mesh"]
                        a.type = "line"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = x[xi + 1] - x[xi]
                        a.dy = 0.0
                        a.dz = 0.0
                        a.r = 1.0
                        a.g = 0.0
                        a.b = 0.0
                        self.gl_objects_add(a)

                    if zi != len(z) - 1:
                        a = gl_base_object()
                        a.id = ["electrical_mesh"]
                        a.type = "line"
                        a.x = x[xi]
                        a.y = y[yi]
                        a.z = z[zi]
                        a.dx = 0.0
                        a.dy = 0.0
                        a.dz = z[zi + 1] - z[zi]
                        a.r = 1.0
                        a.g = 0.0
                        a.b = 0.0
                        self.gl_objects_add(a)
示例#27
0
    def circuit_mesh(self):
        x = []
        y = []
        z = []
        epi = get_epi()
        mesh = get_mesh()

        y, temp = mesh.y.calculate_points()
        x, temp = mesh.x.calculate_points()
        z, temp = mesh.z.calculate_points()

        old_layer = -1
        components = []
        component = ""

        for l in epi.layers:
            f = inp()
            f.load(l.electrical_file + ".inp")
            component = f.get_token("#electrical_component")
            if component == "resistance":
                component = "resistor"
            if component == "resistor":
                components.append("resistor")
                components.append("resistor")

            if component == "diode":
                components.append("resistor")
                components.append("diode")

        x = gl_scale.project_m2screen_x(x)
        y = gl_scale.project_m2screen_y(y)
        z = gl_scale.project_m2screen_z(z)

        glLineWidth(3)

        mask = mesh.build_device_shadow()

        for zi in range(0, len(z)):
            xi = 0
            for x_sub_mesh_index in range(0, len(mesh.x.layers)):
                #print(len(xl.mesh))
                xl = mesh.x.layers[x_sub_mesh_index]

                for x_point in range(0, len(xl.mesh)):
                    mid_point = 0

                    for yi in range(0, len(y)):
                        name = "mesh:" + str(xi) + ":" + str(yi) + ":" + str(
                            zi)

                        block_y = False
                        block_x = False
                        block_z = False

                        #layer=epi.get_layer_by_cordinate(y[yi])
                        #l=epi.layers[layer]

                        if x_point == len(
                                xl.mesh
                        ) - 1:  #if we are at the end of the submesh
                            if x_sub_mesh_index != len(mesh.x.layers) - 1:
                                if mesh.x.layers[x_sub_mesh_index +
                                                 1].points == 0:
                                    block_x = True

                        if mask[zi][xi][yi] == False:
                            block_y = True

                        if xi != len(x) - 1:
                            if mask[zi][xi + 1][yi] == False:
                                block_x = True

                        if yi != len(y) - 1:
                            if mask[zi][xi][yi + 1] == False:
                                block_y = True

                        if mask[zi][xi][yi] == False:
                            block_x = True
                            block_z = True

                        if mid_point == 0:
                            block_x = True

                        if yi != len(y) - 1 and block_y == False:
                            a = gl_base_object()
                            a.id = ["electrical_mesh"]
                            a.type = components[yi]
                            a.xyz.x = x[xi]
                            a.xyz.y = y[yi]
                            a.xyz.z = z[zi]
                            a.dxyz.x = 0.0
                            a.dxyz.y = y[yi + 1] - y[yi]
                            a.dxyz.z = 0.0
                            a.r = 1.0
                            a.g = 0.0
                            a.b = 0.0
                            a.alpha = 1.0
                            self.gl_objects_add(a)

                        if xi != len(x) - 1 and block_x == False:
                            #print(yi,y[yi],mid_point,block_x)

                            a = gl_base_object()
                            a.id = ["electrical_mesh"]
                            a.type = "resistor"
                            a.xyz.x = x[xi]
                            a.xyz.y = y[yi]
                            a.xyz.z = z[zi]
                            a.dxyz.x = x[xi + 1] - x[xi]
                            a.dxyz.y = 0.0
                            a.dxyz.z = 0.0
                            a.r = 1.0
                            a.g = 0.0
                            a.b = 0.0
                            a.alpha = 1.0
                            self.gl_objects_add(a)

                        if zi != len(z) - 1 and block_z == False:
                            a = gl_base_object()
                            a.id = ["electrical_mesh"]
                            a.type = "resistor"
                            a.xyz.x = x[xi]
                            a.xyz.y = y[yi]
                            a.xyz.z = z[zi]
                            a.dxyz.x = 0.0
                            a.dxyz.y = 0.0
                            a.dxyz.z = z[zi + 1] - z[zi]
                            a.r = 1.0
                            a.g = 0.0
                            a.b = 0.0
                            a.alpha = 1.0
                            self.gl_objects_add(a)

                        mid_point = mid_point + 1
                        if mid_point == 2:
                            mid_point = 0

                    xi = xi + 1

        self.curciut_mesh_add_links(z)
    def __init__(self, xyz):
        self.xyz = xyz
        QGroupBox.__init__(self)
        rcParams.update({'figure.autolayout': True})
        self.setTitle(self.xyz)
        self.setStyleSheet("QGroupBox {  border: 1px solid gray;}")
        vbox = QVBoxLayout()
        self.setLayout(vbox)

        self.toolbar = QToolBar()
        self.toolbar.setIconSize(QSize(32, 32))

        vbox.addWidget(self.toolbar)

        self.tab = gpvdm_tab(toolbar=self.toolbar)

        self.tab.tb_add.triggered.connect(self.on_add_mesh_clicked)
        self.tab.tb_down.triggered.connect(self.on_move_down)
        self.tab.tb_up.triggered.connect(self.on_move_up)
        self.tab.user_remove_rows.connect(self.callback_remove_rows)

        self.tab.resizeColumnsToContents()

        self.tab.verticalHeader().setVisible(False)

        self.tab.clear()
        self.tab.setColumnCount(4)
        self.tab.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.tab.cellChanged.connect(self.tab_changed)

        vbox.addWidget(self.tab)

        self.fig = Figure(figsize=(5, 2), dpi=100)
        self.canvas = FigureCanvas(self.fig)
        self.canvas.figure.patch.set_facecolor('white')

        self.fig.subplots_adjust(bottom=0.2)
        self.fig.subplots_adjust(left=0.1)
        self.ax1 = self.fig.add_subplot(111)
        self.ax1.ticklabel_format(useOffset=False)

        vbox.addWidget(self.canvas)

        if self.xyz == "y":
            self.mesh = get_mesh().y
            get_watch().add_call_back("mesh_y.inp", self.load)
        elif self.xyz == "x":
            self.mesh = get_mesh().x
            get_watch().add_call_back("mesh_x.inp", self.load)
        elif self.xyz == "z":
            self.mesh = get_mesh().z
            get_watch().add_call_back("mesh_z.inp", self.load)

        if self.mesh.circuit_model == True:
            self.tab.tb_add.setEnabled(False)
            self.tab.tb_remove.setEnabled(False)
            self.tab.tb_down.setEnabled(False)
            self.tab.tb_up.setEnabled(False)
            self.tab.setEnabled(False)

        self.load()
示例#29
0
    def __init__(self):
        QWidget.__init__(self)
        self.complex_display = False

        self.hbox = QVBoxLayout()
        self.data = dat_file()
        self.my_server = server_get()
        mesh = get_mesh()
        if mesh.y.circuit_model == True and mesh.x.tot_points == 1 and mesh.z.tot_points == 1:
            self.display = circuit_editor()

            epi = get_epi()
            pos = 3
            self.display.ersatzschaltbild.add_object(pos, 3, pos + 1, 3, "bat")
            pos = pos + 1

            for l in epi.layers:
                f = inp()
                f.load(
                    os.path.join(get_sim_path(), l.shape_electrical + ".inp"))
                component = f.get_token("#electrical_component")
                if component == "resistance":
                    self.display.ersatzschaltbild.add_object(
                        pos, 3, pos + 1, 3, "resistor")
                if component == "diode":
                    self.display.ersatzschaltbild.add_object(
                        pos, 3, pos + 1, 3, "diode")

                pos = pos + 1
            self.display.ersatzschaltbild.add_object(pos, 3, pos + 1, 3,
                                                     "ground")
            self.display.ersatzschaltbild.objects_push()

            if inp().isfile(os.path.join(get_sim_path(),
                                         "diagram.inp")) == True:
                self.display.ersatzschaltbild.load()
        else:
            toolbar = QToolBar()
            toolbar.setIconSize(QSize(42, 42))

            spacer = QWidget()
            spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            toolbar.addWidget(spacer)

            self.tb_refresh = QAction(icon_get("view-refresh"), _("Refresh"),
                                      self)
            self.tb_refresh.triggered.connect(self.rebuild_mesh)
            toolbar.addAction(self.tb_refresh)

            self.xy = QAction(icon_get("xy"), _("xy"), self)
            self.xy.triggered.connect(self.callback_xy)
            toolbar.addAction(self.xy)

            self.yz = QAction(icon_get("yz"), _("yz"), self)
            self.yz.triggered.connect(self.callback_yz)
            toolbar.addAction(self.yz)

            self.xz = QAction(icon_get("xz"), _("xz"), self)
            self.xz.triggered.connect(self.callback_xz)
            toolbar.addAction(self.xz)

            self.tb_rotate = QAction(icon_get("rotate.png"), _("Rotate"), self)
            self.tb_rotate.triggered.connect(self.tb_rotate_click)
            toolbar.addAction(self.tb_rotate)
            self.tb_rotate.setEnabled(True)

            self.hbox.addWidget(toolbar)

            self.display = glWidget(self)
            #self.data.load(os.path.join(get_sim_path(),"electrical_mesh.dat")
            #self.display.pre_built_scene=gl_scale.project_base_objects_from_m_2_screen(self.data.data)
            self.display.draw_electrical_mesh = False
            self.display.view.draw_device = False
            self.display.enable_draw_ray_mesh = False
            self.display.enable_draw_light_source = False
            self.display.enable_draw_rays = False
            self.display.view.render_photons = False

            self.display.force_redraw()
            #global_object_register("display_mesh_recalculate",self.recalculate)

        self.hbox.addWidget(self.display)

        self.setLayout(self.hbox)
示例#30
0
	def build_top_widget(self):
		self.items=[]
		#input description+units	//output label // Output unit// equation to si //mull si to display //Need area
		self.items.append([_("Wavelength"),"nm",_("Wavelength"),"nm","1e-9",1e9,False])
		self.items.append([_("Wavelength"),"um",_("Wavelength"),"nm","1e-6",1e9,False])
		self.items.append([_("Wavelength"),"cm",_("Wavelength"),"nm","1e-3",1e9,False])
		self.items.append([_("Wavelength"),"m",_("Wavelength"),"nm","1.0",1e9,False])
		self.items.append([_("J"),"mA/cm2",_("J"),"A/m2","10000.0/1000.0",1.0,False])
		self.items.append([_("J"),"A/m2",_("J"),"A/m2","1.0",1.0,False])
		self.items.append([_("Amps"),"A",_("J"),"A/m2","1.0/(self.get_area())",1.0,True])
		self.items.append([_("Amps - no convert"),"A",_("I"),"A","1.0",1.0,True])
		self.items.append([_("Voltage"),"V",_("Voltage"),"V","1.0",1.0,False])
		self.items.append([_("-Voltage"),"V",_("Voltage"),"V","-1.0",1.0,False])
		self.items.append([_("Voltage"),"mV",_("Voltage"),"V","1e-3",1.0,False])


		self.items.append([_("Refractive index"),"au",_("Refractive index"),"au","1.0",1.0,False])
		self.items.append([_("Absorption"),"m^{-1}",_("Absorption"),"m^{-1}","1.0",1.0,False])
		self.items.append([_("Absorption"),"m^{-cm}",_("Absorption"),"m^{-1}","1.0",1e2,False])
		self.items.append([_("Attenuation coefficient"),"au",_("Absorption"),"m^{-1}","4*3.14159/y",1.0,False])

		self.items.append([_("Time"),"s",_("Time"),"s","1.0",1.0,False])
		self.items.append([_("Suns"),"Suns",_("Suns"),"Suns","1.0",1.0,False])

		self.items.append([_("Intensity"),"um^{-1}.Wm^{-2}",_("Intensity"),"m^{-1}.Wm^{-2}","1e6",1.0,False])
		self.items.append([_("Charge density"),"m^{-3}",_("Charge density"),"m^{-3}","1.0",1.0,False])
		
		i=0
		self.x_label=self.items[i][2]
		self.x_units=self.items[i][3]
		self.x_mul_to_si=self.items[i][4]
		self.x_disp_mul=self.items[i][5]

		self.data_label=self.items[i][2]
		self.data_units=self.items[i][3]
		self.data_mul_to_si=self.items[i][4]
		self.data_disp_mul=self.items[i][5]

		self.top_widget=QWidget()
		self.top_vbox=QVBoxLayout()
		self.x_combo=QComboBox()
		self.add_units(self.x_combo)
		self.data_combo=QComboBox()
		self.add_units(self.data_combo)
		
		self.units_x_label=QLabel(_("x units:"))
		self.units_data_label=QLabel(_("y units:"))
		

		self.x_combo.currentIndexChanged.connect(self.callback_edited)
		self.data_combo.currentIndexChanged.connect(self.callback_edited)

		self.title_widget=QWidget()
		self.title_hbox=QHBoxLayout()
		self.title_label=QLabel(_("Title:"))
		self.title_entry=QLineEdit()
		self.title_hbox.addWidget(self.title_label)
		self.title_hbox.addWidget(self.title_entry)
		self.title_widget.setLayout(self.title_hbox)
		self.top_vbox.addWidget(self.title_widget)



		self.xlabel_widget=QWidget()
		self.xlabel_hbox=QHBoxLayout()
		self.xlabel_label=QLabel(_("x-label:"))
		self.xlabel_entry=QLineEdit()
		self.x_column_label=QLabel(_("x-column:"))
		self.x_spin=QSpinBox()
		self.x_spin.setValue(0)
		self.x_spin.valueChanged.connect(self.callback_edited)

		self.x_invert=QCheckBox("invert")
		
		self.xlabel_hbox.addWidget(self.xlabel_label)
		self.xlabel_hbox.addWidget(self.xlabel_entry)
		self.xlabel_hbox.addWidget(self.x_column_label)
		self.xlabel_hbox.addWidget(self.x_spin)
		self.xlabel_hbox.addWidget(self.units_x_label)
		self.xlabel_hbox.addWidget(self.x_combo)
		self.xlabel_hbox.addWidget(self.x_invert)
		self.xlabel_widget.setLayout(self.xlabel_hbox)
		self.top_vbox.addWidget(self.xlabel_widget)

		self.data_label_widget=QWidget()
		self.data_label_hbox=QHBoxLayout()
		self.data_label_label=QLabel(_("y-label:"))
		self.data_label_entry=QLineEdit()
		self.data_column_label=QLabel(_("y-column:"))
		self.data_spin=QSpinBox()
		self.data_spin.setValue(1)
		self.data_spin.valueChanged.connect(self.callback_edited)

		self.data_invert=QCheckBox("invert")

		self.data_label_hbox.addWidget(self.data_label_label)
		self.data_label_hbox.addWidget(self.data_label_entry)
		self.data_label_hbox.addWidget(self.data_column_label)
		self.data_label_hbox.addWidget(self.data_spin)
		self.data_label_hbox.addWidget(self.units_data_label)
		self.data_label_hbox.addWidget(self.data_combo)
		self.data_label_hbox.addWidget(self.data_invert)
		self.data_label_widget.setLayout(self.data_label_hbox)
		self.top_vbox.addWidget(self.data_label_widget)

		self.area_widget=QWidget()
		self.area_hbox=QHBoxLayout()
		self.area_label=QLabel(_("device area:"))
		self.area_hbox.addWidget(self.area_label)
		self.area_entry=QLineEdit()
		self.area_entry.setText(str(round(get_mesh().get_xlen()*get_mesh().get_zlen()*100*100, 3)))
		self.area_hbox.addWidget(self.area_entry)
		self.area_units=QLabel("cm2")
		self.area_hbox.addWidget(self.area_units)
		self.area_widget.setLayout(self.area_hbox)
		self.top_vbox.addWidget(self.area_widget)

		self.area_widget.hide()
		
		self.xlabel_entry.textEdited.connect(self.callback_edited)
		self.data_label_entry.textEdited.connect(self.callback_edited)
		self.title_entry.textEdited.connect(self.callback_edited)
		self.area_entry.textEdited.connect(self.callback_edited)
		self.x_invert.stateChanged.connect(self.callback_edited)
		self.data_invert.stateChanged.connect(self.callback_edited)
		self.top_widget.setLayout(self.top_vbox)