{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**Course website**: http://www.leouieda.com/geofisica1\n", "\n", "**Note**: This notebook is part of the course \"Geofísica 1\" of Geology program of the \n", "[Universidade do Estado do Rio de Janeiro](http://www.uerj.br/). \n", "All content can be freely used and adapted under the terms of the \n", "[Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).\n", "\n", "![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prática 5 - Gravimetria - Modelagem direta 2D para testar hipóteses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objetivos\n", "\n", "* Aprender como testar uma hipótese geológica com dados geofísicos.\n", "* Entender o que é e qual é o objetivo da modelagem direta.\n", "* Ilustrar a importância de testes com dados sintéticos.\n", "* Aprender na prática o significado de falta de unicidade." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Instruções\n", "\n", "O notebook te fornecerá exemplos interativos que trabalham os temas abordados no questionário. Utilize esses exemplos para responder as perguntas.\n", "\n", "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.\n", "\n", "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." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparação\n", "\n", "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)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import division\n", "from fatiando.gravmag.interactive import Moulder\n", "import fatiando\n", "import seaborn\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "print('Versão do Fatiando a Terra: {}'.format(fatiando.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulando a Terra: dados sintéticos\n", "\n", "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)!**\n", "\n", "1. Execute a célula abaixo para abrir uma janela para modelagem direta.\n", "2. Crie um modelo com **1 corpo** utilizando a densidade que quiser.\n", "3. Experimente diferentes configurações e veja como o dado sintético muda.\n", "4. Coloque **0.1 mGal** de erro aleatório no dado. Veja como o erro influencia o dado.\n", "5. Quando terminar, feche a janela. Não se preocupe, seu modelo estará salvo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 50e3, 0, 20e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo1 = Moulder(area, x, z)\n", "modelo1.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo1.save('modelo1-blablabla.pkl')\n", "modelo1.save_predicted('modelo1-dados-blablabla.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* O que é dado que você gerou? É o distúrbio, Bouguer, nenhum dos dois, ambos?\n", "* O que representa o valor de densidade que vocês colocaram? É um contraste? Se for, é um contraste entre o que?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modelagem direta: testando uma hipótese sobre o dado dos colegas\n", "\n", "Pegue o arquivo de dados (`modelo1-blablabla.txt`) e o arquivo de modelo (`modelo1-blablabla.pkl`) de outro grupo. \n", "\n", "Dessa vez, a única informação \"geológica\" que você tem é que o dado é **produzido por 1 único corpo**.\n", "\n", "0. Copie e cole os arquivos `.txt` e `.pkl` do outro grupo para a **pasta onde está o notebook**.\n", "1. **Mude os nomes dos arquivos** na célula abaixo (coisas entre `''`) para os do outro grupo.\n", "2. Rode a célula abaixo para carregar os dados e abrir a janela de modelagem.\n", "3. Faça um modelo com **1 corpo** que ajuste o dado do colega.\n", "4. Feche a janela quando terminar (não se preocupe, tudo estará salvo). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dados_colega = 'modelo1-dados-blablabla.txt'\n", "modelo_colega = 'modelo1-blablabla.pkl'\n", "x, z, dados = np.loadtxt(dados_colega, unpack=True)\n", "modelagem1 = Moulder(area, x, z, data=dados)\n", "modelagem1.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rode a célula abaixo para inserir uma imagem do seu modelo aqui no notebook." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelagem1.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos comparar agora o seu modelo com \"a realidade\" criada pelo colega. Rode a célula abaixo para plotar \"a realidade\"." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar\n", "\n", "* Você chegou perto do verdadeiro (sem colar)? Por que?\n", "* 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?\n", "* O que seria necessário para produzir um modelo que se aproxime mais da realidade?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Informação a priori: chegando mais próximo da realidade\n", "\n", "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.\n", "\n", "\n", "
\n", "A geofísica não serve para dizer \"o que é\" mas sim \"o que não é\" ou \"o que pode ser\".\n", "
\n", "\n", "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. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Vamos simular uma intrusão ígnea:**\n", "\n", "1. Gere um modelo de **uma** (só 1) intrusão (dique, batólito, soleira, etc).\n", "2. Coloque um contraste de densidade positivo (rochas ígneas são densas). **Anote o valor que colocarem para não esquecer.**\n", "3. Coloque **0.1 mGal de erro** aleatório nos dados.\n", "3. Feche a janela quando terminar. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "area = (0, 10e3, 0, 5e3)\n", "x = np.linspace(area[0], area[1], 150)\n", "z = np.zeros_like(x)\n", "modelo_ignea = Moulder(area, x, z)\n", "modelo_ignea.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelo_ignea.save('modelo-ignea-blablabla.pkl')\n", "modelo_ignea.save_predicted('modelo-ignea-dados-blablabla.txt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Troque os arquivos de dados e modelo com outro grupo**.\n", "\n", "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).\n", "\n", "0. Copie e cole os arquivos de dados e modelo do outro grupo **na pasta onde está esse notebook**.\n", "1. Mude os nomes dos arquivos abaixo para os do outro grupo.\n", "2. Execute a célula abaixo para carregar os dados do colega e fazer a modelagem.\n", "3. Não se esqueça de colocar a densidade correta.\n", "4. Produza uma solução válida (que ajuste os dados) e que **também seja condizente com a geologia**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dado_colega_intrusao = 'modelo-ignea-dados-blablabla.txt'\n", "modelo_colega_intrusao = 'modelo-ignea-blablabla.pkl'\n", "x, z, dado = np.loadtxt(dado_colega_intrusao, unpack=True)\n", "modelagem_ignea = Moulder(area, x, z, data=dado)\n", "modelagem_ignea.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "modelagem_ignea.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Moulder.load(modelo_colega_intrusao).plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Para pensar \n", "\n", "* Você chegou perto do verdadeiro (sem colar)?\n", "* Foi mais próximo que da última vez? Por que?\n", "* O seu modelo é uma soluação válida do ponto de vista geofísico?\n", "* Como a informação adicional te ajudou/não ajudou?\n", "* Como você poderia melhorar a sua solução?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }