The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl

use 5.006;
use strict;
use warnings;

use Test::More;
use File::Spec;

# Load Astro::FITS::Header if we can.
eval {
  require Astro::FITS::Header;
};
if( $@ ) {
  plan skip_all => 'Test requires Astro::FITS::Header module';
} else {
  plan tests => 23;
}

# Test compilation.
require_ok( 'Astro::FITS::HdrTrans' );

# Read the header off disk.
my $datadir = File::Spec->catdir( 't', 'data' );
my $fits = readfits( File::Spec->catfile( $datadir, 'cgs4.hdr' ) );
die "Error reading FITS headers from cgs4.hdr"
  unless defined $fits;
my %hdr;
tie %hdr, "Astro::FITS::Header", $fits;

# Translate this header.
my %generic_header = Astro::FITS::HdrTrans::translate_from_FITS( \%hdr );

isa_ok( $generic_header{'UTSTART'}, "Time::Piece", "UTSTART is Time::Piece" );
isa_ok( $generic_header{'UTEND'}, "Time::Piece", "UTEND is Time::Piece" );
is( $generic_header{'UTDATE'}, 20050126, "UTDATE year is 20050126" );
is( $generic_header{'UTSTART'}->year, 2005, "UTSTART year is 2005" );
is( $generic_header{'UTSTART'}->mon,     1, "UTSTART month is 1" );
is( $generic_header{'UTSTART'}->mday,   26, "UTSTART day is 26" );
is( $generic_header{'UTSTART'}->hour,    7, "UTSTART hour is 7" );
is( $generic_header{'UTSTART'}->minute,  6, "UTSTART minute is 6" );
is( $generic_header{'UTSTART'}->second, 57, "UTSTART second is 57" );
is( $generic_header{'UTEND'}->year, 2005, "UTEND year is 2005" );
is( $generic_header{'UTEND'}->mon,     1, "UTEND month is 1" );
is( $generic_header{'UTEND'}->mday,   26, "UTEND day is 26" );
is( $generic_header{'UTEND'}->hour,    7, "UTEND hour is 7" );
is( $generic_header{'UTEND'}->minute, 11, "UTEND minute is 11" );
is( $generic_header{'UTEND'}->second,  9, "UTEND second is 9" );
is( $generic_header{'EXPOSURE_TIME'}, "120.000", "EXPOSURE_TIME is 120" );
is( $generic_header{'OBSERVATION_ID'}, "cgs4_64_20050126T070657", "OBSERVATION_ID is cgs4_64_20050126T070657" );
is( $generic_header{'POLARIMETRY'}, 0, "POLARIMETRY is 0" );
is( $generic_header{'DEC_TELESCOPE_OFFSET'}, -5.736, "DEC_TELESCOPE_OFFSET is -5.736" );
is( $generic_header{'SAMPLING'}, '1x2', "SAMPLING is 1x2" );
is( $generic_header{'TELESCOPE'}, 'UKIRT', "TELESCOPE is UKIRT" );

# Translate the header back to specific headers.
my %specific_header = Astro::FITS::HdrTrans::translate_to_FITS( \%generic_header );
is( $specific_header{'TELESCOP'}, 'UKIRT, Mauna Kea, HI', "TELESCOP is UKIRT, Mauna Kea, HI" );


sub readfits {
  my $file = shift;
  open my $fh, "<", $file or die "Error opening header file $file: $!";
  my @cards = <$fh>;
  close $fh;
  return new Astro::FITS::Header( Cards => \@cards );
}