Source code for pipeline.hifv.tasks.testBPdcals.renderer

import contextlib
import os
import collections

import pipeline.infrastructure.filenamer as filenamer
import pipeline.infrastructure.logging as logging
import pipeline.infrastructure.renderer.basetemplates as basetemplates
import pipeline.infrastructure.renderer.weblog as weblog
from . import display as testBPdcalsdisplay

LOG = logging.get_logger(__name__)


[docs]class VLASubPlotRenderer(object): #template = 'testdelays_plots.html' def __init__(self, context, result, plots, json_path, template, filename_prefix, bandlist): self.context = context self.result = result self.plots = plots self.ms = os.path.basename(self.result.inputs['vis']) self.template = template self.filename_prefix = filename_prefix self.bandlist = bandlist self.summary_plots = {} self.testdelay_subpages = {} self.ampgain_subpages = {} self.phasegain_subpages = {} self.bpsolamp_subpages = {} self.bpsolphase_subpages = {} self.testdelay_subpages[self.ms] = filenamer.sanitize('testdelays' + '-%s.html' % self.ms) self.ampgain_subpages[self.ms] = filenamer.sanitize('ampgain' + '-%s.html' % self.ms) self.phasegain_subpages[self.ms] = filenamer.sanitize('phasegain' + '-%s.html' % self.ms) self.bpsolamp_subpages[self.ms] = filenamer.sanitize('bpsolamp' + '-%s.html' % self.ms) self.bpsolphase_subpages[self.ms] = filenamer.sanitize('bpsolphase' + '-%s.html' % self.ms) if os.path.exists(json_path): with open(json_path, 'r') as json_file: self.json = json_file.readlines()[0] else: self.json = '{}' def _get_display_context(self): return {'pcontext': self.context, 'result': self.result, 'plots': self.plots, 'dirname': self.dirname, 'json': self.json, 'testdelay_subpages': self.testdelay_subpages, 'ampgain_subpages': self.ampgain_subpages, 'phasegain_subpages': self.phasegain_subpages, 'bpsolamp_subpages': self.bpsolamp_subpages, 'bpsolphase_subpages': self.bpsolphase_subpages, 'bandlist': self.bandlist} @property def dirname(self): stage = 'stage%s' % self.result.stage_number return os.path.join(self.context.report_dir, stage) @property def filename(self): filename = filenamer.sanitize(self.filename_prefix + '-%s.html' % self.ms) return filename @property def path(self): return os.path.join(self.dirname, self.filename)
[docs] def get_file(self): if not os.path.exists(self.dirname): os.makedirs(self.dirname) file_obj = open(self.path, 'w') return contextlib.closing(file_obj)
[docs] def render(self): display_context = self._get_display_context() t = weblog.TEMPLATE_LOOKUP.get_template(self.template) return t.render(**display_context)
[docs]class T2_4MDetailstestBPdcalsRenderer(basetemplates.T2_4MDetailsDefaultRenderer): def __init__(self, uri='testbpdcals.mako', description='Initial test calibrations', always_rerender=False): super(T2_4MDetailstestBPdcalsRenderer, self).__init__( uri=uri, description=description, always_rerender=always_rerender)
[docs] def get_display_context(self, context, results): super_cls = super(T2_4MDetailstestBPdcalsRenderer, self) ctx = super_cls.get_display_context(context, results) weblog_dir = os.path.join(context.report_dir, 'stage%s' % results.stage_number) summary_plots = {} testdelay_subpages = {} ampgain_subpages = {} phasegain_subpages = {} bpsolamp_subpages = {} bpsolphase_subpages = {} band2spw = collections.defaultdict(list) for result in results: m = context.observing_run.get_ms(result.inputs['vis']) spw2band = m.get_vla_spw2band() spwobjlist = m.get_spectral_windows(science_windows_only=True) listspws = [spw.id for spw in spwobjlist] for spw, band in spw2band.items(): if spw in listspws: # Science intents only band2spw[band].append(str(spw)) bandlist = [band for band in band2spw.keys()] # LOG.info("BAND LIST: " + ','.join(bandlist)) plotter = testBPdcalsdisplay.testBPdcalsSummaryChart(context, result) plots = plotter.plot() ms = os.path.basename(result.inputs['vis']) summary_plots[ms] = plots # generate testdelay plots and JSON file plotter = testBPdcalsdisplay.testDelaysPerAntennaChart(context, result) plots = plotter.plot() json_path = plotter.json_filename # write the html for each MS to disk renderer = VLASubPlotRenderer(context, result, plots, json_path, 'testdelays_plots.mako', 'testdelays', bandlist) with renderer.get_file() as fileobj: fileobj.write(renderer.render()) testdelay_subpages[ms] = renderer.filename # generate amp Gain plots and JSON file plotter = testBPdcalsdisplay.ampGainPerAntennaChart(context, result) plots = plotter.plot() json_path = plotter.json_filename # write the html for each MS to disk renderer = VLASubPlotRenderer(context, result, plots, json_path, 'ampgain_plots.mako', 'ampgain', bandlist) with renderer.get_file() as fileobj: fileobj.write(renderer.render()) ampgain_subpages[ms] = renderer.filename # generate phase Gain plots and JSON file plotter = testBPdcalsdisplay.phaseGainPerAntennaChart(context, result) plots = plotter.plot() json_path = plotter.json_filename # write the html for each MS to disk renderer = VLASubPlotRenderer(context, result, plots, json_path, 'phasegain_plots.mako', 'phasegain', bandlist) with renderer.get_file() as fileobj: fileobj.write(renderer.render()) phasegain_subpages[ms] = renderer.filename # generate amp bandpass solution plots and JSON file plotter = testBPdcalsdisplay.bpSolAmpPerAntennaChart(context, result) plots = plotter.plot() json_path = plotter.json_filename # write the html for each MS to disk renderer = VLASubPlotRenderer(context, result, plots, json_path, 'bpsolamp_plots.mako', 'bpsolamp', bandlist) with renderer.get_file() as fileobj: fileobj.write(renderer.render()) bpsolamp_subpages[ms] = renderer.filename # generate phase bandpass solution plots and JSON file plotter = testBPdcalsdisplay.bpSolPhasePerAntennaChart(context, result) plots = plotter.plot() json_path = plotter.json_filename # write the html for each MS to disk renderer = VLASubPlotRenderer(context, result, plots, json_path, 'bpsolphase_plots.mako', 'bpsolphase', bandlist) with renderer.get_file() as fileobj: fileobj.write(renderer.render()) bpsolphase_subpages[ms] = renderer.filename ctx.update({'summary_plots': summary_plots, 'testdelay_subpages': testdelay_subpages, 'ampgain_subpages': ampgain_subpages, 'phasegain_subpages': phasegain_subpages, 'bpsolamp_subpages': bpsolamp_subpages, 'bpsolphase_subpages': bpsolphase_subpages, 'dirname': weblog_dir}) return ctx