def __init__(self, name, **kwargs): dll_path = 'C:\\WINDOWS\\System32\\ATSApi.dll' super().__init__(name, dll_path=dll_path, **kwargs) # add parameters # ----- Parameters for the configuration of the board ----- self.add_parameter(name='clock_source', parameter_class=TraceParameter, label='Clock Source', unit=None, initial_value='INTERNAL_CLOCK', val_mapping={ 'INTERNAL_CLOCK': 1, 'SLOW_EXTERNAL_CLOCK': 4, 'EXTERNAL_CLOCK_AC': 5, 'EXTERNAL_CLOCK_10_MHz_REF': 7 }) self.add_parameter(name='external_sample_rate', get_cmd=None, parameter_class=TraceParameter, label='External Sample Rate', unit='S/s', vals=validators.Enum(1_000_000_000), initial_value=1_000_000_000) self.add_parameter(name='sample_rate', parameter_class=TraceParameter, label='Sample Rate', unit='S/s', initial_value=1000000000, val_mapping={ 1000: 0x1, 2000: 0x2, 5000: 0x4, 10000: 0x8, 20000: 0xA, 50000: 0xC, 100000: 0xE, 200000: 0x10, 500000: 0x12, 1000000: 0x14, 2000000: 0x18, 5000000: 0x1A, 10000000: 0x1C, 20000000: 0x1E, 50000000: 0x22, 100000000: 0x24, 250000000: 0x2B, 500000000: 0x30, 1000000000: 0x35, 'EXTERNAL_CLOCK': 0x40, '1GHz_REFERENCE_CLOCK': 1000000000 }) self.add_parameter(name='clock_edge', parameter_class=TraceParameter, label='Clock Edge', unit=None, initial_value='CLOCK_EDGE_RISING', val_mapping={ 'CLOCK_EDGE_RISING': 0, 'CLOCK_EDGE_FALLING': 1 }) self.add_parameter(name='decimation', parameter_class=TraceParameter, label='Decimation', unit=None, initial_value=0, vals=validators.Ints(0, 100000)) for i in ['1', '2']: self.add_parameter(name='coupling' + i, parameter_class=TraceParameter, label='Coupling channel ' + i, unit=None, initial_value='AC', val_mapping={ 'AC': 1, 'DC': 2 }) self.add_parameter(name='channel_range' + i, parameter_class=TraceParameter, label='Range channel ' + i, unit='V', initial_value=4, val_mapping={ 0.04: 2, 0.1: 5, 0.2: 6, 0.4: 7, 1.0: 10, 2.0: 11, 4.0: 12 }) self.add_parameter(name='impedance' + i, parameter_class=TraceParameter, label='Impedance channel ' + i, unit='Ohm', initial_value=50, val_mapping={ 1000000: 1, 50: 2 }) self.add_parameter(name='bwlimit' + i, parameter_class=TraceParameter, label='Bandwidth limit channel ' + i, unit=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0, 'ENABLED': 1 }) self.add_parameter(name='trigger_operation', parameter_class=TraceParameter, label='Trigger Operation', unit=None, initial_value='TRIG_ENGINE_OP_J', val_mapping={ 'TRIG_ENGINE_OP_J': 0, 'TRIG_ENGINE_OP_K': 1, 'TRIG_ENGINE_OP_J_OR_K': 2, 'TRIG_ENGINE_OP_J_AND_K': 3, 'TRIG_ENGINE_OP_J_XOR_K': 4, 'TRIG_ENGINE_OP_J_AND_NOT_K': 5, 'TRIG_ENGINE_OP_NOT_J_AND_K': 6 }) for i in ['1', '2']: self.add_parameter(name='trigger_engine' + i, parameter_class=TraceParameter, label='Trigger Engine ' + i, unit=None, initial_value='TRIG_ENGINE_' + ('J' if i == '1' else 'K'), val_mapping={ 'TRIG_ENGINE_J': 0, 'TRIG_ENGINE_K': 1 }) self.add_parameter(name='trigger_source' + i, parameter_class=TraceParameter, label='Trigger Source ' + i, unit=None, initial_value='DISABLE', val_mapping={ 'CHANNEL_A': 0, 'CHANNEL_B': 1, 'EXTERNAL': 2, 'DISABLE': 3 }) self.add_parameter(name='trigger_slope' + i, parameter_class=TraceParameter, label='Trigger Slope ' + i, unit=None, initial_value='TRIG_SLOPE_POSITIVE', val_mapping={ 'TRIG_SLOPE_POSITIVE': 1, 'TRIG_SLOPE_NEGATIVE': 2 }) self.add_parameter(name='trigger_level' + i, parameter_class=TraceParameter, label='Trigger Level ' + i, unit=None, initial_value=128, vals=validators.Ints(0, 255)) self.add_parameter(name='external_trigger_coupling', parameter_class=TraceParameter, label='External Trigger Coupling', unit=None, initial_value='DC', val_mapping={'DC': 2}) self.add_parameter(name='external_trigger_range', parameter_class=TraceParameter, label='External Trigger Range', unit=None, initial_value='ETR_5V', val_mapping={ 'ETR_5V': 0, 'ETR_1V': 1 }) self.add_parameter(name='trigger_delay', parameter_class=TraceParameter, label='Trigger Delay', unit='Sample clock cycles', initial_value=0, vals=validators.Ints(min_value=0)) self.add_parameter(name='timeout_ticks', parameter_class=TraceParameter, label='Timeout Ticks', unit='10 us', initial_value=0, vals=validators.Ints(min_value=0)) self.add_parameter(name='aux_io_mode', parameter_class=TraceParameter, label='AUX I/O Mode', unit=None, initial_value='AUX_IN_AUXILIARY', val_mapping={ 'AUX_OUT_TRIGGER': 0, 'AUX_IN_TRIGGER_ENABLE': 1, 'AUX_IN_AUXILIARY': 13 }) self.add_parameter(name='aux_io_param', parameter_class=TraceParameter, label='AUX I/O Param', unit=None, initial_value='NONE', val_mapping={ 'NONE': 0, 'TRIG_SLOPE_POSITIVE': 1, 'TRIG_SLOPE_NEGATIVE': 2 }) # ----- Parameters for the acquire function ----- self.add_parameter(name='mode', label='Acquisition mode', unit=None, initial_value='NPT', get_cmd=None, set_cmd=None, val_mapping={ 'NPT': 0x200, 'TS': 0x400 }) # samples_per_record must be a multiple of of some number (64 in the # case of ATS9870) and and has some minimum (256 in the case of ATS9870) # These values can be found in the ATS-SDK programmar's guide self.add_parameter(name='samples_per_record', label='Samples per Record', unit=None, initial_value=96000, get_cmd=None, set_cmd=None, vals=validators.Multiples(divisor=64, min_value=256)) self.add_parameter(name='records_per_buffer', label='Records per Buffer', unit=None, initial_value=1, get_cmd=None, set_cmd=None, vals=validators.Ints(min_value=0)) self.add_parameter(name='buffers_per_acquisition', label='Buffers per Acquisition', unit=None, get_cmd=None, set_cmd=None, initial_value=1, vals=validators.Ints(min_value=0)) self.add_parameter(name='channel_selection', label='Channel Selection', unit=None, get_cmd=None, set_cmd=None, initial_value='AB', val_mapping={ 'A': 1, 'B': 2, 'AB': 3 }) self.add_parameter(name='transfer_offset', label='Transfer Offset', unit='Samples', get_cmd=None, set_cmd=None, initial_value=0, vals=validators.Ints(min_value=0)) self.add_parameter(name='external_startcapture', label='External Startcapture', unit=None, get_cmd=None, set_cmd=None, initial_value='ENABLED', val_mapping={ 'DISABLED': 0X0, 'ENABLED': 0x1 }) self.add_parameter(name='enable_record_headers', label='Enable Record Headers', unit=None, get_cmd=None, set_cmd=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0x0, 'ENABLED': 0x8 }) self.add_parameter(name='alloc_buffers', label='Alloc Buffers', unit=None, get_cmd=None, set_cmd=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0x0, 'ENABLED': 0x20 }) self.add_parameter(name='fifo_only_streaming', label='Fifo Only Streaming', unit=None, get_cmd=None, set_cmd=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0x0, 'ENABLED': 0x800 }) self.add_parameter(name='interleave_samples', label='Interleave Samples', unit=None, get_cmd=None, set_cmd=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0x0, 'ENABLED': 0x1000 }) self.add_parameter(name='get_processed_data', label='Get Processed Data', unit=None, get_cmd=None, set_cmd=None, initial_value='DISABLED', val_mapping={ 'DISABLED': 0x0, 'ENABLED': 0x2000 }) self.add_parameter(name='allocated_buffers', label='Allocated Buffers', unit=None, get_cmd=None, set_cmd=None, initial_value=1, vals=validators.Ints(min_value=0)) self.add_parameter(name='buffer_timeout', label='Buffer Timeout', unit='ms', get_cmd=None, set_cmd=None, initial_value=1000, vals=validators.Ints(min_value=0)) model = self.get_idn()['model'] if model != 'ATS9870': raise Exception("The Alazar board kind is not 'ATS9870'," " found '" + str(model) + "' instead.")
parameter_class=TraceParameter, label='External Trigger Range', unit=None, initial_value='ETR_5V', val_mapping={ 'ETR_5V': 0, 'ETR_TTL': 2 }) self.add_parameter(name='trigger_delay', get_cmd=None, set_cmd=None, parameter_class=TraceParameter, label='Trigger Delay', unit='Sample clock cycles', initial_value=0, vals=validators.Multiples(divisor=8, min_value=0)) self.add_parameter(name='timeout_ticks', get_cmd=None, set_cmd=None, parameter_class=TraceParameter, label='Timeout Ticks', unit='10 us', initial_value=0, vals=validators.Ints(min_value=0)) # The card has two AUX I/O ports, which only AUX 2 is controlled by # the software (AUX 1 is controlled by the firmware). The user should # use AUX 2 for controlling the AUX via aux_io_mode and aux_io_param. self.add_parameter(name='aux_io_mode', get_cmd=None, set_cmd=None, parameter_class=TraceParameter,