diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/chandra_update_xpeak2.sh | 311 | 
1 files changed, 0 insertions, 311 deletions
| diff --git a/scripts/chandra_update_xpeak2.sh b/scripts/chandra_update_xpeak2.sh deleted file mode 100755 index 6ab6d8c..0000000 --- a/scripts/chandra_update_xpeak2.sh +++ /dev/null @@ -1,311 +0,0 @@ -#!/bin/sh -# -unalias -a -export LC_COLLATE=C -## -## Take the `X-ray centroid' coordinate from region `sbprofile.reg' -## as the start location, then search for X-ray peak in a circle region -## of radius ${SEARCH_RADIUS} pixels centered on the X-ray centroid. -## After that the found X-ray peak is convert from physical coordinate to -## WCS coordinate and added/updated to the INFO json file. -## -## Note: The image on which the X-ray peak is to be searched is generated -## as following: -##     (1) cleaned event file (c7, c0-3) -##     (2) filter energy (${E_RANGE}) -##     (3) smooth with aconvolve -## -## Based on `chandra_update_xpeak.sh' -## -## Weitian LI <liweitianux@gmail.com> -## Created: 2015-11-22 -## -VERSION="v1.0" -UPDATED="2015-11-20" -## -## ChangeLogs: -## - -## error code {{{ -ERR_USG=1 -ERR_DIR=11 -ERR_EVT=12 -ERR_BKG=13 -ERR_REG=14 -ERR_INFO=15 -ERR_ASOL=21 -ERR_BPIX=22 -ERR_PBK=23 -ERR_MSK=24 -ERR_BKGTY=31 -ERR_SPEC=32 -ERR_DET=41 -ERR_ENG=42 -ERR_CIAO=100 -## error code }}} - -## usage, help {{{ -case "$1" in -    -[hH]*|--[hH]*) -        printf "usage:\n" -        printf "    `basename $0` evt=<evt_file> reg=<sbp_reg> basedir=<base_dir> info=<INFO.json> conv=<YES|no> update=<YES|no>\n" -        printf "\nversion:\n" -        printf "${VERSION}, ${UPDATED}\n" -        exit ${ERR_USG} -        ;; -esac -## usage, help }}} - -## default parameters {{{ -# default circle radius within which to search the X-ray peak -SEARCH_RADIUS=100 -# critical offset (in pixel) -OFFSET_CRIC=20 - -# energy range: 700-2000 eV -E_RANGE="700:2000" -# default `event file' which used to match `blanksky' files -DFT_EVT="`\ls evt2*c7*_clean.fits evt2*c0-3*_clean.fits 2> /dev/null`" -# default dir which contains `asols, asol.lis, ...' files -DFT_BASEDIR=".." -# default `radial region file' to extract surface brightness -DFT_SBP_REG="`\ls sbprofile.reg rspec.reg 2> /dev/null | head -n 1`" - -## howto find files in `basedir' -# default `asol.lis pattern' -DFT_ASOLIS_PAT="acis*asol?.lis" -# default INFO.json pattern -DFT_INFO_PAT="*_INFO.json" - -# aconvolve parameters -ACONV_KERNELSPEC="lib:gaus(2,3,1,3,3)" -ACONV_METHOD="fft" -## default parameters }}} - -## functions {{{ -# process commandline arguments -# cmdline arg 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 -} -## functions }}} - -## check CIAO init {{{ -if [ -z "${ASCDS_INSTALL}" ]; then -    printf "ERROR: CIAO NOT initialized\n" -    exit ${ERR_CIAO} -fi - -## XXX: heasoft's `pget' etc. tools conflict with some CIAO tools -printf "set \$PATH to avoid conflicts between HEAsoft and CIAO\n" -export PATH="${ASCDS_BIN}:${ASCDS_CONTRIB}:${PATH}" -## check CIAO }}} - -## parameters {{{ -# process cmdline args using `getopt_keyval' -getopt_keyval "$@" - -# check given parameters -# check evt file -if [ -r "${evt}" ]; then -    EVT=${evt} -elif [ -r "${DFT_EVT}" ]; then -    EVT=${DFT_EVT} -else -    read -p "clean evt2 file: " EVT -    if [ ! -r "${EVT}" ]; then -        printf "ERROR: cannot access given \`${EVT}' evt file\n" -        exit ${ERR_EVT} -    fi -fi -printf "## use evt file: \`${EVT}'\n" | ${TOLOG} -# check given region file(s) -if [ -r "${reg}" ]; then -    SBP_REG="${reg}" -elif [ -r "${DFT_SBP_REG}" ]; then -    SBP_REG=${DFT_SBP_REG} -else -    read -p "> surface brighness radial region file: " SBP_REG -    if [ ! -r "${SBP_REG}" ]; then -        printf "ERROR: cannot access given \`${SBP_REG}' region file\n" -        exit ${ERR_REG} -    fi -fi -printf "## use reg file(s): \`${SBP_REG}'\n" | ${TOLOG} -# check given dir -if [ -d "${basedir}" ]; then -    BASEDIR=${basedir} -elif [ -d "${DFT_BASEDIR}" ]; then -    BASEDIR=${DFT_BASEDIR} -else -    read -p "> basedir (contains asol files): " BASEDIR -    if [ ! -d "${BASEDIR}" ]; then -        printf "ERROR: given \`${BASEDIR}' NOT a directory\n" -        exit ${ERR_DIR} -    fi -fi -# remove the trailing '/' -BASEDIR=`echo ${BASEDIR} | sed 's/\/*$//'` -printf "## use basedir: \`${BASEDIR}'\n" | ${TOLOG} -# check INFO.json file -if [ ! -z "${info}" ] && [ -r "${BASEDIR}/${info}" ]; then -    INFO_JSON="${info}" -elif [ "`\ls ${BASEDIR}/${DFT_INFO_PAT} | wc -l`" -eq 1 ]; then -    INFO_JSON=`( cd ${BASEDIR} && \ls ${DFT_INFO_PAT} )` -else -    read -p "> info json file: " INFO_JSON -    if ! [ -r "${BASEDIR}/${INFO_JSON}" ]; then -        printf "ERROR: cannot access given \`${BASEDIR}/${INFO_JSON}' file\n" -        exit ${ERR_INFO} -    fi -fi -INFO_JSON=`readlink -f ${BASEDIR}/${INFO_JSON}` -printf "## use info json file: \`${INFO_JSON}'\n" -# update flag: whether to update xcentroid in the info.json file -if [ ! -z "${update}" ]; then -    case "${update}" in -        [nN][oO]|[fF]*) -            F_UPDATE="NO" -            ;; -        *) -            F_UPDATE="YES" -            ;; -    esac -else -    F_UPDATE="YES" -fi - -# convolve (optional) -if [ -z "${conv}" ]; then -    CONV="YES" -else -    case "${conv}" in -        [nN]*) -            CONV="NO" -            printf "## Do NOT apply \`aconvolve' !\n" -            ;; -        *) -            CONV="YES" -            printf "## apply \`aconvolve'\n" -            ;; -    esac -fi -## parameters }}} - -## prepare parameter files (pfiles) {{{ -CIAO_TOOLS="dmcopy dmstat aconvolve dmcoords" - -# Copy necessary pfiles for localized usage -for tool in ${CIAO_TOOLS}; do -    pfile=`paccess ${tool}` -    [ -n "${pfile}" ] && punlearn ${tool} && cp -Lvf ${pfile} . -done - -# Modify environment variable 'PFILES' to use local pfiles first -export PFILES="./:${PFILES}" -## pfiles }}} - -## main process {{{ -# Use previously generated `skyfov' -SKYFOV=`\ls *skyfov*.fits 2>/dev/null | head -n 1` - -# Extract chip(s) from evt filename -CHIP=`echo "${EVT}" | sed 's/^.*_c\(7\|0-3\)_.*$/\1/' | tr '-' ':'` - -# generate image -IMG="img_c`echo ${CHIP} | tr ':' '-'`_e`echo ${E_RANGE} | tr ':' '-'`.fits" -if [ -r "${IMG}" ]; then -    printf "use previously generated image: \`${IMG}'\n" -else -    printf "generate image: \`${IMG}' ...\n" -    punlearn dmcopy -    dmcopy infile="${EVT}[sky=region(${SKYFOV}[ccd_id=${CHIP}])][energy=${E_RANGE}][bin sky=::1]" outfile="${IMG}" clobber=yes -fi - -# aconvolve -if [ "${CONV}" = "YES" ]; then -    IMG_ACONV="${IMG%.fits}_aconv.fits" -    #if [ -r "${IMG_ACONV}" ]; then -    #    printf "use previously convolved image: \`${IMG_ACONV}'\n" -    #else -        printf "\`aconvolve' to smooth img: \`${IMG_ACONV}' ...\n" -        printf "## aconvolve: kernelspec=\"${ACONV_KERNELSPEC}\" method=\"${ACONV_METHOD}\"\n" -        punlearn aconvolve -        aconvolve infile="${IMG}" outfile="${IMG_ACONV}" kernelspec="${ACONV_KERNELSPEC}" method="${ACONV_METHOD}" clobber=yes -    #fi -else -    IMG_ACONV=${IMG} -fi - -# Get X-ray centroid coordinate from sbp region -printf "get (x,y) from ${SBP_REG}\n" -CNTRD_X=`\grep -iE '(pie|annulus)' ${SBP_REG} | head -n 1 | awk -F',' '{ print $1 }' | tr -d 'a-zA-Z() '` -CNTRD_Y=`\grep -iE '(pie|annulus)' ${SBP_REG} | head -n 1 | awk -F',' '{ print $2 }' | tr -d 'a-zA-Z() '` - -SEARCH_REGION="circle(${CNTRD_X},${CNTRD_Y},${SEARCH_RADIUS})" -# dmstat to find the maximum location -printf "\`dmstat' to find the peak ...\n" -punlearn dmstat -dmstat infile="${IMG_ACONV}[sky=${SEARCH_REGION}]" verbose=0 -PEAK_X=`pget dmstat out_max_loc | cut -d',' -f1` -PEAK_Y=`pget dmstat out_max_loc | cut -d',' -f2` - -# asolis -ASOLIS=`( cd ${BASEDIR} && \ls ${DFT_ASOLIS_PAT} 2> /dev/null )` - -# Use "dmcoords" to convert (x,y) to (ra,dec) -printf "\`dmcoords' to convert (x,y) to (ra,dec) ...\n" -punlearn dmcoords -dmcoords infile="${EVT}" asolfile="@${BASEDIR}/${ASOLIS}" option=sky x=${PEAK_X} y=${PEAK_Y} -PEAK_RA=`pget dmcoords ra` -PEAK_DEC=`pget dmcoords dec` - -# Calculate the offset between peak and centroid coordinate -OFFSET=`echo "scale=5; sqrt((${PEAK_X}-${CNTRD_X})^2 + (${PEAK_Y}-${CNTRD_Y})^2)" | bc -l` - -printf "## X-ray centroid (x,y): (${CNTRD_X},${CNTRD_Y})\n" -printf "## X-ray peak (x,y): (${PEAK_X},${PEAK_Y})\n" -printf "## X-ray peak (ra,dec): (${PEAK_RA},${PEAK_DEC})\n" -printf "## Offset (pixel): ${OFFSET}\n" -if [ `echo "${OFFSET} > ${OFFSET_CRIC}" | bc -l` -eq 1 ]; then -    printf "*** WARNING: large offset (> ${OFFSET_CRIC}) ***\n" -fi - -# Output X-ray peak coordinate to a region file -PEAK_PHY_REG="peak2_phy.reg" -[ -e "${PEAK_PHY_REG}" ] && mv -f ${PEAK_PHY_REG} ${PEAK_PHY_REG}_bak -echo "point(${PEAK_X},${PEAK_Y})" > ${PEAK_PHY_REG} -PEAK_WCS_REG="peak2_wcs.reg" -[ -e "${PEAK_WCS_REG}" ] && mv -f ${PEAK_WCS_REG} ${PEAK_WCS_REG}_bak -echo "point(${PEAK_RA},${PEAK_DEC})" > ${PEAK_WCS_REG} - -if [ "${F_UPDATE}" = "YES" ]; then -    cp -f ${INFO_JSON} ${INFO_JSON}_bak -    printf "update/add X-ray peak coordinate to info.json ...\n" -    if \grep -qE 'XPEAK2_(RA|DEC)' ${INFO_JSON}; then -        printf "update ...\n" -        sed -i'' "s/XPEAK2_RA.*$/XPEAK2_RA\":\ \"${PEAK_RA}\",/" ${INFO_JSON} -        sed -i'' "s/XPEAK2_DEC.*$/XPEAK2_DEC\":\ \"${PEAK_DEC}\",/" ${INFO_JSON} -        sed -i'' "s/XPEAK2_XCNTRD_dist.*$/XPEAK2_XCNTRD_dist\ (pix)\":\ \"${OFFSET}\",/" ${INFO_JSON} -    else -        printf "add ...\n" -        sed -i'' "/\"Dec\.\"/ a\ -\ \ \ \ \"XPEAK2_XCNTRD_dist\ (pix)\": \"${OFFSET}\"," ${INFO_JSON} -        sed -i'' "/\"Dec\.\"/ a\ -\ \ \ \ \"XPEAK2_DEC\": \"${PEAK_DEC}\"," ${INFO_JSON} -        sed -i'' "/\"Dec\.\"/ a\ -\ \ \ \ \"XPEAK2_RA\": \"${PEAK_RA}\"," ${INFO_JSON} -    fi -fi -## main }}} - -exit 0 - | 
