示例#1
0
    def build_mesh(self):
        self.mag = []
        self.fx = []

        for i in range(0, self.tab.rowCount()):
            local_mag = []
            local_fx = []
            start = float(tab_get_value(self.tab, i, 0))
            pos = start
            stop = float(tab_get_value(self.tab, i, 1))
            points = float(tab_get_value(self.tab, i, 2))
            mul = float(tab_get_value(self.tab, i, 3))

            if stop != 0.0 and points != 0.0 and mul != 0.0:
                dfx = (stop - start) / points
                while (pos < stop):
                    local_fx.append(pos)
                    local_mag.append(1.0)
                    pos = pos + dfx

                    dfx = dfx * mul
            self.mag.append(local_mag)
            self.fx.append(local_fx)
            local_mag = []
            local_fx = []
示例#2
0
    def save_data(self):

        out_text = []
        out_text.append("#points")
        out_text.append(str(self.points))
        out_text.append("#equations")
        out_text.append(str(self.tab.rowCount()))

        for i in range(0, self.tab.rowCount()):
            out_text.append("#start" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 0)))

            out_text.append("#stop" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 1)))

            out_text.append("#equation" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 2)))

        out_text.append("#ver")
        out_text.append("1.0")
        out_text.append("#end")

        dump = ""
        for item in out_text:
            dump = dump + item + "\n"

        dump = dump.rstrip("\n")

        f = open(os.path.join(self.path, self.file_name), mode='wb')
        lines = f.write(str.encode(dump))
        f.close()
示例#3
0
    def save_data(self):
        file_name = "fxmesh" + str(self.index) + ".inp"
        scan_remove_file(file_name)

        out_text = []

        for i in range(0, self.tab.rowCount()):
            out_text.append("#fx_segment" + str(i) + "_start")
            scan_item_add(file_name, out_text[len(out_text) - 1],
                          _("Part ") + str(i) + " " + _("start"), 1)
            out_text.append(str(tab_get_value(self.tab, i, 0)))

            out_text.append("#fx_segment" + str(i) + "_stop")
            scan_item_add(file_name, out_text[len(out_text) - 1],
                          _("Part ") + str(i) + " " + _("stop"), 1)
            out_text.append(str(tab_get_value(self.tab, i, 1)))

            out_text.append("#fx_segment" + str(i) + "_points")
            scan_item_add(file_name, out_text[len(out_text) - 1],
                          _("Part ") + str(i) + " " + _("points"), 1)
            out_text.append(str(tab_get_value(self.tab, i, 2)))

            out_text.append("#fx_segment" + str(i) + "_mul")
            scan_item_add(file_name, out_text[len(out_text) - 1],
                          _("Part ") + str(i) + " " + _("mul"), 1)
            out_text.append(str(tab_get_value(self.tab, i, 3)))

        out_text.append("#ver")
        out_text.append("1.1")
        out_text.append("#end")

        inp_save(file_name, out_text)
        self.update_scan_tokens()
示例#4
0
    def save_combo(self):
        self.make_sim_dir()
        a = open(os.path.join(self.sim_dir, "gpvdm_gui_config.inp"), "w")
        a.write(str(self.tab.rowCount()) + "\n")

        #print(self.tab.rowCount())

        for i in range(0, self.tab.rowCount()):
            #print(i)
            a.write(tab_get_value(self.tab, i, 0) + "\n")
            a.write(tab_get_value(self.tab, i, 1) + "\n")
            a.write(tab_get_value(self.tab, i, 2) + "\n")
            a.write(tab_get_value(self.tab, i, 3) + "\n")
            a.write(tab_get_value(self.tab, i, 4) + "\n")
            a.write("notused\n")
        a.close()

        if os.path.isfile(os.path.join(self.sim_dir,
                                       "scan_config.inp")) == False:
            a = open(os.path.join(self.sim_dir, "scan_config.inp"), "w")
            a.write("#scan_config_args\n")
            a.write("\n")
            a.write("#scan_config_compress\n")
            a.write("false\n")
            a.write("#end\n")

            a.close()
示例#5
0
    def save_data(self):

        out_text = []
        out_text.append("#points")
        out_text.append(str(self.points))
        out_text.append("#equations")
        out_text.append(str(self.tab.rowCount()))

        for i in range(0, self.tab.rowCount()):
            out_text.append("#start" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 0)))

            out_text.append("#stop" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 1)))

            out_text.append("#equation" + str(i))
            out_text.append(str(tab_get_value(self.tab, i, 2)))

        out_text.append("#ver")
        out_text.append("1.0")
        out_text.append("#end")

        dump = ""
        for item in out_text:
            dump = dump + item + "\n"

        dump = dump.rstrip("\n")

        f = open(os.path.join(self.path, self.file_name), mode="wb")
        lines = f.write(str.encode(dump))
        f.close()
示例#6
0
    def save_combo(self):
        lines = []

        print("write to", self.file_name)
        self.measure_name = inp_get_token_value(self.file_name,
                                                "#measure_name")

        lines.append("#measure_name")
        lines.append(str(self.measure_name))

        lines.append("#measure_enable")
        lines.append(str(self.measure_enable))

        lines.append("#measure_compile_to_vector")
        lines.append(str(self.compile_to_vector))

        for i in range(0, self.tab.rowCount()):
            lines.append("#measure_file_" + str(i))
            lines.append(str(tab_get_value(self.tab, i, 0)))
            lines.append("#measure_pos_" + str(i))
            lines.append(str(tab_get_value(self.tab, i, 1)))
            lines.append("#measure_token_" + str(i))
            lines.append(str(tab_get_value(self.tab, i, 2)))
            lines.append("#measure_math_" + str(i))
            lines.append(str(tab_get_value(self.tab, i, 3)))
        lines.append("#ver")
        lines.append("1.0")
        lines.append("#end")

        inp_save_lines_to_file(self.file_name, lines)
示例#7
0
    def combo_mirror_changed(self):
        #print("combo changed")
        for i in range(0, self.tab.rowCount()):
            found = False
            value = tab_get_value(self.tab, i, 4)

            if value == "constant":
                found = True
                if tab_get_value(self.tab, i, 3) == "mirror":
                    tab_set_value(self.tab, i, 3, "0.0")

            if value == "scan":
                found = True
                if tab_get_value(self.tab, i, 3) == "mirror":
                    tab_set_value(self.tab, i, 3, "0.0 0.0 0.0")

            if value == "python_code":
                found = True
                if tab_get_value(self.tab, i, 3) == "mirror":
                    tab_set_value(self.tab, i, 3, "0.0")

            if value == "random_file_name":
                found = True
                tab_set_value(self.tab, i, 0, "not needed")
                tab_set_value(self.tab, i, 1, "not needed")
                tab_set_value(self.tab, i, 2, "not needed")
                if tab_get_value(self.tab, i, 3) == "mirror":
                    tab_set_value(self.tab, i, 3, "10")

            if found == False:
                tab_set_value(self.tab, i, 3, "mirror")

        self.save_combo()
示例#8
0
	def save_combo(self):
		print("SAVE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
		self.make_sim_dir()
		a = open(os.path.join(self.sim_dir,"gpvdm_gui_config.inp"), "w")
		a.write(str(self.tab.rowCount())+"\n")

		print(self.tab.rowCount())
		
		for i in range(0,self.tab.rowCount()):
			print(i)
			a.write(tab_get_value(self.tab,i,0)+"\n")
			a.write(tab_get_value(self.tab,i,1)+"\n")
			a.write(tab_get_value(self.tab,i,2)+"\n")
			a.write(tab_get_value(self.tab,i,3)+"\n")
			a.write(tab_get_value(self.tab,i,4)+"\n")
			a.write("notused\n")
		a.close()

		if os.path.isfile(os.path.join(self.sim_dir,"scan_config.inp"))==False:
			a = open(os.path.join(self.sim_dir,"scan_config.inp"), "w")
			a.write("#args\n")
			a.write("\n")
			a.write("#end\n")

			a.close()
示例#9
0
	def save_data(self):
		file_name="fxmesh"+str(self.index)+".inp"
		scan_remove_file(file_name)

		out_text=[]
		out_text.append("#fx_start")
		out_text.append(str(float(self.fx_start)))
		out_text.append("#fx_segments")
		out_text.append(str(self.tab.rowCount()))

		for i in range(0,self.tab.rowCount()):
			out_text.append("#fx_segment"+str(i)+"_len")
			scan_item_add(file_name,out_text[len(out_text)-1],_("Part ")+str(i)+_(" period"),1)
			out_text.append(str(tab_get_value(self.tab,i, 0)))

			out_text.append("#fx_segment"+str(i)+"_dfx")
			scan_item_add(file_name,out_text[len(out_text)-1],_("Part ")+str(i)+_(" dfx"),1)
			out_text.append(str(tab_get_value(self.tab,i, 1)))

			out_text.append("#fx_segment"+str(i)+"_mul")
			scan_item_add(file_name,out_text[len(out_text)-1],_("Part ")+str(i)+_(" mul"),1)
			out_text.append(str(tab_get_value(self.tab,i, 2)))


		out_text.append("#ver")
		out_text.append("1.0")
		out_text.append("#end")

		inp_write_lines_to_file(os.path.join(os.getcwd(),file_name),out_text)
		self.update_scan_tokens()
示例#10
0
    def draw_graph_lumo(self):

        #		n=0

        ax1 = self.LUMO_fig.add_subplot(111)

        ax1.set_ylabel('$DoS (m^{-3} eV^{-1})$')
        ax1.set_xlabel('Energy (eV)')

        #ax2 = ax1.twinx()
        #x_pos=0.0
        #layer=0
        color = ['r', 'g', 'b', 'y', 'o', 'r', 'g', 'b', 'y', 'o']
        ax1.set_yscale('log')
        ax1.set_ylim(ymin=1e17, ymax=1e28)
        pos = 0
        Eg = 2.0
        ax1.set_xlim([0, -Eg])
        x = linspace(0, -Eg, num=40)
        for i in range(0, self.lumo.tab.rowCount()):
            try:
                a = float(tab_get_value(self.lumo.tab, i, 2))
                b = float(tab_get_value(self.lumo.tab, i, 3))
                c = float(tab_get_value(self.lumo.tab, i, 4))
            except:
                a = 0.0
                b = 0.0
                c = 0.0

            if tab_get_value(self.lumo.tab, i, 0) == "exp":
                y = a * exp(x / b)
                line, = ax1.plot(x, y, '-', linewidth=3)

            if tab_get_value(self.lumo.tab, i, 0) == "gaus":
                y = a * exp(-pow(((b + x) / (sqrt(2.0) * c * 1.0)), 2.0))
                line, = ax1.plot(x, y, color[pos], linewidth=3)
                pos = pos + 1

        pos = 0

        x_homo = linspace(-Eg, 0, num=40)
        for i in range(0, self.h**o.tab.rowCount()):
            try:
                a = float(tab_get_value(self.h**o.tab, i, 2))
                b = float(tab_get_value(self.h**o.tab, i, 3))
                c = float(tab_get_value(self.h**o.tab, i, 4))
            except:
                a = 0.0
                b = 0.0
                c = 0.0

            if tab_get_value(self.h**o.tab, i, 0) == "exp":
                y = a * exp(x / b)
                line, = ax1.plot(x_homo, y, '-', linewidth=3)
            if tab_get_value(self.h**o.tab, i, 0) == "gaus":
                y = a * exp(-pow(((b + x) / (sqrt(2.0) * c * 1.0)), 2.0))

                line, = ax1.plot(x_homo, y, color[pos], linewidth=3)
                pos = pos + 1
示例#11
0
	def draw_graph_lumo(self):

#		n=0

		ax1 = self.LUMO_fig.add_subplot(111)

		ax1.set_ylabel('$DoS (m^{-3} eV^{-1})$')
		ax1.set_xlabel('Energy (eV)')

		#ax2 = ax1.twinx()
		#x_pos=0.0
		#layer=0
		color =['r','g','b','y','o','r','g','b','y','o']
		ax1.set_yscale('log')
		ax1.set_ylim(ymin=1e17,ymax=1e28)
		pos=0
		Eg=2.0
		ax1.set_xlim([0,-Eg])
		x = linspace(0, -Eg, num=40)
		for i in range(0,self.lumo.tab.rowCount()):
			try:
				a=float(tab_get_value(self.lumo.tab,i,2))
				b=float(tab_get_value(self.lumo.tab,i,3))
				c=float(tab_get_value(self.lumo.tab,i,4))
			except:
				a=0.0
				b=0.0
				c=0.0
				
			if tab_get_value(self.lumo.tab,i,0)=="exp":
				y = a*exp(x/b)
				line, = ax1.plot(x,y , '-', linewidth=3)
				
			if tab_get_value(self.lumo.tab,i,0)=="gaus":
				y = a*exp(-pow(((b+x)/(sqrt(2.0)*c*1.0)),2.0))
				line, = ax1.plot(x,y , color[pos], linewidth=3)
				pos=pos+1

		pos=0

		x_homo = linspace(-Eg, 0, num=40)
		for i in range(0,self.h**o.tab.rowCount()):
			try:
				a=float(tab_get_value(self.h**o.tab,i,2))
				b=float(tab_get_value(self.h**o.tab,i,3))
				c=float(tab_get_value(self.h**o.tab,i,4))
			except:
				a=0.0
				b=0.0
				c=0.0
				
			if tab_get_value(self.h**o.tab,i,0)=="exp":
				y = a*exp(x/b)
				line, = ax1.plot(x_homo,y , '-', linewidth=3)
			if tab_get_value(self.h**o.tab,i,0)=="gaus":
				y = a*exp(-pow(((b+x)/(sqrt(2.0)*c*1.0)),2.0))

				line, = ax1.plot(x_homo,y , color[pos], linewidth=3)
				pos=pos+1
示例#12
0
    def build_mesh(self):
        self.x = []
        self.y = []

        data_min = 100.0
        if self.tab.rowCount() != 0:
            for i in range(0, self.tab.rowCount()):
                val = float(tab_get_value(self.tab, i, 0))
                if val < data_min:
                    data_min = val

            #find max
            data_max = 0.0
            for i in range(0, self.tab.rowCount()):
                val = float(tab_get_value(self.tab, i, 1))
                if val > data_max:
                    data_max = val

            w = data_min
            dx = (data_max - data_min) / (float(self.points))

            for i in range(0, self.points):
                val = 0.0
                for ii in range(0, self.tab.rowCount()):
                    range_min = float(tab_get_value(self.tab, ii, 0))
                    range_max = float(tab_get_value(self.tab, ii, 1))
                    command = tab_get_value(self.tab, ii, 2)
                    try:
                        equ = eval(command)
                    except:
                        print(sys.exc_info())
                        error_dlg(
                            self,
                            _("You've made a mistake in the equation, use w for wavelength. "
                              + command))
                        equ = -1
                        return

                    if w >= range_min and w <= range_max:
                        val = val + equ
                if val < 0.0:
                    val = 1.0

                self.x.append(w)
                self.y.append(val)
                w = w + dx

            f_name = os.path.join(self.path, self.out_file)

            try:
                a = open(f_name, "w")
                for i in range(0, len(self.y)):
                    a.write(str(self.x[i]) + " " + str(self.y[i]) + "\n")
                a.close()
            except IOError:
                print("Could not read file:", f_name)
示例#13
0
    def save_combo(self):
        lines = []
        for i in range(0, self.tab.rowCount()):
            lines.append(str(tab_get_value(self.tab, i, 1)))
            lines.append(str(tab_get_value(self.tab, i, 0)))
            lines.append(str(tab_get_value(self.tab, i, 2)))
            lines.append(str(tab_get_value(self.tab, i, 3)))

        lines.append("#end")
        print("save as", self.file_name)
        inp_save_lines_to_file(self.file_name, lines)
示例#14
0
	def save_combo(self):
		lines=[]
		for i in range(0,self.tab_mm.rowCount()):
			line="mm "+str(tab_get_value(self.tab_mm,i, 0))+" "+str(tab_get_value(self.tab_mm,i, 1))+" "+str(tab_get_value(self.tab_mm,i, 3))+" "+str(tab_get_value(self.tab_mm,i, 4))+" "+str(tab_get_value(self.tab_mm,i, 5))+" "+str(tab_get_value(self.tab_mm,i, 6))
			lines.append(line)
			
		for i in range(0,self.tab_math.rowCount()):
			line="math "+str(tab_get_value(self.tab_math,i, 0))+" "+str(tab_get_value(self.tab_math,i, 1))+" "+str(tab_get_value(self.tab_math,i, 3))+" "+str(tab_get_value(self.tab_math,i, 4))+" "+str(tab_get_value(self.tab_math,i, 6))
			lines.append(line)

		lines.append("#end")
		print("save as",self.file_name)
		inp_save_lines_to_file(self.file_name,lines)
示例#15
0
	def get_units(self):
		token=""
		for i in range(0,self.tab.rowCount()):
			if tab_get_value(self.tab,i,4)=="scan":
				for ii in range(0,len(self.param_list)):
					if tab_get_value(self.tab,i,2)==self.param_list[ii].name:
						token=self.param_list[ii].token
				break
		if token!="":
			found_token=self.tokens.find(token)
			if type(found_token)!=bool:
				return found_token.units

		return ""
示例#16
0
    def get_units(self):
        token = ""
        for i in range(0, self.tab.rowCount()):
            if tab_get_value(self.tab, i, 4) == "scan":
                for ii in range(0, len(self.param_list)):
                    if tab_get_value(self.tab, i,
                                     2) == self.param_list[ii].name:
                        token = self.param_list[ii].token
                break
        if token != "":
            found_token = self.tokens.find(token)
            if type(found_token) != bool:
                return found_token.units

        return ""
示例#17
0
    def build_mesh(self):
        self.x = []
        self.y = []

        data_min = 100.0
        if self.tab.rowCount() != 0:
            for i in range(0, self.tab.rowCount()):
                val = float(tab_get_value(self.tab, i, 0))
                if val < data_min:
                    data_min = val

                    # find max
            data_max = 0.0
            for i in range(0, self.tab.rowCount()):
                val = float(tab_get_value(self.tab, i, 1))
                if val > data_max:
                    data_max = val

            w = data_min
            dx = (data_max - data_min) / (float(self.points))

            for i in range(0, self.points):
                val = 0.0
                for ii in range(0, self.tab.rowCount()):
                    range_min = float(tab_get_value(self.tab, ii, 0))
                    range_max = float(tab_get_value(self.tab, ii, 1))
                    command = tab_get_value(self.tab, ii, 2)
                    try:
                        equ = eval(command)
                    except:
                        print(sys.exc_info())
                        error_dlg(self, _("You've made a mistake in the equation, use w for wavelength. " + command))
                        equ = -1
                        return

                    if w >= range_min and w <= range_max:
                        val = val + equ
                if val < 0.0:
                    val = 1.0

                self.x.append(w)
                self.y.append(val)
                w = w + dx

            a = open(os.path.join(self.path, self.out_file), "w")
            for i in range(0, len(self.y)):
                a.write(str(self.x[i]) + " " + str(self.y[i]) + "\n")
            a.close()
示例#18
0
	def save(self):
		lines=[]
		for i in range(0,self.tab.rowCount()):
			lines.append("#function_"+str(i))
			lines.append(tab_get_value(self.tab,i, 0))
			lines.append("#function_enable_"+str(i))
			lines.append(tab_get_value(self.tab,i, 1))
			lines.append("#function_a_"+str(i))
			lines.append(tab_get_value(self.tab,i, 2))
			lines.append("#function_b_"+str(i))
			lines.append(tab_get_value(self.tab,i, 3))
			lines.append("#function_c_"+str(i))
			lines.append(tab_get_value(self.tab,i, 4))
		lines.append("#ver")
		lines.append("#1.0")
		lines.append("#end")
		inp_write_lines_to_file(self.file_name,lines)
示例#19
0
 def save(self):
     lines = []
     for i in range(0, self.tab.rowCount()):
         lines.append("#function_" + str(i))
         lines.append(tab_get_value(self.tab, i, 0))
         lines.append("#function_enable_" + str(i))
         lines.append(tab_get_value(self.tab, i, 1))
         lines.append("#function_a_" + str(i))
         lines.append(tab_get_value(self.tab, i, 2))
         lines.append("#function_b_" + str(i))
         lines.append(tab_get_value(self.tab, i, 3))
         lines.append("#function_c_" + str(i))
         lines.append(tab_get_value(self.tab, i, 4))
     lines.append("#ver")
     lines.append("#1.0")
     lines.append("#end")
     inp_save(self.file_name, lines)
示例#20
0
	def simulate(self,run_simulation,generate_simulations,args):

		base_dir=os.getcwd()
		run=True

		if self.tab.rowCount() == 0:
			error_dlg(self,_("You have not selected any parameters to scan through.  Use the add button."))
			return


		if self.sim_name=="":
			error_dlg(self,_("No sim dir name"))
			return

		self.make_sim_dir()
		if generate_simulations==True:
			scan_clean_dir(self,self.sim_dir)

		print("Running")
		program_list=[]
		for i in range(0,self.tab.rowCount()):
			program_list.append([tab_get_value(self.tab,i,0),tab_get_value(self.tab,i,1),tab_get_value(self.tab,i,3),tab_get_value(self.tab,i,4)])

		print(program_list)
		tree_load_config(self.sim_dir)
		if generate_simulations==True:
			flat_simulation_list=[]
			if tree_gen(flat_simulation_list,program_list,base_dir,self.sim_dir)==False:
				error_dlg(self,_("Problem generating tree."))
				return

			print("flat list",flat_simulation_list)
			tree_save_flat_list(self.sim_dir,flat_simulation_list)

		commands=tree_load_flat_list(self.sim_dir)
		print("loaded commands",commands)
		if run_simulation==True:
			self.send_commands_to_server(commands,args)

		self.save_combo()
		os.chdir(base_dir)
		gc.collect()
示例#21
0
    def clean_dos_files(self):
        files = inp_lsdir("sim.gpvdm")
        tab = []
        for i in range(0, self.tab.rowCount()):
            tab.append(str(tab_get_value(self.tab, i, 4)) + ".inp")

        for i in range(0, len(files)):
            if files[i].startswith("dos") and files[i].endswith(".inp"):
                disk_file = files[i]
                if disk_file not in tab:
                    inp_remove_file(disk_file)
示例#22
0
	def build_mesh(self):
		self.mag=[]
		self.fx=[]
		pos=self.fx_start

		seg=0
		for i in range(0,self.tab.rowCount()):
			end_fx=pos+float(tab_get_value(self.tab,i, 0))
			dfx=float(tab_get_value(self.tab,i, 1))
			mul=float(tab_get_value(self.tab,i, 2))

			if dfx!=0.0 and mul!=0.0:
				while(pos<end_fx):
					self.fx.append(pos)
					self.mag.append(1.0)
					pos=pos+dfx

					dfx=dfx*mul

			seg=seg+1
示例#23
0
	def clean_dos_files(self):
		files=inp_lsdir()
		tab=[]
		for i in range(0,self.tab.rowCount()):
			tab.append(str(tab_get_value(self.tab,i, 4))+".inp")

		for i in range(0,len(files)):
			if files[i].startswith("dos") and files[i].endswith(".inp"):
				disk_file=files[i]
				if disk_file not in tab:
					inp_remove_file(disk_file)
示例#24
0
	def save_model(self):

		thick=[]
		mat_file=[]
		dos_file=[]
		pl_file=[]
		name=[]

		for i in range(0,self.tab.rowCount()):
			name.append(str(tab_get_value(self.tab,i, 0)))
			thick.append(str(tab_get_value(self.tab,i, 1)))
			mat_file.append(str(tab_get_value(self.tab,i, 2)))
			dos_file.append(str(tab_get_value(self.tab,i, 4)))
			pl_file.append(str(tab_get_value(self.tab,i, 5)))

		ret=epitaxy_load_from_arrays(name,thick,mat_file,dos_file,pl_file)
		if ret==False:
			error_dlg(self,_("Error in epitaxy, check the input values."))

		epitaxy_save()
		self.clean_dos_files()
示例#25
0
	def rebuild_op_type_widgets(self):
		self.tab.blockSignals(True)
		items=[]
		items.append("scan")
		items.append("constant")
		items.append("python_code")

		for i in range(0,self.tab.rowCount()):
			items.append(str(tab_get_value(self.tab,i,2)))

		for i in range(0,self.tab.rowCount()):
			save_value=tab_get_value(self.tab,i,4)
			
			combobox = QComboBox()
			for a in items:
				combobox.addItem(a)

			self.tab.setCellWidget(i,4, combobox)
			
			tab_set_value(self.tab,i,4,save_value)
		self.tab.blockSignals(False)
示例#26
0
    def build_mesh(self):
        self.laser = []
        self.sun = []
        self.voltage = []
        self.time = []
        self.fs_laser = []
        pos = self.start_time
        fired = False

        laser_pulse_width = 0.0

        sun_steady_state = float(
            inp_get_token_value(os.path.join(get_sim_path(), "light.inp"),
                                "#Psun"))

        voltage_bias = float(
            inp_get_token_value(
                os.path.join(get_sim_path(),
                             "pulse" + str(self.index) + ".inp"),
                "#pulse_bias"))

        seg = 0
        for i in range(0, self.tab.rowCount()):
            length = float(tab_get_value(self.tab, i, 0))
            end_time = pos + length
            dt = float(tab_get_value(self.tab, i, 1))
            voltage_start = float(tab_get_value(self.tab, i, 2))
            voltage_stop = float(tab_get_value(self.tab, i, 3))
            mul = float(tab_get_value(self.tab, i, 4))
            sun = float(tab_get_value(self.tab, i, 5))
            laser = float(tab_get_value(self.tab, i, 6))
            #print("VOLTAGE=",line[SEG_VOLTAGE],end_time,pos)

            if dt != 0.0 and mul != 0.0:
                voltage = voltage_start
                while (pos < end_time):
                    dv = (voltage_stop - voltage_start) * (dt / length)
                    self.time.append(pos)
                    self.laser.append(laser)
                    self.sun.append(sun + sun_steady_state)
                    self.voltage.append(voltage + voltage_bias)
                    #print(seg,voltage)
                    self.fs_laser.append(0.0)
                    pos = pos + dt
                    voltage = voltage + dv

                    if fired == False:
                        if pos > self.fs_laser_time and self.fs_laser_time != -1:
                            fired = True
                            self.fs_laser[len(self.fs_laser) -
                                          1] = laser_pulse_width / dt

                    dt = dt * mul

            seg = seg + 1
示例#27
0
    def redraw(self):
        self.ax1.clear()
        self.x = []
        self.mag = []
        pos = 0
        ii = 0
        tot = 0.0
        for i in range(0, self.tab.rowCount()):
            tot = tot + float(self.tab.item(i, 0).text())

        mul, unit = distance_with_units(tot)
        total_pos = 0.0
        for i in range(0, self.tab.rowCount()):
            layer_length = float(self.tab.item(i, 0).text())
            layer_points = float(self.tab.item(i, 1).text())
            layer_mul = float(self.tab.item(i, 2).text())
            layer_left_right = tab_get_value(self.tab, i, 3)
            dx = layer_length / layer_points
            pos = dx / 2
            ii = 0
            temp_x = []
            temp_mag = []
            while (pos < layer_length):
                temp_x.append(pos)
                temp_mag.append(1.0)

                pos = pos + dx * pow(layer_mul, ii)

                ii = ii + 1
                #dx=dx*layer_mul
            for i in range(0, len(temp_x)):
                if layer_left_right == "left":
                    self.x.append((temp_x[i] + total_pos) * mul)
                else:
                    self.x.append((layer_length - temp_x[i] + total_pos) * mul)

                self.mag.append(temp_mag[i])
            total_pos = total_pos + layer_length

        c = np.linspace(0, 10, len(self.x))

        self.ax1.set_ylabel(_("Magnitude"))
        cmap = cm.jet
        self.ax1.clear()
        self.ax1.scatter(self.x, self.mag, c=c, cmap=cmap)
        self.fig.canvas.draw()
        self.ax1.set_xlabel(_("Thickness") + " (" + unit + ")")
        self.ax1.get_yaxis().set_visible(False)
        self.ax1.spines['top'].set_visible(False)
        self.ax1.spines['right'].set_visible(False)
        #self.ax1.spines['bottom'].set_visible(False)
        self.ax1.spines['left'].set_visible(False)
示例#28
0
    def save_model(self):

        thick = []
        mat_file = []
        dos_file = []
        pl_file = []
        name = []
        for i in range(0, self.tab.rowCount()):
            name.append(str(tab_get_value(self.tab, i, 0)))
            thick.append(str(tab_get_value(self.tab, i, 1)))
            mat_file.append(str(tab_get_value(self.tab, i, 2)))
            dos_file.append(str(tab_get_value(self.tab, i, 4)))
            pl_file.append(str(tab_get_value(self.tab, i, 5)))

        ret = epitaxy_load_from_arrays(name, thick, mat_file, dos_file,
                                       pl_file)
        if ret == False:
            error_dlg(self, _("Error in epitaxy, check the input values."))

        epitaxy_save(get_sim_path())
        self.clean_dos_files()
        epitaxy_mesh_update()
示例#29
0
    def rebuild_op_type_widgets(self):
        self.tab.blockSignals(True)
        items = []
        items.append("scan")
        items.append("constant")
        items.append("python_code")
        items.append("random_file_name")

        for i in range(0, self.tab.rowCount()):
            items.append(str(tab_get_value(self.tab, i, 2)))

        for i in range(0, self.tab.rowCount()):
            save_value = tab_get_value(self.tab, i, 4)

            combobox = QComboBox()
            for a in items:
                combobox.addItem(a)

            self.tab.setCellWidget(i, 4, combobox)

            tab_set_value(self.tab, i, 4, save_value)
            combobox.currentIndexChanged.connect(self.combo_mirror_changed)
        self.tab.blockSignals(False)
示例#30
0
 def check_mesh(self):
     try:
         for i in range(0, self.tab.rowCount()):
             length = float(tab_get_value(self.tab, i, 0))
             dt = float(tab_get_value(self.tab, i, 1))
             voltage_start = float(tab_get_value(self.tab, i, 2))
             voltage_stop = float(tab_get_value(self.tab, i, 3))
             mul = float(tab_get_value(self.tab, i, 4))
             sun = float(tab_get_value(self.tab, i, 5))
             laser = float(tab_get_value(self.tab, i, 6))
         return True
     except:
         return False
示例#31
0
	def build_mesh(self):
		self.laser=[]
		self.sun=[]
		self.voltage=[]
		self.time=[]
		self.fs_laser=[]
		pos=self.start_time
		fired=False

		laser_pulse_width=0.0


		sun_steady_state=float(inp_get_token_value("light.inp", "#Psun"))

		voltage_bias=float(inp_get_token_value("pulse"+str(self.index)+".inp", "#pulse_bias"))


		seg=0
		for i in range(0,self.tab.rowCount()):
			length=float(tab_get_value(self.tab,i, 0))
			end_time=pos+length
			dt=float(tab_get_value(self.tab,i, 1))
			voltage_start=float(tab_get_value(self.tab,i, 2))
			voltage_stop=float(tab_get_value(self.tab,i, 3))
			mul=float(tab_get_value(self.tab,i, 4))
			sun=float(tab_get_value(self.tab,i, 5))
			laser=float(tab_get_value(self.tab,i, 6))
			#print("VOLTAGE=",line[SEG_VOLTAGE],end_time,pos)

			if dt!=0.0 and mul!=0.0:
				voltage=voltage_start
				while(pos<end_time):
					dv=(voltage_stop-voltage_start)*(dt/length)
					self.time.append(pos)
					self.laser.append(laser)
					self.sun.append(sun+sun_steady_state)
					self.voltage.append(voltage+voltage_bias)
					#print(seg,voltage)
					self.fs_laser.append(0.0)
					pos=pos+dt
					voltage=voltage+dv

					if fired==False:
						if pos>self.fs_laser_time and self.fs_laser_time!=-1:
							fired=True
							self.fs_laser[len(self.fs_laser)-1]=laser_pulse_width/dt

					dt=dt*mul

			seg=seg+1
示例#32
0
    def save_combo(self):
        lines = []
        for i in range(0, self.tab.rowCount()):
            lines.append("#duplicate_section" + str(i))
            lines.append(str(tab_get_value(self.tab, i, 1)))
            lines.append(str(tab_get_value(self.tab, i, 2)))
            lines.append(str(tab_get_value(self.tab, i, 3)))
            lines.append(str(tab_get_value(self.tab, i, 4)))
            lines.append(str(tab_get_value(self.tab, i, 5)))
            lines.append(str(tab_get_value(self.tab, i, 6)))
            lines.append(str(tab_get_value(self.tab, i, 0)))

        lines.append("#ver")
        lines.append("1.0")
        lines.append("#end")
        print("save as", self.file_name)
        inp_save_lines_to_file(self.file_name, lines)
示例#33
0
	def update_contact_db(self):
		for i in range(0,self.tab.rowCount()):
			try:
				float(tab_get_value(self.tab,i, 0))
				float(tab_get_value(self.tab,i, 2))
				float(tab_get_value(self.tab,i, 3))
				float(tab_get_value(self.tab,i, 1))
			except:
				return False

		contacts_clear()
		for i in range(0,self.tab.rowCount()):
			contacts_append(float(tab_get_value(self.tab,i, 0)),float(tab_get_value(self.tab,i, 2)),float(tab_get_value(self.tab,i, 3)),float(tab_get_value(self.tab,i, 1)),str2bool(tab_get_value(self.tab,i, 4)))	
		return True
示例#34
0
	def update_contact_db(self):
		for i in range(0,self.tab.rowCount()):
			try:
				float(tab_get_value(self.tab,i, 3))
				float(tab_get_value(self.tab,i, 4))
				float(tab_get_value(self.tab,i, 5))
				float(tab_get_value(self.tab,i, 6))
			except:
				return False

		contacts_clear()
		for i in range(0,self.tab.rowCount()):
			contacts_append(tab_get_value(self.tab,i, 0),tab_get_value(self.tab,i, 1),str2bool(tab_get_value(self.tab,i, 2)),float(tab_get_value(self.tab,i, 3)),float(tab_get_value(self.tab,i, 4)),float(tab_get_value(self.tab,i, 5)),float(tab_get_value(self.tab,i, 6)))
		return True
示例#35
0
	def layer_type_edit(self):
		for i in range(0,self.tab.rowCount()):
			if tab_get_value(self.tab,i,3).lower()=="active layer" and tab_get_value(self.tab,i,4).startswith("dos")==False:
				tab_set_value(self.tab,i,4,epitay_get_next_dos())
				tab_set_value(self.tab,i,5,epitay_get_next_pl())

				mat_dir=os.path.join(get_materials_path(),tab_get_value(self.tab,i,2))
				
				new_file=tab_get_value(self.tab,i,4)+".inp"
				if inp_isfile(new_file)==False:
					inp_copy_file(new_file,os.path.join(mat_dir,"dos.inp"))

				new_file=tab_get_value(self.tab,i,5)+".inp"
				if inp_isfile(new_file)==False:
					inp_copy_file(new_file,os.path.join(mat_dir,"pl.inp"))

			if tab_get_value(self.tab,i,3).lower()!="active layer" and tab_get_value(self.tab,i,4).startswith("dos")==True:
				tab_set_value(self.tab,i,4,tab_get_value(self.tab,i,3))
				tab_set_value(self.tab,i,5,"none")

		self.save_model()
		self.emit_change()
示例#36
0
    def save(self):
        if self.xyz == "y":
            mesh_clear_ylist()
        elif self.xyz == "x":
            mesh_clear_xlist()
        elif self.xyz == "z":
            mesh_clear_zlist()

        for i in range(0, self.tab.rowCount()):
            mesh_add(self.xyz, float(self.tab.item(i, 0).text()),
                     float(self.tab.item(i, 1).text()),
                     float(self.tab.item(i, 2).text()),
                     tab_get_value(self.tab, i, 3))

        if self.xyz == "y":
            mesh_save_y()
        elif self.xyz == "x":
            mesh_save_x()
        elif self.xyz == "z":
            mesh_save_z()
示例#37
0
	def save_data(self):
		file_name="time_mesh_config"+str(self.index)+".inp"
		scan_remove_file(file_name)

		out_text=[]
		out_text.append("#start_time")
		out_text.append(str(float(self.start_time)))
		out_text.append("#fs_laser_time")
		out_text.append(str(float(self.fs_laser_time)))
		out_text.append("#time_segments")
		out_text.append(str(self.tab.rowCount()))

		for i in range(0,self.tab.rowCount()):
			out_text.append("#time_segment"+str(i)+"_len")
			out_text.append(str(tab_get_value(self.tab,i, 0)))

			out_text.append("#time_segment"+str(i)+"_dt")
			out_text.append(str(tab_get_value(self.tab,i, 1)))

			out_text.append("#time_segment"+str(i)+"_voltage_start")
			out_text.append(str(tab_get_value(self.tab,i, 2)))

			out_text.append("#time_segment"+str(i)+"_voltage_stop")
			out_text.append(str(tab_get_value(self.tab,i, 3)))

			out_text.append("#time_segment"+str(i)+"_mul")
			out_text.append(str(tab_get_value(self.tab,i, 4)))

			out_text.append("#time_segment"+str(i)+"_sun")
			out_text.append(str(tab_get_value(self.tab,i, 5)))

			out_text.append("#time_segment"+str(i)+"_laser")
			out_text.append(str(tab_get_value(self.tab,i, 6)))

		out_text.append("#ver")
		out_text.append("1.1")
		out_text.append("#end")

		inp_write_lines_to_file(os.path.join(os.getcwd(),file_name),out_text)
		self.update_scan_tokens()
示例#38
0
    def save_data(self):
        scan_remove_file(self.file_name)

        out_text = []
        out_text.append("#start_time")
        out_text.append(str(float(self.start_time)))
        out_text.append("#fs_laser_time")
        out_text.append(str(float(self.fs_laser_time)))
        out_text.append("#time_segments")
        out_text.append(str(self.tab.rowCount()))

        for i in range(0, self.tab.rowCount()):
            out_text.append("#time_segment" + str(i) + "_len")
            out_text.append(str(tab_get_value(self.tab, i, 0)))

            out_text.append("#time_segment" + str(i) + "_dt")
            out_text.append(str(tab_get_value(self.tab, i, 1)))

            out_text.append("#time_segment" + str(i) + "_voltage_start")
            out_text.append(str(tab_get_value(self.tab, i, 2)))

            out_text.append("#time_segment" + str(i) + "_voltage_stop")
            out_text.append(str(tab_get_value(self.tab, i, 3)))

            out_text.append("#time_segment" + str(i) + "_mul")
            out_text.append(str(tab_get_value(self.tab, i, 4)))

            out_text.append("#time_segment" + str(i) + "_sun")
            out_text.append(str(tab_get_value(self.tab, i, 5)))

            out_text.append("#time_segment" + str(i) + "_laser")
            out_text.append(str(tab_get_value(self.tab, i, 6)))

        out_text.append("#ver")
        out_text.append("1.1")
        out_text.append("#end")

        inp_save(os.path.join(get_sim_path(), self.file_name), out_text)
        self.update_scan_tokens()
示例#39
0
    def layer_type_edit(self):
        for i in range(0, self.tab.rowCount()):
            if tab_get_value(self.tab, i,
                             3).lower() == "active layer" and tab_get_value(
                                 self.tab, i, 4).startswith("dos") == False:
                tab_set_value(self.tab, i, 4, epitay_get_next_dos())
                tab_set_value(self.tab, i, 5, epitay_get_next_pl())

                mat_dir = os.path.join(get_materials_path(),
                                       tab_get_value(self.tab, i, 2))

                new_file = tab_get_value(self.tab, i, 4) + ".inp"
                if inp_isfile(new_file) == False:
                    dos_path = os.path.join(mat_dir, "dos.inp")
                    if os.path.isfile(dos_path) == False:
                        dos_path = os.path.join(get_default_material_path(),
                                                "dos.inp")
                    inp_copy_file(new_file, dos_path)

                new_file = tab_get_value(self.tab, i, 5) + ".inp"
                if inp_isfile(new_file) == False:
                    inp_copy_file(new_file, os.path.join(mat_dir, "pl.inp"))

            if tab_get_value(self.tab, i,
                             3).lower() != "active layer" and tab_get_value(
                                 self.tab, i, 4).startswith("dos") == True:
                tab_set_value(self.tab, i, 4, tab_get_value(self.tab, i, 3))
                tab_set_value(self.tab, i, 5, "none")

            if tab_get_value(self.tab, i, 3).lower() == "other":
                tab_set_value(self.tab, i, 4, tab_get_value(self.tab, i, 3))

            if tab_get_value(self.tab, i, 3).lower() == "contact":
                tab_set_value(self.tab, i, 4, tab_get_value(self.tab, i, 3))

        self.save_model()
        self.emit_change()
        global_object_run("dos_update")
        global_object_run("pl_update")