Source code for FITS_tools.strip_headers

import astropy.io.fits as pyfits

[docs]def flatten_header(header,delete=False): """ Attempt to turn an N-dimensional fits header into a 2-dimensional header Turns all CRPIX[>2] etc. into new keywords with prefix 'A' header must be a `~astropy.io.fits.Header` instance """ # TODO: Determine bad axes by examining CTYPE and excise them if not isinstance(header,pyfits.Header): raise Exception("flatten_header requires a pyfits.Header instance") newheader = header.copy() for key in newheader.keys(): try: if delete and int(key[-1]) >= 3 and key[:2] in ['CD','CR','CT','CU','NA']: newheader.pop(key) elif (int(key[-1]) >= 3 or int(key[2])>=3) and key[:2] in ['CD','CR','CT','CU','NA','PC']: newheader.rename_keyword(key,'A'+key,force=True) if delete and (int(key[3]) >= 3 or int(key[7]) >= 3) and key[:2]=='PC' and key in newheader: # for PC03_04 etc newheader.pop(key) elif (int(key[3]) >= 3 or int(key[7]) >= 3) and key[:2]=='PC' and key in newheader: newheader.rename_keyword(key,'A'+key[1:],force=True) except ValueError: # if key[-1] is not an int pass except IndexError: # if len(key) < 2 pass newheader['NAXIS'] = 2 if header.get('WCSAXES'): newheader['WCSAXES'] = 2 return newheader
[docs]def speccen_header(header,lon=None,lat=None): """ Turn a cube header into a spectrum header, retaining RA/Dec vals where possible (speccen is like flatten; spec-ify would be better but, specify? nah) Assumes 3rd axis is velocity """ newheader = header.copy() newheader.set('CRVAL1',header.get('CRVAL3')) newheader.set('CRPIX1',header.get('CRPIX3')) if 'CD1_1' in header: newheader.rename_keyword('CD1_1','OLDCD1_1') elif 'CDELT1' in header: newheader.rename_keyword('CDELT1','OLDCDEL1') if 'CD3_3' in header: newheader.set('CDELT1',header.get('CD3_3')) elif 'CDELT3' in header: newheader.set('CDELT1',header.get('CDELT3')) newheader.set('CTYPE1','VRAD') if header.get('CUNIT3'): newheader.set('CUNIT1',header.get('CUNIT3')) else: print("Assuming CUNIT3 is km/s in speccen_header") newheader.set('CUNIT1','km/s') newheader.set('CRPIX2',1) newheader.set('CTYPE2','RA---TAN') newheader.set('CRPIX3',1) newheader.set('CTYPE3','DEC--TAN') if lon is not None: newheader.set('CRVAL2',lon) if lat is not None: newheader.set('CRVAL3',lat) if 'CD2_2' in header: newheader.rename_keyword('CD2_2','OLDCD2_2') if 'CD3_3' in header: newheader.rename_keyword('CD3_3','OLDCD3_3') return newheader