コード例 #1
0
def analyze_logZ():
    from openmmtools.multistate import SAMSSampler, MultiStateReporter, MultiStateSamplerAnalyzer
    iteration = 250000
    reporter = MultiStateReporter('traj.nc', open_mode='r',checkpoint_interval=1)
    analyzer = MultiStateSamplerAnalyzer(reporter)
    Deltaf_ij, dDeltaf_ij = analyzer.get_free_energy()
    print(Deltaf_ij)
    print(dDeltaf_ij)
    return
コード例 #2
0
ファイル: load_simulations.py プロジェクト: robbason/perses
    def _load_data(self):
        """ Calculate relative free energy details from the simulation by performing MBAR on the vacuum and solvent legs of the simualtion.

        Parameters
        ----------

        Returns
        -------
        None

        """
        from pymbar import MBAR
        from perses.analysis import utils
        import os
        from openmmtools.multistate import MultiStateReporter, MultiStateSamplerAnalyzer
        from simtk import unit

        # find the output files
        output = [
            x for x in os.listdir(self.directory)
            if x[-3:] == '.nc' and 'checkpoint' not in x
        ]

        for out in output:
            if 'vacuum' in out:
                vacuum_reporter = MultiStateReporter(f'{self.directory}/{out}')
                vacuum_analyzer = MultiStateSamplerAnalyzer(vacuum_reporter)
                f_ij, df_ij = vacuum_analyzer.get_free_energy()
                f = f_ij[0, -1] * vacuum_analyzer.kT
                self._vacdg = f.in_units_of(unit.kilocalories_per_mole)
                df = df_ij[0, -1] * vacuum_analyzer.kT
                self._vacddg = df.in_units_of(unit.kilocalories_per_mole)
                self._vacf_ij = f_ij
                self._vacdf_ij = df_ij
            elif 'solvent' in out:
                solvent_reporter = MultiStateReporter(
                    f'{self.directory}/{out}')
                solvent_analyzer = MultiStateSamplerAnalyzer(solvent_reporter)
                f_ij, df_ij = solvent_analyzer.get_free_energy()
                f = f_ij[0, -1] * solvent_analyzer.kT
                self._soldg = f.in_units_of(unit.kilocalories_per_mole)
                df = df_ij[0, -1] * solvent_analyzer.kT
                self._solddg = df.in_units_of(unit.kilocalories_per_mole)
                self._solf_ij = f_ij
                self._soldf_ij = df_ij
            elif 'complex' in out:
                complex_reporter = MultiStateReporter(
                    f'{self.directory}/{out}')
                complex_analyzer = MultiStateSamplerAnalyzer(complex_reporter)
                f_ij, df_ij = complex_analyzer.get_free_energy()
                f = f_ij[0, -1] * complex_analyzer.kT
                self._comdg = f.in_units_of(unit.kilocalories_per_mole)
                df = df_ij[0, -1] * complex_analyzer.kT
                self._comddg = df.in_units_of(unit.kilocalories_per_mole)
                self._comf_ij = f_ij
                self._comdf_ij = df_ij
        return
コード例 #3
0
    def load_data(self):
        """ Calculate relative free energy details from the simulation by performing MBAR on the vacuum and solvent legs of the simualtion.

        Parameters
        ----------

        Returns
        -------
        None

        """
        from pymbar import timeseries
        from pymbar import MBAR
        from perses.analysis import utils
        import os
        from openmmtools.multistate import MultiStateReporter, MultiStateSamplerAnalyzer

        # find the output files
        output = [x for x in os.listdir(self.directory) if x[-3:] == '.nc' and 'checkpoint' not in x]


        for out in output:
            if 'vacuum' in out:
                vacuum_reporter = MultiStateReporter(f'{self.directory}/{out}')
                vacuum_analyzer = MultiStateSamplerAnalyzer(vacuum_reporter)
                f_ij, df_ij = vacuum_analyzer.get_free_energy()
                self.vacdg = f_ij[1, -2]
                self.vacddg = df_ij[1, -2] ** 2
                self.vacf_ij = f_ij
                self.vacdf_ij = df_ij
            elif'solvent' in out:
                solvent_reporter = MultiStateReporter(f'{self.directory}/{out}')
                solvent_analyzer = MultiStateSamplerAnalyzer(solvent_reporter)
                f_ij, df_ij = solvent_analyzer.get_free_energy()
                self.soldg = f_ij[1, -2]
                self.solddg = df_ij[1, -2] ** 2
                self.solf_ij = f_ij
                self.soldf_ij = df_ij
            elif 'complex' in out:
                complex_reporter = MultiStateReporter(f'{self.directory}/{out}')
                complex_analyzer = MultiStateSamplerAnalyzer(complex_reporter)
                f_ij, df_ij = complex_analyzer.get_free_energy()
                self.comdg = f_ij[1, -2]
                self.comddg = df_ij[1, -2] ** 2
                self.comf_ij = f_ij
                self.comdf_ij = df_ij
        return
コード例 #4
0
    def historic_fes(self,stepsize=100):
        from pymbar import timeseries
        from pymbar import MBAR
        from perses.analysis import utils
        import os
        from openmmtools.multistate import MultiStateReporter, MultiStateSamplerAnalyzer

        # find the output files
        output = [x for x in os.listdir(self.directory) if x[-3:] == '.nc' and 'checkpoint' not in x]

        for out in output:
            if 'vacuum' in out:
                vacuum_reporter = MultiStateReporter(f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    vacuum_analyzer = MultiStateSamplerAnalyzer(vacuum_reporter,max_n_iterations=step)
                    f_ij, df_ij = vacuum_analyzer.get_free_energy()
                    self.vacdg_history.append(f_ij[1, -2])
                    self.vacddg_history.append(df_ij[1,-2])
                    self.vacdg_history_es.append(f_ij[0, -1])
                    self.vacddg_history_es.append(df_ij[0,-1])
            if 'solvent' in out:
                solvent_reporter = MultiStateReporter(f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    solvent_analyzer = MultiStateSamplerAnalyzer(solvent_reporter,max_n_iterations=step)
                    f_ij, df_ij = solvent_analyzer.get_free_energy()
                    self.soldg_history.append(f_ij[1, -2])
                    self.solddg_history.append(df_ij[1,-2])
                    self.soldg_history_es.append(f_ij[0, -1])
                    self.solddg_history_es.append(df_ij[0,-1])
            if 'complex' in out:
                complex_reporter = MultiStateReporter(f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    complex_analyzer = MultiStateSamplerAnalyzer(complex_reporter,max_n_iterations=step)
                    f_ij, df_ij = complex_analyzer.get_free_energy()
                    self.comdg_history.append(f_ij[1, -2])
                    self.comddg_history.append(df_ij[1,-2])
                    self.comdg_history_es.append(f_ij[0, -1])
                    self.comddg_history_es.append(df_ij[0,-1])
        return
コード例 #5
0
    def historic_fes(self, stepsize=100):
        """ Function that performs mbar at intervals of the simulation
        by postprocessing. Can be slow if stepsize is small

        Parameters
        ----------
        stepsize : int, optional, default=100
            number of iterations at which to run MBAR

        Returns
        -------
        None

        """
        from perses.analysis import utils
        from simtk import unit
        import os
        from openmmtools.multistate import MultiStateReporter, MultiStateSamplerAnalyzer

        # find the output files
        output = [
            x for x in os.listdir(self.directory)
            if x[-3:] == '.nc' and 'checkpoint' not in x
        ]

        for out in output:
            if 'vacuum' in out:
                vacuum_reporter = MultiStateReporter(f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    vacuum_analyzer = MultiStateSamplerAnalyzer(
                        vacuum_reporter, max_n_iterations=step)
                    f_ij, df_ij = vacuum_analyzer.get_free_energy()
                    f = f_ij[0, -1] * vacuum_analyzer.kT
                    self._vacdg_history.append(
                        f.in_units_of(unit.kilocalories_per_mole))
                    df = df_ij[0, -1] * vacuum_analyzer.kT
                    self._vacddg_history.append(
                        df.in_units_of(unit.kilocalories_per_mole))
            if 'solvent' in out:
                solvent_reporter = MultiStateReporter(
                    f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    solvent_analyzer = MultiStateSamplerAnalyzer(
                        solvent_reporter, max_n_iterations=step)
                    f_ij, df_ij = solvent_analyzer.get_free_energy()
                    f = f_ij[0, -1] * solvent_analyzer.kT
                    self._soldg_history.append(
                        f.in_units_of(unit.kilocalories_per_mole))
                    df = df_ij[0, -1] * solvent_analyzer.kT
                    self._solddg_history.append(
                        df.in_units_of(unit.kilocalories_per_mole))
            if 'complex' in out:
                complex_reporter = MultiStateReporter(
                    f'{self.directory}/{out}')
                ncfile = utils.open_netcdf(f'{self.directory}/{out}')
                n_iterations = ncfile.variables['last_iteration'][0]
                for step in range(stepsize, n_iterations, stepsize):
                    complex_analyzer = MultiStateSamplerAnalyzer(
                        complex_reporter, max_n_iterations=step)
                    f_ij, df_ij = complex_analyzer.get_free_energy()
                    f = f_ij[0, -1] * complex_analyzer.kT
                    self._comdg_history.append(
                        f.in_units_of(unit.kilocalories_per_mole))
                    df = df_ij[0, -1] * complex_analyzer.kT
                    self._comddg_history.append(
                        df.in_units_of(unit.kilocalories_per_mole))
        return