sexta-feira, 11 de dezembro de 2015

Dica: Ajuste de curvas utilizando Python script - Parte I: visão geral e exemplos

Olá a todos,

Nesta dica vou ensinar como fazer ajustes de curvas no SciDAVis utilizando scripts em python.
Antes de começarmos, vale lembrar que as primeiras coisas a serem feitas são:
- abrir uma nota no SciDAVis em Arquivo → Novo → Nova nota/script;
- alterar a linguagem de programação para python em Programação → Linguagem de programação (script) → escolha Python e de um OK.

Uma vez que esteja tudo configurado, podemos começar a trabalhar.

De um modo geral, todos os ajustes de curva seguem a sintaxe:

TipoDeAjuste( camada, curva)

Os tipos de ajustes disponíveis para serem utilizados com scripts em python são:
  • LinearFit( camada, curva) - ajuste linear
  • PolynomialFit( camada, curva, ordem) - ajuste polinomial
  • ExponentialFit( camada, curva) - ajuste exponencial
  • TwoExpFit( camada, curva) - ajuste com dois crescimentos/decaimentos exponenciais
  • ThreeExpFit( camada, curva) - ajuste com três crescimentos/decaimentos exponenciais
  • GaussFit( camada, curva) - ajuste gaussiano com fórmula "y0+A*sqrt(2/PI)/w*exp(-2*((x-xc)/w)^2)"
  • GaussAmpFit( camada, curva) - ajuste gaussiano com fórmula "y0+A*exp(-(x-xc)^2/(2*w^2))"
  • LorentzFit( camada,curva) - ajuste lorentziano
  • SigmoidalFit( camada, curva) - ajuste sigmoidal
  • NonLinearFit( camada, curva) - ajuste não linear (pode ser utilizada qualquer fórmula que se desejar)
  • PluginFit( camada, curva) - ajuste utilizando curva definida em um plugin

A seguir vamos dar dois exemplos de como utilizar ajustes. Nos dois casos vamos supor que tenhamos um gráfico, nomeado como Gráfico1, com uma curva rotulada de Tabela1_2 (substitua estes termos conforme o seu caso). Vamos supor também que a curva Tabela1_2 no Gráfico1 seja aproximadamente linear (você pode criar uma curva linear facilmente, não é?).

Exemplo 1: ajuste linear
Na nota aberta, digite as seguintes linhas (pode ignorar o que estiver depois de um #) 

g = graph("Gráfico1") # para que o Gráfico1 seja acessado na nota
camada =  g.activeLayer() # para acessar a camada ativa do Gráfico1 *
f = LinearFit(camada,"Tabela1_2") # definindo o ajuste como linear
f.fit() # para executar o ajuste

* supondo que a curva Tabela1_2 esteja nesta camada. Se estiver em outra camada, utilize layer(número da camada) no lugar de activeLayer()

Depois disto, execute a nota (tecle Ctrl + Shift + j) e você verá no Gráfico1 que o ajuste de curva foi efetuado com sucesso. Os resultados detalhados do ajuste podem ser vistos no Registro de resultados. Depois do próximo exemplo, diremos como acessar os resultados do ajuste na nota/script.

Exemplo 2: ajuste polinomial
Neste caso, vamos utilizar um ajuste polinomial de ordem 4, apenas como exemplo. Não é muito diferente do primeiro exemplo. Note que no lugar de LinearFit vamos utilizar PolynomialFit, com sua respectiva sintaxe:

g = graph("Gráfico1")
camada =  g.activeLayer()
f = PolynomialFit(camada,"Tabela1_2",4) # definindo o ajuste como polinomial, de ordem 4
f.fit()

Execute a nota (tecle Ctrl + Shift + j) e veja os resultados no Gráfico1 e no registro de resultados.
Bem simples. Não é mesmo?

Depois que um ajuste é executado, existem alguns resultados que podem ser acessados na nota/script. São os seguintes:
  • f.results() - retorna um vetor com os resultados dos parâmetros ajustados
  • f.errors() - retorna um vetor com as incertezas nos parâmetros ajustados
  • f.chiSquare() - retorna o valor do teste de Chi^2
  • f.numParameters() - retorna o número de parâmetros utilizados no ajuste
  • f.parametersTable("params") - abre uma tabela com os parâmetros ajustados e suas respectivas incertezas
  • f.covarianceMatrix("cov") - abre a matriz de covariância do ajuste
Note que, para que os resultados apareçam na própria nota você deve teclar Ctrl + Enter depois de algo como f.results().

Bom, espero que esta dica seja útil! Na próxima dica, mostrarei algumas outras curvas de ajuste e alguns controles a mais no script de ajuste.

Até mais!

quinta-feira, 10 de dezembro de 2015

Atualização disponível - SciDAVis 1.D9 para Linux, Mac e Windows

No dia 24/11/2015 foi lançada a versão 1.D9 do SciDAVis. Esta versão corrige alguns bugs, mas não traz nenhuma novidade para o usuário final. Os pacotes binários para Windows e Mac, e também o código fonte, estão disponíveis em http://sourceforge.net/projects/scidavis/files/SciDAVis/1.D9/. Vale dizer que, infelizmente, o suporte a sctipts em Python na versão para Windows não está funcionando desde a versão 1.D8.

Entre as versões 1.D8 e 1.D9 houveram mudanças na estrutura do código, de modo que praticamente todo o código fonte fosse colocado em uma biblioteca (libscidavis).
Além disto, o código fonte do programa passou a ser armazenado e desenvolvido no GitHub e o repositório SVN no SourceForge foi depreciado. O principal objetivo desta mudança é atrair novos desenvolvedores. Pois, desta forma, qualquer um que queira contribuir precisa apenas criar um fork do projeto, fazer suas alterações e enviá-las de volta via pull request.

Consegui compilar com sucesso a versão 1.D9 do SciDAVis no meu Slackware 14.1. Porém, não pretendo disponibilizar o pacote na minha página de pacotes do SciDAVis para Slackware neste momento. O motivo é que existe um bug relacionado ao não aparecimento dos ícones nesta versão. As figuras abaixo mostram como deveria ser (primeira) e como está na versão 1.D9 (segunda):
Aparentemente, este problema com os ícones afeta Windows (testado via wine) e Linux, mas não a versão para Mac. Se alguém tiver ideia de como resolver isto, por favor, avisem a mim [ou contribuam com o projeto :-) ].

Até mais...


terça-feira, 27 de janeiro de 2015

SciDAVis 1.D8 e estado atual do desenvolvimento

Antes tarde do que nunca - está disponível a versão 1.D8 do SciDAVis:
- Na página de download da versão 1.D8 estão disponíveis o código fonte, o instalador para Mac e a versão para Windows. NOTA: na versão para Windows o suporte a sctipts em Python não está disponível - por conta da dificuldade dos desenvolvedores em criar pacotes para Windows :-p (alguém se habilita?).
- Pacotes para Slackware (14.1 e 14.1-64bits) também estão disponíveis em minha página de downloads no Google sites.
- A maioria das outras distribuições Linux já tem esta versão disponível em seus repositórios.

Estado atual do desenvolvimento:
O que vem sendo feito atualmente é manutenção e correção de bugs. Algumas mudanças nos sctipts de compilação e na estrutura de diretórios também foram feitas. Foi iniciado o port para a versão 6 do Qwt.
O código está evoluindo devagar. São apenas dois desenvolvedores contribuindo com código. Recentemente, um terceiro programador parece ter se juntado ao time, mas ainda não começou a escrever código.

Como eu já disse anteriormente:
"Na minha opinião, a manutenção deste software (o SciDAVis) é muito importante, pois ele é uma das melhores alternativas livres,  senão a melhor, aos softwares comerciais de análises de dados científicos (sabemos que me refiro ao Origin® ;-D)."
Muitas universidades (no Brasil e no mundo) já adotaram o SciDAVis como ferramenta para análise de dados científicos. Algumas delas adotaram como ferramenta de ensino: por não poderem pagar pelo Origin® ou outro similar, ou como alternativa mesmo.
Por estas coisas, gostaria de ver mais desenvolvedores se juntando ao time, fazendo este projeto evoluir e se consolidar como um dos melhores softwares da categoria.
Potencial existe. Espaço tem. Só precisamos de pessoas com boa vontade para que as coisas aconteçam.

Até mais.