Jpp
JRA_report_DOM.sh
Go to the documentation of this file.
1 #!/bin/bash
2 
3 script=${0##*/}
4 
5 source $JPP_DIR/setenv.sh $JPP_DIR >& /dev/null
6 
7 if ( do_usage $* ); then
8  usage "$script <daq_file> <detector_file> <jra_file> <output_file(.pdf)> <module_id> <integration_site> [min_rate [max_rate [min_tot [max_tot]]]]"
9 fi
10 
11 if (( $# < 5 )); then
12  fatal "No input files."
13 fi
14 
15 case $# in
16  6)
17  INTEGRATION_SITE=$6
18  ;&
19  5)
20  MODULE_ID=$5
21  ;&
22  4)
23  JRA_REPORT=$4
24  ;&
25  3)
26  JRA_FILE=$3
27  ;&
28  2)
29  DETECTOR_FILE=$2
30  ;;
31  1)
32  DAQ_FILE=$1
33  ;;
34  0)
35  :
36  ;;
37  *)
38  echo "Too many arguments"
39  exit
40  ;;
41 esac
42 
43 set_array DAQ_HEADER `JPrintDAQHeader -f ${DAQ_FILE} -d 0`
44 typeset -Z 8 RUN_NUMBER=${DAQ_HEADER[2]}
45 
46 set_variable OUT_DIR `readlink -f $(dirname ${JRA_REPORT})`
47 set_variable REPORT_NAME `echo $(basename ${JRA_REPORT} .pdf)`
48 set_variable TEMPLATE_DIR ${JPP_DIR}/software/JRunAnalyzer/report
49 set_variable REPORT_DIR `readlink -f ${OUT_DIR}/JRA_report_${RUN_NUMBER}`
50 set_variable FIGURE_DIR ${REPORT_DIR}/figures
51 set_variable INCLUDE_DIR ${REPORT_DIR}/include
52 
53 set_variable JFIT_TOT_ROOT_FILE ${FIGURE_DIR}/JFit_ToT_${RUN_NUMBER}.root
54 set_variable JFIT_TOT_ASCII_FILE ${FIGURE_DIR}/JFit_ToT_${RUN_NUMBER}.txt
55 set_variable JPROJECT_FILE ${FIGURE_DIR}/JProject_rates_${RUN_NUMBER}.root
56 
57 set_variable MIN_RATE 0.15
58 set_variable MAX_RATE 0.19
59 set_variable MIN_TOT 18
60 set_variable MAX_TOT 20
61 
62 #######################################
63 #Variables that we will need to define#
64 #######################################
65 
66 if [ ! -d ${OUT_DIR} ]
67 then
68  mkdir -p ${OUT_DIR}
69 fi
70 
71 if [ ! -d ${REPORT_DIR} ]
72 then
73  mkdir -p ${REPORT_DIR}
74 fi
75 
76 if [ ! -d ${FIGURE_DIR} ]
77 then
78  mkdir -p ${FIGURE_DIR}
79 fi
80 
81 # Parse the detector file name from the complete path, and format it so that it compiles in latex.
82 
83 IFS='/' read -ra ADDR <<< "$DETECTOR_FILE"
84 
85 TEX_DETFILE=$(sed -e "s/_/\$\\\\\\\_\$/g" <<< "${ADDR[-1]}")
86 
87 
88 # Here we start appending sed commands to a script that we will later apply to the template.
89 # These commands search a pattern in the template and substitute this pattern by some information obtained from the DAQ files.
90 
91 echo "Preparing report ${run_report}"
92 
93 printf 's/%s/%s/g\n' "--runNumber--" "${RUN_NUMBER}">script.sed
94 printf 's/%s/%s/g\n' "--detectorFile--" "${TEX_DETFILE}">>script.sed
95 printf 's/%s/%s/g\n' "--moduleID--" "${MODULE_ID}">>script.sed
96 printf 's/%s/%s/g\n' "--instrument--" "${INSTRUMENT}">>script.sed
97 printf 's/%s/%s/g\n' "--integrationSite--" "${INTEGRATION_SITE}">>script.sed
98 
99 
100 ################################################################################################
101 # Get detector information such as the number of modules, number of DUs and number of floors. #
102 ################################################################################################
103 
104 det_summary=$(JPrintDetector -a $DETECTOR_FILE -O "summary")
105 
106 DET_COMPONENTS=("strings" "floors" "modules")
107 
108 N_COMPONENTS=()
109 
110 for i in "${DET_COMPONENTS[@]}"; do
111  Regex="Number[[:space:]]+of[[:space:]]+$i[[:space:]]+="
112  if [[ $det_summary =~ $Regex([[:space:]]+)([0-9]+) ]]; then
113  N_COMPONENTS+=(${BASH_REMATCH[2]})
114  fi
115 done
116 
117 N_STRINGS=${N_COMPONENTS[0]}
118 N_FLOORS=${N_COMPONENTS[1]}
119 N_MODULES=${N_COMPONENTS[2]}
120 
121 printf 's/%s/%s/g\n' "--nStrings--" "${N_STRINGS}">>script.sed
122 printf 's/%s/%s/g\n' "--nFloors--" "${N_FLOORS}">>script.sed
123 printf 's/%s/%s/g\n' "--nModules--" "${N_MODULES}">>script.sed
124 
125 
126 ##############################################
127 # Extract JDAQ Types present in the run file #
128 ##############################################
129 
130 JDAQTYPES=()
131 
132 trees=($(JPrintTree -f $DAQ_FILE 2>&1))
133 
134 regex='::JDAQ'
135 
136 c=0
137 for i in "${trees[@]}"; do
138  if [[ $i =~ $regex(.*) ]]; then
139  printf 's/%s/%s/g\n' "--n${BASH_REMATCH[1]}--" "${trees[$c+1]}"
140  printf 's/%s/%s/g\n' "--s${BASH_REMATCH[1]}--" "${trees[$c+2]}"
141  if [ ${trees[$c+1]} -ne 0 ]; then
142  JDAQTYPES+=(${BASH_REMATCH[1]})
143  fi
144  fi
145  c=$c+1
146 done >>script.sed
147 
148 # JDAQHitRouter
149 
150 ############################################################
151 # Extract ROOT versions of objects present in the run file #
152 ############################################################
153 
154 trees=($(JPrintRootVersion -f $DAQ_FILE 2>&1))
155 
156 regex='::JDAQ'
157 
158 c=0
159 for i in "${trees[@]}"; do
160  if [[ $i =~ $regex(.*) ]]; then
161  printf 's/%s/%s/g\n' "--r1${BASH_REMATCH[1]}--" "${trees[$c+1]}"
162  printf 's/%s/%s/g\n' "--r2${BASH_REMATCH[1]}--" "${trees[$c+2]}"
163  fi
164  c=$c+1
165 done >>script.sed
166 
167 
168 #######################################
169 # Extract information from JPrintMeta #
170 #######################################
171 
172 run_info=($(JPrintMeta -f $DAQ_FILE 2>&1))
173 
174 printf 's:%s:%s:g\n' "--rootdaq--" "${run_info[1]}">>script.sed
175 TEX_JPP=$(sed -e "s/_/\\\\\\\_/g" <<< "${run_info[3]}")
176 printf 's/%s/%s/g\n' "--jppdaq--" "${TEX_JPP}">>script.sed
177 
178 run_info=($(JPrintMeta -f $JRA_FILE 2>&1))
179 
180 printf 's:%s:%s:g\n' "--rootjra--" "${run_info[3]}">>script.sed
181 TEX_JPP=$(sed -e "s/_/\\\\\\\_/g" <<< "${run_info[1]}")
182 printf 's/%s/%s/g\n' "--jppjra--" "${TEX_JPP}">>script.sed
183 
184 
185 FLOOR=1
186 STRING=1
187 
188 ####################################################################
189 # Use JFitToT to fit the ToT distributions for each PMT in the DOM #
190 ####################################################################
191 
192 JFitToT -a "${DETECTOR_FILE}" -f "${JRA_FILE}" -R "Detector/DU${STRING}/F${FLOOR}/%_TimesliceL1_2SToT" -o "${JFIT_TOT_ROOT_FILE}" -w -x "12 35" -P "${JFIT_TOT_ASCII_FILE}"
193 
194 echo ${JFIT_TOT_ROOT_FILE}
195 
196 N_PMTS=31
197 
198 SLICES=""
199 
200 for((j=0;j<N_PMTS;j++)); do
201  JPlot1D -f "${JFIT_TOT_ROOT_FILE}:${MODULE_ID}.${j}.1ToT" -x "0 35" -">" "ToT [ns]" -"^" "Counts [a.u.]" -y "1e-3 2e-1" -Y -G "[X][Y]" -T "PMT ${j}" -o "${FIGURE_DIR}/tot_fit_PMT_${j}.png" -B
202  SLICES=$SLICES" $(echo ${j} - 0.5 | bc -l | sed -e 's/^\./0./' -e 's/^-\./-0./') $(echo ${j} + 0.5 | bc)"
203 done
204 
205 JProject2D -f "${JRA_FILE}:Detector/DU${STRING}/F${FLOOR}/h_pmt_rate_distributions_TimesliceL1" -P x -y "${SLICES}" -o "${JPROJECT_FILE}"
206 
207 echo "${SLICES}"
208 
209 for((j=0;j<N_PMTS;j++)); do
210  JPlot1D -f "${JPROJECT_FILE}:h_pmt_rate_distributions_TimesliceL1_px\\[$(echo ${j} - 0.5 | bc -l | sed -e 's/^\./0./' -e 's/^-\./-0./')" -x "1e-3 1e1" -X -y "1e-1 1e4" -Y -G "[X][Y]" -T "PMT ${j}" -o "${FIGURE_DIR}/rate_PMT_${j}.png" -B
211  MEAN_TOT=$(JPrintResult -f "${JFIT_TOT_ROOT_FILE}:${MODULE_ID}.${j}.1ToT" -F "GetMean")
212  SIGMA_TOT=$(JPrintResult -f "${JFIT_TOT_ROOT_FILE}:${MODULE_ID}.${j}.1ToT" -F "GetRMS")
213  MEAN_RATE=$(JPrintResult -f "${JPROJECT_FILE}:h_pmt_rate_distributions_TimesliceL1_px\\[$(echo ${j} - 0.5 | bc -l | sed -e 's/^\./0./' -e 's/^-\./-0./')" -F "GetMean")
214  SIGMA_RATE=$(JPrintResult -f "${JPROJECT_FILE}:h_pmt_rate_distributions_TimesliceL1_px\\[$(echo ${j} - 0.5 | bc -l | sed -e 's/^\./0./' -e 's/^-\./-0./')" -F "GetRMS")
215  printf 's/%s/%s/g\n' "--rate-$(printf %02d $j)--" "${MEAN_RATE}"
216  printf 's/%s/%s/g\n' "--sRate-$(printf %02d $j)--" "${SIGMA_RATE}"
217  printf 's/%s/%s/g\n' "--ToT-$(printf %02d $j)--" "${MEAN_TOT}"
218  printf 's/%s/%s/g\n' "--sToT-$(printf %02d $j)--" "${SIGMA_TOT}"
219  if (( $(echo "${MEAN_RATE} > $MAX_RATE" |bc -l) )) || (( $(echo "${MEAN_RATE} < $MIN_RATE" |bc -l) )) ; then
220  printf 's/%s/%s/g\n' "--passRate-$(printf %02d $j)--" "\\\\rcross"
221  printf 's/%s/%s/g\n' "--pass-$(printf %02d $j)--" "\\\\rcross"
222  else
223  printf 's/%s/%s/g\n' "--passRate-$(printf %02d $j)--" "\\\\gcheck"
224  fi
225 
226  if (( $(echo "${MEAN_TOT} > $MAX_TOT" |bc -l) )) || (( $(echo "${MEAN_TOT} < $MIN_TOT" |bc -l) )) ; then
227  printf 's/%s/%s/g\n' "--passToT-$(printf %02d $j)--" "\\\\rcross"
228  printf 's/%s/%s/g\n' "--pass-$(printf %02d $j)--" "\\\\rcross"
229  else
230  printf 's/%s/%s/g\n' "--passToT-$(printf %02d $j)--" "\\\\gcheck"
231  printf 's/%s/%s/g\n' "--pass-$(printf %02d $j)--" "\\\\gcheck"
232  fi
233 
234 done>>script.sed
235 
236 
237 # ################################################################
238 # # Now the sed script is used to replace in the template report #
239 # ################################################################
240 
241 sed -f script.sed <${TEMPLATE_DIR}/JRA_report_DOM.template >${REPORT_DIR}/JRA_report_DOM_${RUN_NUMBER}.tex && rm -f script.sed
242 
243 # Compile the report
244 
245 cd ${REPORT_DIR}
246 
247 make doc >& /dev/null
248