diff --git a/README.md b/README.md index 37004ac..5cf823a 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,35 @@ sweep.start() the notebook cell output, so database switches and sweep transitions are visible while the queue runs. +## Sweep Timing Constraints + +MeasureIt enforces minimum delay values to ensure thread-safe operation and reliable measurement timing: + +| Parameter | Minimum Value | Applies To | Description | +|-----------|--------------|------------|-------------| +| `inter_delay` | **0.01s** (10ms) | All sweeps (Sweep1D, Sweep2D inner) | Time between measurement points | +| `outer_delay` | **0.1s** (100ms) | Sweep2D outer sweep | Time between outer sweep lines | + +**Why These Minimums?** +- These minimums ensure reliable data collection and prevent measurement timing issues +- They protect the runner thread timing and ensure stable communication between measurement threads +- Values below these minimums will raise a `ValueError` with a descriptive error message +- The defaults (`inter_delay=0.1s`, `outer_delay=1.0s`) are safe for most use cases + +**Example:** +```python +# Valid sweep with minimum delays +sweep2d = measureit.Sweep2D( + in_params=[inner_param, 0, 1, 0.01], + out_params=[outer_param, 0, 10, 0.1], + inter_delay=0.01, # Minimum allowed + outer_delay=0.1 # Minimum allowed +) + +# This would raise ValueError: inter_delay too small +# sweep2d = measureit.Sweep2D(..., inter_delay=0.005) # < 0.01s ❌ +``` + ## Documentation ### Building Documentation diff --git a/src/measureit/sweep/base_sweep.py b/src/measureit/sweep/base_sweep.py index 25e5297..d4c7df9 100644 --- a/src/measureit/sweep/base_sweep.py +++ b/src/measureit/sweep/base_sweep.py @@ -42,7 +42,8 @@ class BaseSweep(QObject): set_param: QCoDeS Parameter to be swept, defaults to None for 0D sweep. inter_delay: - Time (in seconds) to wait between data points. + Time (in seconds) to wait between data points. Must be >= 0.01s. + Default: 0.1s save_data: Flag used to determine if the data should be saved or not. plot_data: @@ -149,7 +150,8 @@ def __init__( set_param: QCoDeS Parameter to be swept, defaults to None for 0D sweep. inter_delay: - Time (in seconds) to wait between data points. + Time (in seconds) to wait between data points. Must be >= 0.01s. + Default: 0.1s save_data: Flag used to determine if the data should be saved or not. plot_data: diff --git a/src/measureit/sweep/sweep2d.py b/src/measureit/sweep/sweep2d.py index c259530..9b62719 100644 --- a/src/measureit/sweep/sweep2d.py +++ b/src/measureit/sweep/sweep2d.py @@ -25,9 +25,11 @@ class Sweep2D(BaseSweep, QObject): out_params: List defining the outer sweep [parameter, start, stop, step]. inter_delay: - Time (in seconds) to wait between data points on inner sweep. + Time (in seconds) to wait between data points on inner sweep. Must be >= 0.01s. + Default: 0.1s outer_delay: - Time (in seconds) to wait between data points on outer sweep. + Time (in seconds) to wait between data points on outer sweep. Must be >= 0.1s. + Default: 1.0s save_data: Flag used to determine if the data should be saved or not. plot_data: @@ -116,9 +118,11 @@ def __init__( out_params: A list conforming to above standard for the outer sweep. inter_delay: - Time (in seconds) to wait between data points on inner sweep. + Time (in seconds) to wait between data points on inner sweep. Must be >= 0.01s. + Default: 0.1s outer_delay: - Time (in seconds) to wait between data points on outer sweep. + Time (in seconds) to wait between data points on outer sweep. Must be >= 0.1s. + Default: 1.0s save_data: Flag used to determine if the data should be saved or not. plot_data: