Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/issue/4 #5

Merged
merged 28 commits into from
Apr 4, 2020
Merged

Feature/issue/4 #5

merged 28 commits into from
Apr 4, 2020

Conversation

Dirack
Copy link
Collaborator

@Dirack Dirack commented Mar 23, 2020

📤 Pull Request

Descrição

Programa para gerar os arquivos de interfaces lidos pelo programa geomodel no formato '.itf'.

Resolve #4

Tipo da modificação

  • Correção de Bug (modificação que corrige uma problema)
  • Nova feature (modificação que adiciona uma funcionalidade)
  • Atualização de documentação
  • Outros (Descrever aqui)

Adicione imagens abaixo e o contexto se necessário

O programa interfaceBuilder tem as seguintes opções:

  • -h --help Exibe essa tela de ajuda e sai
  • -v --version Exibe a versão do programa e sai
  • -c --create Criar um novo modelo
  • -a --add Adicionar interface
  • -s --see Ver interfaces geradas
  • -r --remove Remover última interface

O usuário poderá criar um novo arquivo de interfaces do zero com o seguinte comando:

~$ interfaceBuilder -c arquivo.itf

Este comando cria o arquivo de interfaces 'arquivo.itf' a partir de parâmetros do modelo solicitados ao usuário no momento da criação do modelo.

O comando a seguir cria uma nova interface:

~$ interfaceBuilder -a <arquivo.itf> x=x1,x2,x3...xn y=y1,y2,y3...yn sfill=p1,s1

Esta nova interface é criada abaixo da última interface do 'arquivo.itf', estas duas interfaces formarão uma camada com slooth (1/v²) de vallor s1. O ponto p1 é um ponto na camada (entre as duas interfaces) para o programa atribuir o valor s1.

O usuário poderá visualizar as informações do arquivo de interfaces com a opção -s:

~$ interfaceBuilder -s <arquivo.itf>

A opção para remover a última interface é -r a seguir:

~$ interfaceBuilder -r <arquivo.itf>

Esta opção remove sempre a última interface da pilha (a última interface do arquivo). Não é permitido remover a primeira interface do modelo (esta é a superfície de aquisição, definida no momento da criação do modelo com a opção -a)

Os arquivos '.itf' manipulados por este programa são arquivos de texto normais e podem ser editados manualmente pelo usuário. Este tipo de arquivo é um parser para o programa geomodel e
estabelece as interfaces no formato lido pelo programa triseis do SU que realiza a modelagem através do traçamento do raio.

Este programa facilita o processo de escrita dos arquivos '.itf'.
A seguir um exemplo de arquivo .itf criado e editado por este programa (Modelo com apenas duas interfaces):

# Arquivo de interfaces para o programa geomodel
# As linhas iniciadas com '#' serão ignoradas!
# As linhas marcadas '< >' representam entradas de
# parâmetros dos programas 

# Parâmetros do spsplot para gerar uma imagem eps do modelo
<sp>
gedge=0.5 gtri=2.0 gmin=0.2 gmax=1.0
titlesize=20
labelsize=18 dxnum=1.0 dznum=0.5 wbox=15 hbox=8
title="Modelo de camadas curvas"
labelz="Profundidade (km)" labelx="Distancia (km)"
</sp>

# Parâmetros do programa trimodel
<tm>
xmin=0 zmin=0 xmax=12.0 zmax=3.5 
1 xedge=0,2,4,6,8,10,12 
zedge=0,0,0,0,0,0,0 
sedge=0,0,0,0,0,0,0 
2 xedge=0,2,4,8,10,12
zedge=3.5,3.5,3.5,3.5,3.5,3.5
sedge=0,0,0,0,0,0
sfill=0,1.0,0,0,0.3,0,0
kedge=1,2
</tm>

Esta modificação contém uma suíte de testes que roda a partir de um Makefile, demonstrando como o programa funciona. Basta rodar o Seguinte comando:

~$ make test

Também possui alguns exemplos de arquivos .itf no diretório 'su_test_models' que podem ser carregados e visualizados pelo interfaceBuiler, exemplo:

~$ ./interfaceBuilder ./su_test_models/modelo.itf

Dirack added 15 commits March 22, 2020 19:21
O script mensagemAjuda.sh e o script mensagemErro.sh padronizam as
mensagens de ajuda e erro de scripts do shell. São originais da
biblioteca Shellinclude, e suas versões atualizadas podem ser
encontradas em https://github.com/Dirack/Shellinclude
Interface do programa geomodel esboçada, possui menu de opções,
mensagens de erro e mensagens de ajuda.
O programa geomodel lê de um arquivo de interfaces no formato do
trimodel. Um exemplo deste arquivo é 'modelo.interface'. As linhas
iniciadas com '#' no arquivo de interfaces serão ignoradas pelo
programa geomodel
O arquivo de interfaces agora possui a extensão '.itf' e marcações
'<tm>' e '<sp>' para indicar as seções dos parâmetros dos programas
trimodel e spsplot utilizados para gerar e plotar o modelo
Adapta o programa geomodel para a leitura dos parâmetros do modelo a
partir de arquivo '.itf'
O programa interfaceBuilder constrói o arquivo de interfaces com
extensão '.itf' para ser lido pelo programa geomodel. Este permite
adicionar, listar e remover as interfaces do arquivo.
A opção '-a' do programa interfaceBuilder serve para adicionar
interfaces a um arquivo .itf no formato lido pelo trimodel. O arquivo de
interfaces deve existir previamente. O programa cria um arquivo
temporário a partir do arquivo pré existente e adiciona a nova interface
seguindo o formato adequado.

Por fim substitui o arquivo antigo pela nova versão criada, com uma
interface a mais adicionada a pilha de interfaces.
A opção -s do programa interfaceBuilder permite ver as interfaces e
camadas descritas no arquivo '.itf' de maneira mais amigável.
A correta remoção da interface envolve a remoção de 3 linhas que a
descrevem, isto é de LINHA_IN (linha inicial da descrição da interface)
até LINHA_OUT=LINHA_IN+2 (linha final da descrição da interface).

O bug ocorreu pela utilização de LINHA_OUT=LINHA_IN+3, oque resultou em
apagar uma linha extra que descrevia as camadas.
A opção '-r' não permite a remoção da última interface da pilha no
arquivo de interfaces. Esta primeira interface é a própria superfície de
aquisição e não faria sentido remover tal interface. Por isto o programa
sugere ao usuário que crie um novo modelo
A opção '-c' permite ao usuário criar um novo modelo do zero. O programa
interfaceBuilder verifica se o usuário forneceu o nome de arquivo de
modelo e se este já existe, para não permitir sobreescrever modelos já
existentes.

Depois o programa pede ao usuário as informações básicas do modelo, como
dimensão e parâmetros de plotagem e gera o arquivo .itf correspondente
com a primeira interface (A primeira interface é a superfície de
aquisição).
Quando tem apenas uma interface no arquivo de interfaces lido pelo
programa interfaceBuilder, não é possível exibir informação sobre
camadas (precisa de no mínimo duas interfaces para formar uma camada).

Este commit adapta a lógica do programa para este caso
O comando sed estava interpretando incorretamente a regex de
substituição, retirar o caractere '$' da regex impede a interpretação
da barra '/' de fechamento como parte da variável. Basta o conjunto '.*'
para fazer referência a qualquer conjunto de caracteres depois de
'kedge='
@Dirack Dirack added the enhancement New feature or request label Mar 23, 2020
@Dirack Dirack added this to the proSU v1.0-beta.1 milestone Mar 23, 2020
@Dirack Dirack self-assigned this Mar 23, 2020
@Dirack Dirack linked an issue Mar 23, 2020 that may be closed by this pull request
Dirack added 10 commits April 2, 2020 23:10
Roda os testes automáticos para o programa interfaceBuilder. No futuro
será integrado ao Travis CI para deploy automatizado das versões desta
biblioteca
A biblioteca tdd_lib.sh possui funções para testes simples de verificação de
condições 'error' e para verificação de instalação de listas de arquivos em
'verificaInstalacao'.
Pasta com arquivos no formato ITF lido pelo programa interfaceBuilder
A opção -c de interfaceBuilder agora é não interativa, pois tal abordagem
prejudica a lógica dos testes automatizados. Todos os parâmetros são
passados pela linha de comandos
A variável DIR serve para garantir que o teste possa ser realizado tanto
de dentro da pasta TDD, chamando '../interfaceBuilder_tdd.sh' quanto de dentro
da pasta da proSU, chamando './interfaceBuilder_tdd.sh'.

O teste cria um modelo em um arquivo temporário e apaga ao sair o script de teste
ou ao atingir algum erro fatal
Testa a opção -a para adicionar interfaces a um modelo ITF. Este teste
adiciona 7 interfaces em um looping, utilizando os arrays xedge, zedge e
sfill para adicionar uma interface por vez ao modelo
Testa a opção -r que remove uma interface da pilha, e a opção -s que
permite visualizar informações sobre o modelo. Estas opções podem ser
combinadas em um teste que armazena o número de interfaces antes da
remoção e compara com o número de interfaces depois da remoção
Estes manuais de uso são lidos com o programa man do Shell
Dirack added 3 commits April 3, 2020 22:00
O programa interfaceBuilder depende apenas do shell bash para gerar
os arquivos de interfaces '.itf'. Os programas que parseam estes arquivos
para gerar modelos para o programa trimodel do SU é que precisam do pacote
SU instalado
Travis CI roda os testes automatizaos do diretório TDD a partir de um Makefile.
O arquivo Makefile estava ignorando os testes automatizados. Chamando
diretamente os arquivos de teste, no alvo test, faz com que os testes
não sejam ignorados
@Dirack Dirack merged commit 66a22e6 into develop/1.0 Apr 4, 2020
@Dirack Dirack deleted the feature/issue/4 branch April 4, 2020 01:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEA] Programa para criar interfaces para o programa geomodel
1 participant