sdcard

Data model for configuring an SD card. Will be instantiated in the constants module with specific values. This allows for the model to be reused across different miniscopes, and for consuming code to use a consistent, introspectable API

pydantic model mio.models.sdcard.ConfigPositions

Image acquisition configuration positions

Show JSON schema
{
   "title": "ConfigPositions",
   "description": "Image acquisition configuration positions",
   "type": "object",
   "properties": {
      "width": {
         "default": 0,
         "title": "Width",
         "type": "integer"
      },
      "height": {
         "default": 1,
         "title": "Height",
         "type": "integer"
      },
      "fs": {
         "default": 2,
         "title": "Fs",
         "type": "integer"
      },
      "buffer_size": {
         "default": 3,
         "title": "Buffer Size",
         "type": "integer"
      },
      "n_buffers_recorded": {
         "default": 4,
         "title": "N Buffers Recorded",
         "type": "integer"
      },
      "n_buffers_dropped": {
         "default": 5,
         "title": "N Buffers Dropped",
         "type": "integer"
      }
   }
}

Fields:
field buffer_size: int = 3
field fs: int = 2
field height: int = 1
field n_buffers_dropped: int = 5
field n_buffers_recorded: int = 4
field width: int = 0
pydantic model mio.models.sdcard.SDBufferHeader

Header data at the start of each frame

Show JSON schema
{
   "title": "SDBufferHeader",
   "description": "Header data at the start of each frame",
   "type": "object",
   "properties": {
      "linked_list": {
         "title": "Linked List",
         "type": "integer"
      },
      "frame_num": {
         "title": "Frame Num",
         "type": "integer"
      },
      "buffer_count": {
         "title": "Buffer Count",
         "type": "integer"
      },
      "frame_buffer_count": {
         "title": "Frame Buffer Count",
         "type": "integer"
      },
      "write_buffer_count": {
         "title": "Write Buffer Count",
         "type": "integer"
      },
      "dropped_buffer_count": {
         "title": "Dropped Buffer Count",
         "type": "integer"
      },
      "timestamp": {
         "title": "Timestamp",
         "type": "integer"
      },
      "write_timestamp": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Write Timestamp"
      },
      "length": {
         "title": "Length",
         "type": "integer"
      },
      "data_length": {
         "title": "Data Length",
         "type": "integer"
      },
      "battery_voltage": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Battery Voltage"
      }
   },
   "required": [
      "linked_list",
      "frame_num",
      "buffer_count",
      "frame_buffer_count",
      "write_buffer_count",
      "dropped_buffer_count",
      "timestamp",
      "length",
      "data_length"
   ]
}

Fields:
field battery_voltage: int | None = None
field data_length: int [Required]
field dropped_buffer_count: int [Required]
field length: int [Required]
field write_buffer_count: int [Required]
field write_timestamp: int | None = None
pydantic model mio.models.sdcard.SDBufferHeaderFormat

Positions in the header for each frame

Show JSON schema
{
   "title": "SDBufferHeaderFormat",
   "description": "Positions in the header for each frame",
   "type": "object",
   "properties": {
      "id": {
         "default": "sd-buffer-header",
         "title": "Id",
         "type": "string"
      },
      "mio_model": {
         "default": null,
         "title": "Mio Model",
         "type": "string"
      },
      "mio_version": {
         "default": "0.6.1.dev10+g42c564f",
         "title": "Mio Version",
         "type": "string"
      },
      "linked_list": {
         "default": 1,
         "title": "Linked List",
         "type": "integer"
      },
      "frame_num": {
         "default": 2,
         "title": "Frame Num",
         "type": "integer"
      },
      "buffer_count": {
         "default": 3,
         "title": "Buffer Count",
         "type": "integer"
      },
      "frame_buffer_count": {
         "default": 4,
         "title": "Frame Buffer Count",
         "type": "integer"
      },
      "write_buffer_count": {
         "default": 5,
         "title": "Write Buffer Count",
         "type": "integer"
      },
      "dropped_buffer_count": {
         "default": 6,
         "title": "Dropped Buffer Count",
         "type": "integer"
      },
      "timestamp": {
         "default": 7,
         "title": "Timestamp",
         "type": "integer"
      },
      "write_timestamp": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Write Timestamp"
      },
      "length": {
         "default": 0,
         "title": "Length",
         "type": "integer"
      },
      "data_length": {
         "default": 8,
         "title": "Data Length",
         "type": "integer"
      },
      "battery_voltage": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Battery Voltage"
      }
   }
}

Fields:
Validators:

field battery_voltage: int | None = None
field buffer_count: int = 3
field data_length: int = 8
field dropped_buffer_count: int = 6
field frame_buffer_count: int = 4
field frame_num: int = 2
field id: str = 'sd-buffer-header'
field length: int = 0
field linked_list: int = 1
field timestamp: int = 7
field write_buffer_count: int = 5
field write_timestamp: int | None = None
pydantic model mio.models.sdcard.SDConfig

The configuration of a recording taken on this SD card.

Read from the locations given in ConfigPositions for an SD card with a given SDLayout

Show JSON schema
{
   "title": "SDConfig",
   "description": "The configuration of a recording taken on this SD card.\n\nRead from the locations given in :class:`.ConfigPositions`\nfor an SD card with a given :class:`.SDLayout`",
   "type": "object",
   "properties": {
      "width": {
         "title": "Width",
         "type": "integer"
      },
      "height": {
         "title": "Height",
         "type": "integer"
      },
      "fs": {
         "title": "Fs",
         "type": "integer"
      },
      "buffer_size": {
         "title": "Buffer Size",
         "type": "integer"
      },
      "n_buffers_recorded": {
         "title": "N Buffers Recorded",
         "type": "integer"
      },
      "n_buffers_dropped": {
         "title": "N Buffers Dropped",
         "type": "integer"
      }
   },
   "required": [
      "width",
      "height",
      "fs",
      "buffer_size",
      "n_buffers_recorded",
      "n_buffers_dropped"
   ]
}

Fields:
field buffer_size: int [Required]
field fs: int [Required]
field height: int [Required]
field n_buffers_dropped: int [Required]
field n_buffers_recorded: int [Required]
field width: int [Required]
pydantic model mio.models.sdcard.SDHeaderPositions

Positions in the header for the whole SD card

Show JSON schema
{
   "title": "SDHeaderPositions",
   "description": "Positions in the header for the whole SD card",
   "type": "object",
   "properties": {
      "gain": {
         "default": 4,
         "title": "Gain",
         "type": "integer"
      },
      "led": {
         "default": 5,
         "title": "Led",
         "type": "integer"
      },
      "ewl": {
         "default": 6,
         "title": "Ewl",
         "type": "integer"
      },
      "record_length": {
         "default": 7,
         "title": "Record Length",
         "type": "integer"
      },
      "fs": {
         "default": 8,
         "title": "Fs",
         "type": "integer"
      },
      "delay_start": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Delay Start"
      },
      "battery_cutoff": {
         "anyOf": [
            {
               "type": "integer"
            },
            {
               "type": "null"
            }
         ],
         "default": null,
         "title": "Battery Cutoff"
      }
   }
}

Fields:
field battery_cutoff: int | None = None
field delay_start: int | None = None
field ewl: int = 6
field fs: int = 8

Frame rate

field gain: int = 4
field led: int = 5
field record_length: int = 7
pydantic model mio.models.sdcard.SDLayout

Data layout of an SD Card.

Used by the io.SDCard class to tell it how data on the SD card is laid out.

Show JSON schema
{
   "title": "SDLayout",
   "description": "Data layout of an SD Card.\n\nUsed by the :class:`.io.SDCard` class to tell it how data on the SD card is laid out.",
   "type": "object",
   "properties": {
      "id": {
         "pattern": "[\\w\\-\\/#]+",
         "title": "Id",
         "type": "string"
      },
      "mio_model": {
         "default": null,
         "title": "Mio Model",
         "type": "string"
      },
      "mio_version": {
         "default": "0.6.1.dev10+g42c564f",
         "title": "Mio Version",
         "type": "string"
      },
      "sectors": {
         "$ref": "#/$defs/SectorConfig"
      },
      "write_key0": {
         "default": 226277911,
         "title": "Write Key0",
         "type": "integer"
      },
      "write_key1": {
         "default": 226277911,
         "title": "Write Key1",
         "type": "integer"
      },
      "write_key2": {
         "default": 226277911,
         "title": "Write Key2",
         "type": "integer"
      },
      "write_key3": {
         "default": 226277911,
         "title": "Write Key3",
         "type": "integer"
      },
      "word_size": {
         "default": 4,
         "title": "Word Size",
         "type": "integer"
      },
      "header": {
         "$ref": "#/$defs/SDHeaderPositions",
         "default": {
            "gain": 4,
            "led": 5,
            "ewl": 6,
            "record_length": 7,
            "fs": 8,
            "delay_start": null,
            "battery_cutoff": null
         }
      },
      "config": {
         "$ref": "#/$defs/ConfigPositions",
         "default": {
            "width": 0,
            "height": 1,
            "fs": 2,
            "buffer_size": 3,
            "n_buffers_recorded": 4,
            "n_buffers_dropped": 5
         }
      },
      "buffer": {
         "$ref": "#/$defs/SDBufferHeaderFormat",
         "default": {
            "id": "sd-buffer-header",
            "mio_model": "mio.models.sdcard.SDBufferHeaderFormat",
            "mio_version": "0.6.1.dev10+g42c564f",
            "linked_list": 1,
            "frame_num": 2,
            "buffer_count": 3,
            "frame_buffer_count": 4,
            "write_buffer_count": 5,
            "dropped_buffer_count": 6,
            "timestamp": 7,
            "write_timestamp": null,
            "length": 0,
            "data_length": 8,
            "battery_voltage": null
         }
      }
   },
   "$defs": {
      "ConfigPositions": {
         "description": "Image acquisition configuration positions",
         "properties": {
            "width": {
               "default": 0,
               "title": "Width",
               "type": "integer"
            },
            "height": {
               "default": 1,
               "title": "Height",
               "type": "integer"
            },
            "fs": {
               "default": 2,
               "title": "Fs",
               "type": "integer"
            },
            "buffer_size": {
               "default": 3,
               "title": "Buffer Size",
               "type": "integer"
            },
            "n_buffers_recorded": {
               "default": 4,
               "title": "N Buffers Recorded",
               "type": "integer"
            },
            "n_buffers_dropped": {
               "default": 5,
               "title": "N Buffers Dropped",
               "type": "integer"
            }
         },
         "title": "ConfigPositions",
         "type": "object"
      },
      "SDBufferHeaderFormat": {
         "description": "Positions in the header for each frame",
         "properties": {
            "id": {
               "default": "sd-buffer-header",
               "title": "Id",
               "type": "string"
            },
            "mio_model": {
               "default": null,
               "title": "Mio Model",
               "type": "string"
            },
            "mio_version": {
               "default": "0.6.1.dev10+g42c564f",
               "title": "Mio Version",
               "type": "string"
            },
            "linked_list": {
               "default": 1,
               "title": "Linked List",
               "type": "integer"
            },
            "frame_num": {
               "default": 2,
               "title": "Frame Num",
               "type": "integer"
            },
            "buffer_count": {
               "default": 3,
               "title": "Buffer Count",
               "type": "integer"
            },
            "frame_buffer_count": {
               "default": 4,
               "title": "Frame Buffer Count",
               "type": "integer"
            },
            "write_buffer_count": {
               "default": 5,
               "title": "Write Buffer Count",
               "type": "integer"
            },
            "dropped_buffer_count": {
               "default": 6,
               "title": "Dropped Buffer Count",
               "type": "integer"
            },
            "timestamp": {
               "default": 7,
               "title": "Timestamp",
               "type": "integer"
            },
            "write_timestamp": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Write Timestamp"
            },
            "length": {
               "default": 0,
               "title": "Length",
               "type": "integer"
            },
            "data_length": {
               "default": 8,
               "title": "Data Length",
               "type": "integer"
            },
            "battery_voltage": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Battery Voltage"
            }
         },
         "title": "SDBufferHeaderFormat",
         "type": "object"
      },
      "SDHeaderPositions": {
         "description": "Positions in the header for the whole SD card",
         "properties": {
            "gain": {
               "default": 4,
               "title": "Gain",
               "type": "integer"
            },
            "led": {
               "default": 5,
               "title": "Led",
               "type": "integer"
            },
            "ewl": {
               "default": 6,
               "title": "Ewl",
               "type": "integer"
            },
            "record_length": {
               "default": 7,
               "title": "Record Length",
               "type": "integer"
            },
            "fs": {
               "default": 8,
               "title": "Fs",
               "type": "integer"
            },
            "delay_start": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Delay Start"
            },
            "battery_cutoff": {
               "anyOf": [
                  {
                     "type": "integer"
                  },
                  {
                     "type": "null"
                  }
               ],
               "default": null,
               "title": "Battery Cutoff"
            }
         },
         "title": "SDHeaderPositions",
         "type": "object"
      },
      "SectorConfig": {
         "description": "Configuration of sector layout on the SD card.\n\nFor each sector, one can retrieve the position with the attribute ``_pos``,\n\nExamples:\n\n    >>> sectors = SectorConfig(header=1023, config=1024, data=1025, size=512)\n    >>> sectors.header\n    1023\n    >>> # should be 1023 * 512\n    >>> sectors.header_pos\n    523776",
         "properties": {
            "header": {
               "default": 1023,
               "title": "Header",
               "type": "integer"
            },
            "config": {
               "default": 1024,
               "title": "Config",
               "type": "integer"
            },
            "data": {
               "default": 1025,
               "title": "Data",
               "type": "integer"
            },
            "size": {
               "default": 512,
               "title": "Size",
               "type": "integer"
            }
         },
         "title": "SectorConfig",
         "type": "object"
      }
   },
   "required": [
      "id",
      "sectors"
   ]
}

Fields:
Validators:

field buffer: SDBufferHeaderFormat = SDBufferHeaderFormat(id='sd-buffer-header', mio_model='mio.models.sdcard.SDBufferHeaderFormat', mio_version='0.6.1.dev10+g42c564f', linked_list=1, frame_num=2, buffer_count=3, frame_buffer_count=4, write_buffer_count=5, dropped_buffer_count=6, timestamp=7, write_timestamp=None, length=0, data_length=8, battery_voltage=None)
field config: ConfigPositions = ConfigPositions(width=0, height=1, fs=2, buffer_size=3, n_buffers_recorded=4, n_buffers_dropped=5)
field header: SDHeaderPositions = SDHeaderPositions(gain=4, led=5, ewl=6, record_length=7, fs=8, delay_start=None, battery_cutoff=None)
field sectors: SectorConfig [Required]
field word_size: int = 4

I’m actually not sure what this is, but 4 is hardcoded a few times in the existing notebook and it appears to be used as a word size when reading from the SD card.

field write_key0: int = 226277911
field write_key1: int = 226277911
field write_key2: int = 226277911
field write_key3: int = 226277911

These don’t seem to actually be used in the existing reading/writing code, but we will leave them here for continuity’s sake :)

pydantic model mio.models.sdcard.SectorConfig

Configuration of sector layout on the SD card.

For each sector, one can retrieve the position with the attribute _pos,

Examples

>>> sectors = SectorConfig(header=1023, config=1024, data=1025, size=512)
>>> sectors.header
1023
>>> # should be 1023 * 512
>>> sectors.header_pos
523776

Show JSON schema
{
   "title": "SectorConfig",
   "description": "Configuration of sector layout on the SD card.\n\nFor each sector, one can retrieve the position with the attribute ``_pos``,\n\nExamples:\n\n    >>> sectors = SectorConfig(header=1023, config=1024, data=1025, size=512)\n    >>> sectors.header\n    1023\n    >>> # should be 1023 * 512\n    >>> sectors.header_pos\n    523776",
   "type": "object",
   "properties": {
      "header": {
         "default": 1023,
         "title": "Header",
         "type": "integer"
      },
      "config": {
         "default": 1024,
         "title": "Config",
         "type": "integer"
      },
      "data": {
         "default": 1025,
         "title": "Data",
         "type": "integer"
      },
      "size": {
         "default": 512,
         "title": "Size",
         "type": "integer"
      }
   }
}

Fields:
field config: int = 1024

Holds final settings of the actual recording

field data: int = 1025

Recording data starts here

field header: int = 1023

Holds user settings to configure Miniscope and recording

field size: int = 512

The size of an individual sector