Documentação Callisto Linux!

Visão Geral

O espectrômetro Callisto <http://e-callisto.org> é um receptor heteródino de baixo custo, desenvolvido na ETH Zurich em 2006 comvistas ao estudo da atividade solar na frequência de 60 - 860 MHz.

Callisto pode ser acoplado a uma unidade de calibração, com relays controlados por um arduino uno.

A introdução de osciladores pode fazer com que a frequência original de operação do Callisto seja alterada. Para o radiotelescópio BINGO um oscilador LO 1760MHz foi utilizado para obter uma saída IF = LO - RF na faixa de 900 a 1700 MHz.

Callisto vem equipado com um programa para o controle do espectrômetro e um programa para controle da unidade de calibração, ambos na forma de binários para windows.

O programa de controle do espectrômetro tem uma versão para sistemas Linux, em particular um pacote deb para instalação em instalações da família Debian/Ubuntu/Raspian.

Este pacote fornece operações em uma camada de controle deste binário juntamente com a agregação de controles para a unidade de calibração.

O espectrômetro callisto se conecta a um computador controlador pela USB.

A unidade de calibração é controlada por um arduino que se conecta com um computador controlador pela porta serial ou por meio de um adaptador serial/USB.

O binário callisto controla o espectrômetro e interage via protocolo TCP.

O programa callisto.py controla o binário callisto e a unidade de calibração, por meio dos protocolos serial e tcp.

Um serviço systemd callisto.service e trabalhos do crontab automatizam as operações destes dois programas e sua sinergia.

O diagrama geral das relações entre os sistemas é conforme indicado na figura:

Diagrama de Relações

Instalação

Verifique previamente os endereços das portas USB do callisto e da unidade de calibração. Em sistemas Linux, usualmente, o arduino se reportará como uma porta /dev/ttyACM? e a porta USB do callisto deve ser /dev/ttyUSB?. Os padrões dos arquivos de configuração são para as portas com número 0. Se necessário, altere em todos os arquivos de configuração callisto_MODE.cfg o valor correto para o dispositivo.

É recomendável verificar linha por linha o script de instalação e executar as operações individualmente. Se você estiver superconfiante, faça sudo ./install.sh, mas você foi avisado.

$ git clone https://github.com/lbarosi/callisto.git
$ cd callisto
$ sudo python -m pip install -r requirements.txt
$ # sudo ./install.sh

Uso em linha de comando

  • Calibração em todos os modos (COLD, WARM, HOT), com gravação de spectral overview e de arquivo FIT para cada modo:

$ python callisto.py
  • Parada de qualquer serviço ou programa callisto em funcionamento com cancelamento de gravação de arquivos em andamento:

$ python callisto.py --action stop
$ python callisto.py -a stop
  • Iniciando servico systemd:

$ python callisto.py --action start-service
$ python callisto.py -a start-service
  • Fazendo uma medição spectral overview:

$ python callisto.py --action overview --mode HOT
$ python callisto.py -a overview -m WARM
  • Fazendo uma medição FIT:

$ python callisto.py --action start --mode SKY
$ python callisto.py -a start -m COLD

Uso

  1. Crie uma instância de Unidade de Calibraração e uma instância de Callisto para operar, passando a informação da unidade de calibração para a classe callisto.

import callisto
cal_unit = callisto.CalibrationUnit(tty="/dev/ttyACM0")
Callisto = callisto.Callisto(cal_unit=cal_unit)
  1. Fazendo um Spectral Overview:

Callisto.record_ovs("COLD")
  1. Medição manual FIT:

    Os parâmetros para a medida em um arquivo FIT são definidos no arquivo de configuração que estiver carregado junto ao binário callisto. Tipicamente, a medição durará 15 minutos e será realizada em acordo com o arquivo de frequências padrão. Se nada foi alterado, isto significa que serão realizadas medidas em 400 canais, 2 vezes por segundo. Veja a documentação do espectrômetro callisto para mais detalhes.

Callisto.record_fits("SKY")
  1. Vizualização rápida dos dados:

    1. OVS

    import pandas as pd
    import matplotlib.pyplot as plt
    path = "/opt/callisto/Ovs/NOMEDOARQUIVO.prn"
    df = pd.read_table(path, sep=".")
    df.columns = ["Frequency[MHz]", "S[mV]"]
    LO = 1760 #oscilador local para BINGO
    df["Frequency[MHz]"] = LO - df["Frequency[MHz]"]
    
    fig, ax = plt.subplots(figsize = (16,6))
    df.plot("Frequency[MHz]", "S[mV]", ax = ax)
    plt.show();
    
    1. FIT

    import pandas as pd
    from astropy.io import fits
    path = "/opt/callisto/data/NOMEDOARQUIVO.fit"
    hdul = fits_open(path)
    df = pd.DataFrame(hdul)
    fig, ax = plt.subplots(figsize = (16,6))
    plt.imshow(df)
    plt.show();
    

Documentação do Módulo

Pacote de controle do espectrômetro Callisto e de sua unidade de calibração em sistemas tipo Linux. Depende do binário callisto da distribuição Linux e utiliza conexão TCP e conexão serial.

@Author: Luciano Barosi @Date: 15.04.2022 @Links: https://github.com/lbarosi/callisto

class callisto.CalibrationUnit(tty: str = '/dev/ttyACM0', baudrate: int = 9600, bytesize=8, parity='N', stopbits=1, timeout: int = 1, version: str = 'Version: ETHZ Arduino_PrototypeV85.ino; 2016-08-17/cm')

Controla o arduino da unidade de calibração do callisto via porta serial. Os parâmetros são muito customizáveis.

Parâmetros
  • tty (str) – dispositivo serial do sistema. Defaults to «/dev/ttyACM0».

  • baudrate (int) – Defaults to 9600.

  • bytesize (type) – Defaults to serial.EIGHTBITS.

  • parity (type) – Defaults to serial.PARITY_NONE.

  • stopbits (type) – Defaults to serial.STOPBITS_ONE.

  • timeout (int) – tempo de resposta do arduino. Defaults to 1.

  • version (str) – string que representa versã do arduino para verificar se programa esta falando com arduino correro. Defaults to I_AM_ARDUINO.

check()

Verifica se dispositivo responde a informação de sua versão corretamente.

connect()

Inicia conexão serial.

listen()

Ouve resposta da porta serial.

send_command(command)

Envia comando para a porta serial e acompanha sua execução e código de resposta.

set_relay(mode)

Define estado do relay SKY|COLD|WARM|HOT

class callisto.Callisto(IP: Optional[str] = None, PORT: int = 6789, fits_command: str = 'start', ovs_command: str = 'overview', stop_command: str = 'stop', quit_command: str = 'quit', daemon: str = 'callisto.service', executable: str = 'callisto', cal_unit: Optional[str] = None)

Representa um objeto Callisto espéctrôpmetro e implementa todos os métodos necessários para garantir sua operação.

Parâmetros
  • IP (str) – Endereço IP da máquina conectada ao Callisto. Defaults to None.

  • PORT (int) – Número da PORT para conexão TCP. Defaults to 6789.

  • fits_command (str) – descrição do comando utilizado pelo binário calllisto para modo de medida FIT. Defaults to «start».

  • ovs_command (str) – descrição do comando utilizado pelo binário para realizar medida em modo overview. Defaults to «overview».

  • stop_command (str) – descrição do comando utilizado pelo binário para parar a observação. Defaults to «stop».

  • quit_command (str) – descrição do comando utilizado pelo binário para desconectar da porta TCP. Defaults to «quit».

  • daemon (str) – nome do serviço systemd. Defaults to «callisto.service».

  • executable (str) – nome do binário controlador. Defaults to «callisto».

  • cal_unit (CalibrationUnit) – objeto callisto.CallibrationUnit representando a unidade de calibração e os métodos necessários para operá-la. Defaults to None.

_calibrate(mode: str)

Método privado realiza operações necessárias para calibração para cada módulo separadamente.

Inicia binário, carrega configurações do modo, faz observação em modo overview e observação em modo FIT.

Parâmetros

mode (str) – (SKY|COLD|WARM|HOT).

calibrate(timeout=1)

Realiza calibração completa com os modos de operação COLD, WARM e HOT, salvando PRN e FIT nos diretórios especificados nos atributos da classe.

Ao terminar a calibração inicia o daemon de sistema.

connect(timeout: float = 2) socket

Cria socket para conexão TCP com o binário callisto.

Parâmetros

timeout (float) – tempo padrão para aguardar resposta, em segundos. Defaults to 2.

Retorno

Socket para comunicação aberto.

Tipo de retorno

socket.socket

do(command: Optional[str] = None)

Envia comando via TCP para o binário callisto se este estiver rodando.

Seve ser utilizado após o comando run que de fato inicia o binário e carrega arquivo de configuração apropriado.

Parâmetros

command (str) – comando TCP a ser enviado. Opções válidas: (start|stop|quit|overview).

get_PID()

Determina o número dos processos callisto rodando na máquina local, emulando o comportamento de ps aux |grep callisto.

Retorno

lista contendo números dos procesos ou lista vazia se nenhum processo encontrado.

Tipo de retorno

list

get_ip()

Obtem IP da máquina local ao tentar realizar uma conexão com socket. Se resultado não é bem sucedido retorna o IP padrão do localhost 127.0.0.1.

is_running(timeout: float = 5)

Cria loop bloqueando execução enquanto callisto estiver rodando.

Parâmetros

timeout (float) – tempo máximo em secundos para aguardar execução do programa. Defaults to 5.

record_fits(mode, time=1200)

Realiza medida manual única, tipo FIT no modo especificado e vigia sistema de arquivos para verificar sucesso.

Parâmetros
  • mode (str) – modo válido para os relays da unidade calibradora (SKY|COLD|WARM|HOT).

  • time (float) – tempo para esperar a criação de um arquivo PRN no caminho padrão da classe. Defaults to 1200.

record_ovs(mode: str, time: float = 180)

Realiza medida manual única, tipo spectral overview no modo especificado e vigia sistema de arquivos para verificar sucesso.

Parâmetros
  • mode (str) – modo válido para os relays da unidade calibradora (SKY|COLD|WARM|HOT).

  • time (float) – tempo para esperar a criação de um arquivo PRN no caminho padrão da classe. Defaults to 180.

run(mode: str)

Operação manual do espectrômetro callisto no modo epecificado no argumento.

Para qualquer processo que estiver rodando, inicia novo processo com arquivo de configuração adequado ao modo (SKY|COLD|WARM|HOT) mas não executa nenhuma ação adicional, deixando sistema pronto para iniciar medida.

Utiliza função run_command para executyar comando shell e retorna STDOUT, STDERR.

run_daemon(manager: str = 'sudo /bin/systemctl', action: str = 'start')

Roda o serviço systemd com a ação especificada no argument.

A execução do programa é realizada em thread separada e colocada em background, sobrevivendo a execução do script.

Parâmetros
  • manager (str) – caminho completo to controlador do daemon. Defaults to «sudo /bin/systemctl».

  • action (str) – Ação a ser executada, dentre as opções disponíveis em processos daemon: (start|stop|reload). Defaults to «start».

stop()

Para o daemon callisto se este estiver rodando e envia SIGTERM para todas as instâncias do binário que estiverem rodando. Funciona apenas se regras sudoer adequadas tiverem sido implementadas para o comando sudo pkill callisto.

class callisto.Handler(pattern: Optional[str] = None)

Implementa o gerenciador de eventos de arquivos utilizado em conjunto com o file watchdog.

Para o módulo callisto só é necessário implementar o método que lida com a criação de arquivos, encarregada de acompanhar a execução das operações do binário callisto e permitir a verificação do sucesso das operações.

Parâmetros

pattern (str) – máscara para observar os arquivos pattern. Padrão é None.

created

determina se arquivo satisfazendo a máscara foi ou não criado.

Type

bool

on_created(event)

Chamada quando um arquivo satisfazendo a máscara é criado.

Parâmetros

event (DirCreatedEvent or FileCreatedEvent) – Evento representando a criação de arquivo ou diretório.

class callisto.WatchFolder(path: Optional[str] = None, recursive: bool = False, pattern: Optional[str] = None, timeout: Optional[float] = None)

Monitoramento contínuo de eventos de arquivos e diretórios baseado no pacote watchdog.

Parâmetros
  • path (str) – caminho completo onde observar os arquivos. Defaults to None.

  • recursive (bool) – Defaults to False.

  • pattern (str) – máscara para vigiar arquivos. Defaults to None.

  • timeout (float) – timeout em segundos para manter vigiando o caminho indicado. Defaults to None.

observer

observer.

Type

watchdog.observers

run()

Inicia observação do caminho indicado.

Vigia a alteração (criação, modificação, deleção de arquivos ou diretórios) e manipula conforme o handler o evento que ocorreu.

callisto.main()

Roda programa principal do módulo.

callisto.run_command(command: str) tuple[str, str]

Executa comando shell passado como argumento utilizando biblioteca subprocess.

Função reporta erro no arquivo de log se houver algum erro que não represente a informação do binário callisto de que não detectou o arquivo scheduler, uma vez que este não é um erro e apenas uma informação do status desejado.

Parâmetros

command (str) – string de comando escrita da mesma forma que se escreveria em linha de comando.

Retorno

saída padrão e código de erro informado para o comando executado.

Tipo de retorno

tuple[str, str]

callisto.run_detached(command: str) Process

Roda o comando indicado em modo background, liberando a execução do resto do programa.

Parâmetros

command (str) – string de comando escrita da mesma forma que se escreveria em linha de comando.

Retorno

processo em execução.

Tipo de retorno

multiprocessing.Process

Diagrama de Relações Entre Métodos e Classes

Diagrama de Relações

Descrição dos Arquivos

Indices and tables