def test_subtract_sky_with_gradient_using_compute_polynomial_times_sky(self): spectra = self._get_spectra(with_gradient=True) sky = compute_sky(spectra,angular_variation_deg=1,chromatic_variation_deg=1,add_variance=self.add_variance) subtract_sky(spectra, sky) #- allow some slop in the sky subtraction self.assertTrue(np.allclose(spectra.flux, 0, rtol=1e-3, atol=1.)) # this is not exact, it's an iterative fit
def test_subtract_sky_with_gradient_using_compute_non_uniform_sky(self): spectra = self._get_spectra(with_gradient=True) sky = compute_sky(spectra,angular_variation_deg=1,chromatic_variation_deg=-1,add_variance=self.add_variance) subtract_sky(spectra, sky) #- allow some slop in the sky subtraction self.assertTrue(np.allclose(spectra.flux, 0, rtol=1e-3, atol=1e-3))
def run(self,*args,**kwargs): if len(args) == 0 : raise qlexceptions.ParameterException("Missing input parameter") if not self.is_compatible(type(args[0])): raise qlexceptions.ParameterException("Incompatible input. Was expecting %s got %s"%(type(self.__inpType__),type(args[0]))) input_frame=args[0] #- this must be flat field applied before sky subtraction in the pipeline if "SkyFile" in kwargs: from desispec.io.sky import read_sky skyfile=kwargs["SkyFile"] #- Read sky model file itself from an argument log.info("Using given sky file %s for subtraction"%skyfile) skymodel=read_sky(skyfile) else: if "Outskyfile" in kwargs: outskyfile=kwargs["Outskyfile"] else: outskyfile=None log.info("No sky file given. Computing sky first") from desispec.quicklook.quicksky import compute_sky fibermap=input_frame.fibermap skymodel=compute_sky(input_frame,fibermap) if outskyfile is not None: from desispec.io.sky import write_sky log.info("writing an output sky model file %s "%outskyfile) write_sky(outputfile,skymodel,input_frame.meta) #- now do the subtraction return self.run_pa(input_frame,skymodel)
def test_subtract_sky_with_gradient_using_compute_polynomial_times_sky(self): spectra = self._get_spectra(with_gradient=True) sky = compute_sky(spectra,angular_variation_deg=1,chromatic_variation_deg=1,add_variance=self.add_variance) subtract_sky(spectra, sky) #- allow some slop in the sky subtraction self.assertTrue(np.allclose(spectra.flux, 0, rtol=1e-3, atol=1e-3)) # this is not exact, it's an iterative fit
def main(): parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--infile', type=str, default=None, required=True, help='path of DESI exposure frame fits file') parser.add_argument('--fibermap', type=str, default=None, required=True, help='path of DESI exposure frame fits file') parser.add_argument('--fiberflat', type=str, default=None, required=True, help='path of DESI fiberflat fits file') parser.add_argument('--outfile', type=str, default=None, required=True, help='path of DESI sky fits file') args = parser.parse_args() log = get_logger() log.info("starting") # read exposure to load data and get range of spectra frame = read_frame(args.infile) specmin = frame.header["SPECMIN"] specmax = frame.header["SPECMAX"] # read fibermap to locate sky fibers fibermap = read_fibermap(args.fibermap) selection = np.where((fibermap["OBJTYPE"] == "SKY") & (fibermap["FIBER"] >= specmin) & (fibermap["FIBER"] <= specmax))[0] if selection.size == 0: log.error("no sky fiber in fibermap %s" % args.fibermap) sys.exit(12) # read fiberflat fiberflat = read_fiberflat(args.fiberflat) # apply fiberflat to sky fibers apply_fiberflat(frame, fiberflat) # compute sky model skymodel = compute_sky(frame, fibermap) # write result write_sky(args.outfile, skymodel, frame.header) log.info("successfully wrote %s" % args.outfile)
def run_pa(self,input_frame,outputfile,fibermap=None): #- input frame should be already fiberflat fielded from desispec.io.sky import write_sky from desispec.quicklook.quicksky import compute_sky skymodel=compute_sky(input_frame,fibermap) write_sky(outputfile,skymodel,input_frame.meta) log.info("Sky Model file wrtten. Exiting the pipeline for this configuration") sys.exit(0)
def run_pa(self,input_frame,fiberflat,outputfile): from desispec.fiberflat import apply_fiberflat from desispec.sky import compute_sky from desispec.io.sky import write_sky #- First apply fiberflat to sky fibers apply_fiberflat(input_frame,fiberflat) #- calculate the model skymodel=compute_sky(input_frame) write_sky(outputfile,skymodel,input_frame.meta) log.info("Sky Model file wrtten. Exiting pipeline for this configuration") sys.exit(0)
def main(args) : log=get_logger() log.info("starting") # read exposure to load data and get range of spectra frame = read_frame(args.infile) specmin, specmax = np.min(frame.fibers), np.max(frame.fibers) if args.cosmics_nsig>0 : # Reject cosmics reject_cosmic_rays_1d(frame,args.cosmics_nsig) # read fiberflat fiberflat = read_fiberflat(args.fiberflat) # apply fiberflat to sky fibers apply_fiberflat(frame, fiberflat) # compute sky model skymodel = compute_sky(frame,add_variance=(not args.no_extra_variance),\ angular_variation_deg=args.angular_variation_deg,\ chromatic_variation_deg=args.chromatic_variation_deg,\ adjust_wavelength=args.adjust_wavelength,\ adjust_lsf=args.adjust_lsf) # QA if (args.qafile is not None) or (args.qafig is not None): log.info("performing skysub QA") # Load qaframe = load_qa_frame(args.qafile, frame_meta=frame.meta, flavor=frame.meta['FLAVOR']) # Run qaframe.run_qa('SKYSUB', (frame, skymodel)) # Write if args.qafile is not None: write_qa_frame(args.qafile, qaframe) log.info("successfully wrote {:s}".format(args.qafile)) # Figure(s) if args.qafig is not None: qa_plots.frame_skyres(args.qafig, frame, skymodel, qaframe) # record inputs frame.meta['IN_FRAME'] = shorten_filename(args.infile) frame.meta['FIBERFLT'] = shorten_filename(args.fiberflat) # write result write_sky(args.outfile, skymodel, frame.meta) log.info("successfully wrote %s"%args.outfile)
def test_uniform_resolution(self): #- Setup data for a Resolution matrix spectra = self._get_spectra() sky = compute_sky(spectra,add_variance=self.add_variance) self.assertEqual(sky.flux.shape, spectra.flux.shape) self.assertEqual(sky.ivar.shape, spectra.ivar.shape) self.assertEqual(sky.mask.shape, spectra.mask.shape) delta=spectra.flux[0]-sky.flux[0] d=np.inner(delta,delta) self.assertAlmostEqual(d,0.) delta=spectra.flux[-1]-sky.flux[-1] d=np.inner(delta,delta) self.assertAlmostEqual(d,0.)
def main() : parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--infile', type = str, default = None, required=True, help = 'path of DESI exposure frame fits file') parser.add_argument('--fibermap', type = str, default = None, required=True, help = 'path of DESI exposure frame fits file') parser.add_argument('--fiberflat', type = str, default = None, required=True, help = 'path of DESI fiberflat fits file') parser.add_argument('--outfile', type = str, default = None, required=True, help = 'path of DESI sky fits file') args = parser.parse_args() log=get_logger() log.info("starting") # read exposure to load data and get range of spectra frame = read_frame(args.infile) specmin=frame.header["SPECMIN"] specmax=frame.header["SPECMAX"] # read fibermap to locate sky fibers fibermap = read_fibermap(args.fibermap) selection=np.where((fibermap["OBJTYPE"]=="SKY")&(fibermap["FIBER"]>=specmin)&(fibermap["FIBER"]<=specmax))[0] if selection.size == 0 : log.error("no sky fiber in fibermap %s"%args.fibermap) sys.exit(12) # read fiberflat fiberflat = read_fiberflat(args.fiberflat) # apply fiberflat to sky fibers apply_fiberflat(frame, fiberflat) # compute sky model skymodel = compute_sky(frame, fibermap) # write result write_sky(args.outfile, skymodel, frame.header) log.info("successfully wrote %s"%args.outfile)
def run_pa(self, input_frame, outputfile, fibermap=None, apply_resolution=False ): #- input frame should be already fiberflat fielded from desispec.io.sky import write_sky from desispec.quicklook.quicksky import compute_sky skymodel = compute_sky(input_frame, fibermap, apply_resolution=apply_resolution) write_sky(outputfile, skymodel, input_frame.meta) # SEE ABOVE COMMENT!!!! log.debug( "Sky Model file wrtten. Exiting the pipeline for this configuration" ) sys.exit(0)
def main(args): log = get_logger() log.info("starting") # read exposure to load data and get range of spectra frame = read_frame(args.infile) specmin, specmax = np.min(frame.fibers), np.max(frame.fibers) # read fiberflat fiberflat = read_fiberflat(args.fiberflat) # apply fiberflat to sky fibers apply_fiberflat(frame, fiberflat) # compute sky model skymodel = compute_sky(frame) # QA if (args.qafile is not None) or (args.qafig is not None): log.info("performing skysub QA") # Load qaframe = load_qa_frame(args.qafile, frame, flavor=frame.meta['FLAVOR']) # Run qaframe.run_qa('SKYSUB', (frame, skymodel)) # Write if args.qafile is not None: write_qa_frame(args.qafile, qaframe) log.info("successfully wrote {:s}".format(args.qafile)) # Figure(s) if args.qafig is not None: qa_plots.frame_skyres(args.qafig, frame, skymodel, qaframe) # write result write_sky(args.outfile, skymodel, frame.meta) log.info("successfully wrote %s" % args.outfile)
def main(args) : log=get_logger() log.info("starting") # read exposure to load data and get range of spectra frame = read_frame(args.infile) specmin, specmax = np.min(frame.fibers), np.max(frame.fibers) # read fiberflat fiberflat = read_fiberflat(args.fiberflat) # apply fiberflat to sky fibers apply_fiberflat(frame, fiberflat) # compute sky model skymodel = compute_sky(frame) # QA if (args.qafile is not None) or (args.qafig is not None): log.info("performing skysub QA") # Load qaframe = load_qa_frame(args.qafile, frame, flavor=frame.meta['FLAVOR']) # Run qaframe.run_qa('SKYSUB', (frame, skymodel)) # Write if args.qafile is not None: write_qa_frame(args.qafile, qaframe) log.info("successfully wrote {:s}".format(args.qafile)) # Figure(s) if args.qafig is not None: qa_plots.frame_skyres(args.qafig, frame, skymodel, qaframe) # write result write_sky(args.outfile, skymodel, frame.meta) log.info("successfully wrote %s"%args.outfile)
def test_subtract_sky(self): spectra = self._get_spectra() sky = compute_sky(spectra,add_variance=self.add_variance) subtract_sky(spectra, sky) #- allow some slop in the sky subtraction self.assertTrue(np.allclose(spectra.flux, 0, rtol=1e-5, atol=1e-6))