Exporting Data

Export Utility Functions

The trodesexport utility extracts specific data from the .rec files and outputs them to separate .dat binary files. This function is detailed here.

Once this export has been preformed, the resulting .dat files can then be imported into Matlab or Python to be used for further analysis:

Importing .rec data into Matlab or Octave

In the Resources/TrodesToMatlab folder, there is a Matlab function called “readTrodesExtractedDataFile.m” that will import any of the generated .dat files into a common data structure. You will need to pass the .dat filename complete with the path as a string to the function. In Matlab or Octave, the function readTrodesExtractedDataFile is used to read the .dat files that result from using the trodesexport utility. The exact contents of the file depends on the type of data that was exported. In this example below, we are importing a file with spike snippets (spikes processor).


imported_data = readTrodesExtractedDataFile('example_recording.spikes_nt2.dat');

Will create a structure containing the fields:

  • description: 1x30 sq_string

  • byte_order: 1x13 sq_string

  • original_file: 1x21 sq_string

  • clockrate: 1x1 scalar

  • trodes_version: 1x5 sq_string

  • compile_date: 1x11 sq_string

  • compile_time: 1x8 sq_string

  • qt_version: 1x5 sq_string

  • commit_tag: 1x26 sq_string

  • controller_firmware: 1x1 scalar

  • headstage_firmware: 1x1 scalar

  • controller_serialnum: 1x1 scalar

  • headstage_serialnum: 1x1 scalar

  • autosettle: 1x1 scalar

  • smartref: 1x1 scalar

  • gyro: 1x1 scalar

  • accelerometer: 1x1 scalar

  • magnetometer: 1x1 scalar

  • time_offset: 1x1 scalar

  • system_time_at_creation: 1x1 scalar

  • timestamp_at_creation: 1x1 scalar

  • first_timestamp: 1x1 scalar

  • ntrode_id: 1x1 scalar

  • num_channels: 1x1 scalar

  • voltage_scaling: 1x1 scalar

  • threshold: 1x1 scalar

  • spike_invert: 1x3 sq_string

  • reference: 1x3 sq_string

  • filter: 1x2 sq_string

  • lowpassfilter: 1x1 scalar

  • highpassfilter: 1x1 scalar

  • spike_trigger_on_1: 1x1 scalar

  • fields: 1x2 struct

Most of these fields will exist for all of the exported data types, but some are specific to the type. In this case, ‘threshold’ is specific to spike trigger events, for example.

The data are always stored in ‘fields’:


imported_data.fields

ans =

1x2 struct array containing the fields:

name

type

columns

bytesPerItem

data

imported_data.fields(1).name is ‘time’ and imported_data.fields(2).name is ‘waveformCh1’. If the nTrode has more than one channel, the array will be have one extra entry per channel. Similarly, imported_data.fields(1).data contains each spike’s time, and imported_data.fields(2).data contains each spikes’ waveform data.

Note: the data type is given in the ‘type’ field. To save memory, this is usually not ‘double’, which will create problems for some Matlab functions. To convert to double, you can do this: myDoubleVar = double(originalVar);

Similar structures will be created for all other data types.

Importing .rec data into Python

In the Resrouces/TrodesToPython folder, there is a Python function that will read the binary data in a .dat file and return a Numpy array with the data for further analysis in Python (readTrodesExtractedDataFileN.py, where ‘N’ is either 2 or 3 depending on the version of python you are using).

The Python script to import data is currently limited to a single script and requires the module numpy to be installed.

It will read in .dat files created by the export functions and return a python dict, which contains a numpy array stored in the ‘data’ field.

For example, if the fields section states

Fields: <time uint32><LineSegment uint16><RelativeLinearPos double>

Then the script will return a numpy array like so:

>importedData['data']
[(160157682, 0,  0.23706176), (160159750, 0,  0.26997685),
(160161938, 0,  0.34283835), (160165086, 0,  0.42896333),
...
(160168038, 0,  0.492976  ), (160170927, 0,  0.55913753)]

Some camera module outputs like position data will create a binary file, which can also be parsed with this function.

Exporting Camera Module’s Data

The Camera Module is able to stream and export multiple different types of data including animal position data, an animal’s linear position within a defined track geometry, the track geometry itself, and user defined zone data. Refer to Camera Module’s exporting section here for more details.