diff options
Diffstat (limited to 'scripts/ciao_fill_sources.sh')
-rwxr-xr-x | scripts/ciao_fill_sources.sh | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/scripts/ciao_fill_sources.sh b/scripts/ciao_fill_sources.sh new file mode 100755 index 0000000..50c00f0 --- /dev/null +++ b/scripts/ciao_fill_sources.sh @@ -0,0 +1,182 @@ +#!/bin/sh +# +# Fill the detected source regions by sampling from their surrounding +# regions, using CIAO `roi' and `dmfilth'. +# NOTE: The `dmfilth' only operates on the FITS image, NOT event table. +# +# References: +# [1] An Image of Diffuse Emission - CIAO +# http://cxc.harvard.edu/ciao/threads/diffuse_emission/ +# +# +# Aaron LI +# Created: 2016-04-11 +UPDATED="2016-04-11" + + +usage() { + echo "usage:" + echo " `basename $0` evt=<evt.fits> outfile=<filled_img> erange=<elow:ehigh> reg=<sources.reg> repro=<repro_dir_relapath>" + echo "" + echo "version: ${UPDATED}" +} + +# process commandline arguments of format: `KEY=VALUE' +getopt_keyval() { + until [ -z "$1" ] + do + _key=${1%%=*} # extract key + _val=${1#*=} # extract value + _keyval="${_key}=\"${_val}\"" + echo "## getopt: eval '${_keyval}'" + eval ${_keyval} + shift # shift, process next one + done + unset _key _val _keyval +} + +# set CIAO pfiles +# syntax: set_pfiles tool1 tool2 ... +set_pfiles() { + while [ ! -z "$1" ]; do + _tool="$1" + shift + _pfile=`paccess ${_tool}` + [ -n "${_pfile}" ] && punlearn ${_tool} && cp -Lvf ${_pfile} . + done + # Modify environment variable 'PFILES' to use local pfiles first + export PFILES="./:${PFILES}" + unset _tool _pfile +} + +# set arguments/variables +# syntax: set_variable VAR_NAME default_value cmdline_value +set_variable() { + _var="$1" + _default="$2" + _cmd="$3" + if [ ! -z "${_cmd}" ]; then + _value="${_cmd}" + elif [ ! -z "${_default}" ]; then + _value="${_default}" + else + echo "ERROR: variable '${_var}' get none value" + exit 11 + fi + eval "${_var}=${_value}" + unset _var _default _cmd _value +} + +# syntax: set_variable VAR_NAME default_ls_pattern cmdline_value +set_variable_pattern() { + _default_pat="$2" + if [ `\ls ${_default_pat} 2>/dev/null | wc -l` -eq 0 ]; then + echo "ERROR: ls pattern '${_default_pat}' not found" + exit 21 + elif [ `\ls ${_default_pat} 2>/dev/null | wc -l` -eq 1 ]; then + _default="`\ls ${_default_pat} 2>/dev/null`" + set_variable "$1" "${_default}" "$3" + else + echo "ERROR: ls pattern '${_default_pat}' found more than 1 values" + exit 22 + fi + unset _default_pat _default +} + +# determine the ACIS type: whether "S" or "I" +get_acis_type() { + punlearn dmkeypar + _detnam=`dmkeypar "$1" DETNAM echo=yes` + if echo "${_detnam}" | \grep -q 'ACIS-0123'; then + echo "I" + elif echo "${_detnam}" | \grep -q 'ACIS-[0-6]*7'; then + echo "S" + else + printf "ERROR: unknown detector type: ${DETNAM}\n" + exit 31 + fi + unset _detnam +} + + +case "$1" in + -[hH]*|--[hH]*) + usage + exit 1 + ;; +esac + +# arguments +getopt_keyval "$@" +set_variable_pattern EVT "evt2_c7_clean.fits evt2_c0-3_clean.fits" ${evt} +set_variable ERANGE "700:7000" ${erange} +ROOTNAME="${EVT%_clean.fits}_e`echo ${ERANGE} | tr ':' '-'`" +ROOTNAME="${ROOTNAME#evt2_}" +set_variable OUTFILE "img_${ROOTNAME}_fill.fits" ${outfile} +set_variable_pattern REG "celld_evt2_c7.reg celld_evt2_c0-3.reg" ${reg} +set_variable REPRO ".." ${repro} + +set_pfiles dmcopy dmkeypar dmmakereg roi dmfilth + +# FoV +ln -svf ${REPRO}/acisf*_fov1.fits . +FOV=`\ls acisf*_fov1.fits` + +# Filter energy +EVT_E="evt2_${ROOTNAME}.fits" +if [ ! -e "${EVT_E}" ]; then + echo "Filter by energy range ..." + punlearn dmcopy + dmcopy infile="${EVT}[energy=${ERANGE}]" outfile=${EVT_E} +fi + +# Make image +IMG="img_${ROOTNAME}.fits" +if [ ! -e "${IMG}" ]; then + echo "Make FITS image ..." + ACIS_TYPE=`get_acis_type ${EVT_E}` + if [ "${ACIS_TYPE}" = "I" ]; then + CCD=0:3 + else + CCD=7 + fi + punlearn dmcopy + dmcopy infile="${EVT_E}[sky=region(${FOV}[ccd_id=${CCD}])][bin sky=1]" \ + outfile=${IMG} +fi + +# Convert ASCII region to FITS format +echo "Convert region to FITS format ..." +REG_FITS="${REG%.reg}.fits" +punlearn dmmakereg +dmmakereg region="region(${REG})" outfile="${REG_FITS}" clobber=yes + +# Determine the background regions for each source +echo "Determine the background regions for each source ..." +ROI_TMP_DIR="_tmp_roi" +[ -d "${ROI_TMP_DIR}" ] && rm -rf ${ROI_TMP_DIR} +mkdir ${ROI_TMP_DIR} +punlearn roi +roi infile="${REG_FITS}" outsrcfile="${ROI_TMP_DIR}/src_%d.fits" \ + fovregion="region(${FOV})" streakregion="" bkgfactor=0.5 \ + radiusmode=mul bkgradius=3 clobber=yes + +# Combine all the background regions +echo "Combine all regions ..." +REG_FILL_ROOT="fill" +REG_FILL_SRC="${REG_FILL_ROOT}.src.reg" +REG_FILL_BKG="${REG_FILL_ROOT}.bg.reg" +REG_FILL_BKG2="${REG_FILL_ROOT}.bg.fits" +splitroi "${ROI_TMP_DIR}/src_*.fits" ${REG_FILL_ROOT} +punlearn dmmakereg +dmmakereg region="region(${REG_FILL_BKG})" \ + outfile=${REG_FILL_BKG2} clobber=yes + +# Fill the source regions using `dmfilth' +echo "Fill the source regions ..." +punlearn dmfilth +dmfilth infile=${IMG} outfile=${OUTFILE} method=POISSON \ + srclist="@${REG_FILL_SRC}" bkglist="@${REG_FILL_BKG}" clobber=yes + +rm -rf ${ROI_TMP_DIR} + |