ibllib.io.extractors.camera
Camera extractor functions.
This module handles extraction of camera timestamps for both Bpod and DAQ.
Functions
Groom the raw DAQ or Bpod camera timestamps using the frame embedded GPIO and frame counter. |
|
Returns the values of the first array that correspond to those of the second. |
|
Extract camera timestamps from the sync matrix. |
|
Returns video length. |
|
Align the GPIO pin state to the DAQ sync TTLs. |
Classes
Get the camera timestamps from the Bpod |
|
Extractor for videos using DAQ sync and channel map. |
- extract_camera_sync(sync, chmap=None)[source]
Extract camera timestamps from the sync matrix.
- Parameters:
sync – dictionary ‘times’, ‘polarities’ of fronts detected on sync trace
chmap – dictionary containing channel indices. Default to constant.
- Returns:
dictionary containing camera timestamps
- get_video_length(video_path)[source]
Returns video length.
- Parameters:
video_path – A path to the video
- Returns:
- class CameraTimestampsFPGA(label, session_path=None)[source]
Bases:
BaseExtractor
Extractor for videos using DAQ sync and channel map.
- class CameraTimestampsCamlog(label, session_path=None)[source]
Bases:
BaseExtractor
- class CameraTimestampsBpod(*args, **kwargs)[source]
Bases:
BaseBpodTrialsExtractor
Get the camera timestamps from the Bpod
The camera events are logged only during the events not in between, so the times need to be interpolated
- save_names = '_ibl_leftCamera.times.npy'
The filenames of each extracted dataset, or None if array should not be saved.
- Type:
tuple of str
- var_names = 'left_camera_timestamps'
A list of names for the extracted variables. These become the returned output keys.
- Type:
tuple of str
- align_with_gpio(timestamps, ttl, pin_state, count, extrapolate_missing=True, display=False)[source]
Groom the raw DAQ or Bpod camera timestamps using the frame embedded GPIO and frame counter.
- Parameters:
timestamps (numpy.array) – An array of raw DAQ or Bpod camera timestamps.
ttl (dict) – A dictionary of DAQ sync TTLs, with keys {‘times’, ‘polarities’}.
pin_state (dict) – A dictionary containing GPIO pin state values, with keys {‘indices’, ‘polarities’}.
count (numpy.array) – An array of frame numbers.
extrapolate_missing (bool) – If true and the number of timestamps is fewer than the number of frame counts, the remaining timestamps are extrapolated based on the frame rate, otherwise they are NaNs.
display (bool) – Plot the resulting timestamps.
- Returns:
The corrected frame timestamps.
- Return type:
numpy.array
- attribute_times(arr, events, tol=0.1, injective=True, take='first')[source]
Returns the values of the first array that correspond to those of the second.
Given two arrays of timestamps, the function will return the values of the first array that most likely correspond to the values of the second. For each of the values in the second array, the absolute difference is taken and the index of either the first sufficiently close value, or simply the closest one, is assigned.
If injective is True, once a value has been assigned to an event it can’t be assigned to another. In other words there is a one-to-one mapping between the two arrays.
- Parameters:
arr (numpy.array) – An array of event times to attribute to those in events.
events (numpy.array) – An array of event times considered a subset of arr.
tol (float) – The max absolute difference between values in order to be considered a match.
injective (bool) – If true, once a value has been assigned it will not be assigned again.
take ({'first', 'nearest', 'after'}) – If ‘first’ the first value within tolerance is assigned; if ‘nearest’ the closest value is assigned; if ‘after’ assign the first event after.
- Returns:
An array the same length as events containing indices of arr corresponding to each event.
- Return type:
numpy.array
- groom_pin_state(gpio, ttl, ts, tolerance=2.0, display=False, take='first', min_diff=0.0)[source]
Align the GPIO pin state to the DAQ sync TTLs. Any sync TTLs not reflected in the pin state are removed from the dict and the times of the detected fronts are converted to DAQ time. At the end of this the number of GPIO fronts should equal the number of TTLs.
Note
This function is ultra safe: we probably don’t need assign all the ups and down fronts.
separately and could potentially even align the timestamps without removing the missed fronts - The input gpio and TTL dicts may be modified by this function. - For training sessions the frame rate is only 30Hz and the TTLs tend to be broken up by small gaps. Setting the min_diff to 5ms helps the timestamp assignment accuracy.
- Parameters:
gpio (dict) – A dictionary containing GPIO pin state values, with keys {‘indices’, ‘polarities’}.
ttl (dict) – A dictionary of DAQ sync TTLs, with keys {‘times’, ‘polarities’}.
ts (numpy.array) – The camera frame times (the camera frame TTLs acquired by the main DAQ).
tolerance (float) – Two pulses need to be within this many seconds to be considered related.
display (bool) – If true, the resulting timestamps are plotted against the raw audio signal.
take ({'first', 'nearest'}) – If ‘first’ the first value within tolerance is assigned; if ‘nearest’ the closest value is assigned.
min_diff (float) – Sync TTL fronts less than min_diff seconds apart will be removed.
- Returns:
dict – Dictionary of GPIO DAQ front indices, polarities and DAQ aligned times.
dict – Sync TTL times and polarities sans the TTLs not detected in the frame data.
numpy.array – Frame times in DAQ time.
See also
ibllib.io.extractors.ephys_fpga._get_sync_fronts