diff --git a/peyote/result.py b/peyote/result.py index f3fbc41d46a5ad8ce70b7cbe3a731abc208a8327..45644dff62f2092d68cb57fcb6d857e64f84ad9b 100644 --- a/peyote/result.py +++ b/peyote/result.py @@ -1,7 +1,9 @@ import logging import os +import numpy as np import deepdish from chainconsumer import ChainConsumer +import pandas as pd class Result(dict): @@ -113,4 +115,32 @@ class Result(dict): fig = c.plotter.plot_distributions(**kwargs) return fig + def samples_to_data_frame(self): + """ + Convert array of samples to data frame. + + :return: + """ + data_frame = pd.DataFrame(self.samples, columns=self.search_parameter_keys) + self.posterior = data_frame + for key in self.fixed_parameter_keys: + self.posterior[key] = self.prior[key].sample(len(self.posterior)) + def construct_cbc_derived_parameters(self): + """ + Construct widely used derived parameters of CBCs + + :return: + """ + self.posterior['mass_chirp'] = (self.posterior.mass_1 * self.posterior.mass_2)**0.6 \ + / (self.posterior.mass_1 + self.posterior.mass_2)**0.2 + self.posterior['q'] = self.posterior.mass_2 / self.posterior.mass_1 + self.posterior['eta'] = (self.posterior.mass_1 * self.posterior.mass_2) \ + / (self.posterior.mass_1 + self.posterior.mass_2)**2 + + self.posterior['chi_eff'] = (self.posterior.a_1 * np.cos(self.posterior.tilt_1) + + self.posterior.q * self.posterior.a_2 * np.cos(self.posterior.tilt_2))\ + / (1 + self.posterior.q) + self.posterior['chi_p'] = max(self.posterior.a_1 * np.sin(self.posterior.tilt_1), + (4 * self.posterior.q + 3) / (3 * self.posterior.q + 4) * self.posterior.q + * self.posterior.a_2 * np.sin(self.posterior.tilt_2)) \ No newline at end of file diff --git a/peyote/sampler.py b/peyote/sampler.py index 6ae2981a6e49c0fc864b853103171abad33702b2..f9d74fa63994e81797d5b902273545039e702edd 100644 --- a/peyote/sampler.py +++ b/peyote/sampler.py @@ -300,6 +300,8 @@ def run_sampler(likelihood, priors, label='label', outdir='outdir', else: result.log_bayes_factor = result.logz - result.noise_logz result.injection_parameters = injection_parameters + result.prior = prior + result.samples_to_data_frame() result.save_to_file(outdir=outdir, label=label) return result else: