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)
|