diff --git a/nifty/field.py b/nifty/field.py index 2f5a4bbf68b735fe30d5ba6d3609ecdf32bb0b6e..fd5010fb0c5b6e0c3460cbb8fb31ec5240a040c2 100644 --- a/nifty/field.py +++ b/nifty/field.py @@ -218,7 +218,7 @@ class Field(Loggable, Versionable, object): See Also -------- - power_synthesise + power_synthesize """ @@ -270,12 +270,13 @@ class Field(Loggable, Versionable, object): def power_analyze(self, spaces=None, logarithmic=False, nbin=None, binbounds=None, decompose_power=True): - """ Computes the powerspectrum for a subspace of the Field. + """ Computes the square root power spectrum for a subspace of the Field. Creates a PowerSpace for the space addressed by `spaces` with the given binning and computes the power spectrum as a Field over this PowerSpace. This can only be done if the subspace to be analyzed is a - harmonic space. + harmonic space. The resulting field has the same units as the initial + field, corresponding to the square root of the power spectrum. Parameters ---------- @@ -456,14 +457,16 @@ class Field(Loggable, Versionable, object): def power_synthesize(self, spaces=None, real_power=True, real_signal=True, mean=None, std=None): - """ Converts a power spectrum into a random field realization. + """Yields a sampled field with this field squared as its power spectrum. - This method draws a Gaussian random field in the harmic partner domain - of a PowerSpace. + This method draws a Gaussian random field in the harmonic partner domain + of this fields domains, using this field as power spectrum. Notes ----- - For this the spaces specified by `spaces` must be a PowerSpaces. + For this the spaces specified by `spaces` must be a PowerSpace. + This expects this field to be the square root of a power spectrum, i.e. + to have the unit of the field to be sampled. Parameters ---------- @@ -484,7 +487,6 @@ class Field(Loggable, Versionable, object): std : float *optional* The standard deviation of the Gaussian noise field which is used for the Field synthetization (default : None). - {default : None} if std==None : std will be set to 1 Returns @@ -496,7 +498,9 @@ class Field(Loggable, Versionable, object): See Also -------- power_analyze - + Raises + ------ + ValueError : If domain is not a PowerSpace """ # check if the `spaces` input is valid diff --git a/nifty/sugar.py b/nifty/sugar.py index f34f4198dd96768cb1bb912c1ec62b0eb499b779..676278beb2578cb96d06ce46cd31d62a879c1402 100644 --- a/nifty/sugar.py +++ b/nifty/sugar.py @@ -26,6 +26,30 @@ __all__ = ['create_power_operator'] def create_power_operator(domain, power_spectrum, dtype=None, distribution_strategy='not'): + """Creates a diagonal operator with a certain power spectrum. + Constructs a diagonal operator that lives over the specified domain, or + its harmonic domain in case it is not harmonic. + Parameters + ---------- + domain : DomainObject + Domain over which the power operator shall live. If this is not a + harmonic domain, it will return an operator for its harmonic domain + instead. + power_spectrum : {array-like, method} + An array-like object, or a method that implements the square root + of a power spectrum as a function of k. + dtype : type, *optional* + dtype that the field holding the power spectrum shall use + {default : None} + if dtype == None: passes this on to constructor of Field + distribution_strategy : string, *optional* + Distributed strategy to be used by the underlying d2o objects. + {default : 'not'} + Returns + ------- + DiagonalOperator : An operator that lives that implements the given power + spectrum. + """ if not domain.harmonic: fft = FFTOperator(domain) domain = fft.target[0]