Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
7194bcf
Update against aind-behavior-services
bruno-f-cruz Jan 27, 2026
fc0b038
Add annotations to the contract
bruno-f-cruz Feb 14, 2026
2ec20e2
Surface annotations in QC
bruno-f-cruz Feb 14, 2026
2d1adce
Linting
bruno-f-cruz Feb 14, 2026
3fde85c
Update references to aind-behavior-services 0.13 release
bruno-f-cruz Feb 14, 2026
2fdedd6
Update against aind-behavior-services
bruno-f-cruz Jan 27, 2026
b08ab47
Linting
bruno-f-cruz Feb 14, 2026
c5e74a9
Update references to aind-behavior-services 0.13 release
bruno-f-cruz Feb 14, 2026
985bd18
Add calibration workflow
bruno-f-cruz Feb 14, 2026
66ba7aa
Add default keyword to Field
bruno-f-cruz Feb 14, 2026
c400abc
Force computer and rig name
bruno-f-cruz Feb 14, 2026
ed5fa8b
Add session recovery script
bruno-f-cruz Feb 14, 2026
df40a18
Skip logs
bruno-f-cruz Feb 16, 2026
8b4c5ce
Regenerate schema against aind-behavior-service 0.13.2
bruno-f-cruz Feb 27, 2026
b9a3225
Remove `valve_max_open_time` feature
bruno-f-cruz Mar 4, 2026
bd08d83
Merge pull request #492 from AllenNeuralDynamics/remove-max-odor-time
bruno-f-cruz Mar 4, 2026
1a45ac0
Refactor lenses models for Front and Face cameras
bruno-f-cruz Mar 11, 2026
29f413f
Merge pull request #495 from AllenNeuralDynamics/refactor-lense-models
bruno-f-cruz Mar 11, 2026
5c8724f
Avoid using in-place mutation of read-only dataframe
bruno-f-cruz Mar 11, 2026
d9af13f
Merge pull request #496 from AllenNeuralDynamics/fix-pandas-issue
bruno-f-cruz Mar 11, 2026
d153b6d
Refactor to use external sgen references
bruno-f-cruz Mar 25, 2026
65a7e17
Merge pull request #497 from AllenNeuralDynamics/refactor-use-schemas…
bruno-f-cruz Mar 25, 2026
ce9310a
Add saturation visualizer
bruno-f-cruz Mar 25, 2026
51cf23e
Merge pull request #498 from AllenNeuralDynamics/feat-add-saturation-…
bruno-f-cruz Mar 25, 2026
78556d1
Serialize `TrainerState` that was used to a standard location
bruno-f-cruz Mar 26, 2026
945ce5b
Merge pull request #501 from AllenNeuralDynamics:feat-implement-curri…
bruno-f-cruz Mar 26, 2026
d893341
Add minimum pin to aind-data-schema
bruno-f-cruz Mar 26, 2026
0d38203
Add odor stimulation to metadata mapping
bruno-f-cruz Mar 26, 2026
5f1a986
Merge pull request #502 from AllenNeuralDynamics:fix-olfactometer
bruno-f-cruz Mar 26, 2026
f380377
Add definition of olfactometer extension
bruno-f-cruz Mar 29, 2026
1331d55
Multiplex messages to all olfactometers
bruno-f-cruz Mar 30, 2026
6d5ab5f
Simplify schema
bruno-f-cruz Mar 31, 2026
b855ae6
Add common types
bruno-f-cruz Mar 31, 2026
48e407f
Add validation for rig and task logic olfactometer definition
bruno-f-cruz Mar 31, 2026
6f30bd0
Implement odor mixture control
bruno-f-cruz Mar 31, 2026
eadafb0
Update examples
bruno-f-cruz Mar 31, 2026
0c7d09e
Maintain backwards compatibility with odor specification
bruno-f-cruz Mar 31, 2026
a369e55
Ensure odor definition is padded to the number of existing olfactometers
bruno-f-cruz Mar 31, 2026
40126a0
Merge pull request #504 from AllenNeuralDynamics/feat-add-olfactomete…
bruno-f-cruz Mar 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"bonsai.sgen": {
"version": "0.6.1",
"version": "0.9.0",
"commands": [
"bonsai.sgen"
]
Expand Down
35 changes: 19 additions & 16 deletions bonsai/Bonsai.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
<Package id="AForge" version="2.2.5" />
<Package id="AForge.Video" version="2.2.5" />
<Package id="AForge.Video.DirectShow" version="2.2.5" />
<Package id="AllenNeuralDynamics.AindBehaviorServices" version="0.12.0" />
<Package id="AllenNeuralDynamics.AindManipulator" version="0.1.6" />
<Package id="AllenNeuralDynamics.Core" version="0.4.1" />
<Package id="AllenNeuralDynamics.Core.Design" version="0.3.0" />
<Package id="AllenNeuralDynamics.AindBehaviorServices" version="0.13.4" />
<Package id="AllenNeuralDynamics.AindBehaviorServices.Distributions" version="0.2.0" />
<Package id="AllenNeuralDynamics.AindManipulator" version="0.3.0" />
<Package id="AllenNeuralDynamics.Core" version="0.3.0" />
<Package id="AllenNeuralDynamics.Core.Design" version="0.4.0" />
<Package id="AllenNeuralDynamics.EnvironmentSensor" version="0.3.0" />
<Package id="AllenNeuralDynamics.HarpUtils" version="0.3.2" />
<Package id="AllenNeuralDynamics.LicketySplit" version="0.2.0" />
Expand All @@ -30,8 +31,8 @@
<Package id="Bonsai.Harp.Design" version="3.6.1" />
<Package id="Bonsai.Numerics" version="0.10.0" />
<Package id="Bonsai.Player" version="2.8.5" />
<Package id="Bonsai.Scripting.Expressions" version="2.9.0" />
<Package id="Bonsai.Scripting.Expressions.Design" version="2.9.0" />
<Package id="Bonsai.Scripting.Expressions" version="2.10.0" />
<Package id="Bonsai.Scripting.Expressions.Design" version="2.10.0" />
<Package id="Bonsai.Shaders" version="2.9.0" />
<Package id="Bonsai.Shaders.Design" version="2.9.0" />
<Package id="Bonsai.Shaders.Rendering" version="2.9.0" />
Expand All @@ -50,7 +51,7 @@
<Package id="Harp.AnalogInput" version="0.2.0" />
<Package id="Harp.Behavior" version="0.2.0" />
<Package id="Harp.LoadCells" version="0.2.0" />
<Package id="Harp.Olfactometer" version="0.2.0" />
<Package id="Harp.Olfactometer" version="0.4.0" />
<Package id="Harp.StepperDriver" version="0.3.0" />
<Package id="Hexa.NET.ImGui" version="2.2.8.5" />
<Package id="Hexa.NET.ImGui.Backends" version="1.0.17.4" />
Expand All @@ -74,7 +75,7 @@
<Package id="SvgNet" version="3.5.0" />
<Package id="System.Buffers" version="4.6.0" />
<Package id="System.Collections.Immutable" version="8.0.0" />
<Package id="System.Linq.Dynamic" version="1.0.7" />
<Package id="System.Linq.Dynamic.Core" version="1.7.1" />
<Package id="System.Memory" version="4.6.0" />
<Package id="System.Numerics.Vectors" version="4.6.0" />
<Package id="System.Resources.Extensions" version="8.0.0" />
Expand All @@ -84,6 +85,7 @@
</Packages>
<AssemblyReferences>
<AssemblyReference assemblyName="AllenNeuralDynamics.AindBehaviorServices" />
<AssemblyReference assemblyName="AllenNeuralDynamics.AindBehaviorServices.Distributions" />
<AssemblyReference assemblyName="AllenNeuralDynamics.AindManipulator" />
<AssemblyReference assemblyName="AllenNeuralDynamics.Core" />
<AssemblyReference assemblyName="AllenNeuralDynamics.Core.Design" />
Expand Down Expand Up @@ -132,10 +134,11 @@
<AssemblyLocation assemblyName="AForge" processorArchitecture="MSIL" location="Packages/AForge.2.2.5/lib/AForge.dll" />
<AssemblyLocation assemblyName="AForge.Video" processorArchitecture="MSIL" location="Packages/AForge.Video.2.2.5/lib/AForge.Video.dll" />
<AssemblyLocation assemblyName="AForge.Video.DirectShow" processorArchitecture="MSIL" location="Packages/AForge.Video.DirectShow.2.2.5/lib/AForge.Video.DirectShow.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.AindBehaviorServices" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.AindBehaviorServices.0.12.0/lib/net472/AllenNeuralDynamics.AindBehaviorServices.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.AindManipulator" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.AindManipulator.0.1.6/lib/net48/AllenNeuralDynamics.AindManipulator.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.Core" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.Core.0.4.1/lib/net472/AllenNeuralDynamics.Core.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.Core.Design" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.Core.Design.0.3.0/lib/net472/AllenNeuralDynamics.Core.Design.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.AindBehaviorServices" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.AindBehaviorServices.0.13.4/lib/net472/AllenNeuralDynamics.AindBehaviorServices.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.AindBehaviorServices.Distributions" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.AindBehaviorServices.Distributions.0.2.0/lib/net472/AllenNeuralDynamics.AindBehaviorServices.Distributions.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.AindManipulator" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.AindManipulator.0.3.0/lib/net48/AllenNeuralDynamics.AindManipulator.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.Core" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.Core.0.3.0/lib/net472/AllenNeuralDynamics.Core.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.Core.Design" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.Core.Design.0.4.0/lib/net472/AllenNeuralDynamics.Core.Design.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.EnvironmentSensor" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.EnvironmentSensor.0.3.0/lib/net462/AllenNeuralDynamics.EnvironmentSensor.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.HarpUtils" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.HarpUtils.0.3.2/lib/net472/AllenNeuralDynamics.HarpUtils.dll" />
<AssemblyLocation assemblyName="AllenNeuralDynamics.LicketySplit" processorArchitecture="MSIL" location="Packages/AllenNeuralDynamics.LicketySplit.0.2.0/lib/net462/AllenNeuralDynamics.LicketySplit.dll" />
Expand All @@ -157,8 +160,8 @@
<AssemblyLocation assemblyName="Bonsai.Harp" processorArchitecture="MSIL" location="Packages/Bonsai.Harp.3.6.1/lib/net462/Bonsai.Harp.dll" />
<AssemblyLocation assemblyName="Bonsai.Harp.Design" processorArchitecture="MSIL" location="Packages/Bonsai.Harp.Design.3.6.1/lib/net462/Bonsai.Harp.Design.dll" />
<AssemblyLocation assemblyName="Bonsai.Numerics" processorArchitecture="MSIL" location="Packages/Bonsai.Numerics.0.10.0/lib/net462/Bonsai.Numerics.dll" />
<AssemblyLocation assemblyName="Bonsai.Scripting.Expressions" processorArchitecture="MSIL" location="Packages/Bonsai.Scripting.Expressions.2.9.0/lib/net472/Bonsai.Scripting.Expressions.dll" />
<AssemblyLocation assemblyName="Bonsai.Scripting.Expressions.Design" processorArchitecture="MSIL" location="Packages/Bonsai.Scripting.Expressions.Design.2.9.0/lib/net472/Bonsai.Scripting.Expressions.Design.dll" />
<AssemblyLocation assemblyName="Bonsai.Scripting.Expressions" processorArchitecture="MSIL" location="Packages/Bonsai.Scripting.Expressions.2.10.0/lib/net472/Bonsai.Scripting.Expressions.dll" />
<AssemblyLocation assemblyName="Bonsai.Scripting.Expressions.Design" processorArchitecture="MSIL" location="Packages/Bonsai.Scripting.Expressions.Design.2.10.0/lib/net472/Bonsai.Scripting.Expressions.Design.dll" />
<AssemblyLocation assemblyName="Bonsai.Shaders" processorArchitecture="MSIL" location="Packages/Bonsai.Shaders.2.9.0/lib/net472/Bonsai.Shaders.dll" />
<AssemblyLocation assemblyName="Bonsai.Shaders.Design" processorArchitecture="MSIL" location="Packages/Bonsai.Shaders.Design.2.9.0/lib/net472/Bonsai.Shaders.Design.dll" />
<AssemblyLocation assemblyName="Bonsai.Shaders.Rendering" processorArchitecture="MSIL" location="Packages/Bonsai.Shaders.Rendering.2.9.0/lib/net472/Bonsai.Shaders.Rendering.dll" />
Expand All @@ -175,7 +178,7 @@
<AssemblyLocation assemblyName="Harp.AnalogInput" processorArchitecture="MSIL" location="Packages/Harp.AnalogInput.0.2.0/lib/net462/Harp.AnalogInput.dll" />
<AssemblyLocation assemblyName="Harp.Behavior" processorArchitecture="MSIL" location="Packages/Harp.Behavior.0.2.0/lib/net462/Harp.Behavior.dll" />
<AssemblyLocation assemblyName="Harp.LoadCells" processorArchitecture="MSIL" location="Packages/Harp.LoadCells.0.2.0/lib/net462/Harp.LoadCells.dll" />
<AssemblyLocation assemblyName="Harp.Olfactometer" processorArchitecture="MSIL" location="Packages/Harp.Olfactometer.0.2.0/lib/net462/Harp.Olfactometer.dll" />
<AssemblyLocation assemblyName="Harp.Olfactometer" processorArchitecture="MSIL" location="Packages/Harp.Olfactometer.0.4.0/lib/net462/Harp.Olfactometer.dll" />
<AssemblyLocation assemblyName="Harp.StepperDriver" processorArchitecture="MSIL" location="Packages/Harp.StepperDriver.0.3.0/lib/net462/Harp.StepperDriver.dll" />
<AssemblyLocation assemblyName="Hexa.NET.ImGui" processorArchitecture="MSIL" location="Packages/Hexa.NET.ImGui.2.2.8.5/lib/netstandard2.0/Hexa.NET.ImGui.dll" />
<AssemblyLocation assemblyName="Hexa.NET.ImGui.Backends" processorArchitecture="MSIL" location="Packages/Hexa.NET.ImGui.Backends.1.0.17.4/lib/netstandard2.0/Hexa.NET.ImGui.Backends.dll" />
Expand All @@ -197,7 +200,7 @@
<AssemblyLocation assemblyName="SVG" processorArchitecture="MSIL" location="Packages/SvgNet.3.5.0/lib/net462/SVG.dll" />
<AssemblyLocation assemblyName="System.Buffers" processorArchitecture="MSIL" location="Packages/System.Buffers.4.6.0/lib/net462/System.Buffers.dll" />
<AssemblyLocation assemblyName="System.Collections.Immutable" processorArchitecture="MSIL" location="Packages/System.Collections.Immutable.8.0.0/lib/net462/System.Collections.Immutable.dll" />
<AssemblyLocation assemblyName="System.Linq.Dynamic" processorArchitecture="MSIL" location="Packages/System.Linq.Dynamic.1.0.7/lib/net40/System.Linq.Dynamic.dll" />
<AssemblyLocation assemblyName="System.Linq.Dynamic.Core" processorArchitecture="MSIL" location="Packages/System.Linq.Dynamic.Core.1.7.1/lib/net46/System.Linq.Dynamic.Core.dll" />
<AssemblyLocation assemblyName="System.Memory" processorArchitecture="MSIL" location="Packages/System.Memory.4.6.0/lib/net462/System.Memory.dll" />
<AssemblyLocation assemblyName="System.Numerics.Vectors" processorArchitecture="MSIL" location="Packages/System.Numerics.Vectors.4.6.0/lib/net462/System.Numerics.Vectors.dll" />
<AssemblyLocation assemblyName="System.Reactive.Core" processorArchitecture="MSIL" location="Packages/Rx-Core.2.2.5/lib/net45/System.Reactive.Core.dll" />
Expand Down
4 changes: 3 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

from typing import Type

import erdantic as erd
from pydantic import BaseModel

Expand Down Expand Up @@ -81,7 +83,7 @@ def linkcode_resolve(domain, info):
_static_path = "_static"


def export_model_diagram(model: BaseModel, root: str = _static_path) -> None:
def export_model_diagram(model: Type[BaseModel], root: str = _static_path) -> None:
diagram = erd.create(model)
diagram.draw(f"{root}/{model.__name__}.svg")

Expand Down
144 changes: 62 additions & 82 deletions examples/rig.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,31 @@
import datetime
import os

import aind_behavior_services.rig as rig
from aind_behavior_services.calibration.aind_manipulator import (
from aind_behavior_services.rig import cameras, visual_stimulation
from aind_behavior_services.rig.aind_manipulator import (
AindManipulatorCalibration,
AindManipulatorCalibrationInput,
AindManipulatorCalibrationOutput,
Axis,
AxisConfiguration,
ManipulatorPosition,
)
from aind_behavior_services.calibration.olfactometer import (
from aind_behavior_services.rig.harp import (
HarpBehavior,
HarpLicketySplit,
HarpSniffDetector,
HarpWhiteRabbit,
)
from aind_behavior_services.rig.olfactometer import (
Olfactometer,
OlfactometerCalibration,
OlfactometerCalibrationInput,
OlfactometerCalibrationOutput,
OlfactometerChannel,
OlfactometerChannelConfig,
OlfactometerChannelType,
)
from aind_behavior_services.calibration.treadmill import (
from aind_behavior_services.rig.treadmill import (
Treadmill,
TreadmillCalibration,
TreadmillCalibrationInput,
TreadmillCalibrationOutput,
)
from aind_behavior_services.calibration.water_valve import (
Measurement,
WaterValveCalibration,
WaterValveCalibrationInput,
)
from aind_behavior_services.rig.harp import (
HarpBehavior,
HarpLicketySplit,
HarpSniffDetector,
HarpWhiteRabbit,
)
from aind_behavior_services.rig.water_valve import Measurement, calibrate_water_valves

from aind_behavior_vr_foraging.rig import (
AindManipulatorDevice,
Expand All @@ -44,85 +34,78 @@
)

manipulator_calibration = AindManipulatorCalibration(
output=AindManipulatorCalibrationOutput(),
input=AindManipulatorCalibrationInput(
full_step_to_mm=(ManipulatorPosition(x=0.010, y1=0.010, y2=0.010, z=0.010)),
axis_configuration=[
AxisConfiguration(axis=Axis.Y1, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.Y2, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.X, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.Z, min_limit=-0.01, max_limit=25),
],
homing_order=[Axis.Y1, Axis.Y2, Axis.X, Axis.Z],
initial_position=ManipulatorPosition(y1=0, y2=0, x=0, z=0),
),
full_step_to_mm=(ManipulatorPosition(x=0.010, y1=0.010, y2=0.010, z=0.010)),
axis_configuration=[
AxisConfiguration(axis=Axis.Y1, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.Y2, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.X, min_limit=-0.01, max_limit=25),
AxisConfiguration(axis=Axis.Z, min_limit=-0.01, max_limit=25),
],
homing_order=[Axis.Y1, Axis.Y2, Axis.X, Axis.Z],
initial_position=ManipulatorPosition(y1=0, y2=0, x=0, z=0),
)

olfactometer_calibration = OlfactometerCalibration(
output=OlfactometerCalibrationOutput(),
date=datetime.datetime.now(),
input=OlfactometerCalibrationInput(
channel_config={
OlfactometerChannel.Channel0: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel0,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Amyl Acetate",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel1: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel1,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Banana",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel2: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel2,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Apple",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel3: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel3,
channel_type=OlfactometerChannelType.CARRIER,
flow_rate_capacity=1000,
),
}
),
channel_config={
OlfactometerChannel.Channel0: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel0,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Amyl Acetate",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel1: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel1,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Banana",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel2: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel2,
channel_type=OlfactometerChannelType.ODOR,
flow_rate_capacity=100,
flow_rate=100,
odorant="Apple",
odorant_dilution=1.5,
),
OlfactometerChannel.Channel3: OlfactometerChannelConfig(
channel_index=OlfactometerChannel.Channel3,
channel_type=OlfactometerChannelType.CARRIER,
flow_rate_capacity=1000,
),
},
)

water_valve_input = WaterValveCalibrationInput(
water_valve_calibration = calibrate_water_valves(
measurements=[
Measurement(valve_open_interval=0.2, valve_open_time=0.01, water_weight=[0.6, 0.6], repeat_count=200),
Measurement(valve_open_interval=0.2, valve_open_time=0.02, water_weight=[1.2, 1.2], repeat_count=200),
]
)
water_valve_calibration = WaterValveCalibration(
input=water_valve_input, output=water_valve_input.calibrate_output(), date=datetime.datetime.now()
)

video_writer = rig.cameras.VideoWriterFfmpeg(frame_rate=120, container_extension="mp4")
video_writer = cameras.VideoWriterFfmpeg(frame_rate=120, container_extension="mp4")

rig = AindVrForagingRig(
data_directory=r"C:/data",
computer_name="TestRigComputer",
rig_name="test_rig",
triggered_camera_controller=rig.cameras.CameraController[rig.cameras.SpinnakerCamera](
triggered_camera_controller=cameras.CameraController[cameras.SpinnakerCamera](
frame_rate=120,
cameras={
"FaceCamera": rig.cameras.SpinnakerCamera(
"FaceCamera": cameras.SpinnakerCamera(
serial_number="SerialNumber", binning=1, exposure=5000, gain=0, video_writer=video_writer
),
"SideCamera": rig.cameras.SpinnakerCamera(
"SideCamera": cameras.SpinnakerCamera(
serial_number="SerialNumber", binning=1, exposure=5000, gain=0, video_writer=video_writer
),
},
),
monitoring_camera_controller=rig.cameras.CameraController[rig.cameras.WebCamera](
cameras={"WebCam0": rig.cameras.WebCamera(index=0)}
monitoring_camera_controller=cameras.CameraController[cameras.WebCamera](
cameras={"WebCam0": cameras.WebCamera(index=0)}
),
harp_behavior=HarpBehavior(port_name="COM3"),
harp_olfactometer=Olfactometer(port_name="COM4", calibration=olfactometer_calibration),
Expand All @@ -133,14 +116,11 @@
harp_treadmill=Treadmill(
port_name="COM8",
calibration=TreadmillCalibration(
input=TreadmillCalibrationInput(),
output=TreadmillCalibrationOutput(
wheel_diameter=15, pulses_per_revolution=28800, brake_lookup_calibration=[[0, 0], [1, 65535]]
),
wheel_diameter=15, pulses_per_revolution=28800, brake_lookup_calibration=[[0, 0], [1, 65535]]
),
),
manipulator=AindManipulatorDevice(port_name="COM9", calibration=manipulator_calibration),
screen=rig.visual_stimulation.Screen(display_index=1),
screen=visual_stimulation.ScreenAssembly(display_index=1),
calibration=RigCalibration(water_valve=water_valve_calibration),
)

Expand Down
6 changes: 2 additions & 4 deletions examples/session.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import datetime
import os

from aind_behavior_services.session import AindBehaviorSessionModel
from aind_behavior_services.session import Session

session = AindBehaviorSessionModel(
session = Session(
date=datetime.datetime.now(tz=datetime.timezone.utc),
experiment="AindVrForaging",
root_path="c://",
subject="test",
notes="test session",
experiment_version="0.1.0",
allow_dirty_repo=True,
skip_hardware_validation=False,
experimenter=["Foo", "Bar"],
Expand Down
Loading