From fbbbf8d630e44978c94b03b63f665648ba71fd4f Mon Sep 17 00:00:00 2001
From: Jan Caron <j.caron@fz-juelich.de>
Date: Wed, 29 Oct 2014 23:41:46 +0100
Subject: [PATCH] Fixed m and n controversy:         m: i'm'age         n:
 i'n'put

---
 pyramid/costfunction.py | 10 ++++++---
 pyramid/dataset.py      | 13 ++++++-----
 pyramid/forwardmodel.py | 10 ++++-----
 pyramid/magdata.py      |  8 +++----
 pyramid/phasemapper.py  | 50 ++++++++++++++++++++---------------------
 pyramid/projector.py    |  8 +++----
 6 files changed, 52 insertions(+), 47 deletions(-)

diff --git a/pyramid/costfunction.py b/pyramid/costfunction.py
index ad7c226..ce113f9 100644
--- a/pyramid/costfunction.py
+++ b/pyramid/costfunction.py
@@ -40,6 +40,10 @@ class Costfunction(object):
     Se_inv : :class:`~numpy.ndarray` (N=2), optional
         Inverted covariance matrix of the measurement errors. The matrix has size `NxN` with N
         being the length of the targetvector y (vectorized phase map information).
+    m: int
+        Size of the image space.
+    n: int
+        Size of the input space.
 
     '''
 
@@ -53,8 +57,8 @@ class Costfunction(object):
         # Extract important information:
         self.y = data_set.phase_vec
         self.Se_inv = data_set.Se_inv
-        self.n = data_set.n * 3
-        self.m = len(self.y)
+        self.n = data_set.n
+        self.m = data_set.m
         self.LOG.debug('Created '+str(self))
 
     def __repr__(self):
@@ -161,7 +165,7 @@ class CFAdapterScipyCG(LinearOperator):
 
     @property
     def shape(self):
-        return (self.cost.data_set.m, self.cost.data_set.m)
+        return (self.cost.data_set.n, self.cost.data_set.n)
 
     @property
     def dtype(self):
diff --git a/pyramid/dataset.py b/pyramid/dataset.py
index fd5fb49..39d528c 100644
--- a/pyramid/dataset.py
+++ b/pyramid/dataset.py
@@ -46,22 +46,23 @@ class DataSet(object):
         A list of all stored :class:`~.PhaseMap` objects.
     phase_vec: :class:`~numpy.ndarray` (N=1)
         The concatenaded, vectorized phase of all ;class:`~.PhaseMap` objects.
-    n: int
-        Size of the image space.
     m: int
+        Size of the image space.
+    n: int
         Size of the input space.
+
     '''
 
     LOG = logging.getLogger(__name__+'.DataSet')
 
     @property
-    def n(self):
+    def m(self):
         return np.sum([len(p.phase_vec) for p in self.phase_maps])
 
     @property
     def Se_inv(self):
         # TODO: better implementation, maybe get-method? more flexible? input in append?
-        return sp.eye(self.n)
+        return sp.eye(self.m)
 
     @property
     def phase_vec(self):
@@ -88,9 +89,9 @@ class DataSet(object):
             'Dimension has to be a tuple of length 3!'
         if mask is not None:
             assert mask.shape == dim, 'Mask dimensions must match!'
-            self.m = 3 * np.sum(self.mask)
+            self.n = 3 * np.sum(self.mask)
         else:
-            self.m = 3 * np.prod(dim)
+            self.n = 3 * np.prod(dim)
         self.a = a
         self.dim = dim
         self.b_0 = b_0
diff --git a/pyramid/forwardmodel.py b/pyramid/forwardmodel.py
index c48a7f7..8d7d1d5 100644
--- a/pyramid/forwardmodel.py
+++ b/pyramid/forwardmodel.py
@@ -30,9 +30,9 @@ class ForwardModel(object):
         The grid spacing in nm.
     dim : tuple (N=3)
         Dimensions of the 3D magnetic distribution.
-    n: int
-        Size of the image space. Number of pixels of the 2-dimensional projected grid.
     m: int
+        Size of the image space. Number of pixels of the 2-dimensional projected grid.
+    n: int
         Size of the input space. Number of voxels of the 3-dimensional grid.
 
     '''
@@ -61,7 +61,7 @@ class ForwardModel(object):
         self.LOG.debug('Calling __call__')
         self.mag_data.set_vector(x, self.data_set.mask)
         # TODO: Multiprocessing
-        result = np.zeros(self.n)
+        result = np.zeros(self.m)
         hp = self.hook_points
         for i, projector in enumerate(self.data_set.projectors):
             phase_map = self.phase_mappers[projector.dim_uv](projector(self.mag_data))
@@ -90,7 +90,7 @@ class ForwardModel(object):
         '''
         self.LOG.debug('Calling jac_dot')
         self.mag_data.set_vector(vector, self.data_set.mask)
-        result = np.zeros(self.n)
+        result = np.zeros(self.m)
         hp = self.hook_points
         for i, projector in enumerate(self.data_set.projectors):
             mag_vec = self.mag_data.mag_vec
@@ -119,7 +119,7 @@ class ForwardModel(object):
         '''
         self.LOG.debug('Calling jac_T_dot')
 
-        result = np.zeros(self.m)
+        result = np.zeros(self.n)
         hp = self.hook_points
         for i, projector in enumerate(self.data_set.projectors):
             vec = vector[hp[i]:hp[i+1]]
diff --git a/pyramid/magdata.py b/pyramid/magdata.py
index 5989153..cfb0ddf 100644
--- a/pyramid/magdata.py
+++ b/pyramid/magdata.py
@@ -281,9 +281,9 @@ class MagData(object):
             Order is: first all `x`-, then all `y`-, then all `z`-components.
 
         '''
-        return np.reshape([self.magnitude[2][mask],
+        return np.reshape([self.magnitude[0][mask],
                            self.magnitude[1][mask],
-                           self.magnitude[0][mask]], -1)
+                           self.magnitude[2][mask]], -1)
 
     def set_vector(self, vector, mask=None):
         '''Set the magnetic components of the masked pixels to the values specified by `vector`.
@@ -304,9 +304,9 @@ class MagData(object):
         assert np.size(vector) % 3 == 0, 'Vector has to contain all 3 components for every pixel!'
         count = np.size(vector)/3
         if mask is not None:
-            self.magnitude[2][mask] = vector[:count]  # x-component
+            self.magnitude[0][mask] = vector[:count]  # x-component
             self.magnitude[1][mask] = vector[count:2*count]  # y-component
-            self.magnitude[0][mask] = vector[2*count:]  # z-component
+            self.magnitude[2][mask] = vector[2*count:]  # z-component
         else:
             self.mag_vec = vector
 
diff --git a/pyramid/phasemapper.py b/pyramid/phasemapper.py
index 1d4205a..f121e3b 100644
--- a/pyramid/phasemapper.py
+++ b/pyramid/phasemapper.py
@@ -75,9 +75,9 @@ class PhaseMapperRDFC(PhaseMapper):
     geometry : {'disc', 'slab'}, optional
         Elementary geometry which is used for the phase contribution of one pixel.
         Default is 'disc'.
-    n: int
-        Size of the image space.
     m: int
+        Size of the image space.
+    n: int
         Size of the input space.
 
     '''
@@ -87,8 +87,8 @@ class PhaseMapperRDFC(PhaseMapper):
     def __init__(self, kernel):
         self.LOG.debug('Calling __init__')
         self.kernel = kernel
-        self.n = np.prod(kernel.dim_uv)
-        self.m = 2 * self.n
+        self.m = np.prod(kernel.dim_uv)
+        self.n = 2 * self.m
         self.LOG.debug('Created '+str(self))
 
     def __repr__(self):
@@ -135,8 +135,8 @@ class PhaseMapperRDFC(PhaseMapper):
 
         '''
         self.LOG.debug('Calling jac_dot')
-        assert len(vector) == self.m, \
-            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.m)
+        assert len(vector) == self.n, \
+            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.n)
         u_mag, v_mag = np.reshape(vector, (2,)+self.kernel.dim_uv)
         return self._convolve(u_mag, v_mag)
 
@@ -157,10 +157,10 @@ class PhaseMapperRDFC(PhaseMapper):
 
         '''
         self.LOG.debug('Calling jac_T_dot')
-        assert len(vector) == self.n, \
-            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.n)
+        assert len(vector) == self.m, \
+            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.m)
         # TODO: directly? ask Jörn again!
-        result = np.zeros(self.m)
+        result = np.zeros(self.n)
         nc.jac_T_dot_real_convolve(self.kernel.dim_uv[0], self.kernel.dim_uv[1],
                                    self.kernel.u, self.kernel.v, vector, result)
         return result
@@ -204,8 +204,8 @@ class PhaseMapperRDRC(PhaseMapper):
         self.kernel = kernel
         self.threshold = threshold
         self.numcore = numcore
-        self.n = np.prod(kernel.dim_uv)
-        self.m = 2 * self.n
+        self.m = np.prod(kernel.dim_uv)
+        self.n = 2 * self.m
         self.LOG.debug('Created '+str(self))
 
     def __repr__(self):
@@ -266,15 +266,15 @@ class PhaseMapperRDRC(PhaseMapper):
 
         '''
         self.LOG.debug('Calling jac_dot')
-        assert len(vector) == self.m, \
-            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.m)
+        assert len(vector) == self.n, \
+            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.n)
         v_dim, u_dim = self.kernel.dim_uv
-        result = np.zeros(self.n)
+        result = np.zeros(self.m)
         if self.numcore:
             nc.jac_dot_real_convolve(v_dim, u_dim, self.kernel.u, self.kernel.v, vector, result)
         else:
             # Iterate over all contributing pixels (numbered consecutively)
-            for s in range(self.n):  # column-wise (two columns at a time, u- and v-component)
+            for s in range(self.m):  # column-wise (two columns at a time, u- and v-component)
                 i = s % u_dim  # u-coordinate of current contributing pixel
                 j = int(s/u_dim)  # v-coordinate of current ccontributing pixel
                 u_min = (u_dim-1) - i  # u_dim-1: center of the kernel
@@ -282,7 +282,7 @@ class PhaseMapperRDRC(PhaseMapper):
                 v_min = (v_dim-1) - j  # v_dim-1: center of the kernel
                 v_max = (2*v_dim-1) - j  # = v_min + v_dim
                 result += vector[s] * self.kernel.u[v_min:v_max, u_min:u_max].reshape(-1)
-                result -= vector[s+self.n] * self.kernel.v[v_min:v_max, u_min:u_max].reshape(-1)
+                result -= vector[s+self.m] * self.kernel.v[v_min:v_max, u_min:u_max].reshape(-1)
         return result
 
     def jac_T_dot(self, vector):
@@ -302,15 +302,15 @@ class PhaseMapperRDRC(PhaseMapper):
 
         '''
         self.LOG.debug('Calling jac_T_dot')
-        assert len(vector) == self.n, \
-            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.n)
+        assert len(vector) == self.m, \
+            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.m)
         v_dim, u_dim = self.dim_uv
-        result = np.zeros(self.m)
+        result = np.zeros(self.n)
         if self.numcore:
             nc.jac_T_dot_real_convolve(v_dim, u_dim, self.kernel.u, self.kernel.v, vector, result)
         else:
             # Iterate over all contributing pixels (numbered consecutively):
-            for s in range(self.n):  # row-wise (two rows at a time, u- and v-component)
+            for s in range(self.m):  # row-wise (two rows at a time, u- and v-component)
                 i = s % u_dim  # u-coordinate of current contributing pixel
                 j = int(s/u_dim)  # v-coordinate of current contributing pixel
                 u_min = (u_dim-1) - i  # u_dim-1: center of the kernel
@@ -318,7 +318,7 @@ class PhaseMapperRDRC(PhaseMapper):
                 v_min = (v_dim-1) - j  # v_dim-1: center of the kernel
                 v_max = (2*v_dim-1) - j  # = v_min + v_dim
                 result[s] = np.sum(vector*self.u[v_min:v_max, u_min:u_max].reshape(-1))
-                result[s+self.n] = np.sum(vector*-self.v[v_min:v_max, u_min:u_max].reshape(-1))
+                result[s+self.m] = np.sum(vector*-self.v[v_min:v_max, u_min:u_max].reshape(-1))
         return result
 
 
@@ -356,8 +356,8 @@ class PhaseMapperFDFC(PhaseMapper):
         self.dim_uv = dim_uv
         self.b_0 = b_0
         self.padding = padding
-        self.n = np.prod(dim_uv)
-        self.m = 2 * self.n
+        self.m = np.prod(dim_uv)
+        self.n = 2 * self.m
         self.LOG.debug('Created '+str(self))
 
     def __repr__(self):
@@ -416,8 +416,8 @@ class PhaseMapperFDFC(PhaseMapper):
 
         '''
         self.LOG.debug('Calling jac_dot')
-        assert len(vector) == self.m, \
-            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.m)
+        assert len(vector) == self.n, \
+            'vector size not compatible! vector: {}, size: {}'.format(len(vector), self.n)
         mag_proj = MagData(self.a, np.zeros((3, 1)+self.dim_uv))
         magnitude_proj = self.jac_dot(vector).reshape((2, )+self.dim_uv)
         mag_proj.magnitude[1:3, 0, ...] = magnitude_proj
diff --git a/pyramid/projector.py b/pyramid/projector.py
index 09e5260..f40e996 100644
--- a/pyramid/projector.py
+++ b/pyramid/projector.py
@@ -45,9 +45,9 @@ class Projector(object):
     coeff : list (N=2)
         List containing the six weighting coefficients describing the influence of the 3 components
         of a 3-dimensional vector field on the 2 projected components.
-    n: int
-        Size of the image space.
     m: int
+        Size of the image space.
+    n: int
         Size of the input space.
 
     '''
@@ -63,8 +63,8 @@ class Projector(object):
         self.weight = weight
         self.coeff = coeff
         self.size_2d, self.size_3d = weight.shape
-        self.m = 3 * np.prod(dim)
-        self.n = 2 * np.prod(dim_uv)
+        self.n = 3 * np.prod(dim)
+        self.m = 2 * np.prod(dim_uv)
         self.LOG.debug('Created '+str(self))
 
     def __repr__(self):
-- 
GitLab