class XasDialog(BaseDialog): def __init__(self, parent=None): super(XasDialog, self).__init__(parent) self.select_entry() dets_list = {} self.dets = self.entry['instrument/absorbed_beam'] self.signal_combo = self.select_box(self.dets, default='sdd3_2', slot=self.plot_xas) self.lab_sig = self.labels('Signal :', align='left') self.set_layout(self.entry_layout, self.lab_sig, self.signal_combo, self.close_buttons()) self.set_title('Plot Single XAS') @property def signal_s(self): return np.array(self.entry.instrument.absorbed_beam[ self.signal_combo.currentText()]) @property def energy(self): return np.array(self.entry.instrument.monochromator.en) def plot_xas(self): self.singleXas = NXdata(self.signal_s, self.energy) self.singleXas.plot(xmin=min(self.energy), xmax=max(self.energy), ymin=min(self.signal_s), ymax=max(self.signal_s)) return def accept(self): try: self.plot_xas super(XasDialog, self).accept() except NeXusError as error: report_error("Plot Single XAS", error) super(XasDialog, self).reject()
class MapDialog(BaseDialog): def __init__(self, parent=None): super(MapDialog, self).__init__(parent) self.select_entry() dets_list = {} self.dets = self.entry['instrument/fluorescence'] self.signal_combo = self.select_box(self.dets, default='sdd3') self.axes = self.entry['sample/positioner'] self.axis1_combo = self.select_box(self.axes, default='hex_xp') self.axis2_combo = self.select_box(self.axes, default='hex_yp') roi_peak_layout = QtGui.QHBoxLayout() roi_peak_layout.addWidget(QtGui.QLabel('ROI Peak')) self.roi_peak = QtGui.QSlider(Qt.Horizontal) self.pLabel = QtGui.QLineEdit() self.pLabel.setText('800') self.pLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)) self.pLabel.setAlignment(Qt.AlignRight) self.roi_peak.setMinimum(0) self.roi_peak.setMaximum(256) self.roi_peak.setValue(80) self.roi_peak.setTickPosition(QtGui.QSlider.TicksBelow) self.roi_peak.setTickInterval(1) roi_peak_layout.addWidget(self.roi_peak) self.roi_peak.valueChanged.connect(self.setRoi) self.pLabel.returnPressed.connect(self.setRoi2) self.pUnits = QtGui.QLabel('eV') roi_peak_layout.addWidget(self.pLabel) roi_peak_layout.addWidget(self.pUnits) roi_width_layout = QtGui.QHBoxLayout() roi_width_layout.addWidget(QtGui.QLabel('ROI Width')) self.roi_width = QtGui.QSlider(Qt.Horizontal) self.wLabel = QtGui.QLineEdit() self.wLabel.setText('200') self.wLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)) self.wLabel.setAlignment(Qt.AlignRight) self.roi_width.setMinimum(2) self.roi_width.setMaximum(100) self.roi_width.setValue(20) self.roi_width.setTickPosition(QtGui.QSlider.TicksBelow) self.roi_peak.setTickInterval(1) roi_width_layout.addWidget(self.roi_width) self.roi_width.valueChanged.connect(self.setRoi) self.wLabel.returnPressed.connect(self.setRoi2) self.signal_combo.activated.connect(self.setRoi) self.axis1_combo.activated.connect(self.setRoi) self.axis2_combo.activated.connect(self.setRoi) self.entry_box.activated.connect(self.setRoi) self.wUnits = QtGui.QLabel('eV') roi_width_layout.addWidget(self.wLabel) roi_width_layout.addWidget(self.wUnits) lab_sig_layout = QtGui.QHBoxLayout() self.lab_sig = self.labels('Detector :', align='left') lab_sig_layout.addLayout(self.lab_sig) lab_sig_layout.addWidget(self.signal_combo) lab_sig_layout.addStretch() lab_axis1_layout = QtGui.QHBoxLayout() self.lab_axis1 = self.labels('X-Axis :', align='left') lab_axis1_layout.addLayout(self.lab_axis1) lab_axis1_layout.addWidget(self.axis1_combo) lab_axis1_layout.addStretch() lab_axis2_layout = QtGui.QHBoxLayout() self.lab_axis2 = self.labels('Y-Axis :', align='left') lab_axis2_layout.addLayout(self.lab_axis2) lab_axis2_layout.addWidget(self.axis2_combo) lab_axis2_layout.addStretch() self.set_layout(self.entry_layout, lab_sig_layout, lab_axis1_layout, lab_axis2_layout, roi_peak_layout, roi_width_layout, self.close_buttons()) self.set_title('Convert to 2D map') @property def signal(self): return self.signal_combo.currentText() @property def axis1(self): return self.axis1_combo.currentText() @property def axis2(self): return self.axis2_combo.currentText() def get_pLabel(self): value = int(self.pLabel.text()) value = value/10 return value def get_wLabel(self): value = int(self.wLabel.text()) value = value/10 return value @property def roi_up(self): up = self.peak + self.width/2 if up > 256: return 256 return up @property def roi_dn(self): dn = self.peak - self.width/2 if dn < 0: return 0 return dn def roi_peak_label(self): self.roi_peak.setValue(self.peak) self.pLabel.setText(str(self.peak) + '0') return self.pLabel def roi_width_label(self): self.roi_width.setValue(self.width) self.wLabel.setText(str(self.width) + '0') return self.wLabel def setRoi2(self): self.roi_width.setValue(self.get_wLabel()) self.roi_peak.setValue(self.get_pLabel()) return def setRoi(self): self.peak = self.roi_peak.value() self.width = self.roi_width.value() self.roi_width_label() self.roi_peak_label() self.plot_map() return self.roi_dn, self.roi_up def getylen(self): command = self.entry['command'] if str(command).split(" ")[0] == "cmesh": str_n = str(command).split(" ")[8] num = int(str_n) return num else: return False def grid(self, x, y, z, resX, resY): shift = 0.5 x_ad = x xi = linspace(min(x), max(x), resX) yi = linspace(min(y), max(y), resY) for i in range(1, len(x)): x_ad[i] = x[i] + shift*(x[i] - x[i-1]) Z = griddata(x_ad, y, z, xi, yi, interp='linear') X, Y = meshgrid(xi, yi) return X, Y, Z, xi, yi def plot_map(self): self.x1 = np.array(self.entry['sample/positioner'][self.axis1]) self.y1 = np.array(self.entry['sample/positioner'][self.axis2]) self.sdd = np.array(self.entry['instrument/fluorescence'][self.signal]) row, col = np.shape(self.sdd) self.z1 = np.zeros(row) for i in range(0, row): self.z1[i] = self.sdd[i, self.roi_dn:self.roi_up].sum(axis=0) self.ylen = self.getylen() if self.ylen: self.xlen = len(self.entry['sample/positioner'][self.axis1])/self.ylen else: self.ylen = 100 self.xlen = 100 X,Y,Z,xi,yi = self.grid(self.x1, self.y1, self.z1, self.xlen, self.ylen) self.data = NXdata(Z, [yi, xi]) self.data.plot(xmin = min(self.x1), xmax=max(self.x1), ymin = min(self.y1), ymax = max(self.y1), zmin = min(self.z1), zmax = max(self.z1)) return X, Y, Z, xi, yi def save_map(self): X,Y,Z, xi, yi = self.plot_map() try: self.tree.map2ddata = NXroot() self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)] = NXentry() self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)]['data'] = NXdata(Z, [yi,xi]) except: try: self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)] = NXentry() self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)]['data'] = NXdata(Z, [yi,xi]) except: del self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)] self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)] = NXentry() self.tree.map2ddata['roi' + '_' + str(self.roi_dn) + ':' + str(self.roi_up)]['data'] = NXdata(Z, [yi,xi]) plt.figure() plt.contourf(X,Y,Z) plt.gca().invert_yaxis() plt.gca().invert_xaxis() plt.xlabel('x (mm)') plt.ylabel('y (mm)') plt.title("2D Contour Map") plt.colorbar() plt.show() return self.tree.map2ddata def accept(self): try: self.save_map() super(MapDialog, self).accept() except NeXusError as error: report_error("Converting 2D map", error) super(MapDialog, self).reject()
def accept(self): data = NXdata(self.signal, self.get_axes(), title=self.signal.nxtitle) data.plot(fmt=self.fmt) super(PlotDialog, self).accept()