diff options
Diffstat (limited to 'fg21sim')
| -rw-r--r-- | fg21sim/galactic/synchrotron.py | 74 | 
1 files changed, 29 insertions, 45 deletions
diff --git a/fg21sim/galactic/synchrotron.py b/fg21sim/galactic/synchrotron.py index dacec8f..2809bad 100644 --- a/fg21sim/galactic/synchrotron.py +++ b/fg21sim/galactic/synchrotron.py @@ -74,44 +74,32 @@ class Synchrotron:          logger.info("Loaded and setup configurations")      def _load_template(self): -        """Load the template map""" -        self.template, header = read_fits_healpix(self.template_path) -        self.template_header = header -        self.template_nside = self.template_header["NSIDE"] -        self.template_ordering = self.template_header["ORDERING"] +        """Load the template map, and upgrade/downgrade the resolution +        to match the output Nside.""" +        self.template, self.template_header = read_fits_healpix( +            self.template_path) +        template_nside = self.template_header["NSIDE"]          logger.info("Loaded template map from {0} (Nside={1})".format( -            self.template_path, self.template_nside)) +            self.template_path, template_nside)) +        # Upgrade/downgrade resolution +        if template_nside != self.nside: +            self.template = hp.ud_grade(self.template, nside_out=self.nside) +            logger.info("Upgrade/downgrade template map from Nside " +                        "{0} to {1}".format(template_nside, self.nside))      def _load_indexmap(self): -        """Load the spectral index map""" -        self.indexmap, header = read_fits_healpix(self.indexmap_path) -        self.indexmap_header = header -        self.indexmap_nside = self.indexmap_header["NSIDE"] -        self.indexmap_ordering = self.indexmap_header["ORDERING"] +        """Load the spectral index map, and upgrade/downgrade the resolution +        to match the output Nside.""" +        self.indexmap, self.indexmap_header = read_fits_healpix( +            self.indexmap_path) +        indexmap_nside = self.indexmap_header["NSIDE"]          logger.info("Loaded spectral index map from {0} (Nside={1})".format( -            self.indexmap_path, self.indexmap_nside)) - -    def _process_template(self): -        """Upgrade/downgrade the template to have the same Nside as -        requested by the output.""" -        if self.nside == self.template_nside: -            self.hpmap = self.template.copy() -        else: -            # upgrade/downgrade the resolution -            self.hpmap = hp.ud_grade(self.template, nside_out=self.nside) -            logger.info("Upgrade/downgrade template map from Nside " -                        "{0} to {1}".format(self.template_nside, self.nside)) - -    def _process_indexmap(self): -        """Upgrade/downgrade the spectral index map to have the same -        Nside as requested by the output.""" -        if self.nside == self.indexmap_nside: -            self.hpmap_index = self.indexmap.copy() -        else: -            # upgrade/downgrade the resolution -            self.hpmap_index = hp.ud_grade(self.indexmap, nside_out=self.nside) +            self.indexmap_path, indexmap_nside)) +        # Upgrade/downgrade resolution +        if indexmap_nside != self.nside: +            self.indexmap = hp.ud_grade(self.indexmap, nside_out=self.nside)              logger.info("Upgrade/downgrade spectral index map from Nside " -                        "{0} to {1}".format(self.indexmap_nside, self.nside)) +                        "{0} to {1}".format(indexmap_nside, self.nside))      def _add_smallscales(self):          """Add fluctuations on small scales to the template map. @@ -127,12 +115,12 @@ class Synchrotron:              "An improved source-subtracted and destriped 408-MHz all-sky map"              Sec. 4.2: Small-scale fluctuations          """ -        if not self.smallscales: +        if (not self.smallscales) or (hasattr(self, "hpmap_smallscales")):              return          # To add small scale fluctuations          # model: Remazeilles15          gamma = -2.703  # index of the power spectrum between l [30, 90] -        sigma_temp = 56  # original beam resolution of the template [ arcmin ] +        sigma_tp = 56  # original beam resolution of the template [ arcmin ]          alpha = 0.0599          beta = 0.782          # angular power spectrum of the Gaussian random field @@ -140,22 +128,22 @@ class Synchrotron:          cl = np.zeros(ell.shape)          ell_idx = ell >= self.lmin          cl[ell_idx] = (ell[ell_idx] ** gamma * -                       1.0 - np.exp(-ell[ell_idx]**2 * sigma_temp**2)) +                       1.0 - np.exp(-ell[ell_idx]**2 * sigma_tp**2))          cl[ell < self.lmin] = cl[self.lmin]          # generate a realization of the Gaussian random field          gss = hp.synfast(cls=cl, nside=self.nside, new=True)          # whiten the Gaussian random field          gss = (gss - gss.mean()) / gss.std() -        self.hpmap_smallscales = alpha * gss * self.hpmap**beta -        self.hpmap += self.hpmap_smallscales +        self.hpmap_smallscales = alpha * gss * self.template**beta +        self.template += self.hpmap_smallscales          logger.info("Added small-scale fluctuations")      def _transform_frequency(self, frequency):          """Transform the template map to the requested frequency,          according to the spectral model and using an spectral index map.          """ -        hpmap_f = (self.hpmap * -                   (frequency / self.template_freq) ** self.hpmap_index) +        hpmap_f = (self.template * +                   (frequency / self.template_freq) ** self.indexmap)          return hpmap_f      def _make_header(self): @@ -204,11 +192,7 @@ class Synchrotron:      def simulate(self, frequencies):          """Simulate the synchrotron map at the specified frequencies.""" -        if not hasattr(self, "hpmap"): -            self._process_template() -            self._add_smallscales() -        if not hasattr(self, "hpmap_index"): -            self._process_indexmap() +        self._add_smallscales()          #          hpmaps = []          for f in np.array(frequencies, ndmin=1):  | 
