From 137c197beae449073a79c4e304927aa6eb2daf14 Mon Sep 17 00:00:00 2001 From: Gregory Ashton <gregory.ashton@ligo.org> Date: Tue, 29 May 2018 13:26:54 +1000 Subject: [PATCH] Add doc on saved output --- docs/index.txt | 1 + docs/tupak-output.txt | 137 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 docs/tupak-output.txt diff --git a/docs/index.txt b/docs/index.txt index f77c3fcce..9ea692b65 100644 --- a/docs/index.txt +++ b/docs/index.txt @@ -9,6 +9,7 @@ Welcome to tupak's documentation! :caption: Contents: basics-of-parameter-estimation + tupak-output likelihood samplers writing-documentation diff --git a/docs/tupak-output.txt b/docs/tupak-output.txt new file mode 100644 index 000000000..6afb9ce86 --- /dev/null +++ b/docs/tupak-output.txt @@ -0,0 +1,137 @@ +============ +Tupak output +============ + +In this document, we will describe what :code::code:`tupak` outputs, where it is stored, +and how you can access it. + +When you call :code:`run_sampler`, there are two arguments :code:`outdir` and :code:`label` which +are used in generating all the file names for saved data. In the rest of these +documents, we'll assume the defaults where used (which are :code:`outdir` and +:code:`label`). + + +The raw data +------------ + +First off, the primary data dump of :code:`tupak` goes into :code:`outdir/label_result.h5`. +This is a binary file, so isn't human readable, but you can use it using a +command-line tool :code:`ddls` [#f1]_ (you have this installed already if you have installed +the :code:`tupak` requirements). To have a look at what is inside run + +.. code-block:: console + + $ ddls outdir/label_result.h5 + /fixed_parameter_keys list + /fixed_parameter_keys/i0 'dec' (3) [ascii] + /fixed_parameter_keys/i1 'psi' (3) [ascii] + /fixed_parameter_keys/i2 'a_2' (3) [ascii] + /fixed_parameter_keys/i3 'a_1' (3) [ascii] + /fixed_parameter_keys/i4 'geocent_time' (12) [ascii] + /fixed_parameter_keys/i5 'phi_jl' (6) [ascii] + /fixed_parameter_keys/i6 'ra' (2) [ascii] + /fixed_parameter_keys/i7 'phase' (5) [ascii] + /fixed_parameter_keys/i8 'phi_12' (6) [ascii] + /fixed_parameter_keys/i9 'tilt_2' (6) [ascii] + /fixed_parameter_keys/i10 'tilt_1' (6) [ascii] + /injection_parameters dict + /injection_parameters/a_1 0.4 [float64] + /injection_parameters/a_2 0.3 [float64] + /injection_parameters/dec -1.2108 [float64] + /injection_parameters/geocent_time 1126259642.413 [float64] + /injection_parameters/iota 0.4 [float64] + /injection_parameters/luminosity_distance 4000.0 [float64] + /injection_parameters/mass_1 36.0 [float64] + /injection_parameters/mass_2 29.0 [float64] + /injection_parameters/phase 1.3 [float64] + /injection_parameters/phi_12 1.7 [float64] + /injection_parameters/phi_jl 0.3 [float64] + /injection_parameters/psi 2.659 [float64] + /injection_parameters/ra 1.375 [float64] + /injection_parameters/reference_frequency 50.0 [float64] + /injection_parameters/tilt_1 0.5 [float64] + /injection_parameters/tilt_2 1.0 [float64] + /injection_parameters/waveform_approximant 'IMRPhenomPv2' (12) [ascii] + /kwargs dict + /kwargs/bound 'multi' (5) [ascii] + /kwargs/dlogz 0.1 [float64] + /kwargs/nlive 1000 [int64] + /kwargs/sample 'rwalk' (5) [ascii] + /kwargs/update_interval 600 [int64] + /kwargs/verbose True [bool] + /kwargs/walks 20 [int64] + /label 'basic_tutorial' (14) [ascii] + /log_bayes_factor 29.570224130853056 [float64] + /logz -12042.875089354413 [float64] + /logzerr 0.040985337772488764 [float64] + /noise_logz -12072.445313485267 [float64] + /outdir 'outdir' (6) [ascii] + /parameter_labels list + /parameter_labels/i0 '$d_L$' (5) [ascii] + /parameter_labels/i1 '$m_2$' (5) [ascii] + /parameter_labels/i2 '$m_1$' (5) [ascii] + /parameter_labels/i3 '$\\iota$' (7) [ascii] + /posterior DataFrame (4, 15073) + /search_parameter_keys list + /search_parameter_keys/i0 'luminosity_distance' (19) [ascii] + /search_parameter_keys/i1 'mass_2' (6) [ascii] + /search_parameter_keys/i2 'mass_1' (6) [ascii] + /search_parameter_keys/i3 'iota' (4) [ascii] + + +This shows the different data that is stored in the :code:`h5` file. You can think of +the file like a python dictionary - its a bag with lots of different kind of +data which can be accessed via a :code:`key` (a string). We use `deepdish +<http://deepdish.io/>`_ to handle the saving of :code:`h5` files in :code:`tupak`. In python, +can load any :code:`h5` file and access its contents like a dictionary:: + + >>> import deepdish + >>> output = deepdish.io.load('outdir/label_result.h5') + >>> print(output['logz']) + -146.23 + +Here we printed the stored data for the :code:`'logz'` key, but you could equally get +the :code:`posterior` or any other attribute. For a full list, print the +`output.keys()`. + +Reading in a result file +------------------------ +Rather than reading in the raw :code:`h5` file, may find it more convienient to +instead load a :code:`*result.h5` as a :code:`tupak` :code:`result` object (i.e., like the output +of :code:`run_sampler`. To do this:: + + >>> import tupak + >>> result = tupak.result.read_in_result(outdir=outdir, label=label) + >>> result = tupak.result.read_in_result(filename='outdir/label_result.h5) + +Note, these two lines are equivalent, but show two different ways to read in +the data. Using this method, :code:`result` is now a :code:`tupak.result.Result` instance +and has all the methods and attributes. So, for example, you could call +`result.plot_corner()` to generate a corner plot. + +Accessing samples directly +-------------------------- + +To get the samples for a particular parameter, use:: + + >>> result.posterior.[key] + +where :code:`key` is a string of the parameter name you are interested in. The +`posterior` attribute is a :code:`pandas.DataFrame`, so if you want to return just +a :code:`numpy` array, use:: + + >>> result.posterior.[key].values + +Saving to ASCII text +-------------------- + +You may wish to get hold of the samples in a simple text file, this can be +done via:: + + result.save_posterior_samples() + +which will generate a file :code:`outdir/label_posterior.txt`. + + +.. rubric:: Footnotes +.. [#f1] :code:`ddls` is an acronym for deep-dish ls -- GitLab