Panoply: Software de Visualização de Dados em Ponto de Grade

O Panoply (pronuncia-se PA.NO.PLI) é um poderoso e completo software de visualização de dados geofísicos (meteorológicos e oceanográficos) em ponto de grade, capaz de ler e plotar dados nos formatos netCDF, HDF e GRIB desenvolvido pela NASA. Assim como outros softwares do gênero (GrADS, FERRET, NCVIEW, Metview e outros), ele decodifica as informações dos dados e, por meio de uma lista, permite o usuário selecionar as variáveis que quer visualizar e as plota na projeção desejada. Diferentemente do GrADS, por exemplo, ele possui uma interface gráfica simples, sendo – neste aspecto, semelhante ao Metview. Neste post, vou mostrar como fazer a instalação do Panoply no Mac OS X e um exemplo de uso.

Obtendo o pacote de instalação do Panoply

O pacote de instalação para Mac do Panoply pode ser obtido na página do projeto:

Instalação do Panoply no Mac OS X

Abra o arquivo .dmg baixado no seu computador e arraste a pasta “PanoplyOSX” para a pasta Applications (ou qualquer outra pasta que você queira):

Instalação do Panoply no Mac OS X.

Instalação do Panoply no Mac OS X.

Depois disso, você terá uma cópia do Panoply instalada no seu Mac OS X e pronta para uso. Mas antes de abrir o programa pela promeira vez, vamos criar uma aliase do app principal para fora da pasta PanoplyOSX – assim mantém-se as coisas mais organizadas e no seu devido lugar (isso pode evitar que o programa principal deixe de encontrar os arquivos auxiliares de mapas, projeções etc):

Criando uma aliase do programa principal (Panoply.app) e colocando-o na pasta Applications.

Criando uma aliase do programa principal (Panoply.app) e colocando-o na pasta Applications.

Utilizando o Panoply

Para abrir e utilizar o Panoply, é trivial: basta dar um duplo clique no executável principal (abra a aliase que você criou), ou pesquise por ele no Spotlight do Mac OS X, ou mesmo no Launchpad.

Quando se abre o Panoply, uma splash screen é mostrada e, logo em seguida, é perguntado ao usuário qual arquivo abrir:

Splash screen e file browser do Panoply.

Splash screen e file browser do Panoply.

No exemplo que vou mostrar, vou abrir um arquivo netCDF de umidade específica da Reanálise 2 do NCEP, recortado para o domínio da América do Sul:

Abrindo um arquivo netCDF no Panoply.

Abrindo um arquivo netCDF no Panoply.

Observe na figura acima, que no lado esquerdo da interface gráfica do Panoply, é mostrado o conteúdo do arquivo. As camadas contidas nesse arquivo são: latitudes, níveis, longitudes, variável(is) e tempo. Já no lado direito, são mostradas as informações mais detalhadas sobre o conteúdo do arquivo netCDF, tal como se estivéssemos utilizando o comando ncdump.

Para plotar o campo de umidade específica desse arquivo, basta selecionar (clicar sobre) o nome da variável – neste caso, “shum” (de specific humidity) e clicar no botão “Create Plot”. Fazendo-se isso, será perguntado ao usuário qual o tipo de plot se deseja criar:  Tempo X Latitude ou Latitude X Longitude. A escolha aqui (para efeito de ilustração, foi Lat/Lon, assim podemos ver um campo bidimensional da variável):

Criando um plot espacial no Panoply.

Criando um plot espacial no Panoply.

Screen Shot 2013-02-17 at 4.46.13 PM

Na figura acima, a imagem na parte de baixo é a janela de plotagem do Panoply. Nela, através das diversas abas, é possível ajustar os parâmetros de plotagem. Pode-se modificar, entre outros, as cores, a posição da barra de legendas, a projeção, os títulos dos eixos e legenda, a data do campo plotado, a escala, incluir linhas de contorno etc. Inclusive, dá para criar animações!

Depois de instalar o Panoply, plote um campo espacial, modifique os parâmetros, faça um Diagrama de Hovmöller (para isso, escolha a opção Latitude X Tempo). O programa é bastante interessante e rápido, principalmente porque não é necessário programar suas ações!

Anúncios

Baixe a reanálise ERA Interim do ECMWF utilizando um script Perl

Recentemente precisei baixar alguns dados da Renálise do ERA Interim para estudo. No site, é oferecido um formulário onde pode-se selecionar o período, variáveis, níveis etc. Com essa seleção, um script server-side processa o seu pedido, gera um arquivo em GRIB e, dependendo do seu pedido, converte o GRIB em NETCDF. Perfeito! Mas e se você quiser baixar tudo? e uma quantidade colossal de dados e com certeza vai demandar uma quantidade colossal de espaço e tempo. Portanto, vamos considerar que você queira baixar um período grande, contendo alguns anos, níveis e variáveis, algo suficiente para que você queira e precise fazer um script.

O primeiro passo, portanto, é entrar em http://data-portal.ecmwf.int/data/d/interim_daily/ e depois clicar no link indicado na imagem abaixo:

Você será redirecionado para uma nova página contendo um script simples em Python e outras duas opções em Perl, que são as opções que nós iremos usar.

Os scripts que nos interessam estão mais ao final da página. Mas para utilizá-los, nós necessitaremos de alguns softwares instalados no computador. Vamos precisar do Perl (uma linguagem de programação em scripts modular) e de dois módulos básicos: o libdate-calc-perl e o DataServer do ECMWF que deve ser baixado no link indicado pelo retângulo vermelho da imagem acima.

Para instalar estes pacotes no seu Linux (vou considerar o Ubuntu), faça o seguinte:

1) Instale o Perl:

$ sudo apt-get install perl

2) Instale o módulo libdate-calc-perl:

$ sudo apt-get install libdate-calc-perl

3) Baixe o módulo DataServer do ECMWF em http://tigge.ecmwf.int/ECMWF_DataServer.tar

4) Desempacote o arquivo ECMWF_DataServer.tar na pasta /usr/share/perl/<versao_do_seu_perl>:

$ sudo tar -xvf ECMWF_DataServer.tar -C /usr/share/perl/<versao_do_seu_perl>

Se você estiver utilizando o Mac OS X (vou considerar o Lion), você precisará apenas instalar o módulo DataServer do ECMWF na pasta /System/Library/Perl/5.12:

$ sudo tar -xvf ECMWF_DataServer.tar -C /System/Library/Perl/5.12

Feito isto, copie o segundo script em Perl (é o último script da página) da página que você abriu (a página que contém os scripts) e cole em um arquivo vazio no seu computador:

#!/usr/bin/perl -Ipath_to_where_ECMWF::DataServer_is_installed
use ECMWF::DataServer;
use Date::Calc qw(Add_Delta_Days Delta_Days);
use strict;

my $client = ECMWF::DataServer->new(
    portal => 'http://data-portal.ecmwf.int/data/d/dataserver/',
    token  => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    email  => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
);

# This is the start date. Modify as required
my ($year, $month, $day) = (2009, 01, 01);
# This is the end date. Modify as required
my @enddate = (2009, 01, 02);

while (Delta_Days(@date, @enddate) >= 0) {

  my $date = sprintf("%d-%02d-%02d", $year, $month, $day);

  $client->retrieve( 
    dataset  => "interim_daily",
    step     => "0",
    levtype  => "pl",
    type     => "an",
    param    => "130.128",
    levelist => "500/1000",
    area     => "60/-120/30/-60",
    date     => "$date",
    time     => "00/12",
    target   => "data_${date}.grib",
    );

  # move to next day
  ($year, $month, $day) = Add_Delta_Days($year, $month, $day, 1);

}

Para este script, devem ser observadas as sequências ‘xxxxxx…’ e ‘yyyyy…’ para as variáveis “token” e “email”, respectivamente. Estas são variáveis utilizadas pelo módulo DataServer do ECMWF para autenticar a sua conexão ao servidor do centro. Quando você abrir esta página, será gerada automaticamente um token (uma espécie de senha) específica para o email que você forneceu anteriormente. Portanto, esses ‘yyyyy…’ e esses ‘xxxxx…’ não aparecem na página, mas sim o seu email (que você de ter informado) e um token gerado automaticamente. Uma outra informação importante, é que para executar corretamente o script, você precisar corrigir uma falha. Veja:

$ ./script_perl.pl
Global symbol "@date" requires explicit package name at ./script_perl.pl line 17.
Execution of ./script_perl.pl aborted due to compilation errors.

Ou seja, a variável “@date” é usada, mas não está declarada. Então, para consertarmos isso, basta acrescentar a linha em negrito abaixo dentro do seu script:

my ($year, $month, $day) = (2009, 01, 01);
my @date = (2009, 01, 01);

Com isso, será possível executar novamente o script e baixar os seus dados. Você pode alterar o script de acordo com as suas necessidades, bastando seguir a sintaxe do MARS, que é um programa com linguagem própria criado para coletar os dados dentro do banco de dados do ECMWF.

O script corrigido fica assim:

#!/usr/bin/perl -Ipath_to_where_ECMWF::DataServer_is_installed
use ECMWF::DataServer;
use Date::Calc qw(Add_Delta_Days Delta_Days);
use strict;

my $client = ECMWF::DataServer->new(
    portal => 'http://data-portal.ecmwf.int/data/d/dataserver/',
    token  => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    email  => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
);

# This is the start date. Modify as required
my ($year, $month, $day) = (2009, 01, 01);
my @date = (2009, 01, 01);
# This is the end date. Modify as required
my @enddate = (2009, 01, 02);

while (Delta_Days(@date, @enddate) >= 0) {

  my $date = sprintf("%d-%02d-%02d", $year, $month, $day);

  $client->retrieve( 
    dataset  => "interim_daily",
    step     => "0",
    levtype  => "pl",
    type     => "an",
    param    => "130.128",
    levelist => "500/1000",
    area     => "60/-120/30/-60",
    date     => "$date",
    time     => "00/12",
    target   => "data_${date}.grib",
    );

  # move to next day
  ($year, $month, $day) = Add_Delta_Days($year, $month, $day, 1);

}

Com tudo corrigido, o script mostra as seguintes saídas:

(Clique para ampliar)

Em meus testes, notei que o servidor do ECMWF é um pouco instável, portanto você poderá experimentar alguns “Connection Timeout”, por parte do módulo DataServer do ECMWF, responsável pela autenticação da conexão entre o seu computador e o servidor do ECMWF.

500 read timeout at ECMWF/DataServer.pm line 35.

É isso!