Subs::NFILightCurves (version 0.0)


package Subs::NFILightCurves;
##############################################################################
#
# DESCRIPTION: This subroutine runs extracts light curves from event data
#
# HISTORY: 
# HISTORY: $Log: NFILightCurves.pm,v $
# 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::LightCurves;

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

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

    $self->{DESCRIPTION}="Extracting and plotting NFI light curves";

    return $self;
}

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

#############################################################################
#
#############################################################################
sub extract_lightcurves {
    my $self=shift;

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

    $log->entry("Extracting NFI light curves from event data");


    ###########################
    # fire up the extractor
    ###########################
    my $extractor = Util::Extractor->new();
    $extractor->verbose(2);

    ################################################
    # get the mean number of counts we should have
    # in each lightcurve bin
    ################################################
    my $counts_per_bin = $procpar->read("meanperlcbin");

    ########################################
    # loop over instruments
    ########################################
    my $inst;
    for $inst ("xrt", "uvot") {

        $log->entry("Extracting $inst light curves");

        ################################################
        # determine the modes we should look at 
        ################################################
        my @modes=();
        if($inst eq "xrt") { @modes=('pc*', 'lr*', 'wt*') }

        ########################
        # loop over modes 
        ########################
        my $mode;
        foreach $mode (@modes) {

            $log->entry("Mode $mode");
            $extractor->instrument($inst, $mode);

            ######################################
            # get the input and output file names 
            ######################################
            my $curve = $filename->get("lightcurve", $inst, $mode, 001);
            unlink $curve;

            my @evts = $filename->get("event", $inst, $mode, "*");
            unless(@evts) {
                $log->entry("No event files");
                next;
            }
            my $list = Util::EventFileList->new(@evts);

            $log->entry("Extracting $curve from @evts");

            ###################################
            # calculate the bin size
            ###################################
            my $nevents = $list->nevents();
            my $exposure = $list->sum_keywords("ONTIME");

            my $binsize= $exposure/$nevents * $counts_per_bin;

            $log->entry("nevents=$nevents exposure=$exposure s ".
                        "bin size $binsize s");

            ##############################
            # run the extractor
            ##############################
            $extractor->infiles(@evts)
                      ->bin_size($binsize, 0.5)
                      ->outfile($curve, "lightcurve");

            ################################################
            # this is a cludge since XRT bright mode files
            # currently lack TLMAX for PHA/PI 2002-10-22
            # This code should be removed when the problem 
            # is fixed.
            ################################################
            my $phamax = $extractor->{PARAMS}->{phamax};
            my $fits = Util::FITSfile->new($extractor->{SAMPLE_INPUT}, 
                                           "EVENTS");

            unless(defined $fits->keyword($phamax)) {
                $log->error(1, "Event file does not have $phamax keyword");
                $log->entry("Setting $phamax to 4096");

                foreach (@evts) {
                    Util::FITSfile->new($_, "EVENTS")
                                  ->keyword($phamax, 4096);
                }
            }


            $extractor->run();

        } # end of loop over modes
    } # end of loop over instruments


} # end of extract_lightcurves method

#############################################################################
#
#############################################################################
sub list_lightcurves {
    my $self = shift;

    my $filename = $self->filename();

    return ($filename->get("lightcurve", "x", "*", "*"),
            $filename->get("lightcurve", "u", "*", "*") );

}