#!/bin/bash
# Copyright 2013 Matus Chochlik. Distributed under the Boost
# Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
side=${2:-512}
input_file=${1}

if [ ! -x $(which mincinfo) ]
then echo "minc-tools mincinfo is required!" && exit 1
fi

if [ ! -x $(which mincreshape) ]
then echo "minc-tools mincreshape is required!" && exit 1
fi

if [ ! -x $(which minctoraw) ]
then echo "minc-tools minctoraw is required!" && exit 1
fi

input_set="\
\377\376\375\374\373\372\371\370\
\367\366\365\364\363\362\361\360\
\357\356\355\354\353\352\351\350\
\347\346\345\344\343\342\341\340\
\337\336\335\334\333\332\331\330\
\327\326\325\324\323\322\321\320\
\317\316\315\314\313\312\311\310\
\307\306\305\304\303\302\301\300\
\277\276\275\274\273\272\271\270\
\267\266\265\264\263\262\261\260\
\257\256\255\254\253\252\251\250\
\247\246\245\244\243\242\241\240\
\237\236\235\234\233\232\231\230\
\227\226\225\224\223\222\221\220\
\217\216\215\214\213\212\211\210\
\207\206\205\204\203\202\201\200\
\177\176\175\174\173\172\171\170\
\167\166\165\164\163\162\161\160\
\157\156\155\154\153\152\151\150\
\147\146\145\144\143\142\141\140\
\137\136\135\134\133\132\131\130\
\127\126\125\124\123\122\121\120\
\117\116\115\114\113\112\111\110\
\107\106\105\104\103\102\101\100\
\077\076\075\074\073\072\071\070\
\067\066\065\064\063\062\061\060\
\057\056\055\054\053\052\051\050\
\047\046\045\044\043\042\041\040\
\037\036\035\034\033\032\031\030\
\027\026\025\024\023\022\021\020\
\017\016\015\014\013\012\011\010\
\007\006\005\004\003\002\001\000\
"

output_set="\
\000\001\002\003\004\005\006\007\
\010\011\012\013\014\015\016\017\
\020\021\022\023\024\025\026\027\
\030\031\032\033\034\035\036\037\
\040\041\042\043\044\045\046\047\
\050\051\052\053\054\055\056\057\
\060\061\062\063\064\065\066\067\
\070\071\072\073\074\075\076\077\
\100\101\102\103\104\105\106\107\
\110\111\112\113\114\115\116\117\
\120\121\122\123\124\125\126\127\
\130\131\132\133\134\135\136\137\
\140\141\142\143\144\145\146\147\
\150\151\152\153\154\155\156\157\
\160\161\162\163\164\165\166\167\
\170\171\172\173\174\175\176\177\
\200\201\202\203\204\205\206\207\
\210\211\212\213\214\215\216\217\
\220\221\222\223\224\225\226\227\
\230\231\232\233\234\235\236\237\
\240\241\242\243\244\245\246\247\
\250\251\252\253\254\255\256\257\
\260\261\262\263\264\265\266\267\
\270\271\272\273\274\275\276\277\
\300\301\302\303\304\305\306\307\
\310\311\312\313\314\315\316\317\
\320\321\322\323\324\325\326\327\
\330\331\332\333\334\335\336\337\
\340\341\342\343\344\345\346\347\
\350\351\352\353\354\355\356\357\
\360\361\362\363\364\365\366\367\
\370\371\372\373\374\375\376\000\
"

if [ -f ${input_file} ] && [ -r ${input_file} ]
then
	mincinfo \
		-dimlength xspace \
		-dimlength yspace \
		-dimlength zspace \
		${input_file} |
	xargs |
	while read dim_x dim_y dim_z
	do
		echo $(((side-dim_x)/2)) $(((side-dim_y)/2)) $(((side-dim_z)/2)) |
		while read off_x off_y off_z
		do
			tmp_mnc=$(mktemp)
			mincreshape \
				${input_file} \
				${tmp_mnc} \
				-clobber \
				-start ${off_x},${off_y},${off_z} \
				-count ${side},${side},${side} \
				-dimorder zspace,yspace,xspace \
				-nofill &&
			minctoraw -byte -normalize ${tmp_mnc} |
			tr "${input_set}" "${output_set}"
			rm -f ${tmp_mnc}
		done
	done
else
	echo "'${input_file}' is not a readable file."
	exit 2
fi
