def test_quickgen_moonzenith_simspec(self): night = self.night camera = 'r0' expid0 = 100 expid1 = 101 # generate exposures obs.new_exposure('bgs', night=night, expid=expid0, nspec=1, seed=1) simspec0 = io.findfile('simspec', night, expid0) fibermap0 = lvmspec.io.findfile('fibermap', night, expid0) obs.new_exposure('bgs', night=night, expid=expid1, nspec=1, seed=1) simspec1 = io.findfile('simspec', night, expid1) fibermap1 = lvmspec.io.findfile('fibermap', night, expid1) # generate quickgen output for each moon phase cmd = "quickgen --simspec {} --fibermap {} --moon-zenith 0".format( simspec0, fibermap0) quickgen.main(quickgen.parse(cmd.split()[1:])) cmd = "quickgen --simspec {} --fibermap {} --moon-zenith 90".format( simspec1, fibermap1) quickgen.main(quickgen.parse(cmd.split()[1:])) cframe0 = lvmspec.io.findfile("cframe", night, expid0, camera) cframe1 = lvmspec.io.findfile("cframe", night, expid1, camera) cf0 = lvmspec.io.read_frame(cframe0) cf1 = lvmspec.io.read_frame(cframe1) self.assertLess(np.median(cf0.ivar), np.median(cf1.ivar))
def test_main_defaults(self): night = self.night expid = self.expid camera = 'r0' nspec = 3 ncpu = 3 obs.new_exposure('arc', night=night, expid=expid, nspec=nspec) #- run pixsim opts = ['--night', night, '--expid', expid] if ncpu is not None: opts.extend( ['--ncpu', ncpu] ) log.debug('testing pixsim.main({})'.format(opts)) pixsimargs = lvmsim.scripts.pixsim.parse(opts) lvmsim.scripts.pixsim.main(pixsimargs) #- verify outputs simpixfile = io.findfile('simpix', night, expid) self.assertTrue(os.path.exists(simpixfile)) rawfile = lvmspec.io.findfile('raw', night, expid) self.assertTrue(os.path.exists(rawfile)) fx = fits.open(rawfile) self.assertTrue('B0' in fx) self.assertTrue('R0' in fx) self.assertTrue('Z0' in fx) fx.close() #- cleanup as we go os.remove(simpixfile) os.remove(rawfile)
def test_pixsim_cosmics(self): night = self.night expid = self.expid camera = 'r0' obs.new_exposure('arc', night=night, expid=expid, nspec=3) pixsim.simulate_frame(night, expid, camera, nspec=3, cosmics=self.cosmics, ccdshape=self.ccdshape) self.assertTrue(os.path.exists(io.findfile('simspec', night, expid))) simspec = io.read_simspec(io.findfile('simspec', night, expid)) self.assertTrue(os.path.exists(io.findfile('simpix', night, expid, camera))) self.assertTrue(os.path.exists(io.findfile('pix', night, expid, camera)))
def test_expand_args(self): night = self.night expid = self.expid obs.new_exposure('arc', night=night, expid=expid, nspec=4) simspec = io.findfile('simspec', self.night, self.expid) fibermap = lvmspec.io.findfile('fibermap', self.night, self.expid) opts = ['--simspec', simspec, '--fibermap', fibermap] args = quickgen.parse(opts) self.assertEqual(args.simspec, simspec) self.assertEqual(args.fibermap, fibermap)
def test_parse(self): night = self.night expid = self.expid obs.new_exposure('dark', night=night, expid=expid, nspec=4) simspec = io.findfile('simspec', self.night, self.expid) fibermap = lvmspec.io.findfile('fibermap', self.night, self.expid) opts = ['--simspec', simspec, '--fibermap', fibermap] opts += ['--spectrograph', '3', '--config', 'desi'] args = quickgen.parse(opts) self.assertEqual(args.simspec, simspec) self.assertEqual(args.fibermap, fibermap) self.assertEqual(args.spectrograph, 3) self.assertEqual(args.config, 'desi') with self.assertRaises(SystemExit): quickgen.parse([])
def test_simulate(self): import lvmspec.image night = self.night expid = self.expid camera = 'r0' nspec = 3 obs.new_exposure('arc', night=night, expid=expid, nspec=nspec) simspec = io.read_simspec(io.findfile('simspec', night, expid)) psf = lvmmodel.io.load_psf(camera[0]) psf.npix_y, psf.npix_x = self.ccdshape image, rawpix, truepix = pixsim.simulate(camera, simspec, psf, nspec=nspec) self.assertTrue(isinstance(image, lvmspec.image.Image)) self.assertTrue(isinstance(rawpix, np.ndarray)) self.assertTrue(isinstance(truepix, np.ndarray)) self.assertEqual(image.pix.shape, truepix.shape) self.assertEqual(image.pix.shape[0], rawpix.shape[0]) self.assertLess(image.pix.shape[1], rawpix.shape[1]) #- raw has overscan
def test_main_override(self): night = self.night expid = self.expid camera = 'r0' nspec = 3 ncpu = 3 obs.new_exposure('arc', night=night, expid=expid, nspec=nspec) #- derive night from simspec input while overriding expid simspecfile = io.findfile('simspec', night, expid) altrawfile = lvmspec.io.findfile('raw', night, expid) + '.blat' opts = [ '--simspec', simspecfile, '--expid', expid+1, '--rawfile', altrawfile, '--cameras', 'b0,r0', '--preproc', '--wavemin', 5000, '--wavemax', 7000.0, '--ccd_npix_x', 2000, ] if ncpu is not None: opts.extend( ['--ncpu', ncpu] ) log.debug('testing pixsim.main({})'.format(opts)) pixsimargs = lvmsim.scripts.pixsim.parse(opts) lvmsim.scripts.pixsim.main(pixsimargs) simpixfile = io.findfile('simpix', night, expid+1) self.assertTrue(os.path.exists(simpixfile)) self.assertTrue(os.path.exists(altrawfile)) fx = fits.open(altrawfile) self.assertTrue('B0' in fx) self.assertTrue('R0' in fx) self.assertTrue('Z0' not in fx) fx.close() #- cleanup as we go os.remove(simpixfile) os.remove(altrawfile)
def test_quickgen_airmass_simspec(self): night = self.night camera = 'r0' expid0 = 100 expid1 = 101 # generate exposures of varying airmass obscond = simexp.reference_conditions['DARK'] obscond['AIRMASS'] = 1.5 obs.new_exposure('dark', night=night, expid=expid0, nspec=1, seed=1, obsconditions=obscond) simspec0 = io.findfile('simspec', night, expid0) fibermap0 = lvmspec.io.findfile('fibermap', night, expid0) obscond['AIRMASS'] = 1.0 obs.new_exposure('dark', night=night, expid=expid1, nspec=1, seed=1, obsconditions=obscond) simspec1 = io.findfile('simspec', night, expid1) fibermap1 = lvmspec.io.findfile('fibermap', night, expid1) # generate quickgen output for each airmass cmd = "quickgen --simspec {} --fibermap {}".format(simspec0, fibermap0) quickgen.main(quickgen.parse(cmd.split()[1:])) cmd = "quickgen --simspec {} --fibermap {}".format(simspec1, fibermap1) quickgen.main(quickgen.parse(cmd.split()[1:])) cframe0 = lvmspec.io.findfile("cframe", night, expid0, camera) cframe1 = lvmspec.io.findfile("cframe", night, expid1, camera) cf0 = lvmspec.io.read_frame(cframe0) cf1 = lvmspec.io.read_frame(cframe1) self.assertLess(np.median(cf0.ivar), np.median(cf1.ivar))
def test_quickgen_seed_simspec(self): night = self.night camera = 'r0' expid0 = 100 expid1 = 101 expid2 = 102 # generate exposures seed 1 & 2 obs.new_exposure('dark', night=night, expid=expid0, nspec=1, seed=1) simspec0 = io.findfile('simspec', night, expid0) fibermap0 = lvmspec.io.findfile('fibermap', night, expid0) obs.new_exposure('dark', night=night, expid=expid1, nspec=1, seed=1) simspec1 = io.findfile('simspec', night, expid1) fibermap1 = lvmspec.io.findfile('fibermap', night, expid1) obs.new_exposure('dark', night=night, expid=expid2, nspec=1, seed=2) simspec2 = io.findfile('simspec', night, expid2) fibermap2 = lvmspec.io.findfile('fibermap', night, expid2) # generate quickgen output for each exposure cmd = "quickgen --simspec {} --fibermap {} --seed 1".format( simspec0, fibermap0) quickgen.main(quickgen.parse(cmd.split()[1:])) cmd = "quickgen --simspec {} --fibermap {} --seed 1".format( simspec1, fibermap1) quickgen.main(quickgen.parse(cmd.split()[1:])) cmd = "quickgen --simspec {} --fibermap {} --seed 2".format( simspec2, fibermap2) quickgen.main(quickgen.parse(cmd.split()[1:])) cframe0 = lvmspec.io.findfile("cframe", night, expid0, camera) cframe1 = lvmspec.io.findfile("cframe", night, expid1, camera) cframe2 = lvmspec.io.findfile("cframe", night, expid2, camera) cf0 = lvmspec.io.read_frame(cframe0) cf1 = lvmspec.io.read_frame(cframe1) cf2 = lvmspec.io.read_frame(cframe2) self.assertTrue(np.all(cf0.flux == cf1.flux)) #- same seed self.assertTrue(np.all(cf0.ivar == cf1.ivar)) self.assertTrue(np.any(cf0.flux != cf2.flux)) #- different seed s0 = fits.open(simspec0) s1 = fits.open(simspec1) s2 = fits.open(simspec2) self.assertEqual(s0['TRUTH'].data['OBJTYPE'][0], s1['TRUTH'].data['OBJTYPE'][0]) self.assertEqual(s0['TRUTH'].data['REDSHIFT'][0], s1['TRUTH'].data['REDSHIFT'][0]) self.assertNotEqual(s0['TRUTH'].data['REDSHIFT'][0], s2['TRUTH'].data['REDSHIFT'][0])
def test_quickgen_simspec(self): night = self.night expid = self.expid camera = 'r0' # flavors = ['flat','dark','gray','bright','bgs','mws','elg','lrg','qso','arc'] flavors = ['arc', 'flat', 'dark', 'bright'] for i in range(len(flavors)): flavor = flavors[i] obs.new_exposure(flavor, night=night, expid=expid, nspec=2) #- output to same directory as input os.environ['LVM_SPECTRO_REDUX'] = os.path.join( os.getenv('LVM_SPECTRO_SIM'), os.getenv('PIXPROD')) #- run quickgen simspec = io.findfile('simspec', night, expid) fibermap = io.findfile('simfibermap', night, expid) self.assertTrue(os.path.exists(simspec)) self.assertTrue(os.path.exists(fibermap)) if flavor == 'flat': try: cmd = "quickgen --simspec {} --fibermap {}".format( simspec, fibermap) quickgen.main(quickgen.parse(cmd.split()[1:])) except SystemExit: pass #- verify flat outputs fiberflatfile = lvmspec.io.findfile('fiberflat', night, expid, camera) self.assertTrue(os.path.exists(fiberflatfile)) elif flavor == 'arc': try: cmd = "quickgen --simspec {} --fibermap {}".format( simspec, fibermap) quickgen.main(quickgen.parse(cmd.split()[1:])) except SystemExit: pass #- verify arc outputs framefile = lvmspec.io.findfile('frame', night, expid, camera) self.assertTrue(os.path.exists(framefile)) else: cmd = "quickgen --simspec {} --fibermap {}".format( simspec, fibermap) quickgen.main(quickgen.parse(cmd.split()[1:])) #- verify outputs framefile = lvmspec.io.findfile('frame', night, expid, camera) self.assertTrue(os.path.exists(framefile)) cframefile = lvmspec.io.findfile('cframe', night, expid, camera) self.assertTrue(os.path.exists(cframefile)) skyfile = lvmspec.io.findfile('sky', night, expid, camera) self.assertTrue(os.path.exists(skyfile)) fluxcalibfile = lvmspec.io.findfile('calib', night, expid, camera) self.assertTrue(os.path.exists(fluxcalibfile)) os.remove(simspec) os.remove(fibermap)