Source code for galfitools.galout.showcube

#! /usr/bin/env python3

import matplotlib.pyplot as plt
import numpy as np
from astropy import units as U
from astropy.io import fits
from matplotlib import colors
from matplotlib.patches import Ellipse
import matplotlib.cm as cmx


[docs] def displayCube( cubeimage: str, namecube: str, dpival: int, brightness: float, contrast: float, cmap: str, scale: float, noplot: bool, ) -> None: """makes an image of the GALFIT cube image output Parameters ---------- cubeimage: str name of the GALFIT FITS cube image namecube: str name of the output png image dpival: int dots per inch value brightness: float brightness contrast: float contrast cmap: str name of the matplotlib color map scale: float plate scale of the image noplot: bool if True avoids plotting and write the output image Returns ------- None """ ###################### # shows the image cube# ###################### ell = [] ShowCube( cubeimage, namepng=namecube, dpival=dpival, bri=brightness, con=contrast, cmap=cmap, ellipse=ell, plate=scale, ) if noplot is False: # pragma: no cover plt.pause(1.5) plt.close()
# } #####################
[docs] def Comp2Ellip(galhead, galcomps, N, lw=1): """converts galfit component parameter into an Ellipse object""" ellipses = [] # color value values = range(N) jet = plt.get_cmap("jet") cNorm = colors.Normalize(vmin=0, vmax=values[-1]) scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet) for idx, item in enumerate(galcomps.N): if galcomps.Active[idx] is True: # correcting coordinates xc = galcomps.PosX[idx] - galhead.xmin + 1 yc = galcomps.PosY[idx] - galhead.ymin + 1 pa = galcomps.PosAng[idx] + 90 w = galcomps.Rad[idx] h = galcomps.Rad[idx] * galcomps.AxRat[idx] colorVal = scalarMap.to_rgba(values[idx]) ell = Ellipse( (xc, yc), width=w, height=h, angle=pa, edgecolor=colorVal, facecolor="none", linewidth=lw, ) ellipses.append(ell) return ellipses
[docs] class ShowCube: def __init__( self, cubeimg: str, namepng="cubeout.png", dpival=100, bri=0, con=1, cmap="viridis", ellipse=[], plate=1, ): """ makes an image of the GALFIT output cube image: galaxy, model and residual """ hdu = fits.open(cubeimg) data = (hdu[1].data.copy()).astype(float) model = (hdu[2].data.copy()).astype(float) residual = (hdu[3].data.copy()).astype(float) hdu.close() flatmodimg = model.flatten() flatresimg = residual.flatten() flatmodimg.sort() flatresimg.sort() restot = len(flatresimg) restop = round(0.9 * restot) resbot = round(0.1 * restot) # modtot = len(flatmodimg) # modtop = round(0.9 * modtot) # modbot = round(0.1 * modtot) modimgpatch = flatmodimg # [modbot:modtop] resimgpatch = flatresimg[resbot:restop] resmin = np.min(resimgpatch) resmax = np.max(resimgpatch) modmin = np.min(modimgpatch) modmax = np.max(modimgpatch) data = data.clip(modmax / 1e4, modmax) model = model.clip(modmax / 1e4) modmin = modmax / 1e4 middle = (modmax - modmin) / 2 # brightness auto-adjust according to the contrast value Autobri = middle * (con - 1) + modmin * (1 - con) # user can re-adjust brightness in addition to Autobri newdata = con * (data - middle) + middle + Autobri + bri * (modmax - middle) newmodel = con * (model - middle) + middle + Autobri + bri * (modmax - middle) mask = data < 0 data[mask] = 1 # avoids problems in log fig, (ax1, ax2, ax3) = plt.subplots(figsize=(14, 5), nrows=1, ncols=3) ax1.imshow( newdata, origin="lower", interpolation="nearest", norm=colors.LogNorm(vmin=modmin, vmax=modmax), cmap=cmap, ) ax1.set_title("Data") y, x = data.shape xt = 0.02 * x yt = 0.02 * y lxline = round(0.1 * x) lyline = round(0.1 * y) x1 = [xt, xt + lxline] y1 = [lyline, lyline] arcsec = lxline * plate * U.arcsec if arcsec.value >= 60: lxlinearc = arcsec.to("arcmin").value s = "{}'".format(round(lxlinearc)) else: # pragma: no cover lxlinearc = arcsec.value s = "{}''".format(round(lxlinearc)) ax1.plot(x1, y1, color="white", linewidth=3) ax1.text(xt + round(lxline / 5), lyline + yt, s, color="white", fontsize=14) # ax1.set_xlabel(r'$\circ$') # ax2.set_ylabel('23\"') for ell in ellipse: # pragma: no cover ax1.add_patch(ell) ax2.imshow( newmodel, origin="lower", interpolation="nearest", norm=colors.LogNorm(vmin=modmin, vmax=modmax), cmap=cmap, ) ax2.set_title("GALFIT Model") ax3.imshow(residual, origin="lower", vmin=resmin, vmax=resmax, cmap=cmap) ax3.set_title("Residual") fig.subplots_adjust(left=0.04, right=0.98, bottom=0.02, top=0.98) plt.savefig(namepng, dpi=dpival)