Module RFits
In: lib/rfits/ext/rfitsio.c
lib/rfits/rfits.rb

RFits is a library for parsing the Flexible Image Transport System (FITS) files widely used in astronomy.

Installing

RFits requires the C library CFITSIO (heasarc.gsfc.nasa.gov/docs/software/fitsio/fitsio.html) to be installed. In most cases this is as simple as:

 > tar zxvf cfitsioxxxx.tar.gz
 > cd cfitsio
 > ./configure
 > make shared
 > sudo make install

You can then install via rubygems in the usual way:

 > gem install rfits

Using

 require 'rubygems'
 require 'rfits'

 RFits::File.open('m31.fits', 'rw') do |fits|  # m31.fits exists
   # first extension is an image
   img = fits[0]

   # retrieve/write header values using hash syntax
   header = img.header
   puts header['TELESCOP']     #=> 'KPNO 4.0 meter telescope'
   puts header['TELEQUIN']     #=> 2000.0
   puts header['SIMPLE']       #=> true
   puts header['TELFOCUS']     #=> -9998
   header['MY_HDR1'] = 'A nice value'
   header['MY_HDR2'] = 10
   header['MY_HDR3'] = 9.1
   header['MY_HDR4'] = Complex.new(4, 1)  # yes, you can do this

   # retrieve/write pixel values using array syntax
   pixels = img.data
   first_pixel = pixels[0]                  # the first pixel
   pixel_list = pixels[0..10]               # pixels 0 through 10 as an array
   pixel_list = pixels[[0, 0], [10, 10]]    # pixels between the points [0, 0] and [10, 10]
   pixels[10] = 5                           # the ninth pixel value is set to 5
   pixels[3..7] = [1, 4, 2, 8]              # pixels 3 through 7 are set

   # second extension is a binary table
   tbl = fits[1]

   # access a table using array syntax
   data = tbl.data
   row = data[0]                                    # first row as a hetergeneous array
   col = data.column(2)                             # third column
   data[1] = [1, 1.2, 'blah', Complex.new(1, 1)]    # second row is set
   data.set_column(1, [1.3, 4.5, 7.8, 2.2])         # the second column is set
   col << [1, 1.2, 'blah', Complex.new(1, 1)]       # append a row

   # you can find out things about the table columns
   metadata = tbl.column_information
   puts metadata[0].data_type   #=> :short
   puts metadata[0].name        #=> 'catalog_id'

   # and add new ones
   metadata << {:name => 'new_column1', :format => 'A10'}  # append a new string column
   metadata[3] = {:name => 'new_column2', :format => 'I'}  # insert an integer column as the 4th column
 end

Classes and Modules

Module RFits::Compressible
Module RFits::IO
Class RFits::AsciiTable
Class RFits::BinaryTable
Class RFits::ColumnInformation
Class RFits::ColumnInformationList
Class RFits::File
Class RFits::HDU
Class RFits::Header
Class RFits::Image
Class RFits::ImageData
Class RFits::Table
Class RFits::TableData

[Validate]