Commit 520ec4a1 authored by Philipp Arras's avatar Philipp Arras
Browse files

Move getting_started_0 to docs

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