def __init__(self, system, database, parent=None): super(HeatCapacityWidget, self).__init__(parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.system = system self.database = database self.canvas = self.ui.mplwidget.canvas self.axes = self.canvas.axes
class HeatCapacityWidget(QtGui.QWidget): def __init__(self, system, database, parent=None): super(HeatCapacityWidget, self).__init__(parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.system = system self.database = database self.canvas = self.ui.mplwidget.canvas self.axes = self.canvas.axes def rebuild_cv_plot(self): self._compute_thermodynamic_info(on_finish=self.make_cv_plot) def make_cv_plot(self): self._compute_cv() self._plot_cv() def _get_ndof(self): return self.system.get_ndof() def _get_nmin_max(self): txt = self.ui.lineEdit_nmin_max.text() if len(txt) > 0: nmin_max = int(txt) else: nmin_max = None return nmin_max def _compute_thermodynamic_info(self, nproc=2, on_finish=None, verbose=False): nmin = self._get_nmin_max() if nmin is not None and nmin < self.database.number_of_minima(): self.minima = self.database.minima()[:nmin] else: self.minima = self.database.minima() self.worker = GetThermodynamicInfoParallelQT(self.system, self.database, npar=nproc, verbose=verbose, only_minima=True) if on_finish is not None: self.worker.on_finish.connect(on_finish) self.worker.start() njobs = self.worker.njobs self.ui.label_status.setText("computing thermodynamic information for %d minima" % njobs) def _compute_cv(self): Tlist = self._get_T_range() lZ, U, U2, Cv = minima_to_cv(self.minima, Tlist, self._get_ndof()) self.Tlist = Tlist self.Cv = Cv def _get_Tmin(self): res = 0.01 txt = self.ui.lineEdit_Tmin.text() if len(txt) > 0: res = float(txt) return res def _get_Tmax(self): res = 1. txt = self.ui.lineEdit_Tmax.text() if len(txt) > 0: res = float(txt) return res def _get_nT(self): res = 100 txt = self.ui.lineEdit_nT.text() if len(txt) > 0: res = float(txt) return res def _get_T_range(self): Tmin = self._get_Tmin() Tmax = self._get_Tmax() nT = self._get_nT() dT = (Tmax - Tmin) / nT return np.arange(Tmin, Tmax, dT) def _plot_cv(self): self.ui.label_status.setText("showing heat capacity calculated with %d minima" % len(self.minima)) axes = self.axes axes.clear() axes.plot(self.Tlist, self.Cv) self.canvas.draw() def on_btn_recalculate_clicked(self, clicked=None): if clicked is None: return self.rebuild_cv_plot()
class HeatCapacityWidget(QWidget): def __init__(self, system, database, parent=None): super(HeatCapacityWidget, self).__init__(parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.system = system self.database = database self.canvas = self.ui.mplwidget.canvas self.axes = self.canvas.axes def rebuild_cv_plot(self): self._compute_thermodynamic_info(on_finish=self.make_cv_plot) def make_cv_plot(self): self._compute_cv() self._plot_cv() def _get_ndof(self): return self.system.get_ndof() def _get_nmin_max(self): txt = self.ui.lineEdit_nmin_max.text() if len(txt) > 0: nmin_max = int(txt) else: nmin_max = None return nmin_max def _compute_thermodynamic_info(self, nproc=2, on_finish=None, verbose=False): nmin = self._get_nmin_max() if nmin is not None and nmin < self.database.number_of_minima(): self.minima = self.database.minima()[:nmin] else: self.minima = self.database.minima() self.worker = GetThermodynamicInfoParallelQT(self.system, self.database, npar=nproc, verbose=verbose, only_minima=True) if on_finish is not None: self.worker.on_finish.connect(on_finish) self.worker.start() njobs = self.worker.njobs self.ui.label_status.setText( "computing thermodynamic information for %d minima" % njobs) def _compute_cv(self): Tlist = self._get_T_range() lZ, U, U2, Cv = minima_to_cv(self.minima, Tlist, self._get_ndof()) self.Tlist = Tlist self.Cv = Cv def _get_Tmin(self): res = 0.01 txt = self.ui.lineEdit_Tmin.text() if len(txt) > 0: res = float(txt) return res def _get_Tmax(self): res = 1. txt = self.ui.lineEdit_Tmax.text() if len(txt) > 0: res = float(txt) return res def _get_nT(self): res = 100 txt = self.ui.lineEdit_nT.text() if len(txt) > 0: res = float(txt) return res def _get_T_range(self): Tmin = self._get_Tmin() Tmax = self._get_Tmax() nT = self._get_nT() dT = (Tmax - Tmin) / nT return np.arange(Tmin, Tmax, dT) def _plot_cv(self): self.ui.label_status.setText( "showing heat capacity calculated with %d minima" % len(self.minima)) axes = self.axes axes.clear() axes.plot(self.Tlist, self.Cv) self.canvas.draw() def on_btn_recalculate_clicked(self, clicked=None): if clicked is None: return self.rebuild_cv_plot()