From 15b9227c7cc09cb9c88c52920b95a804b33a9138 Mon Sep 17 00:00:00 2001 From: Jan Caron <j.caron@fz-juelich.de> Date: Sun, 24 Aug 2014 23:16:39 +0200 Subject: [PATCH] Added index converter class to convert matrix indices into 3D coordinates --- pyramid/converter.py | 68 +++++++++++++++++++++++++++++++++ pyramid/regularisator.py | 16 ++++++++ scripts/collaborations/zi_an.py | 22 ++++++----- 3 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 pyramid/converter.py diff --git a/pyramid/converter.py b/pyramid/converter.py new file mode 100644 index 0000000..3303227 --- /dev/null +++ b/pyramid/converter.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Aug 19 08:48:45 2014 + +@author: Jan +""" # TODO: Docstring + +# TODO: put into other class +# TODO: use 3 components (more complex) +# TODO: take masks into account + + +import numpy as np + + +class IndexConverter3components(object): + + def __init__(self, dim): + self.dim = dim + self.size_3d = np.prod(dim) + self.size_2d = dim[2]*dim[1] + + def ind_to_coord(self, ind): + m, remain = int(ind/self.size_3d), ind % self.size_3d + z, remain = int(remain/self.size_2d), remain%self.size_2d + y, x = int(remain/self.dim[2]), remain%self.dim[2] + coord = m, z, y, x + return coord + + def coord_to_ind(self, coord): + z, y, x = coord + ind = [i*self.size_3d + z*self.size_2d + y*self.dim[2] + x for i in range(3)] + return ind + + def find_neighbour_ind(self, coord): + z, y, x = coord + t, d = (z-1, y, x), (z+1, y, x) # t: top, d: down + f, b = (z, y-1, x), (z, y+1, x) # f: front, b: back + l, r = (z, y, x-1), (z, y, x+1) # l: left, r: right + neighbours = [self.coord_to_ind(i) for i in [t, d, f, b, l, r]] + return np.reshape(np.swapaxes(neighbours, 0, 1), (3, 3, 2)) + + +class IndexConverter(object): + + def __init__(self, dim): + self.dim = dim + self.size_2d = dim[2]*dim[1] + + def ind_to_coord(self, ind): + z, remain = int(ind/self.size_2d), ind%self.size_2d + y, x = int(remain/self.dim[2]), remain%self.dim[2] + coord = z, y, x + return coord + + def coord_to_ind(self, coord): + z, y, x = coord + ind = z*self.size_2d + y*self.dim[2] + x + return ind + + def find_neighbour_ind(self, coord): + z, y, x = coord + t, d = (z-1, y, x), (z+1, y, x) # t: top, d: down + f, b = (z, y-1, x), (z, y+1, x) # f: front, b: back + l, r = (z, y, x-1), (z, y, x+1) # l: left, r: right + neighbours = [self.coord_to_ind(i) for i in [t, d, f, b, l, r]] + return neighbours + return np.reshape(neighbours, (3, 2)) diff --git a/pyramid/regularisator.py b/pyramid/regularisator.py index b3621b0..5ade7c6 100644 --- a/pyramid/regularisator.py +++ b/pyramid/regularisator.py @@ -66,6 +66,22 @@ class FirstOrderRegularisator(Regularisator): # TODO: Docstring! def __init__(self, lam, size, x_a=None): + Sa_inv = lam * eye(size) + + + + + + csr_matrix(coo_matrix((np.tile(data, dim_rot), (rows, columns)), shape=(size_2d, size_3d))) + + term2 = [] + for i in range(3): + component = mag_data[i, ...] + for j in range(3): + if component.shape[j] > 1: + term2.append(np.diff(component, axis=j).reshape(-1)) + + super(FirstOrderRegularisator, self).__init__(Sa_inv, x_a) self.LOG.debug('Created '+str(self)) diff --git a/scripts/collaborations/zi_an.py b/scripts/collaborations/zi_an.py index 85df772..3d9b03e 100644 --- a/scripts/collaborations/zi_an.py +++ b/scripts/collaborations/zi_an.py @@ -46,21 +46,23 @@ order = 1 if smoothed_pictures: dm3_2_mag = dm3.DM3(PATH+'Output333_hw512.dm3').image dm3_4_mag = dm3.DM3(PATH+'Output334_hw512.dm3').image + dm3_2_ele = dm3.DM3(PATH+'Output335.dm3').image + dm3_4_ele = dm3.DM3(PATH+'Output336.dm3').image else: dm3_2_mag = dm3.DM3(PATH+'07_0102mag60_q3_pha_01_sb280_sc512_vf3_med5.dm3').image dm3_4_mag = dm3.DM3(PATH+'18a_0102mag_ub140_62k_q3_pha_01_sb180_sc512_vf3_med5.dm3').image -dm3_2_ele = dm3.DM3(PATH+'07_0102ele60_q3_pha_01_sb280_sc512_vf3_med5.dm3').image -dm3_4_ele = dm3.DM3(PATH+'18a_0102ele_ub140_62k_q3_pha_01_sb180_sc512_vf3_med5.dm3').image + dm3_2_ele = dm3.DM3(PATH+'07_0102ele60_q3_pha_01_sb280_sc512_vf3_med5.dm3').image + dm3_4_ele = dm3.DM3(PATH+'18a_0102ele_ub140_62k_q3_pha_01_sb180_sc512_vf3_med5.dm3').image # Construct phase maps and masks phase_map_2 = PhaseMap(a, np.array(dm3_2_mag.resize(dim_small))+0.101) phase_map_2.display_combined(density=density, interpolation=inter) plt.savefig(PATH+'phase_map_2part.png') -mask_2 = np.expand_dims(np.where(np.array(dm3_2_ele.resize(dim_small)) > threshold, +mask_2 = np.expand_dims(np.where(np.array(dm3_2_ele.resize(dim_small)) >= threshold, True, False), axis=0) phase_map_4 = PhaseMap(a, np.array(dm3_4_mag.resize(dim_small))-2.546) phase_map_4.display_combined(density=density, interpolation=inter) plt.savefig(PATH+'phase_map_4part.png') -mask_4 = np.expand_dims(np.where(np.array(dm3_4_ele.resize(dim_small)) > threshold, +mask_4 = np.expand_dims(np.where(np.array(dm3_4_ele.resize(dim_small)) >= threshold, True, False), axis=0) # Reconstruct the magnetic distribution: tic = clock() @@ -78,12 +80,12 @@ phase_map_rec_4.display_combined('Reconstr. Distribution', density=density, inte plt.savefig(PATH+'phase_map_4part_rec.png') # Plot the magnetization: axis = (mag_data_rec_2*(1/mag_data_rec_2.magnitude.max())).quiver_plot() -axis.set_xlim(20, 45) -axis.set_ylim(20, 45) +#axis.set_xlim(20, 45) +#axis.set_ylim(20, 45) plt.savefig(PATH+'mag_data_2part.png') axis = (mag_data_rec_4*(1/mag_data_rec_4.magnitude.max())).quiver_plot() -axis.set_xlim(20, 45) -axis.set_ylim(20, 45) +#axis.set_xlim(20, 45) +#axis.set_ylim(20, 45) plt.savefig(PATH+'mag_data_4part.png') # Display the Phase: phase_diff_2 = phase_map_rec_2-phase_map_2 @@ -96,13 +98,13 @@ plt.savefig(PATH+'phase_map_4part_diff.png') print 'Average difference (2 cubes):', np.average(phase_diff_2.phase) print 'Average difference (4 cubes):', np.average(phase_diff_4.phase) # Plot holographic contour maps with overlayed magnetic distributions: -axis = phase_map_rec_2.display_holo('Magnetization Overlay', density=density, interpolation=inter) +axis = phase_map_rec_2.display_holo('Magnetization Overlay', density=0.1, interpolation=inter) (mag_data_rec_2*(1/mag_data_rec_2.magnitude.max())).quiver_plot(axis=axis) axis = plt.gca() axis.set_xlim(20, 45) axis.set_ylim(20, 45) plt.savefig(PATH+'phase_map_2part_holo.png') -axis = phase_map_rec_4.display_holo('Magnetization Overlay', density=density, interpolation=inter) +axis = phase_map_rec_4.display_holo('Magnetization Overlay', density=0.1, interpolation=inter) (mag_data_rec_4*(1/mag_data_rec_4.magnitude.max())).quiver_plot(axis=axis) axis = plt.gca() axis.set_xlim(20, 45) -- GitLab