Note

This page is generated from a Jupyter notebook. Download the .ipynb from the sources, or open the paired jupytext .py under docs/tutorials/.

NGC 602 — same pixel grid#

Download IR / R / B OpenFITS products from Chandra OpenFITS. The frames already share a grid. Full narrative: examples/ngc602.

[ ]:
import multicolorfits as mcf
from multicolorfits.figures import make_combined_figure

FILES = [
    './ngc602_ir.fits',
    './ngc602_optical_R.fits',
    './ngc602_optical_B.fits',
]
COLORS = ['#BE599E', '#DEA215', '#77C0F9']  # purple / orange / blue
LABELS = ['IR', 'R', 'B']

Session + Lab compositing#

[ ]:
# s = mcf.McfSession(n_panels=3)
# s.load_files(FILES, colors=COLORS, labels=LABELS)
# s.compose.combine_mode = 'lab'
# s.compose.combine_blend = 'screen'
# s.compose.gamma = 2.2
# s.compose.title = 'NGC 602'
# s.compose.show_legend = True
# s.compose.show_combo_swatch = True
#
# rgb = s.render_combined()
# fig, ax = make_combined_figure(s, combined=rgb)
# fig.savefig('n602_POB_lab.png', dpi=150, bbox_inches='tight')

White canvas without the legacy hex-invert + inverse=True path:

s.compose.combine_background = 'white'  # or 'transparent'

Interactive finishing:

mcf.gui(session=s)
print(s.export_script())

Classic low-level pipeline#

Still fully supported for v2-compatible scripts.

[ ]:
# import astropy.io.fits as pyfits
#
# ir, irhdr = pyfits.getdata(FILES[0], header=True)
# R, Rhdr = pyfits.getdata(FILES[1], header=True)
# B, Bhdr = pyfits.getdata(FILES[2], header=True)
#
# layers = []
# for data, color in zip([ir, R, B], COLORS):
#     grey = mcf.to_grey_rgb(data, rescalefn='linear')
#     layers.append(mcf.colorize_image(grey, color, colorintype='hex'))
#
# pob_rgb = mcf.combine_multicolor(layers, gamma=2.2)
# pob_lab = mcf.combine_multicolor_colorspace(
#     layers, colorspace='lab', blend='screen', gamma=2.2)
#
# mcf.plot_combined_rgb(
#     pob_lab, irhdr, 'NGC 602', 'n602_POB.jpg',
#     tickcolor='#D9D5C5', labelcolor='k', facecolor='w', minorticks=True)

North-up WCS#

OpenFITS NGC 602 is rotated ~90° from north. Either edit a dummy header and reproject_image, or (with [reproject]) align to ICRS from the session / GUI:

s.align_panels(target='icrs')   # or GUI: Align layers… → ICRS

Side-by-side Lab / RGB / HSV grids: `examples/colorspace_comparison.md <../../examples/colorspace_comparison.md>`__.

[ ]:
print('Uncomment the cells above after downloading the OpenFITS products.')