diff options
| author | Weitian LI <liweitianux@gmail.com> | 2014-06-18 22:20:59 +0800 | 
|---|---|---|
| committer | Weitian LI <liweitianux@gmail.com> | 2014-06-18 22:20:59 +0800 | 
| commit | e3923265d0d6949407a83726e9a9bd5d97079221 (patch) | |
| tree | 9afd8520595f4cf80815b9bccfc3dcf2879ebe47 /scripts/chandra_xpeak_coord.sh | |
| download | chandra-acis-analysis-e3923265d0d6949407a83726e9a9bd5d97079221.tar.bz2 | |
Initial commit
Added files:
  * mass_profile: developed by Junhua GU, modified by Weitian LI
  * opt_utilities: developed by Junhua GU
  * tools/cosmo_calc: originated from 'calc_distance', modified
  * scripts: scripts used to process Chandra ACIS data
  * files: useful files used in processing
  * HOWTO_chandra_acis_process.txt
  * README.md
Diffstat (limited to 'scripts/chandra_xpeak_coord.sh')
| -rwxr-xr-x | scripts/chandra_xpeak_coord.sh | 222 | 
1 files changed, 222 insertions, 0 deletions
| diff --git a/scripts/chandra_xpeak_coord.sh b/scripts/chandra_xpeak_coord.sh new file mode 100755 index 0000000..8b0644a --- /dev/null +++ b/scripts/chandra_xpeak_coord.sh @@ -0,0 +1,222 @@ +#!/bin/sh +# +########################################################### +## get the coord of the X-ray peak in given evt file     ## +## 1) given `evt_clean' file                             ## +## 2) `aconvolve' and then `dmstat'                      ## +## 3) `dmcoords' convert `sky x, y' to `ra, dec'         ## +##                                                       ## +## NOTES:                                                ## +## support ACIS-I(chip: 0-3) and ACIS-S(chip: 7)         ## +## determine by check `DETNAM' for chip number           ## +## if `DETNAM' has `0123', then `ACIS-I'                 ## +## if `DETNAM' has `7', then `ACIS-S'                    ## +##                                                       ## +## LIweitiaNux <liweitianux@gmail.com>                   ## +## November 8, 2012                                      ## +########################################################### + +########################################################### +## ChangeLogs: +## v1.1, 2012/11/08, LIweitiaNux +##   get x-ray peak coord from given region file +########################################################### + +## about, used in `usage' {{{ +VERSION="v1.1" +UPDATE="2012-11-08" +## about }}} + +## error code {{{ +ERR_USG=1 +ERR_DIR=11 +ERR_EVT=12 +ERR_BKG=13 +ERR_REG=14 +ERR_ASOL=21 +ERR_BPIX=22 +ERR_PBK=23 +ERR_MSK=24 +ERR_BKGTY=31 +ERR_SPEC=32 +ERR_DET=41 +## error code }}} + +## usage, help {{{ +case "$1" in +    -[hH]*|--[hH]*) +        printf "usage:\n" +        printf "    `basename $0` evt=<evt_cl> asol=<asol> [ reg=<reg> chip=<chip> ]\n" +        printf "\nversion:\n" +        printf "${VERSION}, ${UPDATE}\n" +        exit ${ERR_USG} +        ;; +esac +## usage, help }}} + +## default parameters {{{ +# default `evt clean file' +DFT_EVT="`ls evt*clean.fits *clean*evt*.fits 2> /dev/null | head -n 1`" +# default `asol file' +DFT_ASOL="`ls ../pcadf*_asol1.fits pcadf*_asol1.fits 2> /dev/null | head -n 1`" +# default region file +DFT_REG="`ls sbprofile.reg rspec.reg 2> /dev/null | head -n 1`" +## 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 }}} + +## 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 "evt clean 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" + +# asol +if [ ! -z "${asol}" ]; then +    ASOL=${asol} +elif [ -r "${DFT_ASOL}" ]; then +    ASOL=${DFT_ASOL} +else +    read -p "asol file: " ASOL +    if ! [ -r "${ASOL}" ]; then +        printf "ERROR: cannot access given \`${ASOL}' asol file\n" +        exit ${ERR_ASOL} +    fi +fi +printf "## use asol file: \`${ASOL}'\n" + +# region file (optional) +if [ ! -z "${reg}" ]; then +    REG=${reg} +else +    REG=${DFT_REG} +fi +printf "## use reg file: \`${REG}'\n" + +# determine chip +if [ ! -z "${chip}" ]; then +    CHIP="${chip}" +    printf "## use chip: \`${CHIP}'\n" +else +    # determine chip by ACIS type +    punlearn dmkeypar +    DETNAM=`dmkeypar ${EVT} DETNAM echo=yes` +    if echo ${DETNAM} | grep -q 'ACIS-0123'; then +        printf "## \`DETNAM' (${DETNAM}) has chips 0123\n" +        printf "## ACIS-I\n" +        ACIS_TYPE="ACIS-I" +        CHIP="0:3" +    elif echo ${DETNAM} | grep -q 'ACIS-[0-6]*7'; then +        printf "## \`DETNAM' (${DETNAM}) has chip 7\n" +        printf "## ACIS-S\n" +        ACIS_TYPE="ACIS-S" +        CHIP="7" +    else +        printf "ERROR: unknown detector type: ${DETNAM}\n" +        exit ${ERR_DET} +    fi +fi +## parameters }}} + +## main part {{{ +# generate `skyfov' +SKYFOV="_skyfov.fits" +printf "generate skyfov: \`${SKYFOV}' ...\n" +punlearn skyfov +skyfov infile="${EVT}" outfile="${SKYFOV}" clobber=yes + +# generate image +# energy range: 500-7000 eV +E_RANGE="500:7000" +IMG="img_c`echo ${CHIP} | tr ':' '-'`_e`echo ${E_RANGE} | tr ':' '-'`.fits" +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 + +# aconvolve +IMG_ACONV="${IMG%.fits}_aconv.fits" +KERNELSPEC="lib:gaus(2,5,1,10,10)" +METHOD="fft" +printf "\`aconvolve' to smooth img: \`${IMG_ACONV}' ...\n" +printf "## aconvolve: kernelspec=\"${KERNELSPEC}\" method=\"${METHOD}\"\n" +punlearn aconvolve +aconvolve infile="${IMG}" outfile="${IMG_ACONV}" kernelspec="${KERNELSPEC}" method="${METHOD}" clobber=yes + +# dmstat +printf "\`dmstat' to analyze the img ...\n" +punlearn dmstat +dmstat infile="${IMG_ACONV}" +MAX_X=`pget dmstat out_max_loc | cut -d',' -f1` +MAX_Y=`pget dmstat out_max_loc | cut -d',' -f2` +# dmcoords to convert (x,y) to (ra,dec) +printf "\`dmcoords' to convert (x,y) to (ra,dec) ...\n" +punlearn dmcoords +dmcoords infile="${EVT}" asolfile="${ASOL}" option=sky x=${MAX_X} y=${MAX_Y} +MAX_RA=`pget dmcoords ra` +MAX_DEC=`pget dmcoords dec` + +# output results +PHY_REG="peak_phy.reg" +WCS_REG="peak_wcs.reg" +[ -e "${PHY_REG}" ] && mv -f ${PHY_REG} ${PHY_REG}_bak +[ -e "${WCS_REG}" ] && mv -f ${WCS_REG} ${WCS_REG}_bak +echo "point(${MAX_X},${MAX_Y})" > ${PHY_REG} +echo "point(${MAX_RA},${MAX_DEC})" > ${WCS_REG} + +printf "\n" +printf "++++++++++++++++++++++++++++++++++++++++++++\n" +printf "X-ray peak coordinates:\n" +printf "via dmstat:\n" +printf "  (X,Y):      (${MAX_X},${MAX_Y})\n" +printf "  (RA,DEC):   (${MAX_RA},${MAX_DEC})\n" + +## region file based {{{ +if [ -r "${REG}" ]; then +    MAX_X2=`grep -iE '(pie|annulus)' ${REG} | head -n 1 | tr -d 'a-zA-Z()' | awk -F',' '{ print $1 }'` +    MAX_Y2=`grep -iE '(pie|annulus)' ${REG} | head -n 1 | tr -d 'a-zA-Z()' | awk -F',' '{ print $2 }'` +    punlearn dmcoords +    dmcoords infile="${EVT}" asolfile="${ASOL}" option=sky x=${MAX_X2} y=${MAX_Y2} +    MAX_RA2=`pget dmcoords ra` +    MAX_DEC2=`pget dmcoords dec` +    # calc offset +    OFFSET=`echo "scale=5; sqrt((${MAX_X}-${MAX_X2})^2 + (${MAX_Y}-${MAX_Y2})^2)" | bc -l` + +    printf "via region:\n" +    printf "  (X2,Y2):    (${MAX_X2},${MAX_Y2})\n" +    printf "  (RA2,DEC2): (${MAX_RA2},${MAX_DEC2})\n" +    printf "offset (unit pixel):\n" +    printf "  offset:     ${OFFSET}\n" +fi +## region file }}} +printf "++++++++++++++++++++++++++++++++++++++++++++\n" +## main }}} + +exit 0 + | 
