From 62c6332b0045011b7784002b71e6c101b8aff1f4 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Mon, 5 Nov 2018 14:47:49 -0800 Subject: [PATCH 01/12] Remove fastsim fiberloss setting and use_poisson --- py/desisim/scripts/quickspectra.py | 13 +++++++++---- py/desisim/simexp.py | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index fba6652ed..dd4339eee 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -24,7 +24,7 @@ import matplotlib.pyplot as plt def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, - sourcetype=None, targetid=None, redshift=None, expid=0, seed=0, skyerr=0.0, ra=None, dec=None, meta=None, fibermap_columns=None, fullsim=False,use_poisson=True): + sourcetype=None, targetid=None, redshift=None, expid=0, seed=0, skyerr=0.0, ra=None, dec=None, meta=None, fibermap_columns=None, fullsim=False,use_poisson=True, specsim_config_file="desi"): """ Simulate spectra from an input set of wavelength and flux and writes a FITS file in the Spectra format that can be used as input to the redshift fitter. @@ -175,13 +175,18 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, wave = wave[ii]*u.Angstrom flux = flux[:,ii]*flux_unit + import specsim.simulator + eboss = specsim.simulator.Simulator('eboss') + print('created eboss') + sim = desisim.simexp.simulate_spectra(wave, flux, fibermap=frame_fibermap, obsconditions=obsconditions, redshift=redshift, seed=seed, - psfconvolve=True) + psfconvolve=True, specsim_config_file=specsim_config_file) random_state = np.random.RandomState(seed) - sim.generate_random_noise(random_state,use_poisson=use_poisson) - + #sim.generate_random_noise(random_state,use_poisson=use_poisson) + sim.generate_random_noise(random_state) + scale=1e17 specdata = None diff --git a/py/desisim/simexp.py b/py/desisim/simexp.py index baf8ea894..138a46a30 100644 --- a/py/desisim/simexp.py +++ b/py/desisim/simexp.py @@ -481,7 +481,7 @@ def simulate_spectra(wave, flux, fibermap=None, obsconditions=None, redshift=Non # source types are sky elg lrg qso bgs star , they # are only used in specsim.fiberloss for the desi.instrument.fiberloss_method="table" method - desi.instrument.fiberloss_method = 'fastsim' + #desi.instrument.fiberloss_method = 'fastsim' log.debug('running simulation with {} fiber loss method'.format(desi.instrument.fiberloss_method)) @@ -618,7 +618,7 @@ def _specsim_config_for_wave(wave, dwave_out=None, specsim_config_file = "desi") config.instrument.cameras.b.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.instrument.cameras.r.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) - config.instrument.cameras.z.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) + #config.instrument.cameras.z.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.update() return config From 4a4e49630a21813bfad0255472ac8b7d0ee12dd4 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Mon, 5 Nov 2018 15:20:32 -0800 Subject: [PATCH 02/12] Set default config file to "eboss" --- py/desisim/scripts/quickquasars.py | 2 +- py/desisim/scripts/quickspectra.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/py/desisim/scripts/quickquasars.py b/py/desisim/scripts/quickquasars.py index 008a76682..2c72499ef 100644 --- a/py/desisim/scripts/quickquasars.py +++ b/py/desisim/scripts/quickquasars.py @@ -523,7 +523,7 @@ def simulate_one_healpix(ifilename,args,model,obsconditions,decam_and_wise_filte sim_spectra(qso_wave,qso_flux, args.program, obsconditions=obsconditions,spectra_filename=ofilename, sourcetype="qso", skyerr=args.skyerr,ra=metadata["RA"],dec=metadata["DEC"],targetid=targetid, - meta=specmeta,seed=seed,fibermap_columns=fibermap_columns,use_poisson=False) # use Poisson = False to get reproducible results. + meta=specmeta,seed=seed,fibermap_columns=fibermap_columns,use_poisson=False, specsim_config_file="eboss") # use Poisson = False to get reproducible results. ##Adedd to write the truth file, includen metadata for DLA's and BALs diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index dd4339eee..bccf8f70a 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -175,10 +175,6 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, wave = wave[ii]*u.Angstrom flux = flux[:,ii]*flux_unit - import specsim.simulator - eboss = specsim.simulator.Simulator('eboss') - print('created eboss') - sim = desisim.simexp.simulate_spectra(wave, flux, fibermap=frame_fibermap, obsconditions=obsconditions, redshift=redshift, seed=seed, psfconvolve=True, specsim_config_file=specsim_config_file) From f80bdbdd5b8f2bc7557f22f10636a7751bfd188a Mon Sep 17 00:00:00 2001 From: londumas Date: Mon, 25 Mar 2019 16:08:29 -0700 Subject: [PATCH 03/12] read yaml from desi or eboss --- py/desisim/scripts/quickquasars.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/py/desisim/scripts/quickquasars.py b/py/desisim/scripts/quickquasars.py index bc98646f9..6377a5619 100644 --- a/py/desisim/scripts/quickquasars.py +++ b/py/desisim/scripts/quickquasars.py @@ -607,11 +607,15 @@ def simulate_one_healpix(ifilename,args,model,obsconditions,decam_and_wise_filte else : fibermap_columns=None - + # use Poisson = False to get reproducible results. + if args.eboss: + specsim_config_file = 'eboss' + else: + specsim_config_file = 'desi' sim_spectra(qso_wave,qso_flux, args.program, obsconditions=obsconditions,spectra_filename=ofilename, - sourcetype="qso", skyerr=args.skyerr,ra=metadata["RA"],dec=metadata["DEC"],targetid=targetid, - meta=specmeta,seed=seed,fibermap_columns=fibermap_columns,use_poisson=False, specsim_config_file="eboss") # use Poisson = False to get reproducible results. - + sourcetype="qso", skyerr=args.skyerr,ra=metadata["RA"],dec=metadata["DEC"],targetid=targetid, + meta=specmeta,seed=seed,fibermap_columns=fibermap_columns,use_poisson=False, + specsim_config_file=specsim_config_file) ### Keep input redshift Z_spec = metadata['Z'].copy() From f487731770ffd8d6b3235f105cbeb75ed920f667 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Mon, 25 Mar 2019 17:34:38 -0600 Subject: [PATCH 04/12] Need to include use_poisson in generating random noise --- py/desisim/scripts/quickspectra.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index 9471ab662..e60f86d04 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -179,8 +179,7 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, psfconvolve=True, specsim_config_file=specsim_config_file) random_state = np.random.RandomState(seed) - #sim.generate_random_noise(random_state,use_poisson=use_poisson) - sim.generate_random_noise(random_state) + sim.generate_random_noise(random_state,use_poisson=use_poisson) scale=1e17 specdata = None From 4e00ffc8586484036f7acde31275e69594a06465 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Mon, 25 Mar 2019 17:44:03 -0600 Subject: [PATCH 05/12] Read in certain parameters only if specsim_config_file = 'desi' --- py/desisim/simexp.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/py/desisim/simexp.py b/py/desisim/simexp.py index 20eddfa6b..e4e03add6 100644 --- a/py/desisim/simexp.py +++ b/py/desisim/simexp.py @@ -471,7 +471,8 @@ def simulate_spectra(wave, flux, fibermap=None, obsconditions=None, redshift=Non # source types are sky elg lrg qso bgs star , they # are only used in specsim.fiberloss for the desi.instrument.fiberloss_method="table" method - #desi.instrument.fiberloss_method = 'fastsim' + if args.specsim_config_file == "desi": + desi.instrument.fiberloss_method = 'fastsim' log.debug('running simulation with {} fiber loss method'.format(desi.instrument.fiberloss_method)) @@ -608,7 +609,8 @@ def _specsim_config_for_wave(wave, dwave_out=None, specsim_config_file = "desi") config.instrument.cameras.b.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.instrument.cameras.r.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) - #config.instrument.cameras.z.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) + if args.specsim_config_file == "desi": + config.instrument.cameras.z.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.update() return config From 6ac50dcc317a418efd62d506cb6c73d09f5b83fb Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Mon, 25 Mar 2019 17:51:18 -0600 Subject: [PATCH 06/12] Remove args --- py/desisim/simexp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/py/desisim/simexp.py b/py/desisim/simexp.py index e4e03add6..c2498b546 100644 --- a/py/desisim/simexp.py +++ b/py/desisim/simexp.py @@ -471,7 +471,7 @@ def simulate_spectra(wave, flux, fibermap=None, obsconditions=None, redshift=Non # source types are sky elg lrg qso bgs star , they # are only used in specsim.fiberloss for the desi.instrument.fiberloss_method="table" method - if args.specsim_config_file == "desi": + if specsim_config_file == "desi": desi.instrument.fiberloss_method = 'fastsim' log.debug('running simulation with {} fiber loss method'.format(desi.instrument.fiberloss_method)) @@ -609,7 +609,7 @@ def _specsim_config_for_wave(wave, dwave_out=None, specsim_config_file = "desi") config.instrument.cameras.b.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.instrument.cameras.r.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) - if args.specsim_config_file == "desi": + if specsim_config_file == "desi": config.instrument.cameras.z.constants.output_pixel_size = "{:.3f} Angstrom".format(dwave_out) config.update() From 8342ad08bf9837e67024b26ddea9d3636f967ad4 Mon Sep 17 00:00:00 2001 From: londumas Date: Mon, 25 Mar 2019 21:20:21 -0700 Subject: [PATCH 07/12] Correct spacing --- py/desisim/scripts/quickspectra.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index e60f86d04..a8cc726de 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -180,7 +180,7 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, random_state = np.random.RandomState(seed) sim.generate_random_noise(random_state,use_poisson=use_poisson) - + scale=1e17 specdata = None From 090a477321523033082135d21771dec961cb196e Mon Sep 17 00:00:00 2001 From: Stephen Bailey Date: Fri, 7 Jun 2019 11:48:56 -0700 Subject: [PATCH 08/12] update desitarget version for testing --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c00d5120b..7d26e9fef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,7 +55,7 @@ env: - DESISIM_TESTDATA_VERSION=0.6.1 - SPECSIM_VERSION=v0.12 - DESISPEC_VERSION=0.26.0 - - DESITARGET_VERSION=0.25.0 + - DESITARGET_VERSION=0.29.1 - SIMQSO_VERSION=v1.2.3 - DESI_LOGLEVEL=DEBUG - MAIN_CMD='python setup.py' From 6860e9f699081d3320cd3f1101682c90afba7498 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Fri, 20 Dec 2019 21:08:26 -0800 Subject: [PATCH 09/12] Return sim._eboss_camera_output and don't apply additional resolution matrix --- py/desisim/scripts/quickspectra.py | 77 ++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index a8cc726de..527de6aa8 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -198,32 +198,59 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, table.write(table_filename,format="fits",overwrite=True) print("wrote",table_filename) - for table in sim.camera_output : - - wave = table['wavelength'].astype(float) - flux = (table['observed_flux']+table['random_noise_electrons']*table['flux_calibration']).T.astype(float) - if np.any(skyscale): - flux += ((table['num_sky_electrons']*skyscale)*table['flux_calibration']).T.astype(float) + if specsim_config_file == "eboss": + for table in sim._eboss_camera_output: + wave = table['wavelength'].astype(float) + flux = (table['observed_flux']+table['random_noise_electrons']*table['flux_calibration']).T.astype(float) + if np.any(skyscale): + flux += ((table['num_sky_electrons']*skyscale)*table['flux_calibration']).T.astype(float) - ivar = table['flux_inverse_variance'].T.astype(float) - - band = table.meta['name'].strip()[0] - - flux = flux * scale - ivar = ivar / scale**2 - mask = np.zeros(flux.shape).astype(int) - - spec = Spectra([band], {band : wave}, {band : flux}, {band : ivar}, - resolution_data={band : resolution[band]}, - mask={band : mask}, - fibermap=spectra_fibermap, - meta=meta, - single=True) - - if specdata is None : - specdata = spec - else : - specdata.update(spec) + ivar = table['flux_inverse_variance'].T.astype(float) + + band = table.meta['name'].strip()[0] + + flux = flux * scale + ivar = ivar / scale**2 + mask = np.zeros(flux.shape).astype(int) + + spec = Spectra([band], {band : wave}, {band : flux}, {band : ivar}, + resolution_data=None, + mask={band : mask}, + fibermap=spectra_fibermap, + meta=meta, + single=True) + + if specdata is None : + specdata = spec + else : + specdata.update(spec) + + else: + for table in sim.camera_output : + wave = table['wavelength'].astype(float) + flux = (table['observed_flux']+table['random_noise_electrons']*table['flux_calibration']).T.astype(float) + if np.any(skyscale): + flux += ((table['num_sky_electrons']*skyscale)*table['flux_calibration']).T.astype(float) + + ivar = table['flux_inverse_variance'].T.astype(float) + + band = table.meta['name'].strip()[0] + + flux = flux * scale + ivar = ivar / scale**2 + mask = np.zeros(flux.shape).astype(int) + + spec = Spectra([band], {band : wave}, {band : flux}, {band : ivar}, + resolution_data={band : resolution[band]}, + mask={band : mask}, + fibermap=spectra_fibermap, + meta=meta, + single=True) + + if specdata is None : + specdata = spec + else : + specdata.update(spec) desispec.io.write_spectra(spectra_filename, specdata) log.info('Wrote '+spectra_filename) From 3a39b0807ac96618cfd7840053d599f283b27f49 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Wed, 27 May 2020 14:02:11 -0700 Subject: [PATCH 10/12] Updated wavemin & wavemax in sim_spectra --- py/desisim/scripts/quickspectra.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/py/desisim/scripts/quickspectra.py b/py/desisim/scripts/quickspectra.py index 527de6aa8..b52dcda87 100644 --- a/py/desisim/scripts/quickspectra.py +++ b/py/desisim/scripts/quickspectra.py @@ -50,7 +50,7 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, fibermap_columns : add these columns to the fibermap fullsim : if True, write full simulation data in extra file per camera use_poisson : if False, do not use numpy.random.poisson to simulate the Poisson noise. This is useful to get reproducible random realizations. - """ + """ log = get_logger() if len(flux.shape)==1 : @@ -140,6 +140,10 @@ def sim_spectra(wave, flux, program, spectra_filename, obsconditions=None, wavemin = desimodel.io.load_throughput('b').wavemin wavemax = desimodel.io.load_throughput('z').wavemax + if specsim_config_file == "eboss": + wavemin = 3500 + wavemax = 10000 + if wave[0] > wavemin: log.warning('Minimum input wavelength {}>{}; padding with zeros'.format( wave[0], wavemin)) @@ -377,7 +381,7 @@ def main(args=None): if sourcetype is not None and len(input_flux.shape)>1 : nspec=input_flux.shape[0] sourcetype=np.array([sourcetype for i in range(nspec)]) - + sim_spectra(input_wave, input_flux, args.program, obsconditions=obsconditions, spectra_filename=args.out_spectra,seed=args.seed,sourcetype=sourcetype, skyerr=args.skyerr,fullsim=args.fullsim) From 5b13edc99b22296fb60da5316eadbcf927217a87 Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Fri, 29 May 2020 15:46:38 -0700 Subject: [PATCH 11/12] Update changelog --- doc/changes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/changes.rst b/doc/changes.rst index e81d05831..fb97e7239 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -8,6 +8,7 @@ desisim change log * 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). +* Add the option to run quickquasars in eBOSS mode (`PR #481`_) .. _`PR #536`: https://github.com/desihub/desisim/pull/536 From 4dc05382fb257fa8e048b751f3def7d75f2c747d Mon Sep 17 00:00:00 2001 From: Bela Abolfathi Date: Fri, 29 May 2020 15:50:14 -0700 Subject: [PATCH 12/12] Missing hyperlink --- doc/changes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/changes.rst b/doc/changes.rst index fb97e7239..d27436d18 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -11,6 +11,7 @@ desisim change log * Add the option to run quickquasars in eBOSS mode (`PR #481`_) .. _`PR #536`: https://github.com/desihub/desisim/pull/536 +.. _`PR #481`: https://github.com/desihub/desisim/pull/481 0.35.1 (2020-04-15) -------------------