aboutsummaryrefslogtreecommitdiffstats
path: root/bin/calc_coolfunc.sh
blob: d1d0b35d03c3a879367661f10e5199d1a7788da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/sh
##
## Calculate the 'cooling function' profile with respect to the
## given 'temperature profile' and the average abundance, redshift,
## and column density nH, using the XSPEC model 'wabs*apec'.
##
## NOTE:
## The output cooling function values should be the 'flux' values
## with unit 'photon/s/cm^2' (different to 'calc_coolfunc_bands.sh').
## These results will be used by 'fit_{beta,dbeta}_sbp' to derive the
## (3D) gas density profile from (2D) surface brightness profile,
## whose values have unit 'photon/cm^2/pixel/s'.
##
## Weitian LI
## Created: 2012-08-17
##
## Change logs:
## 2017-02-17, Weitian LI
##   * Rename from 'coolfunc_calc.sh' to 'calc_coolfunc.sh'
##   * Clean up that do not calculate and output <coolfunc_bolo>
## 2017-02-16, Weitian LI
##   * Do not calculate and output 'flux_cnt_ratio.txt'
##

## cmdline arguments {{{
if [ $# -ne 5 ]; then
    printf "usage:\n"
    printf "    `basename $0` <tprofile> <avg_abund> <nH> <redshift> <coolfunc_outfile>\n"
    exit 1
fi
TPROFILE=$1
ABUNDANCE=$2
N_H=$3
REDSHIFT=$4
COOLFUNC_DAT=$5
NORM=`cosmo_calc ${REDSHIFT} | grep 'norm.*cooling_function' | awk -F':' '{ print $2 }'`

if [ ! -r "${TPROFILE}" ]; then
    printf "ERROR: given tprofile '${TPROFILE}' NOT accessiable\n"
    exit 2
fi
[ -e "${COOLFUNC_DAT}" ] && rm -f ${COOLFUNC_DAT}
## arguments }}}

XSPEC_CF_XCM="_calc_coolfunc.xcm"
[ -e "${XSPEC_CF_XCM}" ] && rm -f ${XSPEC_CF_XCM}

## generate xspec script {{{
cat > ${XSPEC_CF_XCM} << _EOF_
## XSPEC Tcl script
## Calculate the cooling function profile w.r.t the temperature profile.
##
## Generated by: `basename $0`
## Date: `date`

set xs_return_results 1
set xs_echo_script 0
# set tcl_precision 12
## set basic data {{{
set nh ${N_H}
set redshift ${REDSHIFT}
set abundance ${ABUNDANCE}
set norm ${NORM}
## basic }}}

## xspec related {{{
# debug settings {{{
chatter 0
# debug }}}
query yes
abund grsa
dummyrsp 0.01 100.0 4096 linear
# load model 'wabs*apec' to calc cooling function
model wabs*apec & \${nh} & 1.0 & \${abundance} & \${redshift} & \${norm} & /*
## xspec }}}

## set input and output filename & open files
set tpro_fn "${TPROFILE}"
set cf_fn "${COOLFUNC_DAT}"
if { [ file exists \${cf_fn} ] } {
    exec rm -fv \${cf_fn}
}

## open files
set tpro_fd [ open \${tpro_fn} r ]
set cf_fd [ open \${cf_fn} w ]

## read data from tprofile line by line
while { [ gets \${tpro_fd} tpro_line ] != -1 } {
    scan \${tpro_line} "%f %f" radius temperature
    #puts "radius: \${radius}, temperature: \${temperature}"
    # set temperature value
    newpar 2 \${temperature}
    # calc flux & tclout
    flux 0.7 7.0
    tclout flux 1
    scan \${xspec_tclout} "%f %f %f %f" _ _ _ cf_photon
    #puts "cf: \${cf_photon}"
    puts \${cf_fd} "\${radius}    \${cf_photon}"
}

## close opened files
close \${tpro_fd}
close \${cf_fd}

## exit
tclexit
_EOF_
## xcm generation }}}

## invoke xspec to calc
printf "invoking XSPEC to calculate cooling function profile ...\n"
xspec - ${XSPEC_CF_XCM} > /dev/null