Exemple #1
0
    def callback_unit_click(self, token, widget, unit):
        if type(widget) == shape_dos_switch:
            f = inp()
            f.load(self.file_name)
            if newton_solver_get_type() == "newton_simple":
                electrical_file = f.get_token("#shape_electrical") + ".inp"
            else:
                electrical_file = f.get_token("#shape_dos") + ".inp"

            from tab import tab_class
            self.window = tab_class(electrical_file)
            self.window.setWindowTitle(
                _("Electrical parameter editor for shape") + " " +
                f.get_token("#shape_name") + " (https://www.gpvdm.com)")
            self.window.show()

        if type(widget) == gpvdm_select_material:
            widget.callback_button_click()

        if type(widget) == gpvdm_select_emission:
            widget.callback_button_click()

        if token == "#dostype":
            from dos_editor import dos_editor
            self.dos_editor = dos_editor(self.file_name)
            self.dos_editor.show()
    def update(self):
        self.notebook.clear()
        fulle_sim = True
        sim_type = newton_solver_get_type()
        if sim_type == "newton_simple":
            fulle_sim = False
        epi = get_epi()
        for l in epi.layers:
            if fulle_sim == True:
                if l.dos_file.startswith("dos") == True:

                    name = "DoS of " + l.name
                    print(l.dos_file)
                    widget = tab_class(l.dos_file + ".inp")
                    self.notebook.addTab(widget, name)

                    for s in l.shapes:
                        if s.shape_dos != "none":
                            name = "DoS of " + s.name
                            widget = tab_class(s.shape_dos + ".inp")
                            self.notebook.addTab(widget, name)
                            #tab.append(s.shape_dos+".inp")
            else:
                name = "Electrical " + l.name

                widget = tab_class(l.shape_electrical + ".inp")

                self.notebook.addTab(widget, name)
Exemple #3
0
    def check_curcuit_sim(self, epi):
        newton_solver = newton_solver_get_type()

        if newton_solver == "newton_simple" and self.direction == "y":
            for l in epi.layers:
                self.add_layer(l.dy, 1, 1.0, "left")
            self.circuit_model = True
            return True

        return False
Exemple #4
0
	def mouseReleaseEvent(self, QMouseEvent):
		epi=get_epi()

		if QMouseEvent.x()<160:
			if self.value== "none":
				if newton_solver_get_type()=="newton_simple":
					self.value=epi.add_new_electrical_to_shape(self.shape_file)
				else:
					self.value=epi.add_new_dos_to_shape(self.shape_file)
				
			else:
				if newton_solver_get_type()=="newton_simple":
					self.value=epi.del_electrical_shape(self.shape_file)
					self.value="none"
				else:
					self.value=epi.del_dos_shape(self.shape_file)
					self.value="none"

			self.repaint()
			self.changed.emit()
Exemple #5
0
    def show_hide_cols(self):
        schottky = False
        for i in range(0, self.tab.rowCount()):
            if self.tab.get_value(i, 11) == "schottky":
                schottky = True
                break

        if schottky == True:
            self.tab.setColumnHidden(9, False)
            self.tab.setColumnHidden(10, False)
        else:
            self.tab.setColumnHidden(9, True)
            self.tab.setColumnHidden(10, True)

        if newton_solver_get_type() == "newton_simple":
            self.tab.setColumnHidden(7, True)
            self.tab.setColumnHidden(8, True)
            self.tab.setColumnHidden(11, True)
        else:
            self.tab.setColumnHidden(7, False)
            self.tab.setColumnHidden(8, False)
            self.tab.setColumnHidden(11, False)
Exemple #6
0
    def update(self):
        self.clear_toolbar()
        lines = []
        newton_solver = newton_solver_get_type()
        files = inp_lsdir("sim.gpvdm")
        if files != False:
            for i in range(0, len(files)):
                if files[i].endswith(".inp") and files[i].count("/") == 0:
                    lines = inp_load_file(files[i])
                    value = inp_search_token_value(lines, "#sim_menu_name")
                    if value != False:
                        if value.count("@") == 1:
                            value = value.rstrip()
                            command, module = value.split("@")

                            hide = False
                            if newton_solver == "none":
                                if module == "jv":
                                    hide = True

                                if module == "pulse":
                                    hide = True

                                if module == "suns_jsc":
                                    hide = True

                                if module == "sun_voc":
                                    hide = True

                                if module == "is":
                                    hide = True

                            if command not in self.dont_show and hide == False:
                                a = gQAction(self, files[i], command, module)
                                a.setCheckable(True)
                                a.selected.connect(self.callback_click)
                                self.actions.append(a)

                            #temp.append(value)

            #temp.sort()

            token = inp_get_token_value("sim.inp", "#simmode")
            if token == None:
                return
                #print(os.getcwd(),"!!!!!!!!!!!!!")
                #sys.exit(0)
            if token.count("@") != 0:
                command, module = token.split("@")
            else:
                command = token

            found = False
            self.build = []
            added = 0  #This is to stop || appearing in the menu
            for o in self.order:
                if o == "|":
                    if added != 0:
                        self.build.append("|")
                    added = 0
                else:
                    for i in range(0, len(self.actions)):
                        if self.actions[i].command.lower().startswith(
                                o.lower()) == True:
                            if self.actions[i].done == False:
                                self.build.append(self.actions[i])
                                self.actions[i].done = True
                                added = added + 1

            for i in range(0, len(self.actions)):
                if self.actions[i].done == False:
                    #print(self.actions[i].command)
                    self.build.append(self.actions[i])

            self.actions = self.build

            self.blockSignals(True)
            for a in self.actions:
                #self.sim_mode.addItem(command)
                if type(a) == gQAction:
                    self.addAction(a)
                    if command.lower() == a.command.lower():
                        self.callback_click(a, disable_help=True)
                        found = True
                else:
                    self.addSeparator()

            #if there is no known mode, just set it to jv mode
            if found == False:
                for a in self.actions:
                    if a.command == "jv":
                        self.callback_click(a, disable_help=True)
                        inp_update_token_value(
                            os.path.join(get_sim_path(), "sim.inp"),
                            "#simmode", "jv@jv")
                        break

            self.blockSignals(False)
Exemple #7
0
    def populate(self, lines):

        self.f.lines = lines
        n = 0
        pos = 0
        my_token_lib = tokens()
        widget_number = 0
        bib = bibtex()
        if self.file_name != None:
            bib.load(os.path.splitext(self.file_name)[0] + ".bib")
        while (1):
            draw_widget = True
            token, values = self.f.get_next_token_array()
            #print(token,values)
            if token == "#ver":
                break

            if token == "#end":
                break

            if token.startswith("#"):
                show = False
                units = "Units"

                value = values[0]

                result = my_token_lib.find(token)
                if result != False:
                    #print(token,result.info)
                    units = result.units
                    text_info = result.info
                    show = True
                    if result.hidden == True:
                        show = False

                if show == True:
                    description = QLabel_click()
                    description.setText(latex_to_html(text_info))
                    if self.file_name != None:
                        if bib.get_ref(token) != False:
                            description.setStyleSheet('color: green')
                        description.clicked.connect(
                            functools.partial(self.callback_ref, token,
                                              description))

                    #units widget
                    if result.units_widget == "QLabel":
                        unit = QLabel()
                        unit.setText(latex_to_html(units))
                    elif result.units_widget == "QPushButton":
                        unit = QPushButton()
                        unit.setText(latex_to_html(units))
                        unit.setFixedSize(50, 25)

                    #edit widget
                    if result.widget == "gtkswitch":
                        edit_box = gtkswitch()
                        edit_box.setFixedSize(300, 25)
                        edit_box.changed.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "leftright":
                        edit_box = leftright()
                        edit_box.setFixedSize(300, 25)
                        edit_box.changed.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "gpvdm_select":
                        edit_box = gpvdm_select(file_box=True)
                        edit_box.setFixedSize(300, 25)
                        edit_box.edit.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "gpvdm_select_material":
                        edit_box = gpvdm_select_material(file_box=False)
                        edit_box.setFixedSize(300, 25)
                        edit_box.edit.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))

                    elif result.widget == "gpvdm_select_emission":
                        edit_box = gpvdm_select_emission(file_box=False)
                        edit_box.setFixedSize(300, 25)
                        edit_box.edit.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))

                    elif result.widget == "QLineEdit":
                        edit_box = QLineEdit()
                        edit_box.setFixedSize(300, 25)
                        if self.editable == False:
                            edit_box.setReadOnly(True)

                        edit_box.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                        #edit_box.show()
                    elif result.widget == "QColorPicker":
                        r = float(values[0])
                        g = float(values[1])
                        b = float(values[2])
                        edit_box = QColorPicker(r, g, b)
                        edit_box.setFixedSize(300, 25)
                        edit_box.changed.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "QComboBoxLang":
                        edit_box = QComboBoxLang()
                        edit_box.setFixedSize(300, 25)
                        for i in range(0, len(result.defaults)):
                            edit_box.addItemLang(result.defaults[i][0],
                                                 result.defaults[i][1])

                        edit_box.currentIndexChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "QComboBoxNewtonSelect":
                        edit_box = QComboBoxNewtonSelect()
                        edit_box.setFixedSize(300, 25)
                        for i in range(0, len(result.defaults)):
                            edit_box.addItem(result.defaults[i])

                        edit_box.currentIndexChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "QComboBoxShape":
                        edit_box = QComboBoxShape()
                        edit_box.setFixedSize(300, 25)
                        edit_box.currentIndexChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))

                    elif result.widget == "QParasitic":
                        edit_box = QParasitic()
                        edit_box.setFixedSize(300, 25)
                        edit_box.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))

                    elif result.widget == "QChangeLog":
                        edit_box = QChangeLog(self)
                        edit_box.setMinimumHeight(100)
                        if self.editable == False:
                            edit_box.setReadOnly(True)
                        edit_box.textChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "generic_switch":
                        edit_box = generic_switch(
                            state0=result.defaults[0][0],
                            state1=result.defaults[1][0],
                            state0_value=result.defaults[0][1],
                            state1_value=result.defaults[1][1],
                        )
                        edit_box.setFixedSize(300, 25)
                        if value == "exponential":
                            unit.setEnabled(False)
                        edit_box.changed.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "mobility_widget":
                        edit_box = mobility_widget(
                            electrons=result.defaults[0])
                        edit_box.setFixedSize(400, 25)
                        if token == "#symmetric_mobility_e":
                            value = [
                                self.f.get_token(token),
                                self.f.get_token("#mue_z"),
                                self.f.get_token("#mue_x"),
                                self.f.get_token("#mue_y")
                            ]
                        if token == "#symmetric_mobility_h":
                            value = [
                                self.f.get_token(token),
                                self.f.get_token("#muh_z"),
                                self.f.get_token("#muh_x"),
                                self.f.get_token("#muh_y")
                            ]
                        if token == "#electrical_symmetrical_resistance":
                            value = [
                                self.f.get_token(token),
                                self.f.get_token("#electrical_series_z"),
                                self.f.get_token("#electrical_series_x"),
                                self.f.get_token("#electrical_series_y")
                            ]

                        edit_box.changed.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))
                    elif result.widget == "shape_dos_switch":
                        if token == "#shape_dos":
                            if newton_solver_get_type() != "newton_simple":
                                edit_box = shape_dos_switch()
                                edit_box.shape_file = self.file_name
                                edit_box.setFixedSize(300, 25)
                                edit_box.changed.connect(
                                    functools.partial(self.callback_edit,
                                                      token, edit_box, unit,
                                                      result))
                                if value == "none":
                                    unit.setEnabled(False)
                            else:
                                draw_widget = False

                        if token == "#shape_electrical":
                            if newton_solver_get_type() == "newton_simple":
                                edit_box = shape_dos_switch()
                                edit_box.shape_file = self.file_name
                                edit_box.setFixedSize(300, 25)
                                edit_box.changed.connect(
                                    functools.partial(self.callback_edit,
                                                      token, edit_box, unit,
                                                      result))
                                if value == "none":
                                    unit.setEnabled(False)
                            else:
                                draw_widget = False

                    else:
                        edit_box = QComboBox()
                        edit_box.setFixedSize(300, 25)
                        for i in range(0, len(result.defaults)):
                            edit_box.addItem(result.defaults[i])

                        edit_box.currentIndexChanged.connect(
                            functools.partial(self.callback_edit, token,
                                              edit_box, unit, result))

                    widget_set_value(edit_box, value)

                    if type(unit) == QPushButton:
                        unit.clicked.connect(
                            functools.partial(self.callback_unit_click, token,
                                              edit_box, unit))

                    if draw_widget == True:
                        a = tab_line()
                        a.token = token
                        a.label = description
                        a.edit_box = edit_box
                        a.units = unit
                        a.widget = result.widget
                        a.hide_on_true_token = result.hide_on_true_token
                        a.hide_on_false_token = result.hide_on_false_token
                        a.hide_on_token_eq = result.hide_on_token_eq

                        self.widget_list.append(a)
                        self.tab.addWidget(description, widget_number, 0)
                        self.tab.addWidget(edit_box, widget_number, 1)
                        self.tab.addWidget(unit, widget_number, 2)

                        widget_number = widget_number + 1

        self.hide_show_widgets()