Jpp 21.0.0-rc.1-88-g0130508c4
the software that should make you happy
Loading...
Searching...
No Matches
JOMGsim.sh
Go to the documentation of this file.
1#!/usr/bin/env zsh
2#
3#
4# \author mdejong
5#
6version=1.0
7script=${0##*/}
8
9# ------------------------------------------------------------------------------------------
10#
11# Utility script to process OMGsim output.
12#
13# ------------------------------------------------------------------------------------------
14
15if [ -z $JPP_DIR ]; then
16 echo "Variable JPP_DIR undefined."
17 exit
18fi
19
20source $JPP_DIR/setenv.sh $JPP_DIR
21
22zmodload zsh/mathfunc
23
24set_variable: DEBUG OMGSIM_WORKDIR 2
25set_variable: WORKDIR OMGSIM_WORKDIR ./
26set_variable: FACTOR OMGSIM_FACTOR 0.5
27set_variable: RECYCLING OMGSIM_RECYCLING 1
28
29if do_usage $*; then
30 usage "$script (<detector file>|URL) <file name pattern> <OMGsim data card>"
31fi
32
33if (( $# == 3 )); then
34
35 set_variable URL $argv[1]
36 if [[ $argv[1] == "http"* ]]; then
37 set_variable DETECTOR singleDOM_OMGsim.detx
38 elif [[ "${URL//git/}" != "$URL" ]]; then
39 set_variable DETECTOR data/singleDOM_OMGsim.detx
40 else
41 set_variable URL
42 set_variable DETECTOR $argv[1]
43 fi
44 set_variable FILE_NAME_PATTERN $argv[2]
45 set_variable OMGSIM $argv[3]
46else
47 fatal "Wrong number of arguments."
48fi
49
50function getv() { JPrintProperties -f $OMGSIM -k $1 -@ "cc=#" }
51
52typeset -A BUFFER
53
54let "BUFFER[K40Glass] = `getv glass.K40 ` * `getv mass.glass`"
55let "BUFFER[Th232Glass] = `getv glass.Th232` * `getv mass.glass`"
56let "BUFFER[U238Glass] = `getv glass.U238 ` * `getv mass.glass`"
57let "BUFFER[K40Water] = `getv water.K40 ` * (4.0/3.0) * acos(-1.0) * (`getv radius.K40 `**3 - `getv radius.glass`**3)"
58let "BUFFER[U238Water] = `getv water.U238 ` * (4.0/3.0) * acos(-1.0) * (`getv radius.U238`**3 - `getv radius.glass`**3)"
59
60echo Radio activities:
61
62for KEY VALUE in ${(kv)BUFFER}; do
63 printf "%-12s %12.3e [Bq]\n" $KEY $VALUE
64done
65
66if [[ "${URL//git/}" != "$URL" ]]; then
67
68 echo Downloading data from $URL:
69 if [ -e data ]; then
70 cd data
71 git pull
72 else
73 git clone $URL data
74 fi
75
76elif [[ "$URL" != "" ]]; then
77
78 echo Downloading data from $URL:
79
80 for KEY in ${(k)BUFFER}; do
81 if [[ ! -f ${FILE_NAME_PATTERN/\%/${KEY}} ]]; then
82 wget $URL/${FILE_NAME_PATTERN/\%/${KEY}}
83 fi
84 done
85
86 echo Downloading detector file from $URL:
87 if [[ ! -f $DETECTOR ]]; then
88 wget $URL/$DETECTOR
89 fi
90fi
91
92#ideal PMT simulation
93cat>$WORKDIR/PMT_parameters.A.txt<<EOF
94%.TTS_ns = 1.5
95%.gain = 1.0
96%.gainSpread = 0.0
97%.PunderAmplified = 0.0
98%.slewing = 0
99EOF
100
101#realistic PMT simulation (R12199)
102cat>$WORKDIR/PMT_parameters.B.txt<<EOF
103%.TTS_ns = -1.0
104%.gain = 1.0
105%.gainSpread = 0.4
106%.PunderAmplified = 0.05
107%.slewing = 1
108EOF
109
110OPTIONS=("BELL_SHAPE = 2.0;")
111
112for TYPE in A B; do
113
114 rm -f $TYPE.log
115
116 for KEY VALUE in ${(kv)BUFFER}; do
117
118 set_variable INPUT_FILE ${FILE_NAME_PATTERN/\%/$KEY}
119 set_variable OUTPUT_FILE \[${KEY}\].$TYPE.root
120
121 echo "Processing type $A $INPUT_FILE -> $KEY.$TYPE.log"
122
123 nohup \
124 $JPP_DIR/examples/JCalibrate/JOMGsim \
125 -a $DETECTOR \
126 -f $INPUT_FILE \
127 -o $WORKDIR/$OUTPUT_FILE \
128 -R $VALUE \
129 -P $WORKDIR/PMT_parameters.$TYPE.txt \
130 -P "QE = $FACTOR" \
131 -N $RECYCLING \
132 -d $DEBUG --! >& $KEY.$TYPE.log &
133 done
134
135 wait
136
137 KEYS=(${(k)BUFFER})
138
139 JOpera1D \
140 -f$WORKDIR/\[${^KEYS}\].$TYPE.root:'^M$' \
141 -u Add \
142 -O = \
143 -o $WORKDIR/M.$TYPE.root >& /dev/null
144
145 JOpera2D \
146 -f$WORKDIR/\[${^KEYS}\].$TYPE.root:1.2R \
147 -u Add \
148 -O = \
149 -o $WORKDIR/\[Total\].$TYPE.root >& /dev/null
150
151 H2=1.2R
152
153 JPrintRange2D -f $WORKDIR/\[Total\].$TYPE.root:$H2 | read X1 Y1 Z1 X2 Y2 Z2
154 JPrintResult -f $WORKDIR/\[Total\].$TYPE.root:$H2 -F GetNbinsX -F GetNbinsY | read NX NY
155 JPrintResult -f $WORKDIR/\[Total\].$TYPE.root:$H2 -F GetSumOfWeights | read W
156
157 echo "Processing $KEYS[*] -> $TYPE.log"
158
159 printf "Total rate %7.3f [Hz]\n" $(($W * ($Y2 - $Y1) / ($NY - 1))) >> $TYPE.log
160
161 echo "KM3NeT.hh" >> $TYPE.log
162 $JPP_DIR/examples/JGizmo/JPrint1D \
163 -f $WORKDIR/M.$TYPE.root:M | awk 'NR==3,NR==6 { printf ", %6.2f", $4 }' >> $TYPE.log
164 echo >> $TYPE.log
165
166 JFitK40 \
167 -a $DETECTOR \
168 -f $WORKDIR/\[Total\].$TYPE.root \
169 -@${^OPTIONS} \
170 -o $WORKDIR/fit.$TYPE.root \
171 -w \
172 -M >> $TYPE.log
173done