def __init__(self, system, database, temperature=1., parent=None): QtGui.QWidget.__init__(self, parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.system = system self.database = database self.ui.lineEdit_T.setText(str(temperature)) self.ui.lineEdit_A.setReadOnly(True) self.ui.lineEdit_B.setReadOnly(True) self.A = set() self.B = set()
class RateWidget(QtGui.QWidget): def __init__(self, system, database, temperature=1., parent=None): QtGui.QWidget.__init__(self, parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.system = system self.database = database self.ui.lineEdit_T.setText(str(temperature)) self.ui.lineEdit_A.setReadOnly(True) self.ui.lineEdit_B.setReadOnly(True) self.A = set() self.B = set() def update_selected_text(self): if len(self.A) > 0: m = next(iter(self.A)) self.ui.lineEdit_A.setText("%s (%s)" % (m.energy, m._id)) if len(self.B) > 0: m = next(iter(self.B)) self.ui.lineEdit_B.setText("%s (%s)" % (m.energy, m._id)) def update_A(self, minimum): self.A = {minimum} self.update_selected_text() def update_B(self, minimum): self.B = {minimum} self.update_selected_text() # def read_A(self): # line = self.ui.lineEdit_A.text() # A = set(map(int, line.split())) # return A # def read_B(self): # line = self.ui.lineEdit_B.text() # B = set(map(int, line.split())) # return B def _add_result(self, A, B, rAB, rBA): Aid = [m._id for m in A] Bid = [m._id for m in B] self.ui.textBrowser.append("rate %s -> %s = %s" % (Aid, Bid, rAB)) self.ui.textBrowser.append("rate %s -> %s = %s" % (Bid, Aid, rBA)) self.ui.textBrowser.append("") def _compute_rates(self): self.ui.label_status.setText("computing rates %s <-> %s" % (self.A, self.B)) T = float(self.ui.lineEdit_T.text()) calculator = RateCalculation(self.transition_states, self.A, self.B, T=T, use_fvib=True) calculator.compute_rates() rAB = calculator.get_rate_AB() rBA = calculator.get_rate_BA() self._add_result(self.A, self.B, rAB, rBA) self.ui.label_status.setText("") def compute_rates(self): self._compute_thermodynamic_info(on_finish=self._compute_rates) def _compute_thermodynamic_info(self, nproc=2, on_finish=None, verbose=False): self.transition_states = list(self.database.transition_states()) self.worker = GetThermodynamicInfoParallelQT(self.system, self.database, npar=nproc, verbose=verbose, only_minima=False) 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 on_btn_compute_clicked(self, clicked=None): if clicked is None: return self.compute_rates()