# -*- coding: utf-8 -*-
#######################################################################3
# task_imhead.py
#
#
# Copyright (C) 2008
# Associated Universities, Inc. Washington DC, USA.
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
# License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
#
# Correspondence concerning AIPS++ should be adressed as follows:
# Internet email: aips2-request@nrao.edu.
# Postal address: AIPS++ Project Office
# National Radio Astronomy Observatory
# 520 Edgemont Road
# Charlottesville, VA 22903-2475 USA
#
#
# Shannon Jaeger (University of Calgary)
#
#
#
# CASA task for reading/writing/listing the CASA Image header
# contents
#
#
#
#
# imhead stands for image header
#
#
#
# task_imhead.py is a Python script providing an easy to use task
# for adding, removing, listing and updating the contents of a CASA
# image. This task is very useful for fixing mistakes made in the
# importing of FITS files into CASA images, as well as seeing what
# checking the header to see what type of data is in the image file.
#
# NOTE: This task does not edit FITS files, but FITS files may
# be created with exportuvfits task
#
#
#
#
#
## The following code lists the keyword/value pairs found in
## the header of the CASA image file ngc133.clean.image. The information
## is stored in Python variable hdr_info in a Python dictionary.
## The information is also listed in the CASA logger. The observation
## date is #printed out from the hdr_info variable.
# hdr_info = imhead( 'ngc4826.clean.image', 'list' )
##print "Observation Date: ", hdr_info['date-obs']
#
## The following exmple displays the CASA images history in the CASA logger.
# imhead( 'ngc4826.clean.image', 'history' )
#
## The following example adds a new, user-defined keyword to the
## CASA image ngc4826.clean.image
# imhead( 'ngc4826.clean.image', 'add', 'observer 1', 'Joe Smith' )
# imhead( 'ngc4826.clean.image', 'add', 'observer 2', 'Daniel Boulanger' )
#
## The following example changes the name of the observer keyword,
## OBSERVE, to ALMA
# imhead( 'ngc4826.clean.image', 'put', 'telescope', 'ALMA' )
#
#
#
#
# To provide headering modification and reading tools to the CASA users.
#
#
#
#
from __future__ import absolute_import
import numpy
import sys
import os
# get is_CASA6 and is_python3
from casatasks.private.casa_transition import *
if is_CASA6:
from casatools import image
from casatools import imagemetadata
from .. import casalog
from .ialib import write_image_history
else:
from taskinit import *
from ialib import write_image_history
image = iatool
imagemetadata = imdtool
def imhead(
imagename, mode, hdkey, hdvalue, verbose
):
if mode.startswith('h') or mode.startswith('s'):
myia = image()
try:
myia.open(imagename)
if mode.startswith('h'):
myia.history()
return
elif mode.startswith('s'):
return myia.summary(verbose=verbose)
finally:
myia.done()
if (
mode.startswith('a') or mode.startswith('d')
or mode.startswith('g') or mode.startswith('l')
or mode.startswith('p')
):
myimd = imagemetadata()
try:
myimd.open(imagename)
res = False
if mode.startswith('a'):
res = myimd.add(hdkey, hdvalue)
elif mode.startswith('d'):
res = myimd.remove(hdkey, hdvalue)
elif mode.startswith('g'):
return myimd.get(hdkey)
elif mode.startswith('l'):
return myimd.list(True)
elif mode.startswith('p'):
res = myimd.set(hdkey, hdvalue)
else:
raise RuntimeError('Unknown imhead mode ' + str(mode))
if res:
try:
param_names = imhead.__code__.co_varnames[:imhead.__code__.co_argcount]
if is_python3:
vars = locals( )
param_vals = [vars[p] for p in param_names]
else:
param_vals = [eval(p) for p in param_names]
write_image_history(
imagename, sys._getframe().f_code.co_name,
param_names, param_vals, casalog
)
except Exception as instance:
casalog.post("*** Error \'%s\' updating HISTORY" % (instance), 'WARN')
return
finally:
myimd.done()