#! /bin/bash 
#--------------------------------------------------------------------#
#                    obsConv - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Ferramenta de diagnostico da assimilacao de dados de 
#  de estacoes convencionais na assimilacao de dados usando o GSI
#
# !INTERFACE:
#    ./run_obsConv_GPSIPW.sh LABELINI LABELFIM NHOURS GSI_system EXPE
#
#    Onde:
#         => LABELINI  : Data da analise [%y4%m2%d2%h2]
#         => LABELFIM  : Data da analise Final [%y4%m2%d2%h2]
#         => NHOURS    : Incremento entre analises [+Nh] - N = numero de horas: Ex. "6"
#         => GSI_system: Label do sistema de modelagem com o GSI: Ex. "SMG" "RMS"
#         => EXPE      : Label do experimento onde se destina os dados de saida: Ex. "EXPE"
#
#  !EXAMPLES:  
#    ./run_obsConv.sh 2013010100 2013010818 CPT 62 28 06 SMG EXPE
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#    ./run_obsConv.sh              
#  Digite a palavra testcase no primeiro argumento para o testcase padrão (gdad/public):
#    ./run_obsConv.sh testcase
#  Se estuiver em um diretório diferente do padrão do sistema entre com o GSI_system
#    ./run_obsConv.sh testcase SMG_V1.0.0
#
# !REVISION HISTORY:
#  22-06-2017 - Luiz Sapucci - Codigo Inicial baseado no run_humNphy.sh
#  18-08-2017 - Luiz Sapucci - Implementacao inicial do protocolo usando o obsGnss como base
#
# !REMARKS:
#  Falta testes para o sistema RMS e outros modelos como o BRAMS e WRF.
#
# !BUGS:
#  1- Modificar para que a resolucao seja lida como argumento de entrada. A atual versao 
#     está fixa na resolucao T062L028.
#EOP
#--------------------------------------------------------------------#
#BOC

# Descomente abaixo para debugar
#set -o xtrace

# Verificando argumentos de entrada se testcase
if [ "${1}" = "testcase" ]
then
  export LABELI=2013010100
  export LABELF=2013010818
  export FCT=06
  if [ -z "${2}" ]
  then
    export nome_sys="SMG"
  else
    export nome_sys=${2} 
  fi
  export EXPE="testcase"
  echo -e ""
  echo -e "\033[31;1m  ATENCAO !!! usando dados do gdad/public \033[m"
  echo -e "\033[31;1m RODANDO COM PARAMETROS DO TESTCASE PADRÃO \033[m"
  echo -e ""
  echo -e "\033[33;1m ./run_obsConv.sh ${LABELI} ${LABELF} 06 ${nome_sys} ${EXPE}\033[m"
  echo -e ""
else

# Verificando se ajuda
  if [ "${1}" = "ajuda" ]
    then
    echo -e ""
    echo -e "\033[33;1m Ferramenta de diagnostico da assimilacao de dados de \033[m"
    echo -e "\033[33;1m de estacoes convencionais na assimilacao de dados usando o GSI\033[m"
    echo -e ""
    echo -e "\033[33;1m !INTERFACE:\033[m"
    echo -e "\033[33;1m ./run_obsConv.sh LABELINI LABELFIM NHOURS GSI_system EXPE\033[m"
    echo -e ""
    echo -e "\033[32;1m Digite com a palabra testcase no primeiro argumento para o testcase padrão:\033[m"
    echo -e "\033[32;1m ./run_obsConv.sh testcase <GSI_system> \033[m"
    echo -e ""
    exit 
  fi
  
echo -e ""
echo -e "\033[34;1m > obsConv: Ferramenta de diagnostico da assimilacao de dados de \033[m"
echo -e "\033[34;1m >          estacoes convencionais na assimilacao de dados usando o GSI \033[m"

  
  # Verificando argumentos de entrada
  if [ -z "${1}" ]
  then
    export LABELI=2013010100
  else
    export LABELI=${1}
  fi
  if [ -z "${2}" ]
  then
    export LABELF=2013010818
  else
    export LABELF=${2} 
  fi
  if [ -z "${3}" ]
  then
    export FCT=06
  else
    export FCT=${3}
  fi
  if [ -z "${4}" ]
  then
    export nome_sys="SMG"
  else
    export nome_sys=${4}
  fi
  if [ -z "${5}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${5}
  fi

  if [ $# -eq 0 ]
   then
     echo -e ""
     echo -e "\033[31;1m          !!! ATENCAO !!!\033[m"
     echo -e "\033[31;1m RODANDO COM PARAMETROS DO TESTCASE DO SISTEMA HOSPEDEIRO \033[m"
     echo -e ""
     echo -e "\033[33;1m ./run_obsConv.sh ${LABELI} ${LABELF} 06 ${nome_sys} ${EXPE} \033[m"
     echo -e ""
     echo -e "\033[31;1m ATENCAO!! CASO NÁO TENHA RODADO O TESTCASE DO SISTEMA DARÁ ERRO \033[m"
     echo -e "\033[31;1m NESSE CASO UTILIZE O TESTCASE PADRÄO DIGITANDO: "
     echo -e ""
     echo -e "\033[33;1m ./run_obsConv.sh testcase <GSI_system>  \033[m"
     echo ""
     echo -ne "\033[31;1m > Deseja continuar? (S/N) \033[m"
     read resposta

    if [[ ${resposta} != "S" && ${resposta} != "s" ]]
    then
      echo ""
      echo -e "\033[34;1m  Saindo do protocolo!!! \033[m"
      echo ""
      exit
    fi

  fi

fi

# Resoluacao fixa na TQ062L028
export TRC=62
export NLV=28
export MRES=`echo ${TRC} ${NLV} | awk '{printf("TQ%4.4dL%3.3d\n",$1,$2)}'`

echo -e ""
echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
echo -e "\033[34;1m > Resolucao         : \033[m \033[31;1m${MRES}\033[m"
echo -e "\033[34;1m > Data Inicial      : \033[m \033[31;1m${LABELI}\033[m"
echo -e "\033[34;1m > Data Final        : \033[m \033[31;1m${LABELF}\033[m"
echo -e "\033[34;1m > Intervalo do ciclo: \033[m \033[31;1m${FCT}\033[m"
echo -e "\033[34;1m > Sistema hospedeiro: \033[m \033[31;1m${nome_sys}\033[m"
echo -e "\033[34;1m > Experimento label : \033[m \033[31;1m${EXPE}\033[m"

# Exportando variaveis do eval
echo ""
source  ../../../config_eval.sh vars_export ${nome_sys} ${EXPE}

if test ! -s ${obsConv_work}/dataout/logfile; then
    echo "Criando a arvore de diretorio para esse experimento e protocolo: " ${nome_sys} ${EXPE}
    echo "../../../config_eval.sh configurar ${nome_sys} ${EXPE}"
    ../../../config_eval.sh configurar ${nome_sys} ${EXPE}
    echo "${obsConv_home}/config_obsConv.ksh configurar ${nome_sys} ${EXPE}"
    ${obsConv_home}/config_obsConv.ksh configurar ${nome_sys} ${EXPE}
    if test ! -s ${obsConv_work}/dataout/logfile; then echo ""; echo "Rodada cancelada!!!" ;exit; fi
else 
   echo "Arvore de diretorio do experimento" ${EXPE} "ja existentente para o protocolo"; 
   echo ""
fi

# Exportando variaveis do obsConv
source  ${obsConv_home}/config_obsConv.ksh vars_export ${nome_sys} ${EXPE}

# Exportanto varaiveis do sistema em avaliacao
source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}

# Copiando arquivos do testcase padrão para os diretorios de entrada de dados
if [ "${1}" = "testcase" ]; then
  # Modificando o diretorios de entrada dos dados para os dados de uma rodada public/gdad 
  export obsConv_datain=/scratchin/grupos/assim_dados/home/gdad/public/eval/diag/stat_binary/${nome_sys:0:3}
  export obsConv_CNT=/scratchin/grupos/assim_dados/home/gdad/public/eval/dataCNT/diag/obsConv
else
  # Diretorios de entrada dos dados para o protocolo: 
  # Mudar aqui caso seja um diretorio diferentes da versao so SMG  
  export obsConv_datain=${stat_bina}  
  #export obsConv_datain=/stornext/online6/assim_dados/gdad/SMG_eval/EX1ALL/bam/model
  #export obsConv_datain=/stornext/online6/assim_dados/gdad/SMG_eval/EX0CNT/bam/model
  #export obsConv_datain=/stornext/online6/assim_dados/gdad/SMG_eval/EX2ORA/bam/model
  
fi

echo -e "\033[33;1m Com os dados de saida do GSI lidos em \033[m"
echo -e "\033[33;1m ${obsConv_datain} \033[m" 

# Verificando se o STAT foi rodado devidamente para os dados de ROGNSS
if test ! -s ${obsConv_datain}/${LABELI:0:6}/${LABELI:6:10}/conv/sso_gps.${LABELI}.anl.dat; then
  echo "" 
  echo ">> Dados convencionais nao disponiveis para a data inicial."
  echo ">> Verifique a rodada do STAT e a assimilacao dos dados de ROGNSS no experimento."
  echo ""
  exit
fi

#criando diretorio das figuras do periodo e temporarios para gerar gif animado
PERIOD=${LABELI}${LABELF}
LABELINI=${LABELI}
mkdir -p ${obsConv_figu}/${PERIOD} 
tempBKG=${obsConv_figu}/${PERIOD}/tempBKG/
mkdir -p ${tempBKG}
tempANL=${obsConv_figu}/${PERIOD}/tempANL/
mkdir -p ${tempANL}

#Calculando o numero de passos para as figuras
di=${LABELI}0000
si=$(date --date "${di:0:8} ${di:8:2}:${di:10:2}:${di:12:2}" +%s)
df=${LABELF}0000
sf=$(date --date "${df:0:8} ${df:8:2}:${df:10:2}:${df:12:2}" +%s)
NPT=`echo "( $sf - $si ) / ( ${FCT} * 3600 ) + 1" | bc `

logfile=${obsConv_logs}/obsConv${LABELI}.log

#Chamando o plot_gps para gerar as figuras do protocolo
echo ""
echo -e "\033[34;1m >>> Submetendo o dignostico \033[33;1m obsConv \033[m no sistema ${nome_sys} \033[34;1m para o periodo \033[m \033[31;1m${LABELI} ${LABELF}\033[m \033[m"
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" > ${logfile}
echo " >>> Submetendo o dignostico \033[33;1m obsConv no sistema ${nome_sys} para o periodo ${LABELI} ${LABELF}" >> ${logfile}
echo "" 
echo -e "\033[36;1m >>>> Arquivo de log dessa rodada:\033[m " 
echo -e "\033[33;1m ${logfile} \033[m "
date

cd ${obsConv_run}

#Gerando as figuras da distribuicao espacial
echo 
#echo -e "\033[40;1m >>>> Gerando as figuras da distribuicao espacial dos dados convencionais assimilados por variveis\033[m"
#echo "ANL: ./plot_conv_var.sh 2 ${LABELI} ${LABELF} ${FCT} "
#${obsConv_run}/scripts/plot_conv_var.sh 2 ${LABELI} ${LABELF} ${FCT}


### Colocar aqui as chamadas dos scripts por tipos de dados convencionais
echo -e "\033[40;1m >>>> Gerando as figuras da distribuicao espacial dos dados GPSIPW assimilados por variveis\033[m"
echo "ANL: ./plot_conv_GPSIPW.sh 2 ${LABELI} ${LABELF} ${FCT} "
${obsConv_run}/scripts/plot_conv_GPSIPW.sh 2 ${LABELI} ${LABELF} ${FCT}

## por exemplo que é uma versao modificada do scripts/plot_conv_var.sh
#### ./plot_conv_GPSIPW.sh


# Movendo figuras geradas para ${obsConv_figu}
echo 
echo -e "\033[40;1m >>>> Movendo figuras geradas para obsConv_figu \033[m"
#ls *.eps *.png
#cp *.png ${obsConv_page}
#mv *.eps *.png ${obsConv_figu}

# Geracao dos Figs animados do periodo dos plots da distribuicao espacial
echo ""
echo " Gerando as figs animados usando convert"
echo " Processo computacionalmente custoso!! Aguarde..."
echo ""
# Copiando as figuras para montar o gif
cd ${tempANL}
rm -rf *.png
while [ ${LABELI} -le ${LABELF} ]
do
  echo ${LABELI} ${obsConv_figu}/${LABELI:0:6}  ${LABELI:6:2}

  cp ${obsConv_figu}/${LABELI:0:6}/${LABELI:6:2}*/conv/sso_pw_1000*.anl.png .

#apendar os diferentes horários 00 06 12 18

#pw_1000
  convert sso_pw_1000.${LABELI:0:8}00.anl.png sso_pw_1000.${LABELI:0:8}12.anl.png -gravity center -append sso_pw_1000.${LABELI:0:8}_0012.anl.png

  convert sso_pw_1000.${LABELI:0:8}06.anl.png sso_pw_1000.${LABELI:0:8}18.anl.png -gravity center -append sso_pw_1000.${LABELI:0:8}.0618.anl.png

  convert sso_pw_1000.${LABELI:0:8}_0012.anl.png sso_pw_1000.${LABELI:0:8}.0618.anl.png -gravity East +append sso_pw_1000.${LABELI:0:8}.2anl.png
  LABELI=`${inctime} ${LABELI} +24h %y4%m2%d2%h2`
done
# Gerando o gif da ANL
  ls *.png

convert -dispose Background -delay 60 -loop 3 -density 288 sso_pw_1000.*.2anl.png ../sso_pw_1000_${PERIOD}.anl.gif

cd ${obsConv_figu}/${PERIOD}
#rm -rf ${tempANL}
cp *_${PERIOD}.*.gif ${obsConv_page}/
echo -e "\033[36;1m >>> Arquivos Figs do periodo: \033[m"
echo -e "\033[33;1m http://ftp1.pesquisa.cptec.inpe.br/pesquisa/das/${USER}/${nome_sys}/evalu/${EXPE}/diag/obsConv/ \033[m "
ls ${obsConv_page}/*${PERIOD}.*.gif
#ls ${obsConv_page}/*.png

echo ""
echo -e "\033[36;1m >>>> Binarios quando disponiveis estarao:\033[m " 
echo -e "\033[33;1m ${obsConv_bina}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de tabelas em:\033[m "
echo -e "\033[33;1m ${obsConv_tabe}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de logs em:\033[m "
echo -e "\033[33;1m ${obsConv_logs}/ \033[m "
echo -e "\033[36;1m >>>> Figuras em:\033[m "
echo -e "\033[33;1m ${obsConv_figu}/ \033[m "
echo ""

exit 0



#apendar ps q w t

#ps_1000
  convert sso_ps_1000.${LABELI:0:8}00.anl.png sso_ps_1000.${LABELI:0:8}12.anl.png -gravity center -append sso_ps_1000.${LABELI:0:8}_0012.anl.png

  convert sso_ps_1000.${LABELI:0:8}06.anl.png sso_ps_1000.${LABELI:0:8}18.anl.png -gravity center -append sso_ps_1000.${LABELI:0:8}.0618.anl.png

  convert sso_ps_1000.${LABELI:0:8}_0012.anl.png sso_ps_1000.${LABELI:0:8}.0618.anl.png -gravity East +append sso_ps_1000.${LABELI:0:8}.2anl.png
#q_900
  convert sso_q_900.${LABELI:0:8}00.anl.png sso_q_900.${LABELI:0:8}12.anl.png -gravity center -append sso_q_900.${LABELI:0:8}_0012.anl.png

  convert sso_q_900.${LABELI:0:8}06.anl.png sso_q_900.${LABELI:0:8}18.anl.png -gravity center -append sso_q_900.${LABELI:0:8}.0618.anl.png

  convert sso_q_900.${LABELI:0:8}_0012.anl.png sso_q_900.${LABELI:0:8}.0618.anl.png -gravity East +append sso_q_900.${LABELI:0:8}.2anl.png
#t_900
    convert sso_t_900.${LABELI:0:8}00.anl.png sso_t_900.${LABELI:0:8}12.anl.png -gravity center -append sso_t_900.${LABELI:0:8}_0012.anl.png

  convert sso_t_900.${LABELI:0:8}06.anl.png sso_t_900.${LABELI:0:8}18.anl.png -gravity center -append sso_t_900.${LABELI:0:8}.0618.anl.png

  convert sso_t_900.${LABELI:0:8}_0012.anl.png sso_t_900.${LABELI:0:8}.0618.anl.png -gravity East +append sso_t_900.${LABELI:0:8}.2anl.png

