diff options
Diffstat (limited to 'funtools/funtest/funstack')
-rwxr-xr-x | funtools/funtest/funstack | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/funtools/funtest/funstack b/funtools/funtest/funstack new file mode 100755 index 0000000..bbcfc3d --- /dev/null +++ b/funtools/funtest/funstack @@ -0,0 +1,86 @@ +#!/bin/sh + +if [ x"$3" = x ]; then + echo "usage: $0 ifile ofile regions" + echo "The regions specification should be in physical coords and can be:" + echo " a region string e.g. 'circle 512 512 .1;box(606,606,3,4)'" + echo " a region file e.g. 'foo.reg' (nb: s9 file OK, but no @ prefix)" + exit 1 +fi + +# input parameters +IFILE=$1 +OFILE=$2 +REGIONS=$3 + +# temporary fits file +TFITS=./tfunstack.fits +rm -f ${TFITS} + +# temporary funcalc command file +TFC=./tfunstack.fc +rm -f ${TFC} + +# convert file to region string, if necessary +if [ -r "${REGIONS}" ]; then + REGIONS=`cat ${REGIONS} | awk '{print $0";"}'` +fi + +# generate the funcalc command file from region string +# we do this so that awk can parse the region and add in the region centers +echo "${REGIONS}" | \ +sed '/^physical/d;s/[\(\),]/ /g' | \ +sed '/^#/d;/^global/d' | \ +awk 'BEGIN{RS=";"}; +BEGIN{ + print "local" + print "int nreg;" + print "int xdim, ydim;" + print "double xmin, xmax, umin, ymax;" + print "double xref, yref;" + print "double xreg[1024], yreg[1024];" + print "end" + print "before" + print "FunInfoGet(fun, FUN_SECT_DIM1, &xdim, FUN_SECT_DIM2, &ydim, 0);" + print "FunInfoGet(fun, FUN_MIN1, &xmin, FUN_MAX1, &xmax, 0);" + print "FunInfoGet(fun, FUN_MIN2, &ymin, FUN_MAX2, &ymax, 0);" + print "xref = (xmin + xmax)/2.0;" + print "yref = (ymin + ymax)/2.0;" + i=1 +}; +{ + if( ($1!="polygon") && ($1!="pie") ){ + if( ($2 != "") && ($3 != "") ){ + print "xreg["i"]="$2";" + print "yreg["i"]="$3";" + i = i+1 + } + if( i >= 1024 ){ + printf "ERROR: too many regions (1024 max)" > "dev/stderr" + exit + } + } +} +END{ + print "nreg="i-1";" + print "end" + print "if( cur->region > nreg ){" + print " gerror(stderr, \"%d exceeds input reg %d\\n\", cur-> region, nreg);" + print " exit(1);" + print "}" + print "cur->x = cur->x - xreg[cur->region] + xref;" + print "cur->y = cur->y - yreg[cur->region] + yref;" +}' > ${TFC} + +# funtools seems to rearrange the order of columns when $REGION is specified +# so here we get the column names explicitly to preserve order +COLS=`funhead ${IFILE} | egrep 'TTYPE[0-9]' | awk '{print $3}' | sed "s/'//g"` + +# first filter the input file and preserve the region ids +funtable ${IFILE}"[${REGIONS}]" ${TFITS} "${COLS} "'$REGION' + +# now run the funcalc script to stack the events +funcalc -f ${TFC} ${TFITS} ${OFILE} + +# clean up +rm -f ${TFC} ${TFITS} |