#!/usr/bin/perl -w
## NAME: eimageget
# VERSION: 0.5
#
# Developer: Richard Sturm, Michael Freyberg MPE Garching
#
################################################################################
use 5.005; # required by SAS (binary) installation
use English;
use Getopt::Long;
use File::Path;
use Cwd;
use strict;
#use DAL;
use SAS;
my $line_plusplus=" ";
#
# Set the verbosity (verbose: only 1/0 setting)
#
my $verbose = (not exists $ENV{'SAS_VERBOSITY'} or $ENV{'SAS_VERBOSITY'} > 0) ;
my $tverbose = 1 ;
my $verbosity = 4 ;
if (exists $ENV{'SAS_VERBOSITY'} ) {$verbosity = $ENV{'SAS_VERBOSITY'} };
SAS::message($SAS::AppMsg, $SAS::NoisyMsg, "Verbosity = $verbosity");
#
# Define default ODF/data directory
#
my $indir=""; my $sumpath=""; my $ep=0;
if ( exists $ENV{'SAS_ODF'}) {$indir = $ENV{'SAS_ODF'}};
my $TASK_NAME="eimageget"; #
my $TASK_VERSION="0.5"; #
# set default values for all parameter variables
my $evtfile=''; # input event file
my $ootfile=''; # input oot event file
my $attfile=''; # input att file
my $fwcfile=''; # input fwc event file
my $gtifile=''; # input gti file
my $withemtaglenoise=1; # remove noisy MOS ccds?
my $withexposure=1; # calculate exposure maps (0/1/yes/no/...)
my $withfwcimages=1; # allows to turn off the fwc-image creation
my $withwindowmode=0; # allows to include large/small window observations, however no fwc-images are created for these CCDs!
my $pimin='200 500 1000 2000 4500'; # minimum PI for each energy band
my $pimax='500 1000 2000 4500 12000'; # maximum PI for each energy band
my $patmin=''; # minimum PATTERN for each energy band (at the moment default is set in the bash script)
my $patmax=''; # maximum PATTERN for each energy band (at the moment default is set in the bash script)
my $flag='' ; # FLAG for image selection (at the moment default is set in the bash script)
my $flagout='' ; # FLAG for selection of events out of the FoV (at the moment default is set in the bash script)
my $withbadpixupdate=1; # update bad pixels to be the same in all eventfiles (0/1/yes/no/...)
my $withmask=1; # calculate mask (0/1/yes/no/...)
my $threshold1=0.01; # emask parameter
my $threshold2=0.5; # emask parameter
my $ximagemin=1; # evselect parameter
my $ximagemax=640; # evselect parameter
my $yimagemin=1; # evselect parameter
my $yimagemax=640; # evselect parameter
my $imagebinning='binSize'; # evselect parameter
my $ximagebinsize=40; # evselect parameter
my $yimagebinsize=40; # evselect parameter
my $ximagesize=600; # evselect parameter
my $yimagesize=600; # evselect parameter
my $withxranges=0; # evselect parameter
my $withyranges=0; # evselect parameter
my $squarepixels=1; # evselect parameter
my $raimagecenter=0; # evselect parameter
my $decimagecenter=0; # evselect parameter
my $withcelestialcenter=0; # evselect parameter
#note: imagedatatype is not used, since images (int)
# and scaled images (float) should have different format
#my $imagedatatype=Real64; # evselect parameter
#my $withimagedatatype=0; # evselect parameter
my $withattcalc=0; # run attcalc (0/1/yes/no/...)
my $nominalra=''; # attcalc parameter
my $nominaldec=''; # attcalc parameter
my $imagesize=''; # attcalc parameter
&getParams("evtfile", "ootfile", "attfile", "fwcfile", "gtifile",
"withemtaglenoise", "withexposure", "withmask", "threshold1", "threshold2", "pimin", "pimax", "patmin", "patmax", "flag", "flagout",
"nominalra", "nominaldec", "imagesize", "withbadpixupdate", "withfwcimages", "withwindowmode",
"ximagemin", "ximagemax", "yimagemin", "yimagemax", "imagebinning", "ximagebinsize", "yimagebinsize", "ximagesize", "yimagesize",
"withxranges", "withyranges", "squarepixels", "withattcalc", "raimagecenter", "decimagecenter", "withcelestialcenter",
$evtfile, $ootfile, $attfile, $fwcfile, $gtifile,
$withemtaglenoise, $withexposure, $withmask, $threshold1, $threshold2, $pimin, $pimax, $patmin, $patmax, $flag, $flagout,
$nominalra, $nominaldec, $imagesize, $withbadpixupdate, $withfwcimages, $withwindowmode,
$ximagemin, $ximagemax, $yimagemin, $yimagemax, $imagebinning, $ximagebinsize, $yimagebinsize, $ximagesize, $yimagesize,
$withxranges, $withyranges, $squarepixels, $withattcalc, $raimagecenter, $decimagecenter, $withcelestialcenter
);
# check boolean variables: convert to unique values 0/1
&getBoolean($withemtaglenoise,$withemtaglenoise);
&getBoolean($withxranges,$withxranges);
&getBoolean($withyranges,$withyranges);
&getBoolean($withexposure,$withexposure);
&getBoolean($withmask,$withmask);
&getBoolean($withattcalc,$withattcalc);
&getBoolean($withbadpixupdate,$withbadpixupdate);
&getBoolean($withfwcimages,$withfwcimages);
&getBoolean($withwindowmode,$withwindowmode);
my $im = "'updateexposure=yes writedss=yes withimageset=true xcolumn=X ycolumn=Y squarepixels=$squarepixels imagebinning=$imagebinning ximagebinsize=$ximagebinsize yimagebinsize=$yimagebinsize ximagesize=$ximagesize yimagesize=$yimagesize ximagemin=$ximagemin yimagemin=$yimagemin ximagemax=$ximagemax yimagemax=$yimagemax withxranges=$withxranges withyranges=$withyranges raimagecenter=$raimagecenter decimagecenter=$decimagecenter withcelestialcenter=$withcelestialcenter'";
my $ccom = "/bin/bash eimageget.sh '$evtfile' '$ootfile' '$attfile' '$fwcfile' '$gtifile' " .
"$withemtaglenoise $withexposure $withmask $threshold1 $threshold2 '$pimin' '$pimax' '$patmin' '$patmax' '$flag' '$flagout' " .
"$withattcalc '$nominalra' '$nominaldec' '$imagesize' '$withbadpixupdate' '$withfwcimages' '$withwindowmode' " .
"$im " ;
###&sendCommand($ccom);
system $ccom;
#
#==============================================================================
# getParams : command line parameter parser
#
sub getParams {
my $nparams = ($#_ + 1) / 2 ;
# SAS::message($SAS::AppMsg, $SAS::SparseMsg, "NPARAMS = $nparams \n");
my $quotedparam;
# Add blank to treat first and last parameters like all others (and like in emchain ;-)
### @ARGV=" " . "@ARGV" . " " ;
my $line=" " . "@ARGV" . " " ;
### SAS::message($SAS::AppMsg, $SAS::SparseMsg, "ARGV = !@ARGV! \n");
## $line =~ s/\"//g;
my $linepart1=""; my $linepart2=""; my $linesum="";
my $param=""; my $strcur=""; my $shortline=""; my @save;
my $ll=0; my $pp=0; my $ppp=0; my $ii=0; my $kk=0; my $ap=0; my $ep=0;
# if ( @save = grep /^pimin=/ , @ARGV) {
# $pimin="$save[-1]";
# $pimin =~ s/^.*=//;
# };
#
# Look for '--v' or '-v': print version information
# Look for '--p' or '-p': print parameter information
# Look for '--h' or '-h': print parameter information
# else: determine parameters
#
if ( grep /^--?v/, @ARGV) { getVersion() ; exit; } ;
if ( grep /^--?p/, @ARGV) { showSyntax() ; exit; } ;
if ( grep /^--?h/, @ARGV) { showSyntax() ; exit; } ;
if ( grep /^--?m/, @ARGV) { showSupported() ; exit; } ;
# if ( grep /^--?d/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?d\b/, @ARGV) { system ("sasdialog eimageget @ARGV") ; exit; } ;
if ( grep /^--?a/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?c/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?f/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?i/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?t/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?V/, @ARGV) { showSupported() ; exit; } ;
if ( grep /^--?w/, @ARGV) { showSupported() ; exit; } ;
for ($kk=0; $kk<$nparams; $kk++){
$param = $_[$kk] . "=";
$ii = index($line,$param);
# if ( ($param eq " exposure=") && ($ep eq 11) ) {$ii = -1};
$ap = 0 ;
if ($param eq "pimin=") {$ap = 1};
if ($param eq "pimax=") {$ap = 1};
if ($param eq "patmin=") {$ap = 1};
if ($param eq "patmax=") {$ap = 1};
if ($param eq "flag=") {$ap = 2};
if ($param eq "flagout=") {$ap = 2};
# print "PARAM: $param, LINE = $line, II = $ii, AP = $ap \n";
# SAS::message($SAS::AppMsg, $SAS::SparseMsg, "\n II = $ii , PARAM = $param , EP = $ep , AP = $ap ");
if ( $ii != -1) {
if ($ap == 0) {
$pp = length("$param") + $ii;
$ppp = length("$line");
## print "PP = $pp, LEN(LINE) = $ppp \n";
$shortline = substr($line,$pp,length($line)-$pp);
$ll = index($shortline," ");
if ( $ll == -1 ) { $ll = length($shortline) };
$quotedparam = substr($shortline,0,$ll);
$quotedparam =~ s/\"//g;
$_[$kk+$nparams] = $quotedparam;
# print "$param: $_[$kk+$nparams]\n";
};
if ($ap == 1) {
$pp = length("$param") + $ii;
$ppp = length("$line");
$shortline = substr($line,$pp,length($line)-$pp);
$ll = index($shortline,"=");
if ( $ll == -1 ) { $ll = length($shortline) };
$shortline = substr($shortline,0,$ll);
$ll = index($shortline,"-");
if ( $ll == -1 ) { $ll = length($shortline) };
$shortline = substr($shortline,0,$ll);
$ll = rindex($shortline," ");
if ( $ll == -1 ) { $ll = length($shortline) };
$shortline = substr($shortline,0,$ll);
$quotedparam = substr($shortline,0,$ll);
$quotedparam =~ s/\"//g;
$quotedparam =~ s/\'//g;
$_[$kk+$nparams] = $quotedparam;
};
if ($ap == 2) {
foreach(@ARGV){
$ii = index($_,$param);
if ( $ii == 0 ) {
$quotedparam = substr($_,length($param),length($_)-length($param));
$quotedparam =~ s/\"//g;
$quotedparam =~ s/\'//g;
$_[$kk+$nparams] = $quotedparam;
};
}
};
### if ($verbose) {
### if ($verbosity > 4) {
### $linepart1 = "Command line parameter: ";
### if ($ap==0) {$linepart2 = " $_[$kk] = $_[$kk+$nparams]"}
### else {$linepart2 = " $_[$kk] = '$_[$kk+$nparams]'"};
### $linesum = $linepart1 . $linepart2;
### SAS::message($SAS::AppMsg, $SAS::SparseMsg, $linesum);
### }
### }
}
### else {
### if ($verbosity > 4) {
### $linesum = "Default parameter values: $_[$kk] = $_[$kk+$nparams]";
### SAS::message($SAS::AppMsg, $SAS::SparseMsg, $linesum);
### };
### };
};
# exit ;
}
#
#==============================================================================
# getBoolean : convert input variable to unique values 0(false) or 1(true)
#
sub getBoolean {
my $tmpvar = substr($_[0], 0, 1);
if ( $tmpvar =~ /[1YyTt]/ ) { $_[1] = 1 }
else { $_[1] = 0};
}
#
#==============================================================================
# getVersion : get the version number of epchain, and of the constituents
#
sub getVersion {
my $epchain_msg = -$SAS::AppMsg;
my $ccom = "" ; my $version = "" ; my $release = "";
my $vfile = $ENV{'SAS_DIR'} . "/packages/eimageget/VERSION" ;
if ( ! -e $vfile ) {
SAS::message($SAS::AppMsg, $SAS::SparseMsg, "Not found: $vfile");
SAS::message($SAS::AppMsg, $SAS::SparseMsg, "Take version from task.");
$version = $TASK_VERSION }
else {
# $ccom = "cat `saslocate packages/epchain/VERSION` /dev/null" ;
# chomp($version = `$ccom`) ;
chomp($version = `cat $vfile`);
};
$vfile = $ENV{'SAS_DIR'} . "/RELEASE" ;
if ( ! -e $vfile ) {
$release = "" }
else {
# $ccom = "cat `saslocate RELEASE`" ;
# $ccom = "cat $vfile";
chomp($release = `cat $vfile`) ;
};
SAS::message($SAS::AppMsg, $epchain_msg, "");
SAS::message($SAS::AppMsg, $epchain_msg, "eimageget (eimageget-$version) [$release]");
#
# Write the version of the constituent tasks
#
SAS::message($SAS::AppMsg, $epchain_msg, "");
SAS::message($SAS::AppMsg, $epchain_msg, "You are using the following constituent task versions :");
SAS::message($SAS::AppMsg, $epchain_msg, "");
foreach my $task ("attcalc","evselect","emtaglenoise",
"eexpmap") {
# $ccom = $task . " -v \n" ;
$ccom = $task . " -v " ;
chomp(my $message = `$ccom`) ;
# $message = `$ccom` ;
SAS::message($SAS::AppMsg, $epchain_msg, $message);
}
SAS::message($SAS::AppMsg, $epchain_msg, "");
}
#
#==============================================================================
# show supported and unsupported options
sub showSupported {
my $epchain_msg = -$SAS::AppMsg;
SAS::message($SAS::AppMsg, $epchain_msg, $line_plusplus);
SAS::message($SAS::AppMsg, $epchain_msg, "Supported options:");
SAS::message($SAS::AppMsg, $epchain_msg, " --v : show version of eimageget and constituent tasks");
SAS::message($SAS::AppMsg, $epchain_msg, " --p : show supported parameters and default values");
SAS::message($SAS::AppMsg, $epchain_msg, " --h : show supported parameters and default values");
SAS::message($SAS::AppMsg, $epchain_msg, " --d : dialog GUI");
SAS::message($SAS::AppMsg, $epchain_msg, "Unsupported options (use e.g. environment variables instead):");
SAS::message($SAS::AppMsg, $epchain_msg, " --a : ccfpath");
SAS::message($SAS::AppMsg, $epchain_msg, " --c : noclobber");
SAS::message($SAS::AppMsg, $epchain_msg, " --f : ccffiles");
SAS::message($SAS::AppMsg, $epchain_msg, " --i : cifname");
SAS::message($SAS::AppMsg, $epchain_msg, " --m : manual");
SAS::message($SAS::AppMsg, $epchain_msg, " --t : trace");
SAS::message($SAS::AppMsg, $epchain_msg, " --V : verbosity level");
SAS::message($SAS::AppMsg, $epchain_msg, " --w : warning");
SAS::message($SAS::AppMsg, $epchain_msg, "");
$ENV{'SAS_VERBOSITY'}=$verbosity;
}
#
#==============================================================================
# in case of early error show the full syntax,
# also for options "--p" and "-p" and "--h" and "-h"
#
sub showSyntax {
if ( $indir eq ""){
if ( not exists $ENV{'SAS_ODF'}) {}
else { $indir = $ENV{'SAS_ODF'} }
};
my $epchain_msg = -$SAS::AppMsg;
SAS::message($SAS::AppMsg, $epchain_msg, $line_plusplus);
SAS::message($SAS::AppMsg, $epchain_msg, "evtfile= [$evtfile]");
SAS::message($SAS::AppMsg, $epchain_msg, "ootfile= [$ootfile]");
SAS::message($SAS::AppMsg, $epchain_msg, "attfile= [$attfile]");
SAS::message($SAS::AppMsg, $epchain_msg, "fwcfileb= [$fwcfile]");
SAS::message($SAS::AppMsg, $epchain_msg, "gtifile= [$gtifile]");
SAS::message($SAS::AppMsg, $epchain_msg, "pimin; [$pimin]");
SAS::message($SAS::AppMsg, $epchain_msg, "pimax; [$pimax]");
SAS::message($SAS::AppMsg, $epchain_msg, "patmin; [$patmin]");
SAS::message($SAS::AppMsg, $epchain_msg, "patmax; [$patmax]");
SAS::message($SAS::AppMsg, $epchain_msg, "flag; [$flag]");
SAS::message($SAS::AppMsg, $epchain_msg, "flagout; [$flagout]");
SAS::message($SAS::AppMsg, $epchain_msg, "withemtaglenoise=; [$withemtaglenoise]");
SAS::message($SAS::AppMsg, $epchain_msg, "withexposure=; [$withexposure]");
SAS::message($SAS::AppMsg, $epchain_msg, "withbadpixupdate=; [$withbadpixupdate]");
SAS::message($SAS::AppMsg, $epchain_msg, "withattcalc=; [$withattcalc]");
SAS::message($SAS::AppMsg, $epchain_msg, "withmask=; [$withmask]");
SAS::message($SAS::AppMsg, $epchain_msg, "withfwcimages=; [$withfwcimages]");
SAS::message($SAS::AppMsg, $epchain_msg, "withwindowmode=; [$withwindowmode]");
SAS::message($SAS::AppMsg, $epchain_msg, "---- parameters passed to evselect ----");
SAS::message($SAS::AppMsg, $epchain_msg, "ximagemin; [$ximagemin]");
SAS::message($SAS::AppMsg, $epchain_msg, "ximagemax; [$ximagemax]");
SAS::message($SAS::AppMsg, $epchain_msg, "yimagemin; [$yimagemin]");
SAS::message($SAS::AppMsg, $epchain_msg, "yimagemax; [$yimagemax]");
SAS::message($SAS::AppMsg, $epchain_msg, "imagebinning; [$imagebinning]");
SAS::message($SAS::AppMsg, $epchain_msg, "ximagebinsize; [$ximagebinsize]");
SAS::message($SAS::AppMsg, $epchain_msg, "yimagebinsize; [$yimagebinsize]");
SAS::message($SAS::AppMsg, $epchain_msg, "ximagesize; [$ximagesize]");
SAS::message($SAS::AppMsg, $epchain_msg, "yimagesize; [$yimagesize]");
SAS::message($SAS::AppMsg, $epchain_msg, "withxranges; [$withxranges]");
SAS::message($SAS::AppMsg, $epchain_msg, "withyranges; [$withyranges]");
SAS::message($SAS::AppMsg, $epchain_msg, "squarepixels; [$squarepixels]");
SAS::message($SAS::AppMsg, $epchain_msg, "withcelestialcenter; [$withcelestialcenter]");
SAS::message($SAS::AppMsg, $epchain_msg, "raimagecenter; [$raimagecenter]");
SAS::message($SAS::AppMsg, $epchain_msg, "decimagecenter; [$decimagecenter]");
SAS::message($SAS::AppMsg, $epchain_msg, "---- parameters passed to attcalc ----");
SAS::message($SAS::AppMsg, $epchain_msg, "nominalra; [$nominalra]");
SAS::message($SAS::AppMsg, $epchain_msg, "nominaldec; [$nominaldec]");
SAS::message($SAS::AppMsg, $epchain_msg, "imagesize; [$imagesize]");
SAS::message($SAS::AppMsg, $epchain_msg, "---- parameters passed to emask ----");
SAS::message($SAS::AppMsg, $epchain_msg, "threshold1; [$threshold1]");
SAS::message($SAS::AppMsg, $epchain_msg, "threshold2; [$threshold2]");
#
SAS::message($SAS::AppMsg, $epchain_msg, "");
}