From d15707a1db2acc8673dd981b2146c58335cac23f Mon Sep 17 00:00:00 2001 From: Micah Woodard Date: Mon, 14 Sep 2026 14:05:19 -0700 Subject: [PATCH 1/2] fixes metadata based on feedback --- .../acquisition.py | 3 ++- .../instrument.py | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py index b315e8d..cc46fe2 100644 --- a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py +++ b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py @@ -151,12 +151,13 @@ def _map(self) -> Acquisition: metrics = dataset["Behavior"]["Metrics"].data trial_outcomes = dataset["Behavior"]["SoftwareEvents"]["TrialOutcome"].data["data"].iloc rewarded = sum(to["is_rewarded"] for to in trial_outcomes) + finished = sum(to["is_right_choice"] is not None for to in trial_outcomes) water = calculate_consumed_water(self.data_path) performance_metrics = PerformanceMetrics( reward_consumed_during_epoch=None if not water else Decimal(str(water)), reward_consumed_unit=units.VolumeUnit.ML, trials_total=trial_outcomes[:].shape[0], - trials_finished=metrics.unignored_trials_per_session[-1], + trials_finished=finished, trials_rewarded=rewarded, output_parameters=metrics.model_dump(), ) diff --git a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py index 96ee90e..a10d4b0 100644 --- a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py +++ b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py @@ -289,8 +289,8 @@ def _map(self) -> Instrument: lick_spouts=[ LickSpout( name="Left lick spout", - manufacturer=Organization.OTHER, - notes=" (v1v2 upgrade): 'manufacturer' field was missing, defaulting to 'Other'.", + manufacturer=Organization.UNKNOWN, + notes="Lick spout manufacturer is unknown.", spout_diameter=Decimal("1.2"), spout_diameter_unit=SizeUnit.MM, solenoid_valve=Device( @@ -306,7 +306,7 @@ def _map(self) -> Instrument: ), LickSpout( name="Right lick spout", - manufacturer=Organization.OTHER, + manufacturer=Organization.UNKNOWN, notes="Lick spout manufacturer is unknown.", spout_diameter=Decimal("1.2"), spout_diameter_unit=SizeUnit.MM, @@ -365,7 +365,7 @@ def _map(self) -> Instrument: grounded=False, laser_interlock=False, air_filtration=False, - notes=" (v1v2 upgrade): Scale is width/length/height", + notes="Scale is width/length/height", ) ) From 3e33a01606fa5567e585838f2754ee71250bf30d Mon Sep 17 00:00:00 2001 From: Micah Woodard Date: Mon, 14 Sep 2026 15:24:48 -0700 Subject: [PATCH 2/2] counts autoreward trials as rewarded --- .../acquisition.py | 2 +- .../instrument.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py index cc46fe2..448b28e 100644 --- a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py +++ b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/acquisition.py @@ -150,7 +150,7 @@ def _map(self) -> Acquisition: # populate behavior epoch metrics = dataset["Behavior"]["Metrics"].data trial_outcomes = dataset["Behavior"]["SoftwareEvents"]["TrialOutcome"].data["data"].iloc - rewarded = sum(to["is_rewarded"] for to in trial_outcomes) + rewarded = sum(to["is_rewarded"] or (to["trial"]["is_auto_reward_right"] is not None) for to in trial_outcomes) finished = sum(to["is_right_choice"] is not None for to in trial_outcomes) water = calculate_consumed_water(self.data_path) performance_metrics = PerformanceMetrics( diff --git a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py index a10d4b0..6efcdda 100644 --- a/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py +++ b/workspace/aind_behavior_dynamic_foraging_metadata_mapper/src/aind_behavior_dynamic_foraging_metadata_mapper/instrument.py @@ -80,6 +80,7 @@ def _get_water_calibration(rig_model: AindDynamicForagingRig) -> list[CALIBRATIO fit_type=FitType.LINEAR, fit_parameters=GenericModel.model_validate(wc.model_dump()), ), + notes="Water calibration model can be found at https://github.com/AllenNeuralDynamics/Aind.Behavior.Services/blob/main/src/aind_behavior_services/rig/water_valve.py.", ) ) return vol_cal