#! /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.
#  23-04-2018 - Luiz Sapucci - Adaptacao inicil para usar o ReadDiag com o Python.
#
# !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 variaveis 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/das/projetos/gdad/public/eval/diag/stat_binary/${nome_sys:0:3}
  export obsGnss_CNT=/scratchin/grupos/das/projetos/gdad/public/eval/dataCNT/diag/obsGnss
  export pathGSIout=/scratchin/grupos/das/projetos/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi/dataout
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} 
  # Mudar aqui caso seja um diretorio diferentes da versao so SMG   
  export pathGSIout=${GSIout}
  # SMG_2.0.0
  export pathGSIout=/stornext/online6/das/joao.gerd/BAMGSI/SMGv2.0/3rdTeste/gsi/dataout
  # SMG_1.0.0
  export pathGSIout=/stornext/online6/das/gdad/SMG_eval/EX1ALL/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 esta logado no eslogin02
if [ ${HOSTNAME} != "eslogin02" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                       #"
     echo "#                                                                   #"
     echo "# O python funciona corretamente apenas no eslogin02.               #"
     echo "# Logue nesse servidores antes de proceguir, digitando              #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     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}

#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}
. /opt/modules/default/etc/modules.sh
module swap PrgEnv-pgi PrgEnv-gnu

LABELIni=${LABELI}

while [ ${LABELIni} -le ${LABELF} ]
do
echo -e "\033[1;32m >>>> Gerando as figuras para a radio ocultacao GNSS \033[m"
cat << EOF > ./runPython.py
#! /usr/bin/env python3

#from ReadDiagTools import gsiDiagConv as gs
import gsiDiagEval as gs
import os

a=gs.open('${pathGSIout}/${LABELIni}/diag/pe%e.conv_02')

a.pgeomap('gps',3,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',4,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',740,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',745,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',744,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',741,'pbqc',${LABELIni},0,1000)
a.pgeomap('gps',722,'pbqc',${LABELIni},0,1000)

a.ptmap('gps', [3, 4, 740, 745, 744, 741, 722], ${LABELIni})
os.system("mv ptmap${LABELIni}.png ptmap_ref_ROGNSS_${LABELIni}.png")

EOF

if [ ${LABELIni} -eq ${LABELF} ];then
cat << EOF >> ./runPython.py

dini = ${LABELI} 
dfin = ${LABELF}
vName = 'gps'
vType = 3

gsiTools = gs.gsiFunctions()
gsiTools.time_series(varName=vName, varType=vType, dateIni=dini, dateFin=dfin)

EOF
fi

if [ ${LABELIni} -eq ${LABELI} ];then
cat << EOF >> ./runPython.py

a.pfileinfo()

EOF

fi

chmod 755 runPython.py
./runPython.py #### executando o main() para geração das figuras ####

LABELIni=`${inctime} ${LABELIni} +${FCT}h %y4%m2%d2%h2`

done

echo -e "\033[1;32m >>>> Ciclo de processamento do periodo finalizado!\033[m"
echo 

#Filtra as tabelas de Jo antes e depois da minimizacao

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/das/projetos/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 ${tempANL}
cp time_series_gps-3.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 ""

# Gerando o gif da ANL
cd ${tempANL}
convert -dispose Background -delay 20 -loop 1 -density 288 ptmap_ref_ROGNSS_*.png ../ptmap_ref_ROGNSS_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 pbqc_gps_3_*.png ../pbqc_gps_3_${PERIOD}.anl.gif
convert -dispose Background -delay 20 -loop 1 -density 288 pbqc_gps_4_*.png ../pbqc_gps_4_${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
