# -*- 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 # # <author> # Shannon Jaeger (University of Calgary) # </author> # # <summary> # CASA task for reading/writing/listing the CASA Image header # contents # </summary> # # <reviewed reviwer="" date="" tests="" demos=""> # </reviewed # # <etymology> # imhead stands for image header # </etymology> # # <synopsis> # 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 # # </synopsis> # # <example> # <srcblock> ## 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' ) # </srblock> # </example> # # <motivation> # To provide headering modification and reading tools to the CASA users. # </motivation> # # <todo> # </todo> 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()