本文整理汇总了Python中nexpy.gui.datadialogs.GridParameters.grid方法的典型用法代码示例。如果您正苦于以下问题:Python GridParameters.grid方法的具体用法?Python GridParameters.grid怎么用?Python GridParameters.grid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类nexpy.gui.datadialogs.GridParameters
的用法示例。
在下文中一共展示了GridParameters.grid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: SampleDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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()
示例2: MaskDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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)
示例3: EnergyDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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 grid [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: LatticeDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [as 别名]
class LatticeDialog(BaseDialog):
def __init__(self, parent=None):
super(LatticeDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
self.refine = NXRefine()
self.parameters = GridParameters()
self.parameters.add('symmetry', self.refine.symmetries, 'Symmetry',
slot=self.set_lattice_parameters)
self.parameters.add('centring', self.refine.centrings, 'Cell Centring')
self.parameters.add('a', self.refine.a, 'Unit Cell - a (Ang)',
slot=self.set_lattice_parameters)
self.parameters.add('b', self.refine.b, 'Unit Cell - b (Ang)',
slot=self.set_lattice_parameters)
self.parameters.add('c', self.refine.c, 'Unit Cell - c (Ang)',
slot=self.set_lattice_parameters)
self.parameters.add('alpha', self.refine.alpha, 'Unit Cell - alpha (deg)',
slot=self.set_lattice_parameters)
self.parameters.add('beta', self.refine.beta, 'Unit Cell - beta (deg)',
slot=self.set_lattice_parameters)
self.parameters.add('gamma', self.refine.gamma, 'Unit Cell - gamma (deg)',
slot=self.set_lattice_parameters)
self.parameters['symmetry'].value = self.refine.symmetry
self.parameters['centring'].value = self.refine.centring
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('Defining Lattice')
def choose_entry(self):
self.refine = NXRefine(self.entry)
self.update_parameters()
def update_parameters(self):
self.parameters['symmetry'].value = self.refine.symmetry
self.parameters['centring'].value = self.refine.centring
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
def get_symmetry(self):
return self.parameters['symmetry'].value
def get_centring(self):
return self.parameters['centring'].value
def get_lattice_parameters(self):
return (self.parameters['a'].value,
self.parameters['b'].value,
self.parameters['c'].value,
self.parameters['alpha'].value,
self.parameters['beta'].value,
self.parameters['gamma'].value)
def set_lattice_parameters(self):
symmetry = self.get_symmetry()
if symmetry == 'cubic':
self.parameters['b'].value = self.parameters['a'].value
self.parameters['c'].value = self.parameters['a'].value
self.parameters['alpha'].value = 90.0
self.parameters['beta'].value = 90.0
self.parameters['gamma'].value = 90.0
elif symmetry == 'tetragonal':
self.parameters['b'].value = self.parameters['a'].value
self.parameters['alpha'].value = 90.0
self.parameters['beta'].value = 90.0
self.parameters['gamma'].value = 90.0
elif symmetry == 'orthorhombic':
self.parameters['alpha'].value = 90.0
self.parameters['beta'].value = 90.0
self.parameters['gamma'].value = 90.0
elif symmetry == 'hexagonal':
self.parameters['b'].value = self.parameters['a'].value
self.parameters['alpha'].value = 90.0
self.parameters['beta'].value = 90.0
self.parameters['gamma'].value = 120.0
elif symmetry == 'monoclinic':
self.parameters['alpha'].value = 90.0
self.parameters['gamma'].value = 90.0
def get_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.symmetry = self.get_symmetry()
self.refine.centring = self.get_centring()
def plot_lattice(self):
try:
self.get_parameters()
self.plot_peaks(self.refine.xp, self.refine.yp)
polar_min, polar_max = plotview.xaxis.get_limits()
self.plot_rings(polar_max)
#.........这里部分代码省略.........
示例6: RefineLatticeDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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()
#.........这里部分代码省略.........
示例7: ConvertDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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')
#.........这里部分代码省略.........
示例8: OrientationDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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)
#.........这里部分代码省略.........
示例9: CalculateDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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)
示例10: Mask3DDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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()
示例11: FindDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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
#.........这里部分代码省略.........
示例12: MakeDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [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 grid [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 grid [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: FindDialog
# 需要导入模块: from nexpy.gui.datadialogs import GridParameters [as 别名]
# 或者: from nexpy.gui.datadialogs.GridParameters import grid [as 别名]
class FindDialog(BaseDialog):
def __init__(self, parent=None):
super(FindDialog, self).__init__(parent)
self.select_entry(self.choose_entry)
try:
threshold = np.float32(self.entry.data.attrs["maximum"]) / 20
max_frame = np.int32(len(self.entry.data.nxaxes[0]))
except Exception:
threshold = 5000
max_frame = 0
self.parameters = GridParameters()
self.parameters.add("threshold", threshold, "Threshold")
self.parameters.add("min", 0, "First Frame")
self.parameters.add("max", max_frame, "Last Frame")
self.parameters.add("pixel_tolerance", 50, "Pixel Tolerance")
self.parameters.add("frame_tolerance", 10, "Frame Tolerance")
find_layout = QtGui.QHBoxLayout()
self.find_button = QtGui.QPushButton("Find Peaks")
self.find_button.clicked.connect(self.find_peaks)
self.peak_count = QtGui.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.set_title("Find Peaks")
self.npk = 0
try:
self.parameters["max"].value = self.entry["data"].nxsignal.shape[0]
self.parameters["threshold"].value = self.entry["data"].attrs["maximum"] / 20
except Exception:
pass
def choose_entry(self):
try:
self.parameters["threshold"].value = self.entry["data"].attrs["maximum"] / 20
self.parameters["max"].value = len(self.entry.data.nxaxes[0])
except Exception:
pass
def get_threshold(self):
return self.parameters["threshold"].value
def get_limits(self):
return np.int32(self.parameters["min"].value), np.int32(self.parameters["max"].value)
def get_tolerance(self):
"""
Return pixel and frame tolerances from the text boxes.
Note that the pixel tolerance is squared to save square-root
calculations in peak comparisons.
"""
return (self.parameters["pixel_tolerance"].value, self.parameters["frame_tolerance"].value)
def find_peaks(self):
field = self.entry["data"].nxsignal
try:
self.mask = self.entry["instrument/detector/pixel_mask"]
except NeXusError:
self.mask = None
self.layout.removeWidget(self.find_button)
self.find_button.setVisible(False)
if len(field.shape) == 2:
self.layout.addWidget(self.close_buttons(save=True))
elif len(field.shape) > 2:
self.layout.addLayout(self.progress_layout(save=True))
threshold = self.get_threshold()
self.blim = np.zeros(field.shape[-2:], np.int32)
self.verbose = 0
lio = labelimage(field.shape[-2:], flipper=flip1)
allpeaks = []
if len(field.shape) == 2:
res = None
else:
chunk_size = field.nxfile[field.nxpath].chunks[0]
z_min, z_max = self.get_limits()
pixel_tolerance, frame_tolerance = self.get_tolerance()
self.progress_bar.setRange(z_min, z_max)
for i in range(0, field.shape[0], chunk_size):
try:
if i + chunk_size > z_min and i < z_max:
self.progress_bar.setValue(i)
self.update_progress()
v = field[i : i + chunk_size, :, :].nxdata
for j in range(chunk_size):
if i + j >= z_min and i + j <= z_max:
omega = np.float32(i + j)
lio.peaksearch(v[j], threshold, omega)
if lio.res is not None:
blob_moments(lio.res)
#.........这里部分代码省略.........