HST image combination using the drizzle algorithm to combine astronomical images, to model image distortion, to remove cosmic rays, and generally to improve the fidelity of data in the final image.
Tools for managing data quality flags, photometric equalization, and applying calibration corrections to HST observations. These utilities ensure data integrity and enable accurate photometric and astrometric analysis.
Reset specified data quality (DQ) bits in HST FLT files to enable proper processing of flagged pixels.
def reset_dq_bits(input, bits, extver=None, extname='dq'):
"""
Reset specified DQ values to 0 in FLT files.
Parameters:
- input: str or list, input FLT files to modify
- bits: int or str, DQ bit values to reset (comma-separated string or integer)
- extver: int, extension version to modify (default: all)
- extname: str, extension name containing DQ array
Returns:
None (modifies input files in place)
"""
def run(configobj=None):
"""
Processing function for resetbits task.
Parameters:
- configobj: ConfigObj, configuration with DQ bit parameters
Returns:
None (modifies input files)
"""
def main():
"""
Command-line entry point for resetbits script.
Returns:
None
"""Equalize sensitivities of images across different chips and observation epochs to ensure consistent photometry.
def photeq(files='*_flt.fits', sciext='SCI', errext='ERR',
readnoise=0.0, gain=1.0, platescale=1.0, exptime=1.0,
expstart=0.0, **kwargs):
"""
Equalize sensitivities across chips and epochs.
Parameters:
- files: str or list, input files for photometric equalization
- sciext: str, science extension name
- errext: str, error extension name
- readnoise: float, detector read noise value
- gain: float, detector gain value
- platescale: float, pixel scale in arcsec/pixel
- exptime: float, exposure time for normalization
- expstart: float, exposure start time
- **kwargs: dict, additional calibration parameters
Returns:
None (modifies input files with equalized values)
"""
def run(configObj):
"""
Processing function for photeq task.
Parameters:
- configObj: ConfigObj, configuration with photometric parameters
Returns:
None (applies photometric equalization)
"""Update ACS headers with new distortion reference file information and residual distortion corrections.
def update(input, refdir="jref$", local=None, interactive=False,
wcsupdate=True):
"""
Update headers with ACS distortion reference files.
Parameters:
- input: str or list, input ACS files to update
- refdir: str, directory containing reference files
- local: str, local directory for reference files
- interactive: bool, interactive mode for user prompts
- wcsupdate: bool, update WCS after reference file update
Returns:
None (updates file headers)
"""
def run(configobj=None, editpars=False):
"""
Processing function for updatenpol task.
Parameters:
- configobj: ConfigObj, configuration with update parameters
- editpars: bool, allow parameter editing
Returns:
None (applies reference file updates)
"""
def main():
"""
Command-line entry point for updatenpol script.
Returns:
None
"""Replace problematic pixel values such as NaNs in images with user-specified replacement values.
def replace(input, **pars):
"""
Replace pixel values like NaNs with other values.
Parameters:
- input: str or list, input images to modify
- **pars: dict, replacement parameters including:
- mask_value: value to search for replacement
- fill_value: replacement value
- extensions: list of extensions to process
Returns:
None (modifies input images)
"""
def run(configobj):
"""
Processing function for pixreplace task.
Parameters:
- configobj: ConfigObj, configuration with replacement parameters
Returns:
None (applies pixel value replacements)
"""from drizzlepac import resetbits
# Reset cosmic ray and hot pixel flags
resetbits.reset_dq_bits('j8bt06nyq_flt.fits', bits='4096,8192')
# Reset specific bits for multiple files
input_files = ['file1_flt.fits', 'file2_flt.fits', 'file3_flt.fits']
resetbits.reset_dq_bits(input_files, bits='4096') # Reset CR flag
# Command-line usage equivalent
# resetbits j8bt06nyq_flt.fits 4096,8192from drizzlepac import photeq
# Basic photometric equalization
photeq.photeq(files='*_flt.fits',
readnoise=3.1,
gain=2.0,
platescale=0.05) # ACS/WFC pixel scale
# Multi-chip equalization with specific parameters
acs_files = ['j8bt06nyq_flt.fits', 'j8bt06nzq_flt.fits']
photeq.photeq(files=acs_files,
sciext='SCI',
errext='ERR',
readnoise=3.1,
gain=2.0)from drizzlepac import updatenpol
# Update ACS files with latest distortion references
updatenpol.update('j8bt*_flt.fits',
refdir='jref$',
interactive=False,
wcsupdate=True)
# Update with local reference files
updatenpol.update('observation_flt.fits',
local='/path/to/local/refs/',
wcsupdate=True)from drizzlepac import pixreplace
# Replace NaN values with zero
pixreplace.replace('image_with_nans.fits',
mask_value=float('nan'),
fill_value=0.0)
# Replace specific problematic values
pixreplace.replace('problematic_image.fits',
mask_value=-999.0,
fill_value=0.0,
extensions=['SCI', 'ERR'])| Bit | Value | Description |
|---|---|---|
| 0 | 1 | Reed-Solomon decoding error |
| 1 | 2 | Data lost in transmission |
| 2 | 4 | Bad detector pixel or beyond aperture |
| 3 | 8 | Masked by aperture feature |
| 4 | 16 | Hot pixel |
| 5 | 32 | CTE tail |
| 6 | 64 | Warm pixel |
| 7 | 128 | Bad pixel in bias |
| 8 | 256 | Bad pixel in dark |
| 9 | 512 | Bad pixel in flat field |
| 10 | 1024 | Impacted by cosmic ray |
| 11 | 2048 | Impacted by detector artifact |
| 12 | 4096 | Pixel saturated |
| 13 | 8192 | Bad pixel flagged by user |
# Reset cosmic ray flags (bit 10, value 1024)
resetbits.reset_dq_bits(files, bits='1024')
# Reset multiple flags
resetbits.reset_dq_bits(files, bits='1024,4096') # CR + saturation
# Reset all user-flagged bad pixels
resetbits.reset_dq_bits(files, bits='8192')Key parameters for photometric equalization:
photeq_pars = {
'readnoise': 3.1, # e-/pixel
'gain': 2.0, # e-/DN
'platescale': 0.05 # arcsec/pixel
}photeq_pars = {
'readnoise': 3.1, # e-/pixel
'gain': 1.5, # e-/DN
'platescale': 0.04 # arcsec/pixel
}photeq_pars = {
'readnoise': 2.5, # e-/pixel
'gain': 2.5, # e-/DN
'platescale': 0.13 # arcsec/pixel
}The updatenpol task manages:
# Verify successful DQ bit reset
from astropy.io import fits
with fits.open('processed_flt.fits') as hdul:
dq_data = hdul['DQ', 1].data
cr_pixels = (dq_data & 1024) > 0 # Check for remaining CR flags
print(f"Remaining CR pixels: {cr_pixels.sum()}")Install with Tessl CLI
npx tessl i tessl/pypi-drizzlepac