load_cells

pydantic model aind_behavior_services.calibration.load_cells.CalibrationLogic[source]

Bases: AindBehaviorTaskLogicModel

Load cells operation control model that is used to run a calibration data acquisition workflow

Config:
  • extra: str = forbid

  • validate_assignment: bool = True

  • validate_defaults: bool = True

  • strict: bool = True

  • str_strip_whitespace: bool = True

Fields:
Validators:
field name: str = 'LoadCellsCalibrationLogic'[source]
field task_parameters: CalibrationParameters [Required][source]
field version: Literal['0.4.0'] = '0.4.0'[source]
Validated by:
  • coerce_version

pydantic model aind_behavior_services.calibration.load_cells.CalibrationParameters[source]

Bases: TaskParameters

Config:
  • extra: str = allow

  • validate_assignment: bool = True

  • validate_defaults: bool = True

  • strict: bool = True

  • str_strip_whitespace: bool = True

Fields:
field channels: List[int] = [0, 1, 2, 3, 4, 5, 6, 7][source]

List of channels to calibrate

field offset_buffer_size: int = 200[source]

Size of the buffer (in samples) acquired.

Constraints:
  • ge = 1

pydantic model aind_behavior_services.calibration.load_cells.CalibrationRig[source]

Bases: AindBehaviorRigModel

Fields:
Validators:
field load_cells: LoadCells [Required][source]
field version: Literal['0.0.0'] = '0.0.0'[source]
Validated by:
  • coerce_version

pydantic model aind_behavior_services.calibration.load_cells.LoadCellCalibration[source]

Bases: BaseModel

Fields:
field measured_offset: Dict[int, float] = {}[source]
field measured_weight: List[Tuple[float, float]] = {}[source]
pydantic model aind_behavior_services.calibration.load_cells.LoadCells[source]

Bases: HarpLoadCells

Fields:
field calibration: LoadCellsCalibration | None = None[source]
pydantic model aind_behavior_services.calibration.load_cells.LoadCellsCalibration[source]

Bases: Calibration

Load cells calibration class

Fields:
field description: Literal['Calibration of the load cells system'] = 'Calibration of the load cells system'[source]
field device_name: str = 'LoadCells'[source]

Must match a device name in rig/instrument

field input: LoadCellsCalibrationInput [Required][source]
field output: LoadCellsCalibrationOutput [Required][source]
pydantic model aind_behavior_services.calibration.load_cells.LoadCellsCalibrationInput[source]

Bases: BaseModel

Fields:
field channels: Dict[int, LoadCellCalibration] = {}[source]
pydantic model aind_behavior_services.calibration.load_cells.LoadCellsCalibrationOutput[source]

Bases: BaseModel

Fields:
field baseline: Dict[int, float] = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0}[source]
field offset: Dict[int, int] = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0}[source]
field weight_lookup: Dict[int, Tuple[float, float]] = {}[source]

Example

import datetime
import os

from aind_behavior_services.base import get_commit_hash
from aind_behavior_services.calibration import load_cells as lc
from aind_behavior_services.session import AindBehaviorSessionModel

lc0 = lc.LoadCellCalibration(measured_offset={0: 0.1, 1: 0.2}, measured_weight=[(0.1, 0.1), (0.2, 0.2)])
lc1 = lc.LoadCellCalibration(measured_offset={0: 0.1, 1: 0.2}, measured_weight=[(0.1, 0.1), (0.2, 0.2)])

lc_calibration_input = lc.LoadCellsCalibrationInput(channels={0: lc0, 1: lc1})
lc_calibration_output = lc.LoadCellsCalibrationOutput(
    offset={0: 0, 1: 0},
    baseline={0: 0, 1: 0},
    weight_lookup={0: (0, 0), 1: (0, 0)},
)

calibration = lc.LoadCellsCalibration(
    input=lc_calibration_input,
    output=lc_calibration_output,
    device_name="LoadCells",
    calibration_date=datetime.datetime.now(),
)

calibration_logic = lc.CalibrationLogic(
    task_parameters=lc.CalibrationParameters(channels=[0, 1], offset_buffer_size=10)
)

calibration_session = AindBehaviorSessionModel(
    root_path="C:\\Data",
    remote_path=None,
    allow_dirty_repo=False,
    experiment="LoadCellsCalibration",
    date=datetime.datetime.now(),
    subject="LoadCells",
    experiment_version="load_cells",
    commit_hash=get_commit_hash(),
)

rig = lc.CalibrationRig(
    load_cells=lc.LoadCells(port_name="COM4"),
    rig_name="LoadCellsRig",
)

seed_path = "local/load_cells_{suffix}.json"
os.makedirs(os.path.dirname(seed_path), exist_ok=True)

with open(seed_path.format(suffix="calibration_logic"), "w") as f:
    f.write(calibration_logic.model_dump_json(indent=3))
with open(seed_path.format(suffix="session"), "w") as f:
    f.write(calibration_session.model_dump_json(indent=3))
with open(seed_path.format(suffix="rig"), "w") as f:
    f.write(rig.model_dump_json(indent=3))