+ unset count_max
+ #echo -ne '\n'
+}
+
+function check_interfile {
+ local input_interfile="${1:?"provide input interfile"}"
+
+ grep -qs '!INTERFILE :=' "${input_interfile}" || return 1
+
+ local header_byte_size=$(awk -F' ' '
+BEGIN { zsize = 0; }
+/matrix size/ && $3 == "[1]" { xsize = $5; }
+/matrix size/ && $3 == "[2]" { ysize = $5; }
+/number of projections/ { zsize += $5; }
+/number of bytes per pixel/ { byte_per_pixel = $7; }
+END { print xsize * ysize * zsize * byte_per_pixel; }' "${input_interfile}")
+
+ local raw_interfile="$(dirname "${input_interfile}")/$(awk -F' := ' '/name of data file/ { print $2; }' "${input_interfile}")"
+
+ test -f "${raw_interfile}" || return 1
+ test $(stat -c%s "${raw_interfile}") -eq ${header_byte_size} || return 1
+}
+
+function write_mhd_header {
+ local input_interfile="${1:?"provide input interfile"}"
+ local output_mhd="$(dirname "${input_interfile}")/$(basename "${input_interfile}" ".hdr").mhd"
+
+ check_interfile "${input_interfile}" || error "${input_interfile} isn't an interfile image"
+
+ local header_start='ObjectType = Image
+NDims = 3
+AcquisitionDate = none
+BinaryData = True
+BinaryDataByteOrderMSB = False
+CompressedData = False
+TransformMatrix = 1 0 0 0 1 0 0 0 1
+Offset = 0 0 0
+CenterOfRotation = 0 0 0
+DistanceUnits = mm
+AnatomicalOrientation = RIP'
+
+ echo "${header_start}" > "${output_mhd}"
+
+ awk -F' ' '
+/scaling factor/ && $4 == "[1]" { xspacing = $6; }
+/scaling factor/ && $4 == "[2]" { yspacing = $6; }
+END { print "ElementSpacing = " xspacing " " yspacing " 1"; }' "${input_interfile}" >> "${output_mhd}"
+
+ awk -F' ' '
+BEGIN { zsize = 0; }
+/matrix size/ && $3 == "[1]" { xsize = $5; }
+/matrix size/ && $3 == "[2]" { ysize = $5; }
+/number of projections/ { zsize += $5; }
+END { print "DimSize = " xsize " " ysize " " zsize; }' "${input_interfile}" >> "${output_mhd}"
+
+ awk -F' := ' '
+/number format/ { format = $2; }
+/number of bytes per pixel/ { byte_per_pixel = $2 }
+END {
+if (format == "unsigned integer" && byte_per_pixel == 8) { print "ElementType = MET_ULONG"; exit };
+if (format == "unsigned integer" && byte_per_pixel == 4) { print "ElementType = MET_UINT"; exit };
+if (format == "unsigned integer" && byte_per_pixel == 2) { print "ElementType = MET_USHORT"; exit };
+if (format == "unsigned integer" && byte_per_pixel == 1) { print "ElementType = MET_UCHAR"; exit };
+if (format == "integer" && byte_per_pixel == 8) { print "ElementType = MET_LONG"; exit };
+if (format == "integer" && byte_per_pixel == 4) { print "ElementType = MET_INT"; exit };
+if (format == "integer" && byte_per_pixel == 2) { print "ElementType = MET_SHORT"; exit };
+if (format == "integer" && byte_per_pixel == 1) { print "ElementType = MET_CHAR"; exit };
+if (format == "float" && byte_per_pixel == 8) { print "ElementType = MET_FLOAT"; exit };
+if (format == "float" && byte_per_pixel == 4) { print "ElementType = MET_DOUBLE"; exit };
+print "ElementType = MET_INT";
+}' "${input_interfile}" >> "${output_mhd}"
+
+ awk -F' := ' '
+/name of data file/ { print "ElementDataFile = " $2; }' "${input_interfile}" >> "${output_mhd}"