22import logging
33import numpy as np
44from functools import partial
5+ from typing import Union
56try :
67 import zhinst .utils
78except ImportError :
@@ -548,15 +549,13 @@ class ZIUHFLI(Instrument):
548549 * Add zoom-FFT
549550 """
550551
551- def __init__ (self , name , device_ID , ** kwargs ):
552+ def __init__ (self , name : str , device_ID : str , ** kwargs ) -> None :
552553 """
553554 Create an instance of the instrument.
554555
555556 Args:
556557 name (str): The internal QCoDeS name of the instrument
557558 device_ID (str): The device name as listed in the web server.
558- api_level (int): Compatibility mode of the API interface. Must be 5
559- for the UHF.
560559 """
561560
562561 super ().__init__ (name , ** kwargs )
@@ -711,6 +710,26 @@ def __init__(self, name, device_ID, **kwargs):
711710 vals = vals .Enum (* list (dmtrigs .keys ()))
712711 )
713712
713+ self .add_parameter ('demod{}_sample' .format (demod ),
714+ label = 'Demod sample' ,
715+ get_cmd = partial (self ._getter , 'demods' ,
716+ demod - 1 , 2 , 'sample' ),
717+ snapshot_value = False
718+ )
719+
720+ for demod_param in ['x' , 'y' , 'R' , 'phi' ]:
721+ if demod_param in ('x' , 'y' , 'R' ):
722+ unit = 'V'
723+ else :
724+ unit = 'deg'
725+ self .add_parameter ('demod{}_{}' .format (demod , demod_param ),
726+ label = 'Demod {} {}' .format (demod , demod_param ),
727+ get_cmd = partial (self ._get_demod_sample ,
728+ demod - 1 , demod_param ),
729+ snapshot_value = False ,
730+ unit = unit
731+ )
732+
714733 ########################################
715734 # SIGNAL INPUTS
716735
@@ -1440,7 +1459,8 @@ def _setter(self, module, number, mode, setting, value):
14401459 if mode == 1 :
14411460 self .daq .setDouble (setstr , value )
14421461
1443- def _getter (self , module , number , mode , setting ):
1462+ def _getter (self , module : str , number : int ,
1463+ mode : int , setting : str ) -> Union [float , int , str , dict ]:
14441464 """
14451465 General get function for generic parameters. Note that some parameters
14461466 use more specialised setter/getters.
@@ -1453,22 +1473,38 @@ def _getter(self, module, number, mode, setting):
14531473 we want to know the value of.
14541474 number (int): Module's index
14551475 mode (int): Indicating whether we are asking for an int or double.
1456- 0: Int, 1: double.
1476+ 0: Int, 1: double, 2: Sample
14571477 setting (str): The module's setting to set.
14581478 returns:
14591479 inquered value
14601480
14611481 """
14621482
14631483 querystr = '/{}/{}/{}/{}' .format (self .device , module , number , setting )
1484+ log .debug ("getting %s" , querystr )
14641485 if mode == 0 :
14651486 value = self .daq .getInt (querystr )
1466- if mode == 1 :
1487+ elif mode == 1 :
14671488 value = self .daq .getDouble (querystr )
1468-
1489+ elif mode == 2 :
1490+ value = self .daq .getSample (querystr )
1491+ else :
1492+ raise RuntimeError ("Invalid mode supplied" )
14691493 # Weird exception, samplingrate returns a string
14701494 return value
14711495
1496+ def _get_demod_sample (self , number : int , demod_param : str ) -> float :
1497+ log .debug ("getting demod %s param %s" , number , demod_param )
1498+ mode = 2
1499+ module = 'demods'
1500+ setting = 'sample'
1501+ if demod_param not in ['x' , 'y' , 'R' , 'phi' ]:
1502+ raise RuntimeError ("Invalid demodulator parameter" )
1503+ datadict = self ._getter (module , number , mode , setting )
1504+ datadict ['R' ] = np .abs (datadict ['x' ] + 1j * datadict ['y' ])
1505+ datadict ['phi' ] = np .angle (datadict ['x' ] + 1j * datadict ['y' ], deg = True )
1506+ return datadict [demod_param ]
1507+
14721508 def _sigout_setter (self , number , mode , setting , value ):
14731509 """
14741510 Function to set signal output's settings. A specific setter function is
@@ -1787,7 +1823,7 @@ def add_signal_to_sweeper(self, demodulator, attribute):
17871823 raise ValueError ('Can not select attribute:' +
17881824 '{}. Only the following attributes are' +
17891825 ' available: ' +
1790- ('{}, ' * len (attributes )).format (* attributes ))
1826+ ('{}, ' * len (valid_attributes )).format (* valid_attributes ))
17911827
17921828 # internally, we use strings very similar to the ones used by the
17931829 # instrument, but with the attribute added, e.g.
0 commit comments