package SlewProcess; use strict; use English; use Carp; use vars qw(@ISA $VERSION $name $author $date $version @instList $numberOfStreams); @ISA = qw(Module); use ModuleResources; use ModuleUtil; # Declare identity, version, author, date, etc. $name = __PACKAGE__; $VERSION = '0.15'; $version = $VERSION; $author = 'Duncan Law-Green, Richard Saxton'; $date = '2010-08-10'; # # ChangeLog # ========= # # version 0.15 - 2010-08-10 DLG # ------------ # + insert filter/mode check for slew processing # # version 0.14 - 2009-06-23 DLG # ------------ # + changed instList to 'all' to correspond with MakeCIF # # version 0.13 - 2009-06-19 DLG # ------------ # + numberOfStreams set to 1 # # version 0.12 - 2009-06-19 DLG # ------------ # + added shared vars to fix module crash # # version 0.11 - 2009-06-15 DLG # ------------ # + continue coding, return success() added # # version 0.1 - 2009-03-18 DLG # ----------- # + coding started # # About Slew Processing # --------------------- # SlewProcess calls the SAS wrapper task 'eslewchain'. eslewchain splits an EPIC slew # into small sections, roughly one degree in length, and generates images and exposure # maps for each section. It makes use of the tasks atthkgen, attcalc, evselect and # eexpmap. # Processing to proceed as follows: # # * Copy slew datafile (SDF) into a clean directory, and point at it with the environment # variable SAS_ODF # # * Run ccfbuild and point to the CCF with SAS_CCF # # * Run odfingest # # * Run epproc in a working directory # # * Set SAS_ATTITUDE environment variable to 'RAF' # # * Run eslewchain in the directory containing the event file produced by epproc # For guide to issues involved in interpreting slew images, see Saxton et al. 2008, A&A 480, 611 # Declare list of instruments this module is interested in @instList = qw(all); # Number of streams sub numberOfStreams { return 1; } # Rules method sub evaluateRules { # Ignore conditions # Ignore if not doing slew processing return ignore() if ( ! $ENV{'PCMS_ISSLEW'} ); # Start conditions start() if complete( module => 'MakeCIF' , instrument => 'all' , stream => 1 ); } # Action method sub performAction { info("Module version number: $version"); # Check for slew dataset here (how??), exit ignore() if not found if ( ! $ENV{'PCMS_ISSLEW'} ) { info("PCMS_ISSLEW is not set. Ignoring SlewProcess."); return ignore(); } info("PCMS_ISSLEW is set. Continuing with SlewProcess."); # Work out exposure ID for PN, MOS1, MOS2 my $pn_exp_id = exposureID(instrument => 'epn', stream => 1 ); my $mos1_exp_id = exposureID(instrument => 'emos1', stream => 1 ); my $mos2_exp_id = exposureID(instrument => 'emos2', stream => 1 ); # Fetch filter and mode, trip exception if not correct for slew processing my $pn_filter = getExposureProperty(instrument => 'epn', exp_id => $pn_exp_id, name => 'filter') || "Inactive" ; info("PN Filter: $pn_filter"); my $mos1_filter = getExposureProperty(instrument => 'emos1', exp_id => $mos1_exp_id, name => 'filter') || "Inactive" ; info("MOS1 Filter: $mos1_filter"); my $mos2_filter = getExposureProperty(instrument => 'emos2', exp_id => $mos2_exp_id, name => 'filter') || "Inactive" ; info("MOS2 Filter: $mos2_filter"); my $pn_mode = getExposureProperty(instrument => 'epn', exp_id => $pn_exp_id, name => 'mode') || "Inactive" ; info("PN Mode: $pn_mode"); my $mos1_mode = getExposureProperty(instrument => 'emos1', exp_id => $mos1_exp_id, name => 'mode') || "Inactive" ; info("MOS1 Mode: $mos1_mode"); my $mos2_mode = getExposureProperty(instrument => 'emos2', exp_id => $mos2_exp_id, name => 'mode') || "Inactive" ; info("MOS2 Mode: $mos2_mode"); if ($pn_filter !~ /^Medium/ && $mos1_filter !~ /^Medium/ && $mos2_filter !~ /^Medium/) { info("Incorrect EPIC filter for slew: $pn_filter | $mos1_filter | $mos2_filter, should be Medium."); info("Ignoring SlewProcess..."); return ignore(); } if ($pn_mode !~ /^(PrimeFullWindow|PrimeLargeWindow|PrimeFullWindowExtended)/ && $mos1_mode !~ /^(PrimeFullWindow|PrimeLargeWindow|PrimeFullWindowExtended)/ && $mos2_mode !~ /^(PrimeFullWindow|PrimeLargeWindow|PrimeFullWindowExtended)/) { info("Incorrect EPIC mode for slew: $pn_mode | $mos1_mode | $mos2_mode, should be PrimeFullWindow || PrimeLargeWindow || PrimeFullWindowExtended."); info("Ignoring SlewProcess..."); return ignore(); } # Run epproc # info("Running epproc on slew sequence"); doCommand( 'epproc' , removetemporaries => 1 , removeintermediategtis => 1 , removeintermediateeventlists => 1 , selectccds => 0 ) or return exception(); # Run eslewchain # SAS task has no parameters in documentation info("Running eslewchain on slew sequence"); doCommand( 'eslewchain' ) or return exception(); # Return success success(); } # need to rename output files by SSC band names # get translation table? 1;