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
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 nifty7 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 nifty7 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 nifty7.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="nifty7/logger.py nifty7/git_version.py"
sphinx-apidoc -e -o docs/source/mod nifty7 ${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/nifty7.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!
Please register or to comment