Coverage for pesummary/cli/summarypages.py: 92.0%
87 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-12-09 22:34 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-12-09 22:34 +0000
1#! /usr/bin/env python
3# Licensed under an MIT style license -- see LICENSE.md
5from pesummary.utils.utils import logger, gw_results_file
6import pesummary.core.cli.inputs
7import pesummary.gw.cli.inputs
9__author__ = ["Charlie Hoy <charlie.hoy@ligo.org>"]
12class WebpageGeneration(object):
13 """Wrapper class for _GWWebpageGeneration and _CoreWebpageGeneration
15 Parameters
16 ----------
17 inputs: argparse.Namespace
18 Namespace object containing the command line options
19 colors: list, optional
20 colors that you wish to use to distinguish different result files
21 """
22 def __init__(self, inputs, colors="default", gw=False):
23 self.inputs = inputs
24 self.colors = colors
25 self.gw = gw
26 self.generate_webpages()
28 def generate_webpages(self):
29 """Generate all plots for all result files passed
30 """
31 logger.info("Starting to generate webpages")
32 if self.gw and self.inputs.public:
33 object = _PublicGWWebpageGeneration(self.inputs, colors=self.colors)
34 elif self.gw:
35 object = _GWWebpageGeneration(self.inputs, colors=self.colors)
36 else:
37 object = _CoreWebpageGeneration(self.inputs, colors=self.colors)
38 object.generate_webpages()
39 logger.info("Finished generating webpages")
42class _CoreWebpageGeneration(object):
43 """Class to generate all webpages for all result files with the Core module
45 Parameters
46 ----------
47 inputs: argparse.Namespace
48 Namespace object containing the command line options
49 colors: list, optional
50 colors that you wish to use to distinguish different result files
51 """
52 def __init__(self, inputs, colors="default"):
53 from pesummary.core.webpage.main import _WebpageGeneration
54 key_data = inputs.grab_key_data_from_result_files()
55 self.webpage_object = _WebpageGeneration(
56 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels,
57 publication=inputs.publication, user=inputs.user, config=inputs.config,
58 same_parameters=inputs.same_parameters, base_url=inputs.baseurl,
59 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors,
60 custom_plotting=inputs.custom_plotting,
61 existing_labels=inputs.existing_labels,
62 existing_config=inputs.existing_config,
63 existing_file_version=inputs.existing_file_version,
64 existing_injection_data=inputs.existing_injection_data,
65 existing_samples=inputs.existing_samples,
66 existing_metafile=inputs.existing,
67 existing_file_kwargs=inputs.existing_file_kwargs,
68 existing_weights=inputs.existing_weights,
69 add_to_existing=inputs.add_to_existing, notes=inputs.notes,
70 disable_comparison=inputs.disable_comparison,
71 disable_interactive=inputs.disable_interactive,
72 package_information=inputs.package_information,
73 mcmc_samples=inputs.mcmc_samples,
74 external_hdf5_links=inputs.external_hdf5_links, key_data=key_data,
75 existing_plot=inputs.existing_plot, disable_expert=inputs.disable_expert,
76 analytic_priors=inputs.analytic_prior_dict
77 )
79 def generate_webpages(self):
80 """Generate all webpages within the Core module
81 """
82 self.webpage_object.generate_webpages()
85class _GWWebpageGeneration(object):
86 """Class to generate all webpages for all result files with the GW module
88 Parameters
89 ----------
90 inputs: argparse.Namespace
91 Namespace object containing the command line options
92 colors: list, optional
93 colors that you wish to use to distinguish different result files
94 """
95 def __init__(self, inputs, colors="default"):
96 from pesummary.gw.webpage.main import _WebpageGeneration
97 key_data = inputs.grab_key_data_from_result_files()
98 self.webpage_object = _WebpageGeneration(
99 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels,
100 publication=inputs.publication, user=inputs.user, config=inputs.config,
101 same_parameters=inputs.same_parameters, base_url=inputs.baseurl,
102 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors,
103 custom_plotting=inputs.custom_plotting, gracedb=inputs.gracedb,
104 pepredicates_probs=inputs.pepredicates_probs,
105 approximant=inputs.approximant, key_data=key_data,
106 file_kwargs=inputs.file_kwargs, existing_labels=inputs.existing_labels,
107 existing_config=inputs.existing_config,
108 existing_file_version=inputs.existing_file_version,
109 existing_injection_data=inputs.existing_injection_data,
110 existing_samples=inputs.existing_samples,
111 existing_metafile=inputs.existing,
112 add_to_existing=inputs.add_to_existing,
113 existing_file_kwargs=inputs.existing_file_kwargs,
114 existing_weights=inputs.existing_weights,
115 result_files=inputs.result_files, notes=inputs.notes,
116 disable_comparison=inputs.disable_comparison,
117 disable_interactive=inputs.disable_interactive,
118 pastro_probs=inputs.pastro_probs, gwdata=inputs.gwdata,
119 publication_kwargs=inputs.publication_kwargs,
120 no_ligo_skymap=inputs.no_ligo_skymap,
121 psd=inputs.psd, priors=inputs.priors,
122 package_information=inputs.package_information,
123 mcmc_samples=inputs.mcmc_samples, existing_plot=inputs.existing_plot,
124 external_hdf5_links=inputs.external_hdf5_links,
125 preliminary_pages=inputs.preliminary_pages,
126 disable_expert=inputs.disable_expert,
127 analytic_priors=inputs.analytic_prior_dict
128 )
130 def generate_webpages(self):
131 """Generate all webpages within the Core module
132 """
133 self.webpage_object.generate_webpages()
136class _PublicGWWebpageGeneration(object):
137 """Class to generate all webpages for all result files with the GW module
139 Parameters
140 ----------
141 inputs: argparse.Namespace
142 Namespace object containing the command line options
143 colors: list, optional
144 colors that you wish to use to distinguish different result files
145 """
146 def __init__(self, inputs, colors="default"):
147 from pesummary.gw.webpage.public import _PublicWebpageGeneration
148 key_data = inputs.grab_key_data_from_result_files()
149 self.webpage_object = _PublicWebpageGeneration(
150 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels,
151 publication=inputs.publication, user=inputs.user, config=inputs.config,
152 same_parameters=inputs.same_parameters, base_url=inputs.baseurl,
153 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors,
154 custom_plotting=inputs.custom_plotting, gracedb=inputs.gracedb,
155 pepredicates_probs=inputs.pepredicates_probs,
156 approximant=inputs.approximant, key_data=key_data,
157 file_kwargs=inputs.file_kwargs, existing_labels=inputs.existing_labels,
158 existing_config=inputs.existing_config,
159 existing_file_version=inputs.existing_file_version,
160 existing_injection_data=inputs.existing_injection_data,
161 existing_samples=inputs.existing_samples,
162 existing_metafile=inputs.existing,
163 add_to_existing=inputs.add_to_existing,
164 existing_file_kwargs=inputs.existing_file_kwargs,
165 existing_weights=inputs.existing_weights,
166 result_files=inputs.result_files, notes=inputs.notes,
167 disable_comparison=inputs.disable_comparison,
168 disable_interactive=inputs.disable_interactive,
169 pastro_probs=inputs.pastro_probs, gwdata=inputs.gwdata,
170 publication_kwargs=inputs.publication_kwargs,
171 no_ligo_skymap=inputs.no_ligo_skymap,
172 psd=inputs.psd, priors=inputs.priors,
173 package_information=inputs.package_information,
174 mcmc_samples=inputs.mcmc_samples, existing_plot=inputs.existing_plot,
175 external_hdf5_links=inputs.external_hdf5_links,
176 preliminary_pages=inputs.preliminary_pages,
177 disable_expert=inputs.disable_expert,
178 analytic_priors=inputs.analytic_prior_dict
179 )
181 def generate_webpages(self):
182 """Generate all webpages within the Core module
183 """
184 self.webpage_object.generate_webpages()
187def main(
188 args=None,
189 _parser=None,
190 _core_input_cls=pesummary.core.cli.inputs.WebpagePlusPlottingPlusMetaFileInput,
191 _gw_input_cls=pesummary.gw.cli.inputs.WebpagePlusPlottingPlusMetaFileInput
192):
193 """Top level interface for `summarypages`
194 """
195 from pesummary.utils import history_dictionary
196 from .summaryplots import PlotGeneration
198 if _parser is None:
199 from pesummary.gw.cli.parser import ArgumentParser
200 _parser = ArgumentParser()
201 _parser.add_all_groups_to_parser()
203 opts, unknown = _parser.parse_known_args(args=args)
204 _gw = False
205 if opts.restart_from_checkpoint:
206 from pesummary import conf
207 import os
208 if opts.webdir is None:
209 raise ValueError(
210 "In order to restart from checkpoint please provide a webdir"
211 )
212 resume_file_dir = conf.checkpoint_dir(opts.webdir)
213 resume_file = conf.resume_file
214 state = pesummary.core.cli.inputs.load_current_state(
215 os.path.join(resume_file_dir, resume_file)
216 )
217 if state is not None:
218 _gw = state.gw
219 input_args = (opts,)
220 input_kwargs = {"checkpoint": state}
221 else:
222 if opts.gw or gw_results_file(opts):
223 _gw = True
224 input_args = (opts,)
225 input_kwargs = {}
227 if _gw:
228 from pesummary.gw.file.meta_file import GWMetaFile
229 from pesummary.gw.finish import GWFinishingTouches
230 input_cls = _gw_input_cls
231 meta_file_cls = GWMetaFile
232 finish_cls = GWFinishingTouches
233 else:
234 from pesummary.core.file.meta_file import MetaFile
235 from pesummary.core.finish import FinishingTouches
236 input_cls = _core_input_cls
237 meta_file_cls = MetaFile
238 finish_cls = FinishingTouches
240 args = input_cls(*input_args, **input_kwargs)
241 plotting_object = PlotGeneration(args, gw=args.gw)
242 WebpageGeneration(args, gw=args.gw)
243 _history = history_dictionary(
244 program=_parser.prog, creator=args.user,
245 command_line=_parser.command_line
246 )
247 meta_file_cls(args, history=_history)
248 if gw_results_file(opts):
249 kwargs = dict(ligo_skymap_PID=plotting_object.ligo_skymap_PID)
250 else:
251 kwargs = {}
252 finish_cls(args, **kwargs)
255if __name__ == "__main__":
256 main()