#! /bin/bash 
#--------------------------------------------------------------------#
#                    obsConv - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Ferramenta de diagnostico da assimilacao de dados de adpu (radiossondas)
#  de estacoes convencionais na assimilacao de dados usando o GSI
#
# !INTERFACE:
#    ./run_obsConv_obsType.sh LABELINI LABELFIM NHOURS GSI_system EXPE GSIOUTpath
#
#    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"
#         => OmF or OmA: Selecione o que deseja avaliar OmF ou OmA. 
#         => 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"
#         => GSIOUTpath: Path of the diag file of GSI dataout organized by date yyyymmddhh
#
#  !EXAMPLES:  
#    ./run_obsConv_obsType.sh 2013010100 2013010818 CPT 62 28 06 OmA SMG EXPE $WORK_HOME/SMG/datainout/gsi/dataout
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#    ./run_obsConv_obsType.sh              
#  Digite a palavra testcase no primeiro argumento para o testcase padrão (gdad/public):
#    ./run_obsConv_obsType.sh testcase
#
# !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
#  28-08-2018 - Luiz Sapucci - Ajustando para o Python e outras melhorias
#  25-09-2018 - Luiz Sapucci - Ajustes para funcionar no SMR.
#
# !REMARKS:
#  Falta testes para o sistema SMR.
#
# !BUGS:
#  1- 
#
#EOP
#--------------------------------------------------------------------#
#BOC

# Descomente abaixo para debugar
#set -o xtrace

# Tipo de dados entre os convencionais
obsType=adpsfc

# Verificando argumentos de entrada se testcase
if [ "${1}" = "testcase" ]
then
  export LABELI=2013010100
  export LABELF=2013010218
  export FCT=06
  export OmFOmA="OmA"
  
##########################
  if [ -z "${2}" ]
  then
    export nome_sys="SMG"
  else
    export nome_sys=${2} 
  fi
  export EXPE="testcase"
  
  export GSIout=/scratchin/grupos/das/projetos/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi/dataout
  
  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_${obsType}.sh ${LABELI} ${LABELF} ${FCT}  ${OmFOmA} ${nome_sys} ${EXPE} ${GSIout} \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_${obsType}.sh LABELINI LABELFIM NHOURS GSI_system EXPE GSIout \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_${obsType}.sh testcase <GSI_system> \033[m"
    echo -e ""
    exit 
  fi
  
echo -e ""
echo -e "\033[34;1m > obsConv_${obsType}: 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 OmFOmA="OmA"
  else
    export OmFOmA=${4}
  fi
  if [ -z "${5}" ]
  then
    export nome_sys="SMG"
  else
    export nome_sys=${5}
  fi
  if [ -z "${6}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${6}
  fi
  if [ -z "${7}" ]
  then
    export GSIout=$WORK_HOME/${nome_sys:0:3}/datainout/gsi/dataout
  else
    export GSIout=${7}
  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_${obsType}.sh ${LABELI} ${LABELF} 06  ${OmFOmA} ${nome_sys} ${EXPE} ${GSIout}\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_${obsType}.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

# 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

echo -e ""
echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
echo -e "\033[34;1m > Obs Type          : \033[m \033[31;1m${obsType}\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 > Opcao OmF ou OmA  : \033[m \033[31;1m${OmFOmA}\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"
echo -e "\033[34;1m > GSI dataout(Diags): \033[m \033[31;1m${GSIout}\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}

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

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

#Chamando o plot_gps para gerar as figuras do protocolo
logfile=${obsConv_logs}/obsConv_${obsType}_${LABELI}.log
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

# Define o numero do diag sendo 01 para OmF e o ultimo diagfile para OmA, caso deseje intermediario outerloop ajustar aqui
if [ ${OmFOmA} != "OmA" ];then
  fileDiag="01"
else
    filediagnum=`ls ${GSIout}/${LABELI}/diag/pe0000.conv_?? | wc -l`
    fileDiag="0"${filediagnum}
fi

cd ${obsConv_run}

#Gerando as figuras da distribuicao espacial
echo 

LABELIni=${LABELI}

LABELF2=`${inctime} ${LABELF} +120h %y4%m2%d2%h2`

. /opt/modules/default/etc/modules.sh
module swap PrgEnv-pgi PrgEnv-gnu >& /dev/null

while [ ${LABELIni} -le ${LABELF} ]
do

cat << EOF > ./runPython.py
#! /usr/bin/env python3

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

a=gs.open('${GSIout}/${LABELIni}/diag/pe%e.conv_${fileDiag}')

#(variavel,tipo_de_filtro,dado_a_ser_plotado,nível_min,nível_max)####

#a.pgeomap('ps',181,'pbqc',${LABELIni},1000,1000,'${nome_sys:0:3}','${fileDiag}')

#a.pgeomap('ps',187,'pbqc',${LABELIni},1000,1000,'${nome_sys:0:3}','${fileDiag}')

#a.pvmap(['t', 'ps', 'pw'], ${LABELIni}, use=[1, -1])

#SURF

a.ptmap('ps', [181, 187], ${LABELIni},'${nome_sys:0:3}')

os.system("mv ptmap_ps_${LABELIni}.png ptmap_ps_${obsType}_${LABELIni}.png >& /dev/null")

#surf_without_ps

a.ptmap('ps', [183], ${LABELIni},'${nome_sys:0:3}')

os.system("mv ptmap_ps_${LABELIni}.png ptmap_ps_${obsType}_without_ps_${LABELIni}.png >& /dev/null")

EOF

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

dini = ${LABELI} 
dfin = ${LABELF}
vName = 'ps'
vType = 181
delta = '06'
pathgsi = "${GSIout}/"

gsiTools = gs.gsiFunctions()
gsiTools.time_series(varName=vName, varType=vType, dateIni=dini, dateFin=dfin, path=pathgsi,nHour=delta, OuterL='${fileDiag}' )

vType = 187
gsiTools.time_series(varName=vName, varType=vType, dateIni=dini, dateFin=dfin, path=pathgsi,nHour=delta, OuterL='${fileDiag}' )

EOF
fi

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

a.pfileinfo()

EOF
fi

chmod 755 runPython.py

echo -e "\033[1;32m >>>> Gerando figuras Data: ${LABELIni}\033[m"
./runPython.py >> ${logfile}

#### 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 finalizado!\033[m"
echo 

##############################################################################

#####################################################################################
 
# Movendo figuras geradas para ${obsConv_figu}
echo 
echo -e "\033[36;1m >>>> Movendo figuras geradas para obsConv_figu \033[m"
ls *.png
cp *.png ${tempANL}
cp time_series_*.png ${obsConv_page}
mv *.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}

# Gerando o gif da ANL
#PBQC
#convert -dispose Background -delay 20 -loop 1 -density 288 pgeomap_pbqc_ps_181*.png ../pbqc_ps_181_${PERIOD}.gif
#SURF
convert -dispose Background -delay 20 -loop 1 -density 288 ptmap_ps_${obsType}_*.png ../ptmap_ps_${obsType}_${PERIOD}.gif
#t_surf_without_ps_
convert -dispose Background -delay 20 -loop 1 -density 288 ptmap_ps_${obsType}_without_ps_*.png ../ptmap_ps_${obsType}_without_ps__${PERIOD}.gif
#convert -dispose Background -delay 20 -loop 1 -density 288 pvmap*.png ../pvmap_${PERIOD}.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.cptec.inpe.br/pesquisa/das/${USER}/${nome_sys}/evalu/${EXPE}/diag/obsConv/ \033[m "
ls ${obsConv_page}/*${PERIOD}.gif

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
