Return single component lifetime best resolved at frequency.
Parameters:
frequency (array_like) – Laser pulse or modulation frequency.
unit_conversion (float, optional, default: 1e-3) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
Returns:
lifetime – Single component lifetime best resolved at frequency.
Return type:
ndarray
Notes
The lifetime \(\tau\) that is best resolved at frequency \(f\) is
(Redford & Clegg 2005. Eq. B.6):
Return optimal frequency for resolving single component lifetime.
Parameters:
lifetime (array_like) – Single component lifetime.
unit_conversion (float, optional, default: 1e-3) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
Returns:
frequency – Optimal laser pulse or modulation frequency for resolving lifetime.
Return type:
ndarray
Notes
The optimal frequency \(f\) to resolve a single component lifetime
\(\tau\) is
(Redford & Clegg 2005. Eq. B.6):
Return synthetic signal, instrument response function (IRF), and
time axis, sampled over one period of the fundamental frequency.
The signal is convoluted with the IRF, which is approximated by a
normal distribution.
Parameters:
frequency (float) – Fundamental laser pulse or modulation frequency in MHz.
lifetime (array_like) – Lifetime components in ns.
fraction (array_like, optional) – Fractional intensities or pre-exponential amplitudes of the lifetime
components. Fractions are normalized to sum to 1.
Must be specified if lifetime is not a scalar.
mean (array_like, optional, default: 1.0) – Average signal intensity (DC). Must be scalar for now.
background (array_like, optional, default: 0.0) – Background signal intensity. Must be smaller than mean.
samples (int, default: 64) – Number of signal samples to return. Must be at least 16.
harmonic (int, sequence of int, or 'all', optional, default: 'all') – Harmonics used to synthesize signal.
If ‘all’, all harmonics are used.
Else, harmonics must be at least one and no larger than half of
samples.
Use ‘all’ to synthesize an exponential time-domain decay signal,
or 1 to synthesize a homodyne signal.
zero_phase (float, optional) – Position of instrument response function in radians.
Must be in range [0, pi]. The default is the 8th sample.
zero_stdev (float, optional) – Standard deviation of instrument response function in radians.
Must be at least 1.5 samples and no more than one tenth of samples
to allow for sufficient sampling of the function.
The default is 1.5 samples. Increase samples to narrow the IRF.
preexponential (bool, optional, default: False) – If true, fraction values are pre-exponential amplitudes,
else fractional intensities.
unit_conversion (float, optional, default: 1e-3) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
Returns:
signal (ndarray) – Signal generated from lifetimes at frequency, convoluted with
instrument response function.
zero (ndarray) – Instrument response function.
time (ndarray) – Time for each sample in signal in units of lifetime.
This implementation is based on an inverse digital Fourier transform (DFT).
Because DFT cannot be used on signals with discontinuities
(for example, an exponential decay starting at zero) without producing
strong artifacts (ripples), the signal is convoluted with a continuous
instrument response function (IRF). The minimum width of the IRF is
limited due to sampling requirements.
Examples
Synthesize a multi-exponential time-domain decay signal for two
lifetime components of 4.2 and 0.9 ns at 40 MHz:
Return phasor coordinates on universal semicircle at other harmonics.
Return phasor coordinates at any harmonic, given the real component of
phasor coordinates of a single exponential lifetime at a certain harmonic.
The input and output phasor coordinates lie on the universal semicircle.
Parameters:
real (array_like) – Real component of phasor coordinates of single exponential lifetime
at harmonic.
harmonic (array_like) – Harmonic of real coordinate. Must be integer >= 1.
other_harmonic (array_like) – Harmonic for which to return phasor coordinates. Must be integer >= 1.
real_other (ndarray) – Real component of phasor coordinates at other_harmonic.
imag_other (ndarray) – Imaginary component of phasor coordinates at other_harmonic.
Notes
The phasor coordinates
\(g_{n}\) (real_other) and \(s_{n}\) (imag_other)
of a single exponential lifetime at harmonic \(n\) (other_harmonic)
is calculated from the real part of the phasor coordinates
\(g_{m}\) (real) at harmonic \(m\) (harmonic) according to
(Torrado, Malacrida, & Ranjit. 2022. Eq. 25):
Calibration of phasor coordinates from time-resolved measurements is
necessary to account for the instrument response function (IRF) and delays
in the electronics.
Parameters:
real (array_like) – Real component of phasor coordinates to be calibrated.
imag (array_like) – Imaginary component of phasor coordinates to be calibrated.
reference_mean (array_like or None) – Intensity of phasor coordinates from reference of known lifetime.
Used to re-normalize averaged phasor coordinates.
reference_real (array_like) – Real component of phasor coordinates from reference of known lifetime.
Must be measured with the same instrument setting as the phasor
coordinates to be calibrated. Dimensions must be the same as real.
reference_imag (array_like) – Imaginary component of phasor coordinates from reference of known
lifetime.
Must be measured with the same instrument setting as the phasor
coordinates to be calibrated.
frequency (array_like) – Fundamental laser pulse or modulation frequency in MHz.
lifetime (array_like) – Lifetime components in ns. Must be scalar or one-dimensional.
harmonic (int, sequence of int, or 'all', default: 1) – Harmonics included in real and imag.
If an integer, the harmonics at which real and imag were acquired
or calculated.
If a sequence, the harmonics included in the first axis of real and
imag.
If ‘all’, the first axis of real and imag contains lower
harmonics.
The default is the first harmonic (fundamental frequency).
skip_axis (int or sequence of int, optional) – Axes in reference_mean to exclude from reference center calculation.
By default, all axes except harmonics are included.
fraction (array_like, optional) – Fractional intensities or pre-exponential amplitudes of the lifetime
components. Fractions are normalized to sum to 1.
Must be same size as lifetime.
preexponential (bool, optional) – If true, fraction values are pre-exponential amplitudes,
else fractional intensities (default).
unit_conversion (float, optional) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
method (str, optional) –
Method used for calculating center of reference phasor coordinates:
'mean': Arithmetic mean.
'median': Spatial median.
nan_safe (bool, optional) – Ensure method is applied to same elements of reference arrays.
By default, distribute NaNs among reference arrays before applying
method.
reverse (bool, optional) – Reverse calibration.
Returns:
real (ndarray) – Calibrated real component of phasor coordinates.
imag (ndarray) – Calibrated imaginary component of phasor coordinates.
Raises:
ValueError – The array shapes of real and imag, or reference_real and
reference_imag do not match.
Number of harmonics or frequencies does not match the first axis
of real and imag.
mean (array_like) – Intensity of phasor coordinates.
real (array_like) – Real component of phasor coordinates.
imag (array_like) – Imaginary component of phasor coordinates.
skip_axis (int or sequence of int, optional) – Axes in mean to excluded from center calculation.
By default, all axes except harmonics are included.
method (str, optional) –
Method used for center calculation:
'mean': Arithmetic mean of phasor coordinates.
'median': Spatial median of phasor coordinates.
nan_safe (bool, optional) – Ensure method is applied to same elements of input arrays.
By default, distribute NaNs among input arrays before applying
method. May be disabled if phasor coordinates were filtered by
phasor_threshold().
**kwargs – Optional arguments passed to numpy.nanmean() or
numpy.nanmedian().
Returns:
mean_center (ndarray) – Intensity center coordinates.
real_center (ndarray) – Real center coordinates.
imag_center (ndarray) – Imaginary center coordinates.
Raises:
ValueError – If the specified method is not supported.
If the shapes of mean, real, and imag do not match.
Examples
Compute center coordinates with the default ‘mean’ method:
real (ndarray) – Real component of complex division.
imag (ndarray) – Imaginary component of complex division.
Notes
The phasor coordinates real (\(G\)) and imag (\(S\))
are divided by phasor coordinates divisor_real (\(g\))
and divisor_imag (\(s\)) according to:
\[ \begin{align}\begin{aligned}d &= g \cdot g + s \cdot s\\G' &= (G \cdot g + S \cdot s) / d\\S' &= (G \cdot s - S \cdot g) / d\end{aligned}\end{align} \]
By default, apply a NaN-aware median filter independently to the real
and imaginary components of phasor coordinates once with a kernel size of 3
multiplied by the number of dimensions of the input arrays. Return the
intensity unchanged.
Parameters:
mean (array_like) – Intensity of phasor coordinates.
real (array_like) – Real component of phasor coordinates to be filtered.
imag (array_like) – Imaginary component of phasor coordinates to be filtered.
repeat (int, optional) – Number of times to apply median filter. The default is 1.
size (int, optional) – Size of median filter kernel. The default is 3.
skip_axis (int or sequence of int, optional) – Axes in mean to exclude from filter.
By default, all axes except harmonics are included.
use_scipy (bool, optional) – Use scipy.ndimage.median_filter().
This function has undefined behavior if the input arrays contain
NaN values but is faster when filtering more than 2 dimensions.
See issue #87.
num_threads (int, optional) – Number of OpenMP threads to use for parallelization.
Applies to filtering in two dimensions when not using scipy.
By default, multi-threading is disabled.
If zero, up to half of logical CPUs are used.
OpenMP may not be available on all platforms.
**kwargs – Optional arguments passed to scipy.ndimage.median_filter().
Returns:
mean (ndarray) – Unchanged intensity of phasor coordinates.
real (ndarray) – Filtered real component of phasor coordinates.
imag (ndarray) – Filtered imaginary component of phasor coordinates.
Raises:
ValueError – If repeat is less than 0.
If size is less than 1.
The array shapes of mean, real, and imag do not match.
Examples
Apply three times a median filter with a kernel size of three:
This function must only be used with calibrated, unprocessed phasor
coordinates obtained from FLIM data. The coordinates must not be filtered,
thresholded, or otherwise pre-processed.
mean (array_like) – Intensity of phasor coordinates.
real (array_like) – Real component of phasor coordinates to be filtered.
Must have at least two harmonics in the first axis.
imag (array_like) – Imaginary component of phasor coordinates to be filtered.
Must have at least two harmonics in the first axis.
sigma (float, optional) – Significance level to test difference between two phasors.
Given in terms of the equivalent 1D standard deviations.
sigma=2 corresponds to ~95% (or 5%) significance.
levels (int, optional) – Number of levels for wavelet decomposition.
Controls the maximum averaging area, which has a length of
\(2^level\).
harmonic (sequence of int or None, optional) – Harmonics included in first axis of real and imag.
If None (default), the first axis of real and imag contains lower
harmonics starting at and increasing by one.
All harmonics must have a corresponding half or double harmonic.
skip_axis (int or sequence of int, optional) – Axes in mean to exclude from filter.
By default, all axes except harmonics are included.
Returns:
mean (ndarray) – Unchanged intensity of phasor coordinates.
real (ndarray) – Filtered real component of phasor coordinates.
imag (ndarray) – Filtered imaginary component of phasor coordinates.
Raises:
ValueError – If level is less than 0.
The array shapes of mean, real, and imag do not match.
If real and imag have no harmonic axis.
Number of harmonics in harmonic is less than 2 or does not match
the first axis of real and imag.
Not all harmonics in harmonic have a corresponding half
or double harmonic.
References
Examples
Apply a pawFLIM wavelet filter with four significance levels (sigma)
and three decomposition levels:
Return phasor coordinates from apparent single lifetimes.
Parameters:
phase_lifetime (ndarray) – Apparent single lifetime from phase.
modulation_lifetime (ndarray, optional) – Apparent single lifetime from modulation.
If None, modulation_lifetime is same as phase_lifetime.
frequency (array_like) – Laser pulse or modulation frequency in MHz.
unit_conversion (float, optional) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
The apparent single lifetimes phase_lifetime (\(\tau_{\phi}\))
and modulation_lifetime (\(\tau_{M}\)) are converted to phasor
coordinates real (\(G\)) and imag (\(S\)) at
frequency \(f\) according to:
Return phasor coordinates of FRET acceptor channel.
Calculate phasor coordinates of a FRET (Förster Resonance Energy Transfer)
acceptor channel as a function of frequency, donor and acceptor lifetimes,
FRET efficiency, fraction of donors undergoing FRET, fraction of directly
excited acceptors, fraction of donor fluorescence in acceptor channel,
and background fluorescence.
The phasor coordinates of the acceptor channel contain fractions of:
acceptor sensitized by energy transfer
directly excited acceptor
donor bleedthrough
background fluorescence
Parameters:
frequency (array_like) – Laser pulse or modulation frequency in MHz.
donor_lifetime (array_like) – Lifetime of donor without FRET in ns.
acceptor_lifetime (array_like) – Lifetime of acceptor in ns.
fret_efficiency (array_like, optional, default 0) – FRET efficiency in range [0, 1].
donor_fretting (array_like, optional, default 1) – Fraction of donors participating in FRET. Range [0, 1].
donor_bleedthrough (array_like, optional, default 0) – Weight of donor fluorescence in acceptor channel
relative to fluorescence of fully sensitized acceptor.
A weight of 1 means the fluorescence from donor and fully sensitized
acceptor are equal.
The background in the donor channel does not bleed through.
acceptor_bleedthrough (array_like, optional, default 0) – Weight of fluorescence from directly excited acceptor
relative to fluorescence of fully sensitized acceptor.
A weight of 1 means the fluorescence from directly excited acceptor
and fully sensitized acceptor are equal.
acceptor_background (array_like, optional, default 0) – Weight of background fluorescence in acceptor channel
relative to fluorescence of fully sensitized acceptor.
A weight of 1 means the fluorescence of background and fully
sensitized acceptor are equal.
background_real (array_like, optional, default 0) – Real component of background fluorescence phasor coordinate
at frequency.
background_imag (array_like, optional, default 0) – Imaginary component of background fluorescence phasor coordinate
at frequency.
unit_conversion (float, optional) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
Calculate phasor coordinates of a FRET (Förster Resonance Energy Transfer)
donor channel as a function of frequency, donor lifetime, FRET efficiency,
fraction of donors undergoing FRET, and background fluorescence.
The phasor coordinates of the donor channel contain fractions of:
donor not undergoing energy transfer
donor quenched by energy transfer
background fluorescence
Parameters:
frequency (array_like) – Laser pulse or modulation frequency in MHz.
donor_lifetime (array_like) – Lifetime of donor without FRET in ns.
fret_efficiency (array_like, optional, default 0) – FRET efficiency in range [0, 1].
donor_fretting (array_like, optional, default 1) – Fraction of donors participating in FRET. Range [0, 1].
donor_background (array_like, optional, default 0) – Weight of background fluorescence in donor channel
relative to fluorescence of donor without FRET.
A weight of 1 means the fluorescence of background and donor
without FRET are equal.
background_real (array_like, optional, default 0) – Real component of background fluorescence phasor coordinate
at frequency.
background_imag (array_like, optional, default 0) – Imaginary component of background fluorescence phasor coordinate
at frequency.
unit_conversion (float, optional) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
Return phasor coordinates from lifetime components.
Calculate phasor coordinates as a function of frequency, single or
multiple lifetime components, and the pre-exponential amplitudes
or fractional intensities of the components.
Parameters:
frequency (array_like) – Laser pulse or modulation frequency in MHz.
A scalar or one-dimensional sequence.
lifetime (array_like) – Lifetime components in ns. See notes below for allowed dimensions.
fraction (array_like, optional) – Fractional intensities or pre-exponential amplitudes of the lifetime
components. Fractions are normalized to sum to 1.
See notes below for allowed dimensions.
preexponential (bool, optional, default: False) – If true, fraction values are pre-exponential amplitudes,
else fractional intensities.
unit_conversion (float, optional, default: 1e-3) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
keepdims (bool, optional, default: False) – If true, length-one dimensions are left in phasor coordinates.
Returns:
real (ndarray) – Real component of phasor coordinates.
imag (ndarray) – Imaginary component of phasor coordinates.
See notes below for dimensions of the returned arrays.
Raises:
ValueError – Input arrays exceed their allowed dimensionality or do not match.
Notes
The phasor coordinates \(G\) (real) and \(S\) (imag) for
many lifetime components \(j\) with lifetimes \(\tau\) and
pre-exponential amplitudes \(\alpha\) at frequency \(f\) are:
The following combinations of lifetime and fraction parameters are
supported:
lifetime is scalar or one-dimensional, holding single component
lifetimes. fraction is None.
Return arrays of shape (frequency.size, lifetime.size).
lifetime is two-dimensional, fraction is one-dimensional.
The last dimensions match in size, holding lifetime components and
their fractions.
Return arrays of shape (frequency.size, lifetime.shape[1]).
lifetime is one-dimensional, fraction is two-dimensional.
The last dimensions must match in size, holding lifetime components and
their fractions.
Return arrays of shape (frequency.size, fraction.shape[1]).
lifetime and fraction are up to two-dimensional of same shape.
The last dimensions hold lifetime components and their fractions.
Return arrays of shape (frequency.size, lifetime.shape[0]).
Length-one dimensions are removed from returned arrays
if keepdims is false (default).
Examples
Phasor coordinates of a single lifetime component (in ns) at a
frequency of 80 MHz:
signal (array_like) – Frequency-domain, time-domain, or hyperspectral data.
A minimum of three samples are required along axis.
The samples must be uniformly spaced.
axis (int or str, optional) – Axis over which to compute phasor coordinates.
By default, the ‘H’ or ‘C’ axes if signal contains such dimension
names, else the last axis (-1).
harmonic (int, sequence of int, or 'all', optional) – Harmonics to return.
If ‘all’, return all harmonics for signal samples along axis.
Else, harmonics must be at least one and no larger than half the
number of signal samples along axis.
The default is the first harmonic (fundamental frequency).
A minimum of harmonic * 2 + 1 samples are required along axis
to calculate correct phasor coordinates at harmonic.
sample_phase (array_like, optional) – Phase values (in radians) of signal samples along axis.
If None (default), samples are assumed to be uniformly spaced along
one period.
The array size must equal the number of samples along axis.
Cannot be used with harmonic!=1 or use_fft=True.
use_fft (bool, optional) – If true, use a real forward Fast Fourier Transform (FFT).
If false, use a Cython implementation that is optimized (faster and
resource saving) for calculating few harmonics.
By default, FFT is only used when all or at least 8 harmonics are
calculated, or rfft is specified.
rfft (callable, optional) – Drop-in replacement function for numpy.fft.rfft.
For example, scipy.fft.rfft or mkl_fft._numpy_fft.rfft.
Used to calculate the real forward FFT.
dtype (dtype_like, optional) – Data type of output arrays. Either float32 or float64.
The default is float64 unless the signal is float32.
normalize (bool, optional) – Return normalized phasor coordinates.
If true (default), return average of signal along axis and
Fourier coefficients divided by sum of signal along axis.
Else, return sum of signal along axis and unscaled Fourier
coefficients.
Un-normalized phasor coordinates cannot be used with most of PhasorPy’s
functions but may be required for intermediate processing.
num_threads (int, optional) – Number of OpenMP threads to use for parallelization when not using FFT.
By default, multi-threading is disabled.
If zero, up to half of logical CPUs are used.
OpenMP may not be available on all platforms.
Returns:
mean (ndarray) – Average of signal along axis (zero harmonic).
real (ndarray) – Real component of phasor coordinates at harmonic along axis.
imag (ndarray) – Imaginary component of phasor coordinates at harmonic along axis.
Raises:
ValueError – The signal has less than three samples along axis.
The sample_phase size does not equal the number of samples along
axis.
IndexError – harmonic is smaller than 1 or greater than half the samples along
axis.
TypeError – The signal, dtype, or harmonic types are not supported.
The normalized phasor coordinates real (\(G\)), imag (\(S\)),
and average intensity mean (\(F_{DC}\)) are calculated from
\(K\ge3\) samples of the signal \(F\) af harmonic \(h\)
according to:
If \(F_{DC} = 0\), the phasor coordinates are undefined
(\(NaN\) or \(\infty\)).
Use NaN-aware software to further process the phasor coordinates.
The phasor coordinates may be zero, for example, in case of only constant
background in time-resolved signals, or as the result of linear
combination of non-zero spectral phasors coordinates.
Examples
Calculate phasor coordinates of a phase-shifted sinusoidal waveform:
Use to normalize the phasor coordinates returned by
phasor_from_signal(...,normalize=False).
Parameters:
mean_unnormalized (array_like) – Unnormalized intensity of phasor coordinates.
real_unnormalized (array_like) – Unnormalized real component of phasor coordinates.
imag_unnormalized (array_like) – Unnormalized imaginary component of phasor coordinates.
samples (int, default: 1) – Number of signal samples over which mean was integrated.
dtype (dtype_like, optional) – Data type of output arrays. Either float32 or float64.
The default is float64 unless the real is float32.
Returns:
mean (ndarray) – Normalized intensity.
real (ndarray) – Normalized real component.
imag (ndarray) – Normalized imaginary component.
Notes
The average intensity mean (\(F_{DC}\)) and normalized phasor
coordinates real (\(G\)) and imag (\(S\)) are calculated from
the signal intensity (\(F\)), the number of samples (\(K\)),
real_unnormalized (\(G'\)), and imag_unnormalized (\(S'\))
according to:
\[ \begin{align}\begin{aligned}F_{DC} &= F / K\\G &= G' / F\\S &= S' / F\end{aligned}\end{align} \]
If \(F = 0\), the normalized phasor coordinates (\(G\))
and (\(S\)) are undefined (\(NaN\) or \(\infty\)).
Examples
Normalize phasor coordinates with intensity integrated over 10 samples:
Return equally spaced phasor coordinates on universal semicircle.
Parameters:
samples (int, optional, default: 101) – Number of coordinates to return.
Returns:
real (ndarray) – Real component of phasor coordinates on universal semicircle.
imag (ndarray) – Imaginary component of phasor coordinates on universal semicircle.
Raises:
ValueError – The number of samples is smaller than 1.
Notes
If more than one sample, the first and last phasor coordinates returned
are (0,0) and (1,0).
The center coordinate, if any, is (0.5,0.5).
The universal semicircle is composed of the phasor coordinates of
single lifetime components, where the relation of polar coordinates
(phase \(\phi\) and modulation \(M\)) is:
\[M = \cos{\phi}\]
Examples
Calculate three phasor coordinates on universal semicircle:
Return phasor coordinates with values out of interval replaced by NaN.
Interval thresholds can be set for mean intensity, real and imaginary
coordinates, and phase and modulation.
Phasor coordinates smaller than minimum thresholds or larger than maximum
thresholds are replaced NaN.
No threshold is applied by default.
NaNs in mean or any real and imag harmonic are propagated to
mean and all harmonics in real and imag.
Parameters:
mean (array_like) – Intensity of phasor coordinates.
real (array_like) – Real component of phasor coordinates.
imag (array_like) – Imaginary component of phasor coordinates.
mean_min (array_like, optional) – Lower threshold for mean intensity.
mean_max (array_like, optional) – Upper threshold for mean intensity.
real_min (array_like, optional) – Lower threshold for real coordinates.
real_max (array_like, optional) – Upper threshold for real coordinates.
imag_min (array_like, optional) – Lower threshold for imaginary coordinates.
imag_max (array_like, optional) – Upper threshold for imaginary coordinates.
phase_min (array_like, optional) – Lower threshold for phase angle.
phase_max (array_like, optional) – Upper threshold for phase angle.
modulation_min (array_like, optional) – Lower threshold for modulation.
modulation_max (array_like, optional) – Upper threshold for modulation.
open_interval (bool, optional) – If true, the interval is open, and the threshold values are
not included in the interval.
If false (default), the interval is closed, and the threshold values
are included in the interval.
detect_harmonics (bool, optional) – By default, detect presence of multiple harmonics from array shapes.
If false, no harmonics are assumed to be present, and the function
behaves like a numpy universal function.
Return apparent single lifetimes from phasor coordinates.
Parameters:
real (array_like) – Real component of phasor coordinates.
imag (array_like) – Imaginary component of phasor coordinates.
frequency (array_like) – Laser pulse or modulation frequency in MHz.
unit_conversion (float, optional) – Product of frequency and returned lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
The phasor coordinates real (\(G\)) and imag (\(S\))
are converted to apparent single lifetimes
phase_lifetime (\(\tau_{\phi}\)) and
modulation_lifetime (\(\tau_{M}\)) at frequency \(f\)
according to:
real (array_like) – Real component of phasor coordinates.
imag (array_like) – Imaginary component of phasor coordinates.
dtype (dtype_like, optional) – Data type of output array. Either complex64 or complex128.
By default, complex64 if real and imag are float32,
else complex128.
Returns:
complex – Phasor coordinates as complex numbers.
Return type:
ndarray
Examples
Convert phasor coordinates to complex number arrays:
Return multi-harmonic phasor coordinates projected onto principal plane.
Principal Component Analysis (PCA) is used to project
multi-harmonic phasor coordinates onto a plane, along which
coordinate axes the phasor coordinates have the largest variations.
The transformed coordinates are not phasor coordinates. However, the
coordinates can be used in visualization and cursor analysis since
the transformation is affine (preserving collinearity and ratios
of distances).
Parameters:
real (array_like) – Real component of multi-harmonic phasor coordinates.
The first axis is the frequency dimension.
If less than 2-dimensional, size-1 dimensions are prepended.
imag (array_like) – Imaginary component of multi-harmonic phasor coordinates.
Must be of same shape as real.
reorient (bool, optional, default: True) – Reorient coordinates for easier visualization.
The projected coordinates are rotated and scaled, such that
the center lies in same quadrant and the projection
of [1, 0] lies at [1, 0].
Returns:
x (ndarray) – X-coordinates of projected phasor coordinates.
If not reorient, this is the coordinate on the first principal axis.
The shape is real.shape[1:].
y (ndarray) – Y-coordinates of projected phasor coordinates.
If not reorient, this is the coordinate on the second principal axis.
transformation_matrix (ndarray) – Affine transformation matrix used to project phasor coordinates.
The shape is (2,2*real.shape[0]).
An application of PCA to full-harmonic phasor coordinates from MRI signals
can be found in [1].
References
Examples
The phasor coordinates of multi-exponential decays may be almost
indistinguishable at certain frequencies but are separated in the
projection on the principal plane:
Return signal from phasor coordinates using inverse Fourier transform.
Parameters:
mean (array_like) – Average signal intensity (DC).
If not scalar, shape must match the last dimensions of real.
real (array_like) – Real component of phasor coordinates.
Multiple harmonics, if any, must be in the first axis.
imag (array_like) – Imaginary component of phasor coordinates.
Must be same shape as real.
samples (int, default: 64) – Number of signal samples to return. Must be at least three.
harmonic (int, sequence of int, or 'all', optional) – Harmonics included in first axis of real and imag.
If None, lower harmonics are inferred from the shapes of phasor
coordinates (most commonly, lower harmonics are present if the number
of dimensions of mean is one less than real).
If ‘all’, the harmonics in the first axis of phasor coordinates are
the lower harmonics necessary to synthesize samples.
Else, harmonics must be at least one and no larger than half of
samples.
The phasor coordinates of missing harmonics are zeroed
if samples is greater than twice the number of harmonics.
axis (int, optional) – Axis at which to return signal samples.
The default is the last axis (-1).
irfft (callable, optional) – Drop-in replacement function for numpy.fft.irfft.
For example, scipy.fft.irfft or mkl_fft._numpy_fft.irfft.
Used to calculate the real inverse FFT.
Returns:
signal – Reconstructed signal with samples of one period along the last axis.
real (ndarray) – Real component of rotated and scaled phasor coordinates.
imag (ndarray) – Imaginary component of rotated and scaled phasor coordinates.
Notes
The phasor coordinates real (\(G\)) and imag (\(S\))
are rotated by phase (\(\phi\))
and scaled by modulation_zero (\(M\))
around the origin according to:
\[ \begin{align}\begin{aligned}g &= M \cdot \cos{\phi}\\s &= M \cdot \sin{\phi}\\G' &= G \cdot g - S \cdot s\\S' &= G \cdot s + S \cdot g\end{aligned}\end{align} \]
Examples
Use scalar reference coordinates to rotate and scale phasor coordinates:
Return polar coordinates from apparent single lifetimes.
Parameters:
phase_lifetime (ndarray) – Apparent single lifetime from phase.
modulation_lifetime (ndarray, optional) – Apparent single lifetime from modulation.
If None, modulation_lifetime is same as phase_lifetime.
frequency (array_like) – Laser pulse or modulation frequency in MHz.
unit_conversion (float, optional) – Product of frequency and lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
The apparent single lifetimes phase_lifetime (\(\tau_{\phi}\))
and modulation_lifetime (\(\tau_{M}\)) are converted to polar
coordinates phase (\(\phi\)) and modulation (\(M\)) at
frequency \(f\) according to:
Return polar coordinates for calibration from reference coordinates.
Return rotation angle and scale factor for calibrating phasor coordinates
from measured and known polar coordinates of a reference, for example,
a sample of known lifetime.
Parameters:
measured_phase (array_like) – Angular component of measured polar coordinates in radians.
measured_modulation (array_like) – Radial component of measured polar coordinates.
known_phase (array_like) – Angular component of reference polar coordinates in radians.
known_modulation (array_like) – Radial component of reference polar coordinates.
Return polar coordinates for calibration from reference phasor.
Return rotation angle and scale factor for calibrating phasor coordinates
from measured and known phasor coordinates of a reference, for example,
a sample of known lifetime.
Parameters:
measured_real (array_like) – Real component of measured phasor coordinates.
measured_imag (array_like) – Imaginary component of measured phasor coordinates.
known_real (array_like) – Real component of reference phasor coordinates.
known_imag (array_like) – Imaginary component of reference phasor coordinates.
Return apparent single lifetimes from polar coordinates.
Parameters:
phase (array_like) – Angular component of polar coordinates.
imag (array_like) – Radial component of polar coordinates.
frequency (array_like) – Laser pulse or modulation frequency in MHz.
unit_conversion (float, optional) – Product of frequency and returned lifetime units’ prefix factors.
The default is 1e-3 for MHz and ns, or Hz and ms.
Use 1.0 for Hz and s.
The polar coordinates phase (\(\phi\)) and modulation (\(M\))
are converted to apparent single lifetimes
phase_lifetime (\(\tau_{\phi}\)) and
modulation_lifetime (\(\tau_{M}\)) at frequency \(f\)
according to: