diff --git a/Signal_Import_by_File/Signal_Import_by_File.ini b/Signal_Import_by_File/Signal_Import_by_File.ini new file mode 100644 index 0000000000000000000000000000000000000000..856c0e91dc5033663ab53b343c5262835872bda2 --- /dev/null +++ b/Signal_Import_by_File/Signal_Import_by_File.ini @@ -0,0 +1,72 @@ +# Instrument driver configuration file. + +[General settings] + +# The name is shown in all the configuration windows +name: Signal_Import_by_File + +# The version string should be updated whenever changes are made to this config file +version: 1.0 + +# Name of folder containing the code defining a custom driver. Do not define this item +# or leave it blank for any standard driver based on the built-in VISA interface. +driver_path: Signal_Import_by_File + +# Define that the driver is a Signal Generator +signal_generator: True + +# Define quantities in sections. This list is a selection of allowed keywords, +# see the manual for a full list of options +# datatype: The datatype should be one of DOUBLE, BOOLEAN, COMBO, +# STRING, COMPLEX, VECTOR, VECTOR_COMPLEX, PATH or BUTTON. +# unit: Quantity unit +# set_cmd: Command used to send data to the instrument. Put <*> where the value should appear. +# get_cmd: Command used to get the data from the instrument. Default is set_cmd? +# def_value: Default value +# low_lim: Lowest allowable value. Defaults to -INF +# high_lim: Highest allowable values. Defaults to +INF +# combo_def_1: First option in a pull-down combo box. Only used when datatype=COMBO +# combo_def_2: Second option in a pull-down combo box. Only used when datatype=COMBO +# ... +# combo_def_n: nth option in a pull-down combo box. Only used when datatype=COMBO +# state_quant: Quantity that determines this control's visibility +# state_value_1: Value of "state_quant" for which the control is visible +# state_value_2: Value of "state_quant" for which the control is visible +# ... +# state_value_n: Value of "state_quant" for which the control is visible +# permission: Sets read/writability, options are BOTH, READ, WRITE or NONE. Default is BOTH +# group: Name of the group where the control belongs. +# section: Name of the section where the control belongs. + +[Datapath] +datatype: STRING +def_value: C:\Users\ + +[Skip Header] +datatype: DOUBLE +def_value: 1 + +[Skip Footer] +datatype: DOUBLE +def_value: 0 + +[Delimiter] +datatype: STRING +def_value: , + +[Add noise] +datatype: BOOLEAN +def_value: False + +[Noise amplitude] +datatype: DOUBLE +unit: V +def_value: 0.1 +state_quant: Add noise +state_value_1: True + +[Signal] +datatype: VECTOR +permission: READ +x_name: Time +x_unit: s diff --git a/Signal_Import_by_File/Signal_Import_by_File.py b/Signal_Import_by_File/Signal_Import_by_File.py new file mode 100644 index 0000000000000000000000000000000000000000..a6eed6dec219edf8f73f80d48957182dafe786fd --- /dev/null +++ b/Signal_Import_by_File/Signal_Import_by_File.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Aug 30 18:36:00 2018 + +@author: tebbe +""" + +import InstrumentDriver +import numpy as np + +class Driver(InstrumentDriver.InstrumentWorker): + """ This class implements a simple signal generator driver""" + + + def performOpen(self, options={}): + """Perform the operation of opening the instrument connection""" + pass + + + def performClose(self, bError=False, options={}): + """Perform the close instrument connection operation""" + pass + + + def performSetValue(self, quant, value, sweepRate=0.0, options={}): + """Perform the Set Value instrument operation. This function should + return the actual value set by the instrument""" + # just return the value + return value + + + def performGetValue(self, quant, options={}): + """Perform the Get Value instrument operation""" + # proceed depending on quantity + if quant.name == 'Signal': + # if asking for signal, start with getting values of other controls + DATAPATH=self.getValue('Datapath') + skiph=int(self.getValue('Skip Header')) + skipf=int(self.getValue('Skip Footer')) + delim=self.getValue('Delimiter') + if not len(delim): + delim=' ' + data= np.genfromtxt(DATAPATH, delimiter = delim, skip_header=skiph, skip_footer=skipf) + time=data[:,0] + signal=data[:,1] + add_noise = self.getValue('Add noise') + if add_noise: + noise_amp = self.getValue('Noise amplitude') + signal += noise_amp * np.random.randn(len(signal)) + # create trace object that contains timing info + self.log(signal, level=30) + self.log(time, level=30) + trace = quant.getTraceDict(signal,time) + # finally, return the trace object + return trace + else: + # for other quantities, just return current value of control + return quant.getValue() + +