Jpp 20.0.0-195-g190c9e876
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 if [[ $argv[1] == "http"* ]]; then
35 set_variable URL $argv[1]
36 set_variable DETECTOR singleDOM_OMGsim.detx
37 else
38 set_variable URL
39 set_variable DETECTOR $argv[1]
40 fi
41 set_variable FILE_NAME_PATTERN $argv[2]
42 set_variable OMGSIM $argv[3]
43else
44 fatal "Wrong number of arguments."
45fi
46
47function getv() { JPrintProperties -f $OMGSIM -k $1 -@ "cc=#" }
48
49typeset -A BUFFER
50
51let "BUFFER[K40Glass] = `getv glass.K40 ` * `getv mass.glass`"
52let "BUFFER[Th232Glass] = `getv glass.Th232` * `getv mass.glass`"
53let "BUFFER[U238Glass] = `getv glass.U238 ` * `getv mass.glass`"
54let "BUFFER[K40Water] = `getv water.K40 ` * (4.0/3.0) * acos(-1.0) * (`getv radius.K40 `**3 - `getv radius.glass`**3)"
55let "BUFFER[U238Water] = `getv water.U238 ` * (4.0/3.0) * acos(-1.0) * (`getv radius.U238`**3 - `getv radius.glass`**3)"
56
57echo Radio activities:
58
59for KEY VALUE in ${(kv)BUFFER}; do
60 printf "%-12s %12.3e [Bq]\n" $KEY $VALUE
61done
62
63if [[ "$URL" != "" ]]; then
64
65 echo Downloading data from $URL:
66
67 for KEY in ${(k)BUFFER}; do
68 if [[ ! -f ${FILE_NAME_PATTERN/\%/${KEY}} ]]; then
69 wget $URL/${FILE_NAME_PATTERN/\%/${KEY}}
70 fi
71 done
72
73 echo Downloading detector file from $URL:
74 if [[ ! -f $DETECTOR ]]; then
75 wget $URL/$DETECTOR
76 fi
77fi
78
79#ideal PMT simulation
80cat>$WORKDIR/PMT_parameters.A.txt<<EOF
81%.TTS_ns = 1.5
82%.gain = 1.0
83%.gainSpread = 0.0
84%.PunderAmplified = 0.0
85%.slewing = 0
86EOF
87
88#realistic PMT simulation (R12199)
89cat>$WORKDIR/PMT_parameters.B.txt<<EOF
90%.TTS_ns = -1.0
91%.gain = 1.0
92%.gainSpread = 0.4
93%.PunderAmplified = 0.05
94%.slewing = 1
95EOF
96
97OPTIONS=("BELL_SHAPE = 2.0;")
98
99for TYPE in A B; do
100
101 rm -f $TYPE.log
102
103 for KEY VALUE in ${(kv)BUFFER}; do
104
105 set_variable INPUT_FILE ${FILE_NAME_PATTERN/\%/$KEY}
106 set_variable OUTPUT_FILE \[${KEY}\].$TYPE.root
107
108 echo "Processing type $A $INPUT_FILE -> $KEY.$TYPE.log"
109
110 nohup \
111 $JPP_DIR/examples/JCalibrate/JOMGsim \
112 -a $DETECTOR \
113 -f $INPUT_FILE \
114 -o $WORKDIR/$OUTPUT_FILE \
115 -R $VALUE \
116 -P $WORKDIR/PMT_parameters.$TYPE.txt \
117 -P "QE = $FACTOR" \
118 -N $RECYCLING \
119 -d $DEBUG --! >& $KEY.$TYPE.log &
120 done
121
122 wait
123
124 KEYS=(${(k)BUFFER})
125
126 JOpera1D \
127 -f$WORKDIR/\[${^KEYS}\].$TYPE.root:'^M$' \
128 -u Add \
129 -O = \
130 -o $WORKDIR/M.$TYPE.root >& /dev/null
131
132 JOpera2D \
133 -f$WORKDIR/\[${^KEYS}\].$TYPE.root:1.2R \
134 -u Add \
135 -O = \
136 -o $WORKDIR/\[Total\].$TYPE.root >& /dev/null
137
138 H2=1.2R
139
140 JPrintRange2D -f $WORKDIR/\[Total\].$TYPE.root:$H2 | read X1 Y1 Z1 X2 Y2 Z2
141 JPrintResult -f $WORKDIR/\[Total\].$TYPE.root:$H2 -F GetNbinsX -F GetNbinsY | read NX NY
142 JPrintResult -f $WORKDIR/\[Total\].$TYPE.root:$H2 -F GetSumOfWeights | read W
143
144 echo "Processing $KEYS[*] -> $TYPE.log"
145
146 printf "Total rate %7.3f [Hz]\n" $(($W * ($Y2 - $Y1) / ($NY - 1))) >> $TYPE.log
147
148 echo "KM3NeT.hh" >> $TYPE.log
149 $JPP_DIR/examples/JGizmo/JPrint1D \
150 -f $WORKDIR/M.$TYPE.root:M | awk 'NR==3,NR==6 { printf ", %6.2f", $4 }' >> $TYPE.log
151 echo >> $TYPE.log
152
153 JFitK40 \
154 -a $DETECTOR \
155 -f $WORKDIR/\[Total\].$TYPE.root \
156 -@${^OPTIONS} \
157 -o $WORKDIR/fit.$TYPE.root \
158 -w \
159 -M >> $TYPE.log
160done