diff --git a/nifty4/library/noise_energy.py b/nifty4/library/noise_energy.py index 5d774bf1685121cd24a0a2835ce8929730e975ca..543f655b7d36b0877d5e8a05635a728674e3c0e5 100644 --- a/nifty4/library/noise_energy.py +++ b/nifty4/library/noise_energy.py @@ -22,7 +22,7 @@ from ..minimization.energy import Energy class NoiseEnergy(Energy): - def __init__(self, position, d, m, D, t, FFT, Instrument, nonlinearity, + def __init__(self, position, d, m, D, t, HarmonicTransform, Instrument, nonlinearity, alpha, q, Projection, munit=1., sunit=1., dunit=1., samples=3, sample_list=None, inverter=None): super(NoiseEnergy, self).__init__(position=position) @@ -32,7 +32,7 @@ class NoiseEnergy(Energy): self.N = DiagonalOperator(diagonal=dunit**2 * exp(self.position)) self.t = t self.samples = samples - self.FFT = FFT + self.ht = HarmonicTransform self.Instrument = Instrument self.nonlinearity = nonlinearity self.munit = munit @@ -54,11 +54,11 @@ class NoiseEnergy(Energy): self.inverter = inverter A = Projection.adjoint_times(munit * exp(.5*self.t)) # unit: munit - map_s = FFT.inverse_times(A * m) + map_s = self.ht(A * m) self._gradient = None for sample in self.sample_list: - map_s = FFT.inverse_times(A * sample) + map_s = self.ht(A * sample) residual = self.d - self.Instrument(sunit * self.nonlinearity(map_s)) lh = .5 * residual.vdot(self.N.inverse_times(residual)) @@ -79,7 +79,7 @@ class NoiseEnergy(Energy): def at(self, position): return self.__class__( - position, self.d, self.m, self.D, self.t, self.FFT, + position, self.d, self.m, self.D, self.t, self.ht, self.Instrument, self.nonlinearity, self.alpha, self.q, self.Projection, munit=self.munit, sunit=self.sunit, dunit=self.dunit, sample_list=self.sample_list, diff --git a/nifty4/library/nonlinear_power_curvature.py b/nifty4/library/nonlinear_power_curvature.py index 2a7f4601678a1c86ba0f44a908fa12cab1fa0929..40463ec06cfc41af1a2c0d2606a36c6d5e7f84c9 100644 --- a/nifty4/library/nonlinear_power_curvature.py +++ b/nifty4/library/nonlinear_power_curvature.py @@ -20,11 +20,11 @@ from ..operators.inversion_enabler import InversionEnabler from .response_operators import LinearizedPowerResponse -def NonlinearPowerCurvature(position, FFT, Instrument, nonlinearity, +def NonlinearPowerCurvature(position, HarmonicTransform, Instrument, nonlinearity, Projection, N, T, sample_list, inverter, munit=1., sunit=1.): result = None for sample in sample_list: - LinR = LinearizedPowerResponse(Instrument, nonlinearity, FFT, Projection, position, sample, munit, sunit) + LinR = LinearizedPowerResponse(Instrument, nonlinearity, HarmonicTransform, Projection, position, sample, munit, sunit) op = LinR.adjoint*N.inverse*LinR result = op if result is None else result + op result = result*(1./len(sample_list)) + T diff --git a/nifty4/library/nonlinear_power_energy.py b/nifty4/library/nonlinear_power_energy.py index 47328f5285b69c40edc6643e5fe02b9283b02c48..99c1d60e0ac04a5b61c5685060d79bf662f792a1 100644 --- a/nifty4/library/nonlinear_power_energy.py +++ b/nifty4/library/nonlinear_power_energy.py @@ -51,9 +51,9 @@ class NonlinearPowerEnergy(Energy): default : 3 """ - def __init__(self, position, d, N, m, D, FFT, Instrument, nonlinearity, Projection, sigma=0., samples=3, sample_list=None, munit=1., sunit=1., inverter=None): + def __init__(self, position, d, N, m, D, HarmonicTransform, Instrument, nonlinearity, Projection, sigma=0., samples=3, sample_list=None, munit=1., sunit=1., inverter=None): super(NonlinearPowerEnergy, self).__init__(position) - self.d, self.N, self.m, self.D, self.FFT = d, N, m, D, FFT + self.d, self.N, self.m, self.D, self.ht = d, N, m, D, HarmonicTransform self.Instrument = Instrument self.nonlinearity = nonlinearity self.Projection = Projection @@ -73,13 +73,13 @@ class NonlinearPowerEnergy(Energy): strength=sigma, logarithmic=True) A = Projection.adjoint_times(munit * exp(.5*position)) # unit: munit - map_s = FFT.inverse_times(A * m) + map_s = self.ht(A * m) Tpos = self.T(position) self._gradient = None for sample in self.sample_list: - map_s = FFT.inverse_times(A * sample) - LinR = LinearizedPowerResponse(Instrument, nonlinearity, FFT, Projection, position, sample, munit, sunit) + map_s = self.ht(A * sample) + LinR = LinearizedPowerResponse(Instrument, nonlinearity, self.ht, Projection, position, sample, munit, sunit) residual = self.d - self.Instrument(sunit * self.nonlinearity(map_s)) lh = 0.5 * residual.vdot(self.N.inverse_times(residual)) @@ -99,7 +99,7 @@ class NonlinearPowerEnergy(Energy): def at(self, position): return self.__class__(position, self.d, self.N, self.m, self.D, - self.FFT, self.Instrument, self.nonlinearity, + self.ht, self.Instrument, self.nonlinearity, self.Projection, sigma=self.sigma, samples=len(self.sample_list), sample_list=self.sample_list, @@ -119,6 +119,6 @@ class NonlinearPowerEnergy(Energy): @memo def curvature(self): return NonlinearPowerCurvature( - self.position, self.FFT, self.Instrument, self.nonlinearity, + self.position, self.ht, self.Instrument, self.nonlinearity, self.Projection, self.N, self.T, self.sample_list, self.inverter, self.munit, self.sunit) diff --git a/nifty4/library/nonlinear_wiener_filter_energy.py b/nifty4/library/nonlinear_wiener_filter_energy.py index f8a88f0bbe6cf5fc7fdf784ec62e6a0d6e45a764..3c994250f05aa342390870a688c5395def2cb498 100644 --- a/nifty4/library/nonlinear_wiener_filter_energy.py +++ b/nifty4/library/nonlinear_wiener_filter_energy.py @@ -23,18 +23,18 @@ from .response_operators import LinearizedSignalResponse class NonlinearWienerFilterEnergy(Energy): - def __init__(self, position, d, Instrument, nonlinearity, FFT, power, N, S, sunit=1., + def __init__(self, position, d, Instrument, nonlinearity, HarmonicTransform, power, N, S, sunit=1., inverter=None): super(NonlinearWienerFilterEnergy, self).__init__(position=position) self.d = d self.sunit = sunit self.Instrument = Instrument self.nonlinearity = nonlinearity - self.FFT = FFT + self.ht = HarmonicTransform self.power = power - position_map = FFT.inverse_times(self.power * self.position) + position_map = self.ht(self.power * self.position) self.LinearizedResponse = \ - LinearizedSignalResponse(Instrument, nonlinearity, FFT, power, + LinearizedSignalResponse(Instrument, nonlinearity, self.ht, power, position_map, sunit) residual = d - Instrument(sunit * nonlinearity(position_map)) self.N = N @@ -48,7 +48,7 @@ class NonlinearWienerFilterEnergy(Energy): def at(self, position): return self.__class__(position, self.d, self.Instrument, - self.nonlinearity, self.FFT, self.power, self.N, + self.nonlinearity, self.ht, self.power, self.N, self.S, self.sunit, inverter=self.inverter) @property diff --git a/nifty4/library/response_operators.py b/nifty4/library/response_operators.py index c8519ccaff3916f3d2a5393b7d4419879fc27bcc..a97ea26d019bbf631cfd4077ecf14ad39af3e9f8 100644 --- a/nifty4/library/response_operators.py +++ b/nifty4/library/response_operators.py @@ -19,13 +19,13 @@ from ..field import exp -def LinearizedSignalResponse(Instrument, nonlinearity, FFT, power, s, sunit): - return sunit * (Instrument * nonlinearity.derivative(s) * FFT.inverse * power) +def LinearizedSignalResponse(Instrument, nonlinearity, HarmonicTransform, power, s, sunit): + return sunit * (Instrument * nonlinearity.derivative(s) * HarmonicTransform * power) -def LinearizedPowerResponse(Instrument, nonlinearity, FFT, Projection, t, m, munit, sunit): +def LinearizedPowerResponse(Instrument, nonlinearity, HarmonicTransform, Projection, t, m, munit, sunit): power = exp(0.5*t) * munit - position = FFT.inverse_times(Projection.adjoint_times(power) * m) + position = HarmonicTransform(Projection.adjoint_times(power) * m) linearization = nonlinearity.derivative(position) - return sunit * (0.5 * Instrument * linearization * FFT.inverse * m * + return sunit * (0.5 * Instrument * linearization * HarmonicTransform * m * Projection.adjoint * power)