Source code for pymultinest.watch

from __future__ import absolute_import, unicode_literals, print_function
import threading

[docs]class ProgressWatcher(threading.Thread): """ Abstract class for watching the progress of MultiNest. """ def __init__(self, n_params, interval_ms = 200, outputfiles_basename = "chains/1-"): threading.Thread.__init__(self) self.n_params = n_params self.outputfiles_basename = outputfiles_basename self.interval_ms = interval_ms """ This file contains the current set of live points. It has nPar+2 columns. The first nPar columns are the ndim parameter values along with the (nPar-ndim) additional parameters that are being passed by the likelihood routine for MultiNest to save along with the ndim parameters. The nPar+1 column is the log-likelihood value & the last column is the node no. (used for clustering). """ self.live = "%s%s" % (self.outputfiles_basename , "phys_live.points") """ This file contains the set of rejected points. It has nPar+3 columns. The first nPar columns are the ndim parameter values along with the (nPar-ndim) additional parameters that are being passed by the likelihood routine for MultiNest to save along with the ndim parameters. The nPar+1 column is the log-likelihood value, nPar+2 column is the log(prior mass) & the last column is the node no. (used for clustering). """ self.rejected = "%s%s" % (self.outputfiles_basename , "ev.dat") self.running = True def stop(self): self.running = False
[docs]class ProgressPrinter(ProgressWatcher): """ Continuously writes out the number of live and rejected points. """
[docs] def run(self): import time while self.running: time.sleep(self.interval_ms / 1000.) if not self.running: break try: print(('rejected points: ', len(open(self.rejected, 'r').readlines()))) print(('alive points: ', len(open(self.live, 'r').readlines()))) except Exception as e: print(e)
[docs]class ProgressPlotter(ProgressWatcher): """ Continuously creates plots (pdfs) of the live points. """
[docs] def run(self): import time while self.running: time.sleep(self.interval_ms / 1000.) if not self.running: break try: self._plot_live() except Exception as e: print(e)
def _plot_live(self): import matplotlib.pyplot as plt import numpy import shutil, os x = numpy.loadtxt(self.live, ndmin=2) for i in range(self.n_params): plt.subplot(self.n_params, 1, 1+i) plt.plot(x[:,i], x[:,self.n_params], '.') f = "%s.pdf" % self.live # using a temporary file because the writing # takes some time, during which the user should still be able # to look at the previous version ftmp = "%s.next.pdf" % self.live plt.savefig(ftmp) shutil.copyfile(ftmp, f) os.remove(ftmp)