quinta-feira, 27 de julho de 2017

Dica: Use a dupla SciDAVis + python para carregamento dinâmico de dados

A ideia desta dica surgiu a partir de uma pergunta feita no repositório do SciDAVis no GitHub [1].
English version is after the links.

A questão foi a seguinte: é possível utilizar o SciDAVis para carregar dados dinamicamente em uma tabela, em determinados intervalos de tempo, e atualizá-los em um gráfico?
E a resposta é simples: sim, através de scripts em python no SciDAVis. Porém, infelizmente, só é possível utilizar scripts em python no SciDAVis nas versões disponíveis para Linux (ao menos na maioria das distribuições) e Mac, ou em versões antigas para Windows (≤ 1.D5), conforme já foi noticiado neste blog [2].
Então, para os felizes usuários de Linux e Mac que tem o suporte a scripts em python habilitado, segue um script com um exemplo de como carregar dados de forma dinâmica no SciDAVis, de modo que eles sejam importados para uma tabela e atualizados em um gráfico:
import time
import os
t=newTable("DynamicTable") #Tabela onde os dados serão importados
file="/home/fellype/file.dat" #Caminho para o arquivo com os dados
modTime0=os.path.getmtime(file) # *Obs1
mod="True"
n=1 #
*Obs2
while (mod == "True"):
 t.importASCII(file," ",0,False,False,True,False) # *Obs3
 if (n == 1):
  g=plot(t,"2",0) # Plotando os dados da coluna 2 da tabela t
 time.sleep(20) #
*Obs4
 modTime=os.path.getmtime(file)
 if (modTime == modTime0):
  mod="False"
 else:
  modTime0=os.path.getmtime(file)
  n=2

Com o script acima, se o arquivo "/home/fellype/file.dat" for modificado dentro de um intervalo de 20 segundos, os dados na tabela "DynamicTable" serão atualizados, assim como o gráfico "g".
*Obs1: Obtém dados de quando o arquivo foi modificado pela última vez.
*Obs2: Usado para impedir que um novo gráfico seja criado a cada vez que o arquivo de dados for modificado.*Obs3: A sintaxe da função importASCII é: importASCII(file,"separador de colunas", ignore=0, renameCols=False, stripSpaces=False, simplifySpace=True, newTable=False). Consulte o manual [3] para mais informações sobre o uso de python no SciDAVis.*Obs4: A unidade de tempo na função time.sleep() é em segundos. Faça as contas para converter em minutos, horas, etc..., conforme a sua necessidade.

Uma desvantagem de utilizar a função time.sleep() é que o seu projeto no SciDAVis ficará paralisado durante o intervalo de tempo que for determinado na função. Logo, se você quiser fazer outras coisas no SciDAVis enquanto o script é executado, terá que abrir outra janela e criar outro projeto.
Como não sou um expert no uso de python, acredito que este script possa ser melhorado. Logo, se vocês tiverem sugestões, fiquem à vontade para incrementá-lo e compartilhar com outros usuários.
Até mais.

Links:
[1] https://github.com/highperformancecoder/scidavis/issues/46
[2] http://scidavisbr.blogspot.com.br/2015/12/atualizacao-disponivel-scidavis-1d9.html
[3] https://highperformancecoder.github.io/scidavis-handbook/

________________________________________________________________________

English version

Tip: Using python scripts in SciDAVis to load data dynamically
Here is an example of how to load data dynamically in SciDAVis. The following script imports a file with the data, plot it and do an update in both every 20 seconds if the data file is modified:
import time
import os
t=newTable("DynamicTable")
file="/home/fellype/file.dat"  #change this path for your data file
modTime0=os.path.getmtime(file) # Obs1
mod="True"
n=1 # *Obs2
while (mod == "True"):
 t.importASCII(file," ",0,False,False,True,False) # *Obs3
 if (n == 1):
  g=plot(t,"2",0)
 time.sleep(20) # Obs4
 modTime=os.path.getmtime(file)
 if (modTime == modTime0):
  mod="False"
 else:
  modTime0=os.path.getmtime(file)
  n=2

*Obs1: get information of the latest modification in the file.
*Obs2: will be used to avoid the creation of a new graph for each modification in the file.

*Obs3: the syntax of importASCII is: importASCII(file,"column separator", ignore=0, renameCols=False, stripSpaces=False, simplifySpace=True, newTable=False). Take a look in the manual [3] for more information of how to use python in SciDAVis.
*Obs4: the time unit in time.sleep() function is seconds, and it will freeze the application during the selected time interval.
If you are an expert in python fell free to contribute with improvements for this script and to share your knowledge .
Best regards.



Nenhum comentário:

Postar um comentário