本文整理汇总了Python中nexpy.gui.datadialogs.GridParameters.add方法的典型用法代码示例。如果您正苦于以下问题:Python GridParameters.add方法的具体用法?Python GridParameters.add怎么用?Python GridParameters.add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类nexpy.gui.datadialogs.GridParameters
的用法示例。
在下文中一共展示了GridParameters.add方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: MaskDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class MaskDialog(BaseDialog):
def __init__(self, parent=None):
super(MaskDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.parameters = GridParameters()
self.parameters.add('mask', 'pilatus_mask/entry/mask', 'Mask Path')
self.action_buttons(('Save Mask', self.save_mask))
self.set_layout(self.entry_layout, self.parameters.grid(),
self.action_buttons(('Save Mask', self.save_mask)),
self.close_buttons())
self.set_title('Mask Data')
def save_mask(self):
try:
mask = self.treeview.tree[self.parameters['mask'].value]
if mask.dtype != np.bool:
raise NeXusError('Mask must be a Boolean array')
elif len(mask.shape) == 1:
raise NeXusError('Mask must be at least two-dimensional')
elif len(mask.shape) > 2:
mask = mask[0]
self.entry['instrument/detector/pixel_mask'] = mask
self.entry['instrument/detector/pixel_mask_applied'] = False
except NeXusError as error:
report_error('Applying Mask', error)
示例2: SampleDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class SampleDialog(BaseDialog):
def __init__(self, parent=None):
super(SampleDialog, self).__init__(parent)
self.sample = GridParameters()
self.sample.add('sample', 'sample', 'Sample Name')
self.sample.add('label', 'label', 'Sample Label')
self.set_layout(self.directorybox('Choose Experiment Directory',
default=False),
self.sample.grid(header=False),
self.close_buttons(save=True))
self.set_title('New Sample')
def accept(self):
home_directory = self.get_directory()
self.mainwindow.default_directory = home_directory
sample_directory = os.path.join(home_directory,
self.sample['sample'].value,
self.sample['label'].value)
if not os.path.exists(sample_directory):
os.makedirs(sample_directory)
super(SampleDialog, self).accept()
示例3: EnergyDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class EnergyDialog(BaseDialog):
def __init__(self, parent=None):
super(EnergyDialog, self).__init__(parent)
layout = QtGui.QVBoxLayout()
self.select_entry()
self.parameters = GridParameters()
self.parameters.add('m1', self.entry['monitor1/distance'],
'Monitor 1 Distance')
self.parameters.add('m2', self.entry['monitor2/distance'],
'Monitor 2 Distance')
self.parameters.add('Ei', self.entry['instrument/monochromator/energy'],
'Incident Energy')
self.parameters.add('mod', self.entry['instrument/source/distance'],
'Moderator Distance')
layout.addLayout(self.entry_layout)
layout.addLayout(self.parameters.grid())
layout.addLayout(self.action_buttons(('Get Ei', self.get_ei)))
layout.addWidget(self.close_buttons(save=True))
self.setLayout(layout)
self.setWindowTitle('Get Incident Energy')
self.m1 = self.entry['monitor1']
self.m2 = self.entry['monitor2']
@property
def m1_distance(self):
return self.parameters['m1'].value - self.moderator_distance
@property
def m2_distance(self):
return self.parameters['m2'].value - self.moderator_distance
@property
def Ei(self):
return self.parameters['Ei'].value
@property
def moderator_distance(self):
return self.parameters['mod'].value
def get_ei(self):
t = 2286.26 * self.m1_distance / np.sqrt(self.Ei)
m1_time = self.m1[t-200.0:t+200.0].moment()
t = 2286.26 * self.m2_distance / np.sqrt(self.Ei)
m2_time = self.m2[t-200.0:t+200.0].moment()
self.parameters['Ei'].value = (2286.26 * (self.m2_distance - self.m1_distance) /
(m2_time - m1_time))**2
def accept(self):
try:
self.parameters['Ei'].save()
except NeXusError as error:
report_error("Getting Incident Energy", error)
super(EnergyDialog, self).accept()
示例4: EnergyDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class EnergyDialog(BaseDialog):
def __init__(self, parent=None):
super(EnergyDialog, self).__init__(parent)
self.select_entry()
self.parameters = GridParameters()
self.parameters.add("m1", self.entry["monitor1/distance"], "Monitor 1 Distance")
self.parameters.add("m2", self.entry["monitor2/distance"], "Monitor 2 Distance")
self.parameters.add("Ei", self.entry["instrument/monochromator/energy"], "Incident Energy")
self.parameters.add("mod", self.entry["instrument/source/distance"], "Moderator Distance")
action_buttons = self.action_buttons(("Get Ei", self.get_ei))
self.set_layout(self.entry_layout, self.parameters.grid(), action_buttons, self.close_buttons(save=True))
self.set_title("Get Incident Energy")
self.m1 = self.entry["monitor1"]
self.m2 = self.entry["monitor2"]
@property
def m1_distance(self):
return self.parameters["m1"].value - self.moderator_distance
@property
def m2_distance(self):
return self.parameters["m2"].value - self.moderator_distance
@property
def Ei(self):
return self.parameters["Ei"].value
@property
def moderator_distance(self):
return self.parameters["mod"].value
def get_ei(self):
t = 2286.26 * self.m1_distance / np.sqrt(self.Ei)
m1_time = self.m1[t - 200.0 : t + 200.0].moment()
t = 2286.26 * self.m2_distance / np.sqrt(self.Ei)
m2_time = self.m2[t - 200.0 : t + 200.0].moment()
self.parameters["Ei"].value = (2286.26 * (self.m2_distance - self.m1_distance) / (m2_time - m1_time)) ** 2
def accept(self):
try:
self.parameters["Ei"].save()
except NeXusError as error:
report_error("Getting Incident Energy", error)
super(EnergyDialog, self).accept()
示例5: OrientationDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class OrientationDialog(BaseDialog):
def __init__(self, parent=None):
super(OrientationDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.refine = NXRefine(self.entry)
self.refine.read_parameters()
self.parameters = GridParameters()
self.parameters.add('phi_start', self.refine.phi, 'Phi Start (deg)')
self.parameters.add('phi_step', self.refine.phi_step, 'Phi Step (deg)')
self.parameters.add('chi', self.refine.chi, 'Chi (deg)')
self.parameters.add('omega', self.refine.omega, 'Omega (deg)')
self.parameters.add('polar', self.refine.polar_max,
'Max. Polar Angle (deg)')
self.parameters.add('polar_tolerance', self.refine.polar_tolerance,
'Polar Angle Tolerance')
self.parameters.add('peak_tolerance', self.refine.peak_tolerance,
'Peak Angle Tolerance')
action_buttons = self.action_buttons(
('Generate Grains', self.generate_grains),
('List Peaks', self.list_peaks))
self.grain_layout = QtWidgets.QHBoxLayout()
self.grain_combo = QtWidgets.QComboBox()
self.grain_combo.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
self.grain_combo.currentIndexChanged.connect(self.set_grain)
self.grain_textbox = QtWidgets.QLabel()
self.grain_layout.addWidget(self.grain_combo)
self.grain_layout.addStretch()
self.grain_layout.addWidget(self.grain_textbox)
bottom_layout = QtWidgets.QHBoxLayout()
self.result_textbox = QtWidgets.QLabel()
bottom_layout.addWidget(self.result_textbox)
bottom_layout.addStretch()
bottom_layout.addWidget(self.close_buttons())
self.set_layout(self.entry_layout, self.parameters.grid(),
action_buttons, bottom_layout)
self.set_title('Defining Orientation')
def choose_entry(self):
self.refine = NXRefine(self.entry)
self.update_parameters()
def update_parameters(self):
self.parameters['phi_start'].value = self.refine.phi
self.parameters['phi_step'].value = self.refine.phi_step
self.parameters['chi'].value = self.refine.chi
self.parameters['omega'].value = self.refine.omega
self.parameters['polar'].value = self.refine.polar_max
self.parameters['polar_tolerance'].value = self.refine.polar_tolerance
self.parameters['peak_tolerance'].value = self.refine.peak_tolerance
def get_phi(self):
return (self.parameters['phi_start'].value,
self.parameters['phi_step'].value)
def set_phi(self):
self.refine.phi_start, self.refine.phi_step = self.get_phi()
def get_chi(self):
return self.parameters['chi'].value
def set_chi(self):
self.refine.chi = self.get_chi()
def get_omega(self):
return self.parameters['omega'].value
def set_omega(self):
self.refine.omega = self.get_omega()
@property
def polar_max(self):
return self.parameters['polar'].value
def set_polar_max(self):
self.refine.polar_max = self.polar_max
def get_polar_tolerance(self):
return self.parameters['polar_tolerance'].value
def set_polar_tolerance(self):
self.refine.polar_tolerance = self.get_polar_tolerance()
def get_peak_tolerance(self):
return self.parameters['peak_tolerance'].value
def set_peak_tolerance(self):
self.refine.peak_tolerance = self.get_peak_tolerance()
def generate_grains(self):
self.set_polar_max()
self.refine.generate_grains()
if self.refine.grains is not None:
self.layout.insertLayout(2, self.grain_layout)
self.grain_combo.clear()
for i in range(len(self.refine.grains)):
self.grain_combo.addItem('Grain %s' % i)
#.........这里部分代码省略.........
示例6: CalculateDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class CalculateDialog(BaseDialog):
def __init__(self, parent=None):
super(CalculateDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.refine = NXRefine(self.entry)
self.refine.read_parameters()
self.parameters = GridParameters()
self.parameters.add('wavelength', self.refine.wavelength, 'Wavelength (Ang)')
self.parameters.add('distance', self.refine.distance, 'Detector Distance (mm)')
self.parameters.add('xc', self.refine.xc, 'Beam Center - x')
self.parameters.add('yc', self.refine.yc, 'Beam Center - y')
self.parameters.add('pixel', self.refine.pixel_size, 'Pixel Size (mm)')
action_buttons = self.action_buttons(('Plot', self.plot_lattice),
('Save', self.write_parameters))
self.set_layout(self.entry_layout, self.parameters.grid(),
action_buttons, self.close_buttons())
self.set_title('Calculate Angles')
def choose_entry(self):
self.refine = NXRefine(self.entry)
self.update_parameters()
def update_parameters(self):
self.parameters['wavelength'].value = self.refine.wavelength
self.parameters['distance'].value = self.refine.distance
self.parameters['xc'].value = self.refine.xc
self.parameters['yc'].value = self.refine.yc
self.parameters['pixel'].value = self.refine.pixel_size
def get_wavelength(self):
return self.parameters['wavelength'].value
def get_distance(self):
return self.parameters['distance'].value
def get_centers(self):
return self.parameters['xc'].value, self.parameters['yc'].value
def get_pixel_size(self):
return self.parameters['pixel'].value
def get_parameters(self):
self.refine.wavelength = self.get_wavelength()
self.refine.distance = self.get_distance()
self.refine.xc, self.refine.yc = self.get_centers()
self.refine.pixel_size = self.get_pixel_size()
self.refine.yaw = self.refine.pitch = self.refine.roll = None
def plot_lattice(self):
try:
self.get_parameters()
self.plot_peaks(self.refine.xp, self.refine.yp)
except NeXusError as error:
report_error('Calculating Angles', error)
def plot_peaks(self, x, y):
try:
polar_angles, azimuthal_angles = self.refine.calculate_angles(x, y)
if polar_angles[0] > polar_angles[-1]:
polar_angles = polar_angles[::-1]
azimuthal_angles = azimuthal_angles[::-1]
azimuthal_field = NXfield(azimuthal_angles, name='azimuthal_angle')
azimuthal_field.long_name = 'Azimuthal Angle'
polar_field = NXfield(polar_angles, name='polar_angle')
polar_field.long_name = 'Polar Angle'
plotview = get_plotview()
plotview.plot(NXdata(azimuthal_field, polar_field, title='Peak Angles'))
except NeXusError as error:
report_error('Plotting Lattice', error)
def write_parameters(self):
try:
self.get_parameters()
polar_angles, azimuthal_angles = self.refine.calculate_angles(
self.refine.xp, self.refine.yp)
self.refine.write_angles(polar_angles, azimuthal_angles)
self.refine.write_parameters()
except NeXusError as error:
report_error('Calculating Angles', error)
示例7: Mask3DDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class Mask3DDialog(BaseDialog):
def __init__(self, parent=None):
super(Mask3DDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.parameters = GridParameters()
self.parameters.add('radius', 200, 'Radius')
self.parameters.add('width', 3, 'Frame Width')
self.set_layout(self.entry_layout,
self.parameters.grid(),
self.action_buttons(('Calculate 3D Mask', self.calculate_mask)),
self.progress_layout(save=True))
self.progress_bar.setVisible(False)
self.progress_bar.setValue(0)
self.set_title('Calculate 3D Mask')
self.reduce = None
def choose_entry(self):
self.reduce = NXReduce(self.entry)
@property
def radius(self):
return self.parameters['radius'].value
@property
def width(self):
return self.parameters['width'].value
def calculate_mask(self):
self.check_lock(self.reduce.wrapper_file)
self.thread = QtCore.QThread()
self.reduce = NXReduce(self.entry, radius=self.radius, width=self.width,
mask=True, overwrite=True, gui=True)
self.reduce.moveToThread(self.thread)
self.reduce.start.connect(self.start_progress)
self.reduce.update.connect(self.update_progress)
self.reduce.result.connect(self.calculate_mask)
self.reduce.stop.connect(self.stop)
self.thread.started.connect(self.reduce.nxfind)
self.thread.start(QtCore.QThread.LowestPriority)
def check_lock(self, file_name):
try:
with Lock(file_name, timeout=2):
pass
except LockException as error:
if self.confirm_action('Clear lock?', str(error)):
Lock(file_name).release()
def calculate_mask(self, mask):
self.mask = mask
def stop(self):
self.stop_progress()
if self.thread and self.thread.isRunning():
self.reduce.stopped = True
self.thread.exit()
def accept(self):
try:
with Lock(self.reduce.wrapper_file):
self.reduce.write_peaks(self.peaks)
except LockException as error:
if self.confirm_action('Clear lock?', str(error)):
Lock(self.reduce.wrapper_file).release()
if self.thread:
self.stop()
super(Mask3DDialog, self).accept()
def reject(self):
if self.thread:
self.stop()
super(Mask3DDialog, self).reject()
示例8: ExperimentDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class ExperimentDialog(BaseDialog):
def __init__(self, parent=None):
super(ExperimentDialog, self).__init__(parent)
self.experiment_file = NXroot()
self.experiment_file['entry'] = NXentry()
self.detectors = {}
self.entries = {}
self.setup_instrument()
self.set_layout(self.directorybox('Choose Experiment Directory', default=False),
self.instrument.grid(header=False))
self.set_title('New Experiment')
def setup_instrument(self):
entry = self.experiment_file['entry']
entry.instrument = NXinstrument()
entry.instrument.monochromator = NXmonochromator()
entry.instrument.detector = NXdetector()
entry['instrument/monochromator/wavelength'] = NXfield(0.5, dtype=np.float32)
entry['instrument/monochromator/wavelength'].attrs['units'] = 'Angstroms'
entry['instrument/monochromator/energy'] = NXfield(12.398419739640717/0.5, dtype=np.float32)
entry['instrument/monochromator/energy'].attrs['units'] = 'keV'
entry['instrument/detector/distance'] = NXfield(100.0, dtype=np.float32)
entry['instrument/detector/distance'].attrs['units'] = 'mm'
self.instrument = GridParameters()
self.instrument.add('experiment', 'experiment', 'Experiment Name')
self.instrument.add('wavelength', entry['instrument/monochromator/wavelength'], 'Wavelength (Ang)')
self.instrument.add('distance', entry['instrument/detector/distance'], 'Detector Distance (mm)')
detector_list = sorted(list(set([detector().name for detector in ALL_DETECTORS.values()])))
self.instrument.add('detector', detector_list, 'Detector')
self.instrument['detector'].value = 'Pilatus CdTe 2M'
self.instrument.add('positions', [0,1,2,3,4], 'Number of Detector Positions', slot=self.set_entries)
self.instrument['positions'].value = '0'
def setup_entry(self, position):
entry = NXentry()
self.detectors[position] = GridParameters()
self.detectors[position].add('x', 0.0, 'Translation - x (mm)')
self.detectors[position].add('y', 0.0, 'Translation - y (mm)')
self.experiment_file['f%s' % position] = entry
def get_detector(self):
for detector in ALL_DETECTORS:
if ALL_DETECTORS[detector]().name == self.instrument['detector'].value:
return ALL_DETECTORS[detector]()
@property
def positions(self):
return int(self.instrument['positions'].value)
def set_entries(self):
for position in range(1,self.positions+1):
self.setup_entry(position)
self.layout.addLayout(self.detectors[position].grid(header=False, title='Position %s'%position))
self.layout.addWidget(self.close_buttons(save=True))
def get_parameters(self):
entry = self.experiment_file['entry']
entry['instrument/monochromator/wavelength'] = self.instrument['wavelength'].value
entry['instrument/monochromator/energy'] = 12.398419739640717 / self.instrument['wavelength'].value
detector = self.get_detector()
entry['instrument/detector/description'] = detector.name
entry['instrument/detector/distance'] = self.instrument['distance'].value
entry['instrument/detector/pixel_size'] = detector.pixel1 * 1000
entry['instrument/detector/pixel_size'].attrs['units'] = 'mm'
entry['instrument/detector/pixel_mask'] = detector.mask
entry['instrument/detector/shape'] = detector.shape
entry['instrument/detector/yaw'] = 0.0
entry['instrument/detector/pitch'] = 0.0
entry['instrument/detector/roll'] = 0.0
for position in range(1, self.positions+1):
entry = self.experiment_file['f%s' % position]
entry['instrument'] = self.experiment_file['entry/instrument']
entry['instrument/detector/translation_x'] = self.detectors[position]['x'].value
entry['instrument/detector/translation_x'].attrs['units'] = 'mm'
entry['instrument/detector/translation_y'] = self.detectors[position]['y'].value
entry['instrument/detector/translation_y'].attrs['units'] = 'mm'
entry['instrument/detector/frame_time'] = 0.1
entry['instrument/detector/frame_time'].attrs['units'] = 'seconds'
def accept(self):
try:
home_directory = self.get_directory()
self.mainwindow.default_directory = home_directory
self.get_parameters()
configuration_directory = os.path.join(home_directory, 'configurations')
if not os.path.exists(configuration_directory):
os.makedirs(configuration_directory)
self.experiment_file.save(os.path.join(configuration_directory,
self.instrument['experiment'].value+'.nxs'))
task_directory = os.path.join(home_directory, 'tasks')
if not os.path.exists(task_directory):
os.makedirs(task_directory)
calibration_directory = os.path.join(home_directory, 'calibrations')
if not os.path.exists(calibration_directory):
os.makedirs(calibration_directory)
#.........这里部分代码省略.........
示例9: RefineLatticeDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class RefineLatticeDialog(BaseDialog):
def __init__(self, parent=None):
super(RefineLatticeDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.refine = NXRefine(self.entry)
self.refine.read_parameters()
self.parameters = GridParameters()
self.parameters.add('symmetry', self.refine.symmetries, 'Symmetry',
None, self.set_symmetry)
self.parameters.add('a', self.refine.a, 'Unit Cell - a (Ang)', True)
self.parameters.add('b', self.refine.b, 'Unit Cell - b (Ang)', True)
self.parameters.add('c', self.refine.c, 'Unit Cell - c (Ang)', True)
self.parameters.add('alpha', self.refine.alpha, 'Unit Cell - alpha (deg)', False)
self.parameters.add('beta', self.refine.beta, 'Unit Cell - beta (deg)', False)
self.parameters.add('gamma', self.refine.gamma, 'Unit Cell - gamma (deg)', False)
self.parameters.add('wavelength', self.refine.wavelength, 'Wavelength (Ang)', False)
self.parameters.add('distance', self.refine.distance, 'Distance (mm)', False)
self.parameters.add('yaw', self.refine.yaw, 'Yaw (deg)', False)
self.parameters.add('pitch', self.refine.pitch, 'Pitch (deg)', False)
self.parameters.add('roll', self.refine.roll, 'Roll (deg)')
self.parameters.add('xc', self.refine.xc, 'Beam Center - x', False)
self.parameters.add('yc', self.refine.yc, 'Beam Center - y', False)
self.parameters.add('phi_start', self.refine.phi_start, 'Phi Start (deg)', False)
self.parameters.add('phi_step', self.refine.phi_step, 'Phi Step (deg)')
self.parameters.add('chi_start', self.refine.chi_start, 'Chi Start (deg)', False)
self.parameters.add('chi_step', self.refine.chi_step, 'Chi Step (deg)')
self.parameters.add('omega_start', self.refine.omega_start, 'Omega Start (deg)', False)
self.parameters.add('omega_step', self.refine.omega_step, 'Omega Step (deg)')
self.parameters.add('polar', self.refine.polar_max,
'Max. Polar Angle (deg)', None, self.set_polar_max)
self.parameters.add('polar_tolerance', self.refine.polar_tolerance, 'Polar Angle Tolerance')
self.parameters.add('peak_tolerance', self.refine.peak_tolerance, 'Peak Angle Tolerance')
self.parameters.add('orientation_matrix', False, 'Orientation Matrix', False)
self.refine_buttons = self.action_buttons(
('Refine Angles', self.refine_angles),
('Refine HKLs', self.refine_hkls),
('Restore', self.restore_parameters),
('Reset', self.reset_parameters))
self.lattice_buttons = self.action_buttons(
('Plot', self.plot_lattice),
('List', self.list_peaks),
('Save', self.write_parameters))
self.set_layout(self.entry_layout, self.parameters.grid(),
self.refine_buttons, self.lattice_buttons,
self.close_buttons())
self.parameters.grid_layout.setVerticalSpacing(1)
self.set_title('Refining Lattice')
self.parameters['symmetry'].value = self.refine.symmetry
self.set_symmetry()
self.peaks_box = None
def choose_entry(self):
self.refine = NXRefine(self.entry)
self.update_parameters()
def update_parameters(self):
self.parameters['a'].value = self.refine.a
self.parameters['b'].value = self.refine.b
self.parameters['c'].value = self.refine.c
self.parameters['alpha'].value = self.refine.alpha
self.parameters['beta'].value = self.refine.beta
self.parameters['gamma'].value = self.refine.gamma
self.parameters['wavelength'].value = self.refine.wavelength
self.parameters['distance'].value = self.refine.distance
self.parameters['yaw'].value = self.refine.yaw
self.parameters['pitch'].value = self.refine.pitch
self.parameters['roll'].value = self.refine.roll
self.parameters['xc'].value = self.refine.xc
self.parameters['yc'].value = self.refine.yc
self.parameters['phi_start'].value = self.refine.phi_start
self.parameters['phi_step'].value = self.refine.phi_step
self.parameters['chi_start'].value = self.refine.chi_start
self.parameters['chi_step'].value = self.refine.chi_step
self.parameters['omega_start'].value = self.refine.omega_start
self.parameters['omega_step'].value = self.refine.omega_step
self.parameters['polar'].value = self.refine.polar_max
self.parameters['polar_tolerance'].value = self.refine.polar_tolerance
try:
self.refine.polar_angles, self.refine.azimuthal_angles = \
self.refine.calculate_angles(self.refine.xp, self.refine.yp)
except Exception:
pass
def transfer_parameters(self):
self.refine.a, self.refine.b, self.refine.c, \
self.refine.alpha, self.refine.beta, self.refine.gamma = \
self.get_lattice_parameters()
self.refine.set_symmetry()
self.refine.wavelength = self.get_wavelength()
#.........这里部分代码省略.........
示例10: FindDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class FindDialog(BaseDialog):
def __init__(self, parent=None):
super(FindDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.parameters = GridParameters()
self.parameters.add('threshold', '', 'Threshold')
self.parameters.add('first', '', 'First Frame')
self.parameters.add('last', '', 'Last Frame')
find_layout = QtWidgets.QHBoxLayout()
self.find_button = QtWidgets.QPushButton('Find Peaks')
self.find_button.clicked.connect(self.find_peaks)
self.peak_count = QtWidgets.QLabel()
self.peak_count.setVisible(False)
find_layout.addStretch()
find_layout.addWidget(self.find_button)
find_layout.addWidget(self.peak_count)
find_layout.addStretch()
self.set_layout(self.entry_layout,
self.parameters.grid(),
find_layout,
self.progress_layout(save=True))
self.progress_bar.setVisible(False)
self.progress_bar.setValue(0)
self.set_title('Find Peaks')
self.reduce = None
def choose_entry(self):
self.reduce = NXReduce(self.entry)
if self.reduce.first:
self.parameters['first'].value = self.reduce.first
if self.reduce.last:
self.parameters['last'].value = self.reduce.last
else:
try:
self.parameters['last'].value = len(self.entry.data.nxaxes[0])
except Exception:
pass
if self.reduce.threshold:
self.parameters['threshold'].value = self.reduce.threshold
@property
def threshold(self):
try:
_threshold = np.int32(self.parameters['threshold'].value)
if _threshold > 0.0:
return _threshold
else:
return None
except Exception:
return None
@property
def first(self):
try:
_first = np.int32(self.parameters['first'].value)
if _first >= 0:
return _first
else:
return None
except Exception as error:
return None
@property
def last(self):
try:
_last = np.int32(self.parameters['last'].value)
if _last > 0:
return _last
else:
return None
except Exception as error:
return None
def find_peaks(self):
self.check_lock(self.reduce.data_file)
self.start_thread()
self.reduce = NXReduce(self.entry, threshold=self.threshold,
first=self.first, last=self.last,
find=True, overwrite=True, gui=True)
self.reduce.moveToThread(self.thread)
self.reduce.start.connect(self.start_progress)
self.reduce.update.connect(self.update_progress)
self.reduce.result.connect(self.get_peaks)
self.reduce.stop.connect(self.stop)
self.thread.started.connect(self.reduce.nxfind)
self.thread.start(QtCore.QThread.LowestPriority)
def check_lock(self, file_name):
try:
with Lock(file_name, timeout=2):
pass
except LockException as error:
if self.confirm_action('Clear lock?', str(error)):
Lock(file_name).release()
def get_peaks(self, peaks):
self.peaks = peaks
#.........这里部分代码省略.........
示例11: ScanDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class ScanDialog(BaseDialog):
def __init__(self, parent=None):
super(ScanDialog, self).__init__(parent)
self.config_file = None
self.positions = 1
self.entries = {}
self.directory_box = self.directorybox('Choose Experiment Directory',
self.choose_directory,
default=False)
self.configuration_box = self.select_configuration()
self.configuration_layout = self.make_layout(
self.action_buttons(('Choose Experiment Configuration',
self.choose_configuration)),
self.configuration_box)
self.sample_box = self.select_sample()
self.sample_layout = self.make_layout(
self.action_buttons(('Choose Sample', self.choose_sample)),
self.sample_box)
self.scan_box = self.select_box(['1'], slot=self.choose_position)
self.setup_scans()
self.set_layout(self.directory_box,
self.configuration_layout,
self.sample_layout,
self.scan.grid(header=False),
self.make_layout(self.labels('Position'), self.scan_box),
self.entries[1].grid(header=False),
self.entries[2].grid(header=False),
self.entries[3].grid(header=False),
self.entries[4].grid(header=False),
self.entries[5].grid(header=False),
self.action_buttons(('Make Scan File', self.make_scan)),
self.close_buttons(close=True))
for i in self.entries:
self.entries[i].hide_grid()
self.entries[1].show_grid()
self.set_title('New Scan')
@property
def configuration(self):
return self.configuration_box.currentText()
@property
def sample(self):
return self.sample_box.currentText().split('/')[0]
@property
def label(self):
return self.sample_box.currentText().split('/')[1]
@property
def position(self):
try:
return int(self.scan_box.currentText())
except ValueError:
return 1
def choose_directory(self):
super(ScanDialog, self).choose_directory()
self.mainwindow.default_directory = self.get_directory()
self.setup_directory()
def setup_directory(self):
self.configuration_box.clear()
configurations = self.get_configurations()
for configuration in configurations:
self.configuration_box.addItem(configuration)
self.choose_configuration()
self.sample_box.clear()
samples = self.get_samples()
for sample in samples:
self.sample_box.addItem(sample)
self.sample_box.adjustSize()
self.choose_sample()
def select_configuration(self):
return self.select_box(self.get_configurations())
def get_configurations(self):
home_directory = self.get_directory()
if (os.path.exists(home_directory) and
'configurations' in os.listdir(home_directory)):
return [f for f in
os.listdir(os.path.join(home_directory, 'configurations'))
if f.endswith('.nxs')]
else:
return []
def choose_configuration(self):
home_directory = self.get_directory()
config_file = os.path.join(home_directory, 'configurations',
self.configuration)
if os.path.exists(config_file):
self.config_file = nxload(config_file)
self.positions = len(self.config_file.entries) - 1
self.scan_box.clear()
#.........这里部分代码省略.........
示例12: MakeDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class MakeDialog(BaseDialog):
def __init__(self, parent=None):
super(MakeDialog, self).__init__(parent)
self.scans = None
self.set_layout(self.directorybox("Choose Sample Directory",
self.choose_sample),
self.textboxes(('Scan Command', 'Pil2Mscan')),
self.action_buttons(('Select All', self.select_scans),
('Reverse All', self.reverse_scans),
('Clear All', self.clear_scans),
('Make Scan Macro', self.make_scans)),
self.close_buttons(close=True))
self.set_title('Make Scans')
def choose_sample(self):
super(MakeDialog, self).choose_directory()
self.sample_directory = self.get_directory()
self.experiment_directory = os.path.dirname(os.path.dirname(self.sample_directory))
self.macro_directory = os.path.join(self.experiment_directory, 'macros')
self.label = os.path.basename(self.sample_directory)
self.sample = os.path.basename(os.path.dirname(self.sample_directory))
self.experiment = os.path.basename(self.experiment_directory)
self.experiment_path = self.experiment
self.scan_path = os.path.join(self.experiment, self.sample, self.label)
self.setup_scans()
def setup_scans(self):
if self.scans:
self.scans.delete_grid()
self.scans = GridParameters()
all_files = [self.sample+'_'+d+'.nxs'
for d in os.listdir(self.sample_directory)
if os.path.isdir(os.path.join(self.sample_directory, d))]
filenames = sorted([f for f in all_files
if os.path.exists(os.path.join(self.sample_directory, f))],
key=natural_sort)
for i, f in enumerate(filenames):
scan = 'f%d' % i
self.scans.add(scan, i+1, f, True, self.update_scans)
self.scans[scan].checkbox.stateChanged.connect(self.update_scans)
self.insert_layout(2, self.scans.grid(header=False))
@property
def scan_list(self):
scan_list = []
for scan in self.scans.values():
if scan.checkbox.isChecked() and scan.value > 0:
scan_list.append(scan)
else:
scan.value = 0
return sorted(scan_list, key=attrgetter('value'))
def update_scans(self):
scan_list = self.scan_list
scan_number = 0
for scan in scan_list:
scan_number += 1
scan.value = scan_number
for scan in self.scans.values():
if scan.checkbox.isChecked() and scan.value == 0:
scan.value = scan_number + 1
scan_number += 1
def select_scans(self):
for i, scan in enumerate(self.scans):
self.scans[scan].value = i+1
self.scans[scan].checkbox.setChecked(True)
def reverse_scans(self):
for i, scan in enumerate(reversed(self.scan_list)):
scan.value = i+1
scan.checkbox.setChecked(True)
def clear_scans(self):
for scan in self.scans:
self.scans[scan].value = 0
self.scans[scan].checkbox.setChecked(False)
def make_scans(self):
scans = [scan.label.text() for scan in self.scan_list]
scan_command = self.textbox['Scan Command'].text()
scan_parameters = ['#command path filename temperature detx dety ' +
'phi_start phi_step phi_end chi omega frame_rate']
for scan in self.scan_list:
nexus_file = scan.label.text()
root = nxload(os.path.join(self.sample_directory, nexus_file))
temperature = root.entry.sample.temperature
base_name = os.path.basename(os.path.splitext(nexus_file)[0])
scan_dir = base_name.replace(self.sample+'_', '')
for entry in [root[e] for e in root if e != 'entry']:
if 'phi_set' in entry['instrument/goniometer']:
phi_start = entry['instrument/goniometer/phi_set']
else:
phi_start = entry['instrument/goniometer/phi']
phi_step = entry['instrument/goniometer/phi'].attrs['step']
phi_end = entry['instrument/goniometer/phi'].attrs['end']
if 'chi_set' in entry['instrument/goniometer']:
chi = entry['instrument/goniometer/chi_set']
else:
#.........这里部分代码省略.........
示例13: CalibrateDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class CalibrateDialog(BaseDialog):
def __init__(self, parent=None):
super(CalibrateDialog, self).__init__(parent)
self.plotview = None
self.data = None
self.counts = None
self.points = []
self.pattern_geometry = None
self.cake_geometry = None
self.is_calibrated = False
cstr = str(ALL_CALIBRANTS)
calibrants = sorted(cstr[cstr.index(':')+2:].split(', '))
self.parameters = GridParameters()
self.parameters.add('calibrant', calibrants, 'Calibrant')
self.parameters['calibrant'].value = 'CeO2'
self.parameters.add('wavelength', 0.5, 'Wavelength (Ang)', False)
self.parameters.add('distance', 100.0, 'Detector Distance (mm)', True)
self.parameters.add('xc', 512, 'Beam Center - x', True)
self.parameters.add('yc', 512, 'Beam Center - y', True)
self.parameters.add('yaw', 0.0, 'Yaw (degrees)', True)
self.parameters.add('pitch', 0.0, 'Pitch (degrees)', True)
self.parameters.add('roll', 0.0, 'Roll (degrees)', True)
self.parameters.add('search_size', 10, 'Search Size (pixels)')
rings = ['Ring%s' % i for i in range(1,21)]
self.rings_box = self.select_box(rings)
self.set_layout(self.select_entry(self.choose_entry),
self.action_buttons(('Plot Calibration', self.plot_data)),
self.parameters.grid(header=False),
self.make_layout(
self.action_buttons(('Select Points', self.select)),
self.rings_box),
self.action_buttons(('Calibrate', self.calibrate),
('Plot Cake', self.plot_cake),
('Restore', self.restore_parameters),
('Save', self.save_parameters)),
self.close_buttons(close=True))
self.set_title('Calibrating Powder')
def choose_entry(self):
if 'calibration' not in self.entry['instrument']:
raise NeXusError('Please load calibration data to this entry')
self.update_parameters()
self.plot_data()
def update_parameters(self):
self.parameters['wavelength'].value = self.entry['instrument/monochromator/wavelength']
detector = self.entry['instrument/detector']
self.parameters['distance'].value = detector['distance']
self.parameters['yaw'].value = detector['yaw']
self.parameters['pitch'].value = detector['pitch']
self.parameters['roll'].value = detector['roll']
if 'beam_center_x' in detector:
self.parameters['xc'].value = detector['beam_center_x']
if 'beam_center_y' in detector:
self.parameters['yc'].value = detector['beam_center_y']
self.data = self.entry['instrument/calibration']
self.counts = self.data.nxsignal.nxvalue
@property
def search_size(self):
return int(self.parameters['search_size'].value)
@property
def ring(self):
return int(self.rings_box.currentText()[4:]) - 1
@property
def ring_color(self):
colors = ['r', 'b', 'g', 'c', 'm'] * 4
return colors[self.ring]
def plot_data(self):
if self.plotview is None:
if 'Powder Calibration' in plotviews:
self.plotview = plotviews['Powder Calibration']
else:
self.plotview = NXPlotView('Powder Calibration')
self.plotview.plot(self.data, log=True)
self.plotview.aspect='equal'
self.plotview.ytab.flipped = True
self.clear_peaks()
def on_button_press(self, event):
self.plotview.make_active()
if event.inaxes:
self.xp, self.yp = event.x, event.y
else:
self.xp, self.yp = 0, 0
def on_button_release(self, event):
if event.inaxes:
if abs(event.x - self.xp) > 5 or abs(event.y - self.yp) > 5:
return
x, y = self.plotview.inverse_transform(event.xdata, event.ydata)
for i, point in enumerate(self.points):
circle = point[0]
#.........这里部分代码省略.........
示例14: MaximumDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class MaximumDialog(BaseDialog):
def __init__(self, parent=None):
super(MaximumDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.parameters = GridParameters()
self.parameters.add('first', '', 'First Frame')
self.parameters.add('last', '', 'Last Frame')
self.output = QtWidgets.QLabel('Maximum Value:')
self.set_layout(self.entry_layout, self.output,
self.parameters.grid(),
self.action_buttons(('Find Maximum', self.find_maximum)),
self.progress_layout(save=True))
self.progress_bar.setVisible(False)
self.progress_bar.setValue(0)
self.set_title('Find Maximum Value')
self.reduce = None
def choose_entry(self):
self.reduce = NXReduce(self.entry)
self.maximum = self.reduce.maximum
if self.reduce.first:
self.parameters['first'].value = self.reduce.first
if self.reduce.last:
self.parameters['last'].value = self.reduce.last
@property
def first(self):
try:
_first = np.int32(self.parameters['first'].value)
if _first >= 0:
return _first
else:
return None
except Exception as error:
return None
@property
def last(self):
try:
_last = np.int32(self.parameters['last'].value)
if _last > 0:
return _last
else:
return None
except Exception as error:
return None
@property
def maximum(self):
return np.float(self.output.text().split()[-1])
@maximum.setter
def maximum(self, value):
self.output.setText('Maximum Value: %s' % value)
def find_maximum(self):
self.check_lock(self.reduce.data_file)
self.start_thread()
self.reduce = NXReduce(self.entry, first=self.first, last=self.last,
maxcount=True, overwrite=True, gui=True)
self.reduce.moveToThread(self.thread)
self.reduce.start.connect(self.start_progress)
self.reduce.update.connect(self.update_progress)
self.reduce.result.connect(self.get_maximum)
self.reduce.stop.connect(self.stop)
self.thread.started.connect(self.reduce.nxmax)
self.thread.finished.connect(self.stop)
self.thread.start(QtCore.QThread.LowestPriority)
def check_lock(self, file_name):
try:
with Lock(file_name, timeout=2):
pass
except LockException as error:
if self.confirm_action('Clear lock?', str(error)):
Lock(file_name).release()
def get_maximum(self, maximum):
self.maximum = maximum
def stop(self):
self.stop_progress()
if self.thread and self.thread.isRunning():
self.reduce.stopped = True
self.stop_thread()
def accept(self):
try:
with Lock(self.reduce.wrapper_file):
self.reduce.write_maximum(self.maximum)
except LockException as error:
if self.confirm_action('Clear lock?', str(error)):
Lock(self.reduce.wrapper_file).release()
self.stop()
super(MaximumDialog, self).accept()
#.........这里部分代码省略.........
示例15: ConvertDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import add [as 别名]
class ConvertDialog(BaseDialog):
def __init__(self, parent=None):
super(ConvertDialog, self).__init__(parent)
layout = QtGui.QVBoxLayout()
self.select_entry()
self.parameters = GridParameters()
self.parameters.add('Ei', self.entry['instrument/monochromator/energy'],
'Incident Energy')
self.parameters.add('dQ', self.round(np.sqrt(self.Ei/2)/50), 'Q Step')
self.parameters.add('dE', self.round(self.Ei/50), 'Energy Step')
layout.addLayout(self.entry_layout)
layout.addLayout(self.parameters.grid())
layout.addLayout(self.action_buttons(('Plot', self.plot_data),
('Save', self.save_data)))
layout.addWidget(self.close_buttons())
self.setLayout(layout)
self.setWindowTitle('Converting to (Q,E)')
@property
def Ei(self):
return self.parameters['Ei'].value
@property
def dQ(self):
return self.parameters['dQ'].value
@property
def dE(self):
return self.parameters['dE'].value
def read_parameters(self):
self.L1 = - self.entry['sample/distance']
self.L2 = np.mean(self.entry['instrument/detector/distance'])
self.m1 = self.entry['monitor1']
self.t_m1 = self.m1.moment()
self.d_m1 = self.entry['monitor1/distance']
def convert_tof(self, tof):
ki = np.sqrt(self.Ei / 2.0721)
ts = self.t_m1 + 1588.254 * (self.L1 - self.d_m1) / ki
kf = 1588.254 * self.L2 / (tof - ts)
eps = self.Ei - 2.0721*kf**2
return eps
def convert_QE(self):
"""Convert S(phi,eps) to S(Q,eps)"""
self.read_parameters()
Ei = self.Ei
dQ = self.dQ
dE = self.dE
pol, tof = centers(self.entry['data'].nxsignal, self.entry['data'].nxaxes)
en = self.convert_tof(tof)
idx_max = min(np.where(np.abs(en-0.75*Ei)<0.1)[0])
en = en[:idx_max]
data = self.entry['data'].nxsignal.nxdata[:,:idx_max]
if self.entry['data'].nxerrors:
errors = self.entry['data'].nxerrors.nxdata[:]
Q = np.zeros((len(pol), len(en)))
E = np.zeros((len(pol), len(en)))
for i in range(0,len(pol)):
p = pol[i]
Q[i,:] = np.array(np.sqrt((2*Ei - en - 2*np.sqrt(Ei*(Ei-en))
* np.cos(p*np.pi/180.0))/2.0721))
E[i,:] = np.array(en)
s = Q.shape
Qin = Q.reshape(s[0]*s[1])
Ein = E.reshape(s[0]*s[1])
datain = data.reshape(s[0]*s[1])
if self.entry['data'].nxerrors:
errorsin = errors.reshape(s[0]*s[1])
qmin = Q.min()
qmax = Q.max()
emin = E.min()
emax = E.max()
NQ = int((qmax-qmin)/dQ) + 1
NE = int((emax-emin)/dE) + 1
Qb = np.linspace(qmin, qmax, NQ)
Eb = np.linspace(emin, emax, NE)
#histogram and normalize
norm, nbin = np.histogramdd((Ein,Qin), bins=(Eb,Qb))
hist, hbin = np.histogramdd((Ein,Qin), bins=(Eb,Qb), weights=datain)
if self.entry['data'].nxerrors:
histe, hbin = np.histogramdd((Ein,Qin), bins=(Eb,Qb), weights=errorsin*errorsin)
histe = histe**0.5
err = histe/norm
I = NXfield(hist/norm, name='S(Q,E)')
Qb = NXfield(Qb[:-1]+dQ/2., name='Q')
#.........这里部分代码省略.........