Commit 8bc6b016 authored by Russell Luke's avatar Russell Luke
Browse files

up to self.illumination = config['abs_illumination']

parent b1a2d979
%% Cell type:code id: tags:
``` python
import numpy as np
from scipy.io import loadmat
%pylab inline
```
%%%% Output: stream
Populating the interactive namespace from numpy and matplotlib
%% Cell type:code id: tags:
``` python
inp=loadmat('../../../InputData/OrbitalTomog/coronen_homo1_fourier_noise15.mat')
imshow(inp['I2'])
# Berechnung und Speicherung als png-Datei des Supports
# Autokorrelation
threshold_autocorr=0.1;
support0=np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(inp['I2'])));
cond2=(support0 < threshold_autocorr*np.amax(support0)).astype(uint);
subplot(121)
imshow(support0.real)
colorbar()
subplot(122)
imshow(cond2)
colorbar()
# Anfangsbedingungen
support=support0;
F0=inp['I2']**0.5;
ph_init = 2*np.pi*np.random.rand(F0.shape);
# ph_init = np.angle(np.fft.fft2(ph_init));
u0 = F0 * np.exp(1j.*ph_init);
previous = np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(u0)));
```
%%%% Output: execute_result
<matplotlib.colorbar.Colorbar at 0x7f0dcab00198>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
imshow(inp["I2"])
```
%%%% Output: execute_result
<matplotlib.image.AxesImage at 0x7f0dca741358>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
inp=loadmat('../../../InputData/OrbitalTomog/coronen_homo1_fourier_noise15.mat')
%Parametereinstellung
N_ER=12;
N_HIO=0;
N_RAAR=0;
threshold_autocorr=0.1;
beta=0.9;
N_Ges=N_ER+N_HIO+N_RAAR;
n_Ges=0;
%Berechnung und Speicherung als png-Datei des Supports
%Autokorrelation
support0=fftshift(ifft2(ifftshift(I2)));
cond2=support0 < threshold_autocorr*max(support0(:));
support0=ones(size(support0));
support0(cond2)=0;
figure(1); imagesc(support0);
daspect([1 1 1]);
zoom(1);
print(gcf, '-dpng', 'support0', '-r150');
%%
%Anfangsbedingungen
support=support0;
F0=I2.^0.5;
ph_init = rand(size(F0));
ph_init = angle(fft2(ph_init));
G2 = F0 .* exp(1j.*ph_init);
previous = fftshift(ifft2(ifftshift(G2)));
%%
%Erstellung eines neuen Ordners mit Angaben ueber die gewaehlten Parameter
name_folder= sprintf('ER_%.f_HIO_%.f_RAAR_%.f_beta_%.2f',N_ER, N_HIO, N_RAAR, beta);
mkdir(name_folder)
oldFolder = cd(name_folder);
%Speichern der gewaehlten Parameter
fid = fopen('Parameter.txt', 'w');
fprintf(fid, 'N_ER\t%.f\r\nN_HIO\t%.f\r\nN_RAAR\t%.f\r\nthreshold_autocorr\t%.1f\r\nbeta\t%.2f', N_ER, N_HIO,N_RAAR,threshold_autocorr, beta);
fclose(fid);
%Der Fehler wird nach jeder Iteration in der Datei 'error.txt'
%abgespeichert
fid = fopen('error.txt', 'w');
E = zeros(N_Ges,1);
%%
%HIO-Algorithmus
```
%% Cell type:code id: tags:
``` python
imshow(np.ones((16,16)))
```
%%%% Output: execute_result
<matplotlib.image.AxesImage at 0x7f46afb32588>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
ff = {'a':1, 'b':3}
```
%% Cell type:code id: tags:
``` python
if 'c' not in ff:
ff['c'] = 2
ff
```
%%%% Output: execute_result
{'a': 1, 'b': 3, 'c': 2}
%% Cell type:code id: tags:
``` python
```
......
import sys
sys.path.append('..')
from . import coronene_test
from .phase import Phase
sys.path.append('../../../')
# from .
import coronene_test # base config
import orbitaltomog_data_processor # extends config
from phase import Phase
# sys.path.append('../proxtoolbox/Problems/Phase')
orbit = Phase(coronene_test.new_config)
orbit_config = orbitaltomog_data_processor.data_processor(coronene_test.new_config)
orbit = Phase(orbit_config)
orbit.solve()
orbit.show()
\ No newline at end of file
%% Cell type:code id: tags:
``` python
import numpy as np
from scipy.io import loadmat
%pylab inline
```
%%%% Output: stream
Populating the interactive namespace from numpy and matplotlib
%% Cell type:code id: tags:
``` python
inp=loadmat('../../../InputData/OrbitalTomog/coronen_homo1_fourier_noise15.mat')
imshow(inp['I2'])
# Berechnung und Speicherung als png-Datei des Supports
# Autokorrelation
threshold_autocorr=0.1;
support0=np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(inp['I2'])));
cond2=(support0 < threshold_autocorr*np.amax(support0)).astype(uint);
subplot(121)
imshow(support0.real)
colorbar()
subplot(122)
imshow(cond2)
colorbar()
# Anfangsbedingungen
support=support0;
F0=inp['I2']**0.5;
ph_init = 2*np.pi*np.random.rand(F0.shape);
# ph_init = np.angle(np.fft.fft2(ph_init));
u0 = F0 * np.exp(1j.*ph_init);
previous = np.fft.fftshift(np.fft.ifft2(np.fft.ifftshift(u0)));
```
%%%% Output: execute_result
<matplotlib.colorbar.Colorbar at 0x7f0dcab00198>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
imshow(inp["I2"])
```
%%%% Output: execute_result
<matplotlib.image.AxesImage at 0x7f0dca741358>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
inp=loadmat('../../../InputData/OrbitalTomog/coronen_homo1_fourier_noise15.mat')
%Parametereinstellung
N_ER=12;
N_HIO=0;
N_RAAR=0;
threshold_autocorr=0.1;
beta=0.9;
N_Ges=N_ER+N_HIO+N_RAAR;
n_Ges=0;
%Berechnung und Speicherung als png-Datei des Supports
%Autokorrelation
support0=fftshift(ifft2(ifftshift(I2)));
cond2=support0 < threshold_autocorr*max(support0(:));
support0=ones(size(support0));
support0(cond2)=0;
figure(1); imagesc(support0);
daspect([1 1 1]);
zoom(1);
print(gcf, '-dpng', 'support0', '-r150');
%%
%Anfangsbedingungen
support=support0;
F0=I2.^0.5;
ph_init = rand(size(F0));
ph_init = angle(fft2(ph_init));
G2 = F0 .* exp(1j.*ph_init);
previous = fftshift(ifft2(ifftshift(G2)));
%%
%Erstellung eines neuen Ordners mit Angaben ueber die gewaehlten Parameter
name_folder= sprintf('ER_%.f_HIO_%.f_RAAR_%.f_beta_%.2f',N_ER, N_HIO, N_RAAR, beta);
mkdir(name_folder)
oldFolder = cd(name_folder);
%Speichern der gewaehlten Parameter
fid = fopen('Parameter.txt', 'w');
fprintf(fid, 'N_ER\t%.f\r\nN_HIO\t%.f\r\nN_RAAR\t%.f\r\nthreshold_autocorr\t%.1f\r\nbeta\t%.2f', N_ER, N_HIO,N_RAAR,threshold_autocorr, beta);
fclose(fid);
%Der Fehler wird nach jeder Iteration in der Datei 'error.txt'
%abgespeichert
fid = fopen('error.txt', 'w');
E = zeros(N_Ges,1);
%%
%HIO-Algorithmus
```
%% Cell type:code id: tags:
``` python
imshow(np.ones((16,16)))
```
%%%% Output: execute_result
<matplotlib.image.AxesImage at 0x7f46afb32588>
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:code id: tags:
``` python
ff = {'a':1, 'b':3}
```
%% Cell type:code id: tags:
``` python
if 'c' not in ff:
ff['c'] = 2
ff
```
%%%% Output: execute_result
{'a': 1, 'b': 3, 'c': 2}
%% Cell type:code id: tags:
``` python
```
......
......@@ -22,8 +22,8 @@ def data_processor(config):
# Anfangsbedingungen
ph_init = 2 * np.pi * np.random.rand(ny, nx)
# ph_init = np.angle(np.fft.fft2(ph_init));
config['u0'] = inp * np.exp(1j * ph_init)
previous = fft.fftshift(fft.ifft2(fft.ifftshift(config['u0'])))
config['u_0'] = inp * np.exp(1j * ph_init)
previous = fft.fftshift(fft.ifft2(fft.ifftshift(config['u_0'])))
plt.figure(figsize=(15, 4))
plt.subplot(131)
......@@ -39,3 +39,10 @@ def data_processor(config):
plt.colorbar()
plt.title("Initial support")
plt.show()
# Other settings
config['fresnel_nr'] = 0
config['FT_conv_kernel'] = 1
config['use_farfield_formula'] = True
return config
......@@ -5,299 +5,155 @@ from proxtoolbox import Algorithms
from proxtoolbox import ProxOperators
from proxtoolbox.ProxOperators.proxoperators import ProxOperator
from proxtoolbox.Problems.Phase import Graphics
# from .proxoperators import ProxOperator
#from phase_retrieval.back_end_utilities import norm
from numpy.linalg import norm
import numpy as np
import h5py
from numpy import square, sqrt, nonzero, size
from numpy import square, sqrt
class Phase(Problem):
"""
Phase Problem
"""
config = { } # This line does not do anything.
def __init__(self, new_config={}):
config = {}
def __init__(self, new_config):
"""
The initialization of a Phase instance takes the default configuration
and updates the parameters with the arguments in new_config.
Parameters
----------
new_config : dict, optional - Parameters to initialize the problem. If unspecified, the default config is used.
new_config : dict with non-empty keys:
object, constraint, experiment, distance, algorithm
Ny, Nx
noise
MAXIT, TOL
diagnostic
data, data_norm, support,
"""
self.config = new_config
self.config = new_config
#self.back_end = back_end
#call data processor, read data
module = __import__(self.config['data_filename'])
data_processor = getattr(module, self.config['data_filename'])
data_processor(self.config)
# module = __import__(self.config['data_filename'])
# data_processor = getattr(module, self.config['data_filename'])
# data_processor(self.config)
if 'Nz' not in self.config:
self.config['Nz'] = 1
#If method_config[formulation is does not exist, i.e. not specified in
#the *_in.m file, use the product space as the default.
# If method_config['formulation'] does not exist, use the product space as the default.
if 'formulation' in self.config:
formulation = self.config['formulation']
else:
formulation = 'product space'
# Set the projectors and inputs based on the types of constraints and
# experiments
proxoperators = ['','','']
# Set the projectors and inputs based on the types of constraints and experiments
used_proxoperators = ['', '', '']
# Projector 1 (real / object space)
if self.config['constraint'] == 'support only':
proxoperators[0] = 'P_S'
used_proxoperators[0] = 'P_S'
elif self.config['constraint'] == 'real and support':
proxoperators[0] ='P_S_real'
elif self.config['constraint'] =='nonnegative and support':
proxoperators[0] ='P_SP'
elif self.config['constraint'] =='amplitude only':
proxoperators[0] ='P_amp'
elif self.config['constraint'] == 'phase on support':
proxoperators[0] ='P_Amod'
elif self.config['constraint'] =='minimum amplitude':
proxoperators[0] = 'P_min_amp'
used_proxoperators[0] = 'P_S_real'
elif self.config['constraint'] == 'nonnegative and support':
used_proxoperators[0] = 'P_SP'
elif self.config['constraint'] == 'amplitude only':
used_proxoperators[0] = 'P_amp'
proxoperators[1]='Approx_P_FreFra_Poisson'
# Projector 2 (k / Fourier space)
# used_proxoperators[1] = 'P_M' # 'Approx_P_FreFra_Poisson'
used_proxoperators[1] = 'Approx_P_FreFra_Poisson'
self.config['proxoperators'] = []
for prox in proxoperators:
for prox in used_proxoperators:
if prox != '':
self.config['proxoperators'].append(getattr(ProxOperators, prox))
# input.Proj1_input.F=F; % is it any more expensive to pass everything
# into the projectors rather than just a selection of data and
# parameters? If not, and we pass everything anyway, there is no need
# to create a new structure element.
if 'product_space_dimension' not in self.config:
self.config['product_space_dimension'] = 1
# set the animation program:
self.config['animation']='Phase_animation'
#
# if you are only working with two sets but
# want to do averaged projections
# (= alternating projections on the product space)
# or RAAR on the product space (=swarming), then
# you will want to change product_space_dimension=2
# and adjust your input files and projectors accordingly.
# you could also do this within the data processor
self.config['animation'] = 'Phase_animation'
# if you are only working with two sets but want to do averaged projections (= alternating projections on the
# product space) or RAAR on the product space (=swarming), then you will want to change
# product_space_dimension=2 and adjust your input files and projectors accordingly. you could also do this
# within the data processor
self.config['TOL2'] = 1e-15
#To estimate the gap in the sequential formulation, we build the
# appropriate point in the product space. This allows for code reuse.
# Note for sequential diversity diffraction, input.Proj1 is the "RCAAR"
# version of the function.
# To estimate the gap in the sequential formulation, we build the appropriate point in the product space.
# This allows for code reuse. Note for sequential diversity diffraction, input.Proj1 is the "RCAAR" version
# of the function.
if formulation == 'sequential':
for j in range(self.config['product_space_dimension']):
self.config['proj_iter'] =j
proj1 = self.config['proxoperators'][0](self.config)
u_1[:,:,j]= proj1.work(self.config['u_0'])
self.config['proj_iter'] = mod(j,config['product_space_dimension'])+1
proj1 = self.config['proxoperators'][0](self.config)
u_1[:,:,j]= proj1.work(self.config['u_0'])
end
else: #i.e. formulation=='product space'
proj1 = self.config['proxoperators'][0](self.config)
u_1 = proj1.work(self.config['u_0'])
proj2 = self.config['proxoperators'][1](self.config)
u_2 = proj2.work(u_1)
raise NotImplementedError("This needs careful matlab -> python translation")
# for j in range(self.config['product_space_dimension']):
# self.config['proj_iter'] = j
# proj1 = self.config['proxoperators'][0](self.config)
# u_1[:, :, j] = proj1.work(self.config['u_0'])
# self.config['proj_iter'] = mod(j, config['product_space_dimension']) + 1
# proj1 = self.config['proxoperators'][0](self.config)
# u_1[:, :, j] = proj1.work(self.config['u_0'])
# end
else: # i.e. formulation=='product space'
proj_1 = self.config['proxoperators'][0](self.config)#, self.back_end)
u_1 = proj_1.work(self.config['u_0'])
proj_2 = self.config['proxoperators'][1](self.config)#, self.back_end)
u_2 = proj_2.work(u_1)
# estimate the gap in the relevant metric
if self.config['Nx'] ==1 or self.config['Ny']==1 :
tmp_gap = square(norm(u_1-u_2)/self.config['norm_rt_data'])
if self.config['Nx'] == 1 or self.config['Ny'] == 1: # 1D problem
tmp_gap = square(norm(u_1 - u_2) / self.config['norm_data']) # norm_rt_data
elif self.config['product_space_dimension'] == 1:
tmp_gap = (norm(u_1-u_2)/self.config['norm_rt_data'])**2
tmp_gap = (norm(u_1 - u_2) / self.config['norm_data']) ** 2 # norm_rt_data
else:
tmp_gap=0
tmp_gap = 0
for j in range(self.config['product_space_dimension']):
# compute (||P_Sx-P_Mx||/norm_data)^2:
tmp_gap = tmp_gap+(norm(u_1[:,:,j]-u_2[:,:,j])/self.config['norm_rt_data'])**2
gap_0=sqrt(tmp_gap)
tmp_gap = tmp_gap + (norm(u_1[:, :, j] - u_2[:, :, j]) / self.config['norm_data']) ** 2 # norm_rt_data
gap_0 = sqrt(tmp_gap)
# sets the set fattening to be a percentage of the initial gap to the unfattened set with respect to the
# relevant metric (KL or L2), that percentage given by input.data_ball input by the user.
self.config['data_ball'] = self.config['data_ball'] * gap_0
# the second tolerance relative to the order of magnitude of the metric
self.config['TOL2'] = self.config['data_ball'] * 1e-15
# self.config['proxoperators']
self.algorithm = getattr(algorithms, self.config['algorithm'])(self.config)#, self.back_end)
# sets the set fattening to be a percentage of the
# initial gap to the unfattened set with
# respect to the relevant metric (KL or L2),
# that percentage given by
# input.data_ball input by the user.
self.config['data_ball']=self.config['data_ball']*gap_0
# the second tolerance relative to the oder of
# magnitude of the metric
self.config['TOL2'] = self.config['data_ball']*1e-15
self.config['proxoperators']
self.algorithm = getattr(Algorithms, self.config['algorithm'])(self.config)
def _presolve(self):
"""
Prepares argument for actual solving routine
"""
pass # Actually nothing for the phase problem
def _solve(self):
"""
Runs the algorithm to solve the given sudoku problem
Runs the algorithm to solve the given problem