Esempio n. 1
0
    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)
Esempio n. 2
0
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 = iter(self.A).next()
            self.ui.lineEdit_A.setText("%s (%s)" % (m.energy, m._id))
        if len(self.B) > 0:
            m = iter(self.B).next()
            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()