aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qolab/hardware/scope/_basic.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/qolab/hardware/scope/_basic.py b/qolab/hardware/scope/_basic.py
index 751026d..261e947 100644
--- a/qolab/hardware/scope/_basic.py
+++ b/qolab/hardware/scope/_basic.py
@@ -157,6 +157,34 @@ class Scope(BasicInstrument):
self.setRun(old_run_status) # start running if it was old run state
return allTraces
+ def restorePriorToFastGrab(self, chNum, old_config):
+ """Restore relevant channel/scope settings prior to fast grab tune up."""
+ logger.info("method restorePriorToFastGrab is not implemented")
+
+ def switchToFastGrab(self, chNum):
+ """Switch scope to the fastest mode for trace delivery.
+
+ Intended to be used in chanAutoScale methods where speed
+ transfer is more important than fidelity. It is good
+ idea to implement function ``restorePriorToFastGrab(chan, old_config)``
+ to be used in conjunction with ``switchToFastGrab``.
+
+ To be fast, it should aim to decrease data transfer time,
+ i.e. reduce number of transferred point.
+ It also need to be interface dependent. GPIB and USB are known
+ to be quite slow when compared to network connection.
+
+ So try to be smart in hardware dependent classes.
+
+ Return
+ ------
+ old_config : dictionary
+ old config with settings necessary to restore initial state
+ """
+
+ logger.info("machinery for switchToFastGrab is not implemented")
+ return self.getConfig()
+
def chanAutoScale(self, chNum, margin=0.125, timeout=5):
"""Auto scale channel to fit signal on screen.
@@ -174,6 +202,7 @@ class Scope(BasicInstrument):
at top and bottom for 8 division scope.
"""
+ old_config = self.switchToFastGrab(chNum)
starttime = time.time()
deadline = starttime + timeout
timespan = self.getTimePerDiv() * self.horizDivOnScreen
@@ -222,6 +251,7 @@ class Scope(BasicInstrument):
# we converge, there is no point to improve
break
scaled_corectly = False
+ self.restorePriorToFastGrab(chNum, old_config)
if time.time() > deadline:
logger.warning(
f"Scope did not make proper channel {chNum} scaling within {timeout=} sec."