Skip to content
Snippets Groups Projects
Commit d2eef42e authored by Jan Caron's avatar Jan Caron
Browse files

Updated long overdue scripts to work with new layout and refactoring!

parent a2d3d8b1
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""Create PhaseMaps from MagDatas via simple axis projection."""
import numpy as np
import pyramid as py
import logging.config
logging.config.fileConfig(py.LOGGING_CONFIG, disable_existing_loggers=False)
###################################################################################################
filename = 'magdata_mc_homog_sphere_dim=(32, 32, 32).nc'
b_0 = 1.
axis = 'z'
dim_uv = None
angles = np.linspace()
###################################################################################################
mag_data = py.VectorData.load_from_netcdf4(filename)
phase_map = py.pm(mag_data, mode=axis, dim_uv=dim_uv, b_0=b_0)
phase_map.save_to_netcdf4('phasemap_{}_axis={}'.format(filename.replace('magdata_', ''), axis))
phase_map.display_combined()
dim = mag_data.dim
dim_uv = (500, 200)
angles = np.arange(-60, 61, 5)#[0, 20, 40, 60]
#mag_data_xy = mag_data.copy()
# mag_data_xy.field[2] = 0
#
#mag_data_z = mag_data.copy()
# mag_data_z.field[0] = 0
# mag_data_z.field[1] = 0
# Iterate over all angles:
for angle in angles:
angle_rad = np.pi/2 + angle*np.pi/180
projector = XTiltProjector(dim, angle_rad, dim_uv)
mag_proj = projector(mag_data)
phase_map = PhaseMapperRDFC(Kernel(mag_data.a, projector.dim_uv))(mag_proj)
phase_map.display_phase('Phase Map Nanowire Tip', cmap='gray')
plt.savefig(PATH+'_nanowire_xtilt_{}.png'.format(angle), dpi=500)
# phase_map = PhaseMapperRDFC(Kernel(mag_data.a, projector.dim_uv))(mag_proj)
# phase_map.display_combined('Phase Map Nanowire Tip', gain=gain,
# interpolation='bilinear')
# plt.savefig(PATH+'_nanowire_xtilt_{}.png'.format(angle), dpi=500)
# mag_proj.scale_down(2)
# axis = mag_proj.quiver_plot()
# plt.savefig(PATH+'_nanowire_mag_xtilt_{}.png'.format(angle), dpi=500)
# axis = mag_proj.quiver_plot(log=True)
# plt.savefig(PATH+'_nanowire_mag_log_xtilt_{}.png'.format(angle), dpi=500)
# Close plots:
plt.close('all')
gc.collect()
print 'RSS = {:.2f} MB'.format(proc.memory_info().rss/1024.**2)
print angle, 'deg. done!'
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""Reconstruct a magnetization distributions from a single phase map.""" """Reconstruct a magnetization distributions from a single phase map."""
from __future__ import print_function
import numpy as np import numpy as np
import pyramid as pr import pyramid as pr
from jutil.taketime import TakeTime from jutil.taketime import TakeTime
import logging.config import logging.config
logging.config.fileConfig(pr.LOGGING_CONFIG, disable_existing_loggers=False) logging.config.fileConfig(pr.LOGGING_CONFIG, disable_existing_loggers=False)
################################################################################################### ###################################################################################################
phase_name = 'phasemap_gui_Pha1' phase_name = 'phasemap_gui_150917_skyrm_M_100mT'
b_0 = 1 # in T b_0 = 1 # in T
lam = 1E-1 lam = 1E-1
max_iter = 100 max_iter = 100
...@@ -21,7 +21,7 @@ order = 1 ...@@ -21,7 +21,7 @@ order = 1
# Load phase map: # Load phase map:
phase_map = pr.PhaseMap.load_from_netcdf4(phase_name+'.nc') phase_map = pr.PhaseMap.load_from_hdf5(phase_name + '.hdf5')
phase_map.pad((buffer_pixel, buffer_pixel)) phase_map.pad((buffer_pixel, buffer_pixel))
dim = (1,) + phase_map.dim_uv dim = (1,) + phase_map.dim_uv
...@@ -41,14 +41,17 @@ with TakeTime('reconstruction time'): ...@@ -41,14 +41,17 @@ with TakeTime('reconstruction time'):
if order >= 1: if order >= 1:
offset, ramp = param_cache[0][0], (param_cache[1][0], param_cache[2][0]) offset, ramp = param_cache[0][0], (param_cache[1][0], param_cache[2][0])
elif order == 0: elif order == 0:
offset = param_cache[0][0] offset, ramp = param_cache[0][0], (0, 0)
else:
offset, ramp = 0, (0, 0)
mag_data_buffer = mag_data_rec.copy() mag_data_buffer = mag_data_rec.copy()
mag_data_rec.crop((0, buffer_pixel, buffer_pixel)) mag_data_rec.crop((0, buffer_pixel, buffer_pixel))
mag_name = '{}_lam={}'.format(phase_name.replace('phasemap', 'magdata_rec'), lam) mag_name = '{}_lam={}'.format(phase_name.replace('phasemap', 'magdata_rec'), lam)
mag_data_rec.save_to_netcdf4(mag_name+'.nc') mag_data_rec = mag_data_rec.flip(axis='y')
mag_data_rec.save_to_hdf5(mag_name + '.hdf5', overwrite=True)
# Plot stuff: # Plot stuff:
mag_data_rec.quiver_plot('Reconstructed Distribution', ar_dens=int(np.ceil(np.max(dim)/128.))) mag_data_rec.quiver_plot('Reconstructed Distribution', ar_dens=int(np.ceil(np.max(dim) / 128.)))
phase_map.crop((buffer_pixel, buffer_pixel)) phase_map.crop((buffer_pixel, buffer_pixel))
phase_map.display_combined('Input Phase') phase_map.display_combined('Input Phase')
phase_map -= fwd_model.ramp(index=0) phase_map -= fwd_model.ramp(index=0)
...@@ -56,13 +59,13 @@ phase_map.display_combined('Input Phase (ramp corrected)') ...@@ -56,13 +59,13 @@ phase_map.display_combined('Input Phase (ramp corrected)')
phase_map_rec = pr.pm(mag_data_rec) phase_map_rec = pr.pm(mag_data_rec)
title = 'Reconstructed Phase' title = 'Reconstructed Phase'
if order >= 0: if order >= 0:
print 'offset:', offset print('offset:', offset)
title += ', fitted Offset: {:.2g} [rad]'.format(offset) title += ', fitted Offset: {:.2g} [rad]'.format(offset)
if order >= 1: if order >= 1:
print 'ramp:', ramp print('ramp:', ramp)
title += ', (Fitted Ramp: (u:{:.2g}, v:{:.2g}) [rad/nm]'.format(*ramp) title += ', (Fitted Ramp: (u:{:.2g}, v:{:.2g}) [rad/nm]'.format(*ramp)
phase_map_rec.display_combined(title) phase_map_rec.display_combined(title)
difference = (phase_map_rec.phase-phase_map.phase).mean() difference = (phase_map_rec.phase - phase_map.phase).mean()
(phase_map_rec-phase_map).display_phase('Difference (mean: {:.2g})'.format(difference)) (phase_map_rec - phase_map).display_phase('Difference (mean: {:.2g})'.format(difference))
if order is not None: if order is not None:
fwd_model.ramp(0).display_combined('Fitted Ramp') fwd_model.ramp(0).display_combined('Fitted Ramp')
...@@ -12,7 +12,7 @@ from jutil.taketime import TakeTime ...@@ -12,7 +12,7 @@ from jutil.taketime import TakeTime
logging.config.fileConfig(pr.LOGGING_CONFIG, disable_existing_loggers=False) logging.config.fileConfig(pr.LOGGING_CONFIG, disable_existing_loggers=False)
################################################################################################### ###################################################################################################
mag_name = 'magdata_mc_vortex_disc' mag_name = 'magdata_mc_horseshoe'
dim_uv = None dim_uv = None
angles = np.linspace(-90, 90, num=7) angles = np.linspace(-90, 90, num=7)
axes = {'x': True, 'y': True} axes = {'x': True, 'y': True}
...@@ -25,73 +25,67 @@ offset_max = 2 ...@@ -25,73 +25,67 @@ offset_max = 2
ramp_max = 0.01 ramp_max = 0.01
order = 1 order = 1
show_input = True show_input = True
# TODO: toggle multiprocessing if nprocs > 1 nprocs = mp.cpu_count() # or 1 for non-multiprocessing
################################################################################################### ###################################################################################################
if __name__ == '__main__': if __name__ == '__main__':
mp.freeze_support() mp.freeze_support()
# Load magnetization distribution: # Load magnetization distribution:
mag_data = pr.VectorData.load_from_hdf5(mag_name + '.hdf5') mag_data = pr.VectorData.load_from_hdf5(mag_name + '.hdf5')
dim = mag_data.dim dim = mag_data.dim
# Construct data set and regularisator: # Construct data set and regularisator:
data = pr.DataSet(mag_data.a, mag_data.dim, b_0) data = pr.DataSet(mag_data.a, mag_data.dim, b_0)
# Construct projectors: # Construct projectors:
projectors = [] projectors = []
for angle in angles: for angle in angles:
angle_rad = angle*np.pi/180 angle_rad = angle * np.pi / 180
if axes['x']: if axes['x']:
projectors.append(pr.XTiltProjector(mag_data.dim, angle_rad, dim_uv)) projectors.append(pr.XTiltProjector(mag_data.dim, angle_rad, dim_uv))
if axes['y']: if axes['y']:
projectors.append(pr.YTiltProjector(mag_data.dim, angle_rad, dim_uv)) projectors.append(pr.YTiltProjector(mag_data.dim, angle_rad, dim_uv))
# Add projectors and construct according phase maps: # Add projectors and construct according phase maps:
data.projectors = projectors data.projectors = projectors
data.phase_maps = data.create_phase_maps(mag_data) data.phase_maps = data.create_phase_maps(mag_data)
for i, phase_map in enumerate(data.phase_maps): for i, phase_map in enumerate(data.phase_maps):
offset = np.random.uniform(-offset_max, offset_max) offset = np.random.uniform(-offset_max, offset_max)
ramp_u = np.random.uniform(-ramp_max, ramp_max) ramp_u = np.random.uniform(-ramp_max, ramp_max)
ramp_v = np.random.uniform(-ramp_max, ramp_max) ramp_v = np.random.uniform(-ramp_max, ramp_max)
phase_map += pr.Ramp.create_ramp(phase_map.a, phase_map.dim_uv, (offset, ramp_u, ramp_v)) phase_map += pr.Ramp.create_ramp(phase_map.a, phase_map.dim_uv, (offset, ramp_u, ramp_v))
# Add noise if necessary: # Add noise if necessary:
if noise != 0: if noise != 0:
for i, phase_map in enumerate(data.phase_maps): for i, phase_map in enumerate(data.phase_maps):
phase_map.phase += np.random.normal(0, noise, phase_map.dim_uv) phase_map.phase += np.random.normal(0, noise, phase_map.dim_uv)
data.phase_maps[i] = phase_map data.phase_maps[i] = phase_map
# Plot input: # Plot input:
if show_input: if show_input:
for i, phase_map in enumerate(data.phase_maps): for i, phase_map in enumerate(data.phase_maps):
phase_map.display_phase() phase_map.display_phase()
# Construct mask: # Construct mask:
# if use_internal_mask: if use_internal_mask:
# data.mask = mag_data.get_mask() # Use perfect mask from mag_data! data.mask = mag_data.get_mask() # Use perfect mask from mag_data!
# else: else:
# data.set_3d_mask() # Construct mask from 2D phase masks! data.set_3d_mask() # Construct mask from 2D phase masks!
# Construct regularisator, forward model and costfunction: # Construct regularisator, forward model and costfunction:
fwd_model = pr.DistributedForwardModel(data, ramp_order=order, nprocs=4) if nprocs > 1:
fwd_model = pr.DistributedForwardModel(data, ramp_order=order, nprocs=nprocs)
else:
fwd_model = pr.ForwardModel(data, ramp_order=order)
reg = pr.FirstOrderRegularisator(data.mask, lam, add_params=fwd_model.ramp.n) reg = pr.FirstOrderRegularisator(data.mask, lam, add_params=fwd_model.ramp.n)
cost = pr.Costfunction(fwd_model, reg) cost = pr.Costfunction(fwd_model, reg)
# Reconstruct and save: # Reconstruct and save:
with TakeTime('reconstruction time'): with TakeTime('reconstruction time'):
mag_data_rec = pr.reconstruction.optimize_linear(cost, max_iter=max_iter) mag_data_rec = pr.reconstruction.optimize_linear(cost, max_iter=max_iter)
param_cache = cost.fwd_model.ramp.param_cache param_cache = cost.fwd_model.ramp.param_cache
fwd_model.finalize() fwd_model.finalize()
mag_name_rec = mag_name.replace('magdata', 'magdata_rec') mag_name_rec = mag_name.replace('magdata', 'magdata_rec')
mag_data_rec.save_to_netcdf4(mag_name_rec+'.nc') mag_data_rec.save_to_hdf5(mag_name_rec + '.hdf5', overwrite=True)
# Plot stuff: # Plot stuff:
data.display_mask(ar_dens=np.ceil(np.max(dim)/64.)) data.display_mask(ar_dens=np.ceil(np.max(dim) / 64.))
mag_data.quiver_plot3d('Original Distribution', ar_dens=np.ceil(np.max(dim)/64.)) mag_data.quiver_plot3d('Original Distribution', ar_dens=np.ceil(np.max(dim) / 64.))
mag_data_rec.quiver_plot3d('Reconstructed Distribution', ar_dens=np.ceil(np.max(dim)/64.)) mag_data_rec.quiver_plot3d('Reconstructed Distribution', ar_dens=np.ceil(np.max(dim) / 64.))
mag_data_rec.quiver_plot3d('Reconstructed Distribution', ar_dens=np.ceil(np.max(dim)/64.), mag_data_rec.quiver_plot3d('Reconstructed Distribution', ar_dens=np.ceil(np.max(dim) / 64.),
coloring='amplitude') coloring='amplitude')
import matplotlib.pyplot as plt
plt.show()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment