def do_xoppy_calculation(self): descriptor = Crystal_GetCrystalsList()[self.CRYSTAL] # Note that the output is a list of python scripts. # TODO: see how to send a script. TO be sent to the "python script" widget? # For the moment, this widget does not send anything!! list_of_scripts = mare_calc(descriptor, self.H, self.K, self.L, self.HMAX, self.KMAX, self.LMAX, self.FHEDGE, self.DISPLAY, self.LAMBDA, self.DELTALAMBDA, self.PHI, self.DELTAPHI) self.number_of_scripts = len(list_of_scripts) self.initializeTabs() return list_of_scripts
def build_gui(self): box = oasysgui.widgetBox(self.controlArea, self.name + " Input Parameters", orientation="vertical", width=self.CONTROL_AREA_WIDTH-5) idx = -1 #widget index 3 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "CRYSTAL_MATERIAL", label=self.unitLabels()[idx], addSpace=False, items=Crystal_GetCrystalsList(), valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 4 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "MILLER_INDEX_H", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 5 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "MILLER_INDEX_K", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 6 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "MILLER_INDEX_L", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 8 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "TEMPER", label=self.unitLabels()[idx], addSpace=False, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 9 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "MOSAIC", label=self.unitLabels()[idx], addSpace=False, items=['Perfect crystal', 'Mosaic', 'Bent Crystal ML', 'Bent Crystal PP'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 10 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "GEOMETRY", label=self.unitLabels()[idx], addSpace=False, items=['BRAGG: diffr beam', 'LAUE: diffr beam', 'BRAGG: transm beam', 'LAUE: transm beam'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 11 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "SCAN", label=self.unitLabels()[idx], addSpace=False, items=['Theta (absolute)', 'Th - Th Bragg (corrected)', 'Th - Th Bragg', 'Energy [eV]', 'y (Zachariasen)'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 12 idx += 1 box1 = gui.widgetBox(box) self.unit_combo = gui.comboBox(box1, self, "UNIT", label=self.unitLabels()[idx], addSpace=False, items=['Radians', 'micro rads', 'Degrees', 'ArcSec'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 13 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "SCANFROM", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 14 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "SCANTO", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 15 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "SCANPOINTS", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 16 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "ENERGY", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 17 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "ASYMMETRY_ANGLE", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 18 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "THICKNESS", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 19 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "MOSAIC_FWHM", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 20 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "RSAG", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 21 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "RMER", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 22 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "ANISOTROPY", label=self.unitLabels()[idx], addSpace=False, items=['None (isotropic)', 'Default cut', 'Cut directions', 'From file'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 23 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "POISSON", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 24 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "CUT", label=self.unitLabels()[idx], addSpace=False, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 25 idx += 1 box1 = gui.widgetBox(box) file_box = oasysgui.widgetBox(box1, "", addSpace=False, orientation="horizontal", height=25) self.le_file_compliance = oasysgui.lineEdit(file_box, self, "FILECOMPLIANCE", label=self.unitLabels()[idx], addSpace=False, orientation="horizontal") self.show_at(self.unitFlags()[idx], box1) gui.button(file_box, self, "...", callback=self.selectFile)
def xoppy_calc_xcrystal(self): CRYSTAL_MATERIAL = self.CRYSTAL_MATERIAL MILLER_INDEX_H = self.MILLER_INDEX_H MILLER_INDEX_K = self.MILLER_INDEX_K MILLER_INDEX_L = self.MILLER_INDEX_L TEMPER = self.TEMPER MOSAIC = self.MOSAIC GEOMETRY = self.GEOMETRY SCAN = self.SCAN UNIT = self.UNIT SCANFROM = self.SCANFROM SCANTO = self.SCANTO SCANPOINTS = self.SCANPOINTS ENERGY = self.ENERGY ASYMMETRY_ANGLE = self.ASYMMETRY_ANGLE THICKNESS = self.THICKNESS MOSAIC_FWHM = self.MOSAIC_FWHM RSAG = self.RSAG RMER = self.RMER ANISOTROPY = self.ANISOTROPY POISSON = self.POISSON CUT = self.CUT FILECOMPLIANCE = self.FILECOMPLIANCE for file in ["diff_pat.dat","diff_pat.gle","diff_pat.par","diff_pat.xop","xcrystal.bra"]: try: os.remove(os.path.join(locations.home_bin_run(),file)) except: pass if (GEOMETRY == 1) or (GEOMETRY == 3): if ASYMMETRY_ANGLE == 0.0: print("xoppy_calc_xcrystal: WARNING: In xcrystal the asymmetry angle is the angle between Bragg planes and crystal surface,"+ "in BOTH Bragg and Laue geometries.") descriptor = Crystal_GetCrystalsList()[CRYSTAL_MATERIAL] if SCAN == 3: # energy scan emin = SCANFROM - 1 emax = SCANTO + 1 else: emin = ENERGY - 100.0 emax = ENERGY + 100.0 print("Using crystal descriptor: ",descriptor) bragg_dictionary = bragg_calc(descriptor=descriptor, hh=MILLER_INDEX_H,kk=MILLER_INDEX_K,ll=MILLER_INDEX_L, temper=float(TEMPER), emin=emin,emax=emax,estep=5.0,fileout="xcrystal.bra") with open("xoppy.inp", "wt") as f: f.write("xcrystal.bra\n") f.write("%d\n"%MOSAIC) f.write("%d\n"%GEOMETRY) if MOSAIC == 1: f.write("%g\n"%MOSAIC_FWHM) f.write("%g\n"%THICKNESS) else: f.write("%g\n"%THICKNESS) f.write("%g\n"%ASYMMETRY_ANGLE) scan_flag = 1 + SCAN f.write("%d\n"%scan_flag) f.write("%19.9f\n"%ENERGY) if scan_flag <= 3: f.write("%d\n"%UNIT) f.write("%g\n"%SCANFROM) f.write("%g\n"%SCANTO) f.write("%d\n"%SCANPOINTS) if MOSAIC > 1: # bent f.write("%g\n"%RSAG) f.write("%g\n"%RMER) f.write("0\n") if ( (descriptor == "Si") or (descriptor == "Si2") or (descriptor == "Si_NIST") or (descriptor == "Ge") or descriptor == "Diamond"): pass else: # not Si,Ge,Diamond if ((ANISOTROPY == 1) or (ANISOTROPY == 2)): raise Exception("Anisotropy data not available for this crystal. Either use isotropic or use external compliance file. Please change and run again'") f.write("%d\n"%ANISOTROPY) if ANISOTROPY == 0: f.write("%g\n"%POISSON) elif ANISOTROPY == 1: f.write("%d\n"%CRYSTAL_MATERIAL) f.write("%g\n"%ASYMMETRY_ANGLE) f.write("%d\n"%MILLER_INDEX_H) f.write("%d\n"%MILLER_INDEX_K) f.write("%d\n"%MILLER_INDEX_L) elif ANISOTROPY == 2: f.write("%d\n"%CRYSTAL_MATERIAL) f.write("%g\n"%ASYMMETRY_ANGLE) # TODO: check syntax for CUT: Cut syntax is: valong_X valong_Y valong_Z ; vnorm_X vnorm_Y vnorm_Z ; vperp_x vperp_Y vperp_Z f.write("%s\n"%CUT.split(";")[0]) f.write("%s\n"%CUT.split(";")[1]) f.write("%s\n"%CUT.split(";")[2]) elif ANISOTROPY == 3: f.write("%s\n"%FILECOMPLIANCE) command = "'" + os.path.join(locations.home_bin(), 'diff_pat') + "' < xoppy.inp" print("Running command '%s' in directory: %s "%(command, locations.home_bin_run())) print("\n--------------------------------------------------------\n") os.system(command) print("\n--------------------------------------------------------\n") #show calculated parameters in standard output txt_info = open("diff_pat.par").read() for line in txt_info: print(line,end="") calculated_data = DataExchangeObject("XOPPY", self.get_data_exchange_widget_name()) try: calculated_data.add_content("xoppy_data", numpy.loadtxt("diff_pat.dat", skiprows=5)) calculated_data.add_content("plot_x_col",0) calculated_data.add_content("plot_y_col",-1) calculated_data.add_content("units_to_degrees", self.get_units_to_degrees()) except Exception as e: raise Exception("Error loading diff_pat.dat :" + str(e)) try: calculated_data.add_content("labels", ["Th-ThB{in} [" + self.unit_combo.itemText(self.UNIT) + "]", "Th-ThB{out} [" + self.unit_combo.itemText(self.UNIT) + "]", "phase_p[rad]", "phase_s[rad]","Circ Polariz", "p-polarized reflectivity", "s-polarized reflectivity"]) except: pass try: with open("diff_pat.par") as f: info = f.readlines() calculated_data.add_content("info",info) except: pass return calculated_data
def build_gui(self): box = oasysgui.widgetBox(self.controlArea, self.name + " Input Parameters", orientation="vertical", width=self.CONTROL_AREA_WIDTH - 5) idx = -1 #widget index 3 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "ILATTICE", label=self.unitLabels()[idx], addSpace=False, items=Crystal_GetCrystalsList(), valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 4 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "HMILLER", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 5 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "KMILLER", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 6 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "LMILLER", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 7 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "plot_variable", label=self.unitLabels()[idx], addSpace=False, items=self.plotOptionList()[2:], valueType=int, orientation="horizontal", labelWidth=150) self.show_at(self.unitFlags()[idx], box1) #widget index 8 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "TEMPER", label=self.unitLabels()[idx], addSpace=False, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 9 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "ENERGY", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 10 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "ENERGY_END", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 11 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "NPOINTS", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) # widget index 12 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "DUMP_TO_FILE", label=self.unitLabels()[idx], addSpace=True, items=["No", "Yes"], orientation="horizontal") self.show_at(self.unitFlags()[idx], box1) # widget index 13 idx += 1 box1 = gui.widgetBox(box) gui.lineEdit(box1, self, "FILE_NAME", label=self.unitLabels()[idx], addSpace=True) self.show_at(self.unitFlags()[idx], box1) gui.rubber(self.controlArea)
def xoppy_calc_xfh(self): #TODO: remove I_ABSORP ILATTICE = self.ILATTICE HMILLER = self.HMILLER KMILLER = self.KMILLER LMILLER = self.LMILLER I_PLOT = self.I_PLOT TEMPER = self.TEMPER ENERGY = self.ENERGY ENERGY_END = self.ENERGY_END NPOINTS = self.NPOINTS descriptor = Crystal_GetCrystalsList()[ILATTICE] print("Using crystal descriptor: ", descriptor) bragg_dictionary = bragg_calc(descriptor=descriptor, hh=HMILLER, kk=KMILLER, ll=LMILLER, temper=TEMPER, emin=ENERGY, emax=ENERGY_END, estep=50.0, fileout=None) energy = numpy.linspace(ENERGY, ENERGY_END, NPOINTS) out = numpy.zeros((25, NPOINTS)) info = "" for i, ienergy in enumerate(energy): dic2 = crystal_fh(bragg_dictionary, ienergy) print("Energy=%g eV FH=(%g,%g)" % (ienergy, dic2["STRUCT"].real, dic2["STRUCT"].imag)) out[0, i] = ienergy out[1, i] = dic2["WAVELENGTH"] * 1e10 out[2, i] = dic2["THETA"] * 180 / numpy.pi out[3, i] = dic2["F_0"].real out[4, i] = dic2["F_0"].imag out[5, i] = dic2["FH"].real out[6, i] = dic2["FH"].imag out[7, i] = dic2["FH_BAR"].real out[8, i] = dic2["FH_BAR"].imag out[9, i] = dic2["psi_0"].real out[10, i] = dic2["psi_0"].imag out[11, i] = dic2["psi_h"].real out[12, i] = dic2["psi_h"].imag out[13, i] = dic2["psi_hbar"].real out[14, i] = dic2["psi_hbar"].imag out[15, i] = dic2["STRUCT"].real out[16, i] = dic2["STRUCT"].imag out[17, i] = dic2["DELTA_REF"] out[18, i] = dic2["REFRAC"].real out[19, i] = dic2["REFRAC"].imag out[20, i] = dic2["ABSORP"] out[21, i] = 1e6 * dic2["ssr"] # in microrads out[22, i] = 1e6 * dic2["spr"] # in microrads out[23, i] = dic2["RATIO"] out[24, i] = dic2["psi_over_f"] info += "#\n#\n#\n" info += dic2["info"] #send exchange calculated_data = DataExchangeObject( "XOPPY", self.get_data_exchange_widget_name()) try: calculated_data.add_content("xoppy_data", out.T) calculated_data.add_content("plot_x_col", 0) calculated_data.add_content("plot_y_col", I_PLOT) except: pass try: calculated_data.add_content("labels", self.plotOptionList()) except: pass try: calculated_data.add_content("info", info) except: pass if self.DUMP_TO_FILE: with open(self.FILE_NAME, "w") as file: try: file.write("#F %s\n" % self.FILE_NAME) file.write("\n#S 1 xoppy CrossSec results\n") file.write("#N %d\n" % (out.shape[0])) tmp = "#L" for item in self.plotOptionList(): tmp += " %s" % (item) tmp += "\n" file.write(tmp) for j in range(out.shape[1]): file.write( ("%19.12e " * out.shape[0] + "\n") % tuple(out[i, j] for i in range(out.shape[0]))) file.close() print("File written to disk: %s \n" % self.FILE_NAME) except: raise Exception( "CrossSec: The data could not be dumped onto the specified file!\n" ) return calculated_data
def build_gui(self): box = oasysgui.widgetBox(self.controlArea, self.name + " Input Parameters", orientation="vertical", width=self.CONTROL_AREA_WIDTH-5) idx = -1 #widget index 0 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "CRYSTAL", label=self.unitLabels()[idx], addSpace=False, items=Crystal_GetCrystalsList(), valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 1 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "H", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 2 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "K", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 3 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "L", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 4 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "HMAX", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 5 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "KMAX", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 6 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "LMAX", label=self.unitLabels()[idx], addSpace=False, valueType=int, validator=QIntValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 7 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "FHEDGE", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 8 idx += 1 box1 = gui.widgetBox(box) gui.comboBox(box1, self, "DISPLAY", label=self.unitLabels()[idx], addSpace=False, items=['Spaghetti', 'Spaghetti+Umweg', 'Spaghetti+Glitches', 'All'], valueType=int, orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 9 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "LAMBDA", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 10 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "DELTALAMBDA", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 11 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "PHI", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) #widget index 12 idx += 1 box1 = gui.widgetBox(box) oasysgui.lineEdit(box1, self, "DELTAPHI", label=self.unitLabels()[idx], addSpace=False, valueType=float, validator=QDoubleValidator(), orientation="horizontal", labelWidth=250) self.show_at(self.unitFlags()[idx], box1) gui.rubber(self.controlArea)