Você está na página 1de 20

UNIVERSIDADE DE SÃO PAULO

INSTITUTO DE FÍSICA DE SÃO CARLOS

DIEGO PROSPERI TURIBIO

Desenvolvimento de um plugin e um editor sensível à linguagem F para aplicação em


ressonância magnética

São Carlos
2023
DIEGO PROSPERI TURIBIO

Desenvolvimento de um plugin e um editor sensível à linguagem F para aplicação em


ressonância magnética

Trabalho de conclusão de curso apresentado ao


Instituto de Física de São Carlos da Universidade de
São Paulo para obtenção do título de Bacharel em
Física Computacional.
Orientador: Prof. Dr. Alberto Tannús – Universidade
de São Paulo.

São Carlos
2023

2
RESUMO

O Centro de Imagens e Espectroscopia in vivo por Ressonância Magnética (CIERMag) vem


desenvolvendo software em linguagem Python para programação de equipamentos de ressonância
magnética, visto que os softwares atuais são carentes de ferramentas para o desenvolvimento de
metodologias.

O objetivo deste trabalho foi criar um plugin - adição ou alteração de software que permitem a
personalização de programas de computador - que se acopla ao ambiente de desenvolvimento
integrado (IDE) - Spyder - com as ferramentas já desenvolvidas pelo time, e juntamente, criar um
editor sensível à linguagem F (linguagem para programação de Métodos de ressonância magnética
desenvolvida pelo CIERMag), além de um gerenciador de projetos e arquivos que também fará
parte do mesmo IDE.

Palavras-chave: Ressonância Magnética. Plugin. Ambiente de desenvolvimento integrado

3
1. INTRODUÇÃO
1.1. Contextualização
1.1.1. Ressonância Magnética

A ressonância magnética comumente é dividida em três grandes áreas complementares, a


Relaxometria por Ressonância Magnética, a Espectroscopia por Ressonância Magnética (ERM) e o
Imageamento por Ressonância Magnética (IRM).
Enquanto a ERM está mais ligada à medição de propriedades químicas dos tecidos, à áreas como
química, biologia e ciência dos materiais, a IRM teve seu desenvolvimento no ramo da medicina
produzindo imagens de tecidos moles do corpo humano e neurociência, na determinação de
metabólitos nos tecidos.1
A grande vantagem da utilização de Ressonância Magnética (RM) para estudo de estruturas é ser
uma técnica não invasiva e não destrutiva devido à baixa energia da radiofrequência utilizada,
diferente por exemplo de técnicas como raios-X, que são altamente energéticos (ionizantes) e
podem danificar tecidos orgânicos.

1.1.2. PyMR: Framework para ressonância magnética.

PyMR3 é a sigla para Python Magnetic Resonance framework, que é um framework de


ressonância magnética escrito na linguagem Python de programação, que inclui uma interface
gráfica para, a partir de templates que podem ser preenchidos com dados, gerar sequências de
pulsos que serão interpretadas por espectrômetros digitais, sem a necessidade do técnico que irá
programar a sequência entender especificamente de qualquer linguagem de programação.
O framework PyMR oferece interfaces gráficas para diferentes tipos de interação e visualização do
sistema, sequência de pulsos e dados.

1.1.3. Linguagem F

A linguagem F foi criada para atender à necessidade de descrever as sequências a serem


usadas em experimentos de ressonância magnética.

4
Um programa escrito na linguagem F consiste em três elementos distintos: sequências, módulos e
eventos.

A sequência é o ponto de entrada em um código escrito em linguagem F, utilizada para inicialização


de um módulo, definindo os parâmetros usados ​por ele.

Os módulos são usados ​para controlar o fluxo do programa que está sendo escrito. Eles contêm
declarações para repetir instruções, fazer processamento condicional, iniciar eventos, definir
matrizes de rotação e executar outras operações.

Os eventos são a forma mais baixa de agregação usada na construção das sequências. Os eventos
são uma coleção de linhas onde cada linha descreve a forma de onda durante a duração do evento
para uma determinada saída.

1.1.4. Ambiente de desenvolvimento Integrado Spyder

Ambientes de desenvolvimento integrado, ou IDEs na sigla em inglês, oferecem um


ecossistema com diversas ferramentas de análise de código, análise gráfica e análise de variáveis
para desenvolvimento de códigos mais comumente.
O Spyder2 é um projeto livre e de código aberto de um ambiente de desenvolvimento científico
integrado escrito em Python, para Python, e desenhado por e para cientistas, engenheiros e analistas
de dados.

1.1.5. Plugins

Também conhecidos como “add-ons”, são softwares que são agregados a outros softwares
servindo como uma extensão dos mesmos, fazendo uso de suas funcionalidades principais e
estendendo funcionalidades específicas que atendem também a um público específico que o utiliza.

1.1.6. Código aberto

5
É uma filosofia de desenvolvimento compartilhado de software, onde qualquer usuário pode
copiar ou modificar o código fonte desde que a licença seja mantida livre e aberta, assim
contribuindo para a evolução do software ou personalizá-lo para atender às suas necessidades
particulares.

1.2. Motivação

Dada a complexidade de desenvolvimento de um sistema de controle e programação para


um espectrômetro digital, variados recursos com conhecimentos em áreas específicas desenvolvem,
testam e validam componentes de hardware e software em diferentes fases do projeto.
O desenvolvimento descentralizado, intrínseco à concepção de tecnologias deste tipo, gera muitas
vezes ferramentas específicas para cada função ligada ao funcionamento do espectrômetro digital.
Nesse contexto e fase do projeto, surge a necessidade de integrar os diversos sistemas em uma única
ferramenta geral.
Como a maioria dos sistemas rodam e geram códigos na linguagem Python4, utilizando como
interface gráfica com usuário o framework Qt17/PyQt16, e tendo-se o projeto do IDE Spyder também
escrito na mesma linguagem e utilizando as mesmas bibliotecas, a proposta deste trabalho é a
criação de um plugin que incorpore o framework PyMR, o analisador de sintaxe e highlight da
linguagem F e um gerenciador de projetos customizado para o IDE Spyder, onde podemos utilizar
suas ferramentas nativas para análise de código e variáveis, debug e plugins nativos para
potencializar o ecossistema do framework de ressonância magnética em um único ambiente.

2. MATERIAIS E MÉTODOS
2.1. Ambiente Virtual

Um ambiente virtual é um software que cria e gerencia, independente do sistema


operacional, um conjunto de bibliotecas e linguagem de programação pré-definidas pelo usuário,
onde pode-se padronizar todas as bibliotecas e respectivas versões a serem utilizadas por um projeto
e assim evitar conflitos de versões e instalações ao utilizar-se determinado software com
dependências nos diversos sistemas.
Utilizamos para esse projeto o ambiente virtual Anaconda.5

6
2.2. Sistema operacional

No desenvolvimento e teste da aplicação, foram utilizados os sistemas operacionais


Windows e Linux, porém como todo sistema roda em cima de um ambiente virtual, o sistema
operacional MacOs também pode ser utilizado. As versões dos sistemas operacionais são tais que o
Anaconda esteja disponível para os mesmos.

2.3. Linguagem de programação, IDEs e guia de estilo para programação.

Python 3.84 foi escolhido como linguagem de programação utilizada no desenvolvimento de


todo o sistema, visto que o Spyder IDE também é escrito na mesma linguagem, desta forma
tornando transparente a integração do sistema na forma de plugin.
O ambiente de desenvolvimento utilizado para o desenvolvimento e depuração de código foi o
Visual Studio Code,6 que facilita a integração com a base de versionamento, gerenciamento do
projeto e guia de estilo para Python, que no caso foi utilizado o PEP8).7
Um guia de estilo é um conjunto de boas práticas de programação para que o código fique
padronizado e pode ser configurado em um IDE para exibir inconsistências no padrão em tempo
real.

2.4. Ferramenta de instalação para pacotes Python: pip

A ferramenta de instalação pip8, que é instalada no ambiente virtual, ajuda na instalação de


pacotes adicionais, e na instalação do próprio plugin no ambiente virtual mediante configuração de
um arquivo com diretivas de instalação e requerimentos. Fazendo a instalação do plugin em modo
de edição, qualquer alteração em código é imediatamente refletida no próximo lançamento do IDE
Spyder.

2.5. Versionamento, testes e gerenciamento de problemas.

7
Devido ao modelo de desenvolvimento de software em paralelo dentre os diversos membros
do grupo de pesquisa, uma ferramenta de versionamento e controle de código se faz necessária para
que mudanças feitas em alguma parte do código não sejam sobrescritas por outro desenvolvedor
trabalhando num mesmo arquivo do programa. Para tal finalidade utilizamos uma conta na
plataforma Gitlab9 que permite centralizar o código e todas alterações em uma máquina na nuvem,
facilitando assim o acesso para todos que possuem uma conta e permissão de acesso ao repositório
por meio da ferramenta de interface git.10
Nesta mesma plataforma, pode-se reportar problemas encontrados por membros do grupo que
testam as ferramentas desenvolvidas, e assim tem-se um controle total da cadeia de
desenvolvimento, teste e implementação de uma versão estável.

2.6. Ambiente de desenvolvimento integrado: IDE

O ambiente de desenvolvimento integrado escolhido para centralizar os plugins e todas


funcionalidades do framework PyMR foi o Spyder IDE, devido a seu desenvolvimento ser na
linguagem Python que é a mesma do framework de ressonância magnética (fato essencial para a
criação do plugin), além de possuir plugins nativos como analisador de variáveis, plots gráficos,
ferramentas de debug, etc, que acrescentam funcionalidades para análise de variáveis, tabelas e
códigos em linguagem F11 e Python.

2.7. Metalinguagem textX

É uma biblioteca em Python utilizada para especificação de outras linguagens de


programação.
“Em poucas palavras, o textX ajudará você a construir sua linguagem textual de maneira fácil. Você
pode inventar sua própria linguagem ou construir um suporte para uma linguagem textual ou
formato de arquivo já existente.”12

2.8. Gerenciador de projetos

8
Um projeto é um conjunto de arquivos e pastas organizados em árvores para gerenciar e
agrupar os desenvolvimentos de ressonância magnética. O próprio gerenciador de arquivos do
Spyder foi replicado e então feitas adaptações para atender às necessidades específicas de projetos
de ressonância magnética.

3. RESULTADOS
3.1. Editor da Linguagem F como plugin

A linguagem F11 é uma linguagem desenvolvida no grupo CIERMag para programação de


sequências de métodos de ressonância magnética a serem executadas pelo espectrômetro digital.
Para a programação das sequências se tornar mais ágil e não depender do compilador da linguagem
para checagem de erros e cálculo de tempos intrínsecos aos métodos em tempo de programação, foi
criado inicialmente um plugin para a IDE Eclipse13 de um editor da linguagem F, escrito em
linguagem Java14, que é a linguagem nativa do IDE Eclipse. Na época esta foi a melhor escolha
definida pelo grupo, lembrando que o desenvolvimento das partes não almejava fazer parte de um
projeto único como é o objetivo atual.
Porém, para ter este editor no IDE Spyder, foi necessário reescrevê-lo em linguagem Python,
tomando como base as funcionalidades do editor no Eclipse.
Utilizando-se expressão regular, que é um padrão para descrever um conjunto de cadeias de
caracteres, foram definidas as estruturas básicas da linguagem, tais como palavras reservadas, laços
de repetição, tipos, comentários, operadores, etc.
Uma metalinguagem utilizada para especificação de linguagens (textX12) em Python foi utilizada
para interpretar as definições e comparar com o código em linguagem F por meio do plugin criado,
retornando, caso haja, linha, coluna e tipo de erro ou aviso, que então são tratados por meio do
plugin e exibidos na tela, para que o usuário possa corrigir os erros ou verificar os avisos
(warnings).
Também de acordo com as definições feitas pelo grupo, foi feito uma coloração da sintaxe do
código (Figura 1) para facilitar a leitura e identificação de estruturas do código por humanos.

9
Figura 1 - Coloração da sintaxe do código da linguagem F.

Atualmente, o IDE Spyder conta com um servidor de linguagem, que descartou a necessidade de
utilização da metalinguagem textX. Estas alterações foram feitas por outro integrante do grupo, e
todas definições e estrutura do plugin foram aproveitadas nesta melhoria.

3.2. Gerenciador de projetos como parte do plugin PyMR

Um plugin de gerenciamento de projetos era necessário para carregar e gerenciar os projetos


de ressonância magnética - Figura 2. Para isso, foi criado um menu, que possibilita a criação de um
projeto novo, abertura, fechamento, salvar todas as modificações e validar o projeto.
Ao abrir o projeto, pode-se ver a árvore de todos arquivos que ficam disponíveis para edição em
modo texto, porém a abertura de um projeto, que é um arquivo “.trp” contendo todas configurações
deste projeto, carrega inúmeras configurações sobre métodos e sequências nos outros módulos do
plugin PyMR que serão vistas no próximo tópico.

10
Figura 2 - Spyder PyMR com plugin de gerenciamento de projetos. 1) Menu com funcionalidades
sobre um projeto. 2) Plugin de gerenciamento de projetos com árvore padrão de diretórios e
arquivos de um projeto aberto. 3) Área de edição de arquivos em formato texto.

Ao se criar um novo projeto, Figura 3, uma estrutura padrão de arquivos e pastas necessários para
um projeto novo é criada e preenchida com valores iniciais.

11
Figura 3 - Janela de criação de novo projeto com parâmetros marcados com * de preenchimento
obrigatório para que a estrutura padrão de um projeto possa ser gerada.

3.3. Spyder PyMR1 e Spyder PyMR2

Antes da incorporação do PyMR como um plugin, o mesmo era utilizado isoladamente,


onde este era a própria IDE de desenvolvimento para ressonância magnética - Figura 4.

Figura 4 - PyMR IDE. 1) gerenciador de projetos. 2) Gerenciador de parâmetros. 3) Gerenciador de


objetos. 4) Janela de log do sistema.

Atualmente, existem duas versões do PyMR: PyMR1 - Figura 4 e PyMR2 - Figura 5, e ambos são
objetos deste projeto de conclusão de curso, onde foram transformados em plugins do Spyder IDE.
O PyMR1 é uma versão mais estável e funcional do software, que é utilizada para criação e
desenvolvimento de métodos de ressonância magnética, enquanto o PyMR2 está em
desenvolvimento contínuo atualmente para incorporar novas funcionalidades, e programação de
sequências em forma de arrastar e soltar objetos com ajuda do mousepad, entre outras
funcionalidades que são temas de um projeto de pós-doutorado atualmente.

12
Figura 5 - PyMR2 IDE.

3.3.1. Spyder PyMR1

As 4 principais janelas do PyMR1, Figura 4, foram adicionadas separadamente no plugin


Spyder PyMR1 e todos sinais que comunicam o PyMR com as funcionalidades do Spyder foram
ligadas dentro do plugin, bem como as barras de ferramentas.
As janelas:
● O gerenciador de projetos (Figura 4-1), descrito na seção 3.1.2 (Figura 2-2).
● O gerenciador de parâmetros (Figura 4-2) e sua respectiva barra de ferramentas, configuram
uma nova janela/aba no plugin (Figura 6).
● O gerenciador de objetos (Figura 4-3) se estende no plugin como uma janela/aba (Figura 7).

Por fim temos a janela de log (Figura 4-4) que mostra todas mensagens referentes à validação e
execuções também em forma de janela/aba (Figura 8) no plugin. Vale ressaltar que todas as janelas
e abas são móveis, basta destravá-las e posicionar onde se desejar, que esta configuração é salva
automaticamente ao fechar o IDE, e é recarregada no mesmo layout quando reiniciado o IDE.
O plugin também gerencia todas as configurações de layouts e de projetos deixados abertos ao se
fechar o IDE, recarregando-as na próxima inicialização, assim como os valores iniciais de variáveis
de ambiente e de trabalho, tornando a utilização automática pelo usuário não familiarizado com o
sistema.

13
Figura 6 - Spyder PyMR1. Janela de parâmetros e barra de ferramentas destacadas em vermelho.

Figura 7 - Spyder PyMR1. Janela do gerenciador de objetos e barra de ferramentas destacadas em


vermelho.

14
Figura 8 - Spyder PyMR1. Janela do log do sistema.

3.4. Spyder PyMR2

O PyMR2 (Figura 9) é um sistema de ressonância magnética flexível e reutilizável, baseado


em técnicas bem estabelecidas e interface fácil de usar, além de possuir recursos que permitem ao
usuário definir, criar, manter e usar sistemas de ressonância magnética e sequências de pulso com
facilidade.

A estrutura oferece interfaces gráficas para diferentes tipos de interação e visualização do sistema,
sequência de pulsos e dados, que podem ser combinados livremente (encaixados) ou exibidos em
combinações particulares para diferentes contextos.3

15
Figura 9 - Spyder PyMR2. Em destaque janelas de inspeção, criação e edição de objetos,
visualização gráfica e explorador de projetos, e barra de ferramentas.

O PyMR2 incorpora melhorias em relação ao PyMR1 e está em constante desenvolvimento na data


de escrita deste trabalho. Portanto ainda irá incorporar modelos de visão de templates gráficos e
modelos de programação visual no estilo arrasta e solta, que também serão incorporados como um
plugin do Spyder IDE futuramente.

3.5. Spyder: contribuições com software livre

Além da criação do plugin, o CIERMag viu a necessidade de melhorias em um dos plugins


nativos do Spyder, o explorador de variáveis, adicionando uma barra de ferramentas para edição de
variáveis, que já podiam ser editadas via menu disparado com o botão direito do mouse. Para isso,
inicia-se um processo de colaboração, submetendo um pedido ao grupo mantenedor da IDE. Após
aprovada a ideia, é estudado o código fonte da IDE e realizada as alterações19,20.
Na Figura 10 vemos as alterações já incorporadas no IDE.

16
Figura 10 - criação da toolbar (1) com base no menu (2) já existente no plugin nativo (explorador de
variáveis) (3) do Spyder IDE.

Além da criação da barra de ferramentas, que possibilita a edição de tipos de dados básicos como
números, strings (palavras), valores booleanos (verdadeiro ou falso), listas e dicionários,
necessitava-se ter esta mesma edição para tabelas18, o que precisava ser implementado do zero pois
envolve um tipo de dado que não é nativo da linguagem.
As novas implementações seguem conforme pode ser visto na Figura 11.

17
Figura 11 - criação da toolbar (1), do menu (2) e implementação de todas funcionalidades no plugin
nativo (explorador de variáveis) (3) do Spyder IDE.

Desta forma é feita uma contribuição direta para o projeto Spyder ao mesmo tempo que se cria
funcionalidades almejadas para a edição dos sistemas de ressonância magnética.

4. CONCLUSÕES E CONSIDERAÇÕES FINAIS

Desde sua concepção, os plugins desenvolvidos descritos neste trabalho, vêm sendo
utilizados pelo grupo de ressonância magnética, facilitando o acesso ao ambiente de forma
centralizada. Como novas funcionalidades, configurações e melhorias são propostas e
implementadas conforme necessidade, o plugin sofre constantes modificações para adequar tais
mudanças ao longo de seu ciclo de desenvolvimento por diversos membros do grupo de trabalho. A
integração em uma única plataforma facilita a iniciação de novos usuários ao sistema, visto que
apenas uma instalação é necessária para se ter todo ferramental de desenvolvimento utilizado em
ressonância magnética, diminuindo o tempo de configuração e instalação de diversas ferramentas
que muitas vezes é feita por pessoal especializado ou com conhecimento específico sobre
determinados ferramentais da área.

18
A criação de um plugin, envolveu inicialmente um estudo reverso sobre como o plugin deveria ser
implementado inicialmente, visto que a documentação específica do IDE não era abrangente o
suficiente na época de sua concepção. Além da criação do plugin, ainda foram feitas contribuições
para o desenvolvimento de software livre, o que beneficia toda comunidade científica que faz uso
dessa ferramenta.
Com a concepção e desenvolvimento dessa ideia, esperamos inserir no mercado uma ferramenta
abrangente o suficiente para se gerenciar diversos tipos de hardware para ressonância magnética em
um único pacote.

REFERÊNCIAS

1 PIZETTA, D. C. Biblioteca, API e IDE para o desenvolvimento de projetos de


metodologias de Ressonância Magnética, 2014. p. 29. Dissertação (Mestrado em Física Aplicada)
- Instituto de Física de São Carlos, Universidade de São Paulo, São Carlos, 2014.

2 SPYDER IDE. Disponível em: <https://www.spyder-ide.org/>. Acesso em: 2 mar. 2023.

3 PIZETTA, D. C. PyMR: a framework for programming magnetic resonance systems. 2018.


Dissertação (Doutorado em Física Aplicada) - Instituto de Física de São Carlos, Universidade de
São Paulo, São Carlos, 2018.

4 PYTHON. Disponível em: <https://www.python.org/>. Acesso em: 2 mar. 2023.

5 ANACONDA. Disponível em: <https://www.anaconda.com/>. Acesso em: 2 mar. 2023.

6 VISUAL STUDIO CODE. Disponível em: <https://code.visualstudio.com/>. Acesso em: 12 abr.


2023.

7 PEP8 - PYTHON STYLE GUIDE CHECKER. Disponível em: <https://pypi.org/project/pep8/>.


Acesso em: 12 abr. 2023.

8 PIP - PACKAGE INSTALLER FOR PYTHON. Disponível em: <https://pypi.org/project/pip/>.


Acesso em: 12 abr. 2023.

19
9 GITLAB. Disponível em: <https://gitlab.com/>. Acesso em: 12 abr. 2023.

10 GIT. Disponível em: <https://git-scm.com/>. Acesso em: 12 abr. 2023.

11 COELHO, F. B. Linguagem de Programação e Compilador para processamento distribuído


e heterogêneo em um espectrômetro digital de RM desenvolvido com lógica programável.
2011. Trabalho de Conclusão de Curso (Graduação em Engenharia de Computação) - Universidade
de São Paulo.

12 TEXTX. Disponível em: <http://textx.github.io/textX/latest/>. Acesso em: 12 abr. 2023.

13 ECLIPSE IDE. Disponível em: <https://www.eclipse.org/>. Acesso em: 12 abr. 2023.

14 The Java Language Specification. Disponível em:


<https://docs.oracle.com/javase/specs/jls/se20/html/index.html/>. Acesso em: 12 abr. 2023.

15 TEIXEIRA, J. M. Digital magnetic resonance spectrometer (DMRS) from CIERMag:


calibration and relaxometry measurements methodology, 2023. Dissertação (Mestrado em
Física Aplicada) - Instituto de Física de São Carlos, Universidade de São Paulo, São Carlos, 2023.

16 PyQt. Disponível em: <https://wiki.python.org.br/PyQt>. Acesso em: 10 maio. 2023.

17 QT: Tools for Each Stage of Software Development Lifecycle. Disponível em:
<https://www.qt.io/>. Acesso em: 10 maio. 2023.

18 PR: Add edition menu and toolbar to dataframe viewer. Disponível em:
<https://github.com/spyder-ide/spyder/pull/20546>. Acesso em: 10 maio. 2023.

19 PR: Add context menu entries for collections to a toolbar (Variable Explorer). Disponível em:
<https://github.com/spyder-ide/spyder/pull/17473>. Acesso em: 10 maio. 2023.

20 PR: Add option to insert elements above/below in lists (Variable Explorer). Disponível em:
<https://github.com/spyder-ide/spyder/pull/13380>. Acesso em: 10 maio. 2023.

20

Você também pode gostar