nmreval/src/gui_qt/io/fcbatchreader.py

108 lines
4.2 KiB
Python
Raw Normal View History

2022-03-08 09:27:40 +00:00
import pathlib
2022-10-20 15:23:15 +00:00
from nmreval.io.fcbatchreader import FCReader
2022-03-08 09:27:40 +00:00
from ..lib.utils import busy_cursor
from ..Qt import QtCore, QtWidgets, QtGui
from .._py.fcreader import Ui_FCEval_dialog
class QFCReader(QtWidgets.QDialog, Ui_FCEval_dialog):
data_read = QtCore.pyqtSignal(list, str)
def __init__(self, path=None, parent=None):
super().__init__(parent=parent)
self.setupUi(self)
if path is None:
path = pathlib.Path().home()
self.path = path
self.start_lineedit.setValidator(QtGui.QDoubleValidator())
self.stop_lineedit.setValidator(QtGui.QDoubleValidator())
self.listWidget.installEventFilter(self)
def eventFilter(self, src: QtCore.QObject, evt: QtCore.QEvent) -> bool:
# intercept key press in listwidget to allow deletion with Del
if evt.type() == QtCore.QEvent.KeyPress:
if evt.key() == QtCore.Qt.Key_Delete:
self.listWidget.takeItem(self.listWidget.currentRow())
return True
return super().eventFilter(src, evt)
@QtCore.pyqtSlot(int, name='on_region_checkBox_stateChanged')
def use_region(self, state: int):
self.start_lineedit.setEnabled(state == QtCore.Qt.Checked)
self.stop_lineedit.setEnabled(state == QtCore.Qt.Checked)
@QtCore.pyqtSlot(name='on_file_pushbutton_clicked')
@QtCore.pyqtSlot(name='on_dir_pushbutton_clicked')
def get_input(self):
if self.sender() == self.file_pushbutton:
infiles, _ = QtWidgets.QFileDialog.getOpenFileNames(caption='Select HDF files',
directory=str(self.path),
filter='HDF files (*.h5)')
if infiles:
self.listWidget.addItems(infiles)
self.label.setText(str(pathlib.Path(infiles[-1]).parent))
else:
infiles = QtWidgets.QFileDialog.getExistingDirectory(caption='Select input directory',
directory=str(self.path),
options=QtWidgets.QFileDialog.ShowDirsOnly)
if infiles:
self.listWidget.addItem(infiles)
self.label.setText(str(pathlib.Path(infiles).parent))
@QtCore.pyqtSlot(name='on_savebutton_clicked')
def save_path(self):
outfile = QtWidgets.QFileDialog.getExistingDirectory(self, caption='Select directory',
directory=self.label.text(),
options=QtWidgets.QFileDialog.ShowDirsOnly)
if outfile:
self.label.setText(outfile)
def accept(self):
items = [self.listWidget.item(i).text() for i in range(self.listWidget.count())]
if items:
with busy_cursor():
self.read(items)
self.close()
def read(self, items):
region = (None, None)
if self.region_box.isChecked():
start = None
if self.start_lineedit.text():
start = float(self.start_lineedit.text())
stop = None
if self.stop_lineedit.text():
stop = float(self.stop_lineedit.text())
region = (start, stop)
fc_eval = FCReader(items)
try:
fc_eval.load_magnetization(region=region, overwrite=self.overwrite_cb.isChecked())
except OSError as e:
2022-10-20 15:23:15 +00:00
QtWidgets.QMessageBox.warning(self, 'Missing data', e.strerror)
2022-03-08 09:27:40 +00:00
return
fc_eval.fit(kww=self.kww_checkbox.isChecked(), save_fits=True, save_fig=True)
save_variables = []
for name, cb in [('t1', self.t1_cb), ('beta', self.beta_cb), ('m0', self.m0_cb), ('off', self.off_cb)]:
if cb.isChecked():
save_variables.append(name)
ret_vals = []
ret_vals.extend(fc_eval.get_parameter(path=self.label.text(), kind='temp', parameter=save_variables))
grp = ''
if self.graph_checkbox.isChecked():
grp = self.graph_comboBox.currentData(QtCore.Qt.UserRole)
self.data_read.emit(ret_vals, grp)