########################################################################
#  Job Name: exglmp_prep.sh.sms
#  Purpose: To process observations from various sources to create
#           packed data for gridded analysis at the current hour
#  Remarks: This script runs at 26 minutes after every hour
#
#   HISTORY: Jul 27, 2010      - new job for Gridded LAMP
#
########################################################################
set -x

########################################################################
#   INITIALIZE VARIABLES FOR CHECKING NUMBER OF OBSERVATIONS
########################################################################
let num_stns=0
let num_stns_m1=0

########################################################################
#   BEGIN PROCESSING CURRENT HOURLY FILES
#
#   DUMP MEATR, MARINE/LAKE, MESONET, SYNOPTIC DATA
########################################################################
echo GLMPLOG: `date` - start running glmp_hrlytbl for previous hour
DUMP=${DUMP:-$bufrsh/dumpjb}

for name in metar mbuoy lcman tidgcm cmansh msonet synop
do
########################################################################
#   BEGIN PROCESSING HOURLY FILES
########################################################################

   if [[ $name == metar ]]; then
      TYPE_NAME="METR"
   elif [[ $name == msonet ]]; then
      TYPE_NAME="MESO"
   elif [[ $name == synop ]]; then
      TYPE_NAME="SYNO"
   elif [[ $name == mbuoy || $name == lcman || $name == tidgcm || $name == cmansh ]]; then
      TYPE_NAME=`print $name | cut -c 1-4 | tr '[a-z]' '[A-Z]'`
   fi
   
   time $DUMP $DATm1 0.25 $name
   export pgm=glmp_hrlytbl
   . prep_step
   export XLFUNIT_42="$name.ibm"
   export XLFUNIT_30="ncepdate_m1"
   export XLFUNIT_60="sfctbl.head"
   export XLFUNIT_70="$name.raw.$DATm1"
   export XLFUNIT_80="$name.bufr.$DATm1"
   export TYPE_NAME="${TYPE_NAME}"
   startmsg
   $EXEClmp/glmp_hrlytbl >> $pgmout 2>errfile
   export err=$?; err_chk

########################################################################
#   REMOVE "ZZZZZZZZ" TO HAVE 1 "ZZZZZZZZ" PER 1 SFCTBL FILE
########################################################################
   cat $name.bufr.$DATm1 | grep -v "ZZZZZZZZ" > tmp
   mv tmp $name.bufr.$DATm1

   cat $name.bufr.$DATm1 >> obs4.bufr.$DATm1
done   #FOR name

sort -o obs4.bufr.$DATm1 obs4.bufr.$DATm1

########################################################################
#   MAKE SFCTBL TAIL
########################################################################
echo "ZZZZZZZZ: END-OF-HOUR ${HOURm1}Z" > sfctbl.tail

########################################################################
#   GET RID OF OBS DATA IF ELEMENTS ARE ALL MISSING (BLANK).
#   FOR 03,09,15,21z            :    -9 FOR 3PCP
#   FOR 00,06,12,18z            :    -9 FOR 6PCP
#   FOR 01,02,04, ... , 22z,23z : BLANK FOR 6PCP
########################################################################
if [[ -f obs4.bufr.$DATm1 && -s obs4.bufr.$DATm1 ]]; then
   cat sfctbl.head obs4.bufr.$DATm1 sfctbl.tail | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :    :    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :  -9:    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :  -9:    :    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :  -9:  -9:   :   :   :   :   :   :   :   :   :   :   :" > glmp_obs4_sfctbl.${DATm1}_m1run
fi

if [[ -s glmp_obs4_sfctbl.${DATm1}_m1run ]] then
   lines=`wc -l glmp_obs4_sfctbl.${DATm1}_m1run | cut -c1-8`
   stations=`expr $lines - 3`
else
   let stations=0
fi

echo GLMPLOG: `date` - $stations STATIONS WERE PROCESSED AT PREVIOUS HOUR
echo GLMPLOG: `date` - end running glmp_hrlytbl for previous hour

rm obs4.bufr.$DATm1
rm sfctbl.head sfctbl.tail

if [[ ! -s glmp_obs4_sfctbl.${DATm1}_m1run ]]; then
   printf "NUMBER OF OBS REPORTING STATIONS AT PREVIOUS HOUR:          0" >> $pgmout
else
#######################################################################
#   RUN OBSPREP CODE TO QC THE TDP OBS AND PACK THEM IN TDLPACK
#######################################################################
   echo GLMPLOG: `date` - start running glmp_obsprep for tdp at previous hour

   export pgm=glmp_obsprep
   . prep_step
   export XLFUNIT_10="ncepdate_m1"
   export XLFUNIT_20="glmp_obs4_sfctbl.${DATm1}_m1run"
   export XLFUNIT_26="$PARMlmp/glmp_hr00_prep.tdpstns.lst"
   export XLFUNIT_27="$PARMlmp/glmp_hr00_prep.tdpstns.tbl"
   export XLFUNIT_70="glmp_tdp_obs4pkd.${DATm1}_m1run"
   startmsg
   $EXEClmp/glmp_obsprep < $PARMlmp/glmp_obsprep_tdp.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   echo GLMPLOG: `date` - end running glmp_obsprep for previous hour

fi

########################################################################
#   BEGIN PROCESSING CURRENT HOURLY FILES
#
#   DUMP MEATR, MARINE/LAKE, MESONET, SYNOPTIC DATA
########################################################################
echo GLMPLOG: `date` - start running glmp_hrlytbl for current hour
DUMP=${DUMP:-$bufrsh/dumpjb}

for name in metar mbuoy lcman tidgcm cmansh msonet synop
do
########################################################################
#   BEGIN PROCESSING HOURLY FILES
########################################################################

   if [[ $name == metar ]]; then
      TYPE_NAME="METR"
   elif [[ $name == msonet ]]; then
      TYPE_NAME="MESO"
   elif [[ $name == synop ]]; then
      TYPE_NAME="SYNO"
   elif [[ $name == mbuoy || $name == lcman || $name == tidgcm || $name == cmansh ]]; then
      TYPE_NAME=`print $name | cut -c1-4 | tr '[a-z]' '[A-Z]'`
   fi

   time $DUMP $DAT 0.25 $name
   export pgm=glmp_hrlytbl
   . prep_step
   export XLFUNIT_42="$name.ibm"
   export XLFUNIT_30="ncepdate"
   export XLFUNIT_60="sfctbl.head"
   export XLFUNIT_70="$name.raw.$DAT"
   export XLFUNIT_80="$name.bufr.$DAT"
   export TYPE_NAME="${TYPE_NAME}"
   startmsg
   $EXEClmp/glmp_hrlytbl >> $pgmout 2>errfile
   export err=$?; err_chk

########################################################################
#   REMOVE "ZZZZZZZZ" TO HAVE 1 "ZZZZZZZZ" PER 1 SFCTBL FILE
########################################################################
   cat $name.bufr.$DAT | grep -v "ZZZZZZZZ" > tmp
   mv tmp $name.bufr.$DAT

      cat $name.bufr.$DAT >> obs4.bufr.$DAT
done   #FOR name
sort -o obs4.bufr.$DAT obs4.bufr.$DAT 

########################################################################
#   MAKE SFCTBL TAIL
########################################################################
echo "ZZZZZZZZ: END-OF-HOUR ${HOUR}Z" > sfctbl.tail 
        
########################################################################
#   GET RID OF OBS DATA IF ELEMENTS ARE ALL MISSING (BLANK). 
#   FOR 03,09,15,21z            :    -9 FOR 3PCP
#   FOR 00,06,12,18z            :    -9 FOR 6PCP  
#   FOR 01,02,04, ... , 22z,23z : BLANK FOR 6PCP
########################################################################
if [[ -f obs4.bufr.$DAT &&  -s obs4.bufr.$DAT ]]; then
   cat sfctbl.head obs4.bufr.$DAT sfctbl.tail | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :    :    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :  -9:    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :  -9:    :    :   :   :   :   :   :   :   :   :   :   :   :" | grep -v ":   :   :       :       :       :     :   :   :   :      :     :   :   :   :   :   :   :   :   :   :   :   :   :    :    :  -9:  -9:   :   :   :   :   :   :   :   :   :   :   :" > glmp_obs4_sfctbl.$DAT
fi

if [[ -s glmp_obs4_sfctbl.$DAT ]] then
   lines=`wc -l glmp_obs4_sfctbl.$DAT | cut -c1-8`
   stations=`expr $lines - 3`
else
   let stations=0
fi

echo GLMPLOG: `date` - $stations STATIONS WERE PROCESSED
echo GLMPLOG: `date` - end running glmp_hrlytbl

rm obs4.bufr.$DAT
rm sfctbl.head sfctbl.tail

if [[ ! -s glmp_obs4_sfctbl.$DAT ]]; then
   printf "NUMBER OF OBS REPORTING STATIONS AT CURRENT HOUR:          0" >> $pgmout
else
#######################################################################
#   RUN OBSPREP CODE TO QC THE TDP OBS AND PACK THEM IN TDLPACK
#######################################################################
   echo GLMPLOG: `date` - start running glmp_obsprep for tdp at current hour

   export pgm=glmp_obsprep
   . prep_step
   export XLFUNIT_10="ncepdate"
   export XLFUNIT_20="glmp_obs4_sfctbl.${DAT}"
   export XLFUNIT_26="$PARMlmp/glmp_hr00_prep.tdpstns.lst" 
   export XLFUNIT_27="$PARMlmp/glmp_hr00_prep.tdpstns.tbl"
   export XLFUNIT_70="glmp_tdp_obs4pkd.${DAT}"
   startmsg
   $EXEClmp/glmp_obsprep < $PARMlmp/glmp_obsprep_tdp.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   echo GLMPLOG: `date` - end running glmp_obsprep

#######################################################################
#   RUN OBSPREP CODE TO QC THE CLD OBS AND PACK THEM IN TDLPACK
#######################################################################
   echo GLMPLOG: `date` - start running glmp_obsprep for CLD at current hour

   export pgm=glmp_obsprep
   . prep_step
   export XLFUNIT_10="ncepdate"
   export XLFUNIT_20="glmp_obs4_sfctbl.${DAT}"
   export XLFUNIT_26="$PARMlmp/glmp_hr00.cldstns.lst" 
   export XLFUNIT_27="$PARMlmp/glmp_hr00.non_mesostns.tbl"
   export XLFUNIT_70="glmp_cld_obs1pkd.${DAT}"
   startmsg
   $EXEClmp/glmp_obsprep < $PARMlmp/glmp_obsprep_cld.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   echo GLMPLOG: `date` - end running glmp_obsprep for CLD at current hour

#######################################################################
#   RUN OBSPREP CODE TO QC THE VIS OBS AND PACK THEM IN TDLPACK
#######################################################################
   echo GLMPLOG: `date` - start running glmp_obsprep for vis at current hour

   export pgm=glmp_obsprep
   . prep_step
   export XLFUNIT_10="ncepdate"
   export XLFUNIT_20="glmp_obs4_sfctbl.${DAT}"
   export XLFUNIT_26="$PARMlmp/glmp_hr00.visstns.lst" 
   export XLFUNIT_27="$PARMlmp/glmp_hr00.non_mesostns.tbl"
   export XLFUNIT_70="glmp_vis_obs2pkd.${DAT}"
   startmsg
   $EXEClmp/glmp_obsprep < $PARMlmp/glmp_obsprep_vis.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   echo GLMPLOG: `date` - end running glmp_obsprep for vis at current hour

######################################################################
#   RUN MOSPRED TO MAKE CEILING HEIGHT
######################################################################
   echo GLMPLOG: `date` - start running glmp_mospred to create cig obs

   export pgm=glmp_mospred
   . prep_step
   export XLFUNIT_10="ncepdate"
   export XLFUNIT_80="glmp_cld_obs1pkd.${DAT}"
   export XLFUNIT_60="glmp_compobs.${DAT}"
   export XLFUNIT_33="$PARMlmp/glmp_hr00.cldstns.lst"
   export XLFUNIT_34="$PARMlmp/glmp_hr00.non_mesostns.tbl"
   export XLFUNIT_39="$FIXlmp/glmp_mos2000id.tbl"
   export XLFUNIT_35="$PARMlmp/glmp_obsids.tbl"
   startmsg
   $EXEClmp/glmp_mospred < $PARMlmp/glmp_hr00_mospred.cn >> $pgmout 2>errfile
   export err=$?; err_chk

   echo GLMPLOG: `date` - end running glmp_mospred to create cig obs
fi

#######################################################################
# COPY FILES TO COM
#######################################################################
if test $SENDCOM = 'YES'
then
   cp glmp_obs4_sfctbl.${DATm1}_m1run $COMOUT/glmp_obs4_sfctbl.${HOURm1}_m1run
   cp glmp_tdp_obs4pkd.${DATm1}_m1run $COMOUT/glmp_tdp_obs4pkd.${HOURm1}_m1run
   cp glmp_tdp_obs4pkd.${DAT} $COMOUT/glmp_tdp_obs4pkd.$HOUR
   cp glmp_cld_obs1pkd.${DAT} $COMOUT/glmp_cld_obs1pkd.$HOUR
   cp glmp_obs4_sfctbl.${DAT} $COMOUT/glmp_obs4_sfctbl.$HOUR
   cp glmp_vis_obs2pkd.${DAT} $COMOUT/glmp_vis_obs2pkd.$HOUR
   cp glmp_compobs.${DAT} $COMOUT/glmp_compobs.$HOUR
fi

msg="$job has completed normally on `hostname` at `date`"
postmsg "$jlogfile" "$msg"

echo GLMPLOG: `date` - exglmp_hr00_prep.sh.sms ended
exit 0
