Source code for galfitools.galin.checkGalFile

#! /usr/bin/env python

import os

import numpy as np
from galfitools.galin.galfit import (
    Galfit,
    SelectGal,
    numParFree,
    numParSkyFree,
)
from galfitools.galin.std import GetAxis


[docs] class HeadInfo: """Data class to store information of the GALFIT Header This Data class verifies that the variables in the GALFIT header contain valid values. It uses boolean flags to indicate whether the file exists and whether the sizes of the convolution box or fitting region are appropriate. """ inputimageflag = False outimageflag = False sigimageflag = False psfimageflag = False maskimageflag = False constraintsflag = False xsizeflag = False ysizeflag = False convxflag = False convyflag = False inputimage = "none.fits" outimage = "none-out.fits" sigimage = "none" psfimage = "none" psfsamp = 1 maskimage = "none" constraints = "none" xmin = 0 xmax = 1 ymin = 0 ymax = 1 convx = 1 convy = 1 mgzpt = 25 scale = 1 scaley = 1 display = "regular" P = 0
[docs] def checkFile(galfitFile: str, dis: int) -> float: """checks that GALFIT file contains valid parameters Parameters ---------- galfitFile : str name of the GALFIT file dis : int maximum distance among components Returns ------- headinfo : HeadInfo data class defined above galax : number of components per galaxy model mag : total magnitude freepar : total number of free parameters for the fitting """ galfit = Galfit(galfitFile) head = galfit.ReadHead() galcomps = galfit.ReadComps() galsky = galfit.ReadSky() headinfo = HeadInfo() # copying info from header headinfo = copy2info(head, headinfo) galcomps = SelectGal( galcomps, dis, 1 ) # modify functions such that 0 will clean galcomps # ================================================================================ # IMAGE and GALFIT CONTROL PARAMETERS # A) A407.fits # Input data image (FITS file) # B) A407-G1-mge.fits # Output data image block # C) None # Sigma image name (made from data if blank or "none") # D) psf.fits # Input PSF image and (optional) diffusion kernel # E) 1 # PSF fine sampling factor relative to data # F) mask.fits # Bad pixel mask (FITS image or ASCII coord list) # G) cons.G1G2 # File with parameter constraints (ASCII file) # H) 613 1290 882 1275 # Image region to fit (xmin xmax ymin ymax) # I) 71 71 # Size of the convolution box (x y) # J) 21.4710 # Magnitude photometric zeropoint # K) 0.6800 0.6800 # Plate scale (dx dy) [arcsec per pixel] # O) regular # Display type (regular, curses, both) # P) 0 # Choose: 0=optimize, 1=model, 2=imgblock, 3=subcomps if os.path.exists(headinfo.inputimage): headinfo.inputimageflag = True if os.path.exists(headinfo.outimage): headinfo.outimageflag = True if (os.path.exists(headinfo.sigimage)) or (headinfo.sigimage == "none"): headinfo.sigimageflag = True if (os.path.exists(headinfo.psfimage)) or (headinfo.psfimage == "none"): headinfo.psfimageflag = True if (os.path.exists(headinfo.maskimage)) or (headinfo.maskimage == "none"): headinfo.maskimageflag = True if (os.path.exists(headinfo.constraints)) or (headinfo.constraints == "none"): headinfo.constraintsflag = True if headinfo.xmax > headinfo.xmin: headinfo.xsizeflag = True if headinfo.ymax > headinfo.ymin: headinfo.ysizeflag = True if headinfo.psfimageflag: (nx, ny) = GetAxis(headinfo.psfimage) if headinfo.convx > nx: headinfo.convxflag = True if headinfo.convy > ny: headinfo.convyflag = True galax = np.zeros(len(galcomps.N)) mag = np.zeros(len(galcomps.N)) mag.fill(99) mag = np.copy(galcomps.Mag) cont = 1 dmax = dis # counting components per galaxy for idx, item in enumerate(galcomps.N): dx = galcomps.PosX[idx] - galcomps.PosX dy = galcomps.PosY[idx] - galcomps.PosY d = np.sqrt(dx**2 + dy**2) maskdis = (d <= dmax) & (galax == 0) if maskdis.any(): galax[maskdis] = cont cont = cont + 1 galcomps.Active = True freepar = numParFree(galcomps) # computing the number of free parameters freeparsky = numParSkyFree(galsky) # computing the number of free parameters freepar = freepar + freeparsky return headinfo, galax, mag, freepar
[docs] def copy2info(head, head2): """copy header information copy header variables from head to head2 Parameters ---------- head : GalHead data class defined in galfit.py head2 : Galhead data class where the variables will be copied Returns ------- head2 : GalHead data class """ head2.inputimage = head.inputimage head2.outimage = head.outimage head2.sigimage = head.sigimage head2.psfimage = head.psfimage head2.psfsamp = head.psfsamp head2.maskimage = head.maskimage head2.constraints = head.constraints head2.xmin = head.xmin head2.xmax = head.xmax head2.ymin = head.ymin head2.ymax = head.ymax head2.convx = head.convx head2.convy = head.convy head2.mgzpt = head.mgzpt head2.scale = head.scale head2.scaley = head.scaley head2.display = head.display head2.P = head.P return head2