Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
NIFTy
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
13
Issues
13
List
Boards
Labels
Service Desk
Milestones
Merge Requests
13
Merge Requests
13
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ift
NIFTy
Commits
8a74ad03
Commit
8a74ad03
authored
Jan 06, 2019
by
Torsten Ensslin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improved demos, mainly by explaining what is going on and by streamlining
parent
452c8ba0
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
87 additions
and
41 deletions
+87
-41
demos/bernoulli_demo.py
demos/bernoulli_demo.py
+19
-14
demos/getting_started_1.py
demos/getting_started_1.py
+37
-10
demos/getting_started_2.py
demos/getting_started_2.py
+31
-17
No files found.
demos/bernoulli_demo.py
View file @
8a74ad03
...
...
@@ -13,9 +13,15 @@
#
# Copyright(C) 2013-2018 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
#####################################################################
# Bernoulli reconstruction
# reconstruct an event probability field with values between 0 and 1
# from the observed events
# 1D (set mode=0), 2D (mode=1), or on the sphere (mode=2)
#####################################################################
import
nifty5
as
ift
import
numpy
as
np
...
...
@@ -25,17 +31,16 @@ if __name__ == '__main__':
np
.
random
.
seed
(
41
)
# Set up the position space of the signal
#
# # One dimensional regular grid with uniform exposure
# position_space = ift.RGSpace(1024)
# exposure = np.ones(position_space.shape)
# Two-dimensional regular grid with inhomogeneous exposure
position_space
=
ift
.
RGSpace
([
512
,
512
])
# Sphere with uniform exposure
# position_space = ift.HPSpace(128)
# exposure = ift.Field.full(position_space, 1.)
mode
=
2
if
mode
==
0
:
# One dimensional regular grid
position_space
=
ift
.
RGSpace
(
1024
)
elif
mode
==
1
:
# Two dimensional regular grid
position_space
=
ift
.
RGSpace
([
512
,
512
])
else
:
# Sphere
position_space
=
ift
.
HPSpace
(
128
)
# Defining harmonic space and transform
harmonic_space
=
position_space
.
get_default_codomain
()
...
...
@@ -83,5 +88,5 @@ if __name__ == '__main__':
plot
.
add
(
reconstruction
,
title
=
'reconstruction'
)
plot
.
add
(
GR
.
adjoint_times
(
data
),
title
=
'data'
)
plot
.
add
(
sky
(
mock_position
),
title
=
'truth'
)
plot
.
output
(
nx
=
3
,
xsize
=
16
,
ysize
=
5
,
title
=
"results"
,
plot
.
output
(
nx
=
3
,
xsize
=
16
,
ysize
=
9
,
title
=
"results"
,
name
=
"bernoulli.png"
)
demos/getting_started_1.py
View file @
8a74ad03
...
...
@@ -13,14 +13,21 @@
#
# Copyright(C) 2013-2018 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
############################################################
# Wiener filter demo code
# showing how measurement gaps are filled in
# 1D (set mode=0), 2D (mode=1), or on the sphere (mode=2)
#############################################################
import
nifty5
as
ift
import
numpy
as
np
def
make_chess_mask
(
position_space
):
# set up a checkerboard mask for 2D mode
mask
=
np
.
ones
(
position_space
.
shape
)
for
i
in
range
(
4
):
for
j
in
range
(
4
):
...
...
@@ -30,12 +37,14 @@ def make_chess_mask(position_space):
def
make_random_mask
():
# set up random mask for spherical mode
mask
=
ift
.
from_random
(
'pm1'
,
position_space
)
mask
=
(
mask
+
1
)
/
2
return
mask
.
to_global_data
()
def
mask_to_nan
(
mask
,
field
):
# mask masked pixels for plotting data
masked_data
=
field
.
local_data
.
copy
()
masked_data
[
mask
.
local_data
==
0
]
=
np
.
nan
return
ift
.
from_local_data
(
field
.
domain
,
masked_data
)
...
...
@@ -43,9 +52,8 @@ def mask_to_nan(mask, field):
if
__name__
==
'__main__'
:
np
.
random
.
seed
(
42
)
# FIXME description of the tutorial
# Choose p
roblem geometry and masking
# Choose p
osition space of signal and masking in measurement
mode
=
1
if
mode
==
0
:
# One dimensional regular grid
...
...
@@ -60,29 +68,47 @@ if __name__ == '__main__':
position_space
=
ift
.
HPSpace
(
128
)
mask
=
make_random_mask
()
# specify harmonic space corresponding to signal
# the signal degree of freedom will live here
harmonic_space
=
position_space
.
get_default_codomain
()
# harmonic transform from harmonic space to position space
HT
=
ift
.
HarmonicTransformOperator
(
harmonic_space
,
target
=
position_space
)
# Set correlation structure with a power spectrum and build
# prior correlation covariance
# define 1D isotropic power spectrum
def
power_spectrum
(
k
):
return
100.
/
(
20.
+
k
**
3
)
power_space
=
ift
.
PowerSpace
(
harmonic_space
)
PD
=
ift
.
PowerDistributor
(
harmonic_space
,
power_space
)
# 1D spectral space in which power spectrum lives
power_space
=
ift
.
PowerSpace
(
harmonic_space
)
# its mapping to (higher dimentional) harmonic space
PD
=
ift
.
PowerDistributor
(
harmonic_space
,
power_space
)
# applying the mapping to the 1D spectrum
prior_correlation_structure
=
PD
(
ift
.
PS_field
(
power_space
,
power_spectrum
))
# inserting the result into the diagonal of an harmonic space operator
S
=
ift
.
DiagonalOperator
(
prior_correlation_structure
)
# S is now the field covariance
# Build instrument response consisting of a discretization, mask
# and harmonic transformaion
# data lives in geometry free space, thus we need to remove geometry
GR
=
ift
.
GeometryRemover
(
position_space
)
# masking operator, to model that parts of the field where not observed
mask
=
ift
.
Field
.
from_global_data
(
position_space
,
mask
)
Mask
=
ift
.
DiagonalOperator
(
mask
)
# compile response operator out of
# - an harmic transform (to get to image space)
# - the application of the mask
# - the removal of geometric information
R
=
GR
(
Mask
(
HT
))
# find out where the data then lives
data_space
=
GR
.
target
# Set the noise covariance
# Set the noise covariance
N
noise
=
5.
N
=
ift
.
ScalingOperator
(
noise
,
data_space
)
...
...
@@ -92,13 +118,14 @@ if __name__ == '__main__':
data
=
R
(
MOCK_SIGNAL
)
+
MOCK_NOISE
# Build propagator D and information source j
j
=
R
.
adjoint_times
(
N
.
inverse_times
(
data
))
D_inv
=
R
.
adjoint
(
N
.
inverse
(
R
))
+
S
.
inverse
# Make it invertible
j
=
R
.
adjoint_times
(
N
.
inverse_times
(
data
))
# Make propagator invertible
IC
=
ift
.
GradientNormController
(
iteration_limit
=
500
,
tol_abs_gradnorm
=
1e-3
)
D
=
ift
.
InversionEnabler
(
D_inv
,
IC
,
approximation
=
S
.
inverse
).
inverse
# WIENER FILTER
# m = D j
m
=
D
(
j
)
# PLOTTING
...
...
demos/getting_started_2.py
View file @
8a74ad03
...
...
@@ -13,14 +13,20 @@
#
# Copyright(C) 2013-2018 Max-Planck-Society
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
############################################################
# Lognormal field reconstruction from Poisson data
# from inhomogenous exposure (in case for 2D mode)
# 1D (set mode=0), 2D (mode=1), or on the sphere (mode=2)
#############################################################
import
nifty5
as
ift
import
numpy
as
np
def
get_2D_exposure
():
# set up a structured exposure for 2D mode
x_shape
,
y_shape
=
position_space
.
shape
exposure
=
np
.
ones
(
position_space
.
shape
)
...
...
@@ -39,25 +45,33 @@ if __name__ == '__main__':
# FIXME description of the tutorial
np
.
random
.
seed
(
41
)
# Set up the position space of the signal
#
# # One dimensional regular grid with uniform exposure
# position_space = ift.RGSpace(1024)
# exposure = ift.Field.full(position_space, 1.)
# Two-dimensional regular grid with inhomogeneous exposure
position_space
=
ift
.
RGSpace
([
512
,
512
])
exposure
=
get_2D_exposure
()
# Sphere with uniform exposure
# position_space = ift.HPSpace(128)
# exposure = ift.Field.full(position_space, 1.)
# Defining harmonic space and transform
# Choose problem geometry and masking
mode
=
2
# 1D (mode=0), 2D (mode=1), or on the sphere (mode=2)
# Set up the position space of the signal depending on mode
if
mode
==
0
:
# One dimensional regular grid with uniform exposure
position_space
=
ift
.
RGSpace
(
1024
)
exposure
=
ift
.
Field
.
full
(
position_space
,
1.
)
elif
mode
==
1
:
# Two-dimensional regular grid with inhomogeneous exposure
position_space
=
ift
.
RGSpace
([
512
,
512
])
exposure
=
get_2D_exposure
()
else
:
# Sphere with uniform exposure
position_space
=
ift
.
HPSpace
(
128
)
exposure
=
ift
.
Field
.
full
(
position_space
,
1.
)
# Defining harmonic space and harmonic transform
harmonic_space
=
position_space
.
get_default_codomain
()
HT
=
ift
.
HarmonicTransformOperator
(
harmonic_space
,
position_space
)
# domain over which the field's degrees of freedom live
domain
=
ift
.
DomainTuple
.
make
(
harmonic_space
)
# true value of the of those
position
=
ift
.
from_random
(
'normal'
,
domain
)
# Define power spectrum and amplitudes
...
...
@@ -104,4 +118,4 @@ if __name__ == '__main__':
plot
.
add
(
GR
.
adjoint
(
data
),
title
=
'Data'
)
plot
.
add
(
reconst
,
title
=
'Reconstruction'
)
plot
.
add
(
reconst
-
signal
,
title
=
'Residuals'
)
plot
.
output
(
name
=
'getting_started_2.p
ng
'
,
xsize
=
16
,
ysize
=
16
)
plot
.
output
(
name
=
'getting_started_2.p
df
'
,
xsize
=
16
,
ysize
=
16
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment