#!/bin/sh
#
# wf2sp - convert SCRC run W.F. file into Spike Discriminator (.sp) file
#
# Usage:  wf2sp [-v] [-t st,en] runname.wnn [outfile]
# where:  -v		sets verbose output
#	  -t st,en	specifies the start and end of the range to convert,
#			in seconds (default is 0 to max)
# if no outfile is specified, the default is to output a .sp file on the
# standard output.  This is a 16-bit little-endian binary file suitable for
# importing into Gary Bhumbra's Spike Discriminator software.
#
# Copyright (c) 2003-6, Gilles Detillieux, Spinal Cord Research Centre,
# University of Manitoba.  All Rights Reserved.
#

ddopts="conv=swab"
verbose=
range=
while :
do
	case "$1" in
	-\?|-help|--help)	sed -n '3,/^# Univ/s/^#/ /p' "$0"; exit ;;
	-V|-v)	verbose="$1"; shift ;;
	-t)	shift; range="$1"; shift ;;
	*)	break ;;
	esac
done

case "$1" in
*.w[0-9][0-9])	infile="$1"; shift ;;
*)	echo "Usage:  $0 [-v] [-t st,en] runname.wnn [outfile]
	or $0 --help	for detailed usage information" >&2
	exit 1 ;;
esac

runname=`expr "$infile" : '\(.*\)\.w..'`
wfn=`expr "$infile" : '.*\.w0*\([0-9][0-9]*\)'`

if [ ! -r "$infile" ]
then
	echo "$0: Can't open '$infile'" >&2; exit 2
fi
if [ ! -r "$runname.frm" ]
then
	echo "$0: Can't open '$runname.frm'" >&2; exit 2
fi

case "$verbose" in
-V|-v)	echo "Checking effective sample rate of W.F. $wfn in '$runname'..." >&2 ;;
esac
freq=`dumprun "$runname" | awk '/^Sampling rate:/{f=$3}; /^WF/{w=1}; w==1 && /^ *'"$wfn"' / {print f/$3}'`
case "$verbose" in
-V|-v)	echo "Got '$freq'." >&2 ;;
esac
case "$freq" in
[0-9]*)	;;
*)	echo "$0: Can't determine effective rate of W.F. $wfn in '$runname'" >&2
	exit 1 ;;
esac

range=`echo "$range" | tr -d ' '`
case "$range" in
""|[Aa][Ll][Ll])
	;;
[0-9]*\,[0-9]* | [0-9]*\,[Mm][Aa][Xx])
	ddopts="$ddopts bs=2"
	start=`echo "$range" | sed 's/^\([-0-9.e+]*\),.*/\1/'`
	end=`echo "$range" | sed 's/^[^,]*, *\([-0-9.e+MmAaXx]*\) *$/\1/'`
	case "$start,$end" in
	[0-9]*\,[0-9Mm]*)	;;
	*)	echo "$0: Invalid range specified: -t $range" >&2
		exit 1
		;;
	esac
	case "$start" in
	0)	;;
	[0-9]*)	start=`echo "$start" | awk '{print int($1 * '"$freq"')}'`
		ddopts="$ddopts skip=$start" ;;
	*)	echo "$o: Unknown start value '$start', assuming 0" >&2
		start=0 ;;
	esac
	case "$end" in
	[0-9]*)	end=`echo "$end" | awk '{print int($1 * '"$freq"' - '"$start"')}'`
		ddopts="$ddopts count=$end" ;;
	*)	case "$end" in
		[Mm][Aa][Xx])	;;
		*)	echo "$0: Unknown end value '$end', assuming maximum" >&2 ;;
		esac
		;;
	esac
	;;
*)	echo "$0: Invalid time range specified: -t $range" >&2
	exit 1
	;;
esac

echo "Output file $1 has effective sampling rate of $freq Hz." >&2
case "$1" in
""|-)	;;
*)	exec > "$1" ;;
esac

case "$verbose" in
-V|-v)	echo >&2 "Running conversion...
 " \
dd $ddopts if="$infile"
	dd $ddopts if="$infile"
	;;
*)	dd $ddopts if="$infile" 2>/dev/null
esac
