#!/bin/bash
####################################################################
#                  PLGPOP                                          #
# This shell script plots the grid populations using gnuplot.      #
# HDM 07/99                                                        #
####################################################################

#-----------------------------------------------------------------------
#  Definitions :
#-----------------------------------------------------------------------
if [ -d /tmpa ] && [ -w /tmpa ] ; then
   tmp="/tmpa"
elif [ -d /work ] && [ -w /work ] ; then
   tmp="/work"
elif [ -d /tmp ] && [ -w /tmp ] ; then
   tmp="/tmp"
elif [ -d "$HOME" ] && [ -w "$HOME" ] ; then
   tmp="$HOME"
else
   tmp="."
fi

gnuop=$tmp/gnu_options.${LOGNAME}_$$
gnupr=$tmp/gnu_print.${LOGNAME}_$$
file=$tmp/gpop_$LOGNAME.pl
dirin=./
ar=0
xr="*"
yr="0.1"
zr="1.e-7"
lpr="no"
sout=0
G=0
for option in $@; do
  if [ "$option" = "-P" ] ; then
    lpr="--"
  fi
done

if [ -n "$MCTDH_VERSION" ] ; then
   ver="$MCTDH_VERSION"
else
   ver=84
fi

purp="Purpose: Plot of the primitive grid populations (convergence check)."
usage="Usage: plgpop [ -s -v -a -n -x -y -z ] [ -p ] [ -P printer ] [ -h ] nz dof."
help1='-h     : print this help text.'
hlp1a='-i dir : Use dir/check as input file.'
help2='-s     : suppress messages of rdgpop'$ver'.'
hlp2a='-G     : draw grid lines.'
hlp2b='-a val : set lower range of x to val.'
help3='-x val : set upper range of x to val.'
help4='-y val : set upper range of y to val.'
help5='-z val : set lower range of y to val.'
hlp5a="-n     : No units. Sets fs=1. To be used if 'time-not-fs' is set."
help6='-p : prompt for printing the plot at default printer lpr.'
help7='-P printer : specify alternative printer'
help8='(e.g. -P "| lpr -Pps2"  or  -P file).'
help9='"nz" denotes the number of first and last points summed over.'
help0='"dof" denotes the degree of freedom investigated.'
help13='-v val : specifies the program version.'
help14='The default version (can be set by MCTDH_VERSION) is: '$ver

#-----------------------------------------------------------------------
#  Read the options (if any).
#-----------------------------------------------------------------------

while getopts ":hsv:a:x:y:z:GnrpP:i:" opt; do
    case $opt in
    h  ) echo $purp
         echo $usage
         echo ' '"$help1"
         echo ' '"$hlp1a"
         echo ' '"$help2"
         echo ' '"$hlp2a"
         echo ' '"$hlp2b"
         echo ' '"$help3"
         echo ' '"$help4"
         echo ' '"$help5"
         echo ' '"$hlp5a"
         echo ' '"$help13"
         echo '          '"$help14"
         echo ' '"$help6"
         echo ' '"$help7 $help8"
         echo ' '
         echo ' '"$help9"
         echo ' '"$help0"
         echo ' '
         exit ;;
    G  ) G=1 ;;
    s  ) sout=1 ;;
    v  ) ver=$OPTARG ;;
    a  ) ar=$OPTARG ;;
    n  ) nounit="-n" ;;
    x  ) xr=$OPTARG ;;
    y  ) yr=`echo $OPTARG | tr 'd' 'e'`;;
    z  ) zr=`echo $OPTARG | tr 'd' 'e'`;;
    p  ) lpr="| lpr" ;;
    P  ) lpr=$OPTARG ;;
    \? ) echo ' Unkown option!'
         echo $usage
         echo ' -h provides a help text.'
         exit 1 ;;
    i  ) dirin=$OPTARG
         io=' -i '$dirin ;;
  esac
done
shift $(($OPTIND - 1))

if [ -z "${lpr##-*}" ] || [ "$lpr" != "${lpr#[0-9]}" ] ; then
  echo ' No printer specified with the -P option!'
  echo ' Example :  plgpop'$ver' -P "| lpr -Pps2"  :  prints to ps2-printer.'
  echo ' Example :  plgpop'$ver' -P prfile  :  writes postscript-output '
  echo '                                   to the file "prfile".'
  echo
  echo $usage
  echo ' '$help1
  echo ' '$help2
  echo ' '$hlp2a
  echo ' '$hlp2b
  echo ' '$help3
  echo ' '$help4
  echo ' '$help5
  echo ' '$hlp5a
  echo ' '$help6
  echo ' '$help7 $help8
  echo ' '$help9
  echo ' '$help0
  exit 2
fi

nz="$1"
dof="$2"
if [ -z "$1" ] || [ -z "$2" ]  ; then
    echo ' nz =?; (Number of grid points summed over)'
    read nz
    echo ' dof =?; (degree of freedom)'
    read dof
fi


if [ -z "$nz" ] || [ -z "$dof" ] || [ $nz -le 0 ] || [ $dof -le 0 ] ; then
    echo ' Incorrect state and mode given!'
    echo ' nz  : '$nz
    echo ' dof : '$dof
    echo
    echo $usage
    echo
    exit 3
fi

if [ ! -r $dirin/gridpop ] ; then
   echo 'Sorry, there is no (readable) gridpop file in the current directory!'
   exit
fi

#-----------------------------------------------------------------------
#  Call rdgpop84.
#-----------------------------------------------------------------------

if [ $sout -eq 0 ] ; then
  rdgpop$ver $io -g -o $file  $nounit $nz $dof
else
  rdgpop$ver $io -g -o $file  $nounit $nz $dof   | fgrep -2 Illegal
fi

#-----------------------------------------------------------------------
#  Write GNU options file.
#-----------------------------------------------------------------------
echo 'set style data lines'      > $gnuop
echo 'set xlabel "time[fs]"'    >> $gnuop
echo 'set logscale y'           >> $gnuop
echo 'set xrange ['$ar':'$xr']' >> $gnuop
echo 'set yrange ['$zr':'$yr']' >> $gnuop
if [ "$G" = "1" ] ; then
    echo 'set grid'             >> $gnuop
fi

i=0
while [ $i -lt 9 ] && read LINE
  do
    i=$(($i+1))
    if [ "${LINE#"set yr"}" = "$LINE" ] ; then
      echo $LINE >> $gnuop
    fi
  done < $file

#-----------------------------------------------------------------------
#  Call gnuplot.
#-----------------------------------------------------------------------

gnuplot -geometry +0+0 -persist "$gnuop"


if [ "$lpr" != "no" ] ; then
  echo ' Print the plot to "'$lpr'" ?   (y/n; return=no) '
  read print
  if [ ${print:-n} = 'y' ]  ; then
     echo 'set terminal postscript' > $gnupr
     echo 'set output "'$lpr'" '   >> $gnupr
     gnuplot "$gnupr" "$gnuop"
     /bin/rm -f $gnupr
  fi
fi
/bin/rm -f $file
/bin/rm -f $gnuop
exit



exit

