Subs::Spacecraft2FITS (version 0.0)


package Subs::Spacecraft2FITS;
##############################################################################
#
# DESCRIPTION: This subroutine converts Spacecraft HK telemetry to FITS
#
# HISTORY: 
# HISTORY: $Log: Spacecraft2FITS.pm,v $
# HISTORY: Revision 1.12  2007/07/03 19:50:29  apsop
# HISTORY: Fix bug in setting of GTI extension name.
# HISTORY:
# HISTORY: Revision 1.11  2007/06/28 20:49:00  apsop
# HISTORY: Merge bat and NFI timelines when making snapshot GTI.
# HISTORY:
# HISTORY: Revision 1.10  2007/02/05 15:32:45  apsop
# HISTORY: Make snapshot GTIs from NFI intervals if BAT intervals are not available.
# HISTORY:
# HISTORY: Revision 1.9  2006/01/31 17:30:52  apsop
# HISTORY: Add TSTART TSTOP keywords to pri header of snapshot gti file.
# HISTORY:
# HISTORY: Revision 1.8  2006/01/31 16:46:25  apsop
# HISTORY: Make shapshot GTI file from B entries in *.queue file.
# HISTORY:
# HISTORY: Revision 1.7  2004/05/06 20:02:34  dah
# HISTORY: Add version number back into the header comments.
# HISTORY:
# HISTORY: Revision 1.6  2004/04/28 13:47:35  dah
# HISTORY: Make one method for extracting hk, and put it in Swift2FTIS superclass.
# HISTORY:
# HISTORY: Revision 1.5  2004/04/16 20:21:18  dah
# HISTORY: Begin using embedded history records
# HISTORY:
#
# VERSION: 0.0
#
#
##############################################################################


use Subs::Swift2FITS;
use Util::Tool;
use Util::FITStable;

@ISA = ("Subs::Swift2FITS");
use strict;

sub new {
    my $proto=shift;
    my $self=$proto->SUPER::new();

    $self->{DESCRIPTION}="Decoding Spacecraft Telemetry";

    return $self;
}

##################
# METHODS:
##################

sub body {
    my $self=shift;

    my $log     =$self->log();
    my $filename=$self->filename();
    my $procpar =$self->procpar();
    my $jobpar  =$self->jobpar();

    $self->hk_extract('swift');
    $self->hk_combine('swift');

    ###############################################
    # Construct snapshot gti's from the queue file
    ###############################################
    my $qname = $jobpar->read('sequence') . '.queue';
    if( -f $qname ){
      if( open(QUEUE, "$qname") ){
	my @intervals;
	while(<QUEUE>){
	  my %temp;
	  @temp{'type', 'id', 'start', 'stop'} = split(' ');
	  push @intervals, \%temp;
	}
        close QUEUE;

	my @db = ( {name => 'START',
		    type => '1D',
		    unit => 's',
		    key => 'START'},

		   {name => 'STOP',
		    type => '1D',
		    unit => 's',
		    key => 'STOP'});

	my $db = Util::FITStable->new(\@db,
				      log => $log,
				      which => 'timeline',
				     );

	my @uintervals = sort { $a->{start} <=> $b->{start} or $a->{stop} <=> $b->{stop} } @intervals;
	
	$db->set(START => [map $_->{start}, @uintervals]);
	$db->set(STOP  => [map $_->{stop}, @uintervals]);

	my $outfile = $filename->get('gti', 's', "ss", 0);
	$db->write($outfile);

	my $fits = Util::FITSfile->new($outfile);
	$fits->keyword('EXTNAME', 'GTI');
	$fits->keyword('TIMESYS', 'TT', 'time system');
	$fits->keyword('MJDREFI', 51910, 'MJD reference day 01 Jan 2001 00:00:00');
	$fits->keyword('MJDREFF', 7.428703700000000E-04, 
		       'MJD reference (fraction of day) 01 Jan 2001 00:00:00');
	$fits->keyword('CLOCKAPP', 'F', 'If clock correction are applied (F/T)');
	$fits->keyword('TIMEUNIT', 's', 'Time unit for timing header keywords');

	$fits->ext(0);
	$fits->keyword('TSTART', $jobpar->{TIMELIST}->{start});
	$fits->keyword('TSTOP', $jobpar->{TIMELIST}->{stop});

	my $temp = "ssgti.tmp";

	Util::Ftool->new('mgtime')
	           ->params({ingtis => "$outfile\[GTI\] $outfile\[GTI\]",
			     outgti => $temp,
			     merge  => 'OR'})
	           ->run();

	rename $temp, $outfile;
	$fits->ext(1);	
	$fits->keyword('EXTNAME', 'GTI');

      }else{
	$log->error(1, "Unable to open $qname, $!");
      }
    }

} # end of body method