 #! /bin/bash 
#--------------------------------------------------------------------#
#                    obsRadi - GDAD/CPTEC/INPE - 2017                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#  Ferramenta de diagnostico da assimilacao de dados de radiância
#  de sensores em satélites artificiais na assimilacao de dados usando o GSI
#
# !INTERFACE:
#    ./run_obsRadi.sh LABELINI LABELFIM NHOURS OmA  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_obsRadi.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_obsRadi.sh              
#  Digite a palavra testcase no primeiro argumento para o testcase padrÃ£o (gdad/public):
#    ./run_obsRadi.sh testcase
#
# !REVISION HISTORY:
#  22-06-2017 - Luiz Sapucci - Codigo Inicial baseado no run_humNphy.sh
#  07-06-2024 - Luiz Sapucci - Ajustando a primeira versão para o EGEON com o readDiag.Radi
#  01-07-2024 - Luiz Sapucci - Primeira versão no repositorio com ajustes no script do python
#
#
# !REMARKS:
#  O readDiag-1.0.0 faz a leitura dos dados do diag do gsi concatenados em um unico arquivo.
#
# !BUGS:
#  1- 
#
#EOP
#--------------------------------------------------------------------#
#BOC

# Descomente abaixo para debugar
#set -o xtrace

# Nome do sensor entre os destinados a radiância
sensType=amsua #hirs4 #amsua
# isso não esta sendo usado ainda. avaliar sua aplicação


# Verificando argumentos de entrada se testcase
if [ "${1}" = "testcase" ]
then
  export LABELI=2025080112 
  export LABELF=2025083118  #16
  export FCT=06
  export OmFOmA="OmA"

##########################
  if [ -z "${2}" ]
  then
    export nome_sys="SMNA"
  else
    export nome_sys=${2} 
  fi
  export EXPE="testcase"
  
  #export GSIout=/mnt/beegfs/das.group/testcase/SMNAexp21/GSI/dataout
  #export GSIout=/home/radiancia/Exp_SMNA/data/EXP21/gsi_dataout
  #export GSIout=/mnt/beegfs/luiz.sapucci/SMNA/EXP22/datainout/gsi/dataout
  export GSIout=/mnt/beegfs/caroline.viezel/SMNA_v3.0.0.t11889/SMG/datainout/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_obsRadi.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 radiancia  usando o GSI\033[m"
    echo -e ""
    echo -e "\033[33;1m !INTERFACE:\033[m"
    echo -e "\033[33;1m ./run_obsRadi.sh LABELINI LABELFIM NHOURS OmA GSI_system EXPE GSIout \033[m"
    echo -e ""
    echo -e "\033[32;1m Digite com a palavra testcase no primeiro argumento para o testcase padrÃ£o:\033[m"
    echo -e "\033[32;1m ./run_obsRadi.sh testcase <GSI_system> \033[m"
    echo -e ""
    exit 
  fi
  
echo -e ""
echo -e "\033[34;1m > obsRadi: Ferramenta de diagnostico da assimilacao de dados de \033[m"
echo -e "\033[34;1m >          radiancia usando o GSI \033[m"

  
  # Verificando argumentos de entrada
  if [ -z "${1}" ]
  then
    export LABELI=2024031500 
  else
    export LABELI=${1}
  fi
  if [ -z "${2}" ]
  then
    export LABELF=2024031618 
  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="SMNA"
  else
    export nome_sys=${5}
  fi
  if [ -z "${6}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${6}
  fi
  if [ -z "${7}" ]
  then
    export GSIout=/mnt/beegfs/$USER/${nome_sys:0:4}/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_obsRadi.sh ${LABELI} ${LABELF} ${FCT} ${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_obsRadi.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:0:7} = "eslogin" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                     #"
     echo "#                                                                   #"
     echo "# O python no tupa funciona corretamente apenas no eslogin02.       #"
     echo "# Logue nesse servidor antes de proceguir,se for o caso digitando   #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     echo "#####################################################################"
     
     if [ ${HOSTNAME:8:9} = "02" ];then
       . /opt/modules/default/etc/modules.sh
       module swap PrgEnv-pgi PrgEnv-gnu >& /dev/null
       echo "#                                                                   #"
       echo "#####################################################################"
     else
       echo "# O python no tupa funciona corretamente apenas no eslogin02.       #"
       echo "# Logue nesse servidor antes de proceguir,se for o caso digitando   #"
       echo "# $ ssh eslogin02 -XC                                               #"
       echo "#                                                                   #"
       echo "#####################################################################"
     fi
fi

echo -e ""
echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
#echo -e "\033[34;1m > Sensor          : \033[m \033[31;1m${sensType}\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 ! -d ${obsRadi_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 "${obsRadi_home}/config_obsRadi.ksh configurar ${nome_sys} ${EXPE}"
    ${obsRadi_home}/config_obsRadi.ksh configurar ${nome_sys} ${EXPE}
    if test ! -d ${obsRadi_work}/dataout/logfile; then echo "${obsRadi_work}/dataout/logfile"; echo "Rodada cancelada. Dados inexistentes!!!" ;exit; fi
else 
   echo "Arvore de diretorio do experimento" ${EXPE} "ja existentente para o protocolo"; 
   echo ""
fi

# Exportando variaveis do obsRadi
source  ${obsRadi_home}/config_obsRadi.ksh vars_export ${nome_sys} ${EXPE}

# ajustando o ftp para os direitos autorais apropriados
obsRadi_page=/pesq/share/das/dist/caroline.viezel/${nome_sys}/evalu_t12183/${EXPE}/diag/obsRadi
mkdir -p /pesq/share/das/dist/caroline.viezel/${nome_sys}
mkdir -p /pesq/share/das/dist/caroline.viezel/${nome_sys}/evalu_t12183
mkdir -p /pesq/share/das/dist/caroline.viezel/${nome_sys}/evalu_t12183/${EXPE}
mkdir -p /pesq/share/das/dist/caroline.viezel/${nome_sys}/evalu_t12183/${EXPE}/diag
mkdir -p /pesq/share/das/dist/caroline.viezel/${nome_sys}/evalu_t12183/${EXPE}/diag/obsRadi

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

cd ${obsRadi_work_run}
echo 

#Arquivo de log da rodada
logfile=${obsRadi_logs}/obsRadi_${LABELI}_${LABELF}.log

echo ""
echo -e "\033[34;1m >>> Submetendo o dignostico \033[33;1m obsRadi \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 obsRadi 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

##########################################################################################
# Gerando as figuras da distribuicao espacial/estatistica OmF/OmA e dados rejeitados
# gerando o script do python para gerar as figuras selecione o que quer fazer nessa rodada

# Deseja submeter no superputador (se nao roda no noh de submissao, o que nao e recomendado)
Submite=true # Coloque 'true'('false') se(não) desejar submeter.

#SENSOR='amsua' #'hirs4' #'amsua'
#ListSat="'metop-b', 'metop-c'" #"'n15', 'n19', 'n18'" ##, metop-b'"
#ListChan='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15' #,16,17,18,19'
#ListChan='7,8,9,10,11,12,13'

#SENSOR='atms' #'hirs4' #'amsua'
#ListSat="'npp', 'n20', 'n21'" #"'n15', 'n19', 'n18'" ##, metop-b'"
#ListChan='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
#ListChan='5,6,7,8,9,10,11,12,13,14'

PARAME='obs'  #'idqc'
vminOMA=-0.2       
vmaxOMA=0.2        
vminSTD=0.0        
vmaxSTD=1.0


###########################################################################################
#Gerando o script em python baseado na seleção acima

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

import gsidiag as gd
from datetime import datetime, timedelta
import pandas as pd
import matplotlib.pyplot as plt
from gsidiag.datasources import getVarInfo
import os

print('')
print("--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--")
print("--%%- Rodada AMSUA experimento: ", '${EXPE}')
print("--%%- Dados lidos em: ",'${GSIout}')
print("--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--")
print('')

DIRdiag = "${GSIout}"

dateIni = '${LABELI}'
dateFin = '${LABELF}'
nHour = '${FCT}'

datei = datetime.strptime(str(dateIni), '%Y%m%d%H')
datef = datetime.strptime(str(dateFin), '%Y%m%d%H')
dates = [dates.strftime('%Y%m%d%H') for dates in pd.date_range(datei, datef,freq='24H').tolist()]

print(dates)
print('')

print('')
print('>>>> Leitura: fort_207_read <<<<')
print('')
Self = gd.read_diag.fort_207_read(DIRdiag, dates)

print('Finalizou Leitura')
print('')

print('time_series_fort207 --> todos os canais mesmo sensor')
print('')

Sat = 'MetOp-B'
Type='amsua'
mask = "(type == 'amsua' & sat == 'metop-b')"
channel = None
channel = [7, 8, 9, 10, 11, 12, 13]
#channel = 13

print('Type = ', Type, 'Sat = ', Sat, 'channel = ', channel)
print('')

gd.plot_diag.time_series_fort207(Self, Type=Type, 
                                 Sat=Sat, 
                                 it=1, 
                                 dateIni=dateIni, 
                                 dateFin=dateFin, 
                                 nHour=nHour, 
                                 mask=mask, 
                                 channel=channel, 
                                 Clean=False)

Sat = 'MetOp-C'
Type='amsua'
mask = "(type == 'amsua' & sat == 'metop-c')"
channel = None
channel = [7, 8, 9, 10, 11, 12, 13]
#channel = 13

print('Type = ', Type, 'Sat = ', Sat, 'channel = ', channel)
print('')

gd.plot_diag.time_series_fort207(Self, Type=Type,
                                 Sat=Sat,
                                 it=1,
                                 dateIni=dateIni,
                                 dateFin=dateFin,
                                 nHour=nHour,
                                 mask=mask,
                                 channel=channel,
                                 Clean=False)


Sat = 'NPP'
Type='atms'
mask = "(type == 'atms' & sat == 'npp')"
channel = None
channel = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
#channel = 14

print('Type = ', Type, 'Sat = ', Sat, 'channel = ', channel)
print('')

gd.plot_diag.time_series_fort207(Self, Type=Type, 
                                 Sat=Sat, 
                                 it=1, 
                                 dateIni=dateIni, 
                                 dateFin=dateFin, 
                                 nHour=nHour, 
                                 mask=mask, 
                                 channel=channel, 
                                 Clean=False)

Sat = 'NOAA-20'
Type='atms'
mask = "(type == 'atms' & sat == 'n20')"
channel = None
channel = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
#channel = 14

print('Type = ', Type, 'Sat = ', Sat, 'channel = ', channel)
print('')

gd.plot_diag.time_series_fort207(Self, Type=Type,
                                 Sat=Sat,
                                 it=1,
                                 dateIni=dateIni,
                                 dateFin=dateFin,
                                 nHour=nHour,
                                 mask=mask,
                                 channel=channel,
                                 Clean=False)

Sat = 'NOAA-21'
Type='atms'
mask = "(type == 'atms' & sat == 'n21')"
channel = None
channel = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
#channel = 14

print('Type = ', Type, 'Sat = ', Sat, 'channel = ', channel)
print('')

gd.plot_diag.time_series_fort207(Self, Type=Type,
                                 Sat=Sat,
                                 it=1,
                                 dateIni=dateIni,
                                 dateFin=dateFin,
                                 nHour=nHour,
                                 mask=mask,
                                 channel=channel,
				 Clean=False)

print("")
print("----------------- Fim da rodada do Python --------------------")

EOF


cd ${obsRadi_work_run}/

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

chmod 755 runPython.py
  
#Para rodar na maquina local sem submeter descomente as duas linhas abaixo e comente a submissão na egeon
### Activando o ambiente do ReadDiag
#  source /home/luiz.sapucci/.conda/envs/readDiag.Radi/bin/activate
#  ./runPythonFig.py >> ${logfile}


###########################
# Submetendo o processo na EGEON

HMS=`date +'%F.%H%M'`

cat << EOF > ./runPython.sbt
#! /bin/bash
#SBATCH --job-name=RadEVALF
#SBATCH --nodes=1
#SBATCH --partition=batch
#SBATCH --tasks-per-node=128
#SBATCH --time=04:00:00
#SBATCH --output=${obsRadi_work_run}/runPython.${HMS}.sbt.log

cd ${obsRadi_work_run}

echo "Activando o anbiente ReadDiag na egeon"
source /home/$USER/.conda/envs/readDiag.Radi/bin/activate
echo "Rodando o runPython.py com o python em:"
echo "/home/$USER/.conda/envs/readDiag.Radi/bin/python"
mpirun -np 1 /home/$USER/.conda/envs/readDiag.Radi/bin/python -u runPython.py >> runPython.${HMS}.sbt.out 2>&1

EOF

chmod 755 runPython.sbt

if $Submite; 
then
  # Submetendo o script com a opção -W para ficar preso 
  # esperando terminar para continuar as tarefas posteriores
  echo "" 
  echo -e "\033[36;1m >>>> Para acompanhar o processo submetido digite em outro terminal:\033[m " 
  echo -e "\033[33;1m tail -f ${obsRadi_work_run}/runPython.${HMS}.sbt.out \033[m "
  echo "" 
  sbatch -W runPython.sbt
else
  # Verificando onde esta sendo utilizado o protocolo para ativar o ambiente
  if [ $HOSTNAME = "headnode.egeon.cptec.inpe.br" ]
  then 
      echo  "Ambiente EGEON" 
      # Ativando o readDiag para rodar no nó de submissão
      #echo   source /home/$USER/.conda/envs/readDiag/bin/activate
      echo   source /home/$USER/.conda/envs/readDiag.Radi/bin/activate
      #echo   source /home/carlos.bastarz/miniconda3/envs/readDiag.jgerd/bin/activate
      #echo   source /home/caroline.viezel/.conda/envs/readDiagGerd/bin/activate
  else
      echo  " Ambiente  $HOSTNAME simulando a EGEON" 
      # Ativando o readDiag na maquina local para rodar o protocolo
      # source /home/$USER/.conda/envs/readDiag.Radi/bin/activate
      source /home/$USER/.conda/envs/readDiag-issue_45/bin/activate
  fi
  
  echo "" 
  echo -e "\033[36;1m >>>> Para acompanhar o processo sendo rodado digite em outro terminal:\033[m " 
  echo -e "\033[33;1m tail -f ${logfile} \033[m "
  echo "" 

  ./runPython.py  >> ${logfile}
    
fi
 
##############################################################################
#####################################################################################
 
# Movendo figuras geradas para ${obsRadi_figu}
echo 
echo -e "\033[36;1m >>>> Movendo figuras geradas para obsRadi_figu \033[m"
ls *.png

cp *.png ${obsRadi_page}/${PERIOD}
mv *.png ${obsRadi_figu}/${PERIOD}

cd ${obsRadi_figu}/${PERIOD}
#rm -rf ${tempANL}

echo -e "\033[36;1m >>> Arquivos Figs do periodo: no NIS e FTP\033[m"
echo -e "\033[33;1m http://ftp1.cptec.inpe.br/pesquisa/das/caroline.viezel/${nome_sys}/evalu_t12183/${EXPE}/diag/obsRadi/ \033[m "
echo -e "\033[33;1m ${obsRadi_page}/${PERIOD}/ \033[m "
ls ${obsRadi_page}/${PERIOD}/

echo 
echo -e "\033[36;1m >>>> Binarios quando disponiveis estarao:\033[m " 
echo -e "\033[33;1m ${obsRadi_bina}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de tabelas em:\033[m "
echo -e "\033[33;1m ${obsRadi_tabe}/ \033[m "
echo -e "\033[36;1m >>>> Arquivos de logs em:\033[m "
echo -e "\033[33;1m ${obsRadi_logs}/ \033[m "
echo -e "\033[36;1m >>>> Figuras em:\033[m "
echo -e "\033[33;1m ${obsRadi_figu}/ \033[m "
echo ""

exit 0

