mtca4u module¶
-
class
mtca4u.
Device
(*args)[source]¶ Bases:
object
Construct Device from user provided device information
This constructor is used to open a device listed in the dmap file.
Parameters: alias (str) – The device alias/name in the dmap file for the hardware Examples
- Creating a device using dmap file:
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("my_card") # my_card is a alias in my_example_dmap_file.dmap
-
getCatalogueMetadata
(parameterName)[source]¶ Reads out metadata form the device catalogue
The available metadata depends on the use backend. E.g. for NumericAddressedBackends, metadata will come from the map file.
Parameters: parameterName (str) – Name of the metadata parameter to read. Returns: metadataValue – The value corresponding to the given parameterName. Return type: str
-
read
(moduleName='', registerName=None, numberOfElementsToRead=0, elementIndexInRegister=0, registerPath=None)[source]¶ Reads out Fixed point converted values from the opened device
This method uses the map file to return Fixed Point converted values from a register. It can read the whole register or an arbitary number of register elements. Data can also be read from an offset within the register (through the ‘elementIndexInRegister’ parameter).
Note
Both moduleName and registerName parameters are ignored when registerPath is provided.
Parameters: - moduleName (str, optional) – The name of the device module to which the register belongs to. If the register is not contained in a module, then provide an empty string as the parameter value.
- registerName (str, optional) – The name of the register to read from.
- numberOfElementsToRead (int, optional) –
Specifies the number of register elements that should be read out. The width and fixed point representation of the register element are internally obtained from the map file.
The method returns all elements in the register if this parameter is ommitted or when its value is set as 0.
If the value provided as this parameter exceeds the register size, an array with all elements upto the last element is returned
- elementIndexInRegister (int, optional) – This is a zero indexed offset from the first element of the register. When an elementIndexInRegister parameter is specified, the method reads out elements starting from this element index. The elemnt at the index position is included in the read as well.
- registerPath (str, optional) – When provided, it takes precedences over moduleName and registerName for location lookup.
Returns: readoutValues – The return type for the method is a 1-Dimensional numpy array with datatype numpy.float64. The returned numpy.array would either contain all elements in the register or only the number specified by the numberOfElementsToRead parameter
Return type: numpy.array, dtype == numpy.float64
Examples
- register “WORD_STATUS” is 1 element long..
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> boardWithModules = mtca4u.Device("device_name") >>> boardWithModules.read("BOARD", "WORD_STATUS") array([15.0], dtype=float64) >>> boardWithModules.read(registerPath="/BOARD/WORD_STATUS") array([15.0], dtype=float64)
- register “WORD_CLK_MUX” is 4 elements long.
>>> import mtca4u >>> device = mtca4u.Device("device_name") >>> device.read("", "WORD_CLK_MUX") array([15.0, 14.0, 13.0, 12.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", 0) array([15.0, 14.0, 13.0, 12.0], dtype=float64)
- read out select number of elements from specified locations:
>>> device.read("", "WORD_CLK_MUX", 1) array([15.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", 1, 2 ) array([13.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", 0, 2 ) array([13.0, 12.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", 5, 2 ) array([13.0, 12.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", numberOfElementsToRead=1, elementIndexInRegister=2 ) array([13.0], dtype=float64) >>> device.read("", "WORD_CLK_MUX", elementIndexInRegister=2 ) array([13.0, 12.0], dtype=float64)
See also
Device.read_raw()
- Read in ‘raw’ bit values from a device register
-
read_dma_raw
(moduleName='', DMARegisterName=None, numberOfElementsToRead=0, elementIndexInRegister=0, registerPath=None)[source]¶ Read in Data from the DMA region of the card
This method can be used to fetch data copied to a dma memory block. The method assumes that the device maps the DMA memory block to a register made up of 32 bit elements.
Note
Deprecated since 1.0.0; use Device.read_raw instead.
Parameters: - moduleName (str, optional) – The name of the device module that has the register we intend to write to. If module name is not applicable to the device, then provide an empty string as the parameter value.
- DMARegisterName (str, optional) – The register name to which the DMA memory region is mapped
- numberOfElementsToRead (int, optional) –
This optional parameter specifies the number of 32 bit elements that have to be returned from the mapped dma register. When this parameter is not specified or is provided with a value of 0, every element in the DMA memory block is returned.
If the value provided as this parameter exceeds the register size, an array with all elements upto the last element is returned
- elementIndexInRegister (int, optional) – This parameter specifies the index from which the read should commence.
- registerPath (str, optional) – When provided, it takes precedences over moduleName and registerName for location lookup.
Returns: arrayOfRawValues – The method returns a numpy.int32 array containing the raw bit values contained in the DMA register elements. The length of the array either equals the number of 32 bit elements that make up the whole DMA region or the number specified through the numberOfElementsToRead parameter
Return type: numpy.array, dtype == numpy.int32
Examples
- Use Device.read_raw: In the example, register “AREA_DMA_VIA_DMA” is the DMA mapped memory made up of 32 bit elements.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("device_name") >>> device.read__raw("", "AREA_DMA_VIA_DMA", 10) array([0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)
See also
Device.read_raw()
- Use this method for the same purpose instead.
-
read_raw
(moduleName='', registerName=None, numberOfElementsToRead=0, elementIndexInRegister=0, registerPath=None)[source]¶ Returns ‘raw values’ (Without fixed point conversion applied) from a device’s register
This method returns the raw bit values contained in the queried register. The returned values are not Fixed Point converted, but direct binary values contained in the register elements.
Note
Both moduleName and registerName parameters are ignored when registerPath is provided.
Parameters: - moduleName (str, optional) – The name of the device module to which the register to read from belongs. If module name is not applicable to the register, then provide an empty string as the parameter value.
- registerName (str, optional) – The name of the device register to read from.
- numberOfElementsToRead (int, optional) – Specifies the number of register elements that should be read out. The method returns all elements in the register if this parameter is ommitted or when its value is set as 0. If the value provided as this parameter exceeds the register size, an array will all elements upto the last element is returned
- elementIndexInRegister (int, optional) – This is a zero indexed offset from the first element of the register. When an elementIndexInRegister parameter is specified, the method reads out elements starting from this element index. The element at the index position is included in the read as well.
- registerPath (str, optional) – When provided, it takes precedences over moduleName and registerName for location lookup.
Returns: readInRawValues – The method returns a numpy.int32 array containing the raw bit values of the register elements. The length of the array either equals the number of elements that make up the register or the number specified through the numberOfElementsToRead parameter
Return type: numpy.array, dtype == numpy.int32
Examples
- register “WORD_STATUS” is 1 element long.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> boardWithModules = mtca4u.Device("device_name") >>> boardWithModules.read_raw("BOARD", "WORD_STATUS") array([15], dtype=int32) >>> boardWithModules.read_raw(registerPath="/BOARD/WORD_STATUS") array([15], dtype=int32)
- register “WORD_CLK_MUX” is 4 elements long.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("device_name") >>> device.read_raw("", "WORD_CLK_MUX") array([15, 14, 13, 12], dtype=int32) >>> device.read_raw("", "WORD_CLK_MUX", 0) array([15, 14, 13, 12], dtype=int32) >>> device.read_raw("", "WORD_CLK_MUX", 1) array([15], dtype=int32) >>> device.read_raw("", "WORD_CLK_MUX", 1, 2 ) array([13], dtype = int32) >>> device.read_raw("", "WORD_CLK_MUX", 0, 2 ) array([13, 12], dtype=int32) >>> device.read_raw("", "WORD_CLK_MUX", numberOfElementsToRead=1, elementIndexInRegister=2 ) array([13], dtype=int32) >>> device.read_raw("", "WORD_CLK_MUX", elementIndexInRegister=2 ) array([13, 12], dtype=int32)
See also
Device.read()
- Read in Fixed Point converted bit values from a device register
-
read_sequences
(moduleName='', regionName=None, registerPath=None)[source]¶ Read in all sequences from a Multiplexed data Region
This method returns the demultiplexed sequences in the memory area specified by regionName. The data is returned as a 2D numpy array with the coulums representing induvidual sequences
Note
Both moduleName and regionName parameters are ignored when registerPath is provided.
Parameters: - moduleName (str, optional) – The name of the device module that has the register we intend to write to. If module name is not applicable to the device, then provide an empty string as the parameter value.
- regionName (str, optional) – The name of the memory area containing the multiplexed data.
- registerPath (str, optional) – When provided, it takes precedences over moduleName and regionName for location lookup.
Returns: 2DarrayOfValues – The method returns a 2D numpy.double array containing extracted induvidual sequences as the columns
Return type: numpy.array, dtype == numpy.double
Examples
- “DMA” is the Multiplexed data region name. This region is defined by ‘AREA_MULTIPLEXED_SEQUENCE_DMA’ in the mapfile.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("device_name") >>> device.read_sequences("BOARD.0", "DMA") array([[ 0., 1., 4., 9., 16.], [ 25., 36., 49., 64., 81.], [ 100., 121., 144., 169., 196.], [ 225., 256., 289., 324., 361.] [ 400., 441., 484., 529., 576.]], dtype=double) >>> device.read_sequences(registerPath= '/BOARD.0/DMA') array([[ 0., 1., 4., 9., 16.], [ 25., 36., 49., 64., 81.], [ 100., 121., 144., 169., 196.], [ 225., 256., 289., 324., 361.] [ 400., 441., 484., 529., 576.]], dtype=double)
- Each column of the 2D matrix represents an extracted sequence:
>>> data = device.read_sequences("BOARD.0", "DMA") >>> adc0_values = data[:,0] # array([0., 25., 100., 225., 400.]) >>> adc1_values = data[:,1] # array([1., 36., 49., 64., 81.]) >>> adc3_values = data[:,3] # array([9., 64., 169., 324., 529.])
-
write
(moduleName='', registerName=None, dataToWrite=None, elementIndexInRegister=0, registerPath=None)[source]¶ Sets data into a desired register
This method writes values into a register on the board. The method internally uses a fixed point converter that is aware of the register width on the device and its fractional representation. This Fixed point converter converts the input into corresponding Fixed Point representaions that fit into the decive register.
Note
Both moduleName and registerName parameters are ignored when registerPath is provided.
Parameters: - moduleName (str, optional) – The name of the device module which has the register to write into. If module name is not applicable to the register, then provide an empty string as the parameter value.
- registerName (str, optional) – Mapped name of the register to write to
- dataToWrite (int, float, list of int/float, numpy.array(dtype numpy.float32/64), numpy.array(dtype = numpy.int32/64)) – The data to be written in to the register. it may be a numpy.float32/64 or a numpy.int32/64 array or a list with int or float values . Each value in this array represents an induvidual element of the register. dataToWrite may also take on int/float type when single vaues are passesed
- elementIndexInRegister (int, optional) – This is a zero indexed offset from the first element of the register. When an elementIndexInRegister parameter is specified, the method starts the write from this index
- registerPath (str, optional) – When provided, it takes precedences over moduleName and registerName for location lookup.
Examples
- register “WORD_STATUS” is 1 element long and belongs to module “BOARD”.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> boardWithModules = mtca4u.Device("device_name") >>> boardWithModules.write("BOARD", "WORD_STATUS", 15) >>> boardWithModules.write("BOARD", "WORD_STATUS", 15.0) >>> boardWithModules.write("BOARD", "WORD_STATUS", [15]) >>> boardWithModules.write("BOARD", "WORD_STATUS", [15.0])
>>> boardWithModules.write(registerPath = "/BOARD/WORD_STATUS", dataToWrite = [15.0])
>>> dataToWrite = numpy.array([15.0]) >>> boardWithModules.write("BOARD", "WORD_STATUS", dataToWrite)
- register “WORD_CLK_MUX” is 4 elements long.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("device_name") >>> dataToWrite = numpy.array([15.0, 14.0, 13.0, 12.0]) >>> device.write("", "WORD_CLK_MUX", dataToWrite) >>> dataToWrite = numpy.array([13, 12]) >>> device.write("", "WORD_CLK_MUX", dataToWrite, 2) >>> device.write("", "WORD_CLK_MUX", 2.78) # writes value to first element of register >>> device.write("", "WORD_CLK_MUX", 10, elementIndexInRegister=3)
See also
Device.write_raw()
- Write ‘raw’ bit values to a device register
-
write_raw
(moduleName='', registerName=None, dataToWrite=None, elementIndexInRegister=0, registerPath=None)[source]¶ Write raw bit values (no fixed point conversion applied) into the register
Provides a way to put in a desired bit value into individual register elements.
Note
Both moduleName and registerName parameters are ignored when registerPath is provided.
Parameters: - moduleName (str, optional) – The name of the device module that has the register we intend to write to. If module name is not applicable to the register, then provide an empty string as the parameter value.
- registerName (str, optional) – The name of the desired register to write into.
- dataToWrite (numpy.array, dtype == numpy.int32) – The array holding the bit values to be written into the register. The numpy array is expected to contain numpy.int32 values
- elementIndexInRegister (int, optional) – This is a zero indexed offset from the first element of the register. When an elementIndexInRegister parameter is specified, the method starts the write from this index
- registerPath (str, optional) – When provided, it takes precedences over moduleName and registerName for location lookup.
Examples
- register “WORD_STATUS” is 1 element long and is part of the module “BOARD”.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> boardWithModules = mtca4u.Device("device_name") >>> _dataToWrite = numpy.array([15], dtype=int32) >>> boardWithModules.write_raw("BOARD", "WORD_STATUS", dataToWrite=_dataToWrite) >>> boardWithModules.write_raw(registerPath = "/BOARD/WORD_STATUS", dataToWrite=_dataToWrite)
- register “WORD_CLK_MUX” is 4 elements long.
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("device_name") >>> dataToWrite = numpy.array([15, 14, 13, 12], dtype=int32) >>> device.write_raw("", "WORD_CLK_MUX", dataToWrite) >>> dataToWrite = numpy.array([13, 12], dtype=int32) >>> device.write_raw("MODULE1", "WORD_CLK_MUX", dataToWrite, 2)
See also
Device.write()
- Write values that get fixed point converted to the device
-
mtca4u.
get_dmap_location
()[source]¶ Get the dmap file which is currently in use by the library.
Method returns the file path of the dmap file the library currently uses. This is the dmap file the library uses to look up the device name(alias) and its details
Returns: string Return type: File path of the dmap file the library currently uses. Examples
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> dmapPath = mtca4u.get_dmap_location() >>> print dmapPath # prints '../my_example_dmap_file.dmap'
See also
set_dmap_location()
- set dmap file path for the library.
Device()
- Open device using specified alias names or using device id and mapfile
-
mtca4u.
get_info
(outputStream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]¶ prints details about the module and the deviceaccess library against which it was linked
Parameters: outputStream (optional) – default: sys.stdout Examples
>>> import mtca4u >>> mtca4u.get_info() mtca4uPy v02.03.00, linked with mtca4u-deviceaccess v$ChimeraTK-DeviceAccess_VERSION}
-
mtca4u.
set_dmap_location
(dmapFileLocation)[source]¶ Sets the location of the dmap file to use
The library will check the user specified device Alias names (when creating devices) in this dmap file. Once set, the library will look at this dmap file through out the program lifetime. This is true until a new dmap file is set again using set_dmap_location
Parameters: dmapFileLocation (string) – Path to the desired dmap file. Examples
>>> import mtca4u >>> mtca4u.set_dmap_location("../my_example_dmap_file.dmap") >>> device = mtca4u.Device("my_card") # my_card is a alias in my_example_dmap_file.dmap
See also
get_dmap_location()
- View the current dmap file which the library uses for device name (alias) lookup.
Device()
- Open device using specified alias names or using device id and mapfile