water_valve¶
- pydantic model aind_behavior_services.calibration.water_valve.Measurement[source]¶
Bases:
BaseModel
Input for water valve calibration class
- Fields:
- pydantic model aind_behavior_services.calibration.water_valve.WaterValveCalibration[source]¶
Bases:
Calibration
Water valve calibration class
- Fields:
- field description: Literal['Calibration of the water valve delivery system'] = 'Calibration of the water valve delivery system'[source]¶
- field input: WaterValveCalibrationInput [Required][source]¶
- field output: WaterValveCalibrationOutput [Required][source]¶
- pydantic model aind_behavior_services.calibration.water_valve.WaterValveCalibrationInput[source]¶
Bases:
BaseModel
- field measurements: List[Measurement] = [][source]¶
List of measurements
- calibrate_output(input: WaterValveCalibrationInput | None = None) WaterValveCalibrationOutput [source]¶
Calibrate the water valve delivery system by populating the output field
- pydantic model aind_behavior_services.calibration.water_valve.WaterValveCalibrationOutput[source]¶
Bases:
BaseModel
Output for water valve calibration class
- Fields:
- field interval_average: Dict[PositiveFloat, PositiveFloat] | None = None[source]¶
Dictionary keyed by measured valve interval and corresponding average single event volume.
- field offset: float [Required][source]¶
Offset of the linear regression : Volume(g) = Slope(g/s) * time(s) + offset(g)
Example¶
from aind_behavior_services.calibration import water_valve as wv
from aind_behavior_services.utils import utcnow
def linear_model(time, slope, offset):
return slope * time + offset
_delta_times = [0.1, 0.2, 0.3, 0.4, 0.5]
_slope = 10.1
_offset = -0.3
_water_weights = [linear_model(x, _slope, _offset) for x in _delta_times]
_inputs = [
wv.Measurement(valve_open_interval=0.5, valve_open_time=t[0], water_weight=[t[1]], repeat_count=1)
for t in zip(_delta_times, _water_weights)
]
_outputs = wv.WaterValveCalibrationOutput(
interval_average={interval: volume for interval, volume in zip(_delta_times, _water_weights)},
slope=_slope,
offset=_offset,
r2=1.0,
valid_domain=[value for value in _delta_times],
)
input = wv.WaterValveCalibrationInput(measurements=_inputs)
calibration = wv.WaterValveCalibration(
input=input,
output=input.calibrate_output(),
device_name="WaterValve",
date=utcnow(),
)