package Util::BATCave; ############################################################################## # # DESCRIPTION: Utilities for BAT pipeline processing # # # HISTORY: $Log: BATCave.pm,v $ # HISTORY: Revision 1.6 2005/06/01 13:38:21 apsop # HISTORY: Change the burst gti file type from gti to burstgti. # HISTORY: # HISTORY: Revision 1.5 2005/02/09 23:06:29 apsop # HISTORY: Added message identifiers. # HISTORY: # HISTORY: Revision 1.4 2004/11/10 17:59:43 apsop # HISTORY: Comment out get_bayes, as it is not used, and used SimpleFITS. # HISTORY: # HISTORY: Revision 1.3 2004/11/09 22:22:29 apsop # HISTORY: Corrected name of peak GTI. # HISTORY: # HISTORY: Revision 1.2 2004/11/09 22:03:53 apsop # HISTORY: All GTIs now collected in a single file. # HISTORY: # HISTORY: Revision 1.1 2004/11/09 19:07:31 apsop # HISTORY: Adding BAT pipeline support modules. # HISTORY: # # VERSION: $Revision: 1.6 $ # # ############################################################################## use strict; use Util::SwiftTags; sub chan1 { return '15-350'; # keV } sub chan4 { return '15-25,25-50,50-100,100-350'; # keV } sub get_gti { my ($self, $type) = @_; my $log = $self->log; my $filename = $self->filename; my $procpar = $self->procpar; my $jobpar = $self->jobpar; if ($type eq 'NONE') { return 'NONE'; } my $gti = undef; my $gtifile = $filename->get('burstgti', 'bat', '', 0); if (not $gtifile or not -f $gtifile) { $log->error([ 1, BAD_GTI ], "missing BAT GTI file"); } elsif ($type eq 'GTI_TOT' or $type eq 'GTI_PEAK' or $type eq 'GTI_T90' or $type eq 'GTI_T50' or $type eq 'GTI_BKG1' or $type eq 'GTI_BKG2' or $type eq 'GTI_BAYES') { $gti = $gtifile . "[$type]"; } else { $log->error([ 1, BAD_GTI ], "invalid BAT GTI type requested [$type]"); } if (not $gti) { $log->error([ 2, BAD_GTI ], "unable to locate BAT $type GTI"); } return $gti; } ## sub get_bayes ## { ## my ($self, $key) = @_; ## ## my $log = $self->log; ## my $filename = $self->filename; ## my $jobpar = $self->jobpar; ## ## my $gti_bayes = get_gti($self, 'GTI_BAYES'); ## ## my $value = undef; ## ## my $status = Util::SimpleFITS->open("<$gti_bayes") ## ->readkey($key => $value) ## ->close ## ->status; ## ## if ($status) { ## $log->error(2, "unable to determine BAT Bayes $key [$status]"); ## } ## ## return $value; ## } sub get_tdrss_ack { my ($self) = @_; my $log = $self->log; my $filename = $self->filename; my $ack = undef; my @acks = $filename->get('tdmess', 'bat', 'ce', '*'); if (@acks) { my $root = $filename->sequence_specific; my @filtered = grep /$root/, @acks; $ack = $filtered[0]; } if (not $ack) { $log->error([ 1, BAT_NO_CENTROID ], 'no BAT TDRSS centroid message'); } return $ack; } sub get_bscalemap_index { my ($log, $obsid) = @_; my $index = undef; # 2020-10-14 was using # $index = substr($obsid, 2, 8) # $index =~ s/^0+//; # as proxy for trigger which is flawed: # - it assumes two leading zeros # - it requires the first 2 segment digits to be 00 # ShortTermRepository should be enhanced to support custom # binning (by 10000 in this case) instead of hard-coded 1 million. # Note that this is only used on OBS_ID keyword from bscalemaps so # segment digits are 0s. if ($obsid =~ /^\d{11}$/) { $index = substr($obsid, 0, 10); $index =~ s/^0+//; if ($index eq '') { $index = '0'; } if (substr($obsid, -3) ne '000') { $log->error(1, "get_bscalemap_index: unexpected obsid '$obsid'"); } } else { $log->error(2, "get_bscalemap_index: invalid obsid '$obsid'"); } return $index; } 1;