#!/bin/bash
#--------------------------------------------------------------------#
#                    GSISTAT - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Script para gerar figuras da assimilacao dos dados de RO no GSI
#
#  Toda a configuracao da execucao deve ser feita no arquivo config.sh
#  ---> $DIR/GSI_STAT/conf/config.sh
#
# !INTERFACE:
#  ./plot_gps.sh DataType DataInicial DataFinal Incremento
#
#    em que:
#           DataType      : Tipo de info.: 1: First Guess: 2 Analise
#           DataInicial   : Data inicial [%y4%m2%d2%h2]
#           DataFinal     : Data final [%y4%m2%d2%h2]
#           Incremento    : Diferenca em horas entre cada data a ser 
#                           avaliada 
#
# Apenas os 2 primeiros argumentos sao estritamente necessarios, os 
# demais devem ser utilizados apenas em casos de mais de 1 data.
#
# !REVISION HISTORY:
#  02-07-2013 - Mattos, Joao      - Codigo Inicial do plot_all.sh
#  30-06-2017 - Sapucci, Luiz     - Criacao do script baseado no plot_all.sh
#  22-09-2017 - Vendrasco, Eder P - Adaptacao do script plot_conv_var.sh para o uso com os dados AIREP e PIREP
#
# !REMARKS:
#
# !BUGS:
#
#EOP
#--------------------------------------------------------------------#
#BOC

# Verificando as opcoes passadas pela linha de comando
if [ $#  != 4 ]; then echo "ERRO: ${0} [01/02] [YYYYMMDDHH] <YYYYMMDDHH> <nh> "; exit; fi

DataType=${1}
LABELANL=${2}
LABELFCT=${3}
Incremento=${4}

DataInicial=${LABELANL}
DataFinal=${LABELFCT}

# Carregando os modules do Tupa
. /opt/modules/default/etc/modules.sh
module load grads

# Carregando Configuracoes
source ${obsConv_home}/run/config_stat_conv.sh 
writedconf ${GStatCfg} $NProc

logfile=${GStatLog}/opengrads_${DataInicial}${DataFinal}_${DataType}.log
echo -e "\033[33;1m Arquivo de logs do plot_gps.sh: {GStatLog}/opengrads_${DataInicial}${DataFinal}_${DataType}.log \033[m "

echo "Processamento dados grads no script plot_gps.sh. Periodo: " ${DataInicial} ${DataFinal} > $logfile

ObsType="conv" 

   while [ ${DataInicial} -le ${DataFinal} ]; do

     ym=${DataInicial:0:6}
     dh=${DataInicial:6:4}

     #------------------------------------------------------#
     # Plotando cada uma das 5 informacoes sobre a contagem #
     #
     #------------------------------------------------------#
     # Indice |                 Descricao
     #------------------------------------------------------#
     #   [1]  |    Total de Observacoes                     #
     #   [2]  |    Total Utilizado                          #
     #   [3]  |    Total Nao Utilizado                      #
     #   [4]  |    Total Rejeitado pelo QC                  #
     #   [5]  |    Total Monitorado [Rejeitado por Pad      #
     #------------------------------------------------------#

     if [ ! -e ${GStatFig}/${ym}/${dh}/conv ];then
        mkdir -p ${GStatFig}/${ym}/${dh}/conv
     fi

#     for i in $(seq 1 5); do
#        /bin/bash ${GStatScp}/total_count.sh ${i} ${DataInicial} ${DataType} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv
#     done

     #---------------------------------------------------------#
     # Plotando cada um dos 4 tipos de contagens e 3 variaveis #
     # que contem informacoes em mais de 1 nivel               #
     #---------------------------------------------------------#
     #   Indice |    Nome do Arquivo                           #
     #---------------------------------------------------------#
     #     [1]  | summary_obs_used_level.txt                   #
     #     [2]  | summary_obs_not_used_level.txt               #
     #     [3]  | summary_obs_rejeited_level.txt               #
     #     [4]  | summary_obs_monitored_level.txt              #
     #---------------------------------------------------------#
     #                                                         #
     #  Cada arquivo possui a informacao de 6 variaveis        #
     #  convencionais que sao processadas pelo GSI:            #
     #                                                         #
     #---------------------------------------------------------#
     #   Indice |  Variavel | Descricao                        #
     #---------------------------------------+-----------------#
     #     [1]  |    SST    | Temp. da Sup. do Mar             #
     #     [2]  |     PS    | Pressao em Superficie            #
     #     [3]  |     PW    | Agua Precipitavel                #
     #     [4]  |     UV    | Vento                            #
     #     [5]  |      T    | Temperatura                      #
     #     [6]  |      Q    | Umidade Especifica               #
     #---------------------------------------------------------#

#     for i in $(seq 1 4); do
#        for j in $(seq 4 6); do
#           /bin/bash ${GStatScp}/total_count_level.sh ${i} ${j} ${DataInicial} ${DataType} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv
#        done
#     done

   # Plotando o scatterplot e distribuicao espacial para todas as variaveis em cada nivel
#      1;  sst; Temperatura da Superficei do Mar; 1000
#      2;   ps;             Pressao a Superficie; 1000
#      3;   pw;                Agua Precipitavel; 1000
#      4;   uv;              Velocidade do Vento; 1000 900 800 700 600 500 400 300 250 200 150 #100 50 0
#      5;    t;                Temperatura do Ar; 1000 900 800 700 600 500 400 300 250 200 150 #100 50 0
#      6;    q;               Umidade Especifica; 1000 900 800 700 600 500 400 300
#      7;  gps;                Radiocultacao GPS; 1000 900 800 700 600 500 400 300 250 200 150 #100 50 0


     cat << eof > ${GStatCfg}/variaveis.nml
       4;   uv;              Velocidade do Vento; 200 150
       5;    t;                Temperatura do Ar; 200 150 
eof

     cat ${GStatCfg}/variaveis.nml | while read linha; do
        idx=`echo ${linha} | awk -F";" '{print $1}'`
        name=`echo ${linha} | awk -F";" '{print $2}'`
        levs=`echo $linha | awk -F";" '{ print substr($0, index($0,$4)) }'`

        cd ${obsConv_home}

        #if test -s ${GStatFig}/${ym}/${dh}/conv/sso_$(echo $name | sed 's/ //g').${DataInicial}.*txt ; then  rm -rf ${GStatFig}/${ym}/${dh}/conv/sso_$(echo $name | sed 's/ //g').${DataInicial}.*txt ; fi

        for lv in $levs; do

         # scatterplot
#         /bin/bash ${GStatScp}/scatter.sh ${idx} ${DataInicial} ${DataType} ${lv} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv
 
         echo -e "${DataInicial} Name: ${name} levs: $lv "

         # distribuicao espacial por nivel com range apropriado
         #opengrads -lbc "run ${GStatScp}/plota_espacial_conv_AirC.gs ${name} kx   1  ${lv} ${DataType} ${DataInicial} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv $llati $llatf $lloni $llonf allass true sh" >> $logfile 
         #opengrads -lbc "run ${GStatScp}/plota_espacial_conv_AirC.gs ${name} iuse 1  ${lv} ${DataType} ${DataInicial} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv $llati $llatf $lloni $llonf naoass true st" >> $logfile 
         #opengrads -lbc "run ${GStatScp}/plota_espacial_conv_AirC.gs ${name} iuse 1  ${lv} ${DataType} ${DataInicial} ${GStatOut}/${ym}/${dh}/conv ${GStatFig}/${ym}/${dh}/conv $llati $llatf $lloni $llonf assimi true st" >> $logfile

        done


      done

      DataInicial=`${stat_bin}/inctime ${DataInicial} +${Incremento}hr %y4%m2%d2%h2`

   done


#EOC
#------------------------------------------------------------------------------#


DataInicial=${LABELANL}
DataFinal=${LABELFCT}

if test -s ${obsConv_run}/scripts/dados_t.tmp ; then rm -f ${obsConv_run}/scripts/dados_t.tmp ; fi
if test -s ${obsConv_run}/scripts/dados_uv.tmp ; then rm -f ${obsConv_run}/scripts/dados_uv.tmp ; fi
while [ ${DataInicial} -le ${DataFinal} ]; do

 ym=${DataInicial:0:6}
 dh=${DataInicial:6:4}
 cat ${GStatCfg}/variaveis.nml | while read linha; do
  idx=`echo ${linha} | awk -F";" '{print $1}'`
  name=`echo ${linha} | awk -F";" '{print $2}' | sed 's/ //g'`
  levs=`echo $linha | awk -F";" '{ print substr($0, index($0,$4)) }'`

  linha=$(cat ${GStatFig}/${ym}/${dh}/conv/sso_$(echo $name | sed 's/ //g').${DataInicial}.*txt | tr '\n' '\t')
  
  echo ${DataInicial}'  '$linha >> ${obsConv_run}/scripts/dados_${name}.tmp
 done
 DataInicial=`${stat_bin}/inctime ${DataInicial} +${Incremento}hr %y4%m2%d2%h2`
done

cat ${GStatCfg}/variaveis.nml | while read linha; do
 levs=`echo $linha       | awk -F";" '{ print substr($0, index($0,$4)) }'`
 name=`echo ${linha}     | awk -F";" '{print $2}'         | sed 's/ //g'`
 fullname=`echo ${linha} | awk -F";" '{print $3}'`

 HH=00
 sed -ne "/^20[0-9][0-9][0-9][0-9][0-9][0-9]${HH}/p" ${obsConv_run}/scripts/dados_${name}.tmp | sed 's/^.\{12\}//' | sed "s/^/$HH /g" > ${obsConv_run}/scripts/dados_${name}.tmp$HH
 awk  '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' ${obsConv_run}/scripts/dados_${name}.tmp$HH > ${obsConv_run}/scripts/dados_${name}.tmp_ave
 rm ${obsConv_run}/scripts/dados_${name}.tmp$HH
 
 HH=06
 sed -ne "/^20[0-9][0-9][0-9][0-9][0-9][0-9]${HH}/p" ${obsConv_run}/scripts/dados_${name}.tmp | sed 's/^.\{12\}//' | sed "s/^/$HH /g" > ${obsConv_run}/scripts/dados_${name}.tmp$HH
 awk  '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' ${obsConv_run}/scripts/dados_${name}.tmp$HH >> ${obsConv_run}/scripts/dados_${name}.tmp_ave
 rm ${obsConv_run}/scripts/dados_${name}.tmp$HH

 HH=12
 sed -ne "/^20[0-9][0-9][0-9][0-9][0-9][0-9]${HH}/p" ${obsConv_run}/scripts/dados_${name}.tmp | sed 's/^.\{12\}//' | sed "s/^/$HH /g" > ${obsConv_run}/scripts/dados_${name}.tmp$HH
 awk  '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' ${obsConv_run}/scripts/dados_${name}.tmp$HH >> ${obsConv_run}/scripts/dados_${name}.tmp_ave
 rm ${obsConv_run}/scripts/dados_${name}.tmp$HH

 HH=18
 sed -ne "/^20[0-9][0-9][0-9][0-9][0-9][0-9]${HH}/p" ${obsConv_run}/scripts/dados_${name}.tmp | sed 's/^.\{12\}//' | sed "s/^/$HH /g" > ${obsConv_run}/scripts/dados_${name}.tmp$HH
 awk  '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' ${obsConv_run}/scripts/dados_${name}.tmp$HH >> ${obsConv_run}/scripts/dados_${name}.tmp_ave
 rm ${obsConv_run}/scripts/dados_${name}.tmp$HH

nm=$(cat ${GStatCfg}/variaveis.nml | head -1 | awk -F";" '{print $2}' | sed 's/ //g')

ilev=2
for lv in $levs; do

(( pl1 = ilev + 1 ))
(( pl2 = ilev + 2 ))
(( pl3 = ilev + 3 ))
(( pl4 = ilev + 4 ))

cat << EOF1 > ${obsConv_run}/scripts/dados.gnu
reset
set te png size 800,600
set output '${GStatFig}/${LABELANL}${LABELFCT}/sso_${name}.${DataInicial}.${DataFinal}_${lv}.png'
set title 'Dados AIREP e PIREP - $fullname - $lv hPa'
set timefmt "%Y%m%d%H"
set xdata time
set key box 
set key  below title 'Legenda'
set xtics format "%d%H" 
set xtics font ',14'
set xtics "${LABELANL}", 21600, "${DataFinal}"
set ytics font ',14'
set xtics rotate by -50 font ",14"
set xlabel 'Data [DDHH]'
set xlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
set ylabel "Quantidade de Dados"
set yrange[100:3500]
set ytics nomirror

set y2range[0:100]
set y2tics font ',14' 
set y2tics textcolor rgb "red"
set y2tics 0,10,100

plot '${obsConv_run}/scripts/dados_${name}.tmp' u 1:$pl2  with linespoints lw 2 lt rgb "dark-violet" t"Dados Disponiveis (AIREP e PIREP)",\\
     '${obsConv_run}/scripts/dados_${name}.tmp' u 1:$pl3  with linespoints lw 2 lt rgb "blue"        t"Dados Assimilados (AIREP e PIREP)",\\
     '${obsConv_run}/scripts/dados_${name}.tmp' u 1:$pl4  with linespoints lw 2 lt rgb "red"         t"Dados Nao assimilados (AIREP e PIREP)" axes x1y2 

quit

EOF1

#plot '${obsConv_run}/scripts/dados_${name}.tmp' u 1:$pl1  with linespoints lw 2 lt rgb "dark-green"  t"Dados Totais (Todas as Fontes)",\\
gnuplot ${obsConv_run}/scripts/dados.gnu


cat << EOF2 > ${obsConv_run}/scripts/dadosave.gnu
reset
set te png size 800,600
set output '${GStatFig}/${LABELANL}${LABELFCT}/sso_${name}.${DataInicial}.${DataFinal}_ave_${lv}.png'
set title 'Dados AIREP e PIREP - $fullname - $lv hPa'
set key box 
set key  below title 'Legenda'
set xtics font ',14'
set ytics font ',14'
set xtics 0,6
set xlabel 'Horário [HH]'
set xlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
set ylabel "Quantidade Média de Dados por Horário"

set boxwidth 1
set yrange[0:3500]
set xrange[-3:21]

plot '${obsConv_run}/scripts/dados_${name}.tmp_ave' u (\$1-0.5):$pl2    with boxes fs solid 0.25 lt rgb "dark-violet"  t"Dados Disponiveis (AIREP e PIREP)",\\
     '${obsConv_run}/scripts/dados_${name}.tmp_ave' u (\$1+0.5):$pl3    with boxes fs solid 0.25 lt rgb "blue"         t"Dados Assimilados (AIREP e PIREP)",\\
     '${obsConv_run}/scripts/dados_${name}.tmp_ave' u (\$1+1.5):$pl4    with boxes fs solid 0.25 lt rgb "red"          t"Dados Nao assimilados (AIREP e PIREP)"

quit

EOF2

#plot '${obsConv_run}/scripts/dados_${name}.tmp_ave' u (\$1-1.5):$pl1    with boxes fs solid 0.45 lt rgb "dark-green"   t"Dados Totais (Todas as Fontes)",\\
gnuplot ${obsConv_run}/scripts/dadosave.gnu

(( ilev = ilev + 5 ))

done

rm -f ${obsConv_run}/scripts/dados_${name}.tmp_ave ${obsConv_run}/scripts/dados_${name}.tmp

done

rm -f ${obsConv_run}/scripts/dados.gnu ${obsConv_run}/scripts/dadosave.gnu 
rm -f ${GStatCfg}/variaveis.nml
