mangle/scripts/trim_mask.sh

141 lines
4.8 KiB
Bash
Raw Permalink Normal View History

2021-06-21 16:38:06 +02:00
#! /bin/sh
# <20> M E C Swanson 2008
#script to trim a mask so that it only includes polygons in a specified region
#USAGE: trim_mask.sh <mask> <trimmer> <outfile> [<pixelization arguments>]
#EXAMPLE:trim_mask.sh mask.pol trimmer.pol trimmed_mask.pol
# You can also optionally provide arguments to the pixelize function
# in the 4th argument:
#EXAMPLE: trim_mask.sh mask.pol trimmer.pol trimmed_mask.pol -Ps0,6
if [ "$MANGLEBINDIR" = "" ] ; then
MANGLEBINDIR="../../bin"
fi
if [ "$MANGLESCRIPTSDIR" = "" ] ; then
MANGLESCRIPTSDIR="../../scripts"
fi
if [ "$MANGLEDATADIR" = "" ] ; then
MANGLEDATADIR="../../masks"
fi
mask=$1
trimmer=$2
outfile=$3
pixargs=$4
#check command line arguments:
if [ "$mask" = "" ] || [ "$trimmer" = "" ] || [ "$outfile" = "" ] ; then
echo >&2 "ERROR: enter the input polygon file, a polygon defining the region you"
echo >&2 "want to trim to, and the output polygon file as command line arguments."
echo >&2 ""
echo >&2 "USAGE: trim_mask.sh <mask> <trimmer> <outfile> [<pixelization arguments>]"
echo >&2 "EXAMPLE: trim_mask.sh mask.pol trimmer.pol trimmed_mask.pol"
echo >&2 "EXAMPLE w/ optional argument to pixelize: trim_mask.sh mask.pol trimmer.pol trimmed_mask.pol -Ps0,6"
exit 1
fi
#if no argument for pixelize is given, pixelize to resolution 6 with the simple scheme:
if [ "$pixargs" = "" ] ; then
pixargs="-Ps0,6"
fi
head -n 100 $mask > jmaskhead
head -n 100 $trimmer > jtrimmerhead
#grab pixelization info from input files
awk '/pixelization/{print $0}' < jmaskhead > jpix
res1=`awk '{print substr($2, 1, length($2)-1)}' < jpix`
scheme1=`awk '{print substr($2, length($2))}' < jpix`
awk '/pixelization/{print $0}' < jtrimmerhead > jpix
res2=`awk '{print substr($2, 1, length($2)-1)}' < jpix`
scheme2=`awk '{print substr($2, length($2))}' < jpix`
rm jpix jmaskhead jtrimmerhead
#if input files are pixelized, make sure they are consistent:
if [ ! "$res1" = "" ] && [ ! "$res2" = "" ] ; then
if [ $res1 -eq -1 ] || [ $res2 -eq -1 ] ; then
echo >&2 "ERROR: cannot trim a mask pixelized adaptively."
echo >&2 "Pixelize both your mask and your trimmer polygon(s) using a fixed resolution,"
echo >&2 "e.g. -Ps0,8, and try again."
exit 1
fi
if [ $res1 -ne $res2 ] ; then
echo >&2 "ERROR: mask polygons and trimmer polygons must be pixelized to the same resolution."
echo >&2 "Pixelize both your mask and your trimmer polygon(s) using a fixed resolution,"
echo >&2 "e.g. -Ps0,8, and try again."
exit 1
fi
#if input files are unpixelized, pixelize them:
elif [ ! "$res1" = "" ] && [ "$res2" = "" ] ; then
if [ $res1 -eq -1 ] ; then
echo >&2 "ERROR: cannot trim a mask pixelized adaptively."
echo >&2 "Pixelize both your mask and your trimmer polygon(s) using a fixed resolution,"
echo >&2 "e.g. -Ps0,8, and try again."
exit 1
fi
echo "$MANGLEBINDIR/pixelize -P${scheme1}0,$res1 $trimmer trimmer_pix"
$MANGLEBINDIR/pixelize -P${scheme1}0,$res1 $trimmer trimmer_pix || exit
trimmer="trimmer_pix"
elif [ "$res1" = "" ] && [ ! "$res2" = "" ] ; then
if [ $res2 -eq -1 ] ; then
echo >&2 "ERROR: cannot trim a mask pixelized adaptively."
echo >&2 "Pixelize both your mask and your trimmer polygon(s) using a fixed resolution,"
echo >&2 "e.g. -Ps0,8, and try again."
exit 1
fi
echo "$MANGLEBINDIR/pixelize -P${scheme2}0,$res2 $mask mask_pix"
$MANGLEBINDIR/pixelize -P${scheme2}0,$res2 $mask mask_pix || exit
mask="mask_pix"
else
echo "$MANGLEBINDIR/pixelize $pixargs $trimmer trimmer_pix"
$MANGLEBINDIR/pixelize $pixargs $trimmer trimmer_pix || exit
echo "$MANGLEBINDIR/pixelize $pixargs $mask mask_pix"
$MANGLEBINDIR/pixelize $pixargs $mask mask_pix || exit
trimmer="trimmer_pix"
mask="mask_pix"
fi
#check if input file is snapped
snapped=`awk '/snapped/{print $1}' < $mask`
#if mask file isn't snapped, snap it
if [ ! "$snapped" = "snapped" ]; then
echo "Snapping $mask ..."
mv $mask jp
$MANGLEBINDIR/snap jp $mask || exit
rm jp
fi
#find the complement of the trimmer polygon
echo "$MANGLESCRIPTSDIR/find_complement.sh $trimmer trimmer_comp"
$MANGLESCRIPTSDIR/find_complement.sh $trimmer trimmer_comp || exit
#set the complement to have zero weight
echo 0 > jw0
echo "$MANGLEBINDIR/weight -zjw0 trimmer_comp jcomp0"
$MANGLEBINDIR/weight -zjw0 trimmer_comp jcomp0 || exit
rm jw0
#balkanize the mask with the zero-weight complement, thereby trimming off
#everything that does not lie within the trimmer polygon
echo "$MANGLEBINDIR/balkanize $mask jcomp0 jb"
$MANGLEBINDIR/balkanize $mask jcomp0 jb || exit
rm jcomp0
#unify to get rid of zero weight polygons
echo "$MANGLEBINDIR/unify jb $outfile"
$MANGLEBINDIR/unify jb $outfile || exit
rm jb
echo "Polygons of $1 trimmed by $2 written to ${outfile}."
#clean up
rm trimmer_comp
if [ -e trimmer_pix ] ; then
rm trimmer_pix
fi
if [ -e mask_pix ] ; then
rm mask_pix
fi