source: trunk/Mars/hawc/processing/DiskToDB/extract-aux-data2.sh@ 20112

Last change on this file since 20112 was 20104, checked in by maslowski, 4 years ago
Added Telescope as command line parameter. And fixed some bugs.
File size: 8.3 KB
Line 
1#!/bin/bash
2#
3# Calculate aux data from auxfiles in directory DIR and write SQL query
4# containing the aux information to OUTPUT
5#
6# Example:
7# bash extract-aux-data2.sh cred-file 1 /data/HE01/aux 20201111
8
9set -o nounset
10
11function ErrExit()
12{
13 echo "ERROR: Line `caller`: ${BASH_COMMAND}" >&2
14 rm -f ${TMPOUT}
15 exit 1
16}
17
18function StrgCExit()
19{
20 echo " "
21 echo "$0 was forcefully terminated" >&2
22 rm -f ${TMPOUT}
23 exit 1
24}
25
26trap ErrExit ERR
27trap StrgCExit INT
28
29
30# File to which the queries are written
31OUTPUT="insert-aux.sql"
32# The Mars build directory
33readonly MARS="/home/hawc/Desktop/Mars/"
34# The path to your Mars/build directory where the processing macros are stored
35readonly MACROS="/home/hawc/Desktop/Mars-src/hawc/processing/"
36readonly PROGRAM=$0
37INSERT="INSERT INTO"
38
39usage()
40{
41 echo "usage: $PROGRAM [-hir] [-o outfile] [Credentials Telescope Dir Night]"
42 echo " -h display help"
43 echo " -i query ignores already existing rows"
44 echo " -r query replaces already existing rows(overwrites -i)"
45 echo " -d delete all entries for a given Night and Telescope"
46 echo " -o outfile name of the SQL query file"
47 exit 1;
48}
49
50# Check for flags
51while getopts 'hirdo:' flag
52do
53 case "${flag}" in
54 h) usage ;;
55 i) INSERT="INSERT IGNORE" ;;
56 r) INSERT="REPLACE INTO" ;;
57 d) DELETE="true" ;;
58 o) OUTPUT="${OPTARG}" ;;
59 *) usage ;;
60 esac
61done
62shift $(($OPTIND-1))
63
64# Check if Mars exists
65if [ ! -d "${MARS}" ]
66then
67 echo "Mars does not exists at ${MARS}. Please change in \
68 script ${PROGRAM}."
69 exit 1
70fi
71
72# Check if MACROS exists
73if [ ! -d "${MACROS}" ]
74then
75 echo "Macros directorey does not exists at ${MACROS}. Please change in \
76 script ${PROGRAM}."
77 exit 1
78fi
79
80# Check if at least two arguments are provided
81if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] || [ -z "${4}" ]
82then
83 echo "Not enough arguments. Check -h for help!"
84 exit 1
85fi
86
87# File containing the access credentials for the database
88CREDENTIALS="${1}"
89# Specify the telescope for which to run the script.
90TEL="${2}"
91# The base directory of the aux-files
92DIR="${3}"
93# NIGHT
94NIGHT="${4}"
95
96TMPOUT="./tmpAuxOut-${TEL}.sql"
97ERRCODE=
98
99# Open the query-file with the create table statement
100echo \
101"\
102CREATE TABLE IF NOT EXISTS AuxData
103(
104 Telescope TINYINT UNSIGNED NOT NULL,
105 NIGHT INT UNSIGNED NOT NULL,
106 RUNID MEDIUMINT UNSIGNED NOT NULL,
107 TavgDRS FLOAT,
108 TrmsDRS FLOAT,
109 Umed FLOAT,
110 Uavg FLOAT,
111 Udev FLOAT,
112 Urms FLOAT,
113 Imed FLOAT,
114 Iavg FLOAT,
115 Idev FLOAT,
116 Irms FLOAT,
117 Tmed FLOAT,
118 Tavg FLOAT,
119 Tdev FLOAT,
120 Trms FLOAT,
121 TavgPSU FLOAT,
122 TotalOnTime FLOAT,
123 TotalDeadTime FLOAT,
124 TavgFTM FLOAT,
125 ThresholdChMin MEDIUMINT UNSIGNED,
126 ThresholdChMed FLOAT,
127 ThresholdChMax MEDIUMINT UNSIGNED,
128 ThresholdSumMin MEDIUMINT UNSIGNED,
129 ThresholdSumMax MEDIUMINT UNSIGNED,
130 RateCh0 FLOAT,
131 RateCh1 FLOAT,
132 RateCh2 FLOAT,
133 RateCh3 FLOAT,
134 RateCh4 FLOAT,
135 RateCh5 FLOAT,
136 RateCh6 FLOAT,
137 RateCh7 FLOAT,
138 RateSum0 FLOAT,
139 RateSum1 FLOAT,
140 PRIMARY KEY(Telescope, NIGHT, RUNID)
141);
142"\ > ${OUTPUT}
143
144# Set previous fail stats to also be fail here
145echo "UPDATE DataOnDisk" >> ${OUTPUT}
146echo "SET DataOnDisk.auxiliary = 6" >> ${OUTPUT}
147echo "WHERE (DataOnDisk.calibration != 0" >> ${OUTPUT}
148echo "OR DataOnDisk.header != 0)" >> ${OUTPUT}
149echo "AND DataOnDisk.Telescope = ${TEL}" >> ${OUTPUT}
150echo "AND DataOnDisk.NIGHT = ${NIGHT};" >> ${OUTPUT}
151
152if [ ${DELETE} = "true" ]
153then
154 echo "DELETE FROM AuxData" >> ${OUTPUT}
155 echo "WHERE Telescope = ${TEL}" >> ${OUTPUT}
156 echo "AND NIGHT = ${NIGHT};" >> ${OUTPUT}
157 echo "" >> ${OUTPUT}
158fi
159
160echo \
161"\
162${INSERT} AuxData
163SELECT * FROM
164( VALUES
165"\ >> ${OUTPUT}
166
167# Get all available runs and their start and stop time
168# note that no check is done on the stop time!
169echo \
170"\
171SELECT RawData.NIGHT,
172 RawData.RUNID,
173 RawData.TSTARTI + RawData.TSTARTF,
174 RawData.TSTOPI + RawData.TSTOPF
175FROM RawData
176INNER JOIN DataOnDisk
177ON DataOnDisk.Telescope = RawData.Telescope
178AND DataOnDisk.NIGHT = RawData.NIGHT
179AND DataOnDisk.RUNID = RawData.RUNID
180WHERE RawData.Telescope=${TEL}
181AND RawData.NIGHT=${NIGHT}
182AND DataOnDisk.ISDRSFILE = 0
183AND DataOnDisk.header = 0
184AND DataOnDisk.calibration = 0\
185"\
186 | mysql \
187 --defaults-file=${CREDENTIALS} \
188 --skip-column-names \
189 --batch --raw \
190 --compress \
191 | \
192while read -r -a LINE
193do
194 # Extract night, runid, begin and end
195 NIGHT=${LINE[0]}
196 RUNID=${LINE[1]}
197 BEG=${LINE[2]}
198 END=${LINE[3]}
199
200 # Split night into year, month, day
201 # Base path for the night
202 FNAME="${DIR}"/${NIGHT:0:4}/${NIGHT:4:2}/${NIGHT:6:2}/${NIGHT}
203
204 echo ${FNAME}
205
206 cd ${MARS}
207
208 TNAME="${FNAME}".FAD_CONTROL_TEMPERATURE.fits
209 if [ ! -f "${TNAME}" ]
210 then
211 DRS_TEMP="NULL, NULL"
212 DRS_TEMP_ERR=2
213 else
214 # Return corresponding data for DRS temperatures from
215 # FAD_CONTROL_TEMPEREATURE
216 DRS_TEMP=`root -b -q -l \
217 "${MACROS}"/drstemp.C\(\""${TNAME}"\","${BEG}","${END}"\) \
218 | grep result \
219 | cut -f2- -d" "`
220
221 if [ ! -n "${DRS_TEMP}" ]
222 then
223 DRS_TEMP="NULL, NULL"
224 DRS_TEMP_ERR=1
225 else
226 DRS_TEMP_ERR=0
227 fi
228 echo ${DRS_TEMP}
229 fi
230
231 # Return corresponding data for currents from BIAS_CONTROL_DYNAMIC_DATA
232 BNAME="${FNAME}".BIAS_CONTROL_DYNAMIC_DATA.fits
233 if [ ! -f "${BNAME}" ]
234 then
235 BIAS_DATA="NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
236 BIAS_DATA_ERR=20
237 else
238 BIAS_DATA=`root -b -q -l \
239 "${MACROS}"/currents.C\(\""${BNAME}"\","${BEG}","${END}"\) \
240 | grep result \
241 | cut -f2- -d" "`
242
243 if [ ! -n "${BIAS_DATA}" ]
244 then
245 BIAS_DATA="NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
246 BIAS_DATA_ERR=10
247 else
248 BIAS_DATA_ERR=0
249 fi
250 echo ${BIAS_DATA}
251 fi
252
253 # Return corresponding data for trigger information from FTM_CONTROL_DATA
254 MNAME="${FNAME}".FTM_CONTROL_DATA.fits
255 if [ ! -f "${MNAME}" ]
256 then
257 FTM_DATA="NULL, NULL, NULL, NULL"
258 FTM_DATA_ERR=200
259 else
260 FTM_DATA=`root -b -q -l \
261 "${MACROS}"/trigger.C\(\""${MNAME}"\","${BEG}","${END}"\) \
262 | grep result \
263 | cut -f2- -d" "`
264
265 if [ ! -n "${FTM_DATA}" ]
266 then
267 FTM_DATA="NULL, NULL, NULL, NULL"
268 FTM_DATA_ERR=100
269 else
270 FTM_DATA_ERR=0
271 fi
272 echo ${FTM_DATA}
273 fi
274
275 # Return corresponding data for threshold seeting from FTU_CONTROL_DATA
276 UNAME="${FNAME}".FTU_CONTROL_DATA.fits
277 if [ ! -f "${UNAME}" ]
278 then
279 FTU_DATA="NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
280 FTU_DATA_ERR=2000
281 else
282 FTU_DATA=`root -b -q -l \
283 "${MACROS}"/threshold.C\(\""${UNAME}"\","${BEG}","${END}"\) \
284 | grep result \
285 | cut -f2- -d" "`
286
287 if [ ! -n "${FTU_DATA}" ]
288 then
289 FTU_DATA="NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL"
290 FTU_DATA_ERR=1000
291 else
292 FTU_DATA_ERR=0
293 fi
294 echo ${FTU_DATA}
295 fi
296
297 cd -
298
299 # Write the result as one row to the query file
300 echo "/* "${FNAME}" */" >> ${OUTPUT}
301 echo "ROW(" >> ${OUTPUT}
302 echo " "${TEL}, ${NIGHT}, ${RUNID}, >> ${OUTPUT}
303 echo " "${DRS_TEMP}, >> ${OUTPUT}
304 echo " "${BIAS_DATA}, >> ${OUTPUT}
305 echo " "${FTM_DATA}, >> ${OUTPUT}
306 echo " "${FTU_DATA} >> ${OUTPUT}
307 echo ")," >> ${OUTPUT}
308
309 ERRCODE=$((DRS_TEMP_ERR + BIAS_DATA_ERR + FTM_DATA_ERR + FTU_DATA_ERR))
310
311 echo "UPDATE DataOnDisk SET auxiliary=${ERRCODE}" >> ${TMPOUT}
312 echo "WHERE NIGHT=${NIGHT}" >> ${TMPOUT}
313 echo "AND Telescope=${TEL}" >> ${TMPOUT}
314 echo "AND RUNID=${RUNID};" >> ${TMPOUT}
315
316done
317
318# Delete last comma and replace it with closing parintheses
319if [ -f "${TMPOUT}" ]
320then
321 sed -i '$s/,/)/' "${OUTPUT}"
322
323 # Finish the query file with defining the column names
324 echo "\
325AS
326v(
327 Telescope, NIGHT, RUNID,
328 TavgDRS, TrmsDRS,
329 Umed, Uavg, Udev, Urms,
330 Imed, Iavg, Idev, Irms,
331 Tmed, Tavg, Tdev, Trms,
332 TavgPSU, TotalOnTime, TotalDeadTime, TavgFTM,
333 ThresholdChMin, ThresholdChMed, ThresholdChMax,
334 ThresholdSumMin, ThresholdSumMax,
335 RateCh0, RateCh1, RateCh2, RateCh3, RateCh4, RateCh5, RateCh6, RateCh7,
336 RateSum0, RateSum1
337 );
338"\ >> ${OUTPUT}
339
340else
341 head -n -4 "${OUTPUT}" > out.sql.new && mv out.sql.new "${OUTPUT}"
342fi
343
344if [ -f "${TMPOUT}" ]
345then
346 cat ${TMPOUT} >> ${OUTPUT}
347fi
348
349rm -f ${TMPOUT}
Note: See TracBrowser for help on using the repository browser.