Welcome to AIND Behavior Services’s documentation!¶
aind-behavior-services¶
A repository containing code for data acquisition and processing for AIND behavior rigs.
Installation¶
The python package can be installed from pypi using the following command:
pip install aind-behavior-services
However, to use all the tasks and hardware that this package supports, you should over over the prerequisites and deployment sections.
Prerequisites¶
These should only need to be installed once on a fresh new system, and are not required if simply refreshing the install or deploying to a new folder.
Windows 10 or 11
Run
./scripts/install_dependencies.ps1
to automatically install dependenciesThe following dependencies should be manually installed:
Spinnaker SDK 1.29.0.5 (device drivers for FLIR cameras)
On FLIR website:
Download > archive > 1.29.0.5 > SpinnakerSDK_FULL_1.29.0.5_x64.exe
Deployment¶
Install the prerequisites mentioned below.
From the root of the repository, run ./scripts/deploy.ps1
to bootstrap both python and bonsai environments.
Generating valid JSON input files¶
One of the core principles of this repository is the strict adherence to json-schemas. We use Pydantic as a way to write and compile our schemas, but also to generate valid JSON input files. These files can be used by Bonsai (powered by Bonsai.SGen code generation tool) or to simply record metadata. Examples of how to interact with the library can be found in the ./examples
folder.
Regenerating schemas¶
Once a Pydantic model is updated, updates to all downstream dependencies must be made to ensure that the ground-truth data schemas (and all dependent interoperability tools) are also updated. This can be achieved by running the regenerate
command from the root of the repository.
This script will regenerate all json-schemas
along with C#
code (./scr/Extensions
) used by the Bonsai environment.
Contributors¶
Contributions to this repository are welcome! However, please ensure that your code adheres to the recommended DevOps practices below:
Linting¶
We use ruff as our primary linting tool.
Testing¶
Attempt to add tests when new features are added.
To run the currently available tests, run python -m unittest
from the root of the repository.
Lock files¶
We use uv to manage our lock files.
Versioning¶
Where possible, adhere to Semantic Versioning.
Project dependency tree¶
classDiagram
class aind_behavior_curriculum {
+Task
+Curriculum
}
class aind_behavior_services {
+Task (Subclasses)
+Rig (maintains hardware library)
+Session
+Calibration (maintains device/calibration library)
+Deployment instructions
+Ecosystem documentation
}
class aind_behavior_experiment_launcher {
+Launch experiment
+Interfaces with external applications (e.g. Bonsai)
+Interfaces with aind-services
}
class aind_behavior_some_task {
+Concrete implementation of a task
+Rig (Subclasses for some task)
+Session
+Task Logic (Subclasses for some task)
+Maintains a task data-schema
+Saves data in standard format
}
class aind_behavior_some_task_analysis {
+Analysis code for some task
}
class aind_behavior_core_analysis {
+Data ingestion
+Data contract definition
+Core analysis primitives
+QC
}
aind_behavior_curriculum --|> aind_behavior_services : Subclasses Task
aind_behavior_services --|> aind_behavior_some_task
aind_behavior_some_task --|> aind_behavior_some_task_analysis : Analysis
aind_behavior_core_analysis --|> aind_behavior_some_task_analysis : Imports core analysis methods
aind_behavior_some_task_analysis --|> aind_behavior_curriculum : Metrics[Task]
aind_behavior_experiment_launcher --|> aind_behavior_some_task : Launches
- Welcome to AIND Behavior Services’s documentation!
- API
- base
- rig
AindBehaviorRigModel
CameraController
ConnectedClockOutput
Device
DisplayCalibration
DisplayExtrinsics
DisplayIntrinsics
DisplaysCalibration
FFMPEG_INPUT
FFMPEG_OUTPUT_16BIT
FFMPEG_OUTPUT_8BIT
HarpAnalogInput
HarpBehavior
HarpClockGenerator
HarpClockSynchronizer
HarpCuttlefish
HarpDeviceGeneric
HarpDeviceType
HarpDeviceType.ANALOGINPUT
HarpDeviceType.BEHAVIOR
HarpDeviceType.CLOCKGENERATOR
HarpDeviceType.CLOCKSYNCHRONIZER
HarpDeviceType.CUTTLEFISH
HarpDeviceType.ENVIRONMENTSENSOR
HarpDeviceType.GENERIC
HarpDeviceType.LICKOMETER
HarpDeviceType.LOADCELLS
HarpDeviceType.OLFACTOMETER
HarpDeviceType.SNIFFDETECTOR
HarpDeviceType.SOUNDCARD
HarpDeviceType.STEPPERDRIVER
HarpDeviceType.TREADMILL
HarpDeviceType.WHITERABBIT
HarpEnvironmentSensor
HarpLickometer
HarpLoadCells
HarpOlfactometer
HarpSniffDetector
HarpSoundCard
HarpStepperDriver
HarpTreadmill
HarpWhiteRabbit
Rect
Screen
SpinnakerCamera
SpinnakerCamera.adc_bit_depth
SpinnakerCamera.binning
SpinnakerCamera.color_processing
SpinnakerCamera.device_type
SpinnakerCamera.exposure
SpinnakerCamera.gain
SpinnakerCamera.gamma
SpinnakerCamera.pixel_format
SpinnakerCamera.region_of_interest
SpinnakerCamera.serial_number
SpinnakerCamera.video_writer
SpinnakerCamera.validate_roi
SpinnakerCameraAdcBitDepth
SpinnakerCameraPixelFormat
SpinnakerCameraPixelFormat.B10
SpinnakerCameraPixelFormat.B12
SpinnakerCameraPixelFormat.B16
SpinnakerCameraPixelFormat.B8
SpinnakerCameraPixelFormat.BAYERBG10
SpinnakerCameraPixelFormat.BAYERBG10P
SpinnakerCameraPixelFormat.BAYERBG10PACKED
SpinnakerCameraPixelFormat.BAYERBG12
SpinnakerCameraPixelFormat.BAYERBG12P
SpinnakerCameraPixelFormat.BAYERBG12PACKED
SpinnakerCameraPixelFormat.BAYERBG16
SpinnakerCameraPixelFormat.BAYERBG8
SpinnakerCameraPixelFormat.BAYERGB10
SpinnakerCameraPixelFormat.BAYERGB10P
SpinnakerCameraPixelFormat.BAYERGB10PACKED
SpinnakerCameraPixelFormat.BAYERGB12
SpinnakerCameraPixelFormat.BAYERGB12P
SpinnakerCameraPixelFormat.BAYERGB12PACKED
SpinnakerCameraPixelFormat.BAYERGB16
SpinnakerCameraPixelFormat.BAYERGB8
SpinnakerCameraPixelFormat.BAYERGR10
SpinnakerCameraPixelFormat.BAYERGR10P
SpinnakerCameraPixelFormat.BAYERGR10PACKED
SpinnakerCameraPixelFormat.BAYERGR12
SpinnakerCameraPixelFormat.BAYERGR12P
SpinnakerCameraPixelFormat.BAYERGR12PACKED
SpinnakerCameraPixelFormat.BAYERGR16
SpinnakerCameraPixelFormat.BAYERGR8
SpinnakerCameraPixelFormat.BAYERRG10
SpinnakerCameraPixelFormat.BAYERRG10P
SpinnakerCameraPixelFormat.BAYERRG10PACKED
SpinnakerCameraPixelFormat.BAYERRG12
SpinnakerCameraPixelFormat.BAYERRG12P
SpinnakerCameraPixelFormat.BAYERRG12PACKED
SpinnakerCameraPixelFormat.BAYERRG16
SpinnakerCameraPixelFormat.BAYERRG8
SpinnakerCameraPixelFormat.BGR10
SpinnakerCameraPixelFormat.BGR10P
SpinnakerCameraPixelFormat.BGR12
SpinnakerCameraPixelFormat.BGR12P
SpinnakerCameraPixelFormat.BGR14
SpinnakerCameraPixelFormat.BGR16
SpinnakerCameraPixelFormat.BGR565P
SpinnakerCameraPixelFormat.BGR8
SpinnakerCameraPixelFormat.BGRA10
SpinnakerCameraPixelFormat.BGRA10P
SpinnakerCameraPixelFormat.BGRA12
SpinnakerCameraPixelFormat.BGRA12P
SpinnakerCameraPixelFormat.BGRA14
SpinnakerCameraPixelFormat.BGRA16
SpinnakerCameraPixelFormat.BGRA8
SpinnakerCameraPixelFormat.CONFIDENCE1
SpinnakerCameraPixelFormat.CONFIDENCE16
SpinnakerCameraPixelFormat.CONFIDENCE1P
SpinnakerCameraPixelFormat.CONFIDENCE32F
SpinnakerCameraPixelFormat.CONFIDENCE8
SpinnakerCameraPixelFormat.COORD3D_A10P
SpinnakerCameraPixelFormat.COORD3D_A12P
SpinnakerCameraPixelFormat.COORD3D_A16
SpinnakerCameraPixelFormat.COORD3D_A32F
SpinnakerCameraPixelFormat.COORD3D_A8
SpinnakerCameraPixelFormat.COORD3D_ABC10P
SpinnakerCameraPixelFormat.COORD3D_ABC10P_PLANAR
SpinnakerCameraPixelFormat.COORD3D_ABC12P
SpinnakerCameraPixelFormat.COORD3D_ABC12P_PLANAR
SpinnakerCameraPixelFormat.COORD3D_ABC16
SpinnakerCameraPixelFormat.COORD3D_ABC16_PLANAR
SpinnakerCameraPixelFormat.COORD3D_ABC32F
SpinnakerCameraPixelFormat.COORD3D_ABC32F_PLANAR
SpinnakerCameraPixelFormat.COORD3D_ABC8
SpinnakerCameraPixelFormat.COORD3D_ABC8_PLANAR
SpinnakerCameraPixelFormat.COORD3D_AC10P
SpinnakerCameraPixelFormat.COORD3D_AC10P_PLANAR
SpinnakerCameraPixelFormat.COORD3D_AC12P
SpinnakerCameraPixelFormat.COORD3D_AC12P_PLANAR
SpinnakerCameraPixelFormat.COORD3D_AC16
SpinnakerCameraPixelFormat.COORD3D_AC16_PLANAR
SpinnakerCameraPixelFormat.COORD3D_AC32F
SpinnakerCameraPixelFormat.COORD3D_AC32F_PLANAR
SpinnakerCameraPixelFormat.COORD3D_AC8
SpinnakerCameraPixelFormat.COORD3D_AC8_PLANAR
SpinnakerCameraPixelFormat.COORD3D_B10P
SpinnakerCameraPixelFormat.COORD3D_B12P
SpinnakerCameraPixelFormat.COORD3D_B16
SpinnakerCameraPixelFormat.COORD3D_B32F
SpinnakerCameraPixelFormat.COORD3D_B8
SpinnakerCameraPixelFormat.COORD3D_C10P
SpinnakerCameraPixelFormat.COORD3D_C12P
SpinnakerCameraPixelFormat.COORD3D_C16
SpinnakerCameraPixelFormat.COORD3D_C32F
SpinnakerCameraPixelFormat.COORD3D_C8
SpinnakerCameraPixelFormat.G10
SpinnakerCameraPixelFormat.G12
SpinnakerCameraPixelFormat.G16
SpinnakerCameraPixelFormat.G8
SpinnakerCameraPixelFormat.MONO10
SpinnakerCameraPixelFormat.MONO10P
SpinnakerCameraPixelFormat.MONO10PACKED
SpinnakerCameraPixelFormat.MONO12
SpinnakerCameraPixelFormat.MONO12P
SpinnakerCameraPixelFormat.MONO12PACKED
SpinnakerCameraPixelFormat.MONO14
SpinnakerCameraPixelFormat.MONO16
SpinnakerCameraPixelFormat.MONO16S
SpinnakerCameraPixelFormat.MONO1P
SpinnakerCameraPixelFormat.MONO2P
SpinnakerCameraPixelFormat.MONO32F
SpinnakerCameraPixelFormat.MONO4P
SpinnakerCameraPixelFormat.MONO8
SpinnakerCameraPixelFormat.MONO8S
SpinnakerCameraPixelFormat.R10
SpinnakerCameraPixelFormat.R12
SpinnakerCameraPixelFormat.R16
SpinnakerCameraPixelFormat.R8
SpinnakerCameraPixelFormat.RGB10
SpinnakerCameraPixelFormat.RGB10P
SpinnakerCameraPixelFormat.RGB10P32
SpinnakerCameraPixelFormat.RGB10_PLANAR
SpinnakerCameraPixelFormat.RGB12
SpinnakerCameraPixelFormat.RGB12P
SpinnakerCameraPixelFormat.RGB12_PLANAR
SpinnakerCameraPixelFormat.RGB14
SpinnakerCameraPixelFormat.RGB16
SpinnakerCameraPixelFormat.RGB16S
SpinnakerCameraPixelFormat.RGB16_PLANAR
SpinnakerCameraPixelFormat.RGB32F
SpinnakerCameraPixelFormat.RGB565P
SpinnakerCameraPixelFormat.RGB8
SpinnakerCameraPixelFormat.RGB8PACKED
SpinnakerCameraPixelFormat.RGB8_PLANAR
SpinnakerCameraPixelFormat.RGBA10
SpinnakerCameraPixelFormat.RGBA10P
SpinnakerCameraPixelFormat.RGBA12
SpinnakerCameraPixelFormat.RGBA12P
SpinnakerCameraPixelFormat.RGBA14
SpinnakerCameraPixelFormat.RGBA16
SpinnakerCameraPixelFormat.RGBA32F
SpinnakerCameraPixelFormat.RGBA8
SpinnakerCameraPixelFormat.YCBCR411_8
SpinnakerCameraPixelFormat.YCBCR422_8
SpinnakerCameraPixelFormat.YCBCR8
SpinnakerCameraPixelFormat.YUV411PACKED
SpinnakerCameraPixelFormat.YUV422PACKED
SpinnakerCameraPixelFormat.YUV444PACKED
Vector3
VideoWriterFfmpeg
VideoWriterFfmpegFactory
VideoWriterOpenCv
WebCamera
validate_harp_clock_output()
- task_logic
- session
AindBehaviorSessionModel
AindBehaviorSessionModel.allow_dirty_repo
AindBehaviorSessionModel.commit_hash
AindBehaviorSessionModel.date
AindBehaviorSessionModel.experiment
AindBehaviorSessionModel.experiment_version
AindBehaviorSessionModel.experimenter
AindBehaviorSessionModel.notes
AindBehaviorSessionModel.root_path
AindBehaviorSessionModel.session_name
AindBehaviorSessionModel.skip_hardware_validation
AindBehaviorSessionModel.subject
AindBehaviorSessionModel.version
AindBehaviorSessionModel.generate_session_name_default
- data_types
- calibration
- utils
BonsaiSgenSerializers
CustomGenerateJsonSchema
bonsai_sgen()
convert_pydantic_to_bonsai()
export_schema()
format_datetime()
get_fields_of_type()
model_from_json_file()
now()
open_bonsai_process()
pascal_to_snake_case()
run_bonsai_process()
screaming_snake_case_to_pascal_case()
snake_to_pascal_case()
tznow()
utcnow()
- JsonSchema
- Data formats
- GitHub Source Code