package Subs::BATFinish;
##############################################################################
#
# DESCRIPTION: This creates an HTML report of XRT exposures. It is largely
# DESCRIPTION: a translation of the FITS head/tail HK files.
#
# HISTORY:
# HISTORY: $Log: BATFinish.pm,v $
# HISTORY: Revision 1.3 2004/12/05 23:35:54 apsop
# HISTORY: Only select short event files for calculating the exposure.
# HISTORY:
# HISTORY: Revision 1.2 2004/11/19 21:46:48 apsop
# HISTORY: New version of xrt2fits.
# HISTORY:
# HISTORY: Revision 1.1 2004/10/29 20:34:32 apsop
# HISTORY: Rename module from BATReport, and add code to remove unneeded bat event files.
# HISTORY:
# HISTORY: Revision 1.7 2004/09/03 12:37:23 apsop
# HISTORY: Give mask tagged lc their own type and file class. Use DURATION for html table, but EXPOSURE for parameters.
# HISTORY:
# HISTORY: Revision 1.6 2004/09/02 00:04:35 apsop
# HISTORY: Put in handling of rate files and mask tagged rate files.
# HISTORY:
# HISTORY: Revision 1.5 2004/05/06 20:02:34 dah
# HISTORY: Add version number back into the header comments.
# HISTORY:
# HISTORY: Revision 1.4 2004/04/16 20:21:18 dah
# HISTORY: Begin using embedded history records
# HISTORY:
#
# VERSION: 0.0
#
#
##############################################################################
use Subs::Sub;
use Subs::HTMLPage;
@ISA = ('Subs::HTMLPage');
use strict;
sub new {
my $proto=shift;
my $file=$proto->filename()->get('report', 'bat');
my $self=$proto->SUPER::new($file, 'BAT Exposure Report');
$self->{DESCRIPTION}='BAT cleanup and HTML Exposure Report';
return $self;
}
##################
# METHODS:
##################
##############################################################################
#
##############################################################################
sub body {
my $self=shift;
my $log =$self->log();
my $filename=$self->filename();
my $procpar =$self->procpar();
my $jobpar =$self->jobpar();
#################################################
# Delete bat event files that we are not keeping
#################################################
unlink grep /evsh(ps|sl|as)/, $filename->get('unfiltered', 'bat', 'evsh??', '*');
unlink grep /evsh(ps|sl|as)/, $filename->get('event', 'bat', 'evsh??', '*');
my $survey_expo=0.0;
my $unf_expo=0.0;
my $evt_expo=0.0;
my $rate_expo=0.0;
my $masktag_expo=0.0;
my $gtisum=Util::Stool->new('compute_exposure')
->verbose(0);
my @rows=();
############################################
# collect information about the event files
############################################
foreach my $file ($filename->get('unfiltered', 'bat', 'evshsp', '*')) {
my $fits=Util::FITSfile->new($file);
my $tstart=$fits->keyword('TSTART');
my $tstop =$fits->keyword('TSTOP');
my $row={};
$row->{START}=sprintf('%.06f',$tstart);
$row->{DURATION}=$tstop-$tstart;
$row->{MODE}='Event';
push @rows, ($row);
##############################
# calculate the exposure
##############################
$unf_expo += $gtisum->command_line($file.'\[GTI\]')
->run()
->stdout();
}
############################################
# collect information about the dph files
############################################
foreach my $file ($filename->get('rawdph', 'bat', '*', '*')) {
my $fits=Util::FITSfile->new($file, 1);
my $tstart=$fits->keyword('TSTART');
my $tstop=$fits->keyword('TSTOP');
my $row={};
$row->{START}=sprintf('%.06f',$tstart);;
$row->{DURATION}=$tstop-$tstart;
$row->{MODE}='Survey';
push @rows, ($row);
$survey_expo += $fits->keyword('EXPOSURE');
}
############################################
# collect information about the rate files
############################################
my ($tmin, $tmax) = (0, 0);
foreach my $file ($filename->get('rawlc', 'bat', 'rt*', '*')) {
my $fits=Util::FITSfile->new($file, 1);
my $tstart=$fits->keyword('TSTART');
my $tstop=$fits->keyword('TSTOP');
my $row={};
$row->{START}=sprintf('%.06f',$tstart);;
$row->{DURATION}=$tstop-$tstart;
$row->{MODE}=$fits->keyword('DATAMODE');
push @rows, ($row);
}
my $rate_file = $filename->get('rawlc', 'bat', 'ms', 0);
if( -f $rate_file ){
my $fits=Util::FITSfile->new($rate_file, 1);
$rate_expo = $fits->keyword('EXPOSURE');
}
###############################################
# collect information about the mask tag files
###############################################
my @mt_files = $filename->get('mtlc', 'bat', '', '*');
my $mt_count = @mt_files;
foreach my $file (@mt_files) {
my $fits=Util::FITSfile->new($file, 1);
my $tstart=$fits->keyword('TSTART');
my $tstop =$fits->keyword('TSTOP');
my $row={};
$row->{START}=sprintf('%.06f',$tstart);
$row->{DURATION}=$tstop-$tstart;
$row->{MODE}='Mask Tagged Source ' . $fits->keyword('CATNUM');
push @rows, ($row);
$masktag_expo += $fits->keyword('EXPOSURE');
}
###########################################
# and now the filtered event data
###########################################
foreach my $file ($filename->get('event', 'bat', '*', '*')) {
$evt_expo += $gtisum->command_line($file.'\[GTI\]')
->run()
->stdout();
}
################################################
# record the total exposures
################################################
$log->entry("Total survey exposure $survey_expo");
$log->entry("Total unfiltered event exposure $unf_expo");
$log->entry("Total filtered event exposure $evt_expo");
$jobpar->set({bat_survey => $survey_expo,
bat_evt => $evt_expo,
bat_unf => $unf_expo,
bat_rate => $rate_expo,
bat_mtag => $masktag_expo,
bat_pulse => 0,
bat_n_mtag => $mt_count});
##############################
# sort the table rows by time
##############################
@rows = sort {$a->{START} <=> $b->{START} } @rows;
#########################
# write the HTML table
#########################
$self->begin_table('Start Time',
'Duration (s)',
'Mode');
foreach my $row (@rows) {
$self->table_row($row->{START}, $row->{DURATION}, $row->{MODE});
}
$self->end_table();
} # end of body method