#! /bin/bash 
#--------------------------------------------------------------------#
#                    obsGnss - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Ferramenta de diagnostico da assimilacao de dados de 
#  radio ocultacao GPS na assimilacao de dados usando o GSI
#
# !INTERFACE:
#    ./run_obsGnss.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_obsGnss.sh 2013010100 2013010818 CPT 62 28 06 SMG EXPE
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#    ./run_obsGnss.sh              
#  Digite a palavra testcase no primeiro argumento para o testcase padrão (gdad/public):
#    ./run_obsGnss.sh testcase <GSI_system> 
#
# !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
  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_obsGnss.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 radio ocultacao GPS 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_obsGnss.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 seguido do sistema hopedeiro :\033[m"
    echo -e "\033[32;1m ./run_obsGnss.sh testcase <GSI_system> \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_obsGnss.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_obsGnss.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 > obsGnss: Ferramenta de diagnostico da assimilacao de dados de \033[m"
echo -e "\033[34;1m >          radio ocultacao GPS 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 ${obsGnss_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 "${obsGnss_home}/config_obsGnss.ksh configurar ${nome_sys} ${EXPE}"
    ${obsGnss_home}/config_obsGnss.ksh configurar ${nome_sys} ${EXPE}
    if test ! -s ${obsGnss_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 obsGnss
source  ${obsGnss_home}/config_obsGnss.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 obsGnss_datain=/scratchin/grupos/assim_dados/home/gdad/public/eval/diag/stat_binary/${nome_sys:0:3}
  export obsGnss_CNT=/scratchin/grupos/assim_dados/home/gdad/public/eval/dataCNT/diag/obsGnss
  export pathGSIout=/scratchin/grupos/assim_dados/home/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi/dataout
else
  # Diretorios de entrada dos dados para o protocolo: 
  export obsGnss_datain=${stat_bina}  
  # Mudar aqui caso seja um diretorio diferentes da versao so SMG   
  export pathGSIout=${GSIout}
  #export pathGSIout=/scratchout/grupos/assim_dados/home/luiz.sapucci/SMG_V1.0.0/datainout${EXPE}/gsi/dataout
fi

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

# Verificando se o STAT foi rodado devidamente para os dados de ROGNSS
if test ! -s ${obsGnss_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 ${obsGnss_figu}/${PERIOD} 
tempBKG=${obsGnss_figu}/${PERIOD}/tempBKG/
mkdir -p ${tempBKG}
tempANL=${obsGnss_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=${obsGnss_logs}/obsGnss${LABELI}.log

echo ""
echo -e "\033[34;1m >>> Submetendo o dignostico \033[33;1m obsGnss \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 obsGnss 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 ${obsGnss_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}"
${obsGnss_run}/scripts/plot_gps.sh 1 ${LABELI} ${LABELF} ${FCT}
echo "ANL: ./plot_gps.sh 2 ${LABELI} ${LABELF} ${FCT} "
${obsGnss_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} ${obsGnss_datain}
./scripts/assim_sat.sh ${LABELI} ${LABELF} ${obsGnss_datain}

#Organizando os dados em tabelas apropriadas
echo
echo -e "\033[40;1m >>>> Organizando os dados em tabelas apropriadas \033[m"
cd ${obsGnss_tabe}
pr -m -t -J -n EXP_Assimil_anl_${PERIOD}.txt ${obsGnss_CNT}/CNT_Assimil_anl_${PERIOD}.txt > ${obsGnss_tabe}/diff_assim_${PERIOD}.dat
pr -m -t -J -n EXP_Reject_anl_${PERIOD}.txt ${obsGnss_CNT}/CNT_Reject_anl_${PERIOD}.txt  > ${obsGnss_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 ${obsGnss_run}

/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/totais_assim.gpl ${obsGnss_CNT}/ ${obsGnss_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 ${obsGnss_CNT}/ ${obsGnss_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 ${obsGnss_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 totais_sat_diff.eps -flatten totais_sat_diff.png
ls -1 ${obsGnss_tabe}/

# 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}  ${obsGnss_datain}
./scripts/fit_vert.sh ${LABELI} ${LABELF} ${obsGnss_datain}

#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 ${obsGnss_CNT}/ ${obsGnss_tabe}/ ${LABELI} ${LABELF}
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/vertical_sat_anl.gpl ${obsGnss_CNT}/ ${obsGnss_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 ${obsGnss_CNT}/ ${obsGnss_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 obsGnss!!!"
    echo "  Abortando o processo..."
    exit
  fi
fi

# Diretorios de saida do GSI para a minimizacao 
# Mudar aqui e descomente caso seja um diretorio diferentes do pacote 
 echo $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: "${pathGSIout}
echo ./scripts/filtra_j.sh ${LABELI} ${LABELF} ${pathGSIout}
./scripts/filtra_j.sh ${LABELI} ${LABELF} ${pathGSIout}

#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 ${obsGnss_CNT}/ ${obsGnss_tabe}/ ${LABELI} ${LABELF} ${NPT}
/scratchin/grupos/assim_dados/home/gdad/public/gnuplot5/bin/gnuplot -c scripts_plots/cust_red.gpl ${obsGnss_CNT}/ ${obsGnss_tabe}/ ${LABELI} ${LABELF} ${NPT}
convert -density 300 cust_gps.eps -flatten cust_gps.png

# Movendo figuras geradas para ${obsGnss_figu}
echo 
echo -e "\033[40;1m >>>> Movendo figuras geradas para obsGnss_figu \033[m"
ls *.eps *.png
cp *.png ${obsGnss_page}
mv *.eps *.png ${obsGnss_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 ${obsGnss_figu}/${PERIOD}
rm -rf *.png
while [ ${LABELI} -le ${LABELF} ]
do
  cp ${obsGnss_figu}/${LABELI:0:6}/${LABELI:6:10}/conv/sso*.fgs.png ${tempBKG}
  cp ${obsGnss_figu}/${LABELI:0:6}/${LABELI:6:10}/conv/sso*.anl.png ${tempANL}
  cp ${obsGnss_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 ${obsGnss_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 ${obsGnss_figu}/${PERIOD}
rm -rf ${tempANL}
cp *_${PERIOD}.*.gif ${obsGnss_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/obsGnss/ \033[m "
ls ${obsGnss_page}/*${PERIOD}.*.gif
ls ${obsGnss_page}/*.png

echo ""
echo -e "\033[36;1m >>>> Binarios quando disponiveis estarao:\033[m " 
echo -e "\033[33;1m ${obsGnss_bina}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de tabelas em:\033[m "
echo -e "\033[33;1m ${obsGnss_tabe}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de logs em:\033[m "
echo -e "\033[33;1m ${obsGnss_logs}/ \033[m "
echo -e "\033[36;1m >>>> Figuras em:\033[m "
echo -e "\033[33;1m ${obsGnss_figu}/ \033[m "
echo ""

exit 0
