diff --git a/batch3/outputs/fsig8-z.py b/batch3/outputs/fsig8-z.py index 06bd39f9c..1ef700b50 100644 --- a/batch3/outputs/fsig8-z.py +++ b/batch3/outputs/fsig8-z.py @@ -7,7 +7,7 @@ import tempfile import pickle -sys.path.insert(0, 'C:\Work\Dist\git\camb\pycamb') +sys.path.insert(0, 'C:\Work\Dist\git\camb') from cosmomc_to_camb import get_camb_params import camb @@ -43,7 +43,7 @@ raise Exception('error') datapoints[i] *= rescale dataerrs[i] *= rescale - print dataredshifts[i], datapoints[i], dataerrs[i] + print(dataredshifts[i], datapoints[i], dataerrs[i]) DR12 = np.loadtxt(batchjob.getCodeRootPath() + 'data/DR12/final_consensus_results_dM_Hz_fsig.dat', usecols=[0, 1]) diff --git a/camb b/camb index 65b3f21da..f692a5909 160000 --- a/camb +++ b/camb @@ -1 +1 @@ -Subproject commit 65b3f21dad9579266552f5568beb5ce6590502ac +Subproject commit f692a5909f6f3aeb4602d73a99324ed5f6b29008 diff --git a/docs/readme.html b/docs/readme.html index 5f42f5b88..9e34c96b9 100644 --- a/docs/readme.html +++ b/docs/readme.html @@ -8,7 +8,7 @@
diff --git a/python/GetDist.py b/python/GetDist.py
index 6e7e4748f..0a7f60587 100644
--- a/python/GetDist.py
+++ b/python/GetDist.py
@@ -1,363 +1,12 @@
#!/usr/bin/env python
-from __future__ import absolute_import
-from __future__ import print_function
-import os
-import subprocess
-import getdist
-import io
-from getdist import MCSamples, chains, IniFile
-
-
-def runScript(fname):
- subprocess.Popen(['python', fname])
-
-
-def doError(msg):
- if __name__ == '__main__':
- import sys
-
- print(msg)
- sys.exit()
- raise ValueError(msg)
-
-
-def main(args):
- no_plots = False
- chain_root = args.chain_root
- if args.ini_file is None and chain_root is None:
- doError('Must give either a .ini file of parameters or a chain file root name. Run "GetDist.py -h" for help.')
- if not '.ini' in args.ini_file and chain_root is None:
- # use default settings acting on chain_root, no plots
- chain_root = args.ini_file
- args.ini_file = getdist.default_getdist_settings
- no_plots = True
- if not os.path.isfile(args.ini_file):
- doError('Parameter file does not exist: ' + args.ini_file)
- if chain_root and chain_root.endswith('.txt'):
- chain_root = chain_root[:-4]
-
- if chain_root is not None and ('*' in chain_root or '?' in chain_root):
- import glob, copy
- for f in glob.glob(chain_root + '.paramnames'):
- fileargs = copy.copy(args)
- fileargs.chain_root = f.replace('.paramnames', '')
- main(fileargs)
- return
-
- # Input parameters
- ini = IniFile(args.ini_file)
-
- # File root
- if chain_root is not None:
- in_root = chain_root
- else:
- in_root = ini.params['file_root']
- if not in_root:
- doError('Chain Root file name not given ')
- rootname = os.path.basename(in_root)
-
- if args.ignore_rows is not None:
- ignorerows = args.ignore_rows
- else:
- ignorerows = ini.float('ignore_rows', 0.0)
-
- samples_are_chains = ini.bool('samples_are_chains', True)
-
- paramnames = ini.string('parameter_names', '')
-
- # Create instance of MCSamples
- mc = MCSamples(in_root, ini=ini, files_are_chains=samples_are_chains, paramNamesFile=paramnames)
-
- if ini.bool('adjust_priors', False) or ini.bool('map_params', False):
- doError(
- 'To adjust priors or define new parameters, use a separate python script; see the python getdist docs for examples')
-
- plot_ext = ini.string('plot_ext', 'py')
- finish_run_command = ini.string('finish_run_command', '')
-
- no_plots = ini.bool('no_plots', no_plots)
- plots_only = ini.bool('plots_only', False)
- no_tests = plots_only or ini.bool('no_tests', False)
-
- thin_factor = ini.int('thin_factor', 0)
- thin_cool = ini.float('thin_cool', 1.0)
-
- make_single_samples = ini.bool('make_single_samples', False)
- single_thin = ini.int('single_thin', 1)
- cool = ini.float('cool', 1.0)
-
- chain_exclude = ini.int_list('exclude_chain')
-
- shade_meanlikes = ini.bool('shade_meanlikes', False)
- plot_meanlikes = ini.bool('plot_meanlikes', False)
-
- dumpNDbins = ini.bool('dump_ND_bins', False)
-
- out_dir = ini.string('out_dir', './')
- if out_dir:
- if not os.path.isdir(out_dir):
- os.mkdir(out_dir)
- print('producing files in directory ', out_dir)
- mc.out_dir = out_dir
-
- out_root = ini.string('out_root', '')
- if out_root:
- rootname = out_root
- print('producing files with with root ', out_root)
- mc.rootname = rootname
-
- rootdirname = os.path.join(out_dir, rootname)
- mc.rootdirname = rootdirname
-
- if 'do_minimal_1d_intervals' in ini.params:
- doError('do_minimal_1d_intervals no longer used; set credible_interval_threshold instead')
-
- line = ini.string('PCA_params', '')
- if line.lower() == 'all':
- PCA_params = mc.paramNames.list()
- else:
- PCA_params = line.split()
- PCA_num = ini.int('PCA_num', len(PCA_params))
- if PCA_num != 0:
- if PCA_num < 2:
- doError('Can only do PCA for 2 or more parameters')
- PCA_func = ini.string('PCA_func', '')
- # Characters representing functional mapping
- if PCA_func == '':
- PCA_func = ['N'] * PCA_num # No mapping
- PCA_NormParam = ini.string('PCA_normparam', '') or None
-
- make_scatter_samples = ini.bool('make_scatter_samples', False)
-
- # ==============================================================================
-
- first_chain = ini.int('first_chain', 0)
- last_chain = ini.int('chain_num', -1)
- # -1 means keep reading until one not found
-
- # Chain files
- chain_files = chains.chainFiles(in_root, first_chain=first_chain, last_chain=last_chain,
- chain_exclude=chain_exclude)
-
- mc.loadChains(in_root, chain_files)
-
- mc.removeBurnFraction(ignorerows)
- if chains.print_load_details:
- if ignorerows:
- print('Removed %s as burn in' % ignorerows)
- else:
- print('Removed no burn in')
+# Once installed this is not used, same as getdist script
- mc.deleteFixedParams()
- mc.makeSingle()
-
- def filterParList(namestring, num=None):
- if not namestring.strip():
- pars = mc.paramNames.list()
- else:
- pars = []
- for name in namestring.split():
- if '?' in name or '*' in name:
- pars += mc.paramNames.getMatches(name, strings=True)
- elif mc.paramNames.parWithName(name):
- pars.append(name)
- if num is not None and len(pars) != num:
- print('%iD plot has missing parameter or wrong number of parameters: %s' % (num, pars))
- pars = None
- return pars
-
- if cool != 1:
- print('Cooling chains by ', cool)
- mc.cool(cool)
-
- mc.updateBaseStatistics()
-
- if not no_tests:
- mc.getConvergeTests(mc.converge_test_limit, writeDataToFile=True, feedback=True)
-
- mc.writeCovMatrix()
- mc.writeCorrelationMatrix()
-
- # Output thinned data if requested
- # Must do this with unsorted output
- if thin_factor > 1:
- thin_ix = mc.thin_indices(thin_factor)
- filename = rootdirname + '_thin.txt'
- mc.writeThinData(filename, thin_ix, thin_cool)
-
- print(mc.getNumSampleSummaryText().strip())
- if mc.likeStats: print(mc.likeStats.likeSummary().strip())
-
- if PCA_num > 0 and not plots_only:
- mc.PCA(PCA_params, PCA_func, PCA_NormParam, writeDataToFile=True)
-
- if not no_plots or dumpNDbins:
- # set plot_data_dir before we generate the 1D densities below
- plot_data_dir = ini.string('plot_data_dir', default='', allowEmpty=True)
- if plot_data_dir and not os.path.isdir(plot_data_dir):
- os.mkdir(plot_data_dir)
- else:
- plot_data_dir = None
- mc.plot_data_dir = plot_data_dir
-
- # Do 1D bins
- mc._setDensitiesandMarge1D(writeDataToFile=not no_plots and plot_data_dir, meanlikes=plot_meanlikes)
-
- if not no_plots:
- # Output files for 1D plots
- if plot_data_dir: print('Calculating plot data...')
-
- plotparams = []
- line = ini.string('plot_params', '')
- if line not in ['', '0']:
- plotparams = filterParList(line)
-
- line = ini.string('plot_2D_param', '').strip()
- plot_2D_param = None
- if line and line != '0':
- plot_2D_param = line
-
- cust2DPlots = []
- if not plot_2D_param:
- # Use custom array of specific plots
- num_cust2D_plots = ini.int('plot_2D_num', 0)
- for i in range(1, num_cust2D_plots + 1):
- line = ini.string('plot' + str(i))
- pars = filterParList(line, 2)
- if pars is not None:
- cust2DPlots.append(pars)
- else:
- num_cust2D_plots -= 1
-
- triangle_params = []
- triangle_plot = ini.bool('triangle_plot', False)
- if triangle_plot:
- line = ini.string('triangle_params', '')
- triangle_params = filterParList(line)
- triangle_num = len(triangle_params)
- triangle_plot = triangle_num > 1
-
- num_3D_plots = ini.int('num_3D_plots', 0)
- plot_3D = []
- for ix in range(1, num_3D_plots + 1):
- line = ini.string('3D_plot' + str(ix))
- pars = filterParList(line, 3)
- if pars is not None:
- plot_3D.append(pars)
- else:
- num_3D_plots -= 1
-
- # Produce file of weight-1 samples if requested
- if (num_3D_plots and not make_single_samples or make_scatter_samples) and not no_plots:
- make_single_samples = True
- single_thin = max(1, int(round(mc.norm / mc.max_mult)) // mc.max_scatter_points)
-
- if plot_data_dir:
- if make_single_samples:
- filename = os.path.join(plot_data_dir, rootname.strip() + '_single.txt')
- mc.makeSingleSamples(filename, single_thin)
-
- # Write paramNames file
- mc.getParamNames().saveAsText(os.path.join(plot_data_dir, rootname + '.paramnames'))
- mc.getBounds().saveToFile(os.path.join(plot_data_dir, rootname + '.bounds'))
-
- make_plots = ini.bool('make_plots', False) or args.make_plots
-
- done2D = {}
-
- filename = rootdirname + '.' + plot_ext
- mc.writeScriptPlots1D(filename, plotparams)
- if make_plots: runScript(filename)
-
- # Do 2D bins
- if plot_2D_param == 'corr':
- # In this case output the most correlated variable combinations
- print('...doing 2D plots for most correlated variables')
- cust2DPlots = mc.getCorrelatedVariable2DPlots()
- plot_2D_param = None
- elif plot_2D_param:
- mc.paramNames.parWithName(plot_2D_param, error=True) # just check
-
- if cust2DPlots or plot_2D_param:
- print('...producing 2D plots')
- filename = rootdirname + '_2D.' + plot_ext
- done2D = mc.writeScriptPlots2D(filename, plot_2D_param, cust2DPlots,
- writeDataToFile=plot_data_dir, shade_meanlikes=shade_meanlikes)
- if make_plots: runScript(filename)
-
- if triangle_plot:
- # Add the off-diagonal 2D plots
- print('...producing triangle plot')
- filename = rootdirname + '_tri.' + plot_ext
- mc.writeScriptPlotsTri(filename, triangle_params)
- for i, p2 in enumerate(triangle_params):
- for p1 in triangle_params[i + 1:]:
- if not done2D.get((p1, p2)) and plot_data_dir:
- mc.get2DDensityGridData(p1, p2, writeDataToFile=True, meanlikes=shade_meanlikes)
- if make_plots: runScript(filename)
-
- # Do 3D plots (i.e. 2D scatter plots with coloured points)
- if num_3D_plots:
- print('...producing ', num_3D_plots, '2D colored scatter plots')
- filename = rootdirname + '_3D.' + plot_ext
- mc.writeScriptPlots3D(filename, plot_3D)
- if make_plots: runScript(filename)
-
- if not plots_only:
- # Write out stats marginalized
- mc.getMargeStats().saveAsText(rootdirname + '.margestats')
-
- # Limits from global likelihood
- if mc.loglikes is not None: mc.getLikeStats().saveAsText(rootdirname + '.likestats')
-
- if dumpNDbins:
- mc.num_bins_ND = ini.int('num_bins_ND', 10)
- line = ini.string('ND_params', '')
-
- if line not in ["", '0']:
- ND_params = filterParList(line)
- print(ND_params)
-
- ND_dim = len(ND_params)
- print(ND_dim)
-
- mc.getRawNDDensityGridData(ND_params, writeDataToFile=True,
- meanlikes=shade_meanlikes)
-
- # System command
- if finish_run_command:
- finish_run_command = finish_run_command.replace('%ROOTNAME%', rootname)
- finish_run_command = finish_run_command.replace('%PLOTDIR%', plot_data_dir)
- finish_run_command = finish_run_command.replace('%PLOTROOT%', os.path.join(plot_data_dir, rootname))
- os.system(finish_run_command)
+import sys
+import os
+sys.path.append(os.path.realpath(os.path.dirname(__file__)))
-if __name__ == '__main__':
- try:
- import argparse
- except ImportError:
- print('Make sure you are using python 2.7+')
- raise
+from getdist.command_line import getdist_command
- parser = argparse.ArgumentParser(description='GetDist sample analyser')
- parser.add_argument('ini_file', nargs='?',
- help='.ini file with analysis settings (optional, if omitted uses defaults)')
- parser.add_argument('chain_root', nargs='?',
- help='Root name of chain to analyse (e.g. chains/test), required unless file_root specified in ini_file')
- parser.add_argument('--ignore_rows',
- help='set initial fraction of chains to cut as burn in (fraction of total rows, or >1 number of rows); overrides any value in ini_file if set')
- parser.add_argument('--make_param_file',
- help='Produce a sample distparams.ini file that you can edit and use when running GetDist')
- parser.add_argument('--make_plots', action='store_true', help='Make PDFs from any requested plot script files')
- parser.add_argument('-V', '--version', action='version', version='%(prog)s ' + getdist.__version__)
- args = parser.parse_args()
- if args.make_param_file:
- content = io.open(getdist.distparam_template).read()
- analysis = io.open(getdist.default_getdist_settings).read()
- content = content.replace('%%%ANALYSIS_DEFAULTS%%%', analysis)
- with io.open(args.make_param_file, 'w') as f:
- f.write(content)
- print('Template .ini file written to ' + args.make_param_file)
- else:
- main(args)
+getdist_command()
diff --git a/python/GetDistGUI.py b/python/GetDistGUI.py
index 2b586e4ef..ce1d5006e 100644
--- a/python/GetDistGUI.py
+++ b/python/GetDistGUI.py
@@ -1,39 +1,12 @@
#!/usr/bin/env python
-from __future__ import absolute_import
-from __future__ import print_function
-import sys
-import logging
-import getdist
-
-try:
- import argparse
-except ImportError:
- print('use "module load" to load python 2.7+ or 3.6+, or see docs/readme_python.html for how to install')
- sys.exit()
+# Once installed this is not used, same as getdist-gui script
-try:
- from getdist.gui.mainwindow import MainWindow, QApplication
-except ImportError:
- print("Could not find getdist.gui.mainwindow: configure your PYTHONPATH as described in the readme!")
- raise
+import sys
+import os
-parser = argparse.ArgumentParser(description='GetDist GUI')
-parser.add_argument('-v', '--verbose', help='verbose', action="store_true")
-parser.add_argument('--ini', help='Path to .ini file', default=None)
-parser.add_argument('-V', '--version', action='version', version='%(prog)s ' + getdist.__version__)
-args = parser.parse_args()
+sys.path.append(os.path.realpath(os.path.dirname(__file__)))
-# Configure the logging
-level = logging.INFO
-if args.verbose:
- level = logging.DEBUG
-FORMAT = '%(asctime).19s [%(levelname)s]\t[%(filename)s:%(lineno)d]\t\t%(message)s'
-logging.basicConfig(level=level, format=FORMAT)
+from getdist.command_line import getdist_gui
-# GUI application
-app = QApplication(sys.argv)
-mainWin = MainWindow(app, ini=args.ini)
-mainWin.show()
-mainWin.raise_()
-sys.exit(app.exec_())
+getdist_gui()
diff --git a/python/MANIFEST.in b/python/MANIFEST.in
index 897253798..2b34bde1c 100644
--- a/python/MANIFEST.in
+++ b/python/MANIFEST.in
@@ -1,3 +1,7 @@
include README.rst
include *.py
include getdist/analysis_defaults.ini
+recursive-include getdist/gui/mac_app *
+include getdist/gui/images/*.png
+include getdist/styles/*.sty
+include getdist/styles/*.paramnames
diff --git a/python/README.rst b/python/README.rst
index 63f8698d2..f3e3103cb 100644
--- a/python/README.rst
+++ b/python/README.rst
@@ -37,42 +37,34 @@ Getting Started
Install getdist using pip::
- $ sudo pip install getdist
+ $ pip install getdist
or from source files using::
- $ sudo python setup.py install
+ $ python setup.py install
You can test if things are working using the unit test by running::
$ python setup.py test
Check the dependencies listed in the next section are installed. You can then use the getdist module from your scripts, or
-use the GUI program GetDistGUI.py.
+use the GetDist GUI (*getdist-gui* command).
+Once installed, the best way to get up to speed is probably to read through
+the `Plot Gallery and tutorial