Beispiel #1
0
    def test_dependence_on_nu0_RJ(self):
        NSIDE = 8
        MODEL = 'c1s0'
        INSTRUMENT = 'litebird'
        sky = pysm.Sky(get_sky(NSIDE, MODEL))
        instrument = pysm.Instrument(
            get_instrument(INSTRUMENT, NSIDE, units='uK_RJ'))
        components100 = [
            cm.CMB(units='K_RJ'),
            cm.Synchrotron(100., units='K_RJ')
        ]
        components10 = [
            cm.CMB(units='K_RJ'),
            cm.Synchrotron(10., units='K_RJ')
        ]

        with suppress_stdout():
            freq_maps, _ = instrument.observe(sky, write_outputs=False)

        res100 = basic_comp_sep(components100, instrument, freq_maps)
        res10 = basic_comp_sep(components10, instrument, freq_maps)
        aac(res100.Sigma, res10.Sigma)
        aac(res100.x, res10.x)
        aac(res100.s[0], res10.s[0])
        aac(res100.s[1], res10.s[1] * 10**res10.x[0])
Beispiel #2
0
    def test_dependence_on_nu0_CMB(self):
        NSIDE = 4
        MODEL = 'c1s0'
        INSTRUMENT = 'LiteBIRD'
        sky = get_sky(NSIDE, MODEL)
        instrument = get_instrument(INSTRUMENT)
        components100 = [cm.CMB(), cm.Synchrotron(100.)]
        components10 = [cm.CMB(), cm.Synchrotron(10.)]

        freq_maps = get_observation(instrument, sky)

        res10 = basic_comp_sep(components10, instrument, freq_maps)
        res100 = basic_comp_sep(components100, instrument, freq_maps)
        aac(res100.Sigma, res10.Sigma)
        aac(res100.x, res10.x)
        aac(res100.s[0], res10.s[0], atol=1e-7)
        factor = _cmb2rj(10.) * _rj2cmb(100.)
        aac(res100.s[1], res10.s[1] * 10**res10.x[0] * factor)
Beispiel #3
0
    def test_dependence_on_nu0_RJ(self):
        NSIDE = 8
        MODEL = 'c1s0'
        INSTRUMENT = 'LiteBIRD'
        sky = get_sky(NSIDE, MODEL)
        instrument = get_instrument(INSTRUMENT)
        components100 = [
            cm.CMB(units='K_RJ'),
            cm.Synchrotron(100., units='K_RJ')
        ]
        components10 = [
            cm.CMB(units='K_RJ'),
            cm.Synchrotron(10., units='K_RJ')
        ]

        freq_maps = get_observation(instrument, sky, unit='K_RJ')

        res100 = basic_comp_sep(components100, instrument, freq_maps)
        res10 = basic_comp_sep(components10, instrument, freq_maps)
        aac(res100.Sigma, res10.Sigma)
        aac(res100.x, res10.x)
        aac(res100.s[0], res10.s[0])
        aac(res100.s[1], res10.s[1] * 10**res10.x[0])
Beispiel #4
0
 def load_foregrounds(self, config):
     """
     Loads the foreground models and prepares the unit conversions to K_CMB units. 
     """
     self.components = {}
     for key, component in config['fg_model'].items():
         self.components[key] = {}
         nu0 = component['parameters']['nu0']
         sed_fnc = get_fgbuster_sed(component['sed'])
         self.components[key]['sed'] = sed_fnc(**component['parameters'],
                                               units='K_RJ')
         self.components[key]['cmb_n0_norm'] = fgc.CMB('K_RJ').eval(
             nu0) * nu0**2
         self.components[key]['nu0'] = nu0
         self.components[key]['spectrum_params'] = component['spectrum']
     return
Beispiel #5
0
    def setUp(self):
        NSIDE = 16
        MODEL = 'c1d0s0f1'
        INSTRUMENT = 'LiteBIRD'
        X0_FACTOR = 0.99
        sky = get_sky(NSIDE, MODEL)
        self.instrument = get_instrument(INSTRUMENT)
        self.freq_maps = get_observation(self.instrument, sky)

        self.components = [cm.CMB(), cm.Dust(200.), cm.Synchrotron(100.)]
        freefree = cm.PowerLaw(100.)
        freefree.defaults = [-2.14]  # Otherwise it is the same as Synchrotron
        self.components.append(freefree)
        self.input = []
        for component in self.components:
            self.input += component.defaults
            component.defaults = [d * X0_FACTOR for d in component.defaults]
Beispiel #6
0
 def setUp(self):
     self.DX = 5e-4  # NOTE: this is a bit fine-tuned
     np.random.seed(0)
     self.n_freq = 6
     self.nu = np.logspace(1, 2.5, self.n_freq)
     self.n_stokes = 3
     self.n_pixels = 2
     self.components = [cm.CMB(), cm.Dust(200.), cm.Synchrotron(70.)]
     self.mm = MixingMatrix(*(self.components))
     self.params = [1.54, 20, -3]
     self.A = self.mm.eval(self.nu, *(self.params))
     self.A_dB = self.mm.diff(self.nu, *(self.params))
     self.A_dBdB = self.mm.diff_diff(self.nu, *(self.params))
     self.invN = uniform(size=(self.n_pixels, self.n_stokes, self.n_freq,
                               self.n_freq))
     self.invN += _T(self.invN)
     self.invN += 10 * np.eye(self.n_freq)
     self.invN *= 10
Beispiel #7
0
    def setUp(self):
        NSIDE = 16
        MODEL = 'c1d0s0f1'
        INSTRUMENT = 'litebird'
        X0_FACTOR = 0.99
        sky = pysm.Sky(get_sky(NSIDE, MODEL))
        self.instrument = pysm.Instrument(get_instrument(INSTRUMENT, NSIDE))
        with suppress_stdout():
            self.freq_maps, self.noise = self.instrument.observe(
                sky, write_outputs=False)

        self.components = [cm.CMB(), cm.Dust(200.), cm.Synchrotron(100.)]
        freefree = cm.PowerLaw(100.)
        freefree.defaults = [-2.14]  # Otherwise it is the same as Synchrotron
        self.components.append(freefree)
        self.input = []
        for component in self.components:
            self.input += component.defaults
            component.defaults = [d * X0_FACTOR for d in component.defaults]
Beispiel #8
0
    def load_foregrounds(self, config):
        self.component_names = []
        self.components = {}
        self.component_order = {}

        i_comp = 0
        for key, component in self.component_iterator(config):
            comp = {}

            decorr = component.get('decorr')
            comp['decorr'] = False
            if decorr:
                comp['decorr'] = True
                comp['decorr_param_names'] = {}
                for k, l in decorr.items():
                    comp['decorr_param_names'][l[0]] = k

            comp['names_x_dict'] = {}
            d_x = component.get('cross')
            if d_x:
                for pn, par in d_x.items():
                    if par[0] not in config['fg_model'].keys():
                        raise KeyError("Component %s " % (par[0]) +
                                       "is not a valid component" +
                                       "to correlate %s with" % key)
                    if par[0] == key:
                        raise KeyError("%s is cross correlated with itself." %
                                       par[0])
                    comp['names_x_dict'][par[0]] = pn

            # Loop through SED parameters.
            # Find nu0 if it exists
            # Make a list of all parameters ready to pass to fgc
            comp['sed_parameters'] = component['sed_parameters']
            nu0 = None
            params_fgc = {}
            comp['names_sed_dict'] = {}
            for k, l in comp['sed_parameters'].items():
                comp['names_sed_dict'][l[0]] = k

                # nu0
                if l[0] == 'nu0':
                    if l[1] != 'fixed':
                        raise ValueError("You can't vary reference"
                                         " frequencies!")
                    nu0 = l[2][0]

                # SED parameter
                if l[1] == 'fixed':
                    val = l[2][0]
                else:
                    val = None
                params_fgc[l[0]] = val

            # Set units normalization
            if nu0 is not None:
                comp['cmb_n0_norm'] = fgc.CMB('K_RJ').eval(nu0)
            else:
                comp['cmb_n0_norm'] = 1.

            # Set SED function
            sed_fnc = get_function(fgc, component['sed'])
            comp['sed'] = sed_fnc(**params_fgc, units='K_RJ')

            # Same thing for C_ell parameters
            comp['names_cl_dict'] = {}
            params_fgl = {}
            for k, d in component['cl_parameters'].items():
                p1, p2 = k
                # Add parameters only if we're using both polarization channels
                if ((p1 in config['pol_channels'])
                        and (p2 in config['pol_channels'])):
                    comp['names_cl_dict'][k] = {}
                    params_fgl[k] = {}
                    for n, l in d.items():
                        comp['names_cl_dict'][k][l[0]] = n
                        if l[0] == 'ell0':
                            if l[1] != 'fixed':
                                raise ValueError("You can't vary "
                                                 "reference scales!")
                        if l[1] == 'fixed':
                            val = l[2][0]
                        else:
                            val = None
                        params_fgl[k][l[0]] = val

            # Moment parameters
            comp['names_moments_dict'] = {}
            d = component.get('moments')
            if d and config['fg_model'].get('use_moments'):
                comp['moments_pameters'] = component['moments']
                for k, l in component['moments'].items():
                    comp['names_moments_dict'][l[0]] = k

            # Set Cl functions
            comp['cl'] = {}
            for k, c in component['cl'].items():
                p1, p2 = k
                # Add parameters only if we're using both polarization channels
                if ((p1 in config['pol_channels'])
                        and (p2 in config['pol_channels'])):
                    cl_fnc = get_function(fgl, c)
                    comp['cl'][k] = cl_fnc(**(params_fgl[k]))
            self.components[key] = comp
            self.component_names.append(key)
            self.component_order[key] = i_comp
            i_comp += 1
        self.n_components = len(self.component_names)
        return