#!/usr/bin/env python # coding: utf-8 # **Course website**: http://www.leouieda.com/geofisica1 # # **Note**: This notebook is part of the course "Geofísica 1" of Geology program of the # [Universidade do Estado do Rio de Janeiro](http://www.uerj.br/). # All content can be freely used and adapted under the terms of the # [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). # # ![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png) # Esse documento que você está usando é um [Jupyter notebook](http://jupyter.org/). É um documento interativo que mistura texto (como esse), código (como abaixo), e o resultado de executar o código (números, texto, figuras, videos, etc). # # Prática 5 - Gravimetria - Modelagem direta 2D para testar hipóteses # ## Objetivos # # * Aprender como testar uma hipótese geológica com dados geofísicos. # * Entender o que é e qual é o objetivo da modelagem direta. # * Ilustrar a importância de testes com dados sintéticos. # * Aprender na prática o significado de falta de unicidade. # ## Instruções # # O notebook te fornecerá exemplos interativos que trabalham os temas abordados no questionário. Utilize esses exemplos para responder as perguntas. # # As células com números ao lado, como `In [1]:`, são código [Python](http://python.org/). Algumas dessas células não produzem resultado e servem de preparação para os exemplos interativos. Outras, produzem gráficos interativos. **Você deve executar todas as células, uma de cada vez**, mesmo as que não produzem gráficos. # # Para executar uma célula, clique em cima dela e aperte `Shift + Enter`. O foco (contorno verde ou cinza em torno da célula) deverá passar para a célula abaixo. Para rodá-la, aperte `Shift + Enter` novamente e assim por diante. Você pode executar células de texto que não acontecerá nada. # ## Preparação # # Exectute as células abaixo para carregar as componentes necessárias para nossa prática. Vamos utilizar várias *bibliotecas*, inclusive uma de geofísica chamada [Fatiando a Terra](http://www.fatiando.org). # In[ ]: from __future__ import division from fatiando.gravmag.interactive import Moulder import fatiando import seaborn import numpy as np # In[ ]: print('Versão do Fatiando a Terra: {}'.format(fatiando.__version__)) # ## Simulando a Terra: dados sintéticos # # A primeira parte dessa prática será "brincar de Deus". Vamos criar uma "Terra" nossa e usar essa Terra para gerar dados. Esses dados fabricados são geralmente chamados de *sintéticos*. Depois de criar os dados sintéticos, os grupos vão trocar de dados para tentar descobrir o modelo que os colegas fizeram. **Não deixe os outros grupos verem o que estão desenhando (e não colem)!** # # 1. Execute a célula abaixo para abrir uma janela para modelagem direta. # 2. Crie um modelo com **1 corpo** utilizando a densidade que quiser. # 3. Experimente diferentes configurações e veja como o dado sintético muda. # 4. Coloque **0.1 mGal** de erro aleatório no dado. Veja como o erro influencia o dado. # 5. Quando terminar, feche a janela. Não se preocupe, seu modelo estará salvo. # In[ ]: area = (0, 50e3, 0, 20e3) x = np.linspace(area[0], area[1], 150) z = np.zeros_like(x) modelo1 = Moulder(area, x, z) modelo1.run() # Rode a célula abaixo para salvar o seu modelo e os dados gerados. **Mude os nomes dos arquivos abaixo** (troque o `blablabla` por outra coisa) para poder identificar seu modelo depois. # In[ ]: modelo1.save('modelo1-blablabla.pkl') modelo1.save_predicted('modelo1-dados-blablabla.txt') # ### Para pensar # # * O que é dado que você gerou? É o distúrbio, Bouguer, nenhum dos dois, ambos? # * O que representa o valor de densidade que vocês colocaram? É um contraste? Se for, é um contraste entre o que? # ## Modelagem direta: testando uma hipótese sobre o dado dos colegas # # Pegue o arquivo de dados (`modelo1-blablabla.txt`) e o arquivo de modelo (`modelo1-blablabla.pkl`) de outro grupo. # # Dessa vez, a única informação "geológica" que você tem é que o dado é **produzido por 1 único corpo**. # # 0. Copie e cole os arquivos `.txt` e `.pkl` do outro grupo para a **pasta onde está o notebook**. # 1. **Mude os nomes dos arquivos** na célula abaixo (coisas entre `''`) para os do outro grupo. # 2. Rode a célula abaixo para carregar os dados e abrir a janela de modelagem. # 3. Faça um modelo com **1 corpo** que ajuste o dado do colega. # 4. Feche a janela quando terminar (não se preocupe, tudo estará salvo). # In[ ]: dados_colega = 'modelo1-dados-blablabla.txt' modelo_colega = 'modelo1-blablabla.pkl' x, z, dados = np.loadtxt(dados_colega, unpack=True) modelagem1 = Moulder(area, x, z, data=dados) modelagem1.run() # Rode a célula abaixo para inserir uma imagem do seu modelo aqui no notebook. # In[ ]: modelagem1.plot() # Vamos comparar agora o seu modelo com "a realidade" criada pelo colega. Rode a célula abaixo para plotar "a realidade". # In[ ]: Moulder.load(modelo_colega).plot() # ### Para pensar # # * Você chegou perto do verdadeiro (sem colar)? Por que? # * O seu modelo é uma solução válida do ponto de vista **geofísico**, ou seja, perante os dados e informações que você possuía? # * O que seria necessário para produzir um modelo que se aproxime mais da realidade? # ## Informação a priori: chegando mais próximo da realidade # # O problema anterior foi de sacanagem. Não há como gerar um modelo que reproduza a realidade somente com os dados geofísicos. Como você viu, **existem infinitos modelos que produzem o mesmo dado**. O que diferencia um possível modelo e outro é o conhecimento geológico e geofísico do intérprete (ou seja, **você**). Por isso que conhecimento prévio (a priori) sobre a geologia da região e possíveis soluções é crucial. # # #
# A geofísica não serve para dizer "o que é" mas sim "o que não é" ou "o que pode ser". #
# # Para ilustrar isso vamos fazer outra modelagem com dados sintéticos. Mas dessa vez teremos mais informações geológicas. Vocês informarão os colegas qual que **tipo de corpo geológico** gerou a anomalia e qual é o **contraste de densidade correto**. Em situações reais, dificilmente fazemos um levantamento geofísico em uma área onde o conhecimento da geologia é zero. Sabemos que tem intrusões nessa região, que ali é uma bacia sedimentar, etc. # **Vamos simular uma intrusão ígnea:** # # 1. Gere um modelo de **uma** (só 1) intrusão (dique, batólito, soleira, etc). # 2. Coloque um contraste de densidade positivo (rochas ígneas são densas). **Anote o valor que colocarem para não esquecer.** # 3. Coloque **0.1 mGal de erro** aleatório nos dados. # 3. Feche a janela quando terminar. # In[ ]: area = (0, 10e3, 0, 5e3) x = np.linspace(area[0], area[1], 150) z = np.zeros_like(x) modelo_ignea = Moulder(area, x, z) modelo_ignea.run() # Rode a célula abaixo para salvar o seu modelo e os dados gerados. **Mude os nomes dos arquivos abaixo** (troque o `blablabla` por outra coisa) para poder identificar seu modelo depois. # In[ ]: modelo_ignea.save('modelo-ignea-blablabla.pkl') modelo_ignea.save_predicted('modelo-ignea-dados-blablabla.txt') # **Troque os arquivos de dados e modelo com outro grupo**. # # Vamos tentar a modelagem novamente. Dessa vez, sabemos que a anomalia é causada por uma intrusão (batólito, dique, soleira, etc). Também sabemos a densidade correta (pergunte para o grupo que cedeu os dados). # # 0. Copie e cole os arquivos de dados e modelo do outro grupo **na pasta onde está esse notebook**. # 1. Mude os nomes dos arquivos abaixo para os do outro grupo. # 2. Execute a célula abaixo para carregar os dados do colega e fazer a modelagem. # 3. Não se esqueça de colocar a densidade correta. # 4. Produza uma solução válida (que ajuste os dados) e que **também seja condizente com a geologia**. # In[ ]: dado_colega_intrusao = 'modelo-ignea-dados-blablabla.txt' modelo_colega_intrusao = 'modelo-ignea-blablabla.pkl' x, z, dado = np.loadtxt(dado_colega_intrusao, unpack=True) modelagem_ignea = Moulder(area, x, z, data=dado) modelagem_ignea.run() # Vamos ver como foi dessa vez. Rode as duas células abaixo para produzir 2 gráficos: primeiro o seu modelo e depois o verdadeiro (do outro grupo). # In[ ]: modelagem_ignea.plot() # In[ ]: Moulder.load(modelo_colega_intrusao).plot() # ### Para pensar # # * Você chegou perto do verdadeiro (sem colar)? # * Foi mais próximo que da última vez? Por que? # * O seu modelo é uma soluação válida do ponto de vista geofísico? # * Como a informação adicional te ajudou/não ajudou? # * Como você poderia melhorar a sua solução?