2 ##########################################################################
6 # This file is part of rootpwa
8 # rootpwa is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
13 # rootpwa is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with rootpwa. If not, see <http://www.gnu.org/licenses/>.
21 ##########################################################################
22 #-------------------------------------------------------------------------
23 # File and Version Information:
24 # $Rev:: -1 $: revision of last commit
25 # $Author:: $: author of last commit
26 # $Date:: $: date of last commit
29 # performs PWA fit of a number of consecutive mass bins specified
30 # by (1-based) start index MASS_BIN_INDEX and the number of bins
33 # runs locally as well as on a batch system
35 # job arguments may be passed via command line or environment
38 # a typical command line to run this script locally looks like this:
39 # for i in $(seq 1 50);\
40 # do fitMassBins.sh -r 2 -N ${i} &> ${ROOTPWA_LOGS_DIR}/fitMassBins.${i}.log;\
43 # uses PWA environment variable(s)
52 # Boris Grube TUM (original author)
55 #-------------------------------------------------------------------------
58 # file layout parameters
59 # subdirectory names for amplitudes
63 # amplitude file format
67 INT_FILE_NAME=norm.int
68 #INT_FILE_NAME=norm.root
69 # fit result file extension
70 FIT_FILE_EXT=.result.root
74 # if SGE is used as batch system, job arrays can be conveniently used
75 # to run this script; MASS_BIN_INDEX is set to SGE_TASK_ID
77 ##$ -l medium=TRUE,h_vmem=200M
78 # path for stdout files
79 ##$ -o /afs/e18.ph.tum.de/user/bgrube/compass/pwa/4PionMuoProdPwa/logs
80 # merge sterr into stdout
82 # send mail when job aborted, rescheduled, or suspended
85 # enable path aliasing
87 # export all environment variables to job
91 echo ">>> info: called ${0} ${*}"
96 usage: $(basename ${0}) [OPTIONS]... [
BATCH INDEX]
98 performs PWA fit
for a number of consecutive
mass bins, by running pwafit of the ROOTPWA package
101 -${WAVE_LIST_OPT} <
FILE> path to
wave list file
102 -${RANK_OPT} <
RANK> rank of spin density
matrix
103 -${NMB_BINS_TO_COMBINE_OPT} <#> number of
mass bins processed by one fit job
104 -${MASS_BINS_DIR_OPT} <DIR> path to directory with
mass bins
105 -${FITS_DIR_OPT} <DIR> path to output directory
for fit results
106 -${NORM_OPT}
if set,
amplitudes are normalized
107 -${VERBOSE_OPT}
if set,
debug output is printed
108 -${TOLERANCE_OPT} <#> minimizer tolerance
109 -${START_VAL_OPT}
if set, start values are fixed to ${DEFAULT_START_VAL}
110 -${HELP_OPT} display
this help and
exit
114 if [[
"${#}" -eq 1 ]]
124 if [[ -z
"${NORM}" ||
"${NORM}" !=
"-N" ]]
130 if [[
"${VERBOSE}" =
"-q" ]]
132 VERBOSE_STATE=
"false"
136 if [[ -z
"${FIX_START_VAL}" ||
"${FIX_START_VAL}" !=
"-x${DEFAULT_START_VAL}" ]]
138 START_VAL_STATE=
"false"
140 START_VAL_STATE=
"true"
144 path to
wave list file ..................... -${WAVE_LIST_OPT} ${WAVE_LIST}
145 rank of spin density
matrix ................ -${RANK_OPT} ${
RANK}
146 number of
mass bins to fit ................. -${NMB_BINS_TO_COMBINE_OPT} ${NMB_BINS_TO_COMBINE}
147 path to directory with
mass bins ........... -${MASS_BINS_DIR_OPT} ${MASS_BINS_DIR}
148 path to output directory
for fit results ... -${FITS_DIR_OPT} ${FITS_DIR}
149 normalize
amplitudes ....................... ${NORM_STATE}
150 print
debug output ......................... ${VERBOSE_STATE}
151 minimizer tolerance ........................ ${TOLERANCE}
152 fix start values ........................... ${START_VAL_STATE}
159 # take arguments either from command line, environment, or use default
160 # command line has highest priority
164 NMB_BINS_TO_COMBINE_OPT=
"n"
165 MASS_BINS_DIR_OPT=
"m"
172 # use default values, if variables are not defined in environment
173 if [[ -z
"${WAVE_LIST}" ]]
175 WAVE_LIST=
"${ROOTPWA_WAVE_LIST}"
177 if [[ -z
"${RANK}" ]]
181 if [[ -z
"${NMB_BINS_TO_COMBINE}" ]]
183 NMB_BINS_TO_COMBINE=1
185 if [[ -z
"${MASS_BINS_DIR}" ]]
187 MASS_BINS_DIR=
"${ROOTPWA_DATA_DIR}"
189 if [[ -z
"${FITS_DIR}" ]]
191 FITS_DIR=
"${ROOTPWA_FITS_DIR}"
193 if [[ -z
"${NORM}" ||
"${NORM}" !=
"-N" ]]
197 if [[ -z
"${TOLERANCE}" ]]
201 if [[ -z
"${DEFAULT_START_VAL}" ]]
203 DEFAULT_START_VAL=
"0.01"
206 if [[ -z
"${SGE_TASK_ID}" ]]
210 # parse command line options
211 while getopts
"${WAVE_LIST_OPT}:${RANK_OPT}:${NMB_BINS_TO_COMBINE_OPT}:${MASS_BINS_DIR_OPT}:${FITS_DIR_OPT}:${NORM_OPT}${VERBOSE_OPT}${TOLERANCE_OPT}:${START_VAL_OPT}${HELP_OPT}" OPTION
214 ${WAVE_LIST_OPT}) WAVE_LIST=${OPTARG};;
215 ${RANK_OPT})
RANK=${OPTARG};;
216 ${NMB_BINS_TO_COMBINE_OPT}) NMB_BINS_TO_COMBINE=${OPTARG};;
217 ${MASS_BINS_DIR_OPT}) MASS_BINS_DIR=${OPTARG};;
218 ${FITS_DIR_OPT}) FITS_DIR=${OPTARG};;
219 ${NORM_OPT}) NORM=
"-N";;
220 ${VERBOSE_OPT}) VERBOSE=
"";;
221 ${TOLERANCE_OPT}) TOLERANCE=${OPTARG};;
222 ${START_VAL_OPT}) FIX_START_VAL=
"-x${DEFAULT_START_VAL}";;
223 ${HELP_OPT})
usage 0;;
226 shift $((${OPTIND} - 1))
# remove used options and leave remaining arguments in $*
231 if [[ -z
"${WAVE_LIST}" || -z
"${RANK}" || -z
"${NMB_BINS_TO_COMBINE}" || -z
"${MASS_BINS_DIR}" || -z
"${FITS_DIR}" ]]
235 if [[
"${ROOTPWA_ENV_SET}" !=
"true" ]]
237 echo "!!! error: ROOTPWA environment is not setup. please source the ROOTPWA setup script first."
242 echo ">>> info: ${0} started on $(date)"
246 # construct array of mass bins in ascending order
247 MASS_BINS=( $(find ${MASS_BINS_DIR} -type
d -regex
'.*/[0-9]+.[0-9]+' -printf
'%f\n' | sort -
n) )
248 # get index and mass range for bin sequence
249 declare -
i BIN_SEQ_IDX_MIN=0
250 declare -
i BIN_SEQ_IDX_MAX=0
251 (( BIN_SEQ_IDX_MIN = (
SGE_TASK_ID - 1) * NMB_BINS_TO_COMBINE ))
252 (( BIN_SEQ_IDX_MAX =
SGE_TASK_ID * NMB_BINS_TO_COMBINE - 1 ))
253 if (( BIN_SEQ_IDX_MIN > ${#MASS_BINS[@]} - 1 ))
255 echo "!!! error: lower bin sequence index $(expr ${BIN_SEQ_IDX_MAX} + 1) out of range. exiting."
258 if (( BIN_SEQ_IDX_MAX > ${#MASS_BINS[@]} - 1 ))
260 echo "??? warning: upper bin sequence index $(expr ${BIN_SEQ_IDX_MAX} + 1) out of range. set to maximum possible value."
261 (( BIN_SEQ_IDX_MAX = ${#MASS_BINS[@]} - 1 ))
263 if (( BIN_SEQ_IDX_MIN > BIN_SEQ_IDX_MAX ))
265 echo "!!! error: lower
bin sequence index $(expr ${BIN_SEQ_IDX_MIN} + 1) larger than upper $(expr ${BIN_SEQ_IDX_MAX} + 1). exiting.
"
268 BIN_SEQ_M_MIN=${MASS_BINS[${BIN_SEQ_IDX_MIN}]%.*}
269 BIN_SEQ_M_MAX=${MASS_BINS[${BIN_SEQ_IDX_MAX}]#*.}
270 # path of output ROOT file
271 OUT_FILE=${FITS_DIR}/${BIN_SEQ_M_MIN}.${BIN_SEQ_M_MAX}${FIT_FILE_EXT}
272 # check whether wave list file exists
273 if [[ ! -s "${WAVE_LIST}
" ]]
275 echo "!!! error:
wave list file ${WAVE_LIST} does not exist! exiting.
"
280 # loop over bins in batch
281 echo "------------------------------------------------------------
"
282 echo ">>>
info: performing PWA fit
for ${NMB_BINS_TO_COMBINE}
mass bins: index range = [$(expr ${BIN_SEQ_IDX_MIN} + 1), $(expr ${BIN_SEQ_IDX_MAX} + 1)],
mass range = [${BIN_SEQ_M_MIN}, ${BIN_SEQ_M_MAX}]
"
284 for (( IDX=BIN_SEQ_IDX_MIN; IDX<=BIN_SEQ_IDX_MAX; IDX++ ))
286 MASS_BIN_NAME=${MASS_BINS[${IDX}]}
287 # path to mass bin data
288 AMP_DIR="${MASS_BINS_DIR}/${MASS_BIN_NAME}/${DT_AMP_DIR_NAME}
"
289 BIN_M_MIN=${MASS_BIN_NAME%.*}
290 BIN_M_MAX=${MASS_BIN_NAME#*.}
291 # check whether amplitude directory exists
292 if [[ ! -d "${AMP_DIR}
" ]]
294 echo "!!! error: amplitude directory
'${AMP_DIR}' does not exist! exiting.
"
297 PS_AMP_DIR="${MASS_BINS_DIR}/${MASS_BIN_NAME}/${PS_AMP_DIR_NAME}
"
298 # check whether directory with phase-space amplitudes exists
299 if [[ ! -d "${PS_AMP_DIR}
" ]]
301 echo "!!! error: directory
'${PS_AMP_DIR}' with phase-space
amplitudes does not exist! exiting.
"
304 PSACC_AMP_DIR="${MASS_BINS_DIR}/${MASS_BIN_NAME}/${PSACC_AMP_DIR_NAME}
"
305 # check whether directory with accepted phase space amplitudes exists
306 if [[ ! -d "${PSACC_AMP_DIR}
" ]]
308 echo "??? warning: directory
'${PSACC_AMP_DIR}' with accepted phase-space
amplitudes does not exist.
using phase space integrals in
'${PS_AMP_DIR}'.
"
309 PSACC_AMP_DIR=${PS_AMP_DIR}
311 # set path to phase-space integrals
312 PS_INT_FILE="${PS_AMP_DIR}/${INT_FILE_NAME}
"
313 PSACC_INT_FILE="${PSACC_AMP_DIR}/${INT_FILE_NAME}
"
315 NMB_NORM_EVENTS=$(sed '2q;d' ${PS_INT_FILE})
316 echo "............................................................
"
317 echo ">>>
info: starting PWA fit
for bin $(expr ${IDX} + 1) with
mass = [${BIN_M_MIN}, ${BIN_M_MAX}]
"
318 echo ">>>
info:
using amplitude files in ${AMP_DIR}
"
319 #ls -l --dereference ${AMP_DIR}/*.${AMP_FILE_EXT}
320 echo ">>>
info:
using wavelist ${WAVE_LIST}
"
321 CMD="${ROOTPWA_BIN}/pwafit -l ${BIN_M_MIN} -u ${BIN_M_MAX} -w ${WAVE_LIST} -
d ${AMP_DIR} -o ${OUT_FILE} ${NORM} -
n ${PS_INT_FILE} -
A ${NMB_NORM_EVENTS} -
a ${PSACC_INT_FILE} -r ${
RANK} ${VERBOSE} -t ${TOLERANCE} ${FIX_START_VAL}
"
328 echo ">>>
info: ${0} successfully finished on $(
date)
"