def register_default_dimensions(cube, slvr_cfg): """ Register the default dimensions for a RIME solver """ import montblanc.src_types as mbs # Pull out the configuration options for the basics autocor = slvr_cfg['auto_correlations'] ntime = 10 na = 7 nbands = 1 nchan = 16 npol = 4 # Infer number of baselines from number of antenna, nbl = nr_of_baselines(na, autocor) if not npol == 4: raise ValueError("npol set to {}, but only 4 polarisations " "are currently supported.") # Register these dimensions on this solver. cube.register_dimension('ntime', ntime, description="Timesteps") cube.register_dimension('na', na, description="Antenna") cube.register_dimension('nbands', nbands, description="Bands") cube.register_dimension('nchan', nchan, description="Channels") cube.register_dimension('npol', npol, description="Polarisations") cube.register_dimension('nbl', nbl, description="Baselines") # Register dependent dimensions cube.register_dimension('npolchan', nchan*npol, description='Polarised channels') cube.register_dimension('nvis', ntime*nbl*nchan, description='Visibilities') # Convert the source types, and their numbers # to their number variables and numbers # { 'point':10 } => { 'npsrc':10 } src_cfg = default_sources() src_nr_vars = sources_to_nr_vars(src_cfg) # Sum to get the total number of sources cube.register_dimension('nsrc', sum(src_nr_vars.itervalues()), description="Sources (Total)") # Register the individual source types for nr_var, nr_of_src in src_nr_vars.iteritems(): cube.register_dimension(nr_var, nr_of_src, description='{} sources'.format(mbs.SOURCE_DIM_TYPES[nr_var]))
def test_source_range_tuple(self): """ Test that, given a source range, the returned dictionary contains the source types within that range """ src_dict = mbs.sources_to_nr_vars({'point':10, 'gaussian':20, 'sersic':40}) D = mbs.source_range_tuple(0, 45, src_dict) self.assertTrue(D['npsrc'] == (0, 10) and D['ngsrc'] == (0, 20) and D['nssrc'] == (0, 15)) D = mbs.source_range_tuple(3, 45, src_dict) self.assertTrue(D['npsrc'] == (3, 10) and D['ngsrc'] == (0, 20) and D['nssrc'] == (0, 15)) D = mbs.source_range_tuple(13, 45, src_dict) self.assertTrue(D['npsrc'] == (0, 0) and D['ngsrc'] == (3, 20) and D['nssrc'] == (0, 15)) D = mbs.source_range_tuple(0, 3, src_dict) self.assertTrue(D['npsrc'] == (0, 3) and D['ngsrc'] == (0, 0) and D['nssrc'] == (0, 0)) D = mbs.source_range_tuple(15, 18, src_dict) self.assertTrue(D['npsrc'] == (0, 0) and D['ngsrc'] == (5, 8) and D['nssrc'] == (0, 0)) D = mbs.source_range_tuple(15, 70, src_dict) self.assertTrue(D['npsrc'] == (0, 0) and D['ngsrc'] == (5, 20) and D['nssrc'] == (0, 40))
def test_source_range(self): """ Test that, given a source range, the returned dictionary contains the source types within that range """ src_dict = mbs.sources_to_nr_vars({'point':10, 'gaussian':20, 'sersic':40}) D = mbs.source_range(0, 45, src_dict) self.assertTrue(D['npsrc'] == 10 and D['ngsrc'] == 20 and D['nssrc'] == 15) D = mbs.source_range(3, 45, src_dict) self.assertTrue(D['npsrc'] == 7 and D['ngsrc'] == 20 and D['nssrc'] == 15) D = mbs.source_range(13, 45, src_dict) self.assertTrue(D['npsrc'] == 0 and D['ngsrc'] == 17 and D['nssrc'] == 15) D = mbs.source_range(0, 3, src_dict) self.assertTrue(D['npsrc'] == 3 and D['ngsrc'] == 0 and D['nssrc'] == 0) D = mbs.source_range(15, 18, src_dict) self.assertTrue(D['ngsrc'] == 3) D = mbs.source_range(15, 70, src_dict) self.assertTrue(D['npsrc'] == 0 and D['ngsrc'] == 15 and D['nssrc'] == 40)