#---------------------------------------------------------------------------#
#           Group on Data Assimilation Development -GDAD/CPTEC/INPE         #
#---------------------------------------------------------------------------#
#BOP
#
# !ISCRIPT: plota_omf_oma.sh
#
# !DESCRIPTON: Este script é utilizado para plotar a serie temporal do OMF e OMA
#
#              Para a produção deste grafico são utilizados os
#              seguintes arquivos [ no formato ascii ]:
#
#                 * omfgs_%obstype.dat
#                 * omanl_%obstype.dat
#
#              Cada arquivo possui a informação correspondente as
#              variaveis convencionais processadas pelo GSI, sendo a
#              primeira coluna referente a data do calculo do omf/oma,
#              as demais são referentes aos nives de atmosfericos.
#              Os valores são médias global do omf e oma.
#              Os tipos de observação processados são os seguintes:
#
#                 * SST : Temperatura da Superfície do Mar
#                 * PS  : Pressão à Superfície
#                 * PW  : Água Precipitável
#                 * UV  : Vento
#                 * T   : Temperatura do Ar
#                 * Q   : Umidade Específica
#
#
#\\
#\\

#
# !INTERFACE:
#

VarPlot=${1}     # Variavel a ser plotata 
DataLev=${2}     # Nivel a ser plotado
DataInicial=${3}
DataFinal=${4}
ReportType=${5}
hora=${6}
PathInp=${7}
PathOut=${8}
Inclx=${9}

#
#
# !REVISION HISTORY:
#  17 May 2012 - J. G. de Mattos - Initial Version
#
#
#
# !SEE ALSO:
#   
#   diag_gsi_conf.f90 : programa fortran que pos-processa as
#                       informações de diagnostico do GSI.
#
#EOP
#---------------------------------------------------------------------------//
#BOC

#
# BEGIN: Configuração
#

#
# Carregando Configuracoes
# Usa a variavel lev

source ${stat_util}/conf/config.sh 

#
#Nomes Para titulo e Arquivo de Saida
#

NTitle[1]="Temp. da Sup. do Mar"
NTitle[2]="Pressão em Superfície"
NTitle[3]="Água Precipitável"
NTitle[4]="Vento"
NTitle[5]="Temperatura do ar"
NTitle[6]="Umidade Específica"
NTitle[7]="Radiocultação GPS"

varname[1]="sst"
varname[2]="ps"
varname[3]="pw"
varname[4]="uv"
varname[5]="t"
varname[6]="q"
varname[7]="gps"

#
# Pegando Ano, Mes, dia e Hora
#

anoi=${DataInicial:0:4}
mesi=${DataInicial:4:2}
diai=${DataInicial:6:2}
hori=${DataInicial:8:2}

anof=${DataFinal:0:4}
mesf=${DataFinal:4:2}
diaf=${DataFinal:6:2}
horf=${DataFinal:8:2}

#
# Titulo dos eixos
#

TitleXAxis="Data"
TitleYAxis="${NTitle[$VarPlot]}"
rodape=`grep -i ${ReportType} ${GStatCfg}/codigo_prepbufr_* | awk -F";" '{print $2}' `


#
# Intervalos pre-definidos
#

minval[1]=200; maxval[1]=330   # sst [K]
minval[2]=500; maxval[2]=1100  # ps  [hPa]
minval[3]=200; maxval[3]=330   # pw  []
minval[4]=-20; maxval[4]=100   # uv  []
minval[5]=150; maxval[5]=330   # t   []
minval[6]=000; maxval[6]=020   # q   []
minval[7]=000; maxval[7]=350   # gps []

#
# Arquivos de entrada/saida
#
RT=`printf "%4.4d" ${ReportType}`
OMFInp="${PathInp}/omfgs_${varname[$VarPlot]}.${RT}_${hora}.dat"
OMAInp="${PathInp}/omanl_${varname[$VarPlot]}.${RT}_${hora}.dat"
FNameOut="${PathOut}/omf_oma_${varname[$VarPlot]}_${lev[${DataLev}]}_${DataInicial}_${DataFinal}.${RT}_${hora}"

#
# Removendo linhas duplicadas caso existam
#

sort -u ${OMFInp} -o .omf
sort -u ${OMAInp} -o .oma

minf=$(awk '{for(x=2;x<=NF;x++){if($x != -999.900){a[++y]=$x}}}END{c=asort(a);print a[1]}' $OMFInp)
maxf=$(awk '{for(x=2;x<=NF;x++){if($x != -999.900){a[++y]=$x}}}END{c=asort(a);print a[c]}' $OMFInp)

mina=$(awk '{for(x=2;x<=NF;x++){if($x != -999.900){a[++y]=$x}}}END{c=asort(a);print a[1]}' $OMAInp)
maxa=$(awk '{for(x=2;x<=NF;x++){if($x != -999.900){a[++y]=$x}}}END{c=asort(a);print a[c]}' $OMAInp)

if $(awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$mina" "$minf" ); then  mina=$minf ; fi
if $(awk 'BEGIN{exit ARGV[1]>ARGV[2]}' "$maxa" "$maxf" ); then  maxa=$maxf ; fi

yrg=0
if [ "$mina" = "$maxa" ]; then
 (( mina = mina - 1 ))
 (( maxa = maxa + 1 ))
 yrg=1
fi

echo " Min: " $mina
echo " Max: " $maxa

#
# Iniciando gnuplot
#

gnuplot << EOF

#
# Definindo titulo
#

set title "${NTitle[$VarPlot]} em ${lev[${DataLev}]} hPa \n \
Periodo: ${diai}/${mesi}/${anoi} até ${diaf}/${mesf}/${anof} válido para as ${hora}UTC"
set label 1 at graph 0.5, graph 0.04 "${rodape}" center font ",8"

#
# Identificando os Eixos
#

set xlabel "${TitleXAxis}"
set ylabel "${TitleYAxis}"

#
# definindo ranges e formato do grafico
#

#set xrange[${minval[$VarPlot]}:${maxval[$VarPlot]}]

#
# adicionando background
#

set object 2 rect from graph 0, graph 0 to graph 1, graph 1 behind
set object 2 rect fc rgb "#FFF9D9" fillstyle solid 1.0
set style fill pattern 2 bo 1

#
# adicionando grade
#

#EPV
#set grid lc rgb "black" front

#
# Definir o eixo x como time:
# timefmt: formato da data de entrada
# format x: formato da plotagem no grafico
#

set xdata time
set timefmt "%Y%m%d%H"
set format x "%d %b\n%H Z"
set xrange ["${DataInicial}":"${DataFinal}"]

#
# Xtics ==> Inicio:incr:Final
# Inicio: Data Inicial da plotagem
# Final: Data Final da plotagem
# incr: incremento em segundos
#


set encoding utf8
set term postscript enhanced color
set output "${FNameOut}.eps"


set xtics "${DataInicial}",${Inclx},"${DataFinal}"
#set xtics "${DataInicial}",86400,"${DataFinal}"

set yrange [$mina:$maxa]

plot  ".omf" u 1:abs($((DataLev+1))) w l lw 7 lc rgb"red" title 'OMF',\
".oma" u 1:abs($((DataLev+1))) w l lw 7 lc rgb"blue" title 'OMA'

#
# saindo
#

exit

EOF
rm -fr .omf .oma
convert -rotate 90 -density 100 ${FNameOut}.eps -flatten ${FNameOut}.png
#convert -rotate 90 -density 100 ${FNameOut}.eps -flatten tmp.png
#/bin/bash ../bin/autotrim tmp.png ${FNameOut}.png
rm -fr ${FNameOut}.eps

