def test_proc_diff(nires_sci_files, nires_bg_files): """ Run on near-IR frames """ # Setup det = 1 bpm = np.zeros((2048,1024)) pixelflat = np.ones_like(bpm) # Sci image sciImg = scienceimage.build_from_file_list(keck_nires, det, nires_par['scienceframe']['process'], bpm, nires_sci_files, None, pixelflat) # Bg image bgImg = scienceimage.build_from_file_list(keck_nires, det, nires_par['scienceframe']['process'], bpm, nires_bg_files, None, pixelflat) # Difference sciImg = sciImg - bgImg # Test assert isinstance(sciImg, scienceimage.ScienceImage)
def test_from_list(shane_kast_blue_sci_files): """ Run on two frames """ det = 1 # Load calibrations pixelflat = load_kast_blue_masters(pixflat=True)[0] bpm = kast_blue.empty_bpm(shane_kast_blue_sci_files[0], det) # Do it sciImg = scienceimage.build_from_file_list( kast_blue, det, kast_par['scienceframe']['process'], bpm, shane_kast_blue_sci_files, None, pixelflat) # Test assert isinstance(sciImg, scienceimage.ScienceImage)
def extract_one(self, frames, det, bg_frames, std_outfile=None): """ Extract a single exposure/detector pair sci_ID and det need to have been set internally prior to calling this method Args: frames (list): List of frames to extract; stacked if more than one is provided det (int): bg_frames (list): List of frames to use as the background Can be empty std_outfile (str, optional): Returns: seven objects are returned:: - ndarray: Science image - ndarray: Science inverse variance image - ndarray: Model of the sky - ndarray: Model of the object - ndarray: Model of inverse variance - ndarray: Mask - :obj:`pypeit.specobjs.SpecObjs`: spectra """ # Grab some meta-data needed for the reduction from the fitstbl self.objtype, self.setup, self.obstime, self.basename, self.binning = self.get_sci_metadata( frames[0], det) # Is this a standard star? self.std_redux = 'standard' in self.objtype # Get the standard trace if need be std_trace = self.get_std_trace(self.std_redux, det, std_outfile) # Build Science image sci_files = self.fitstbl.frame_paths(frames) self.sciImg = scienceimage.build_from_file_list( self.spectrograph, det, self.par['scienceframe']['process'], self.caliBrate.msbpm, sci_files, self.caliBrate.msbias, self.caliBrate.mspixelflat, illum_flat=self.caliBrate.msillumflat) # Background Image? if len(bg_frames) > 0: bg_file_list = self.fitstbl.frame_paths(bg_frames) self.sciImg = self.sciImg - scienceimage.build_from_file_list( self.spectrograph, det, self.par['scienceframe']['process'], self.caliBrate.msbpm, bg_file_list, self.caliBrate.msbias, self.caliBrate.mspixelflat, illum_flat=self.caliBrate.msillumflat) # Update mask for slitmask slitmask = pixels.tslits2mask(self.caliBrate.tslits_dict) self.sciImg.update_mask_slitmask(slitmask) # For QA on crash msgs.sciexp = self.sciImg # Instantiate Reduce object self.maskslits = self.caliBrate.tslits_dict['maskslits'].copy() # Required for pypeline specific object # TODO -- caliBrate should be replaced by the ~3 primary Objects needed # once we have the data models in place. self.redux = reduce.instantiate_me(self.sciImg, self.spectrograph, self.par, self.caliBrate, maskslits=self.maskslits, ir_redux=self.ir_redux, std_redux=self.std_redux, objtype=self.objtype, setup=self.setup, show=self.show, det=det, binning=self.binning) # Show? if self.show: self.redux.show('image', image=self.sciImg.image, chname='processed', slits=True, clear=True) # Prep for manual extraction (if requested) manual_extract_dict = self.fitstbl.get_manual_extract(frames, det) self.skymodel, self.objmodel, self.ivarmodel, self.outmask, self.sobjs = self.redux.run( std_trace=std_trace, manual_extract_dict=manual_extract_dict, show_peaks=self.show, basename=self.basename, ra=self.fitstbl["ra"][frames[0]], dec=self.fitstbl["dec"][frames[0]], obstime=self.obstime) # Return return self.sciImg.image, self.sciImg.ivar, self.skymodel, self.objmodel, self.ivarmodel, self.outmask, self.sobjs