""" L """ import logging from math import ceil from base_resource_estimator import BaseResourceEstimator from .parameterset import ParameterSet logger = logging.getLogger(__name__) class LongBaselinePipelineResourceEstimator(BaseResourceEstimator): """ LongBaselinePipelineResourceEstimator """ def __init__(self, kwargs, input_files): BaseResourceEstimator.__init__(self, name='longbaseline_pipeline') logger.debug("init LongBaselinePipelineResourceEstimator") self.parset = ParameterSet(kwargs).make_subset('dp.output') self.duration = int(kwargs.get('observation.duration', 1)) self.input_files = input_files self.required_keys = ('correlated.enabled', 'longbaseline.subband_groups_per_ms', 'longbaseline.subbands_per_subband_group') if self.checkParsetForRequiredKeys(): self.estimate() return def estimate(self): """ Estimate for calibration pipeline calculates: datasize (number of files, file size), bandwidth """ logger.debug("start estimate '{}'".format(self.name)) if 'dp_correlated_uv' in self.input_files: if self.parset['correlated']['enabled'] == 'true': logger.debug("calculate long baseline data size") nr_output_files = 0 subband_groups_per_ms = int(self.parset['longbaseline']['subband_groups_per_ms']) subbands_per_subband_group = int(self.parset['longbaseline']['subbands_per_subband_group']) if subband_groups_per_ms and subbands_per_subband_group: nr_input_files = int(self.input_files['dp_correlated_uv']['nr_files']) if (nr_input_files % (subbands_per_subband_group * subband_groups_per_ms)) == 0: nr_output_files = nr_input_files / (subbands_per_subband_group * subband_groups_per_ms) self.output_files['dp_correlated_uv'] = {'nr_files': nr_output_files, 'file_size': 1000} logger.debug("dp_correlated_uv: {} files {} bytes each".format(nr_output_files, 1000)) # count total data size for values in self.output_files.itervalues(): self.total_data_size += values['nr_files'] * values['file_size'] self.total_bandwidth = ceil((self.total_data_size * 8) / self.duration) # bits/second return