aboutsummaryrefslogtreecommitdiff
path: root/qolab/hardware/scope
diff options
context:
space:
mode:
authorEugeniy E. Mikhailov <evgmik@gmail.com>2024-07-13 22:42:17 -0400
committerEugeniy E. Mikhailov <evgmik@gmail.com>2024-07-13 22:42:17 -0400
commitc9df7b5bd3fb360c80a13d69b9bf70af03b2515a (patch)
treef50059e4d384d259bc283e802b76d40863c6a89f /qolab/hardware/scope
parentf222b5f449af3db638101420070c8b9d78abe95a (diff)
downloadqolab-c9df7b5bd3fb360c80a13d69b9bf70af03b2515a.tar.gz
qolab-c9df7b5bd3fb360c80a13d69b9bf70af03b2515a.zip
black formatter
Diffstat (limited to 'qolab/hardware/scope')
-rw-r--r--qolab/hardware/scope/__init__.py93
1 files changed, 62 insertions, 31 deletions
diff --git a/qolab/hardware/scope/__init__.py b/qolab/hardware/scope/__init__.py
index 80e9cb2..e7fb7eb 100644
--- a/qolab/hardware/scope/__init__.py
+++ b/qolab/hardware/scope/__init__.py
@@ -6,7 +6,7 @@ Created by Eugeniy E. Mikhailov 2021/11/29
from qolab.hardware.scpi import SCPIinstr
from qolab.hardware.basic import BasicInstrument
from qolab.data.trace import TraceSetSameX
-import yaml
+
class Scope(BasicInstrument):
"""Minimal class to implement a scope.
@@ -15,67 +15,97 @@ class Scope(BasicInstrument):
Provide a minimal set of methods to be implemented by a scope.
"""
+
def __init__(self, *args, **kwds):
BasicInstrument.__init__(self, *args, **kwds)
- self.config['Device type']='Scope'
- self.config['Device model'] = 'Generic Scope Without Hardware interface'
- self.config['FnamePrefix'] = 'scope'
+ self.config["Device type"] = "Scope"
+ self.config["Device model"] = "Generic Scope Without Hardware interface"
+ self.config["FnamePrefix"] = "scope"
self.numberOfChannels = 0
# deviceProperties must have 'get' and preferably 'set' methods available,
# i.e. 'SampleRate' needs getSampleRate() and love to have setSampleRate(value)
# they will be used to obtain config and set device according to it
- self.deviceProperties.update({'SampleRate', 'TimePerDiv', 'TrigDelay', 'TriggerMode', 'Roll', 'Run' })
- # same is applied to channelProperties but we need setter/getter with channel number
- # i.e. VoltsPerDiv -> getChanVoltsPerDiv(chNum) and setSampleRate(chNum, value)
- self.channelProperties = {'VoltsPerDiv', 'VoltageOffset', }
-
- def getTrace(self, chNum, availableNpnts=None, maxRequiredPoints=None, decimate=True):
- # Should work with minimal arguments list
+ self.deviceProperties.update(
+ {"SampleRate", "TimePerDiv", "TrigDelay", "TriggerMode", "Roll", "Run"}
+ )
+ # same is applied to channelProperties
+ # but we need setter/getter with channel number
+ # i.e. VoltsPerDiv must provide
+ # getChanVoltsPerDiv(chNum) and setSampleRate(chNum, value)
+ self.channelProperties = {
+ "VoltsPerDiv",
+ "VoltageOffset",
+ }
+
+ def getTrace(
+ self, chNum, availableNpnts=None, maxRequiredPoints=None, decimate=True
+ ):
+ # Should work with minimal arguments list
# but might be faster if parameters provided: less IO requests
# old_trg_mode = self.getTriggerMode()
# self.setTriggerMode('STOP'); # to get synchronous channels
- raise NotImplementedError( 'getTrace function is not implemented' )
+ raise NotImplementedError("getTrace function is not implemented")
# if old_trg_mode != "STOP":
- # short speed up here with this check
- # self.setTriggerMode(old_trg_mode)
+ # short speed up here with this check
+ # self.setTriggerMode(old_trg_mode)
def getTriggerMode(self):
# we expect NORM, AUTO, SINGLE, STOP
- raise NotImplementedError( 'getTriggerMode function is not implemented' )
+ raise NotImplementedError("getTriggerMode function is not implemented")
def setTriggerMode(self, mode):
# we expect NORM, AUTO, SINGLE, STOP
- raise NotImplementedError( 'setTriggerMode function is not implemented' )
+ raise NotImplementedError("setTriggerMode function is not implemented")
def getAllTraces(self, availableNpnts=None, maxRequiredPoints=None, decimate=True):
- allTraces=TraceSetSameX('scope traces')
- allTraces.config['tags']['DAQ']=self.getConfig()
+ allTraces = TraceSetSameX("scope traces")
+ allTraces.config["tags"]["DAQ"] = self.getConfig()
old_trg_mode = self.getTriggerMode()
- self.setTriggerMode('STOP'); # to get synchronous channels
- for chNum in range(1, self.numberOfChannels+1):
- allTraces.addTrace( self.getTrace(chNum, availableNpnts=availableNpnts, maxRequiredPoints=maxRequiredPoints, decimate=decimate) )
+ self.setTriggerMode("STOP")
+ # to get synchronous channels
+ for chNum in range(1, self.numberOfChannels + 1):
+ allTraces.addTrace(
+ self.getTrace(
+ chNum,
+ availableNpnts=availableNpnts,
+ maxRequiredPoints=maxRequiredPoints,
+ decimate=decimate,
+ )
+ )
# restore scope to the before acquisition mode
if old_trg_mode != "STOP":
# short speed up here with this check
self.setTriggerMode(old_trg_mode)
- return( allTraces )
+ return allTraces
def plot(self, **kwargs):
- allTraces=self.getAllTraces(**kwargs)
+ allTraces = self.getAllTraces(**kwargs)
allTraces.plot()
- def save(self, fname=None, item_format='e', availableNpnts=None, maxRequiredPoints=None, decimate=True, extension='dat'):
- allTraces = self.getAllTraces(availableNpnts=availableNpnts, maxRequiredPoints=maxRequiredPoints, decimate=decimate)
- allTraces.config['item_format']=item_format
+ def save(
+ self,
+ fname=None,
+ item_format="e",
+ availableNpnts=None,
+ maxRequiredPoints=None,
+ decimate=True,
+ extension="dat",
+ ):
+ allTraces = self.getAllTraces(
+ availableNpnts=availableNpnts,
+ maxRequiredPoints=maxRequiredPoints,
+ decimate=decimate,
+ )
+ allTraces.config["item_format"] = item_format
if fname is None:
fname = self.getNextDataFile(extension=extension)
allTraces.save(fname)
- print(f'Data saved to: {fname}')
- return(fname)
+ print(f"Data saved to: {fname}")
+ return fname
class ScopeSCPI(SCPIinstr, Scope):
- """SCPI aware scope.
+ """SCPI aware scope.
Use as a parent for a hardware aware scope classes.
@@ -85,11 +115,12 @@ class ScopeSCPI(SCPIinstr, Scope):
>>> rm = pyvisa.ResourceManager()
>>> ScopeSCPI(rm.open_resource('TCPIP::192.168.0.2::INSTR'))
"""
+
def __init__(self, resource, *args, **kwds):
SCPIinstr.__init__(self, resource)
Scope.__init__(self, *args, **kwds)
- self.config['DeviceId'] = str.strip(self.idn)
+ self.config["DeviceId"] = str.strip(self.idn)
+
from .sds1104x import SDS1104X
from .sds2304x import SDS2304X
-