"""Provides methods to fetch and read the SlotPhase measurement results."""
import functools
import nirfmxcdma2k.attributes as attributes
import nirfmxcdma2k.errors as errors
import nirfmxcdma2k.internal._helper as _helper
def _raise_if_disposed(f):
"""From https://stackoverflow.com/questions/5929107/decorators-with-parameters."""
@functools.wraps(f)
def aux(*xs, **kws):
meas_obj = xs[0] # parameter 0 is 'self' which is the measurement object
if meas_obj._signal_obj.is_disposed:
raise Exception("Cannot access a disposed Cdma2k signal configuration")
return f(*xs, **kws)
return aux
[docs]
class SlotPhaseResults(object):
"""Provides methods to fetch and read the SlotPhase measurement results."""
def __init__(self, signal_obj):
"""Provides methods to fetch and read the SlotPhase measurement results."""
self._signal_obj = signal_obj
self._session_function_lock = signal_obj._session_function_lock
self._interpreter = signal_obj._interpreter
[docs]
@_raise_if_disposed
def get_maximum_phase_discontinuity(self, selector_string):
r"""Gets the maximum slot phase discontinuity value observed in the measurement interval. This value is expressed in
degrees.
You do not need to use a selector string to read this result for the default signal and result instance. Refer
to the `Selector String <https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ topic for
information about the string syntax for named signals and named results.
Args:
selector_string (string):
Pass an empty string.
Returns:
Tuple (attr_val, error_code):
attr_val (float):
Returns the maximum slot phase discontinuity value observed in the measurement interval. This value is expressed in
degrees.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self._signal_obj
)
attr_val, error_code = self._interpreter.get_attribute_f64(
updated_selector_string,
attributes.AttributeID.SLOTPHASE_RESULTS_MAXIMUM_PHASE_DISCONTINUITY.value,
)
finally:
self._session_function_lock.exit_read_lock()
return attr_val, error_code
[docs]
@_raise_if_disposed
def fetch_phase_discontinuities(self, selector_string, timeout):
r"""Fetches the phase discontinuity values for the slot boundaries in the measurement interval.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. Examples:
""
"signal::sig1"
"result::r1"
"signal::sig1/result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
timeout (float):
This parameter specifies the timeout for fetching the specified measurement. This value is expressed in seconds. Set
this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the
method waits until the measurement is complete. The default value is 10.
Returns:
Tuple (slot_phase_discontinuity, error_code):
slot_phase_discontinuity (float):
This parameter returns the array of phase discontinuity values for the slot boundaries in the measurement interval.
This value is expressed in degrees.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self._signal_obj
)
slot_phase_discontinuity, error_code = (
self._interpreter.slotphase_fetch_phase_discontinuities(
updated_selector_string, timeout
)
)
finally:
self._session_function_lock.exit_read_lock()
return slot_phase_discontinuity, error_code
[docs]
@_raise_if_disposed
def fetch_chip_phase_error_trace(self, selector_string, timeout, chip_phase_error):
r"""Fetches the chip phase error trace for the SlotPhase measurement. The chip phase error is the phase error between the
received waveform and the reference waveform.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. Examples:
""
"signal::sig1"
"result::r1"
"signal::sig1/result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
timeout (float):
This parameter specifies the timeout for fetching the specified measurement. This value is expressed in seconds. Set
this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the
method waits until the measurement is complete. The default value is 10.
chip_phase_error (numpy.float32):
This parameter returns the array of chip phase error for the SlotPhase measurement.
Returns:
Tuple (x0, dx, error_code):
x0 (float):
This parameter returns the start time. This value is expressed in seconds.
dx (float):
This parameter returns the delta parameter.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self._signal_obj
)
x0, dx, error_code = self._interpreter.slotphase_fetch_chip_phase_error_trace(
updated_selector_string, timeout, chip_phase_error
)
finally:
self._session_function_lock.exit_read_lock()
return x0, dx, error_code
[docs]
@_raise_if_disposed
def fetch_chip_phase_error_linear_fit_trace(
self, selector_string, timeout, chip_phase_error_linear_fit
):
r"""Fetches the chip phase error trace linear fit trace for the SlotPhase measurement. The linear fit is obtained from the
chip phase error on a slot basis. If a transient duration greater than zero is configured, the linear fit computation
ignores the data of the transient duration on either side of the slot boundary and extrapolates the phase error to the
slot boundaries.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. Examples:
""
"signal::sig1"
"result::r1"
"signal::sig1/result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
timeout (float):
This parameter specifies the timeout for fetching the specified measurement. This value is expressed in seconds. Set
this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the
method waits until the measurement is complete. The default value is 10.
chip_phase_error_linear_fit (numpy.float32):
This parameter returns the array of chip phase error for the SlotPhase measurement.
Returns:
Tuple (x0, dx, error_code):
x0 (float):
This parameter returns the start time. This value is expressed in seconds.
dx (float):
This parameter returns the delta parameter.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self._signal_obj
)
x0, dx, error_code = (
self._interpreter.slotphase_fetch_chip_phase_error_linear_fit_trace(
updated_selector_string, timeout, chip_phase_error_linear_fit
)
)
finally:
self._session_function_lock.exit_read_lock()
return x0, dx, error_code
[docs]
@_raise_if_disposed
def fetch_maximum_phase_discontinuity(self, selector_string, timeout):
r"""Fetches the maximum phase discontinuity value observed in the measurement interval.
Args:
selector_string (string):
This parameter specifies a `Selector String
<https://www.ni.com/docs/en-US/bundle/rfmx/page/selector-strings-net.html>`_ comprising of result
name. Examples:
""
"signal::sig1"
"result::r1"
"signal::sig1/result::r1"
You can use the :py:meth:`build_result_string` method to build the selector string.
timeout (float):
This parameter specifies the timeout for fetching the specified measurement. This value is expressed in seconds. Set
this value to an appropriate time, longer than expected for fetching the measurement. A value of -1 specifies that the
method waits until the measurement is complete. The default value is 10.
Returns:
Tuple (maximum_phase_discontinuity, error_code):
maximum_phase_discontinuity (float):
This parameter returns the maximum slot phase discontinuity value observed in the measurement interval. This value is
expressed in degrees.
error_code (int):
Returns the status code of this method. The status code either indicates success or describes a warning condition.
"""
try:
self._session_function_lock.enter_read_lock()
_helper.validate_not_none(selector_string, "selector_string")
updated_selector_string = _helper.validate_and_update_selector_string(
selector_string, self._signal_obj
)
maximum_phase_discontinuity, error_code = (
self._interpreter.slotphase_fetch_maximum_phase_discontinuity(
updated_selector_string, timeout
)
)
finally:
self._session_function_lock.exit_read_lock()
return maximum_phase_discontinuity, error_code