blob: 599e429b802c51f1dfb0898d36e7de663f71a5a6 (
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/bin/sh
#
# unalias -a
#
###########################################################
## Task: ##
## Calc `cooling function' data according to ##
## given `temperature profile' ##
## ##
## NOTE: ##
## given `tprofile': <radius> <temperature> ##
## calc `cooling function' by invoking `XSPEC' ##
## using model `wabs*apec' ##
## ##
## LIweitiaNux <liweitianux@gmail.com> ##
## August 17, 2012 ##
###########################################################
## cmdline arguments {{{
if [ $# -ne 5 ]; then
printf "usage:\n"
printf " `basename $0` <tprofile> <avg_abund> <nH> <redshift> <coolfunc_outfile>\n"
exit 1
fi
base_path=`dirname $0`
TPROFILE=$1
ABUND_VAL=$2
N_H=$3
REDSHIFT=$4
NORM=`$base_path/calc_distance $REDSHIFT|grep norm|awk '{print $2}'`
echo $NORM
COOLFUNC_DAT=$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 cf_fn "${COOLFUNC_DAT}"
##set cff_fn "${COOLFUNC_DAT_RATIO}"
if { [ file exists \${cf_fn} ] } {
exec rm -fv \${cf_fn}
}
#if { [ file exists \${cff_fn} ] } {
# exec rm -fv \${cff_fn}
#}
## open files
set tpro_fd [ open \${tpro_fn} r ]
set cf_fd [ open \${cf_fn} w ]
#set cff_fd [ open \${cff_fn} w ]
## read data from tprofile line by line
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 0.1 2.4
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 opened files
close \${tpro_fd}
close \${cf_fd}
## 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
|