.. _device: Device abstraction ================== The physical device or sample is represented by an instance of a `Device` class, which in turn is a QCodeS `DelegateInstrument`. The `Device` class extends its base class by adding attributes and methods specific to the characterization and dot-initialization process. Beside the initialization of instrument parameters and channels, the following attributes are meant to assist in the tuning process: List of gates and ohmics Gates and ohmics are grouped in separate lists in the order specified by a device layout. The index of each gate or ohmic within the respective list should be the item's ID, either `gate_id` or `ohmic_id`. A device layout is specified via a subclass of `DeviceLayout`. Readout How and with which parameters the device should be read out. It is an instance of the `Readout` dataclass where each attribute, one for each readout method, is either a QcoDes `Parameter` or `GroupedParameter`. Typical readout method types are transport, sensing and rf. Main readout method Indicating which readout method should be used to make tuning decisions. Features extracted during a data fit can vary between readout methods, some of which can have more noise than others. nanotune's fitting procedures perform a fit on all of them, but only one is used decide e.g. whether the result is a good one or how gates should be adjusted next. It is added to static metadata and thus to every dataset measured. Normalization constants Keeping track of the highest and lowest signals, i.e. noise floor and open device signal. These values are required for correct classification and need to be measured before tuning and every time settings on readout instruments are changed. Each readout method has its own constants. They are saved to static metadata of the device and thus to metadata of each dataset measured. A separate dataclass is used as a container. Current valid ranges The voltages ranges within which we expect the desired features to occur, determined during tuning. If known, these are the current ranges within which to tune. They typically depend on voltages of other gates and need to be updated during tuning. These are also the ranges which will be swept during measurements. Initial valid ranges The voltages ranges within which we expect the desired features to occur before any tuning has been done. They can be used if ranges can be narrowed down based on prior knowledge such as measurements of other samples or when a device is loaded pre-tuned. Will be set to each gate's safety range if not specified. Transition voltages Voltages at which a gate is able to deplete the electron gas nearby. Specifically, it is the voltage at which the measured signal drops from open to closed regime. These are determined during tuning and depend on voltages set to other gates. Quality Indicating whether the device is fully functional and can thus be considered for dot tuning. The class also has a convenience methods manipulating all gates collectively, which are used for initialization, resetting and normalization constant measurements. The device can be initialized using a yaml file. Here an example of a dot device with three gates, already known normalization constants (which could be the case when re-loading a device), two readout instruments hooked up and some known tuning parameters. .. code-block:: yaml instruments: device_example: type: nanotune.device.device.Device init: device_type: doubledot normalization_constants: transport: [0, 2] sensing: [-0.3, 0.6] channels: type: nanotune.device.device_channel.DeviceChannel top_barrier: channel: dac.ch01 gate_id: 0 left_plunger: channel: dac.ch02 gate_id: 1 left_ohmic: channel: dac.ch10 ohmic_id: 0 readout: transport: lockin.X sensing: rf.phase initial_valid_ranges: top_barrier: [-3, 0] current_valid_ranges: top_barrier: [-0.5, 0] transition_voltages: top_barrier: -0.4 Device layout ------------- The `DeviceLayout` class serves as interface for specifying a device layout. A subclass needs to implement the methods which return the gate IDs of device channels serving the specific purpose. For example, the method `barriers` needs to return the gate IDs of all barriers of the device. `DeviceLayout` is a dataclass inheriting from the abstract `IDeviceLayout`. An example of a device layout is `DoubleDotLayout`. Normalization constants ----------------------- This dataclass is used to hold and update normalization constants of a device. Each attribute keeps track of the constants of one readout method, e.g. transport, sensing and rf. Device channel -------------- A `DeviceChannel` is a wrapper of an instrument channel, e.g. a DAC channel, but with added functionalities. The channel wrapped and passed to init function needs to either implement the methods of a `DACChannelInterface` described in :ref:`drivers`, or be in subclass thereof. This interface setup ensures that channels of different instruments can be used, where it is up to the user to implement the 'glue' between hardware and software. Main attributes of `DeviceChannel` are: Gate ID Identifier indicating which gate of a device the channel represents. Example: a left barrier's ID of a `DoubleDotLayout` is 1. Ohmic ID Identifier indicating which ohmic of a sample or device the channel represents. Safety voltage range Voltage range within which the gate is guaranteed not to damage the device. Supports hardware ramp Whether the instrument channel and thus instrument itself can sweep/set voltages with a hardware ramp. Use ramp Whether voltages should be set or ramped. Ramp rate Rate at which voltages should be ramped if `use_ramp = True`. Max voltage step Maximum voltage step supported by the gate, i.e. the largest voltage change that can be set without ramping such that the device is not damaged. Relay state If the DAC has relay states, this attribute indicates the current setting of it. Examples: ground or floating.