diff --git a/slice_tar_file_to_bounds.sh b/slice_tar_file_to_bounds.sh new file mode 100644 index 0000000000000000000000000000000000000000..5a301cb65699351b4a90308e63c2a1e4177dcce7 --- /dev/null +++ b/slice_tar_file_to_bounds.sh @@ -0,0 +1,89 @@ +#!bin/bash +#slice_tar_file_to_bounds.sh +echo "CAUTION: Bounds are currently hard-wired" +echo "It can be calculated automatically, but requires both ogrinfo and cdo to be available" + +# activate conda env which has cdo +# CAUTION: Does not contain rasterio or geopandas, so ogrinfo is not available +echo "run conda activate conda activate /storage/home/tm689/miniconda3/envs/ewses_env" + +tar_file=$1 #/.tar.gz file from Met Office +bounds_file=$2 # shpfile +outputdir=$3 +# TODO: Determine lonres and latres in the script +lonres=0.140625 # can be obtained from any nc in tar file +latres=0.09375 # can be obtained from any nc in tar file + +# 1) Determine bounds of sub-region + +bounds_str=$(ogrinfo -so -al $bounds_file | grep "Extent"); +echo "bounds_str: $bounds_str" + +coords=($(echo $bounds_str | grep -o -E '[0-9\.]+')); + +# bounds of input file +blonmin=${coords[0]}; +blatmin=${coords[1]}; +blonmax=${coords[2]}; +blatmax=${coords[3];} + +# we need nc files to go beyond those bounds by at least one datapoint +lonmin=$(bc -l <<< "$blonmin - $lonres"); +latmin=$(bc -l <<< "$blatmin - $latres"); +lonmax=$(bc -l <<< "$blonmax + $lonres"); +latmax=$(bc -l <<< "$blatmax + $latres"); +# Hard-wired: Pre-determined for example Ethiopia region +lonmin=38.60 +lonmax=40.43 +latmin=8.10 +latmax=8.86 +echo "Bounds are $lonmin, $latmin, $lonmax, $latmax" + +# 2) get original netcdf files from input tar file + +originaldir=$outputdir/original; +mkdir $originaldir; + +tar -zxvf $tar_file -C $originaldir; + +# 3) Slice the original netcdf files + +# define the output directory +# remove suffix +tar_fn=$(basename $tar_file); +tar_fn_small=${tar_fn%.tar.gz}_small; + +outputdir_tar_contents=${outputdir}/${tar_fn_small}/; +mkdir $outputdir_tar_contents; + +nc_fns=$(find $originaldir -type f -name "*.nc"); + +for fn in $nc_fns; do + + fn_small=${outputdir_tar_contents}$(basename ${fn%.nc})_small.nc; + + echo "cdo command: sellonlatbox,$lonmin,$lonmax,$latmin,$latmax $fn $fn_small"; + cdo "sellonlatbox,$lonmin,$lonmax,$latmin,$latmax" $fn $fn_small; + +done; + +# copy over any other files that need to be retained +fns_to_keep=$(find $originaldir -type f -name "sources.txt"); +cp $fns_to_keep $outputdir_tar_contents; + +# 4) Make the smaller tar file + +out_fn=$tar_fn_small.tar.gz; +cd $outputdir; +tar -zcvf $out_fn ${tar_fn_small}/; +cd -; + +echo "created ${out_fn}"; + +# clean up + +rm -rf $originaldir; +rm -rf $outputdir_tar_contents; + +echo finished; +exit 0; \ No newline at end of file