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 = []
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()
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()
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()
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()
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)
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()
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()
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()
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
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
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)
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)
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)
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 ""
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 ""
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()
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)
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)
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()
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)
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
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)
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()
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)
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
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)
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()
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)
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
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
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)
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
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
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()
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()
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()
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()
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")