blob: d400a9bc337729681a4746bf6d8c441bb83903dc (
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
114
115
116
117
118
119
|
#!/bin/sh
##
## Calculate the 'cooling function' profile for each of the energy band
## specified in a bands file, with respect to the given 'temperature profile'
## and the average abundance, redshift, and column density nH, using the
## XSPEC model 'wabs*apec'.
##
## NOTE:
## To calculate the luminosity and flux from the source using the
## 'calc_lx_{beta,dbeta}', set 'nH=0'.
## Also the output cooling function values should be the 'flux' values
## with unit 'erg/s/cm^2'.
##
## Weitian LI
## Updated: 2017-02-17
##
## cmdline arguments {{{
if [ $# -ne 6 ]; then
printf "usage:\n"
printf " `basename $0` <tprofile> <avg_abund> <nH> <redshift> <coolfunc_prefix> <band_list>\n"
exit 1
fi
TPROFILE=$1
ABUNDANCE=$2
N_H=$3
REDSHIFT=$4
COOLFUNC_PREFIX=$5
BLIST=$6
NORM=`cosmo_calc.py -b --norm-apec ${REDSHIFT}`
if [ ! -r "${TPROFILE}" ]; then
printf "ERROR: given tprofile '${TPROFILE}' NOT accessiable\n"
exit 2
fi
## arguments }}}
XSPEC_CF_XCM="_calc_coolfunc_bands.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,
## for each specified energy band.
##
## 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
set tpro_fn "${TPROFILE}"
set blist_fn "${BLIST}"
set cf_prefix "${COOLFUNC_PREFIX}"
set blist_fd [ open \${blist_fn} r ]
## loop over each energy band
while { [ gets \${blist_fd} blist_line ] != -1 } {
if { "\${blist_line}" == "bolo" } {
set e1 0.01
set e2 100.0
set name_suffix bolo
} else {
set e1 [ lindex \${blist_line} 0 ]
set e2 [ lindex \${blist_line} 1 ]
set name_suffix "\${e1}-\${e2}"
}
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 ]
## 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 \${e1} \${e2}
tclout flux 1
scan \${xspec_tclout} "%f" cf_erg
#puts "cf: \${cf_erg}"
puts \${cf_fd} "\${radius} \${cf_erg}"
}
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
|