#! /bin/bash 
#--------------------------------------------------------------------#
#                    obsSatw - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Ferramenta de diagnostico da assimilacao de dados de 
#  vento por satélites na assimilacao de dados usando o GSI
#
# !INTERFACE:
#    ./run_obsSatw.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_obsSatw.sh 2013010100 2013010818 CPT 62 28 06 SMG EXPE
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#    ./run_obsSatw.sh              
#  Digite a palavra testcase no primeiro argumento para o testcase padrão (gdad/public):
#    ./run_obsSatw.sh testcase
#
# !REVISION HISTORY:
#  22-06-2017 - Luiz Sapucci - Codigo Inicial baseado no run_humNphy.sh
#  24-06-2017 - Luiz Sapucci - Implementacao inicial do protocolo dos dados ROGNSS
#  08-08-2017 - Ivette Banos - Implementacao da versao para o lancamento do SMG_1.0.0
#  09-08-2017 - Luiz Sapucci - Revisao final da versao e ajustes finos no protocolo.
#
# !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
  export nome_sys="SMG"
  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_obsSatw.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 vento por satélites 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_obsSatw.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_obsSatw.sh testcase\033[m"
    echo -e ""
    exit 
  fi
  
  # 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_obsSatw.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_obsSatw.sh testcase \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 > obsSatw: Ferramenta de diagnostico da assimilacao de dados de \033[m"
echo -e "\033[34;1m >          vento por satélites na assimilacao de dados usando o GSI \033[m"
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 ${obsSatw_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 "${obsSatw_home}/config_obsSatw.ksh configurar ${nome_sys} ${EXPE}"
    ${obsSatw_home}/config_obsSatw.ksh configurar ${nome_sys} ${EXPE}
    if test ! -s ${obsSatw_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 obsSatw
source  ${obsSatw_home}/config_obsSatw.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 obsSatw_datain=/scratchin/grupos/assim_dados/home/gdad/public/eval/diag/stat_binary/${nome_sys:0:3}
  export obsSatw_CNT=/scratchin/grupos/assim_dados/home/gdad/public/eval/dataCNT/diag/obsSatw
else
  # Diretorios de entrada dos dados para o protocolo: 
  # Mudar aqui caso seja um diretorio diferentes da versao so SMG  
  export obsSatw_datain=${stat_bina}  
fi

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

# Verificando se o STAT foi rodado devidamente para os dados de ROGNSS
if test ! -s ${obsSatw_datain}/${LABELI:0:6}/${LABELI:6:10}/conv/sso_gps.${LABELI}.anl.dat; then
  echo "" 
  echo ">> Dados ROGNSS 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 ${obsSatw_figu}/${PERIOD} 
tempBKG=${obsSatw_figu}/${PERIOD}/tempBKG/
mkdir -p ${tempBKG}
tempANL=${obsSatw_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 `

#Chamando o plot_gps para gerar as figuras do protocolo
logfile=${obsSatw_logs}/obsSatw${LABELI}.log

echo ""
echo -e "\033[34;1m >>> Submetendo o dignostico \033[33;1m obsSatw \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 obsSatw no sistema ${nome_sys} para o periodo ${LABELI} ${LABELF}" | tee -a ${logfile}
echo "" 
echo -e "\033[36;1m >>>> Arquivo de log dessa rodada:\033[m " 
echo -e "\033[33;1m ${logfile} \033[m "
date

cd ${obsSatw_run}

#Gerando as figuras da distribuicao espacial
echo 
echo -e "\033[40;1m >>>> Gerando as figuras da distribuicao espacial dos dados de ROGNSS assimilados \033[m"
echo "FGS: ./plot_gps.sh 1 ${LABELI} ${LABELF} ${FCT}"
${obsSatw_run}/scripts/plot_gps.sh 1 ${LABELI} ${LABELF} ${FCT}
echo "ANL: ./plot_gps.sh 2 ${LABELI} ${LABELF} ${FCT} "
${obsSatw_run}/scripts/plot_gps.sh 2 ${LABELI} ${LABELF} ${FCT}

#Criando tabelas de obs assim e rej por cada sat
echo 
echo -e "\033[40;1m >>>> Criando tabelas de obs assim e rej por cada sat \033[m"
echo ./scripts/assim_sat.sh ${LABELI} ${LABELF}
./scripts/assim_sat.sh ${LABELI} ${LABELF}

#Organizando os dados em tabelas apropriadas
echo
echo -e "\033[40;1m >>>> Organizando os dados em tabelas apropriadas \033[m"
cd ${obsSatw_tabe}
pr -m -t -J -n EXP_Assimil_anl_${PERIOD}.txt ${obsSatw_CNT}/CNT_Assimil_anl_${PERIOD}.txt > ${obsSatw_tabe}/diff_assim_${PERIOD}.dat
pr -m -t -J -n EXP_Reject_anl_${PERIOD}.txt ${obsSatw_CNT}/CNT_Reject_anl_${PERIOD}.txt  > ${obsSatw_tabe}/diff_rej_${PERIOD}.dat
#Plotando a figura da quantidade de obs assim, rej e as diferenças por cada sat para anl e fgs

cd ${obsSatw_run}

/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/totais_assim.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 totais_sat_assim.eps -flatten totais_sat_assim.png
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/totais_rej.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 totais_sat_rej.eps -flatten totais_sat_rej.png
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/totais_diff.gpl ${obsSatw_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 totais_sat_diff.eps -flatten totais_sat_diff.png
ls -1 ${obsSatw_tabe}/


exit

# Criando as tabelas com os dados de todos os horarios e realizacao da media para cada nivel de pressao
echo
echo -e "\033[40;1m >>>> Criando as tabelas das medias para cada nivel de pressao \033[m" 
echo ./scripts/fit_vert.sh ${LABELI} ${LABELF}
./scripts/fit_vert.sh ${LABELI} ${LABELF}

#Plotando a figura do perfil vertical da media de OMA e OmF por cada sat
echo
echo -e "\033[40;1m >>>> Plotando a figura do perfil vertical da media de OMA e OmF por cada sat \033[m"
echo gnuplot -c scripts_plots/vertical_sat_anl.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF}
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/vertical_sat_anl.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF} 
convert -density 300 vert_sat_anl.eps -flatten vert_sat_anl.png
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/vertical_sat_fgs.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF}
convert -density 300 vert_sat_fgs.eps -flatten vert_sat_fgs.png

#Filtra as tabelas de Jo antes e depois da minimizacao

# Setando o diretorio de saida do GSI para os casos (SMG ou RMS(WRF), implementar aqui para outros sistemas)
if [ ${nome_sys:0:3} == 'RMS' ]; then
  export GSIout=${WORK_HOME}/$nome_sys/ana/gsi/run  
else
  if [ ${nome_sys:0:3} == 'SMG' ]; then
    export GSIout=${WORK_HOME}/$nome_sys/datainout/gsi/dataout
  else
    echo
    echo " Sistema" ${nome_sys:0:3} " ainda não configurado para usar o obsSatw!!!"
    echo "  Abortando o processo..."
    exit
  fi
fi

if [ "${1}" = "testcase" ]; then
  export GSIout=/scratchin/grupos/assim_dados/home/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi_dataout
fi

# Diretorios de saida do GSI para a minimizacao 
# Mudar aqui e descomente caso seja um diretorio diferentes do pacote 
# export GSIout=?????

echo
echo -e "\033[40;1m >>>> Filtra as tabelas de Jo antes e depois da minimizacao \033[m"
echo "Dados do gsi lidos em: "${GSIout}
echo ./scripts/filtra_j.sh ${LABELI} ${LABELF}
./scripts/filtra_j.sh ${LABELI} ${LABELF}

#Plota a contribuicao das obsv de RO-GPS na reducao de Jo
echo
echo -e "\033[40;1m >>>> Plota a contribuicao das obsv de RO-GPS na reducao de Jo \033[m"
echo gnuplot -c scripts_plots/cust_red.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF} ${NPT}
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/cust_red.gpl ${obsSatw_CNT}/ ${obsSatw_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 cust_gps.eps -flatten cust_gps.png

# Movendo figuras geradas para ${obsSatw_figu}
echo 
echo -e "\033[40;1m >>>> Movendo figuras geradas para obsSatw_figu \033[m"
ls *.eps *.png
cp *.png ${obsSatw_page}
mv *.eps *.png ${obsSatw_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 ${obsSatw_figu}/${PERIOD}
rm -rf *.png
while [ ${LABELI} -le ${LABELF} ]
do
  cp ${obsSatw_figu}/${LABELI:0:6}/${LABELI:6:10}/conv/sso*.fgs.png ${tempBKG}
  cp ${obsSatw_figu}/${LABELI:0:6}/${LABELI:6:10}/conv/sso*.anl.png ${tempANL}
  cp ${obsSatw_figu}/${LABELI:0:6}/${LABELI:6:10}/conv/subtipo_gps_0.*.anl.png ${tempANL} 
  LABELI=`${inctime} ${LABELI} +${FCT}h %y4%m2%d2%h2`
done
# Gerando o gif da FGS
cd ${tempBKG}
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_0.*.png ../sso_gps_000_${PERIOD}.fgs.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_100.*.png ../sso_gps_100_${PERIOD}.fgs.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_300.*.png ../sso_gps_300_${PERIOD}.fgs.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_500.*.png ../sso_gps_500_${PERIOD}.fgs.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_800.*.png ../sso_gps_800_${PERIOD}.fgs.gif
cd ${obsSatw_figu}/${PERIOD}
rm -rf ${tempBKG}
# Gerando o gif da ANL
cd ${tempANL}
cp ../../201301/*/conv/*.anl.png .
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_0.*.png ../sso_gps_000_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_100.*.png ../sso_gps_100_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_300.*.png ../sso_gps_300_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_500.*.png ../sso_gps_500_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 sso_gps_800.*.png ../sso_gps_800_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 subtipo_gps_0.*.png ../subtipo_gps_0_${PERIOD}.anl.gif
cd ${obsSatw_figu}/${PERIOD}
rm -rf ${tempANL}
cp *_${PERIOD}.*.gif ${obsSatw_page}/
echo -e "\033[36;1m >>> Arquivos Figs do periodo: \033[m"
echo -e "\033[33;1m http://ftp-supercomputacao/public/${USER}/${nome_sys}/eval/${EXPE}/diag/obsSatw/ \033[m "
ls ${obsSatw_page}/*${PERIOD}.*.gif
ls ${obsSatw_page}/*.png

echo ""
echo -e "\033[36;1m >>>> Binarios quando disponiveis estarao:\033[m " 
echo -e "\033[33;1m ${obsSatw_bina}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de tabelas em:\033[m "
echo -e "\033[33;1m ${obsSatw_tabe}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de logs em:\033[m "
echo -e "\033[33;1m ${obsSatw_logs}/ \033[m "
echo -e "\033[36;1m >>>> Figuras em:\033[m "
echo -e "\033[33;1m ${obsSatw_figu}/ \033[m "
echo ""

exit 0
