diff options
Diffstat (limited to 'mass_profile')
-rwxr-xr-x | mass_profile/cooling_time2.sh | 580 |
1 files changed, 0 insertions, 580 deletions
diff --git a/mass_profile/cooling_time2.sh b/mass_profile/cooling_time2.sh deleted file mode 100755 index 775e175..0000000 --- a/mass_profile/cooling_time2.sh +++ /dev/null @@ -1,580 +0,0 @@ -#!/bin/sh -# -unalias -a -export LC_COLLATE=C -## -## based on `ciao_r500avgt' -## for calculating the `cooling time' -## within (0.-0.048 r500) region -## -## Junhua Gu -## August 22, 2012 -## -## Weitian LI -## 2013-04-28 -## -## -## Change logs: -## 2016-05-28: -## * Remove 'COSCALC', just use 'cosmo_calc' -## - -## about, used in `usage' {{{ -VERSION="v2.0" -UPDATE="2016-05-28" -## 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_ARF=51 -ERR_RMF=52 -ERR_UNI=61 -## error code }}} - -## usage, help {{{ -case "$1" in - -[hH]*|--[hH]*) - printf "usage:\n" - printf " `basename $0` evt=<evt2_clean> r500=<r500_kpc> regin=<input_reg> regout=<output_reg> bkgd=<blank_evt | lbkg_reg | bkg_spec> nh=<nH> z=<redshift> arf=<warf_file> rmf=<wrmf_file> [ grpcmd=<grppha_cmd> log=<log_file> ]\n" - printf "\nversion:\n" - printf "${VERSION}, ${UPDATE}\n" - exit ${ERR_USG} - ;; -esac -## usage, help }}} - -## default parameters {{{ -# default `event file' which used to match `blanksky' files -#DFT_EVT="_NOT_EXIST_" -DFT_EVT="`ls evt2*_clean.fits 2> /dev/null`" -# default `bkgd', use `bkgcorr_blanksky*' corrected bkg spectrum -DFT_BKGD="`ls bkgcorr_blanksky_*.pi 2> /dev/null`" -# default basedir -DFT_BASEDIR="../.." -# default info_json pattern -DFT_JSON_PAT="*_INFO.json" -# default `radial region file' -#DFT_REG_IN="_NOT_EXIST_" -DFT_REG_IN="rspec.reg" -# default output region file (0.1-0.5 r500 region) -DFT_REG_OUT="cooling.reg" -# default ARF/RMF, the one of the outmost region -DFT_ARF="`ls r1_*.warf 2> /dev/null`" -DFT_RMF="`ls r1_*.wrmf 2> /dev/null`" - -# default `group command' for `grppha' -#DFT_GRP_CMD="group 1 128 2 129 256 4 257 512 8 513 1024 16" -DFT_GRP_CMD="group min 20" -# default `log file' -DFT_LOGFILE="cooling_`date '+%Y%m%d'`.log" - -INNER=0.0 -OUTER=0.048 -CT_RES="cooling_results.txt" -# default output xspec scripts -XSPEC_SCRIPT="xspec_cooling.xcm" -# deproj xspec script, generated by `deproj_spectra' -# from which get `nh' and `redshift' -XSPEC_DEPROJ="xspec_deproj.xcm" -## 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 -} - -## background renormalization (BACKSCAL) {{{ -# renorm background according to particle background -# energy range: 9.5-12.0 keV (channel: 651-822) -CH_LOW=651 -CH_HI=822 -pb_flux() { - punlearn dmstat - COUNTS=`dmstat "$1[channel=${CH_LOW}:${CH_HI}][cols COUNTS]" | grep -i 'sum:' | awk '{ print $2 }'` - punlearn dmkeypar - EXPTIME=`dmkeypar $1 EXPOSURE echo=yes` - BACK=`dmkeypar $1 BACKSCAL echo=yes` - # fix `scientific notation' bug for `bc' - EXPTIME_B=`echo ${EXPTIME} | sed 's/[eE]/\*10\^/' | sed 's/+//'` - BACK_B=`echo "( ${BACK} )" | sed 's/[eE]/\*10\^/' | sed 's/+//'` - PB_FLUX=`echo "scale = 16; ${COUNTS} / ${EXPTIME_B} / ${BACK_B}" | bc -l` - echo ${PB_FLUX} -} - -bkg_renorm() { - # $1: src spectrum, $2: back spectrum - PBFLUX_SRC=`pb_flux $1` - PBFLUX_BKG=`pb_flux $2` - BACK_OLD=`dmkeypar $2 BACKSCAL echo=yes` - BACK_OLD_B=`echo "( ${BACK_OLD} )" | sed 's/[eE]/\*10\^/' | sed 's/+//'` - BACK_NEW=`echo "scale = 16; ${BACK_OLD_B} * ${PBFLUX_BKG} / ${PBFLUX_SRC}" | bc -l` - printf "\`$2': BACKSCAL:\n" - printf " ${BACK_OLD} --> ${BACK_NEW}\n" - punlearn dmhedit - dmhedit infile=$2 filelist=none operation=add \ - key=BACKSCAL value=${BACK_NEW} comment="old value: ${BACK_OLD}" -} -## bkg renorm }}} -## functions end }}} - -## parameters {{{ -# process cmdline args using `getopt_keyval' -getopt_keyval "$@" - -## check log parameters {{{ -if [ ! -z "${log}" ]; then - LOGFILE="${log}" -else - LOGFILE=${DFT_LOGFILE} -fi -printf "## use logfile: \`${LOGFILE}'\n" -[ -e "${LOGFILE}" ] && mv -fv ${LOGFILE} ${LOGFILE}_bak -TOLOG="tee -a ${LOGFILE}" -echo "process script: `basename $0`" >> ${LOGFILE} -echo "process date: `date`" >> ${LOGFILE} -## log }}} - -# check given parameters -# process `nh' and `redshift' {{{ -if [ ! -r "${XSPEC_DEPROJ}" ]; then - printf "## the script \`${XSPEC_DEPROJ}' generated by \`deproj_spectra' NOT found\n" | ${TOLOG} - printf "## please supply the value of \`nh' and \`redshift' manully\n" | ${TOLOG} - read -p "> value of nh: " N_H - read -p "> value of redshift: " REDSHIFT -else - # get `nh' and `redshift' from xspec script - LN=`grep -n 'projct\*wabs\*apec' ${XSPEC_DEPROJ} | tail -n 1 | cut -d':' -f1` - # calc the line number of which contains `nh' - LN_NH=`expr ${LN} + 4` - NH_XCM=`head -n ${LN_NH} ${XSPEC_DEPROJ} | tail -n 1 | awk '{ print $1 }'` - # calc the line number of `redshift' - LN_RS=`expr ${LN} + 7` - RS_XCM=`head -n ${LN_RS} ${XSPEC_DEPROJ} | tail -n 1 | awk '{ print $1 }'` - printf "## get value of nh: \`${NH_XCM}' (from \`${XSPEC_DEPROJ}')\n" | ${TOLOG} - printf "## get value of redshift: \`${RS_XCM}' (from \`${XSPEC_DEPROJ}')\n" | ${TOLOG} - - ## if `nh' and `redshift' supplied in cmdline, then use them - if [ ! -z "${nh}" ]; then - N_H=${nh} - else - N_H=${NH_XCM} - fi - # redshift - if [ ! -z "${z}" ]; then - REDSHIFT=${z} - else - REDSHIFT=${RS_XCM} - fi -fi -printf "## use nH: ${N_H}\n" | ${TOLOG} -printf "## use redshift: ${REDSHIFT}\n" | ${TOLOG} -# nh & redshift }}} - -# check basedir & json file -if [ -d "${basedir}" ]; then - BASEDIR=${basedir} -else - BASEDIR=${DFT_BASEDIR} -fi -if [ ! -z "${json}" ] && [ -r "${BASEDIR}/${json}" ]; then - JSON_FILE="${BASEDIR}/${json}" -elif [ `ls ${BASEDIR}/${DFT_JSON_PAT} 2> /dev/null | wc -l` -eq 1 ]; then - JSON_FILE=`ls ${BASEDIR}/${DFT_JSON_PAT}` -else - read -p "> JSON_file: " JSON_FILE - if [ ! -r "${JSON_FILE}" ]; then - printf "ERROR: cannot access given \`${JSON_FILE}'\n" - exit ${ERR_JSON} - fi -fi -printf "## use json_file: \`${JSON_FILE}'\n" | ${TOLOG} - -# process `r500' {{{ -R500_RAW=`grep '"R500.*kpc' ${JSON_FILE} | sed 's/.*"R500.*":\ //' | sed 's/\ *,$//'` -if [ ! -z "${r500}" ]; then - R500_RAW=${r500} -fi -if [ -z "${R500_RAW}" ]; then - printf "## input R500 followed with unit, e.g.: 800kpc, 400pix\n" - read -p "> value of \`R500' (in pixel/kpc): " R500_RAW -fi -R500_VAL=`echo "${R500_RAW}" | tr -d 'a-zA-Z, '` -R500_UNI=`echo "${R500_RAW}" | tr -d '0-9, '` -printf "## get \`R500': ${R500_VAL} in unit \`${R500_UNI}'\n" | ${TOLOG} - -# if in kpc, convert to pix -case "${R500_UNI}" in - [pP]*) - printf "## units in \`pixel', conversion not needed\n" | ${TOLOG} - R500_PIX_B=`echo ${R500_VAL} | sed 's/[eE]/\*10\^/' | sed 's/+//'` - ;; - *) - printf "## units in \`kpc', convert to \`Chandra pixel'\n" | ${TOLOG} - KPC_PER_PIX=`cosmo_calc ${REDSHIFT} | grep 'kpc.*pix' | tr -d 'a-zA-Z_#=(),:/ '` - # convert scientific notation for `bc' - KPC_PER_PIX_B=`echo ${KPC_PER_PIX} | sed 's/[eE]/\*10\^/' | sed 's/+//'` - printf "## calculated \`kpc/pixel': ${KPC_PER_PIX_B}\n" - R500_VAL_B=`echo ${R500_VAL} | sed 's/[eE]/\*10\^/' | sed 's/+//'` - R500_PIX_B=`echo "scale = 4; ${R500_VAL_B} / ( ${KPC_PER_PIX_B} )" | bc -l` - ;; -esac -# calc (inner-outer R500) -R_IN=`echo "scale = 4; ${INNER} * ${R500_PIX_B}" | bc -l` -R_OUT=`echo "scale = 4; ${OUTER} * ${R500_PIX_B}" | bc -l` -printf "## R500 in units pixel: ${R500_PIX_B}\n" | ${TOLOG} -printf "## (${INNER}-${OUTER} R500) range in pixel: ${R_IN} - ${R_OUT}\n" | ${TOLOG} -# r500 }}} - -# 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} - -# input and output region files {{{ -if [ -r "${regin}" ]; then - REG_IN="${regin}" -elif [ -r "${DFT_REG_IN}" ]; then - REG_IN=${DFT_REG_IN} -else - read -p "> previous used radial spec regfile: " REG_IN - if [ ! -r "${REG_IN}" ]; then - printf "ERROR: cannot access given \`${REG_IN}' region file\n" - exit ${ERR_REG} - fi -fi -printf "## use previous regfile: \`${REG_IN}'\n" | ${TOLOG} -if [ ! -z "${regout}" ]; then - REG_OUT="${regout}" -else - REG_OUT=${DFT_REG_OUT} -fi -[ -e "${REG_OUT}" ] && mv -fv ${REG_OUT} ${REG_OUT}_bak -printf "## set output regfile (0.1-0.5 r500 region): \`${REG_OUT}'\n" | ${TOLOG} - -# get center position from `regin' -# only consider `pie' or `annulus'-shaped region -TMP_REG=`grep -iE '(pie|annulus)' ${REG_IN} | head -n 1` -XC=`echo ${TMP_REG} | tr -d ' ' | awk -F'[(),]' '{ print $2 }'` -YC=`echo ${TMP_REG} | tr -d ' ' | awk -F'[(),]' '{ print $3 }'` -printf "## get center coord: (${XC},${YC})\n" | ${TOLOG} -# region files }}} - -# check given bkgd, determine background {{{ -if [ -r "${bkgd}" ]; then - BKGD=${bkgd} -elif [ -r "${DFT_BKGD}" ]; then - BKGD=${DFT_BKGD} -else - read -p "> background (blanksky_evt | lbkg_reg | bkg_spec): " BKGD - if [ ! -r "${BKGD}" ]; then - printf "ERROR: cannot access given \`${BKGD}'\n" - exit ${ERR_BKG} - fi -fi -printf "## use bkgd: \`${BKGD}'\n" | ${TOLOG} -# determine bkg type: blanksky, lbkg_reg, bkg_spec ? -# according to file type first: text / FITS -# if FITS, then get values of `HDUCLAS1' and `OBJECT' -if file -bL ${BKGD} | grep -qi 'text'; then - printf "## given \`${BKGD}' is a \`text file'\n" - printf "## use it as local bkg region file\n" - printf "## use *LOCAL BKG SPEC*\n" | ${TOLOG} - # just set flags, extract spectrum later - USE_LBKG_REG=YES - USE_BLANKSKY=NO - USE_BKG_SPEC=NO -elif file -bL ${BKGD} | grep -qi 'FITS'; then - printf "## given \`${BKGD}' is a \`FITS file'\n" - # get FITS header keyword - HDUCLAS1=`dmkeypar ${BKGD} HDUCLAS1 echo=yes` - if [ "${HDUCLAS1}" = "EVENTS" ]; then - # event file - printf "## given file is \`event'\n" - # check if `blanksky' or `stowed bkg' - BKG_OBJ=`dmkeypar ${BKGD} OBJECT echo=yes` - if [ "${BKG_OBJ}" = "BACKGROUND DATASET" ] || [ "${BKG_OBJ}" = "ACIS STOWED" ]; then - # valid bkg evt file - printf "## given FITS file is a valid bkgrnd file\n" - printf "## use *BLANKSKY*\n" | ${TOLOG} - USE_BLANKSKY=YES - USE_LBKG_REG=NO - USE_BKG_SPEC=NO - # specify `BLANKSKY' - BLANKSKY=${BKGD} - else - # invalid bkg evt file - printf "ERROR: invalid bkg evt file given\n" - exit ${ERR_BKGTY} - fi - elif [ "${HDUCLAS1}" = "SPECTRUM" ]; then - # spectrum file - printf "## given file is \`spectrum'\n" - printf "## use *BKG SPECTRUM*\n" | ${TOLOG} - USE_BKG_SPEC=YES - USE_BLANKSKY=NO - USE_LBKG_REG=NO - # specify `BKG_SPEC' - BKG_SPEC=${BKGD} - else - # other type - printf "ERROR: other type FITS given\n" - exit ${ERR_BKGTY} - fi -else - printf "ERROR: given \`${BKGD}' type UNKNOWN\n" - exit ${ERR_BKGTY} -fi -# bkgd }}} - -# check `arf' and `rmf' {{{ -if [ -r "${arf}" ]; then - ARF=${arf} -elif [ -r "${DFT_ARF}" ]; then - ARF=${DFT_ARF} -else - read -p "> provide the ARF to use: " ARF - if [ ! -r "${ARF}" ]; then - printf "ERROR: cannot access given \`${ARF}'\n" - exit ${ERR_ARF} - fi -fi -printf "## use ARF: \`${ARF}'\n" | ${TOLOG} -# rmf -if [ -r "${rmf}" ]; then - RMF=${rmf} -elif [ -r "${DFT_RMF}" ]; then - RMF=${DFT_RMF} -else - read -p "> provide the RMF to use: " RMF - if [ ! -r "${RMF}" ]; then - printf "ERROR: cannot access given \`${RMF}'\n" - exit ${ERR_RMF} - fi -fi -printf "## use RMF: \`${RMF}'\n" | ${TOLOG} -# arf & rmf }}} - -# check given `grpcmd' -if [ ! -z "${grpcmd}" ]; then - GRP_CMD="${grpcmd}" -else - GRP_CMD="${DFT_GRP_CMD}" -fi -printf "## use grppha cmd: \`${GRP_CMD}'\n" | ${TOLOG} -## parameters }}} - -################################################## -#### main -## D_A -D_A_CM=`cosmo_calc ${REDSHIFT} | grep 'Angular_diameter_distance' | awk -F'[=,]' '{ print $2 }' | tr -d '[cm] ' -printf "D_A_CM(${REDSHIFT})= ${D_A_CM}\n" - -## region related {{{ -## generate the needed region file -printf "generate the output region file ...\n" -cat > ${REG_OUT} << _EOF_ -# Region file format: CIAO version 1.0 -pie(${XC},${YC},${R_IN},${R_OUT},0,360) -_EOF_ - -## open the evt file to verify or modify -printf "## check the generated pie region ...\n" -printf "## if modified, save with the same name \`${REG_OUT}' (overwrite)\n" -ds9 ${EVT} -regions ${REG_OUT} -cmap sls -bin factor 4 - -## check the (modified) region (pie region end angle) -printf "check the above region (for pie region end angle) ...\n" -INVALID=`grep -i 'pie' ${REG_OUT} | awk -F'[,()]' '$7 > 360'` -if [ "x${INVALID}" != "x" ]; then - printf "*** WARNING: there are pie regions' END_ANGLE > 360\n" | ${TOLOG} - printf "*** will to fix ...\n" - mv -fv ${REG_OUT} ${REG_OUT}_tmp - # using `awk' to fix - awk -F'[,()]' '{ - if ($7 > 360) { - printf "%s(%.2f,%.2f,%.2f,%.2f,%.2f,%.2f)\n", $1,$2,$3,$4,$5,$6,($7-360) - } - else { - print $0 - } - }' ${REG_OUT}_tmp > ${REG_OUT} - rm -f ${REG_OUT}_tmp -fi -## region related }}} - -## generate spectrum {{{ -# check counts -punlearn dmlist -CNT_RC=`dmlist infile="${EVT}[sky=region(${REG_OUT})][energy=700:7000]" opt=block | grep 'EVENTS' | awk '{ print $8 }'` -if [ ${CNT_RC} -lt 500 ]; then - F_WC=true - WC="LOW_COUNTS" - printf "*** WARNING: counts_in_0.048R500=${CNT_RC} < 500 ***\n" -fi - -# object -printf "extract object spectrum \`${AVGT_SPEC}' ...\n" -AVGT_SPEC="${REG_OUT%.reg}.pi" -AVGT_SPEC_GRP="${AVGT_SPEC%.pi}_grp.pi" -punlearn dmextract -dmextract infile="${EVT}[sky=region(${REG_OUT})][bin PI]" \ - outfile="${AVGT_SPEC}" wmap="[bin det=8]" clobber=yes -# group spectrum -printf "group object spectrum ...\n" -grppha infile="${AVGT_SPEC}" outfile="${AVGT_SPEC_GRP}" \ - comm="${GRP_CMD} & exit" clobber=yes > /dev/null - -# background -printf "generate the background spectrum ...\n" -AVGT_BKG="${AVGT_SPEC%.pi}_bkg.pi" -if [ "${USE_BLANKSKY}" = "YES" ]; then - # use blanksky as background file - printf "extract spectrum from blanksky ...\n" - punlearn dmextract - dmextract infile="${BLANKSKY}[sky=region(${REG_OUT})][bin PI]" \ - outfile=${AVGT_BKG} wmap="[bin det=8]" clobber=yes -elif [ "${USE_LBKG_REG}" = "YES" ]; then - printf "extract local background ...\n" - punlearn dmextract - dmextract infile="${EVT}[sky=region(${BKGD})][bin PI]" \ - outfile=${AVGT_BKG} wmap="[bin det=8]" clobber=yes -elif [ "${USE_BKG_SPEC}" = "YES" ]; then - printf "copy specified background spectrum ...\n" - cp -fv ${BKG_SPEC} ${AVGT_BKG} -fi - -printf "renormalize the background ...\n" -bkg_renorm ${AVGT_SPEC} ${AVGT_BKG} -## spectrum }}} - -## generate XSPEC script {{{ -printf "generate a XSPEC script ...\n" -[ -e "${XSPEC_SCRIPT}" ] && mv -fv ${XSPEC_SCRIPT} ${XSPEC_SCRIPT}_bak -cat > ${XSPEC_SCRIPT} << _EOF_ -## XSPEC script -## spectrum analysis to get the average temperatue with (0-0.048 R500) -## -## generated by: \``basename $0`' -## date: \``date`' -## - -# xspec settings -statistic chi -abund grsa -query yes - -# data -data ${AVGT_SPEC_GRP} -response ${RMF} -arf ${ARF} -backgrnd ${AVGT_BKG} - -# fitting range -ignore bad -ignore 0.0-0.7,7.0-** - -# plot related -setplot energy - -method leven 10 0.01 -xsect bcmc -cosmo 70 0 0.73 -xset delta 0.01 -systematic 0 - -# model -model wabs*apec - ${N_H} -0.001 0 0 100000 1e+06 - 1.0 0.01 0.008 0.008 64 64 - 0.4 0.001 0 0 5 5 - ${REDSHIFT} -0.01 -0.999 -0.999 10 10 - 0.0 0.01 0 0 1e+24 1e+24 - -## xspec script end - -proc calc_cooling_time {} { - set rout ${R_OUT} - set d_a_cm ${D_A_CM} - fit 1000 - tclout param 4 - set z [ lindex \$xspec_tclout 0 ] - tclout param 2 - set T [ lindex \$xspec_tclout 0 ] - tclout param 5 - set norm [ lindex \$xspec_tclout 0 ] - newpar 1 0 - dummyrsp .001 100 - flux .001 100 - - tclout flux - set flux [ lindex \$xspec_tclout 0 ] - puts "flux(0.01-100kev): \$flux" - set rout_cm [ expr \$rout*.492/3600/180*3.14159*\$d_a_cm ] - set V [ expr 4./3.*3.14159*\$rout_cm*\$rout_cm*\$rout_cm ] - set nenh [ expr \$norm*1E14*4*3.14159*\$d_a_cm*\$d_a_cm*(1+\$z)*(1+\$z)*(1+\$z)*(1+\$z)/\$V ] - set d_l_cm [ expr \$d_a_cm*(1+\$z)*(1+\$z) ] - set ne_np_ratio 1.2 - set ne [ expr sqrt(\$nenh*\$ne_np_ratio) ] - set lx [ expr \$flux*4*3.14159*\$d_l_cm*\$d_l_cm ] - set kb 1.602E-9 - set ct [ expr 3./2.*(\$ne+\$ne/\$ne_np_ratio)*\$kb*\$T*\$V/\$lx ] - set ct_gyr [ expr \$ct/(3600*24*365.25*1E9) ] - puts "Cooling_time= \$ct_gyr Gyr" -} - -fit 1000 -calc_cooling_time - -tclexit -_EOF_ -## xspec script }}} - -## invoke xspec to calc -if [ "x${F_WC}" = "xtrue" ]; then - printf "\n*** WC: LOW_COUNTS ***\n" - printf "*** WARNING: counts_in_0.048R500=${CNT_RC} < 500 ***\n" -else - [ -e "${CT_RES}" ] && mv -f ${CT_RES} ${CT_RES}_bak - printf "invoking XSPEC to calculate cooling time ...\n" - xspec - ${XSPEC_SCRIPT} | tee ${CT_RES} - - OBS_ID=`grep '"Obs.*ID' ${JSON_FILE} | awk -F':' '{ print $2 }' | tr -d ' ,'` - OBJ_NAME=`grep '"Source\ Name' ${JSON_FILE} | awk -F':' '{ print $2 }' | sed -e 's/\ *"//' -e 's/"\ *,$//'` - CT=`grep -i '^Cooling_time' ${CT_RES} | awk '{ print $2 }'` - - printf "\n" | tee -a ${CT_RES} - printf "# OBS_ID,OBJ_NAME,CT_gyr\n" | tee -a ${CT_RES} - printf "# $OBS_ID,$OBJ_NAME,$CT\n" | tee -a ${CT_RES} -fi - -exit 0 - |