package Subs::XrtImages; ############################################################################## # # DESCRIPTION: Extract transform and plot images # # HISTORY: # HISTORY: $Log: XrtImages.pm,v $ # HISTORY: Revision 1.7 2004/08/27 18:54:58 apsop # HISTORY: Just call Images::convert_raw_to_sky in body. # HISTORY: # HISTORY: Revision 1.6 2004/05/06 20:02:34 dah # HISTORY: Add version number back into the header comments. # HISTORY: # HISTORY: Revision 1.5 2004/04/16 20:21:18 dah # HISTORY: Begin using embedded history records # HISTORY: # # VERSION: 0.0 # # ############################################################################## use Subs::Sub; use Subs::Images; use Util::Xanadu; @ISA = ("Subs::Images"); use strict; sub new { my $proto=shift; my $self=$proto->SUPER::new(); $self->{DESCRIPTION}="Extracting, merging and plotting images for XRT"; return $self; } ################## # METHODS: ################## sub body { my $self=shift; # $self->process_img_mode; ##################################### # extract images from the event data ##################################### ########### $self->extract_images(); $self->image_raw_to_sky('xrt'); ########### $self->plot_images(); # $self->make_products; } # end of body method sub process_img_mode { my $self=shift; my $log =$self->log(); my $filename=$self->filename(); my $procpar =$self->procpar(); my $jobpar =$self->jobpar(); # my $gtifile = $filename->get('gti', 'xrt', 'im', '*'); my $gtifile = 'tmp.gti'; my $mkffile = $filename->get('filter', 'x'); if (not -f "$mkffile") { $log->error(1, "missing XRT filter file, unable to create images"); } ################################## # run xrtscreen ################################## my $xrtscreen = Util::HEAdas->new('xrtscreen'); # parameter values taken from XRT Build 8 Appendix E $xrtscreen->params({ outdir => '.', createattgti => 'no', createinstrgti => 'yes', gtiscreen => 'no', evtscreen => 'no', hkrangefile => $filename->fetch_cal('rangefile', 'xrt'), evtrangefile => $filename->fetch_cal('graderange', 'xrt'), mkffile => $mkffile, gtifile => $gtifile, # usrgtifile => 'NONE', # gtiexpr => 'NONE', # gtiext => 'GTI', outfile => 'NONE', # timecol => 'TIME', expr => 'none', exprgrade => 'none', })->is_script(1); my $bptable = $filename->get('onboardbp', 'xrt', 'im', '*'); $bptable = 'NONE' unless $bptable; my $xrtimage = Util::HEAdas->new('xrtimage')->params({ biasfile => $filename->fetch_cal('imagebias', 'xrt'), bpfile => $filename->fetch_cal('badpix', 'xrt'), bptable => $bptable, gtifile => $gtifile, # ->is_script(1); }); foreach my $rawFile ($filename->get('rawimage', 'xrt', 'im', '*')) { unlink($gtifile); $xrtscreen->params({ infile => $rawFile, })->run; my $corrFile = $filename->corresponding('rawimage', 'corrimage', $rawFile); print "$rawFile => $corrFile\n"; $xrtimage->params({'infile' => $rawFile, 'outfile' => $corrFile, }) ->run(); } } ############################################################################# # Extract images from filtered event data ############################################################################# sub extract_images { my $self=shift; my $log =$self->log(); my $filename=$self->filename(); my $procpar =$self->procpar(); my $jobpar =$self->jobpar(); $log->entry("Extracting xrt images from event data"); ########################### # fire up the extractor ########################### my $extractor = Util::Extractor->new(); $extractor->verbose(2); $log->entry("Mode photon counting"); $extractor->instrument('xrt', 'phot'); ################################# # get a list of event files ################################## my $evt; foreach $evt ($filename->get('event', 'xrt', 'phot*', '*')) { $extractor->infiles($evt); my $img = $filename->corresponding("event", "skyimage", $evt); $log->entry("Extracting $img from $evt"); $extractor->coord_type('sky') ->outfile($img, "image") ->run(); } # end of loop over event files } # end if extract images method ################################################################################ # ################################################################################ sub plot_images { my $self = shift; my $log =$self->log(); my $filename=$self->filename(); my $procpar =$self->procpar(); my $jobpar =$self->jobpar(); my $max_image_dimen=1024; $log->entry("Plotting xrt images"); my $ximage = Util::Xanadu->new("ximage"); my $type; foreach $type ("detimage", "skyimage") { my $plot_type = $type; $plot_type =~ s/image/plot/; ############################### # loop over files of this type ############################### my $file; foreach $file ($filename->get($type, 'xrt', "*", "*")) { my $plot = $filename->corresponding($type, $plot_type, $file); ######################################## # determine if we need to bin the image ######################################## my $dimen = Util::FITSfile->new($file,0)->keyword("NAXIS1"); my $bin=1; for($bin=1; $max_image_dimen*$bin<$dimen; $bin++) {} $log->entry("Plotting $file in $plot binned by $bin"); my $grid=""; if($type =~ /^sky/ ) { $grid = "grid" } $ximage->script( "read/fits/rebin=$bin $file", "smooth", "cpd /vcps", "cey 2000", "disp", $grid, "scale", "exit" ); $ximage->run(); rename "pgplot.ps", $plot; } } } # end of plot_images method sub make_products { my $self = shift; my $log = $self->log(); my $filename= $self->filename(); my $procpar = $self->procpar(); my $jobpar = $self->jobpar(); $log->entry("making products"); my $producer = Util::HEAdas->new('xrtproducts') ->params({ outdir => '.', display => 'no', plotdevice => 'gif', mode => 'im', }) ->is_script(1); foreach my $skyFile ($filename->get('skyimage', 'xrt', 'im', '*')) { $producer->params({ infile => $skyFile, }) ->run; } } # end of make_products method