#!/bin/sh # # unalias -a # ########################################################### ## Task: ## ## Calc `cooling function' data according to ## ## given `temperature profile' ## ## ## ## NOTE: ## ## given `tprofile': ## ## calc `cooling function' by invoking `XSPEC' ## ## using model `wabs*apec' ## ## ## ## LIweitiaNux ## ## August 17, 2012 ## ########################################################### ## cmdline arguments {{{ if [ $# -ne 6 ]; then printf "usage:\n" printf " `basename $0` \n" exit 1 fi base_path=`dirname $0` TPROFILE=$1 ABUND_VAL=$2 N_H=$3 REDSHIFT=$4 BLIST=$6 NORM=`$base_path/calc_distance $REDSHIFT|grep norm|awk '{print $2}'` echo $NORM COOLFUNC_PREFIX=$5 #COOLFUNC_DAT_RATIO=flux_cnt_ratio.txt if [ ! -r "${TPROFILE}" ]; then printf "ERROR: given tprofile '${TPROFILE}' NOT accessiable\n" exit 2 fi #[ -e "${COOLFUNC_DAT}" ] && rm -f ${COOLFUNC_DAT} #[ -e "${COOLFUNC_DAT_RATIO}" ] && rm -f ${COOLFUNC_DAT_RATIO} ## arguments }}} ## specify variable name outside while loop ## otherwise the inside vars invisible XSPEC_CF_XCM="_coolfunc_calc.xcm" [ -e "${XSPEC_CF_XCM}" ] && rm -f ${XSPEC_CF_XCM} ## generate xspec script {{{ cat >> ${XSPEC_CF_XCM} << _EOF_ ## XSPEC Tcl script ## calc cooling function data ## ## generated by: `basename $0` ## date: `date` set xs_return_results 1 set xs_echo_script 0 # set tcl_precision 12 dummyrsp .01 100 4096 ## set basic data {{{ set nh ${N_H} set redshift ${REDSHIFT} set abund_val ${ABUND_VAL} set norm ${NORM} ## basic }}} ## xspec related {{{ # debug settings {{{ chatter 0 # debug }}} query yes abund grsa dummyrsp 0.3 11.0 1024 # load model 'wabs*apec' to calc cooling function #model wabs*apec & \${nh} & 1.0 & \${abund_val} & \${redshift} & \${norm} & model wabs*apec & 0 & 1.0 & \${abund_val} & \${redshift} & \${norm} & ## xspec }}} ## set input and output filename set tpro_fn "${TPROFILE}" set blist_fn "${BLIST}" set cf_prefix "${COOLFUNC_PREFIX}" ##set cff_fn "${COOLFUNC_DAT_RATIO}" #if { [ file exists \${cff_fn} ] } { # exec rm -fv \${cff_fn} #} ## open files set blist_fd [ open \${blist_fn} r ] #set cff_fd [ open \${cff_fn} w ] while { [ gets \${blist_fd} blist_line ] != -1 } { if { "\${blist_line}" == "bolo" } { set e1 .01; set e2 100.0; set name_suffix bolo } { set e1 [ lindex \${blist_line} 0 ]; set e2 [ lindex \${blist_line} 1]; set name_suffix "\${e1}-\${e2}" } ## read data from tprofile line by line set cf_fn "\${cf_prefix}\${name_suffix}.dat" if { [ file exists \${cf_fn} ] } { exec rm -fv \${cf_fn} } set cf_fd [ open \${cf_fn} w ] set tpro_fd [ open \${tpro_fn} r ] while { [ gets \${tpro_fd} tpro_line ] != -1 } { # gets one line scan \${tpro_line} "%f %f" radius temp_val #puts "radius: \${radius}, temperature: \${temp_val}" # set temperature value newpar 2 \${temp_val} # calc flux & tclout flux \${e1} \${e2} tclout flux 1 scan \${xspec_tclout} "%f %f %f %f" cf_data holder holder holder #puts "cf_data: \${cf_data}" puts \${cf_fd} "\${radius} \${cf_data}" # flux 0.01 100.0 # tclout flux 1 # scan \${xspec_tclout} "%f %f %f %f" cff_data holder holder holder # puts \${cff_fd} "\${radius} [expr \${cff_data}/\${cf_data}]" } close \${tpro_fd} close \${cf_fd} } ## close opened files ## exit tclexit _EOF_ ## extract xcm }}} ## invoke xspec to calc printf "invoking XSPEC to calculate cooling function data ...\n" # xspec - ${XSPEC_CF_XCM} xspec - ${XSPEC_CF_XCM} > /dev/null ## clean # if [ -e "${XSPEC_CF_XCM}" ]; then # rm -f ${XSPEC_CF_XCM} # fi exit 0