-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cb44567
commit 670686a
Showing
6 changed files
with
140 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
# | ||
# Copyright 2019-2020 Universidad Complutense de Madrid | ||
# | ||
# This file is part of Megara DRP | ||
# | ||
# SPDX-License-Identifier: GPL-3.0+ | ||
# License-Filename: LICENSE.txt | ||
# | ||
|
||
import logging | ||
|
||
import numpy | ||
|
||
import megaradrp.datamodel as dm | ||
from numina.frame.utils import copy_img | ||
|
||
|
||
def subtract_sky(img, ignored_sky_bundles=None, logger=None): | ||
# Sky subtraction | ||
|
||
if logger is None: | ||
logger = logging.getLogger(__name__) | ||
|
||
logger.info('obtain fiber information') | ||
sky_img = copy_img(img) | ||
final_img = copy_img(img) | ||
fiberconf = dm.get_fiberconf(sky_img) | ||
# Sky fibers | ||
skyfibs = fiberconf.sky_fibers(valid_only=True, | ||
ignored_bundles=ignored_sky_bundles) | ||
logger.debug('sky fibers are: %s', skyfibs) | ||
# Create empty sky_data | ||
target_data = img[0].data | ||
|
||
target_map = img['WLMAP'].data | ||
sky_data = numpy.zeros_like(img[0].data) | ||
sky_map = numpy.zeros_like(img['WLMAP'].data) | ||
sky_img[0].data = sky_data | ||
|
||
for fibid in skyfibs: | ||
rowid = fibid - 1 | ||
sky_data[rowid] = target_data[rowid] | ||
sky_map[rowid] = target_map[rowid] | ||
# Sum | ||
coldata = sky_data.sum(axis=0) | ||
colsum = sky_map.sum(axis=0) | ||
|
||
# Divide only where map is > 0 | ||
mask = colsum > 0 | ||
avg_sky = numpy.zeros_like(coldata) | ||
avg_sky[mask] = coldata[mask] / colsum[mask] | ||
|
||
# This should be done only on valid fibers | ||
logger.info('ignoring invalid fibers: %s', fiberconf.invalid_fibers()) | ||
for fibid in fiberconf.valid_fibers(): | ||
rowid = fibid - 1 | ||
final_img[0].data[rowid, mask] = img[0].data[rowid, mask] - avg_sky[mask] | ||
# Update headers | ||
# | ||
return final_img, img, sky_img | ||
|
||
|
||
def subtract_sky_rss(img, sky_img, ignored_sky_bundles=None, logger=None): | ||
"""Subtract a sky image from an image""" | ||
# Sky subtraction | ||
|
||
if logger is None: | ||
logger = logging.getLogger(__name__) | ||
|
||
#logger.info('obtain fiber information') | ||
final_img = copy_img(img) | ||
# fiberconf_sky = dm.get_fiberconf(sky_img) | ||
# fiberconf_target = dm.get_fiberconf(img) | ||
|
||
logger.debug('using WLMAP extension to compute valid regions') | ||
|
||
v_map = img['WLMAP'].data > 0 | ||
sky_map = numpy.zeros_like(img['WLMAP'].data) | ||
sky_data = sky_img[0].data | ||
sky_map[:] = v_map[:] | ||
|
||
# This should be done only on valid fibers | ||
#logger.info('ignoring invalid fibers: %s', fiberconf_target.invalid_fibers()) | ||
final_img[0].data[v_map] = img[0].data[v_map] - sky_data[v_map] | ||
final_img[0].data[~v_map] = 0.0 | ||
# Update headers | ||
# | ||
return final_img, img, sky_img |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import numpy | ||
|
||
from megaradrp.datamodel import create_default_fiber_header | ||
from ..sky import subtract_sky_rss | ||
|
||
|
||
def create_rss(value, wlmap): | ||
import astropy.io.fits as fits | ||
data1 = value + numpy.zeros((623, 4300), dtype='float32') | ||
hdu = fits.PrimaryHDU(data1) | ||
hdrf = create_default_fiber_header('LCB') | ||
fibers = fits.ImageHDU(header=hdrf, name='FIBERS') | ||
rss_map = fits.ImageHDU(wlmap, name='WLMAP') | ||
return fits.HDUList([hdu, fibers, rss_map]) | ||
|
||
|
||
def test_subtract_sky_rss(): | ||
|
||
wlmap = numpy.zeros((623, 4300), dtype='float32') | ||
wlmap[:,350:4105] = 1.0 | ||
wlmap[622,:] = 0 | ||
img1 = create_rss(1000, wlmap) | ||
img2 = create_rss(400, wlmap) | ||
|
||
final_img, img, sky_img = subtract_sky_rss(img1, img2) | ||
assert img is img1 | ||
# In final image, regions outside WLMAP must be at zero | ||
assert final_img[0].data[:, 100:200].min() == 0 | ||
assert final_img[0].data[:, 100:200].max() == 0 | ||
|
||
assert final_img[0].data[622, :].max() == 0 | ||
assert final_img[0].data[622, :].min() == 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
|
||
from numina.core import Requirement | ||
from ..requirements import DiffuseLightRequirement | ||
|
||
|
||
def test_requires_df_l(): | ||
req = DiffuseLightRequirement() | ||
assert isinstance(req, Requirement) |