#! /bin/bash 
#--------------------------------------------------------------------#
#                    obsRadi SatBias - GDAD/CPTEC/INPE - 2024                #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
#      obsRadi: Ferramenta de diagnostico dos coeficientes de correção de
#               de bias dos canais de radiância usados no GSI.
#
# !INTERFACE:
#    ./run_satBias.ksh 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"
#         => GSI_system: Label do sistema de modelagem com o GSI: Ex. "SMG" "SMR"
#         => EXPE      : Label do experimento onde se destina os dados de saida: Ex. "testcase"
#         => GSIOUTpath: Path of the diag file of GSI dataout organized by date yyyymmddhh
#
#  !EXAMPLES:  
#    ./run_satBias.ksh 2013010100 2013010818 12 SMNA testcase $WORK_HOME/SMNA/datainout/gsi/dataout
#
#  !TESTCASE:
#  Digite sem argumentos de entrada para o testcase do sistema hospedeiro, da forma:
#    ./run_satBias.ksh              
#
# !REVISION HISTORY:
#  27-03-2024 - Luiz Sapucci   - Codigo Inicial ja ajustando para o EGEON com o readDiag-1.0.0
#  03/04/2024 - Luiz Sapucci  - Ajustes para figura resumo por satélites dos coeficientes de bias
#
# !REMARKS:
#
# !BUGS:
#
#EOP
#--------------------------------------------------------------------#
#BOC

# Verificando argumentos de entrada se testcase
if [ "${1}" = "testcase" ]
then
  export LABELI=2020010100
  export LABELF=2020010812
  export FCT=06
  if [ -z "${2}" ]
  then
    export nome_sys="SMNA"
  else
    export nome_sys=${2} 
  fi
  export EXPE="testcase"
  export gsidataout=/mnt/beegfs/das.group/testcase/SMNAexp15/GSI/dataout
  echo -e ""
  echo -e "\033[31;1m          !!! ATENCAO !!!\033[m"
  echo -e "\033[31;1m RODANDO COM PARAMETROS DO TESTCASE PADRÃƒO \033[m"
  echo -e ""
  echo -e "\033[33;1m ./run_satBias.ksh ${LABELI} ${LABELF} ${FCT} ${nome_sys} ${EXPE} ${gsidataout} \033[m"
  echo -e ""
else

# Verificando se ajuda
  if [ "${1}" = "ajuda" ]
    then
    echo -e ""  
    echo -e "\033[33;1m  Ferramenta de diagnostico dos coeficientes de correcÃ£o de \033[m"
    echo -e "\033[33;1m  de bias dos canais de radiância usados no GSI. \033[m"
    echo -e ""
    echo -e "\033[33;1m !INTERFACE:\033[m"
    echo -e "\033[33;1m ./run_satBias.ksh LABELINI LABELFI NHOURS GSI_system EXPE  gsidataout \033[m"
    echo -e ""
    echo -e "\033[32;1m Digite com a palavra testcase no primeiro argumento para aplicar \033[m" 
    echo -e "\033[32;1m o testcase padrÃ£o usando dados em gdad/PUBLIC no SMG: \033[m"
    echo -e "\033[32;1m ./run_satBias.ksh testcase \033[m"
    echo -e "\033[32;1m ou em outro sistema ou versao que usa o GSI: \033[m"
    echo -e "\033[32;1m ./run_satBias.ksh testcase GSI_system \033[m"
    echo -e ""    
    exit 
  fi

# Verificando argumentos de entrada
  if [ -z "${1}" ]
  then
    export LABELI=2020010100
  else
    export LABELI=${1}
  fi
  if [ -z "${2}" ]
  then
     export LABELF=2020010812
  else
    export LABELF=${2} 
  fi
  if [ -z "${3}" ]
  then
    export FCT=06 # 06
  else
    export FCT=${3}
  fi
  if [ -z "${4}" ]
  then
     export nome_sys="SMNA"
  else
    export nome_sys=${4} 
  fi
  if [ -z "${5}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${5}
  fi
  if [ -z "${6}" ]
  then
    export gsidataout=/mnt/beegfs/$USER/${nome_sys:0:4}/datainout/gsi/dataout
  else
    export gsidataout=${6}
  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 ${nome_sys:0:3} \033[m"
     echo -e "\033[33;1m Rode novamente com a palavra ajuda no primeiro argumento para mais opcoes \033[m"

    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


echo -e ""
echo -e " > run_satBias: Ferramenta de diagnostico dos coeficientes de correcao de"
echo -e " >              de bias dos canais de radiância usados no GSI. "
echo -e ""
echo -e "\033[34;1m CONFIGURACAO DA RODADA \033[m"
echo -e ""
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"
echo -e ""
echo -e "\033[33;1m Com os dados de saida do GSI lidos em \033[m"
echo -e "\033[33;1m ${gsidataout} \033[m" 

#criando diretorio das figuras do periodo e temporarios para gerar gif animado
PERIOD=${LABELI}${LABELF}

# Exportando variaveis do eval
source  ../../../config_eval.sh vars_export ${nome_sys} ${EXPE}

if test ! -d ${obsRadi_bias_figu}; 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}
    if test ! -d ${obsRadi_bias_figu}; then echo ""; echo "Rodada cancelada!!!" ;exit; fi
else 
   echo "Arvore de diretorio do experimento" ${EXPE} "ja existentente para o protocolo"; 
   echo ""
fi

# Copia os arquivos da rodada de controle
rm *cost_*.txt >& /dev/null

if [ -e ${obsRadi_CNT}/CNT_cost_gradient_${PERIOD}.txt ]; then
  echo " ** Copiando os dados de controle para o periodo  ** "
  echo ""
  cp ${obsRadi_CNT}/CNT_cost_gradient_${PERIOD}.txt CNT_cost_gradient.txt
  cp ${obsRadi_CNT}/CNT_cost_terms_${PERIOD}.txt CNT_cost_terms.txt
else
  echo ""
  echo " ** Nao ha arquivos de controle para esse experimento  ** "
  echo ""
fi

################### Organizando os dados para plotar as figuras ##################

data=${LABELI}

# Verificando como está o nome do satbias nesse experimento
if [ -e ${gsidataout}/${data}/satbias.in ] ;then 
  nameSatBi=satbias.in
  nameSatBo=satbias.out
else 
  if [ -e ${gsidataout}/${data}/satbias_in ] ;then
    nameSatBi=satbias_in
    nameSatBo=satbias_out
  else
    echo "Arquivo de correção de bias não existente!!! Saindo..."
    echo "ls ${gsidataout}/${data}/satbias_in"
    ls ${gsidataout}/${data}/
    exit  
  fi
fi


echo
echo -e "\033[34;1m ######## Loop para verificar se os arquivos estao correto e copiando para o processamento ######## \033[m"

rm -rf lista.satbias.txt DoY.txt


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

  dataFG=$(${inctime} ${data} -6hr %y4%m2%d2%h2)

  echo ">>> Processando a data: " ${data}

  diff -q ${gsidataout}/${data}/$nameSatBi ${gsidataout}/${dataFG}/$nameSatBo

  if [ $? -eq "0" ]; then 
    echo "Arquivos coefientes usados corretamente nessa data." 
    cp ${gsidataout}/${data}/$nameSatBo ${data}_$nameSatBo
    echo ${data}_$nameSatBo >> lista.satbias.txt
    doy=`~/bin/caldate.3.1.2 ${data} + 0h 'jjj'`
    echo "scale=2;${doy}*1+${data:8:2}/24"|bc >> DoY.txt
  else
    diff -q ${gsidataout}/${data}/$nameSatBi ${gsidataout}/${data}/BC.C01/$nameSatBo    

    if [ $? -eq "0" ]; then 
      echo "Arquivos coefientes usados corretamente com BC.C01 nessa data." 
      cp ${gsidataout}/${data}/$nameSatBo ${data}_$nameSatBo
      echo ${data}_$nameSatBo >> lista.satbias.txt
      doy=`~/bin/caldate.3.1.2 ${data} + 0h 'jjj'`
      echo "scale=2;${doy}*1+${data:8:2}/24"|bc >> DoY.txt
    fi
  
  fi  
  
  data=$(${inctime} ${data} +6hr %y4%m2%d2%h2)

done
 
# Valores para o range do plot
Dini=`head -n1 DoY.txt`
Dfi=`tail -n1 DoY.txt`
Dfim=`echo "$Dfi+6"| bc`

echo
echo -e "\033[34;1m ######## Organizando os dados em arquivos com sencores e satelites ######## \033[m"
# Caso haja mais satelites ou sensores adicionar na lista e identificar o linI e linF

# O metopA foi tirado da lista mas para periodos mais antigo precisa coloca-lo 'AMSUAmetoPA'

for sat in 'AMSUAnoaa15' 'AMSUAnoaa18' 'AMSUAnoaa19'  'AMSUAmetoPB'  ; do
  echo 
  echo -e "\033[33;1m ########## Prcessamdo Sensor e satelite: $sat \033[m" 
  if [ $sat == 'AMSUAnoaa15' ]; then linI=1;linF=43 ;fi
  if [ $sat == 'AMSUAnoaa18' ]; then linI=118;linF=161 ;fi
  if [ $sat == 'AMSUAmetoPA' ]; then linI=235;linF=277 ;fi
  if [ $sat == 'AMSUAnoaa19' ]; then linI=3928;linF=3970;fi
  if [ $sat == 'AMSUAmetoPB' ]; then linI=7603;linF=7645;fi

  chlin=`echo "($linI+2)/3-1"| bc`

  while [ $linI -le $linF ]
  do

    ch=`echo "($linI+2)/3-$chlin"| bc` ## para noaa15
    lin2=`echo "$linI + 1"| bc`
    lin3=`echo "$linI + 2"| bc`

    if [ $ch -le 9 ]; then ch="0"$ch;fi

    echo ">>>>"
    echo -e "\033[36;1m Processando o canal: $ch \033[m" 

    rm -rf file.1 file.2 file.3 
    while read LINE;do head -n${linI} $LINE|tail -n1>>file.1; head -n${lin2} $LINE|tail -n1>>file.2; head -n${lin3} $LINE|tail -n1>>file.3; done < lista.satbias.txt 
    paste DoY.txt file.1 file.2 file.3 > satbias${sat}_ch$ch.txt

    head satbias${sat}_ch$ch.txt

    linI=`echo "$linI + 3"| bc`

  done
done

echo
echo -e "\033[34;1m ######## Chamando do gnuplot para plotar as figuras ######## \033[m"

# O metopA foi tirado da lista mas para periodos mais antigo precisa coloca-lo 'AMSUAmetoPA'

for sat in 'AMSUAnoaa15' 'AMSUAnoaa18' 'AMSUAnoaa19' 'AMSUAmetoPB' ; do
  echo 
  echo -e "\033[33;1m ########## Processamdo Sensor e satelite: $sat \033[m" 

  echo ">>>>"
  echo -e "\033[36;1m Processando o satelite: $sat  \033[m" 

  # Cria um glp a aprtir do template do amsua com 15 canais. Para outros sensores deverá ser criado outros templates
  cat scripts/template_plot_coeff_satbias_SAT.gpl | sed "s/#DATAINI#/${LABELI}/g" | sed "s/#DATAFIM#/${LABELF}/g" | sed "s/#NCHAN#/01/g" |sed "s/#SENSORSAT#/${sat}/g" |sed "s/#DI#:#DF#/${Dini}:${Dfim}/g"  > plot_coeff_satbias_SAT.gpl

  ${gnuplot} plot_coeff_satbias_SAT.gpl
  
# Caso algum sensor tenha um numero de canais diferente colocar aqui
#  if [ $sat == 'AMSUAnoaa15' ]; then ;fi
  linI=1
  linF=15 

  while [ $linI -le $linF ]
  do

    if [ $linI -le 9 ]; then linI="0"$linI;fi
    echo ">>>>"
    echo -e "\033[36;1m Processando o canal: $linI  \033[m" 

    cat scripts/template_plot_coeff_satbias_CHN.gpl | sed "s/#DATAINI#/${LABELI}/g" | sed "s/#DATAFIM#/${LABELF}/g" | sed "s/#NCHAN#/${linI}/g" |sed "s/#SENSORSAT#/${sat}/g" |sed "s/#DI#:#DF#/${Dini}:${Dfim}/g"  > plot_coeff_satbias.gpl
    ${gnuplot} plot_coeff_satbias.gpl

    linI=`echo "$linI + 1"| bc`  
  done
  
done

echo
echo -e "\033[34;1m ######## Organizando os resultados ######## \033[m"

cp coefieciente_satbias_*.png ${obsRadi_bias_page}
mv coefieciente_satbias_*.png ${obsRadi_bias_figu} 
mv satbias*.txt ${obsRadi_bias_tabe}

rm lista.satbias.txt file.1 file.2 file.3 DoY.txt *$nameSatBo

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/obsRadi/satbias \033[m "
ls ${obsRadi_bias_page}/*
echo ""

echo ""
echo -e "\033[36;1m >>>> Arquivos de tabelas em:\033[m "
echo -e "\033[33;1m ${obsRadi_bias_tabe}/ \033[m "
echo -e "\033[36;1m >>>> Figuras em:\033[m "
echo -e "\033[33;1m ${obsRadi_bias_figu}/ \033[m "
echo ""

exit 0
