package Subs::Spectra; ############################################################################## # # DESCRIPTION: This subroutine runs extracts spectra from event data # # HISTORY: # HISTORY: $Log: Spectra.pm,v $ # HISTORY: Revision 1.6 2012/02/04 08:05:52 apsop # HISTORY: Added "/*" to setplot splashpage off command, supposedly this avoids # HISTORY: certain problems if used with an older version of Xspec. # HISTORY: # HISTORY: Revision 1.5 2012/02/02 06:22:39 apsop # HISTORY: Added "setplot splashpage off" to xspec script. # HISTORY: # HISTORY: Revision 1.4 2004/05/06 20:02:34 dah # HISTORY: Add version number back into the header comments. # HISTORY: # HISTORY: Revision 1.3 2004/04/16 20:21:18 dah # HISTORY: Begin using embedded history records # HISTORY: # # VERSION: 0.0 # # ############################################################################## use Subs::Sub; use Util::Xanadu; @ISA = ("Subs::Sub"); use strict; sub new { my $proto=shift; my $self=$proto->SUPER::new(); $self->{DESCRIPTION}="Extracting and plotting spectra"; return $self; } ################## # METHODS: ################## sub body { my $self=shift; my $log =$self->log(); my $filename=$self->filename(); my $procpar =$self->procpar(); my $jobpar =$self->jobpar(); $log->entry("Extracting spectra from event data"); ########################### # fire up the extractor ########################### my $extractor = Util::Extractor->new(); $extractor->verbose(2); ######################################## # loop over instruments ######################################## my $inst; for $inst ("xrt", "uvot") { $log->entry("Extracting $inst spectra"); ################################################ # determine the modes we should look at ################################################ my @modes=(); if($inst eq "xrt") { @modes=('pc*', 'wt*', 'lr*') } ######################## # loop over modes ######################## my $mode; foreach $mode (@modes) { $log->entry("Mode $mode"); $extractor->instrument($inst, $mode); ###################################### # get the input and output file names ###################################### my $spec = $filename->get("spectrum", $inst, $mode, 001); unlink $spec; my @evts = $filename->get("event", $inst, $mode, "*"); unless(@evts) { $log->entry("No event files"); next; } my $list = Util::EventFileList->new(@evts); $log->entry("Extracting $spec from @evts"); ############################## # run the extractor ############################## $extractor->infiles(@evts) ->outfile($spec, "spectrum"); ################################################ # 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 ############################## # plot the lightcurves ############################## $self->plot_spectra(); } # end of body method ############################################################################ # plot all the lightcurves ############################################################################ sub plot_spectra { my $self=shift; my $log =$self->log(); my $filename=$self->filename(); my $procpar =$self->procpar(); my $jobpar =$self->jobpar(); $log->entry("Plotting all spectra"); ################################# # set up xspec ################################# my $xspec = Util::Xanadu->new("xspec"); ############################### # loop over all spectra ############################### my $spectrum; foreach $spectrum ($filename->any("spectrum") ) { ####################################### # get the names of corresponding files ####################################### my $specplot=$filename->corresponding("spectrum","specplot",$spectrum); # my $rmf=$filename->corresponding("spectrum","rmf",$spectrum); # my $arf=$filename->corresponding("spectrum","arf",$spectrum); # unless( -s $rmf && -s $arf ) { # ############################# # # some files don't exist # ############################# # $log->entry("No $arf or $rmf, so skipping $specplot"); # next; # } ############################### # generate the plotting script ############################### $xspec->script("data $spectrum", "setplot splashpage off /*", "setplot channel", "ignore bad", "setplot com log y on", "setplot com rescale y", "setplot com hard /ps", "plot", "exit" ); ########################### # plot the spectrum ########################### $log->entry("Plotting $specplot from $spectrum"); $xspec->run(); ###################################### # give the plot file the correct name ###################################### rename "pgplot.ps", $specplot; } # end of loop over spectra } # end of plot_spectra method