Commit dd8e0f42 by Martin Reinecke

### Merge branch 'move_getting_started_to_docs' into 'NIFTy_8'

Add getting started to docs

See merge request !666
parents 88258c6e b530bdb1
Pipeline #106640 passed with stages
in 34 minutes and 30 seconds
 # never store the git version file git_version.py docs/source/user/getting_started_0.rst # custom *.txt setup.cfg ... ...
 ... ... @@ -8,7 +8,7 @@ } }, "source": [ "# A NIFTy demonstration" "# Code example: Wiener filter" ] }, { ... ... @@ -19,7 +19,7 @@ } }, "source": [ "## IFT: Big Picture\n", "## Introduction\n", "IFT starting point:\n", "\n", "$$d = Rs+n$$\n", ... ... @@ -28,9 +28,6 @@ "\n", "IFT aims at **inverting** the above uninvertible problem in the **best possible way** using Bayesian statistics.\n", "\n", "\n", "## NIFTy\n", "\n", "NIFTy (Numerical Information Field Theory) is a Python framework in which IFT problems can be tackled easily.\n", "\n", "Main Interfaces:\n", ... ... @@ -48,7 +45,7 @@ } }, "source": [ "## Wiener Filter: Formulae\n", "## Wiener filter on one-dimensional fields\n", "\n", "### Assumptions\n", "\n", ... ... @@ -61,11 +58,9 @@ "$$\\mathcal P (s|d) \\propto P(s,d) = \\mathcal G(d-Rs,N) \\,\\mathcal G(s,S) \\propto \\mathcal G (s-m,D)$$\n", "\n", "where\n", "\\begin{align}\n", "m &= Dj \\\\\n", "D^{-1}&= (S^{-1} +R^\\dagger N^{-1} R )\\\\\n", "j &= R^\\dagger N^{-1} d\n", "\\end{align}\n", "$$m = Dj$$\n", "with\n", "$$D = (S^{-1} +R^\\dagger N^{-1} R)^{-1} , \\quad j = R^\\dagger N^{-1} d.$$\n", "\n", "Let us implement this in NIFTy!" ] ... ... @@ -78,7 +73,7 @@ } }, "source": [ "## Wiener Filter: Example\n", "### In NIFTy\n", "\n", "- We assume statistical homogeneity and isotropy. Therefore the signal covariance $S$ is diagonal in harmonic space, and is described by a one-dimensional power spectrum, assumed here as $$P(k) = P_0\\,\\left(1+\\left(\\frac{k}{k_0}\\right)^2\\right)^{-\\gamma /2},$$\n", "with $P_0 = 0.2, k_0 = 5, \\gamma = 4$.\n", ... ... @@ -114,7 +109,7 @@ } }, "source": [ "## Wiener Filter: Implementation" "### Implementation" ] }, { ... ... @@ -125,7 +120,7 @@ } }, "source": [ "### Import Modules" "#### Import Modules" ] }, { ... ... @@ -142,7 +137,8 @@ "import numpy as np\n", "import nifty8 as ift\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" "plt.rcParams['figure.dpi'] = 100\n", "plt.style.use(\"seaborn-notebook\")" ] }, { ... ... @@ -153,7 +149,7 @@ } }, "source": [ "### Implement Propagator" "#### Implement Propagator" ] }, { ... ... @@ -182,7 +178,7 @@ } }, "source": [ "### Conjugate Gradient Preconditioning\n", "#### Conjugate Gradient Preconditioning\n", "\n", "- $D$ is defined via:\n", "$$D^{-1} = \\mathcal S_h^{-1} + R^\\dagger N^{-1} R.$$\n", ... ... @@ -213,7 +209,7 @@ } }, "source": [ "### Generate Mock data\n", "#### Generate Mock data\n", "\n", "- Generate a field $s$ and $n$ with given covariances.\n", "- Calculate $d$." ... ... @@ -257,7 +253,7 @@ } }, "source": [ "### Run Wiener Filter" "#### Run Wiener Filter" ] }, { ... ... @@ -281,7 +277,7 @@ } }, "source": [ "### Signal Reconstruction" "#### Results" ] }, { ... ... @@ -299,10 +295,9 @@ "m_data = HT(m).val\n", "d_data = d.val\n", "\n", "plt.figure(figsize=(15,10))\n", "plt.plot(s_data, 'r', label=\"Signal\", linewidth=3)\n", "plt.plot(s_data, 'r', label=\"Signal\", linewidth=2)\n", "plt.plot(d_data, 'k.', label=\"Data\")\n", "plt.plot(m_data, 'k', label=\"Reconstruction\",linewidth=3)\n", "plt.plot(m_data, 'k', label=\"Reconstruction\",linewidth=2)\n", "plt.title(\"Reconstruction\")\n", "plt.legend()\n", "plt.show()" ... ... @@ -318,10 +313,9 @@ }, "outputs": [], "source": [ "plt.figure(figsize=(15,10))\n", "plt.plot(s_data - s_data, 'r', label=\"Signal\", linewidth=3)\n", "plt.plot(s_data - s_data, 'r', label=\"Signal\", linewidth=2)\n", "plt.plot(d_data - s_data, 'k.', label=\"Data\")\n", "plt.plot(m_data - s_data, 'k', label=\"Reconstruction\",linewidth=3)\n", "plt.plot(m_data - s_data, 'k', label=\"Reconstruction\",linewidth=2)\n", "plt.axhspan(-noise_amplitude,noise_amplitude, facecolor='0.9', alpha=.5)\n", "plt.title(\"Residuals\")\n", "plt.legend()\n", ... ... @@ -336,7 +330,7 @@ } }, "source": [ "### Power Spectrum" "#### Power Spectrum" ] }, { ... ... @@ -351,7 +345,6 @@ "source": [ "s_power_data = ift.power_analyze(sh).val\n", "m_power_data = ift.power_analyze(m).val\n", "plt.figure(figsize=(15,10))\n", "plt.loglog()\n", "plt.xlim(1, int(N_pixels/2))\n", "ymin = min(m_power_data)\n", ... ... @@ -516,12 +509,11 @@ }, "outputs": [], "source": [ "fig = plt.figure(figsize=(15,10))\n", "plt.axvspan(l, h, facecolor='0.8',alpha=0.5)\n", "plt.fill_between(range(N_pixels), m_data - uncertainty, m_data + uncertainty, facecolor='0.5', alpha=0.5)\n", "plt.plot(s_data, 'r', label=\"Signal\", alpha=1, linewidth=3)\n", "plt.plot(s_data, 'r', label=\"Signal\", alpha=1, linewidth=2)\n", "plt.plot(d_data, 'k.', label=\"Data\")\n", "plt.plot(m_data, 'k', label=\"Reconstruction\", linewidth=3)\n", "plt.plot(m_data, 'k', label=\"Reconstruction\", linewidth=2)\n", "plt.title(\"Reconstruction of incomplete data\")\n", "plt.legend()" ] ... ... @@ -534,7 +526,7 @@ } }, "source": [ "# 2d Example" "## Wiener filter on two-dimensional field" ] }, { ... ... @@ -618,18 +610,18 @@ }, "outputs": [], "source": [ "cm = ['magma', 'inferno', 'plasma', 'viridis'][1]\n", "cmap = ['magma', 'inferno', 'plasma', 'viridis'][1]\n", "\n", "mi = np.min(s_data)\n", "ma = np.max(s_data)\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(15, 7))\n", "fig, axes = plt.subplots(1, 2)\n", "\n", "data = [s_data, d_data]\n", "caption = [\"Signal\", \"Data\"]\n", "\n", "for ax in axes.flat:\n", " im = ax.imshow(data.pop(0), interpolation='nearest', cmap=cm, vmin=mi,\n", " im = ax.imshow(data.pop(0), interpolation='nearest', cmap=cmap, vmin=mi,\n", " vmax=ma)\n", " ax.set_title(caption.pop(0))\n", "\n", ... ... @@ -651,7 +643,7 @@ "mi = np.min(s_data)\n", "ma = np.max(s_data)\n", "\n", "fig, axes = plt.subplots(3, 2, figsize=(15, 22.5))\n", "fig, axes = plt.subplots(3, 2, figsize=(10, 15))\n", "sample = HT(curv.draw_sample(from_inverse=True)+m).val\n", "post_mean = (m_mean + HT(m)).val\n", "\n", ... ... @@ -659,7 +651,7 @@ "caption = [\"Signal\", \"Reconstruction\", \"Posterior mean\", \"Sample\", \"Residuals\", \"Uncertainty Map\"]\n", "\n", "for ax in axes.flat:\n", " im = ax.imshow(data.pop(0), interpolation='nearest', cmap=cm, vmin=mi, vmax=ma)\n", " im = ax.imshow(data.pop(0), interpolation='nearest', cmap=cmap, vmin=mi, vmax=ma)\n", " ax.set_title(caption.pop(0))\n", "\n", "fig.subplots_adjust(right=0.8)\n", ... ... @@ -691,31 +683,9 @@ "precise = (np.abs(s_data-m_data) < uncertainty)\n", "print(\"Error within uncertainty map bounds: \" + str(np.sum(precise) * 100 / N_pixels**2) + \"%\")\n", "\n", "plt.figure(figsize=(15,10))\n", "plt.imshow(precise.astype(float), cmap=\"brg\")\n", "plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Start Coding\n", "## NIFTy Repository + Installation guide\n", "\n", "https://gitlab.mpcdf.mpg.de/ift/NIFTy\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { ... ... @@ -735,7 +705,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" "version": "3.9.2" } }, "nbformat": 4, ... ...
 ... ... @@ -31,6 +31,8 @@ "source": [ "import nifty8 as ift\n", "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.dpi'] = 100\n", "plt.style.use(\"seaborn-notebook\")\n", "import numpy as np\n", "ift.random.push_sseq_from_seed(43)\n", "\n", ... ... @@ -49,7 +51,7 @@ " # Plotting preparation is normally handled by nifty8.Plot\n", " # It is done manually here to be able to tweak details\n", " # Fields are assumed to have identical domains\n", " fig = plt.figure(tight_layout=True, figsize=(12, 3.5))\n", " fig = plt.figure(tight_layout=True, figsize=(10, 3))\n", " if title is not None:\n", " fig.suptitle(title, fontsize=14)\n", " \n", ... ...
 jupyter-nbconvert --to rst --execute --ExecutePreprocessor.timeout=None docs/source/user/getting_started_0.ipynb EXCLUDE="nifty8/logger.py nifty8/git_version.py" sphinx-apidoc -e -o docs/source/mod nifty8 \${EXCLUDE} sphinx-build -b html docs/source/ docs/build/
 ../../../demos/getting_started_0.ipynb \ No newline at end of file
 ... ... @@ -15,4 +15,5 @@ are found in the API reference <../mod/nifty8.html>_. approximate_inference volume code getting_started_0 citations
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!