diff --git a/pyfstat.py b/pyfstat.py index 2edcaf61b1b03aabac729a87c787fd9654e0b1d9..ae1d38dc22b730e97f4070fd4a26eca3b533479b 100755 --- a/pyfstat.py +++ b/pyfstat.py @@ -9,6 +9,7 @@ import glob import inspect from functools import wraps import subprocess +from collections import OrderedDict import numpy as np import matplotlib @@ -19,6 +20,8 @@ import corner import dill as pickle import lalpulsar +plt.rcParams['text.usetex'] = True + config_file = os.path.expanduser('~')+'/.pyfstat.conf' if os.path.isfile(config_file): d = {} @@ -41,6 +44,7 @@ parser.add_argument("-q", "--quite", help="Decrease output verbosity", action="store_true") parser.add_argument("-c", "--clean", help="Don't use cached data", action="store_true") +parser.add_argument("-u", "--use-old-data", action="store_true") parser.add_argument('unittest_args', nargs='*') args, unknown = parser.parse_known_args() sys.argv[1:] = args.unittest_args @@ -814,6 +818,10 @@ class MCMCSearch(BaseSearchClass): return d def check_old_data_is_okay_to_use(self): + if args.use_old_data: + logging.info("Forcing use of old data") + return True + if os.path.isfile(self.pickle_path) is False: logging.info('No pickled data found') return False @@ -872,7 +880,7 @@ class MCMCSearch(BaseSearchClass): idxs = np.isfinite(self.lnlikes) jmax = np.nanargmax(self.lnlikes[idxs]) maxtwoF = self.lnlikes[jmax] - d = {} + d = OrderedDict() close_idxs = abs((maxtwoF - self.lnlikes[idxs]) / maxtwoF) < threshold for i, k in enumerate(self.theta_keys): base_key = copy.copy(k) @@ -887,7 +895,7 @@ class MCMCSearch(BaseSearchClass): def get_median_stds(self): """ Returns a dict of the median and std of all production samples """ - d = {} + d = OrderedDict() for s, k in zip(self.samples.T, self.theta_keys): d[k] = np.median(s) d[k+'_std'] = np.std(s) @@ -897,16 +905,17 @@ class MCMCSearch(BaseSearchClass): """ Writes a .par of the best-fit params with an estimated std """ logging.info('Writing {}/{}.par using the {} method'.format( self.outdir, self.label, method)) - if method == 'med': - median_std_d = self.get_median_stds() - filename = '{}/{}.par'.format(self.outdir, self.label) - with open(filename, 'w+') as f: + + median_std_d = self.get_median_stds() + max_twoF_d, max_twoF = self.get_max_twoF() + + filename = '{}/{}.par'.format(self.outdir, self.label) + with open(filename, 'w+') as f: + f.write('MaxtwoF = {}\n'.format(max_twoF)) + if method == 'med': for key, val in median_std_d.iteritems(): f.write('{} = {:1.16e}\n'.format(key, val)) - if method == 'twoFmax': - max_twoF_d, _ = self.get_max_twoF() - filename = '{}/{}.par'.format(self.outdir, self.label) - with open(filename, 'w+') as f: + if method == 'twoFmax': for key, val in max_twoF_d.iteritems(): f.write('{} = {:1.16e}\n'.format(key, val))