#
# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
# 
# Copyright (c) 2007-2009, Kornel Laskowski
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted
# provided that the following conditions are met:
#
#    * Redistributions of source code must retain the above copyright notice, this list of
#      conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright notice, this list of
#      conditions and the following disclaimer in the documentation and/or other materials provided
#      with the distribution.
#    * Neither the name of Sigtactica Research or of the Royal Institute of Technology (KTH) or of
#      Carnegie Mellon University nor the names of their contributors may be used to endorse or
#      promote products derived from this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+== */

REPOURL=http://www.cs.cmu.edu/~kornel/software
MPEDODIR=edo-1.0.5
MPEDOBIN=mpedo
SPEDODIR=edo-1.2.9
SPEDOBIN=spedo_n_nu_lomo
DATADIR=lex.Q

UNKFRACTION=min

FIGURES = \
	Figure1corrected.eps \
	Figure2.eps \
	Figure3.eps

# --+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0

all : ${FIGURES}

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# OBTAIN THE MULTI-PORT EDO MODEL SOURCE
#

${MPEDODIR}.tar.gz :
	wget ${REPOURL}/$@

${MPEDODIR}.tar : ${MPEDODIR}.tar.gz
	gunzip $^

${MPEDODIR} : ${MPEDODIR}.tar
	tar xvf $^

${MPEDODIR}/${MPEDOBIN} : ${MPEDODIR}
	(cd $^; make clean; make ${MPEDOBIN}; cd ..)

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# OBTAIN THE SINGLE-PORT EDO MODEL SOURCE
#

${SPEDODIR}.tar.gz :
	wget ${REPOURL}/$@

${SPEDODIR}.tar : ${SPEDODIR}.tar.gz
	gunzip $^

${SPEDODIR} : ${SPEDODIR}.tar
	tar xvf $^

${SPEDODIR}/${SPEDOBIN} : ${SPEDODIR}
	(cd $^; make clean; make ${SPEDOBIN}; cd ..)

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# OBTAIN THE DISCRETE SPEECH CHRONOGRAMS FOR THE ICSI MEETING CORPUS
#

${DATADIR}.tar.gz :
	wget ${REPOURL}/$@

${DATADIR}.tar : ${DATADIR}.tar.gz
	gunzip $^

${DATADIR} : ${DATADIR}.tar
	tar xvf $^

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# Figure 1 ON PAGE 2 (5601 as published by IEEE)
#

Figure1corrected.eps : Figure1corrected.m
	matlab -nodisplay < $^ > /dev/null

Figure1corrected.m : ${MPEDODIR}/${MPEDOBIN} ${SPEDODIR}/${SPEDOBIN} ${DATADIR}
	rm -f $@
	echo -e "mpedoold = [\n\tNaN\n\tNaN\n\t1.1082\n\t1.0953\n\t1.0968\n\t1.0992\n];" > $@
	echo "mpedonew = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${MPEDODIR}/${MPEDOBIN} -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} | grep ^ALL | sed "s/ \+/ /g" | cut -d' ' -f3; \
	done >> $@
	echo "];" >> $@
	echo "spedo = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "figure;" >> $@
	echo "clf;" >> $@
	echo "hold on;" >> $@
	echo "plot(1:length(mpedoold),mpedoold,'ko-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(mpedonew),mpedonew,'ko-','MarkerFaceColor','k');" >> $@
	echo "plot(1:length(spedo),spedo,'k^-','MarkerFaceColor','k');" >> $@
	echo "plot(1:length(mpedoold),mpedoold,'ko-','MarkerFaceColor','w');" >> $@
	echo "set(gca,'XTick',1:length(spedo));" >> $@
	echo "set(gca,'YTick',[1.095 1.1 1.105]);" >> $@
	echo "axis([ -0.5 length(spedo)+0.5 1.0925 1.109 ]);" >> $@
	echo "box on" >> $@
	echo "grid on" >> $@
	echo "text(2.8,mpedoold(3)-0.0001,'MPEDO (orig)','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(2.8,mpedonew(3)-0.0004,'MPEDO (fix)','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,spedo(1)+0.0004,'SPEDO','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "set(gcf,'PaperPositionMode','auto');" >> $@
	echo "set(gcf,'PaperSize',[4.25 5.5]);" >> $@
	echo "print -depsc2 Figure1corrected.eps" >> $@
	echo "exit" >> $@

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# Figure 2 ON PAGE 3 (5602 as published by IEEE)
#

Figure2.eps : Figure2.m
	matlab -nodisplay < $^ > /dev/null

Figure2.m : ${SPEDODIR}/${SPEDOBIN} ${DATADIR}
	rm -f $@
	echo "ngram2 = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "ngram3 = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "ngram4 = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "ngram5 = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3,S4,N4 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "ngram6 = [" >> $@
	for KMAXMODEL in 1 2 3 4 5 6; do \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3,S4,N4,S5,N5 -QDir ${DATADIR} -KmaxModel $${KMAXMODEL} -unkFraction ${UNKFRACTION} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
	done >> $@
	echo "];" >> $@
	echo "figure;" >> $@
	echo "clf;" >> $@
	echo "hold on;" >> $@
	echo "plot(1:length(ngram2),ngram2,'k^-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(ngram3),ngram3,'kv-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(ngram4),ngram4,'kd-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(ngram5),ngram5,'ks-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(ngram6),ngram6,'ko-','MarkerFaceColor','w');" >> $@
	echo "set(gca,'XTick',[1 2 3 4 5 6]);" >> $@
	echo "set(gca,'YTick',[1.095 1.1 1.105]);" >> $@
	echo "axis([ -0.5 6.5 1.0925 1.109 ]);" >> $@
	echo "box on" >> $@
	echo "grid on" >> $@
	echo "text(0.8,ngram2(1)-0.0010,'2-gram','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,ngram3(1)-0.0001,'3-gram','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,ngram4(1)-0.0001,'4-gram','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,ngram5(1)-0.0001,'5-gram','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,ngram6(1),'6-gram','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "[val,idx] = min(ngram2);" >> $@
	echo "plot(idx,val,'k^-','MarkerFaceColor','k');" >> $@
	echo "[val,idx] = min(ngram3);" >> $@
	echo "plot(idx,val,'kv-','MarkerFaceColor','k');" >> $@
	echo "[val,idx] = min(ngram4);" >> $@
	echo "plot(idx,val,'kd-','MarkerFaceColor','k');" >> $@
	echo "[val,idx] = min(ngram5);" >> $@
	echo "plot(idx,val,'ks-','MarkerFaceColor','k');" >> $@
	echo "[val,idx] = min(ngram6);" >> $@
	echo "plot(idx,val,'ko-','MarkerFaceColor','k');" >> $@
	echo "set(gcf,'PaperPositionMode','auto');" >> $@
	echo "set(gcf,'PaperSize',[4.25 5.5]);" >> $@
	echo "print -depsc2 Figure2.eps" >> $@
	echo "exit" >> $@

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0
#
# Figure 3 ON PAGE 3 (5602 as published by IEEE)
#

Figure3.eps : Figure3.m
	matlab -nodisplay < $^ > /dev/null

Figure3.m : ${SPEDODIR}/${SPEDOBIN} ${DATADIR}
	rm -f $@
	for SKIP in 0 1 2 3 4; do \
		echo "skip$${SKIP} = ["; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3,S4,N4,S5,N5 -QDir ${DATADIR} -KmaxModel 1 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3,S4,N4 -QDir ${DATADIR} -KmaxModel 2 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2,S3,N3 -QDir ${DATADIR} -KmaxModel 3 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2 -QDir ${DATADIR} -KmaxModel 4 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2 -QDir ${DATADIR} -KmaxModel 5 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo -ne "\t"; \
		${SPEDODIR}/${SPEDOBIN} -history S1,N1,S2,N2 -QDir ${DATADIR} -KmaxModel 6 -unkFraction ${UNKFRACTION} -nu $${SKIP} | grep ^ALL | grep rest | sed "s/ \+/ /g" | cut -d' ' -f9; \
		echo "];"; \
	done >> $@
	echo "figure;" >> $@
	echo "clf;" >> $@
	echo "hold on;" >> $@
	echo "plot(1:length(skip0),skip0,'kx-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(skip1),skip1,'kx-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(skip2),skip2,'kx-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(skip3),skip3,'kx-','MarkerFaceColor','w');" >> $@
	echo "plot(1:length(skip4),skip4,'kx-','MarkerFaceColor','w');" >> $@
	echo "set(gca,'XTick',[1 2 3 4 5 6]);" >> $@
	echo "axis([ -0.5 6.5 1.08 1.24 ]);" >> $@
	echo "text(0.8,skip0(1)-0.0025,'skip-0','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,skip1(1)+0.0050,'skip-1','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,skip2(1)-0.0015,'skip-2','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,skip3(1)-0.0015,'skip-3','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "text(0.8,skip4(1)-0.0015,'skip-4','HorizontalAlignment','right','VerticalAlignment','middle');" >> $@
	echo "box on" >> $@
	echo "grid on" >> $@
	echo "set(gcf,'PaperPositionMode','auto');" >> $@
	echo "set(gcf,'PaperSize',[4.25 5.5]);" >> $@
	echo "print -depsc2 Figure3.eps" >> $@
	echo "exit" >> $@

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0

clean :
	rm -rf ${FIGURES} *.m *.tar edo-*.*.* lex.*

# ==+====1====+====2====+====3====+====4====+====5====+====6====+====7====+====8====+====9====+====0

