#!/bin/bash
export LC_ALL=C
rm -f ./input/param.par.ori
rm -f ./input/data.dat.oriclass
rm -f ./input/valatxy.coord.oriclass
cp -v ./input/data.dat ./input/data.dat.oriclass
cp -v ./input/param.par ./input/param.par.ori
if [ -f ./input/valatxy.coord ]
then
cp -v ./input/valatxy.coord ./input/valatxy.coord.oriclass
fi
colo=5
if [ "$#" == "1" ]
then
colo=$1
fi
# First find maximum number of members of the class
maxclass=$(awk -v colo="$colo" '{if ($colo>s) {s=$colo}} END {print s}' ./input/data.dat.oriclass)
echo $maxclass
#Loop on gcv values
echo ///////////////////////////////////////////
echo           Cross Validation
echo ///////////////////////////////////////////
echo ' '
cp ./input/param.par  ./input/param.par.ori
cp ./input/data.dat  ./input/data.dat.ori
rm -f ./output/gcv.dat
if [ -f ./input/gcvsampling.dat ]
then
#Create mesh once
if [ -f ./meshgenwork/fort.22 ]
then 
echo ===========================================================================
echo Mesh files aready exist, hope they are correct: otherwise exectute divamesh
echo ===========================================================================
else
divamesh
fi
else
echo Need to provide gcvsampling.dat in ./input !
fi
for gcv in `cat ./input/gcvsampling.dat`
do
echo working with $gcv
rm -f ./divawork/cverror.dat
rm -f ./divawork/cvdatavar.dat
i=0
while [ "$i" -lt "$maxclass" ]
do
let i=$i+1
echo Working on member $i
awk -v colo="$colo" -v i="$i" '{if ($colo != i) {print $0}}' ./input/data.dat.oriclass > ./input/data.dat
awk -v colo="$colo" -v i="$i" '{if ($colo ==i) {print $0}}' ./input/data.dat.oriclass > ./input/valatxy.coord
echo Ready for the calculation of the cross validator
head -17 ./input/param.par.ori > bidon
echo 1 >> bidon
echo   >> bidon
echo 1 >> bidon
echo   >> bidon
echo -99 >> bidon
echo >> bidon
echo $gcv >> bidon
#tail -2 ./input/param.par.ori >> bidon
# no error field
echo >> bidon
echo 0 >> bidon
mv bidon ./input/param.par
divacalc
#now calculate errors from differences in valatxy.coord and fieldatxyascii.anl
# only in real points
# with valex=-99
# and cat them into a file
cd divawork
cp ../input/valatxy.coord fort.20
cp ../output/valatxyascii.anl fort.21
if [ -f ../output/diva.log ] ; then
 cp  -f ../output/diva.log .
fi
echo -99 | ../../bin/cverror.a >> diva.log
if [ $? -ne 0 ];then
echo ' '
echo --------------------------------------------
echo A problem was encountered during execution !
echo       divacvclasses:   cverror.a
echo Check execution track
echo --------------------------------------------
echo ' ' >> diva.log
echo -------------------------------------------- >> diva.log
echo A problem was encountered during execution ! >> diva.log
echo       divacvclasses:    cverror.a  >> diva.log
echo Check execution track >> diva.log
echo -------------------------------------------- >> diva.log
fi
 cp -f diva.log ../output/.
cat fort.22 >> cverror.dat
cat fort.33 >> cvdatavar.dat
cd ..
done
echo Now statistics on the different cross validations
cd divawork
cp cverror.dat fort.20
cp cvdatavar.dat fort.21
echo $gcv | ../../bin/cvtotalerror.a
cat fort.22 >> ../output/gcv.dat
cd ..
rm -f ./input/data.dat
rm -f ./input/valatxy.coord
cp -v ./input/data.dat.oriclass ./input/data.dat
done
mv ./input/param.par.ori ./input/param.par
cp ./output/gcv.dat ./divawork/fort.11
cd divawork
echo Looking for the minimum of GCV
echo ' '
if [ -f ../input/gcvsampling.dat ] 
then 
../../bin/findmin.a
echo ' '
echo ----------------------------------------
echo CV finished
echo Results written in ./output/gcvsnvar.dat
echo ----------------------------------------
else
echo ' '
echo --------------------------------------------
echo A problem was encountered during execution !
echo Check execution track
echo --------------------------------------------
fi
mv fort.12 ../output/gcvsnvar.dat
echo -----------------------------------------------------
echo 'Creating adapted param.par in ./output/param.par.gcv'
echo -----------------------------------------------------
head -23 ../input/param.par  > ../output/param.par.gcv
head -2 ../output/gcvsnvar.dat | tail -1 >> ../output/param.par.gcv
head -25 ../input/param.par | tail -1 >> ../output/param.par.gcv
head -4 ../output/gcvsnvar.dat  | tail -1 >> ../output/param.par.gcv
if [ -f ./input/valatxy.coord.oriclass ]
then
mv -v ./input/valatxy.coord.oriclass ./input/valatxy.coord
fi
