Jpp  master_rocky-43-ge265d140c
the software that should make you happy
JGedanken.sh
Go to the documentation of this file.
1 #!/bin/zsh
2 #
3 # \author mdejong
4 version=1.0
5 script=${0##*/}
6 
7 # ------------------------------------------------------------------------------------------
8 #
9 # Auxiliary script for Gedanken experiment.
10 #
11 # ------------------------------------------------------------------------------------------
12 
13 if [ -z $JPP_DIR ]; then
14  echo "Variable JPP_DIR undefined."
15  exit
16 fi
17 
18 source $JPP_DIR/setenv.sh $JPP_DIR
19 
20 zmodload zsh/mathfunc
21 
22 set_variable: DEBUG SIRENE_DEBUG 2
23 set_variable: WORKDIR SIRENE_WORKDIR ${TMPDIR:-/tmp}/
24 set_variable NUMBER_OF_EVENTS 1000000
25 
26 # detector
27 
28 set_variable R_M 25.0
29 set_variable Z_M 50.0
30 set_variable MODULE $R_M 0.0 $Z_M # position
31 
32 # particle
33 
34 set_variable E_GEV 20 # energy
35 set_variable POS 0.0 0.0 0.0 # position
36 set_variable DIR 0.0 0.0 1.0 # direction
37 set_variable TYPE 13 # PDG
38 
39 # graphics
40 
41 set_variable: FORMAT GRAPHICS_FORMAT gif
42 set_variable+ BATCH GRAPHICS_BATCH -B
43 
44 if do_usage $*; then
45  usage "$script [number of events]"
46 fi
47 
48 case $# in
49  1) set_variable NUMBER_OF_EVENTS $1;;
50 esac
51 
52 set_variable DETECTOR $WORKDIR/detector.detx
53 
54 if [[ ! -f $DETECTOR ]]; then
55 
56  JModule \
57  -D 1001 \
58  -M 1 \
59  -P "$MODULE" \
60  -o $DETECTOR \
61  -d $DEBUG
62 fi
63 
64 if [[ ! -f $WORKDIR/gedanken.root ]]; then
65 
66  $JPP_DIR/examples/JSirene/JGedanken \
67  -o $WORKDIR/gedanken.root \
68  -P "$POS" \
69  -D "$DIR" \
70  -E $E_GEV \
71  -T $TYPE \
72  -n $NUMBER_OF_EVENTS \
73  -a $DETECTOR \
74  -d $DEBUG
75 fi
76 
77 if [[ ! -f $WORKDIR/sirene.root ]]; then
78 
79  JSirene \
80  -a $DETECTOR \
81  -f $WORKDIR/gedanken.root \
82  -o $WORKDIR/sirene.root \
83  -F $JPP_DATA/I%p.dat \
84  -N 0 \
85  -d $DEBUG
86 fi
87 
88 if [[ ! -f $WORKDIR/domino.root ]]; then
89 
90  $JPP_DIR/examples/JSirene/JDomino \
91  -a $DETECTOR \
92  -f $WORKDIR/sirene.root \
93  -o $WORKDIR/domino.root \
94  -d $DEBUG
95 fi
96 
97 JPlot1D \
98  -f $WORKDIR/"domino.root:h\[%\]" \
99  -y "1.0e-6 1.0e0" -Y \
100  -> "#Deltat [ns]" \
101  -\^ "dP/dt npe/ns" \
102  -T "" \
103  -O "HIST][" \
104  -o pdf.$FORMAT $BATCH
105 
106 set_variable PDF $JPP_DATA/J%p.dat
107 set_variable EPS 1.0E-6
108 set_variable PI $((acos(-1)))
109 
110 # constrain angle between [epsilon, pi - epsilon]
111 #
112 function constrain()
113 {
114  if (( $1 > $PI - $EPS )); then
115  echo $(($PI - $EPS))
116  elif (( $1 < $EPS )); then
117  echo $EPS
118  else
119  echo $1
120  fi
121 }
122 
123 for id in {1..31}; do
124 
125  echo "Generating graphics PMT $id"
126 
127  getPMT -a $DETECTOR -p $id | read ID X Y Z DX DY DZ T0 STATUS
128 
129  let "THETA = acos($DZ)"
130 
131  if (( $DX > +$EPS )); then
132  let "PHI = atan(fabs($DY/$DX))"
133  elif (( $DX < -$EPS )); then
134  let "PHI = $PI - atan(fabs($DY/$DX))"
135  else
136  let "PHI = 0.5*$PI"
137  fi
138 
139  set_variable THETA `constrain $THETA`
140  set_variable PHI `constrain $PHI`
141 
142  JPlotPDF \
143  -f ${PDF/\%/1} \
144  -f ${PDF/\%/2} \
145  -f ${PDF/\%/3} \
146  -f ${PDF/\%/4} \
147  -f ${PDF/\%/5} \
148  -f ${PDF/\%/6} \
149  -D "$THETA $PHI" \
150  -R $R_M -E $E_GEV \
151  -H "860 -10 850" \
152  -o $WORKDIR/f1\[${id}\].root
153 
154  set_variable TITLE `printf "PMT[%d] (%5.3f,%5.3f)" $id $THETA $PHI`
155 
156  JPlot1D \
157  -f $WORKDIR/"domino.root:h\[${id}\]" \
158  -f $WORKDIR/f1\[${id}\].root:h0 \
159  -y "1.0e-6 1.0e0" -Y \
160  -> "#Deltat [ns]" \
161  -\^ "dP/dt npe/ns" \
162  -T "$TITLE" \
163  -O "HIST][" \
164  -o $WORKDIR/pdf_${id}.$FORMAT $BATCH
165 done
166 
167 montage \
168  -tile 8x4 \
169  -geometry +0+0 \
170  $WORKDIR/pdf_{1..31}.$FORMAT \
171  PDF.$FORMAT >& /dev/null