def compute_superflat(self, images_info, segmask=None, step=0, method=None, method_kwargs=None): self.logger.info("Step %d, SF: combining the frames without offsets", step) base_imgs = [img.resized_base for img in images_info] with nfcom.manage_fits(base_imgs) as imgs: data = [] masks = [] for img, img_info in zip(imgs, images_info): self.logger.debug('Step %d, opening resized frame %s', step, img_info.resized_base) data.append(img['primary'].data[img_info.valid_region]) scales = [numpy.median(d) for d in data] if segmask is not None: masks = [segmask[frame.valid_region] for frame in images_info] else: for frame in images_info: self.logger.debug('Step %d, opening resized mask %s', step, frame.resized_mask) hdulist = fits.open(frame.resized_mask, memmap=True, mode='readonly') # filelist.append(hdulist) masks.append(hdulist['primary'].data[frame.valid_region]) masks = None self.logger.debug("Step %d, combining %d frames using '%s'", step, len(data), method.__name__) sf_data, _sf_var, sf_num = method(data, masks, scales=scales, dtype='float32', **method_kwargs) # Normalize, flat has mean = 1 sf_data[sf_data == 0] = 1e-5 sf_data /= sf_data.mean() # sf_data[sf_data <= 0] = 1.0 # Auxiliary data sfhdu = fits.PrimaryHDU(sf_data) self.save_intermediate_img(sfhdu, name_skyflat('comb', step)) return sf_data
def compute_offset_xy_crosscor_regions(self, iinfo, regions, refine=False, tol=0.5): names = [frame.lastname for frame in iinfo] print(names) print(regions) with nfcom.manage_fits(names) as imgs: arrs = [img[0].data for img in imgs] offsets_xy = offsets_from_crosscor_regions( arrs, regions, refine=refine, order='xy', tol=tol ) self.logger.debug("offsets_xy cross-corr %s", offsets_xy) # Offsets in numpy order, swaping return offsets_xy
def compute_offset_xy_crosscor_regions(self, iinfo, regions, refine=False, tol=0.5): names = [frame.lastname for frame in iinfo] with nfcom.manage_fits(names) as imgs: arrs = [img[0].data for img in imgs] offsets_xy = offsets_from_crosscor_regions(arrs, regions, refine=refine, order='xy', tol=tol) self.logger.debug("offsets_xy cross-corr:\n%s", offsets_xy) return offsets_xy
def compute_superflat(self, images_info, segmask=None, step=0): self.logger.info("Step %d, SF: combining the frames without offsets", step) base_imgs = [img.resized_base for img in images_info] with nfcom.manage_fits(base_imgs) as imgs: data = [] masks = [] for img, img_info in zip(imgs, images_info): self.logger.debug('Step %d, opening resized frame %s', step, img_info.resized_base) data.append(img['primary'].data[img_info.valid_region]) scales = [numpy.median(d) for d in data] if segmask is not None: masks = [segmask[frame.valid_region] for frame in images_info] else: for frame in images_info: self.logger.debug('Step %d, opening resized mask %s', step, frame.resized_mask) hdulist = fits.open( frame.resized_mask, memmap=True, mode='readonly') #filelist.append(hdulist) masks.append(hdulist['primary'].data[frame.valid_region]) masks = None self.logger.debug('Step %d, combining %d frames', step, len(data)) sf_data, _sf_var, sf_num = nacom.median(data, masks, scales=scales, dtype='float32', #blank=1.0 / scales[0] ) # Normalize, flat has mean = 1 sf_data[sf_data == 0] = 1e-5 sf_data /= sf_data.mean() #sf_data[sf_data <= 0] = 1.0 # Auxiliary data sfhdu = fits.PrimaryHDU(sf_data) self.save_intermediate_img(sfhdu, name_skyflat('comb', step)) return sf_data
def compute_size(self, images_info, baseshape, user_offsets=None): # Reference pixel in the center of the frame refpix = numpy.array([[baseshape[0] / 2.0, baseshape[1] / 2.0]]) target_info = [iinfo for iinfo in images_info if iinfo.valid_target] if user_offsets is not None: self.logger.info('Using offsets from parameters') base_ref = numpy.asarray(user_offsets) list_of_offsets = -(base_ref - base_ref[0]) else: self.logger.info('Computing offsets from WCS information') with nfcom.manage_fits(img.origin for img in target_info) as images: list_of_offsets = offsets_from_wcs_imgs(images, refpix) # FIXME: I am using offsets in row/columns # the values are provided in XY so flip-lr list_of_offsets = numpy.fliplr(list_of_offsets) # Insert pixel offsets between frames for iinfo, off in zip(target_info, list_of_offsets): # Insert pixel offsets between frames iinfo.pix_offset = off self.logger.debug('Frame %s, offset=%s', iinfo.label, off) self.logger.info('Computing relative offsets') offsets = [iinfo.pix_offset for iinfo in target_info] offsets = numpy.round(offsets).astype('int') finalshape, offsetsp = narray.combine_shape(baseshape, offsets) self.logger.debug("Relative offsetsp:\n%s", offsetsp) self.logger.info('Shape of resized array is (NAXIS2, NAXIS1) = %s', finalshape) return finalshape, offsetsp, refpix, list_of_offsets
def compute_size(self, images_info, baseshape, user_offsets=None): # Reference pixel in the center of the frame refpix = numpy.array([[baseshape[0] / 2.0, baseshape[1] / 2.0]]) target_info = [iinfo for iinfo in images_info if iinfo.valid_target] if user_offsets is not None: self.logger.info('Using offsets from parameters') base_ref = numpy.asarray(user_offsets) list_of_offsets = -(base_ref - base_ref[0]) else: self.logger.debug('Computing offsets from WCS information') with nfcom.manage_fits(img.origin for img in target_info) as images: list_of_offsets = offsets_from_wcs_imgs(images, refpix) # FIXME: I am using offsets in row/columns # the values are provided in XY so flip-lr list_of_offsets = numpy.fliplr(list_of_offsets) # Insert pixel offsets between frames for iinfo, off in zip(target_info, list_of_offsets): # Insert pixel offsets between frames iinfo.pix_offset = off self.logger.debug('Frame %s, offset=%s', iinfo.label, off) self.logger.info('Computing relative offsets') offsets = [iinfo.pix_offset for iinfo in target_info] offsets = numpy.round(offsets).astype('int') finalshape, offsetsp = narray.combine_shape(baseshape, offsets) self.logger.debug("Relative offsetsp %s", offsetsp) self.logger.info('Shape of resized array is %s', finalshape) return finalshape, offsetsp, refpix, list_of_offsets