[AstroPy] Coding in Python to Read/Write a fits file.

Wayne Watson sierra_mtnview at sbcglobal.net
Sat Apr 11 20:37:33 EDT 2009

I successfully produced a 640x480 one byte file from the py program, and
called it sentinel_internal.raw. I'm now trying to figure out what
facility that I need to get this into a fits data structure. Probably
what is below will be fine, but, first though, I cannot read the .raw
file.  As far as I can tell, PIL, pyfits or numpy cannot do it.  Let me
put it another way.  I do not see any description in any of the
documents that I have that shows a way to do it.  Comments?

Peter Erwin wrote:
> On Apr 8, 2009, at 1:50 PM, Wayne Watson wrote:
> [snip]
>> This is close to what I'm looking for. That is, executable Python code,
>> and not interactive code one enters line by line. Right now I'm lacking
>> a way to read, say, a jpg, fits, or gif file, and convert it to fits.
>> I'm also lacking a way to convert the internal image format to fits. The
>> latter is very important. The internal format is simple. An image
>> 640x480 pixels and 8-bits deep, b/w. jpg, etc. is already done for
>> writing the internal file.  For fits files, I'd like to write very
>> simple headers that have, say, lat/long of observer, a time stamp, and
>> some other assorted items.
> *Writing* a FITS file using pyfits is not very difficult.  The bare-bones
> description of this is in the pyfits manual ("Create FITS Images from 
> Scratch",
> on p.10, I think).  Since you're working with images, you need to have 
> the image
> data as a 2D numpy array (the example on p.10 uses a 1-D array).
> (Pyfits manual available here: 
> http://www.stsci.edu/resources/software_hardware/pyfits )
> Since you say that the existing Python code handles the "internal image
> format", then it must somewhere have the data in a Python data structure,
> perhaps as a list of lists, or perhaps as a Python array.  You'll need to
> go into this existing code and find out what the internal format is; then
> you'll have some idea of how to convert it to a numpy array.  It might be
> as simple as
>    image_for_fits = numpy.array(image_oldformat)
> Since your data is 8 bit, it would make sense to use a numpy *integer*
> array; I believe pyfits is smart enough to save the result as an integer
> FITS file.
> The Pyfits manual also explains how to add header keywords (see the
> chapter on Headers).
> (Note that the Pyfits manual is still based on version 1.0, and so it 
> refers to
> "numarray" instead of "numpy"; you should just mentally substitute 
> "numpy"
> wherever you see "numarray" in the text.  The manual also has problems 
> with
> the chapter numbers, which don't agree between the Table of Contents and
> the actual main text.  But this is a minor issue.)
> As for jpeg, gif, etc. -- you have to find some Python code that can 
> read those
> formats (Python Imaging Library, perhaps?).  Once they've been read 
> in, however,
> you should be able to convert the resulting data structure to a numpy 
> array,
> and then you can write it as a FITS file.
> cheers,
> Peter
> =============================================================
> Peter Erwin                   Max-Planck-Insitute for Extraterrestrial
> erwin at mpe.mpg.de              Physics, Giessenbachstrasse
> tel. +49 (0)89 30000 3695     85748 Garching, Germany
> fax  +49 (0)89 30000 3495     http://www.mpe.mpg.de/~erwin

           Wayne Watson (Watson Adventures, Prop., Nevada City, CA)

             (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
              Obz Site:  39° 15' 7" N, 121° 2' 32" W, 2700 feet

          "In arithemtic as in politics, the importance of one is
           determined by the number of zeros behind it." -- Anon

More information about the AstroPy mailing list