Skip to content

Commit

Permalink
Merge pull request #536 from desihub/fix-skylevel
Browse files Browse the repository at this point in the history
address sky-level unit test failure and template normalization bug
  • Loading branch information
sbailey authored May 11, 2020
2 parents c405acd + 40f1b58 commit 12de3d8
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 19 deletions.
4 changes: 4 additions & 0 deletions doc/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@ desisim change log
0.35.2 (unreleased)
-------------------

* Fix sky level Travis test failure (#534) and "low QSO flux" template unit test
failure (#507) (`PR #536`_).
* Add freeze_iers to more functions in simexp (direct to master).

.. _`PR #536`: https://github.com/desihub/desisim/pull/536

0.35.1 (2020-04-15)
-------------------

Expand Down
34 changes: 16 additions & 18 deletions py/desisim/templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ def make_galaxy_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(20.0, 2
from speclite import filters
from desispec.interpolation import resample_flux
from astropy.table import Column
from astropy import units
from astropy import units as u

if verbose:
log = get_logger(DEBUG)
Expand Down Expand Up @@ -747,7 +747,7 @@ def make_galaxy_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(20.0, 2
normfilt[mfilter] = filters.load_filters(mfilter)

# Optionally initialize the emission-line objects and line-ratios.
d4000 = self.basemeta['D4000']
d4000 = self.basemeta['D4000'].data

# Build each spectrum in turn.
if restframe:
Expand Down Expand Up @@ -809,7 +809,7 @@ def make_galaxy_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(20.0, 2
j = np.argwhere(self.basewave >= minw)[0,0]
k = np.argwhere(self.basewave <= maxw)[-1,0]

trans_restflux[j:k] = self.transient.flux(trans_epoch[ii], self.basewave[j:k]*units.Angstrom)
trans_restflux[j:k] = self.transient.flux(trans_epoch[ii], self.basewave[j:k] * u.Angstrom)
trans_norm = normfilt[magfilter[ii]].get_ab_maggies(trans_restflux, zwave)

for ichunk in range(nchunk):
Expand Down Expand Up @@ -844,6 +844,7 @@ def make_galaxy_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(20.0, 2
else:
normmaggies = np.array(normfilt[magfilter[ii]].get_ab_maggies(
restflux, zwave, mask_invalid=True)[magfilter[ii]])
assert(np.all(normmaggies > 0))
magnorm = 10**(-0.4*mag[ii]) / normmaggies

synthnano = dict()
Expand Down Expand Up @@ -933,7 +934,7 @@ class ELG(GALAXY):

def __init__(self, minwave=3600.0, maxwave=10000.0, cdelt=0.2, wave=None,
transient=None, tr_fluxratio=(0.01, 1.), tr_epoch=(-10,10), include_mgii=False, colorcuts_function=None,
normfilter_north='BASS-r', normfilter_south='decam2014-r',
normfilter_north='BASS-g', normfilter_south='decam2014-g',
baseflux=None, basewave=None, basemeta=None):
"""Initialize the ELG class. See the GALAXY.__init__ method for documentation
on the arguments plus the inherited attributes.
Expand Down Expand Up @@ -963,7 +964,7 @@ def __init__(self, minwave=3600.0, maxwave=10000.0, cdelt=0.2, wave=None,

self.ewoiicoeff = [1.34323087, -5.02866474, 5.43842874]

def make_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(21.0, 23.4),
def make_templates(self, nmodel=100, zrange=(0.6, 1.6), magrange=(20.0, 23.5),
oiiihbrange=(-0.5, 0.2), logvdisp_meansig=(1.9, 0.15),
minoiiflux=0.0, trans_filter='decam2014-r',
redshift=None, mag=None, vdisp=None, seed=None, input_meta=None,
Expand Down Expand Up @@ -1115,7 +1116,7 @@ def __init__(self, minwave=3600.0, maxwave=10000.0, cdelt=0.2, wave=None,
baseflux=baseflux, basewave=basewave, basemeta=basemeta,
transient=transient, tr_fluxratio=tr_fluxratio, tr_epoch=tr_epoch)

def make_templates(self, nmodel=100, zrange=(0.5, 1.0), magrange=(19.0, 20.2),
def make_templates(self, nmodel=100, zrange=(0.5, 1.0), magrange=(19.0, 21.5),
logvdisp_meansig=(2.3, 0.1),
trans_filter='decam2014-r', redshift=None, mag=None, vdisp=None,
seed=None, input_meta=None, nocolorcuts=False,
Expand Down Expand Up @@ -1482,6 +1483,7 @@ def make_star_templates(self, nmodel=100, vrad_meansig=(0.0, 200.0),

normmaggies = np.array(normfilt[magfilter[ii]].get_ab_maggies(
padflux, padzwave, mask_invalid=True)[magfilter[ii]])
assert(np.all(normmaggies > 0))
magnorm = 10**(-0.4*mag[ii]) / normmaggies

synthnano = dict()
Expand Down Expand Up @@ -1921,7 +1923,7 @@ def _sample_pcacoeff(self, nsample, coeff, samplerand):
x = samplerand.uniform(0.0, 1.0, size=nsample)
return coeff[np.interp(x, cdf, np.arange(0, len(coeff), 1)).astype('int')]

def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.0, 22.7),
def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.5, 22.7),
seed=None, redshift=None, mag=None, input_meta=None, N_perz=40,
maxiter=20, uniform=False, balprob=0.12, lyaforest=True,
noresample=False, nocolorcuts=False, south=True, verbose=False):
Expand Down Expand Up @@ -2009,17 +2011,6 @@ def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.0, 22.7),
else:
log = get_logger()

if redshift is not None:
if len(redshift) != nmodel:
log.fatal('Redshift must be an nmodel-length array')
raise ValueError
zrange = (np.min(redshift), np.max(redshift))

if mag is not None:
if len(mag) != nmodel:
log.fatal('Mag must be an nmodel-length array')
raise ValueError

if self.balqso:
if balprob < 0:
log.warning('Balprob {} is negative; setting to zero.'.format(balprob))
Expand Down Expand Up @@ -2055,9 +2046,13 @@ def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.0, 22.7),
# Assign redshift and magnitude priors.
if redshift is None:
redshift = rand.uniform(zrange[0], zrange[1], nmodel)
else:
redshift = np.atleast_1d(redshift)

if mag is None:
mag = rand.uniform(magrange[0], magrange[1], nmodel).astype('f4')
else:
mag = np.atleast_1d(mag)

if south:
magfilter = np.repeat(self.normfilter_south, nmodel)
Expand All @@ -2068,6 +2063,7 @@ def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.0, 22.7),
if len(redshift) != nmodel:
log.fatal('Redshift must be an nmodel-length array')
raise ValueError
zrange = (np.min(redshift), np.max(redshift))

if mag is not None:
if len(mag) != nmodel:
Expand Down Expand Up @@ -2206,6 +2202,7 @@ def make_templates(self, nmodel=100, zrange=(0.5, 4.0), magrange=(17.0, 22.7),

normmaggies = np.array(normfilt[magfilter[ii]].get_ab_maggies(
padflux, padzwave, mask_invalid=True)[magfilter[ii]])
assert(np.all(normmaggies[np.where(nonegflux)[0]] > 0))
magnorm = 10**(-0.4*mag[ii]) / normmaggies

synthnano = dict()
Expand Down Expand Up @@ -2510,6 +2507,7 @@ def _make_simqso_templates(self, redshift=None, magrange=None, seed=None,
maggies = self.bassmzlswise.get_ab_maggies(flux, self.basewave.copy(), mask_invalid=True)

normmaggies = np.array(magfilt.get_ab_maggies(flux, self.basewave.copy(), mask_invalid=True)[magfilter])
assert(np.all(normmaggies > 0))

synthnano = dict()
for key in maggies.columns:
Expand Down
4 changes: 3 additions & 1 deletion py/desisim/test/test_obs.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,13 @@ def test_newexp_sky(self):
sim_dark, fmap_dark, meta_dark, obscond_dark, objmeta_dark = obs.new_exposure('dark', nspec=10, night=night, expid=0, exptime=1000)
dark = sim_dark.simulated.copy()
sim_mws, fmap_mws, meta_mws, obscond_mws, objmeta_mws = obs.new_exposure('mws', nspec=10, night=night, expid=1, exptime=1000)
mws = sim_dark.simulated.copy()
mws = sim_mws.simulated.copy()
for channel in ['b', 'r', 'z']:
sky_mws = mws['num_sky_electrons_'+channel]
sky_dark = dark['num_sky_electrons_'+channel]
nonzero = (sky_mws != 0.0)
self.assertTrue(np.all(sky_mws >= 0))
self.assertTrue(np.all(sky_dark >= 0))
self.assertTrue(np.all(sky_mws[nonzero] > sky_dark[nonzero]))

@unittest.skipUnless(desimodel_data_available, 'The desimodel data/ directory was not detected.')
Expand Down

0 comments on commit 12de3d8

Please sign in to comment.