#!/bin/bash
####################################################################
#                  PLEDSTR                                         #
# This shell script plots the energy distribution of a free        #
# gaussian wave packet.                                            #
# HDM 11/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}_$$
lpr="no"
: ${sout:=0}
for option in $@; do
  if [ "$option" = "-P" ] ; then
    lpr="--"
  fi
done


purp="Purpose: Plot of the (free) energy distribution of a gaussian WP."
usage="Usage: pledstr [ -h -s sigma -m mass -k momentum"
usag1="-y -z -p -P printer ] E1 E2. "
help1='-h       : print this help text.'
help2='-s sigma : Width of gaussian in au.'
help3='-m mass  : particle (reduced) mass in au (if.gt.500)  '\
'or amu (if.le.500).'
help4='-k mom   : particle momentum in au.'
help5='-y val   : set upper range of y to val. ( 0=automatic; default ).'
help6='-z val   : set lower range of y to val. ( 0=automatic; default ).'
help7='-G       : Grid lines are plotted.'
help8='-F       : Grid lines are disabled. (default; toggle for -G).'
help9='-p       : prompt for printing the plot at default printer lpr.'
hlp10='-P printer : specify alternative printer'
hlp11='(e.g. -P "| lpr -Pps2"  or  -P file).'
hlp12='E1  E2 : Energy range in eV.'
hlp13='Please input numbers with a dot, e.g 2. or 2.0 rather than 2'
hlp14='Note that energy here means kinetic energy.'
minus40='----------------------------------------'


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

while getopts ":hFGy:z:m:k:s:pP:" opt; do
    case $opt in
    h  ) echo "$purp"
         echo "$usage $usag1"
         echo " $help1"
         echo " $help2"
         echo " $help3"
         echo " $help4"
         echo " $help5"
         echo " $help6"
         echo " $help7"
         echo " $help8"
         echo " $help9"
         echo " $hlp10"
         echo " $hlp11"
         echo " $hlp12"
         echo " $hlp13"
         echo " $hlp14"
         echo "$minus40$minus40"
         echo
         exit ;;
    F  ) gopt=""    ;;
    G  ) gopt="-G"  ;;
    x  ) xr=$OPTARG ;;
    y  ) yr=`echo $OPTARG | tr 'd' 'e'`;;
    z  ) zr=`echo $OPTARG | tr 'd' 'e'`;;
    s  ) sig=$OPTARG ;;
    k  ) k=$OPTARG ;;
    m  ) mass=$OPTARG ;;
    p  ) lpr="| lpr" ;;
    P  ) lpr=$OPTARG ;;
    \? ) echo ' Unkown option!'
         echo $usage
         echo ' -h provides a help text.'
         exit 1 ;;
  esac
done
shift $(($OPTIND - 1))

if [ -z "${lpr##-*}" ] || [ "$lpr" != "${lpr#[0-9]}" ] ; then
  echo ' No printer specified with the -P option!'
  echo ' Example :  plcap -P "| lpr -Pps2"  :  prints to ps2-printer.'
  echo ' Example :  plcap -P prfile  :  writes postscript-output '\
                   'to the file "prfile".'
  echo
  echo $usage $usag1
  echo " $help1"
  echo " $help2"
  echo " $help3"
  echo " $help4"
  echo " $help5"
  echo " $help6"
  echo " $help7"
  echo " $help8"
  echo " $help9"
  echo " $hlp10"
  echo " $hlp11"
  echo " $hlp12"
  exit 2
fi
if [ -n "$1" ] ; then
  e1=$1
fi
if [ -n "$2" ] ; then
  e2=$2
fi
if [ -z "$sig" ] ; then
    echo ' Width sigma =? '
    read sig
fi
if [ -z "$k" ] ; then
    echo ' Momentum k =? '
    read k
fi
if [ -z "$mass" ] ; then
    echo ' mass =? ( [amu] if m<500 else [au] ).'
    read mass
fi
if [ -z "$e1" ] ; then
    echo ' Energy E1 =? [eV].'
    read e1
fi
if [ -z "$e2" ] ; then
    echo ' Energy E2 =? [eV].'
    read e2
fi

#-----------------------------------------------------------------------
#  Ensure that the variables contain only one number.
#-----------------------------------------------------------------------
n=`echo $n | cut -d' ' -f1`
eta=`echo $eta | cut -d' ' -f1`
length=`echo $length | cut -d' ' -f1`
mass=`echo $mass | cut -d' ' -f1`
e1=`echo $e1 | cut -d' ' -f1`
e2=`echo $e2 | cut -d' ' -f1`

#-----------------------------------------------------------------------
# Write file for gnuplot.
#-----------------------------------------------------------------------

echo 'set title "Free Energy Distribution"' > $gnuop
echo 'set xlabel "Energy[eV]" '            >> $gnuop
echo 'set label "sigma = '$sig'" at graph 0.6,0.95' >> $gnuop
echo 'set label "k = '$k'" at graph 0.8,0.95' >> $gnuop
if [ -n "$yr" ] || [ -n "$zr" ]; then
    : ${yr:='*'}
    : ${zr:='*'}
    if [ "$yr" = "0" ]; then yr='*'; fi
    if [ "$zr" = "0" ]; then zr='*'; fi
    echo 'set yr ['$zr':'$yr']'  >> $gnuop
fi

if [ "$gopt" = "-G" ] ; then
    echo 'set grid'              >> $gnuop
else
    echo 'set nogrid'            >> $gnuop
fi
echo 'set xr ['$e1':'$e2']'      >> $gnuop
echo 'm = '$mass                 >> $gnuop
echo 'if(m<500) m = m*1822.89'   >> $gnuop
echo 'k = '$k                    >> $gnuop
echo 's = '$sig                  >> $gnuop
echo 'e0 = 27.2114*k*k*0.5/m'    >> $gnuop
echo 'a = 4.*m*s*s/27.2114'      >> $gnuop
echo 'ezp = 0.5/a'               >> $gnuop
echo 'ee = 0.5*(e0 - 1./a + sqrt(abs(e0*e0-2.*e0/a))) '   >> $gnuop
echo 'vv = exp(-a*(ee+e0-2.*sqrt(ee*e0)))/sqrt(ee) '      >> $gnuop
echo 'vv = 0.999/vv'                                      >> $gnuop
#echo 'print "<E0>  = " , e0 '                             >> $gnuop
#echo 'print "<Ezp> = " , ezp'                             >> $gnuop
echo 'print "<E> = " , e0+ezp, " eV" '                    >> $gnuop
echo 'plot vv*exp(-a*(x+e0-2.*sqrt(x*e0)))/sqrt(x) notit' >> $gnuop



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 $gnuop

while : ; do
newopt=
echo
echo 'New Options ?    (q for quit)'
read newopt

nquit=`echo $newopt | cut -b1`
nhelp=`echo $newopt | cut -b1,2`

if [ "$nquit" = "q" ] ; then exit ; fi
if [ "$nhelp" = "-h" ] ; then
  echo ' '$help2
  echo ' '$help3
  echo ' '$help4
  echo ' '$help5
  echo ' '$help6
  echo ' '$help7
  echo ' '$help8
  echo ' '$help9
  echo ' '$hlp10
  echo ' '$hlp11
  echo ' '$hlp12

else

# Export the parameters and call recursively pledstr.
  export sig
  export k
  export mass
  export e1
  export e2
  export gopt
  export zr
  export yr
  export sout

  pledstr $newopt
  exit
fi
done










