diff --git a/python/desc/imsim/atmPSF.py b/python/desc/imsim/atmPSF.py index 03334a2f..e28c999c 100644 --- a/python/desc/imsim/atmPSF.py +++ b/python/desc/imsim/atmPSF.py @@ -46,11 +46,13 @@ class AtmosphericPSF(PSFbase): @param exptime Exposure time in seconds. default: 30. @param kcrit Critical Fourier mode at which to split first and second kicks in units of (1/r0). default: 0.2 + @param screen_size Size of the phase screens in meters. default: 819.2 + @param screen_scale Size of phase screen "pixels" in meters. default: 0.1 @param doOpt Add in optical phase screens? default: True @param logger Optional logger. default: None """ def __init__(self, airmass, rawSeeing, band, rng, t0=0.0, exptime=30.0, kcrit=0.2, - doOpt=True, logger=None): + screen_size=819.2, screen_scale=0.1, doOpt=True, logger=None): self.airmass = airmass self.rawSeeing = rawSeeing @@ -62,6 +64,8 @@ def __init__(self, airmass, rawSeeing, band, rng, t0=0.0, exptime=30.0, kcrit=0. self.rng = rng self.t0 = t0 self.exptime = exptime + self.screen_size = screen_size + self.screen_scale = screen_scale self.logger = logger self.atm = galsim.Atmosphere(**self._getAtmKwargs()) @@ -139,7 +143,7 @@ def _getAtmKwargs(self): return dict(r0_500=r0_500, L0=L0, speed=speeds, direction=directions, altitude=altitudes, r0_weights=weights, rng=self.rng, - screen_size=819.2, screen_scale=0.1) + screen_size=self.screen_size, screen_scale=self.screen_scale) def _getPSF(self, xPupil=None, yPupil=None, gsparams=None): """ diff --git a/python/desc/imsim/imSim.py b/python/desc/imsim/imSim.py index 3bbe69cd..0764b026 100644 --- a/python/desc/imsim/imSim.py +++ b/python/desc/imsim/imSim.py @@ -859,7 +859,7 @@ def FWHMgeom(rawSeeing, band, altitude): return 0.822*FWHMeff(rawSeeing, band, altitude) + 0.052 -def make_psf(psf_name, obs_md, log_level='WARN', rng=None): +def make_psf(psf_name, obs_md, log_level='WARN', rng=None, **kwds): """ Make the requested PSF object. @@ -875,6 +875,9 @@ def make_psf(psf_name, obs_md, log_level='WARN', rng=None): Logging level ('DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL'). rng: galsim.BaseDeviate Instance of the galsim.baseDeviate random number generator. + **kwds: **dict + Additional keyword arguments to pass to the AtmosphericPSF, + i.e., screen_size(=819.2) and screen_scale(=0.1). Returns ------- @@ -901,7 +904,7 @@ def make_psf(psf_name, obs_md, log_level='WARN', rng=None): rawSeeing=rawSeeing, band=obs_md.bandpass, rng=rng, - logger=logger) + logger=logger, **kwds) return psf def save_psf(psf, outfile): diff --git a/tests/test_psf.py b/tests/test_psf.py index 6e013029..bf638357 100644 --- a/tests/test_psf.py +++ b/tests/test_psf.py @@ -46,7 +46,7 @@ def test_save_and_load_psf(self): 'tiny_instcat.txt') obs_md, _, _ = desc.imsim.parsePhoSimInstanceFile(instcat) for psf_name in ("DoubleGaussian", "Kolmogorov", "Atmospheric"): - psf = desc.imsim.make_psf(psf_name, obs_md) + psf = desc.imsim.make_psf(psf_name, obs_md, screen_scale=0.4) psf_file = os.path.join(self.test_dir, '{}.pkl'.format(psf_name)) desc.imsim.save_psf(psf, psf_file) psf_retrieved = desc.imsim.load_psf(psf_file)