def check_fields(self): congruence.checkStrictlyPositiveNumber(self.nCRL, "Number of Lenses") congruence.checkPositiveNumber(self.delta, "delta") congruence.checkPositiveNumber(self.attenLen, "Attenuation length") congruence.checkPositiveNumber(self.diamCRL, "CRL diameter") congruence.checkPositiveNumber(self.distance, "Distance to next")
def check_fields(self): self.alpha = congruence.checkAngle(self.alpha, "Incidence Angle") self.length = congruence.checkStrictlyPositiveNumber( self.length, "Length") if self.use_figure_error == 1: congruence.checkFileName(self.figure_error_file) if self.use_roughness == 1: congruence.checkFileName(self.roughness_file) if self.calculation_type == 1: congruence.checkStrictlyPositiveNumber(self.number_of_points, "Number of Points") if self.use_multipool == 1: congruence.checkStrictlyPositiveNumber(self.n_pools, "Nr. Parallel Processes") if self.force_cpus == 0: if self.number_of_cpus == 1: raise Exception( "Parallel processing not available with 1 CPU") elif self.n_pools >= self.number_of_cpus: raise Exception( "Max number of parallel processes allowed on this computer (" + str(self.number_of_cpus) + ")")
def check_fields(self): self.ENERGY = congruence.checkStrictlyPositiveNumber( self.ENERGY, "Electron Energy") self.CURRENT = congruence.checkStrictlyPositiveNumber( self.CURRENT, "Current") self.ENERGY_SPREAD = congruence.checkStrictlyPositiveNumber( self.ENERGY_SPREAD, "Energy Spread") self.SIGX = congruence.checkPositiveNumber(self.SIGX, "Sigma X") self.SIGY = congruence.checkPositiveNumber(self.SIGY, "Sigma Y") self.SIGX1 = congruence.checkPositiveNumber(self.SIGX1, "Sigma X'") self.SIGY1 = congruence.checkPositiveNumber(self.SIGY1, "Sigma Y'") self.PERIOD = congruence.checkStrictlyPositiveNumber( self.PERIOD, "Period length") self.NP = congruence.checkStrictlyPositiveNumber( self.NP, "Number of periods") self.EMIN = congruence.checkPositiveNumber(self.EMIN, "E1 minimum energy") self.EMAX = congruence.checkStrictlyPositiveNumber( self.EMAX, "E1 maximum energy") congruence.checkLessThan(self.EMIN, self.EMAX, "E1 minimum energy", "E1 maximum energy") self.N = congruence.checkStrictlyPositiveNumber( self.N, "Number of Energy Points") self.HARMONIC_FROM = congruence.checkStrictlyPositiveNumber( self.HARMONIC_FROM, "Minimum harmonic number") self.HARMONIC_TO = congruence.checkStrictlyPositiveNumber( self.HARMONIC_TO, "Maximum harmonic number") congruence.checkLessThan(self.HARMONIC_FROM, self.HARMONIC_TO, "Minimum harmonic number", "Maximum harmonic number") self.HARMONIC_STEP = congruence.checkStrictlyPositiveNumber( self.HARMONIC_STEP, "Harmonic step size") self.NEKS = congruence.checkPositiveNumber(self.NEKS, "Intrinsic NEKS")
def manage_acceptance_slits(self, shadow_oe): if self.add_acceptance_slits == 1: congruence.checkStrictlyPositiveNumber(self.auto_slit_width_xaxis, "Slit width/x-axis") congruence.checkStrictlyPositiveNumber(self.auto_slit_height_zaxis, "Slit height/z-axis") n_screen = 1 i_screen = numpy.zeros(10) # after i_abs = numpy.zeros(10) i_slit = numpy.zeros(10) i_stop = numpy.zeros(10) k_slit = numpy.zeros(10) thick = numpy.zeros(10) file_abs = ['', '', '', '', '', '', '', '', '', ''] rx_slit = numpy.zeros(10) rz_slit = numpy.zeros(10) sl_dis = numpy.zeros(10) file_scr_ext = ['', '', '', '', '', '', '', '', '', ''] cx_slit = numpy.zeros(10) cz_slit = numpy.zeros(10) i_screen[0] = 1 i_slit[0] = 1 rx_slit[0] = self.auto_slit_width_xaxis rz_slit[0] = self.auto_slit_height_zaxis cx_slit[0] = self.auto_slit_center_xaxis cz_slit[0] = self.auto_slit_center_zaxis shadow_oe._oe.set_screens(n_screen, i_screen, i_abs, sl_dis, i_slit, i_stop, k_slit, thick, numpy.array(file_abs), rx_slit, rz_slit, cx_slit, cz_slit, numpy.array(file_scr_ext))
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") if self.MAT_FLAG == 1: self.DENSITY = congruence.checkStrictlyPositiveNumber( self.DENSITY, "density") if self.GRID > 0: self.GRIDSTART = congruence.checkPositiveNumber( self.GRIDSTART, "Starting Energy") if self.GRID == 1: self.GRIDEND = congruence.checkStrictlyPositiveNumber( self.GRIDEND, "Energy to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Starting Energy", "Energy to") self.GRIDN = congruence.checkStrictlyPositiveNumber( self.GRIDN, "Number of points") if self.CALCULATE >= 7 and self.CALCULATE <= 9: self.ROUGH = congruence.checkPositiveNumber( self.ROUGH, "Roughness") self.THETA1 = congruence.checkPositiveNumber( self.THETA1, "Starting Graz angle") if self.THETAGRID == 1: self.THETA2 = congruence.checkStrictlyPositiveNumber( self.THETA2, "Graz angle to") congruence.checkLessThan(self.THETA1, self.THETA2, "Starting Graz angle", "Graz angle to") self.THETAN = congruence.checkStrictlyPositiveNumber( self.THETAN, "Number of angular points") else: self.THETAGRID = 0
def generate_energy_spectrum(self): if self.input_beam is None: return try: if self.input_beam.getOEHistory(oe_number=0)._shadow_source_end.src.FSOURCE_DEPTH == 1: raise Exception("Source has no depth, calcution could be inconsistent") if self.kind_of_calculation == 1: congruence.checkFile(self.user_file) else: congruence.checkStrictlyPositiveNumber(self.factor, "Proportionality factor (k) [to eV/Å]") congruence.checkStrictlyPositiveNumber(self.central_value, "Central Energy/Wavelength Value [eV/Å]") beam_out = self.input_beam.duplicate() if self.kind_of_calculation == 0: for index in range(0, len(beam_out._beam.rays)): if self.units == 0: beam_out._beam.rays[index, 10] = ShadowPhysics.getShadowKFromEnergy(self.central_value + self.factor*beam_out._beam.rays[index, 1]) else: beam_out._beam.rays[index, 10] = ShadowPhysics.getShadowKFromWavelength(self.central_value + self.factor*beam_out._beam.rays[index, 1]) else: self.load_energy_distribution() for index in range(0, len(beam_out._beam.rays)): if self.units == 0: beam_out._beam.rays[index, 10] = ShadowPhysics.getShadowKFromEnergy(self.get_value_from_y(beam_out._beam.rays[index, 1])) else: beam_out._beam.rays[index, 10] = ShadowPhysics.getShadowKFromWavelength(self.get_value_from_y(beam_out._beam.rays[index, 1])) self.send("Beam", beam_out) except Exception as exception: QtGui.QMessageBox.critical(self, "Error", str(exception), QtGui.QMessageBox.Ok)
def checkFields(self): congruence.checkPositiveNumber(self.energy_per_pulse, "Energy per pulse") congruence.checkPositiveNumber(self.horizontal_sigma_at_waist, "\u03c3x at waist") congruence.checkPositiveNumber(self.vertical_sigma_at_waist, "\u03c3y at waist") congruence.checkPositiveNumber(self.pulse_duration, "Pulse duration") congruence.checkPositiveNumber( self.transverse_gauss_hermite_mode_order_x, "Transverse Gauss-Hermite mode order x") congruence.checkPositiveNumber( self.transverse_gauss_hermite_mode_order_y, "Transverse Gauss-Hermite mode order y") # WAVEFRONT congruence.checkStrictlyPositiveNumber( self.wf_photon_energy, "Wavefront Propagation Photon Energy") congruence.checkStrictlyPositiveNumber( self.wf_h_slit_gap, "Wavefront Propagation H Slit Gap") congruence.checkStrictlyPositiveNumber( self.wf_v_slit_gap, "Wavefront Propagation V Slit Gap") congruence.checkStrictlyPositiveNumber( self.wf_h_slit_points, "Wavefront Propagation H Slit Points") congruence.checkStrictlyPositiveNumber( self.wf_v_slit_points, "Wavefront Propagation V Slit Points") congruence.checkPositiveNumber(self.wf_distance, "Wavefront Propagation Distance") congruence.checkPositiveNumber( self.wf_sampling_factor_for_adjusting_nx_ny, "Wavefront Propagation Sampling Factor for adjusting nx/ny")
def checkFields(self): self.number_of_rays = congruence.checkPositiveNumber(self.number_of_rays, "Number of rays") self.seed = congruence.checkPositiveNumber(self.seed, "Seed") self.e_min = congruence.checkPositiveNumber(self.e_min, "Minimum energy") self.e_max = congruence.checkPositiveNumber(self.e_max, "Maximum energy") congruence.checkLessThan(self.e_min, self.e_max, "Minimum energy", "Maximum energy") self.max_number_of_rejected_rays = congruence.checkPositiveNumber(self.max_number_of_rejected_rays, "Max Number of Rejected Rays") self.slit_distance = congruence.checkPositiveNumber(self.slit_distance, "Horizontal half-divergence from [+]") self.min_x = congruence.checkNumber(self.min_x, "Min X/Min Xp") self.max_x = congruence.checkNumber(self.max_x, "Max X/Max Xp") self.min_z = congruence.checkNumber(self.min_z, "Min X/Min Xp") self.max_z = congruence.checkNumber(self.max_z, "Max X/Max Xp") self.energy = congruence.checkPositiveNumber(self.energy, "Energy") self.electron_current = congruence.checkPositiveNumber(self.electron_current, "Electron Current") self.sigma_x = congruence.checkPositiveNumber(self.sigma_x, "Sigma x") self.sigma_z = congruence.checkPositiveNumber(self.sigma_z, "Sigma z") self.emittance_x = congruence.checkPositiveNumber(self.emittance_x, "Emittance x") self.emittance_z = congruence.checkPositiveNumber(self.emittance_z, "Emittance z") self.distance_from_waist_x = congruence.checkNumber(self.distance_from_waist_x, "Distance from waist x") self.distance_from_waist_z = congruence.checkNumber(self.distance_from_waist_z, "Distance from waist z") self.number_of_periods = congruence.checkStrictlyPositiveNumber(self.number_of_periods, "Number of periods") self.k_value = congruence.checkStrictlyPositiveNumber(self.k_value, "K value") self.id_period = congruence.checkStrictlyPositiveNumber(self.id_period, "ID period") if self.optimize_source_combo == 1: congruence.checkFile(self.file_with_phase_space_volume) if self.type_combo == 1: congruence.checkFile(self.file_with_b_vs_y) elif self.type_combo == 2: congruence.checkFile(self.file_with_harmonics)
def get_size_parameters(self): if self.active == 1: if not self.mu_function == 1: congruence.checkStrictlyPositiveNumber(self.mu, "\u03bc or D") if self.cb_distribution.currentText( ) != Distribution.DELTA and not self.sigma_function == 1: congruence.checkStrictlyPositiveNumber(self.sigma, "\u03c3") if self.cb_distribution.currentText( ) == Distribution.DELTA and not self.fit_global_parameters.measured_dataset.phases[ self.index].use_structure: raise Exception( "Delta Distribution cannot be used when the structural model is not activated" ) return SizeParameters( shape=self.cb_shape.currentText(), distribution=self.cb_distribution.currentText(), mu=OWGenericWidget.get_fit_parameter_from_widget( self, "mu", self.get_parameters_prefix()), sigma=None if self.cb_distribution.currentText() == Distribution.DELTA else OWGenericWidget.get_fit_parameter_from_widget( self, "sigma", self.get_parameters_prefix()), truncation=OWGenericWidget.get_fit_parameter_from_widget( self, "truncation", self.get_parameters_prefix()) if (self.cb_distribution.currentText() == Distribution.LOGNORMAL and self.cb_shape.currentText() == Shape.WULFF) else None, cube_face=self.cb_cube_face.currentText() if (self.cb_distribution.currentText() == Distribution.LOGNORMAL and self.cb_shape.currentText() == Shape.WULFF) else None, add_saxs=self.add_saxs if self.cb_distribution.currentText() == Distribution.DELTA else False, normalize_to=self.normalize_to if self.cb_distribution.currentText() == Distribution.DELTA else None, active=self.active == 1)
def checkFields(self): self.number_of_rays = congruence.checkPositiveNumber(self.number_of_rays, "Number of rays") self.seed = congruence.checkPositiveNumber(self.seed, "Seed") self.e_min = congruence.checkPositiveNumber(self.e_min, "Minimum energy") self.e_max = congruence.checkPositiveNumber(self.e_max, "Maximum energy") congruence.checkLessThan(self.e_min, self.e_max, "Minimum energy", "Maximum energy") self.max_number_of_rejected_rays = congruence.checkPositiveNumber(self.max_number_of_rejected_rays, "Max Number of Rejected Rays") self.slit_distance = congruence.checkPositiveNumber(self.slit_distance, "Horizontal half-divergence from [+]") self.min_x = congruence.checkNumber(self.min_x, "Min X/Min Xp") self.max_x = congruence.checkNumber(self.max_x, "Max X/Max Xp") self.min_z = congruence.checkNumber(self.min_z, "Min X/Min Xp") self.max_z = congruence.checkNumber(self.max_z, "Max X/Max Xp") self.energy = congruence.checkPositiveNumber(self.energy, "Energy") self.electron_current = congruence.checkPositiveNumber(self.electron_current, "Electron Current") self.sigma_x = congruence.checkPositiveNumber(self.sigma_x, "Sigma x") self.sigma_z = congruence.checkPositiveNumber(self.sigma_z, "Sigma z") self.emittance_x = congruence.checkPositiveNumber(self.emittance_x, "Emittance x") self.emittance_z = congruence.checkPositiveNumber(self.emittance_z, "Emittance z") self.distance_from_waist_x = congruence.checkNumber(self.distance_from_waist_x, "Distance from waist x") self.distance_from_waist_z = congruence.checkNumber(self.distance_from_waist_z, "Distance from waist z") self.number_of_periods = congruence.checkStrictlyPositiveNumber(self.number_of_periods, "Number of periods") self.k_value = congruence.checkStrictlyPositiveNumber(self.k_value, "K value") self.id_period = congruence.checkStrictlyPositiveNumber(self.id_period, "ID period") if self.optimize_source_combo == 1: congruence.checkFile(self.file_with_phase_space_volume) if self.type_combo == 1: congruence.checkUrl(self.file_with_b_vs_y) elif self.type_combo == 2: congruence.checkUrl(self.file_with_harmonics)
def check_data(self): super().check_data() congruence.checkStrictlyPositiveNumber(self.tangential_radius, "Tangential Radius") congruence.checkStrictlyPositiveNumber(self.sagittal_radius, "Sagittal Radius")
def check_fields(self): self.NPERIODS = congruence.checkStrictlyPositiveNumber( self.NPERIODS, "Number of Periods") self.ENERGY = congruence.checkStrictlyPositiveNumber( self.ENERGY, "Beam Energy") self.PHOT_ENERGY_MIN = congruence.checkPositiveNumber( self.PHOT_ENERGY_MIN, "Min Photon Energy") self.PHOT_ENERGY_MAX = congruence.checkStrictlyPositiveNumber( self.PHOT_ENERGY_MAX, "Max Photon Energy") congruence.checkLessThan(self.PHOT_ENERGY_MIN, self.PHOT_ENERGY_MAX, "Min Photon Energy", "Max Photon Energy") self.NPOINTS = congruence.checkStrictlyPositiveNumber( self.NPOINTS, "Number of Energy Points") self.CURRENT = congruence.checkStrictlyPositiveNumber( self.CURRENT, "Electron Beam Current") if self.FIELD == 0: self.ULAMBDA = congruence.checkStrictlyPositiveNumber( self.ULAMBDA, "Wiggler period") self.K = congruence.checkStrictlyPositiveNumber(self.K, "K") self.NTRAJPOINTS = congruence.checkStrictlyPositiveNumber( self.NTRAJPOINTS, "Number of traj points per period") elif self.FIELD == 1: self.ULAMBDA = congruence.checkStrictlyPositiveNumber( self.ULAMBDA, "Wiggler period") self.NTRAJPOINTS = congruence.checkStrictlyPositiveNumber( self.NTRAJPOINTS, "Number of traj points per period") congruence.checkFile(self.FILE) elif self.FIELD == 2: congruence.checkFile(self.FILE)
def check_fields(self): if self.kind_of_profile_y < 2: self.dimension_y = congruence.checkStrictlyPositiveNumber(self.dimension_y, "Dimension Y") self.step_y = congruence.checkStrictlyPositiveNumber(self.step_y, "Step Y") if self.kind_of_profile_y == 0: self.power_law_exponent_beta_y = congruence.checkPositiveNumber(self.power_law_exponent_beta_y, "Beta Value Y") if self.kind_of_profile_y == 1: self.correlation_length_y = congruence.checkStrictlyPositiveNumber(self.correlation_length_y, "Correlation Length Y") self.rms_y = congruence.checkPositiveNumber(self.rms_y, "Rms Y") self.montecarlo_seed_y = congruence.checkPositiveNumber(self.montecarlo_seed_y, "Monte Carlo initial seed y") else: congruence.checkFile(self.heigth_profile_1D_file_name_y) self.conversion_factor_y_x = congruence.checkStrictlyPositiveNumber(self.conversion_factor_y_x, "Conversion from file to workspace units(Abscissa)") self.conversion_factor_y_y = congruence.checkStrictlyPositiveNumber(self.conversion_factor_y_y, "Conversion from file to workspace units (Height Profile Values)") if self.renormalize_y == 1: self.rms_y = congruence.checkPositiveNumber(self.rms_y, "Rms Y") if self.kind_of_profile_x < 2: self.dimension_x = congruence.checkStrictlyPositiveNumber(self.dimension_x, "Dimension X") self.step_x = congruence.checkStrictlyPositiveNumber(self.step_x, "Step X") if self.kind_of_profile_x == 0: self.power_law_exponent_beta_x = congruence.checkPositiveNumber(self.power_law_exponent_beta_x, "Beta Value X") if self.kind_of_profile_x == 1: self.correlation_length_x = congruence.checkStrictlyPositiveNumber(self.correlation_length_x, "Correlation Length X") self.rms_x = congruence.checkPositiveNumber(self.rms_x, "Rms X") self.montecarlo_seed_x = congruence.checkPositiveNumber(self.montecarlo_seed_x, "Monte Carlo initial seed X") else: congruence.checkFile(self.heigth_profile_1D_file_name_x) self.conversion_factor_x_x = congruence.checkStrictlyPositiveNumber(self.conversion_factor_x_x, "Conversion from file to workspace units(Abscissa)") self.conversion_factor_x_y = congruence.checkStrictlyPositiveNumber(self.conversion_factor_x_y, "Conversion from file to workspace units (Height Profile Values)") if self.renormalize_x == 1: self.rms_x = congruence.checkPositiveNumber(self.rms_x, "Rms X") congruence.checkDir(self.heigth_profile_file_name)
def checkFields(self): self.SYMBOL = ShadowPhysics.checkCompoundName(self.SYMBOL) self.DENSITY = congruence.checkStrictlyPositiveNumber(self.DENSITY, "Density") self.E_MIN = congruence.checkPositiveNumber(self.E_MIN , "Minimum Energy") self.E_MAX = congruence.checkStrictlyPositiveNumber(self.E_MAX , "Maximum Energy") self.E_STEP = congruence.checkStrictlyPositiveNumber(self.E_STEP, "Energy step") congruence.checkLessOrEqualThan(self.E_MIN, self.E_MAX, "Minimum Energy", "Maximum Energy") congruence.checkDir(self.SHADOW_FILE)
def checkWavefrontPhotonEnergy(self): if self.wf_use_harmonic == 0: congruence.checkStrictlyPositiveNumber( self.wf_harmonic_number, "Wavefront Propagation Harmonic Number") else: congruence.checkStrictlyPositiveNumber( self.wf_photon_energy, "Wavefront Propagation Photon Energy")
def checkFields(self): self.SYMBOL = ShadowPhysics.checkCompoundName(self.SYMBOL) self.DENSITY = congruence.checkStrictlyPositiveNumber(self.DENSITY, "Density") self.E_MIN = congruence.checkPositiveNumber(self.E_MIN , "Minimum Energy") self.E_MAX = congruence.checkStrictlyPositiveNumber(self.E_MAX , "Maximum Energy") self.E_STEP = congruence.checkStrictlyPositiveNumber(self.E_STEP, "Energy step") if self.E_MIN > self.E_MAX: raise Exception("Minimum Energy cannot be bigger than Maximum Energy") congruence.checkDir(self.SHADOW_FILE)
def check_data(self): super().check_data() congruence.checkStrictlyPositiveNumber( self.distance_from_first_focus_to_mirror_center, "Distance from first focus to mirror center (p)") congruence.checkStrictlyPositiveNumber( self.distance_from_mirror_center_to_second_focus, "Distance from mirror center to second focus (q)")
def manage_acceptance_slits(self, shadow_oe): if self.add_acceptance_slits==1: congruence.checkStrictlyPositiveNumber(self.auto_slit_width_xaxis, "Slit width/x-axis") congruence.checkStrictlyPositiveNumber(self.auto_slit_height_zaxis, "Slit height/z-axis") shadow_oe.add_acceptance_slits(self.auto_slit_width_xaxis, self.auto_slit_height_zaxis, self.auto_slit_center_xaxis, self.auto_slit_center_zaxis)
def check_fields(self): self.TEMPERATURE = congruence.checkPositiveNumber( self.TEMPERATURE, "Temperature") self.E_MIN = congruence.checkPositiveNumber(self.E_MIN, "Min Energy") self.E_MAX = congruence.checkStrictlyPositiveNumber( self.E_MAX, "Max Energy") congruence.checkLessThan(self.E_MIN, self.E_MAX, "Min Energy", "Max Energy") self.NPOINTS = congruence.checkStrictlyPositiveNumber( self.NPOINTS, "Number of Points")
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") if self.GRID > 0: self.GRIDSTART = congruence.checkPositiveNumber(self.GRIDSTART, "Starting Energy") if self.GRID == 1: self.GRIDEND = congruence.checkStrictlyPositiveNumber(self.GRIDEND, "Energy to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Starting Energy", "Energy to") self.GRIDN = congruence.checkStrictlyPositiveNumber(self.GRIDN, "Number of points")
def update_debye_waller(self, thermal_parameters): if self.use_debye_waller_factor == 1 and not self.debye_waller_factor_function == 1: congruence.checkStrictlyPositiveNumber(self.debye_waller_factor, "B") debye_waller_factor = None if self.use_debye_waller_factor == 0 else OWGenericWidget.get_fit_parameter_from_widget( self, "debye_waller_factor", self.get_parameters_prefix()) thermal_parameters.set_debye_waller_factor(self.phase_index, debye_waller_factor)
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber(self.ELECTRONENERGY, "Electron Energy") if not self.METHOD == 1: self.ELECTRONENERGYSPREAD = congruence.checkPositiveNumber(self.ELECTRONENERGYSPREAD, "Electron Energy Spread") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber(self.ELECTRONCURRENT, "Electron Current") self.ELECTRONBEAMSIZEH = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEH, "Electron Beam Size H") self.ELECTRONBEAMSIZEV = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEV, "Electron Beam Size V") self.ELECTRONBEAMDIVERGENCEH = congruence.checkNumber(self.ELECTRONBEAMDIVERGENCEH, "Electron Beam Divergence H") self.ELECTRONBEAMDIVERGENCEV = congruence.checkNumber(self.ELECTRONBEAMDIVERGENCEV, "Electron Beam Divergence V") self.PHOTONENERGYMIN = congruence.checkNumber(self.PHOTONENERGYMIN, "Photon Energy Min") self.PHOTONENERGYMAX = congruence.checkNumber(self.PHOTONENERGYMAX, "Photon Energy Max") self.PHOTONENERGYPOINTS = congruence.checkStrictlyPositiveNumber(self.PHOTONENERGYPOINTS, "Number of Photon Energy Points") self.PERIODID = congruence.checkStrictlyPositiveNumber(self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.KV = congruence.checkPositiveNumber(self.KV, "Kv") self.DISTANCE = congruence.checkStrictlyPositiveNumber(self.DISTANCE, "Distance to slit") self.HARMONICNUMBER = congruence.checkStrictlyPositiveNumber(self.HARMONICNUMBER, "Harminic number") self.GAPH = congruence.checkPositiveNumber(self.GAPH, "Slit gap H") self.GAPV = congruence.checkPositiveNumber(self.GAPV, "Slit gap V") self.HSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.HSLITPOINTS, "Number of slit mesh points in H") self.VSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.VSLITPOINTS, "Number of slit mesh points in V") if self.METHOD == 1: # URGENT congruence.checkLessOrEqualThan(self.HSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51") congruence.checkLessOrEqualThan(self.VSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51")
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber( self.ELECTRONENERGY, "Electron Energy") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber( self.ELECTRONCURRENT, "Electron Current") self.PERIODID = congruence.checkStrictlyPositiveNumber( self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber( self.NPERIODS, "Number of Periods") self.KV = congruence.checkPositiveNumber(self.KV, "Kv") self.DISTANCE = congruence.checkStrictlyPositiveNumber( self.DISTANCE, "Distance to slit") self.PHOTONENERGYMIN = congruence.checkNumber(self.PHOTONENERGYMIN, "Photon Energy Min") self.PHOTONENERGYMAX = congruence.checkNumber(self.PHOTONENERGYMAX, "Photon Energy Max") congruence.checkGreaterOrEqualThan(self.PHOTONENERGYPOINTS, 2, "Number of Photon Energy Points", " 2") self.HSLITPOINTS = congruence.checkStrictlyPositiveNumber( self.HSLITPOINTS, "Number of slit mesh points in H") self.VSLITPOINTS = congruence.checkStrictlyPositiveNumber( self.VSLITPOINTS, "Number of slit mesh points in V") self.NTRAJPOINTS = congruence.checkStrictlyPositiveNumber( self.NTRAJPOINTS, "Number Trajectory points") self.PASSEPARTOUT = congruence.checkStrictlyPositiveNumber( self.PASSEPARTOUT, "Passepartout in units of sigma' at Emin")
def check_fields_aux(self): if len(self.crl_error_profiles) == 0: raise ValueError("No Thickness error profile specified") if self.crl_material_data == 0: self.crl_material = congruence.checkEmptyString( self.crl_material, "Chemical Formula") else: congruence.checkStrictlyPositiveNumber( self.crl_delta, "Refractive Index (\u03b4)") congruence.checkPositiveNumber(self.crl_scaling_factor, "Thickness Error Scaling Factor")
def check_fields(self): self.HMILLER = congruence.checkNumber(self.HMILLER, "h miller index") self.KMILLER = congruence.checkNumber(self.KMILLER, "k miller index") self.LMILLER = congruence.checkNumber(self.LMILLER, "l miller index") self.TEMPER = congruence.checkNumber(self.TEMPER, "Temperature factor") self.ENERGY = congruence.checkPositiveNumber(self.ENERGY, "Energy from") self.ENERGY_END = congruence.checkStrictlyPositiveNumber(self.ENERGY_END, "Energy to") congruence.checkLessThan(self.ENERGY, self.ENERGY_END, "Energy from", "Energy to") self.NPOINTS = congruence.checkStrictlyPositiveNumber(self.NPOINTS, "Number of Points")
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") self.GRIDSTART = congruence.checkPositiveNumber( self.GRIDSTART, "Q from") self.GRIDEND = congruence.checkStrictlyPositiveNumber( self.GRIDEND, "Q to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Q from", "Q to") self.GRIDN = congruence.checkStrictlyPositiveNumber( self.GRIDN, "Number of q Points")
def checkFields(self): congruence.checkPositiveNumber(self.p, "Distance Source - KB center") congruence.checkPositiveNumber(self.q, "Distance KB center - Image plane") congruence.checkPositiveNumber(self.separation, "Separation between the Mirrors") congruence.checkStrictlyPositiveNumber(self.photon_energy_ev, "Photon Energy") congruence.checkFile(self.reflectivity_file) self.crystal_1_box.checkFields() self.crystal_2_box.checkFields()
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") if self.MAT_FLAG == 1: self.DENSITY = congruence.checkStrictlyPositiveNumber(self.DENSITY, "density") if self.GRID > 0: self.GRIDSTART = congruence.checkPositiveNumber(self.GRIDSTART, "Starting Energy") if self.GRID == 1: self.GRIDEND = congruence.checkStrictlyPositiveNumber(self.GRIDEND, "Energy to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Starting Energy", "Energy to") self.GRIDN = congruence.checkStrictlyPositiveNumber(self.GRIDN, "Number of points")
def checkLightSourceSpecificFields(self): if self.magnetic_field_from == 0: congruence.checkPositiveNumber(self.K_horizontal, "Horizontal K") congruence.checkPositiveNumber(self.K_vertical, "Vertical K") else: congruence.checkPositiveNumber(self.B_horizontal, "Horizontal B") congruence.checkPositiveNumber(self.B_vertical, "Vertical B") congruence.checkStrictlyPositiveNumber(self.period_length, "Period Length") congruence.checkStrictlyPositiveNumber(self.number_of_periods, "Number of Periods")
def check_fields(self): self.MILLER_INDEX_H = congruence.checkNumber(self.MILLER_INDEX_H, "Miller index H") self.MILLER_INDEX_K = congruence.checkNumber(self.MILLER_INDEX_K, "Miller index K") self.MILLER_INDEX_L = congruence.checkNumber(self.MILLER_INDEX_L, "Miller index L") self.TEMPER = congruence.checkNumber(self.TEMPER, "Temperature factor") if self.SCAN == 0 or self.SCAN == 3: self.SCANFROM = congruence.checkPositiveNumber( self.SCANFROM, "Min Scan value") self.SCANTO = congruence.checkStrictlyPositiveNumber( self.SCANTO, "Max Scan value") else: self.SCANFROM = congruence.checkNumber(self.SCANFROM, "Min Scan value") self.SCANTO = congruence.checkNumber(self.SCANTO, "Max Scan value") congruence.checkLessThan(self.SCANFROM, self.SCANTO, "Min Scan value", "Max Scan value") self.SCANPOINTS = congruence.checkStrictlyPositiveNumber( self.SCANPOINTS, "Scan points") if self.SCAN < 4: self.ENERGY = congruence.checkStrictlyPositiveNumber( self.ENERGY, "Fix value") else: self.ENERGY = congruence.checkNumber(self.ENERGY, "Fix value") if self.MOSAIC == 0: #perfect self.ASYMMETRY_ANGLE = congruence.checkNumber( self.ASYMMETRY_ANGLE, "Asymmetry angle") self.THICKNESS = congruence.checkStrictlyPositiveNumber( self.THICKNESS, "Crystal thickness") elif self.MOSAIC == 1: #mosaic self.THICKNESS = congruence.checkStrictlyPositiveNumber( self.THICKNESS, "Crystal thickness") self.MOSAIC_FWHM = congruence.checkNumber(self.MOSAIC_FWHM, "Mosaicity") elif self.MOSAIC == 2 or self.MOSAIC == 3: #bent ML/PP self.ASYMMETRY_ANGLE = congruence.checkNumber( self.ASYMMETRY_ANGLE, "Asymmetry angle") self.THICKNESS = congruence.checkStrictlyPositiveNumber( self.THICKNESS, "Crystal thickness") self.RSAG = congruence.checkStrictlyPositiveNumber( self.RSAG, "R Sagittal") self.RMER = congruence.checkStrictlyPositiveNumber( self.RMER, "R meridional") if self.ANISOTROPY == 0: self.POISSON = congruence.checkStrictlyPositiveNumber( self.POISSON, "Poisson Ratio") elif self.ANISOTROPY == 2: congruence.checkEmptyString(self.CUT, "Valong; Vnorm; Vperp") elif self.ANISOTROPY == 3: congruence.checkFile(self.FILECOMPLIANCE)
def checkFields(self): congruence.checkPositiveNumber(self.source_plane_distance, "Distance from Source") congruence.checkPositiveNumber(self.image_plane_distance, "Image Plane Distance") congruence.checkStrictlyPositiveNumber(self.input_diameter, "Input Diameter") congruence.checkStrictlyPositiveAngle(self.angular_acceptance, "Angular Acceptance") congruence.checkStrictlyPositiveNumber(self.output_diameter, "Output Diameter") congruence.checkPositiveNumber(self.residual_divergence, "Residual Output Divergence") congruence.checkStrictlyPositiveNumber(self.lens_length, "Lens Total Length") if self.output_diameter <= self.input_diameter: raise Exception( "Output Diameter should be greater than Input diameter") slit_distance = self.get_slits_distance() if self.lens_length < slit_distance: raise Exception( "Lens total Length should be greater than or equal to " + str(slit_distance)) congruence.checkStrictlyPositiveNumber(self.transmittance, "Lens Transmittance")
def check_fields(self): self.ENERGY = congruence.checkStrictlyPositiveNumber( self.ENERGY, "Beam Energy") self.CUR = congruence.checkStrictlyPositiveNumber( self.CUR, "Beam Current") self.PERIOD = congruence.checkStrictlyPositiveNumber( self.PERIOD, "Period") self.N = congruence.checkStrictlyPositiveNumber( self.N, "Number of Periods") self.KX = congruence.checkNumber(self.KX, "Kx") self.KY = congruence.checkNumber(self.KY, "Ky") self.EMIN = congruence.checkPositiveNumber(self.EMIN, "Min Energy") self.EMAX = congruence.checkStrictlyPositiveNumber( self.EMAX, "Max Energy") congruence.checkLessThan(self.EMIN, self.EMAX, "Min Energy", "Max Energy") self.NEE = congruence.checkStrictlyPositiveNumber( self.NEE, "Number of energy steps") self.D = congruence.checkPositiveNumber(self.D, "Distance") self.XPC = congruence.checkNumber(self.XPC, "X-pos") self.YPC = congruence.checkNumber(self.YPC, "Y-pos") self.XPS = congruence.checkNumber(self.XPS, "X slit") self.YPS = congruence.checkNumber(self.YPS, "Y Slit") self.NXP = congruence.checkStrictlyPositiveNumber( self.NXP, "Integration points X") self.NYP = congruence.checkStrictlyPositiveNumber( self.NYP, "Integration points Y")
def check_fields(self): self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY, "Energy") self.MILLER_INDEX_H = congruence.checkNumber(self.MILLER_INDEX_H, "Miller index H") self.MILLER_INDEX_K = congruence.checkNumber(self.MILLER_INDEX_K, "Miller index K") self.MILLER_INDEX_L = congruence.checkNumber(self.MILLER_INDEX_L, "Miller index L") self.ASYMMETRY_ANGLE = congruence.checkNumber(self.ASYMMETRY_ANGLE, "Asymmetry angle") self.THICKNESS = congruence.checkStrictlyPositiveNumber(self.THICKNESS, "Crystal thickness") self.TEMPERATURE = congruence.checkNumber(self.TEMPERATURE, "Crystal temperature") self.NPOINTS = congruence.checkStrictlyPositiveNumber(self.NPOINTS, "Number of points") if self.SCALE == 1: self.XFROM = congruence.checkNumber(self.XFROM, "Theta min") self.XTO = congruence.checkNumber(self.XTO, "Theta max") congruence.checkLessThan(self.XFROM, self.XTO, "Theta min", "Theta max")
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber(self.ELECTRONENERGY, "Electron Energy") if not self.METHOD == 1: self.ELECTRONENERGYSPREAD = congruence.checkPositiveNumber(self.ELECTRONENERGYSPREAD, "Electron Energy Spread") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber(self.ELECTRONCURRENT, "Electron Current") self.ELECTRONBEAMSIZEH = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEH, "Electron Beam Size H") self.ELECTRONBEAMSIZEV = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEV, "Electron Beam Size V") self.ELECTRONBEAMDIVERGENCEH = congruence.checkNumber(self.ELECTRONBEAMDIVERGENCEH, "Electron Beam Divergence H") self.ELECTRONBEAMDIVERGENCEV = congruence.checkNumber(self.ELECTRONBEAMDIVERGENCEV, "Electron Beam Divergence V") self.PERIODID = congruence.checkStrictlyPositiveNumber(self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.KV = congruence.checkPositiveNumber(self.KV, "Kv") self.DISTANCE = congruence.checkStrictlyPositiveNumber(self.DISTANCE, "Distance to slit") if self.SETRESONANCE == 0: self.GAPH = congruence.checkPositiveNumber(self.GAPH, "Slit gap H") self.GAPV = congruence.checkPositiveNumber(self.GAPV, "Slit gap V") self.PHOTONENERGYMIN = congruence.checkNumber(self.PHOTONENERGYMIN, "Photon Energy Min") self.PHOTONENERGYMAX = congruence.checkNumber(self.PHOTONENERGYMAX, "Photon Energy Max") congruence.checkGreaterOrEqualThan(self.PHOTONENERGYPOINTS, 2, "Number of Photon Energy Points", " 2") else: self.HARMONICNUMBER = congruence.checkStrictlyPositiveNumber(self.HARMONICNUMBER, "Harmonic number") self.HSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.HSLITPOINTS, "Number of slit mesh points in H") self.VSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.VSLITPOINTS, "Number of slit mesh points in V") if self.METHOD == 1: # URGENT congruence.checkLessOrEqualThan(self.HSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51") congruence.checkLessOrEqualThan(self.VSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51")
def check_fields(self): self.dimension_x = congruence.checkStrictlyPositiveNumber(self.dimension_x, "Dimension X") self.step_x = congruence.checkStrictlyPositiveNumber(self.step_x, "Step X") if self.step_x > self.dimension_x/2: raise Exception("Step Width should be smaller than or equal to Width/2") if self.modify_y == 1: self.scale_factor_y = congruence.checkStrictlyPositiveNumber(self.scale_factor_y, "Scale Factor") elif self.modify_y == 2: self.new_length = congruence.checkStrictlyPositiveNumber(self.new_length, "New Length") if self.renormalize_y == 1: self.rms_y = congruence.checkPositiveNumber(self.rms_y, "Rms Y") congruence.checkDir(self.heigth_profile_file_name)
def check_fields(self): self.number_of_points_x = congruence.checkStrictlyPositiveNumber(self.number_of_points_x, "Number of Points X") self.number_of_points_y = congruence.checkStrictlyPositiveNumber(self.number_of_points_y, "Number of Points Y") self.dimension_x = congruence.checkStrictlyPositiveNumber(self.dimension_x, "Dimension X") self.dimension_y = congruence.checkStrictlyPositiveNumber(self.dimension_y, "Dimension Y") self.estimated_slope_error = congruence.checkPositiveNumber(self.estimated_slope_error, "Estimated slope error") self.montecarlo_seed = congruence.checkPositiveNumber(self.montecarlo_seed, "Monte Carlo initial seed") self.harmonic_maximum_index = congruence.checkPositiveNumber(self.harmonic_maximum_index, "Harmonic Maximum Index") congruence.checkDir(self.waviness_file_name)
def check_fields(self): if self.focal_length_calc == 1: congruence.checkPositiveNumber(self.ghy_focallength, "Focal Length value") if self.distance_to_image_calc == 1: congruence.checkPositiveNumber(self.ghy_distance, "Distance to image value") if self.ghy_diff_plane == 0 or self.ghy_diff_plane == 2: congruence.checkStrictlyPositiveNumber( self.ghy_nbins_x, "Number of bins for I(Sagittal) histogram") if self.ghy_diff_plane == 1 or self.ghy_diff_plane == 2: congruence.checkStrictlyPositiveNumber( self.ghy_nbins_z, "Number of bins for I(Tangential) histogram") if self.ghy_files is None or len( self.ghy_files) == 0 or (len(self.ghy_files) == 1 and self.ghy_files[0] == ""): raise ValueError("Height Error Profiles list is empty") congruence.checkStrictlyPositiveNumber(self.ghy_npeak, "Number of diffraction peaks") congruence.checkStrictlyPositiveNumber(self.ghy_fftnpts, "Number of points for FFT")
def checkFields(self): congruence.checkPositiveNumber(self.grazing_angles_mrad, "Grazing Angle") if self.has_finite_dimensions == 0: congruence.checkStrictlyPositiveNumber(self.mirror_width, "Mirror Width") congruence.checkStrictlyPositiveNumber(self.mirror_length, "Mirror Length") elif self.has_surface_error != 0: raise Exception("With surface error file, dimensions cannot be infinite") if self.reflectivity_kind != 0: congruence.checkFile(self.reflectivity_files) if self.has_surface_error == 1: congruence.checkFile(self.surface_error_files)
def __init__(self, s_max=9.0, n_step=4096, fft_type=FFTTypes.REAL_ONLY): congruence.checkStrictlyPositiveNumber(s_max, "S_max") congruence.checkStrictlyPositiveNumber(n_step, "N_step") n_step = int(n_step) if not ((n_step & (n_step - 1)) == 0): raise ValueError("N_step should be a power of 2") if not (fft_type == FFTTypes.REAL_ONLY or fft_type == FFTTypes.FULL): raise ValueError("FFT type not recognized") self.s_max = s_max self.n_step = n_step self.fft_type = fft_type
def parse_peak(cls, line, line_index=0, diffraction_pattern_index=0): try: congruence.checkEmptyString(line, "Pseudo-Voigt Peak") except: return None if line.strip().startswith("#"): return None else: parameter_prefix = PseudoVoigtPeak.get_parameters_prefix() + str(diffraction_pattern_index + 1) + "_" + str(line_index+1) + "_" line_id = "(d.p. " + str(diffraction_pattern_index+1) +", line " + str(line_index+1) + ")" psuedo_voigt_peak = PseudoVoigtPeak() data = line.strip().split(",") if len(data) < 4: raise ValueError("Pseudo-Voigt Peak, malformed line: " + str(line_index+1)) try: twotheta_0 = FitParameter.parse_parameter_on_row(data[0], parameter_prefix, "twotheta0") eta = FitParameter.parse_parameter_on_row(data[1], parameter_prefix, "eta") fwhm = FitParameter.parse_parameter_on_row(data[2], parameter_prefix, "fwhm") intensity = FitParameter.parse_parameter_on_row(data[3], parameter_prefix, "intensity") except: raise "Row " + line_id + " is malformed" if not twotheta_0.function: congruence.checkStrictlyPositiveAngle(twotheta_0.value, "2\u03b80 " + line_id) if twotheta_0.boundary.is_free(): twotheta_0.boundary = Boundary(min_value=0.0) if not eta.function: if not 0.0 < eta.value < 1.0: raise ValueError("\u03b7 " + line_id + " must be between 0 and 1") if eta.boundary.is_free(): eta.boundary = Boundary(min_value=0.0, max_value=1.0) if not fwhm.function: congruence.checkStrictlyPositiveNumber(fwhm.value, "fwhm " + line_id) if fwhm.boundary.is_free(): fwhm.boundary = Boundary(min_value=0.0) if not intensity.function: congruence.checkStrictlyPositiveNumber(intensity.value, "intensity " + line_id) if intensity.boundary.is_free(): intensity.boundary = Boundary(min_value=0.0) psuedo_voigt_peak.twotheta_0 = twotheta_0 psuedo_voigt_peak.eta = eta psuedo_voigt_peak.fwhm = fwhm psuedo_voigt_peak.intensity = intensity return psuedo_voigt_peak
def checkFields(self): congruence.checkPositiveNumber(self.p, "P") congruence.checkPositiveNumber(self.q, "Q") if self.has_finite_diameter == 0: congruence.checkStrictlyPositiveNumber(self.diameter, "Diameter") if self.ri_calculation_mode == 1: congruence.checkFile(self.prerefl_file) else: congruence.checkPositiveNumber(self.refraction_index, "Refraction Index") congruence.checkPositiveNumber(self.attenuation_coefficient, "Attenuation Coefficient") congruence.checkStrictlyPositiveNumber(self.radius, "Radius") congruence.checkPositiveNumber(self.interthickness, "Lens Thickness")
def checkFields(self): if type(self.DESCRIPTOR) == str: # back compatibility with old version try: self.DESCRIPTOR = self.crystals.index(self.DESCRIPTOR) except: self.DESCRIPTOR = 0 self.H_MILLER_INDEX = congruence.checkNumber(self.H_MILLER_INDEX, "H miller index") self.K_MILLER_INDEX = congruence.checkNumber(self.K_MILLER_INDEX, "K miller index") self.L_MILLER_INDEX = congruence.checkNumber(self.L_MILLER_INDEX, "L miller index") self.TEMPERATURE_FACTOR = congruence.checkNumber(self.TEMPERATURE_FACTOR, "Temperature factor") self.E_MIN = congruence.checkPositiveNumber(self.E_MIN , "Minimum energy") self.E_MAX = congruence.checkStrictlyPositiveNumber(self.E_MAX , "Maximum Energy") self.E_STEP = congruence.checkStrictlyPositiveNumber(self.E_STEP, "Energy step") if self.E_MIN > self.E_MAX: raise Exception("From Energy cannot be bigger than To Energy") congruence.checkDir(self.SHADOW_FILE)
def check_fields(self): self.H = congruence.checkNumber(self.H, "h main") self.K = congruence.checkNumber(self.K, "k main") self.L = congruence.checkNumber(self.L, "l main") self.HMAX = congruence.checkNumber(self.HMAX, "h max") self.KMAX = congruence.checkNumber(self.KMAX, "k max") self.LMAX = congruence.checkNumber(self.LMAX, "l max") self.FHEDGE = congruence.checkNumber(self.FHEDGE, "Fh less than") if self.DISPLAY == 1 or self.DISPLAY == 3: self.LAMBDA = congruence.checkStrictlyPositiveNumber(self.LAMBDA, "Wavelength") self.DELTALAMBDA = congruence.checkStrictlyPositiveNumber(self.DELTALAMBDA, "Delta Wavelength") if self.DISPLAY == 2 or self.DISPLAY == 3: self.PHI = congruence.checkNumber(self.PHI, "Phi") self.DELTAPHI = congruence.checkStrictlyPositiveNumber(self.DELTALAMBDA, "Delta Phi")
def checkFields(self): self.r_a = congruence.checkPositiveNumber(self.r_a, "Distance Source-Grating") self.r_b = congruence.checkPositiveNumber(self.r_b, "Distance Grating-Exit Slits") self.k = congruence.checkStrictlyPositiveNumber(self.k, "Line Densityg") if self.units_in_use == 0: self.photon_energy = congruence.checkPositiveNumber(self.photon_energy, "Photon Energy") elif self.units_in_use == 1: self.photon_wavelength = congruence.checkPositiveNumber(self.photon_wavelength, "Photon Wavelength")
def check_fields(self): self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY, "Electron Energy") self.CURRENT = congruence.checkStrictlyPositiveNumber(self.CURRENT, "Current") self.ENERGY_SPREAD = congruence.checkStrictlyPositiveNumber(self.ENERGY_SPREAD, "Energy Spread") self.SIGX = congruence.checkPositiveNumber(self.SIGX , "Sigma X") self.SIGY = congruence.checkPositiveNumber(self.SIGY , "Sigma Y") self.SIGX1 = congruence.checkPositiveNumber(self.SIGX1, "Sigma X'") self.SIGY1 = congruence.checkPositiveNumber(self.SIGY1, "Sigma Y'") self.PERIOD = congruence.checkStrictlyPositiveNumber(self.PERIOD, "Period length") self.NP = congruence.checkStrictlyPositiveNumber(self.NP, "Number of periods") self.EMIN = congruence.checkPositiveNumber(self.EMIN, "E1 minimum energy") self.EMAX = congruence.checkStrictlyPositiveNumber(self.EMAX, "E1 maximum energy") congruence.checkLessThan(self.EMIN, self.EMAX, "E1 minimum energy", "E1 maximum energy") self.N = congruence.checkStrictlyPositiveNumber(self.N, "Number of Energy Points") self.HARMONIC_FROM = congruence.checkStrictlyPositiveNumber(self.HARMONIC_FROM, "Minimum harmonic number") self.HARMONIC_TO = congruence.checkStrictlyPositiveNumber(self.HARMONIC_TO, "Maximum harmonic number") congruence.checkLessThan(self.HARMONIC_FROM, self.HARMONIC_TO, "Minimum harmonic number", "Maximum harmonic number") self.HARMONIC_STEP = congruence.checkStrictlyPositiveNumber(self.HARMONIC_STEP, "Harmonic step size") self.NEKS = congruence.checkPositiveNumber(self.NEKS , "Intrinsic NEKS")
def check_fields(self): self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY, "Beam Energy") self.PHOT_ENERGY_MIN = congruence.checkPositiveNumber(self.PHOT_ENERGY_MIN, "Min Photon Energy") self.PHOT_ENERGY_MAX = congruence.checkStrictlyPositiveNumber(self.PHOT_ENERGY_MAX, "Max Photon Energy") congruence.checkLessThan(self.PHOT_ENERGY_MIN, self.PHOT_ENERGY_MAX, "Min Photon Energy", "Max Photon Energy") self.NPOINTS = congruence.checkStrictlyPositiveNumber(self.NPOINTS, "Number of Energy Points") self.CURRENT = congruence.checkStrictlyPositiveNumber(self.CURRENT, "Electron Beam Current") if self.FIELD == 0: self.ULAMBDA = congruence.checkStrictlyPositiveNumber(self.ULAMBDA, "Wiggler period") self.K = congruence.checkStrictlyPositiveNumber(self.K, "K") self.NTRAJPOINTS = congruence.checkStrictlyPositiveNumber(self.NTRAJPOINTS, "Number of traj points per period") elif self.FIELD == 1: self.ULAMBDA = congruence.checkStrictlyPositiveNumber(self.ULAMBDA, "Wiggler period") self.NTRAJPOINTS = congruence.checkStrictlyPositiveNumber(self.NTRAJPOINTS, "Number of traj points per period") congruence.checkUrl(self.FILE) elif self.FIELD == 2: congruence.checkUrl(self.FILE)
def check_fields(self): congruence.checkFile(self.FILE) self.LAMBDA = congruence.checkStrictlyPositiveNumber(self.LAMBDA, "Lambda") self.U = congruence.checkNumber(self.U, "U") self.V = congruence.checkNumber(self.V, "V") self.W = congruence.checkNumber(self.W, "W") self.X = congruence.checkNumber(self.X, "X") self.LS = congruence.checkNumber(self.LS, "LS") self.THMIN = congruence.checkPositiveAngle(self.THMIN, "TwoTheta from") self.THMAX = congruence.checkPositiveAngle(self.THMAX, "TwoTheta to") self.STEP = congruence.checkStrictlyPositiveAngle(self.STEP, "TwoTheta step") congruence.checkGreaterThan(self.THMAX, self.THMIN, "TwoTheta to", "TwoTheta from")
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") if self.MAT_FLAG == 1: self.DENSITY = congruence.checkStrictlyPositiveNumber(self.DENSITY, "density") if self.GRID > 0: self.GRIDSTART = congruence.checkPositiveNumber(self.GRIDSTART, "Starting Energy") if self.GRID == 1: self.GRIDEND = congruence.checkStrictlyPositiveNumber(self.GRIDEND, "Energy to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Starting Energy", "Energy to") self.GRIDN = congruence.checkStrictlyPositiveNumber(self.GRIDN, "Number of points") if self.CALCULATE >= 7 and self.CALCULATE <= 9: self.ROUGH = congruence.checkPositiveNumber(self.ROUGH, "Roughness") self.THETA1 = congruence.checkPositiveNumber(self.THETA1, "Starting Graz angle") if self.THETAGRID == 1: self.THETA2 = congruence.checkStrictlyPositiveNumber(self.THETA2, "Graz angle to") congruence.checkLessThan(self.THETA1, self.THETA2, "Starting Graz angle", "Graz angle to") self.THETAN = congruence.checkStrictlyPositiveNumber(self.THETAN, "Number of angular points") else: self.THETAGRID = 0
def check_fields(self): self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY, "Beam Energy") self.CUR = congruence.checkStrictlyPositiveNumber(self.CUR, "Beam Current") self.PERIOD = congruence.checkStrictlyPositiveNumber(self.PERIOD, "Period") self.N = congruence.checkStrictlyPositiveNumber(self.N, "Number of Periods") self.KX = congruence.checkNumber(self.KX, "Kx") self.KY = congruence.checkNumber(self.KY, "Ky") self.EMIN = congruence.checkPositiveNumber(self.EMIN, "Min Energy") self.EMAX = congruence.checkStrictlyPositiveNumber(self.EMAX, "Max Energy") congruence.checkLessThan(self.EMIN, self.EMAX, "Min Energy", "Max Energy") self.NEE = congruence.checkStrictlyPositiveNumber(self.NEE, "Number of energy steps") self.D = congruence.checkPositiveNumber(self.D, "Distance") self.XPC = congruence.checkNumber(self.XPC, "X-pos") self.YPC = congruence.checkNumber(self.YPC, "Y-pos") self.XPS = congruence.checkNumber(self.XPS, "X slit") self.YPS = congruence.checkNumber(self.YPS, "Y Slit") self.NXP = congruence.checkStrictlyPositiveNumber(self.NXP, "Integration points X") self.NYP = congruence.checkStrictlyPositiveNumber(self.NYP, "Integration points Y")
def checkFields(self): congruence.checkPositiveNumber(self.source_plane_distance, "Distance from Source") congruence.checkPositiveNumber(self.image_plane_distance, "Image Plane Distance") congruence.checkStrictlyPositiveNumber(self.input_diameter, "Input Diameter") congruence.checkStrictlyPositiveAngle(self.angular_acceptance, "Angular Acceptance") congruence.checkStrictlyPositiveNumber(self.output_diameter, "Output Diameter") congruence.checkPositiveNumber(self.residual_divergence, "Residual Output Divergence") congruence.checkStrictlyPositiveNumber(self.lens_length, "Lens Total Length") if self.output_diameter <= self.input_diameter: raise Exception("Output Diameter should be greater than Input diameter") slit_distance = self.get_slits_distance() if self.lens_length < slit_distance: raise Exception("Lens total Length should be greater than or equal to " + str(slit_distance)) congruence.checkStrictlyPositiveNumber(self.transmittance, "Lens Transmittance")
def check_fields(self): self.MILLER_INDEX_H = congruence.checkNumber(self.MILLER_INDEX_H, "Miller index H") self.MILLER_INDEX_K = congruence.checkNumber(self.MILLER_INDEX_K, "Miller index K") self.MILLER_INDEX_L = congruence.checkNumber(self.MILLER_INDEX_L, "Miller index L") self.TEMPER = congruence.checkNumber(self.TEMPER, "Temperature factor") if self.SCAN == 0 or self.SCAN == 3: self.SCANFROM = congruence.checkPositiveNumber(self.SCANFROM, "Min Scan value") self.SCANTO = congruence.checkStrictlyPositiveNumber(self.SCANTO, "Max Scan value") else: self.SCANFROM = congruence.checkNumber(self.SCANFROM, "Min Scan value") self.SCANTO = congruence.checkNumber(self.SCANTO, "Max Scan value") congruence.checkLessThan(self.SCANFROM, self.SCANTO, "Min Scan value", "Max Scan value") self.SCANPOINTS = congruence.checkStrictlyPositiveNumber(self.SCANPOINTS, "Scan points") if self.SCAN < 4: self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY , "Fix value") else: self.ENERGY = congruence.checkNumber(self.ENERGY , "Fix value") if self.MOSAIC == 0: #perfect self.ASYMMETRY_ANGLE = congruence.checkNumber(self.ASYMMETRY_ANGLE, "Asymmetry angle") self.THICKNESS = congruence.checkStrictlyPositiveNumber(self.THICKNESS, "Crystal thickness") elif self.MOSAIC == 1: #mosaic self.THICKNESS = congruence.checkStrictlyPositiveNumber(self.THICKNESS, "Crystal thickness") self.MOSAIC_FWHM = congruence.checkNumber(self.MOSAIC_FWHM, "Mosaicity") elif self.MOSAIC == 2 or self.MOSAIC == 3: #bent ML/PP self.ASYMMETRY_ANGLE = congruence.checkNumber(self.ASYMMETRY_ANGLE, "Asymmetry angle") self.THICKNESS = congruence.checkStrictlyPositiveNumber(self.THICKNESS, "Crystal thickness") self.RSAG = congruence.checkStrictlyPositiveNumber(self.RSAG, "R Sagittal") self.RMER = congruence.checkStrictlyPositiveNumber(self.RMER, "R meridional") if self.ANISOTROPY == 0: self.POISSON = congruence.checkStrictlyPositiveNumber(self.POISSON, "Poisson Ratio") elif self.ANISOTROPY == 2: congruence.checkEmptyString(self.CUT, "Valong; Vnorm; Vperp") elif self.ANISOTROPY == 3: congruence.checkFile(self.FILECOMPLIANCE)
def check_fields(self): if self.F12_FLAG == 1: congruence.checkEmptyString(self.SUBSTRATE, "Substrate") congruence.checkEmptyString(self.ODD_MATERIAL, "Odd layer material") congruence.checkEmptyString(self.EVEN_MATERIAL, "Even layer material") if self.SCAN == 0: # ga self.ENERGY = congruence.checkStrictlyPositiveNumber(self.ENERGY, "Photon energy") else: self.THETA = congruence.checkStrictlyPositiveNumber(self.THETA, "Grazing angle") self.SCAN_STEP = congruence.checkStrictlyPositiveNumber(self.SCAN_STEP, "Scanning variable step") self.NPOINTS = congruence.checkStrictlyPositiveNumber(self.NPOINTS, "Number of scanning points") if self.MODE == 0: # periodic layers self.ODD_THICKNESS = congruence.checkStrictlyPositiveNumber(self.ODD_THICKNESS, "Thickness for odd material") self.EVEN_THICKNESS = congruence.checkStrictlyPositiveNumber(self.EVEN_THICKNESS, "Thickness for even material") self.NLAYERS = congruence.checkStrictlyPositiveNumber(self.NLAYERS, "Number of layer pairs") else: congruence.checkFile(self.FILE)
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber(self.ELECTRONENERGY, "Electron Energy") if not self.METHOD == 1: self.ELECTRONENERGYSPREAD = congruence.checkPositiveNumber(self.ELECTRONENERGYSPREAD, "Electron Energy Spread") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber(self.ELECTRONCURRENT, "Electron Current") self.ELECTRONBEAMSIZEH = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEH, "Electron Beam Size H") self.ELECTRONBEAMSIZEV = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEV, "Electron Beam Size V") self.ELECTRONBEAMDIVERGENCEH = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEH, "Electron Beam Divergence H") self.ELECTRONBEAMDIVERGENCEV = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEV, "Electron Beam Divergence V") self.PERIODID = congruence.checkStrictlyPositiveNumber(self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.DISTANCE = congruence.checkPositiveNumber(self.DISTANCE, "Distance to slit") self.GAPH = congruence.checkPositiveNumber(self.GAPH, "Slit gap H") self.GAPV = congruence.checkPositiveNumber(self.GAPV, "Slit gap V") self.KMIN = congruence.checkPositiveNumber(self.KMIN, "K Min") self.KMAX = congruence.checkStrictlyPositiveNumber(self.KMAX, "K Max") congruence.checkLessThan(self.KMIN, self.KMAX, "K Min", "K Max") self.KPOINTS = congruence.checkStrictlyPositiveNumber(self.KPOINTS, "Number of K Points")
def plot_results(self): #self.error(self.error_id) try: plotted = False sys.stdout = EmittingStream(textWritten=self.writeStdOut) if self.trace_shadow: grabber = TTYGrabber() grabber.start() if ShadowCongruence.checkEmptyBeam(self.input_beam): ShadowPlot.set_conversion_active(self.getConversionActive()) self.number_of_bins = congruence.checkStrictlyPositiveNumber(self.number_of_bins, "Number of Bins") x, y, auto_x_title, auto_y_title, xum, yum = self.get_titles() self.plot_xy(x, y, title=self.title, xtitle=auto_x_title, ytitle=auto_y_title, xum=xum, yum=yum) plotted = True if self.trace_shadow: grabber.stop() for row in grabber.ttyData: self.writeStdOut(row) time.sleep(0.5) # prevents a misterious dead lock in the Orange cycle when refreshing the histogram return plotted except Exception as exception: QtGui.QMessageBox.critical(self, "Error", str(exception), QtGui.QMessageBox.Ok) #self.error_id = self.error_id + 1 #self.error(self.error_id, "Exception occurred: " + str(exception)) return False
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber(self.ELECTRONENERGY, "Electron Energy") if not self.METHOD == 1: self.ELECTRONENERGYSPREAD = congruence.checkPositiveNumber(self.ELECTRONENERGYSPREAD, "Electron Energy Spread") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber(self.ELECTRONCURRENT, "Electron Current") self.ELECTRONBEAMSIZEH = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEH, "Electron Beam Size H") self.ELECTRONBEAMSIZEV = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEV, "Electron Beam Size V") self.ELECTRONBEAMDIVERGENCEH = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEH, "Electron Beam Divergence H") self.ELECTRONBEAMDIVERGENCEV = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEV, "Electron Beam Divergence V") self.PERIODID = congruence.checkStrictlyPositiveNumber(self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.KV = congruence.checkPositiveNumber(self.KV, "Kv") self.DISTANCE = congruence.checkPositiveNumber(self.DISTANCE, "Distance to slit") self.GAPH = congruence.checkPositiveNumber(self.GAPH, "Slit gap H") self.GAPV = congruence.checkPositiveNumber(self.GAPV, "Slit gap V") self.HSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.HSLITPOINTS, "Number of slit mesh points in H") self.VSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.VSLITPOINTS, "Number of slit mesh points in V") if sys.platform == 'linux' and self.METHOD == 2: raise Exception("SRW calculation code not supported under Linux")
def check_fields(self): self.ELECTRONENERGY = congruence.checkStrictlyPositiveNumber(self.ELECTRONENERGY, "Electron Energy") if not self.METHOD == 1: self.ELECTRONENERGYSPREAD = congruence.checkPositiveNumber(self.ELECTRONENERGYSPREAD, "Electron Energy Spread") self.ELECTRONCURRENT = congruence.checkStrictlyPositiveNumber(self.ELECTRONCURRENT, "Electron Current") self.ELECTRONBEAMSIZEH = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEH, "Electron Beam Size H") self.ELECTRONBEAMSIZEV = congruence.checkPositiveNumber(self.ELECTRONBEAMSIZEV, "Electron Beam Size V") self.ELECTRONBEAMDIVERGENCEH = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEH, "Electron Beam Divergence H") self.ELECTRONBEAMDIVERGENCEV = congruence.checkPositiveNumber(self.ELECTRONBEAMDIVERGENCEV, "Electron Beam Divergence V") self.PERIODID = congruence.checkStrictlyPositiveNumber(self.PERIODID, "Period ID") self.NPERIODS = congruence.checkStrictlyPositiveNumber(self.NPERIODS, "Number of Periods") self.KV = congruence.checkPositiveNumber(self.KV, "Kv") self.DISTANCE = congruence.checkPositiveNumber(self.DISTANCE, "Distance to slit") self.GAPH = congruence.checkPositiveNumber(self.GAPH, "Slit gap H") self.GAPV = congruence.checkPositiveNumber(self.GAPV, "Slit gap V") self.HSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.HSLITPOINTS, "Number of slit mesh points in H") self.VSLITPOINTS = congruence.checkStrictlyPositiveNumber(self.VSLITPOINTS, "Number of slit mesh points in V") if self.METHOD == 1: # URGENT congruence.checkLessOrEqualThan(self.HSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51") congruence.checkLessOrEqualThan(self.VSLITPOINTS, 51, "Number of slit mesh points for URGENT "," 51")
def check_fields(self): if self.RB_CHOICE == 0: self.MACHINE_R_M = congruence.checkStrictlyPositiveNumber(self.MACHINE_R_M, "Magnetic Radius") else: self.BFIELD_T = congruence.checkStrictlyPositiveNumber(self.BFIELD_T, "Magnetic Field") self.BEAM_ENERGY_GEV = congruence.checkStrictlyPositiveNumber(self.BEAM_ENERGY_GEV, "Beam Energy") self.CURRENT_A = congruence.checkStrictlyPositiveNumber(self.CURRENT_A, "Beam Current") self.HOR_DIV_MRAD = congruence.checkPositiveNumber(self.HOR_DIV_MRAD, "Horizontal div Theta") self.PHOT_ENERGY_MIN = congruence.checkPositiveNumber(self.PHOT_ENERGY_MIN, "Min Photon Energy") self.PHOT_ENERGY_MAX = congruence.checkStrictlyPositiveNumber(self.PHOT_ENERGY_MAX, "Max Photon Energy") congruence.checkLessThan(self.PHOT_ENERGY_MIN, self.PHOT_ENERGY_MAX, "Min Photon Energy", "Max Photon Energy") self.NPOINTS = congruence.checkStrictlyPositiveNumber(self.NPOINTS, "Number of Energy Points") self.PSI_MRAD_PLOT = congruence.checkNumber(self.PSI_MRAD_PLOT, "Max Psi for angular plots") if self.VER_DIV == 2: self.PSI_MIN = congruence.checkNumber(self.PSI_MIN, "Min Photon Energy") self.PSI_MAX = congruence.checkNumber(self.PSI_MAX, "Max Photon Max") congruence.checkLessThan(self.PSI_MIN, self.PSI_MAX, "Psi Min", "Psi Max") elif self.VER_DIV == 3: self.PSI_MIN = congruence.checkNumber(self.PSI_MIN, "Min Photon Energy")
def check_fields(self): self.DESCRIPTOR = congruence.checkEmptyString(self.DESCRIPTOR, "formula") self.GRIDSTART = congruence.checkPositiveNumber(self.GRIDSTART, "Q from") self.GRIDEND = congruence.checkStrictlyPositiveNumber(self.GRIDEND, "Q to") congruence.checkLessThan(self.GRIDSTART, self.GRIDEND, "Q from", "Q to") self.GRIDN = congruence.checkStrictlyPositiveNumber(self.GRIDN, "Number of q Points")