From 49218708247688b4173f536ea75b66ce80f5c7a5 Mon Sep 17 00:00:00 2001
From: Philipp Arras <parras@mpa-garching.mpg.de>
Date: Thu, 14 Nov 2019 18:51:59 +0100
Subject: [PATCH] Actually return amplitude in one-space case

---
 demos/find_amplitude_parameters.py  |  2 +-
 demos/getting_started_3.py          |  2 +-
 demos/getting_started_mf.py         |  4 ++--
 demos/newamplitudes.py              |  2 +-
 nifty5/library/correlated_fields.py | 14 ++++++++++++--
 5 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/demos/find_amplitude_parameters.py b/demos/find_amplitude_parameters.py
index d470e20ba..1d7c76b8f 100644
--- a/demos/find_amplitude_parameters.py
+++ b/demos/find_amplitude_parameters.py
@@ -38,7 +38,7 @@ if __name__ == '__main__':
     fa.add_fluctuations(ift.RGSpace(32), 3, 5, 1, 1e-6, 2,
                         1e-6, slope_means[1], 1, 'freq')
     correlated_field = fa.finalize()
-    amplitudes = fa.amplitudes
+    amplitudes = fa.normalized_amplitudes
     plt.style.use('seaborn-notebook')
 
     tgt = correlated_field.target
diff --git a/demos/getting_started_3.py b/demos/getting_started_3.py
index 3d1e66f18..5f0525207 100644
--- a/demos/getting_started_3.py
+++ b/demos/getting_started_3.py
@@ -61,7 +61,7 @@ if __name__ == '__main__':
     cfmaker.add_fluctuations(position_space,
                              1., 1e-2, 1, .5, .1, .5, -3, 0.5, '')
     correlated_field = cfmaker.finalize()
-    A = cfmaker.amplitudes[0]
+    A = cfmaker.amplitude
 
     # Apply a nonlinearity
     signal = ift.sigmoid(correlated_field)
diff --git a/demos/getting_started_mf.py b/demos/getting_started_mf.py
index 3d22942fe..0a6232da3 100644
--- a/demos/getting_started_mf.py
+++ b/demos/getting_started_mf.py
@@ -78,8 +78,8 @@ if __name__ == '__main__':
                              -1.5, .5, 'amp2')
     correlated_field = cfmaker.finalize()
 
-    A1 = cfmaker.amplitudes[0]
-    A2 = cfmaker.amplitudes[1]
+    A1 = cfmaker.normalized_amplitudes[0]
+    A2 = cfmaker.normalized_amplitudes[1]
     DC = SingleDomain(correlated_field.target, position_space)
 
     # Apply a nonlinearity
diff --git a/demos/newamplitudes.py b/demos/newamplitudes.py
index b0164ab9d..9c236490f 100644
--- a/demos/newamplitudes.py
+++ b/demos/newamplitudes.py
@@ -7,7 +7,7 @@ sspace = ift.RGSpace((128,))
 fa = ift.CorrelatedFieldMaker.make(10, 0.1, '')
 fa.add_fluctuations(sspace, 10, 2, 1, 1e-6, 2, 1e-6, -2, 1e-6, 'spatial')
 op = fa.finalize()
-A = fa.amplitudes[0]
+A = fa.amplitude
 
 cstpos = ift.from_random('normal', op.domain)
 p1, p2 = [ift.Plot() for _ in range(2)]
diff --git a/nifty5/library/correlated_fields.py b/nifty5/library/correlated_fields.py
index 2169fedd9..7fbfc578a 100644
--- a/nifty5/library/correlated_fields.py
+++ b/nifty5/library/correlated_fields.py
@@ -372,7 +372,7 @@ class CorrelatedFieldMaker:
         lst = [('Offset amplitude', self.amplitude_total_offset),
                ('Total fluctuation amplitude', self.total_fluctuation)]
 
-        namps = len(self.amplitudes)
+        namps = len(self._a)
         if namps > 1:
             for ii in range(namps):
                 lst.append(('Slice fluctuation (space {})'.format(ii),
@@ -399,9 +399,19 @@ class CorrelatedFieldMaker:
         return fluctuations_slice_mean/np.mean(np.sqrt(scm))
 
     @property
-    def amplitudes(self):
+    def normalized_amplitudes(self):
         return self._a
 
+    @property
+    def amplitude(self):
+        if len(self._a) > 1:
+            s = ('If more than one spectrum is present in the model,',
+                 ' no unique set of amplitudes exist because only the',
+                 ' relative scale is determined.')
+            raise NotImplementedError(s)
+        expand = VdotOperator(full(self._a[0].target, 1)).adjoint
+        return self._a[0]*(expand @ self.amplitude_total_offset)
+
     @property
     def amplitude_total_offset(self):
         return self._azm
-- 
GitLab