diff --git a/examples/task_mcm.py b/examples/task_mcm.py index 79697243..1791d77a 100644 --- a/examples/task_mcm.py +++ b/examples/task_mcm.py @@ -58,7 +58,6 @@ def compute_cmc_transition_probability(n_states, rep_rate, T=3.5, dt=0.1) -> np. operation_control = vr_task_logic.OperationControl( - movable_spout_control=vr_task_logic.MovableSpoutControl(enabled=False), audio_control=vr_task_logic.AudioControl(duration=0.2, frequency=9999), odor_control=vr_task_logic.OdorControl(), position_control=vr_task_logic.PositionControl( diff --git a/examples/task_patch_foraging.py b/examples/task_patch_foraging.py index e2ff9412..45702a8e 100644 --- a/examples/task_patch_foraging.py +++ b/examples/task_patch_foraging.py @@ -34,11 +34,6 @@ def NumericalUpdaterParametersHelper( } operation_control = vr_task_logic.OperationControl( - movable_spout_control=vr_task_logic.MovableSpoutControl( - enabled=True, - time_to_collect_after_reward=1, - retracting_distance=2000, - ), audio_control=vr_task_logic.AudioControl(frequency=1000, duration=0.2), odor_control=vr_task_logic.OdorControl( target_odor_flow=100, target_total_flow=1000, use_channel_3_as_carrier=True diff --git a/examples/test_single_site_patch.py b/examples/test_single_site_patch.py index 580713aa..1c067d8d 100644 --- a/examples/test_single_site_patch.py +++ b/examples/test_single_site_patch.py @@ -181,7 +181,6 @@ def make_block( operation_control = vr_task_logic.OperationControl( - movable_spout_control=vr_task_logic.MovableSpoutControl(enabled=False), audio_control=vr_task_logic.AudioControl(duration=0.2, frequency=9999), odor_control=vr_task_logic.OdorControl(), position_control=vr_task_logic.PositionControl( diff --git a/schema/aind_behavior_vr_foraging.json b/schema/aind_behavior_vr_foraging.json index 7f691542..4c5937e9 100644 --- a/schema/aind_behavior_vr_foraging.json +++ b/schema/aind_behavior_vr_foraging.json @@ -579,11 +579,6 @@ "duration": 0.2, "frequency": 9999.0 }, - "movable_spout_control": { - "enabled": false, - "retracting_distance": 0.0, - "time_to_collect_after_reward": 1.0 - }, "odor_control": { "target_odor_flow": 100, "target_total_flow": 1000 @@ -805,11 +800,6 @@ "operation_control": { "$ref": "#/$defs/OperationControl", "default": { - "movable_spout_control": { - "enabled": false, - "retracting_distance": 0.0, - "time_to_collect_after_reward": 1.0 - }, "odor_control": { "target_odor_flow": 100, "target_total_flow": 1000 @@ -2814,33 +2804,6 @@ ], "x-sgen-typename": "AllenNeuralDynamics.AindManipulator.MotorOperationMode" }, - "MovableSpoutControl": { - "description": "Controls the movable water spout behavior for reward delivery.\n\nThis class configures how the movable spout operates, including when it's\nenabled, timing for reward collection, and retraction distance for operant\nconditioning protocols.", - "properties": { - "enabled": { - "default": false, - "description": "Whether the movable spout is enabled", - "title": "Enabled", - "type": "boolean" - }, - "time_to_collect_after_reward": { - "default": 1, - "description": "Time (s) to collect after reward", - "minimum": 0, - "title": "Time To Collect After Reward", - "type": "number" - }, - "retracting_distance": { - "default": 0, - "description": "The distance, relative to the default position, the spout will be retracted by", - "minimum": 0, - "title": "Retracting Distance", - "type": "number" - } - }, - "title": "MovableSpoutControl", - "type": "object" - }, "NormalDistribution": { "description": "A normal (Gaussian) probability distribution.\n\nBell-shaped distribution symmetric around the mean, commonly used\nfor modeling naturally occurring random variables.", "properties": { @@ -3286,17 +3249,8 @@ "type": "object" }, "OperationControl": { - "description": "Master control class for all operational hardware systems.\n\nThis class aggregates all the hardware control specifications including\nmovable spout, odor delivery, position tracking, and audio systems.\nIt provides a centralized configuration point for all task hardware.", + "description": "Master control class for all operational hardware systems.\n\nThis class aggregates all the hardware control specifications including\nodor delivery, position tracking, and audio systems.\nIt provides a centralized configuration point for all task hardware.", "properties": { - "movable_spout_control": { - "$ref": "#/$defs/MovableSpoutControl", - "default": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, - "description": "Control of the movable spout" - }, "odor_control": { "$ref": "#/$defs/OdorControl", "default": { diff --git a/schema/depletion.json b/schema/depletion.json index 1aab60c5..96a62991 100644 --- a/schema/depletion.json +++ b/schema/depletion.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1476,11 +1461,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2198,11 +2178,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/depletion_stops_offset.json b/schema/depletion_stops_offset.json index 47137fdb..5683278c 100644 --- a/schema/depletion_stops_offset.json +++ b/schema/depletion_stops_offset.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1476,11 +1461,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2198,11 +2178,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/depletion_stops_rate.json b/schema/depletion_stops_rate.json index c2246ae2..d2c64332 100644 --- a/schema/depletion_stops_rate.json +++ b/schema/depletion_stops_rate.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1476,11 +1461,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2198,11 +2178,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/deterministic_reversals.json b/schema/deterministic_reversals.json index 1814cfdf..76cc29a9 100644 --- a/schema/deterministic_reversals.json +++ b/schema/deterministic_reversals.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1490,11 +1475,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2231,11 +2211,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/deterministic_reversals_reward_capped.json b/schema/deterministic_reversals_reward_capped.json index c0302199..a8051332 100644 --- a/schema/deterministic_reversals_reward_capped.json +++ b/schema/deterministic_reversals_reward_capped.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1510,11 +1495,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2271,11 +2251,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/replenishment_depletion_offset.json b/schema/replenishment_depletion_offset.json index cdf8a6fc..c6948711 100644 --- a/schema/replenishment_depletion_offset.json +++ b/schema/replenishment_depletion_offset.json @@ -276,11 +276,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -631,11 +626,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -974,11 +964,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -2086,11 +2071,6 @@ "sampling_mode": "Random" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/single_site.json b/schema/single_site.json index e30a3193..e41c9c63 100644 --- a/schema/single_site.json +++ b/schema/single_site.json @@ -366,11 +366,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1115,11 +1110,6 @@ "sampling_mode": "Sequential" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -7807,11 +7797,6 @@ "sampling_mode": "Random" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -14486,11 +14471,6 @@ "sampling_mode": "Random" }, "operation_control": { - "movable_spout_control": { - "enabled": false, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 0.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/schema/template.json b/schema/template.json index 5132654a..1f696dc5 100644 --- a/schema/template.json +++ b/schema/template.json @@ -561,11 +561,6 @@ "sampling_mode": "Random" }, "operation_control": { - "movable_spout_control": { - "enabled": true, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 2000.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 @@ -1165,11 +1160,6 @@ "sampling_mode": "Random" }, "operation_control": { - "movable_spout_control": { - "enabled": true, - "time_to_collect_after_reward": 1.0, - "retracting_distance": 2000.0 - }, "odor_control": { "target_total_flow": 1000, "target_odor_flow": 100 diff --git a/src/Extensions/AindBehaviorVrForaging.Generated.cs b/src/Extensions/AindBehaviorVrForaging.Generated.cs index c3e3d9c0..d74ba2fa 100644 --- a/src/Extensions/AindBehaviorVrForaging.Generated.cs +++ b/src/Extensions/AindBehaviorVrForaging.Generated.cs @@ -4058,126 +4058,6 @@ public override string ToString() } - /// - /// Controls the movable water spout behavior for reward delivery. - /// - ///This class configures how the movable spout operates, including when it's - ///enabled, timing for reward collection, and retraction distance for operant - ///conditioning protocols. - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.9.0.0 (Newtonsoft.Json v13.0.0.0)")] - [System.ComponentModel.DescriptionAttribute("Controls the movable water spout behavior for reward delivery.\n\nThis class config" + - "ures how the movable spout operates, including when it\'s\nenabled, timing for rew" + - "ard collection, and retraction distance for operant\nconditioning protocols.")] - [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)] - [Bonsai.CombinatorAttribute(MethodName="Generate")] - public partial class MovableSpoutControl - { - - private bool _enabled; - - private double _timeToCollectAfterReward; - - private double _retractingDistance; - - public MovableSpoutControl() - { - _enabled = false; - _timeToCollectAfterReward = 1D; - _retractingDistance = 0D; - } - - protected MovableSpoutControl(MovableSpoutControl other) - { - _enabled = other._enabled; - _timeToCollectAfterReward = other._timeToCollectAfterReward; - _retractingDistance = other._retractingDistance; - } - - /// - /// Whether the movable spout is enabled - /// - [Newtonsoft.Json.JsonPropertyAttribute("enabled")] - [System.ComponentModel.DescriptionAttribute("Whether the movable spout is enabled")] - public bool Enabled - { - get - { - return _enabled; - } - set - { - _enabled = value; - } - } - - /// - /// Time (s) to collect after reward - /// - [Newtonsoft.Json.JsonPropertyAttribute("time_to_collect_after_reward")] - [System.ComponentModel.DescriptionAttribute("Time (s) to collect after reward")] - public double TimeToCollectAfterReward - { - get - { - return _timeToCollectAfterReward; - } - set - { - _timeToCollectAfterReward = value; - } - } - - /// - /// The distance, relative to the default position, the spout will be retracted by - /// - [Newtonsoft.Json.JsonPropertyAttribute("retracting_distance")] - [System.ComponentModel.DescriptionAttribute("The distance, relative to the default position, the spout will be retracted by")] - public double RetractingDistance - { - get - { - return _retractingDistance; - } - set - { - _retractingDistance = value; - } - } - - public System.IObservable Generate() - { - return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new MovableSpoutControl(this))); - } - - public System.IObservable Generate(System.IObservable source) - { - return System.Reactive.Linq.Observable.Select(source, _ => new MovableSpoutControl(this)); - } - - protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder) - { - stringBuilder.Append("Enabled = " + _enabled + ", "); - stringBuilder.Append("TimeToCollectAfterReward = " + _timeToCollectAfterReward + ", "); - stringBuilder.Append("RetractingDistance = " + _retractingDistance); - return true; - } - - public override string ToString() - { - System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); - stringBuilder.Append(GetType().Name); - stringBuilder.Append(" { "); - if (PrintMembers(stringBuilder)) - { - stringBuilder.Append(" "); - } - stringBuilder.Append("}"); - return stringBuilder.ToString(); - } - } - - /// /// A numerical updater that modifies task parameters during execution. /// @@ -5313,22 +5193,19 @@ public override string ToString() /// Master control class for all operational hardware systems. /// ///This class aggregates all the hardware control specifications including - ///movable spout, odor delivery, position tracking, and audio systems. + ///odor delivery, position tracking, and audio systems. ///It provides a centralized configuration point for all task hardware. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.9.0.0 (Newtonsoft.Json v13.0.0.0)")] - [System.ComponentModel.DescriptionAttribute(@"Master control class for all operational hardware systems. - - This class aggregates all the hardware control specifications including - movable spout, odor delivery, position tracking, and audio systems. - It provides a centralized configuration point for all task hardware.")] + [System.ComponentModel.DescriptionAttribute("Master control class for all operational hardware systems.\n\nThis class aggregates" + + " all the hardware control specifications including\nodor delivery, position track" + + "ing, and audio systems.\nIt provides a centralized configuration point for all ta" + + "sk hardware.")] [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)] [Bonsai.CombinatorAttribute(MethodName="Generate")] public partial class OperationControl { - private MovableSpoutControl _movableSpoutControl; - private OdorControl _odorControl; private PositionControl _positionControl; @@ -5341,7 +5218,6 @@ public partial class OperationControl public OperationControl() { - _movableSpoutControl = new MovableSpoutControl(); _odorControl = new OdorControl(); _positionControl = new PositionControl(); _audioControl = new AudioControl(); @@ -5351,7 +5227,6 @@ public OperationControl() protected OperationControl(OperationControl other) { - _movableSpoutControl = other._movableSpoutControl; _odorControl = other._odorControl; _positionControl = other._positionControl; _audioControl = other._audioControl; @@ -5359,24 +5234,6 @@ protected OperationControl(OperationControl other) _waitToFinishDuration = other._waitToFinishDuration; } - /// - /// Control of the movable spout - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - [Newtonsoft.Json.JsonPropertyAttribute("movable_spout_control")] - [System.ComponentModel.DescriptionAttribute("Control of the movable spout")] - public MovableSpoutControl MovableSpoutControl - { - get - { - return _movableSpoutControl; - } - set - { - _movableSpoutControl = value; - } - } - /// /// Control of the odor /// @@ -5477,7 +5334,6 @@ public System.IObservable Generate(System.IObservable protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder) { - stringBuilder.Append("MovableSpoutControl = " + _movableSpoutControl + ", "); stringBuilder.Append("OdorControl = " + _odorControl + ", "); stringBuilder.Append("PositionControl = " + _positionControl + ", "); stringBuilder.Append("AudioControl = " + _audioControl + ", "); @@ -12031,11 +11887,6 @@ public System.IObservable Process(System.IObservable source return Process(source); } - public System.IObservable Process(System.IObservable source) - { - return Process(source); - } - public System.IObservable Process(System.IObservable source) { return Process(source); @@ -12333,7 +12184,6 @@ public System.IObservable Process(System.IObservable source) [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] - [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping))] diff --git a/src/Extensions/InstantiateSite.bonsai b/src/Extensions/InstantiateSite.bonsai index 7d66aeb7..49744829 100644 --- a/src/Extensions/InstantiateSite.bonsai +++ b/src/Extensions/InstantiateSite.bonsai @@ -252,14 +252,6 @@ ChoiceFeedback - - - true - - - - SpoutAvailable - 1 @@ -272,8 +264,6 @@ - - @@ -835,14 +825,6 @@ it.Item2 as EntryPosition) - - - false - - - - SpoutAvailable - Success @@ -1114,26 +1096,24 @@ it.Item2 as EntryPosition) - + - + - - + + - + - + - + - + - - - + diff --git a/src/Extensions/Logging.bonsai b/src/Extensions/Logging.bonsai index 317c5793..9a163871 100644 --- a/src/Extensions/Logging.bonsai +++ b/src/Extensions/Logging.bonsai @@ -1151,6 +1151,45 @@ it.Value.SyncQuadValue.Value as SyncQuadValue) SoftwareEvent + + RigSchema + + + Manipulator.Calibration.InitialPosition + + + ExperimentCommand + + + + EndCommand + + + + ManipulatorPosition + + + + ThreadPoolScheduler + + + + + + + Item2 + + + + + + + SpoutParkingPositions + + + + SoftwareEvent + @@ -1171,6 +1210,16 @@ it.Value.SyncQuadValue.Value as SyncQuadValue) + + + + + + + + + + diff --git a/src/Extensions/OperationControl.bonsai b/src/Extensions/OperationControl.bonsai index 2ce1bf0a..256aea6f 100644 --- a/src/Extensions/OperationControl.bonsai +++ b/src/Extensions/OperationControl.bonsai @@ -13,12 +13,11 @@ xmlns:beh="clr-namespace:Harp.Behavior;assembly=Harp.Behavior" xmlns:p4="clr-namespace:System.Reactive;assembly=System.Reactive.Core" xmlns:bv="clr-namespace:BonVision;assembly=BonVision" - xmlns:p5="clr-namespace:AllenNeuralDynamics.AindManipulator;assembly=AllenNeuralDynamics.AindManipulator" - xmlns:p6="clr-namespace:AllenNeuralDynamics.LicketySplit;assembly=AllenNeuralDynamics.LicketySplit" - xmlns:p7="clr-namespace:AllenNeuralDynamics.SniffDetector;assembly=AllenNeuralDynamics.SniffDetector" - xmlns:p8="clr-namespace:AllenNeuralDynamics.Treadmill;assembly=AllenNeuralDynamics.Treadmill" + xmlns:p5="clr-namespace:AllenNeuralDynamics.LicketySplit;assembly=AllenNeuralDynamics.LicketySplit" + xmlns:p6="clr-namespace:AllenNeuralDynamics.SniffDetector;assembly=AllenNeuralDynamics.SniffDetector" + xmlns:p7="clr-namespace:AllenNeuralDynamics.Treadmill;assembly=AllenNeuralDynamics.Treadmill" xmlns:dsp="clr-namespace:Bonsai.Dsp;assembly=Bonsai.Dsp" - xmlns:p9="clr-namespace:Bonsai.Numerics.Interpolation;assembly=Bonsai.Numerics" + xmlns:p8="clr-namespace:Bonsai.Numerics.Interpolation;assembly=Bonsai.Numerics" xmlns="https://bonsai-rx.org/2018/workflow"> @@ -917,457 +916,6 @@ - - MovableSpoutControl - - - - Start with the spout at max distance - - - - - true - - - - - 1 - - - - SpoutAvailable - - - SpoutAvailable - - - TaskLogicParameters - - - OperationControl.MovableSpoutControl - - - Enabled - - - - - - IsEnabled - - - - Source1 - - - Item2 - - - - - - - - - - - Item1 - - - SpoutParkingPositions - - - - - - GetPosition - it.Item1 ? it.Item2.ResetPosition : it.Item2.RetractedPosition - - - MoveTo - - - InitialState - - - - ManipulatorPosition - - - - 1 - - - - RigSchema - - - Manipulator - - - SpoutAxis - - - - - - - - CalculateRetractedPosition - - - - - - - Axis - Y1 - - - - 1 - - - - SpoutAxis - - - Source1 - - - - 1 - - - - SpoutResetPosition - - - SpoutResetPosition - - - - - 1 - - - - - 0 - 0 - 0 - 0 - - - - TaskLogicParameters - - - OperationControl.MovableSpoutControl - - - RetractingDistance - - - - - - SpoutAxis - - - - - - - - - None - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rename - new(Item1 as ResetPosition, Item2 as RetractedPosition) - - - SpoutParkingPositions - - - SpoutParkingPositions - - - - SpoutParkingPositions - - - - SoftwareEvent - - - TaskLogicParameters - - - OperationControl.MovableSpoutControl - - - Enabled - - - - SpoutAvailable - - - GiveReward - - - - false - - - - SpoutAvailable - - - Condition - - - - Source1 - - - - - - - - - - - true - - - - - - - DelayWithdraw - - - - Source1 - - - - 1 - - - - State - - - TaskLogicParameters - - - OperationControl.MovableSpoutControl - - - TimeToCollectAfterReward - - - FromSeconds - TimeSpan.FromSeconds(it) - - - - - - - - - PT0S - - - - State - - - - - - Item2 - - - - - - - - - - - - - - - - - - - - - - - IsWithdraw? - - - - Source1 - - - - - - - - - - - - SpoutAvailable - - - TaskLogicParameters - - - OperationControl.MovableSpoutControl - - - Enabled - - - - - - Source1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExperimentCommand - - - - StartTask - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeedbackControl @@ -1400,22 +948,6 @@ SoftwareEvent - - HarpBehaviorEvents - - - - 1 - - - - - true - - - - SpoutAvailable - @@ -1424,9 +956,6 @@ - - - @@ -1437,14 +966,14 @@ HarpLickometerEvents - - + + Value - + Channel0 @@ -1719,8 +1248,8 @@ HarpSniffDetectorEvents - - + + RigSchema @@ -1803,10 +1332,10 @@ - + Write - - 0 + + 0 @@ -1821,8 +1350,8 @@ Write - - + + @@ -1891,8 +1420,8 @@ HarpTreadmillEvents - - + + TreadmillSamplingRate @@ -1957,8 +1486,8 @@ HarpTreadmillEvents - - + + @@ -2059,7 +1588,7 @@ Item1 as Displacement, - + @@ -2083,11 +1612,11 @@ Item1 as Displacement, - + - + Write - + SendMessage @@ -2107,8 +1636,8 @@ Item1 as Displacement, HarpTreadmillEvents - - + + HarpMessage diff --git a/src/packages/aind_behavior_vr_foraging/src/aind_behavior_vr_foraging/task_logic.py b/src/packages/aind_behavior_vr_foraging/src/aind_behavior_vr_foraging/task_logic.py index eddd4942..2236ba7f 100644 --- a/src/packages/aind_behavior_vr_foraging/src/aind_behavior_vr_foraging/task_logic.py +++ b/src/packages/aind_behavior_vr_foraging/src/aind_behavior_vr_foraging/task_logic.py @@ -977,22 +977,6 @@ def _validate_patch_indices(self) -> Self: # ==================== OP CONTROL SPECIFICATIONS ==================== -class MovableSpoutControl(BaseModel): - """ - Controls the movable water spout behavior for reward delivery. - - This class configures how the movable spout operates, including when it's - enabled, timing for reward collection, and retraction distance for operant - conditioning protocols. - """ - - enabled: bool = Field(default=False, description="Whether the movable spout is enabled") - time_to_collect_after_reward: float = Field(default=1, ge=0, description="Time (s) to collect after reward") - retracting_distance: float = Field( - default=0, ge=0, description="The distance, relative to the default position, the spout will be retracted by" - ) - - class PositionControl(BaseModel): """ Controls the position tracking and movement detection parameters. @@ -1049,13 +1033,10 @@ class OperationControl(BaseModel): Master control class for all operational hardware systems. This class aggregates all the hardware control specifications including - movable spout, odor delivery, position tracking, and audio systems. + odor delivery, position tracking, and audio systems. It provides a centralized configuration point for all task hardware. """ - movable_spout_control: MovableSpoutControl = Field( - default=MovableSpoutControl(), description="Control of the movable spout" - ) odor_control: OdorControl = Field( default=OdorControl(target_odor_flow=100, target_total_flow=1000), description="Control of the odor", diff --git a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/depletion/helpers.py b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/depletion/helpers.py index 90aee541..4fb028a6 100644 --- a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/depletion/helpers.py +++ b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/depletion/helpers.py @@ -4,11 +4,8 @@ def make_default_operation_control(velocity_threshold: float) -> task_logic.OperationControl: return task_logic.OperationControl( - movable_spout_control=task_logic.MovableSpoutControl( - enabled=False, - ), audio_control=task_logic.AudioControl(duration=0.2, frequency=9999), - odor_control=task_logic.OdorControl(valve_max_open_time=10), + odor_control=task_logic.OdorControl(), position_control=task_logic.PositionControl( frequency_filter_cutoff=5, velocity_threshold=velocity_threshold, diff --git a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/single_site/helpers.py b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/single_site/helpers.py index a9a50bc0..17f412bf 100644 --- a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/single_site/helpers.py +++ b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/single_site/helpers.py @@ -23,7 +23,6 @@ def make_default_operation_control(velocity_threshold: float) -> task_logic.Oper """Operation control shared by every stage: movable spout off, audio effectively silent, no odor flow, only the stop-velocity threshold varies.""" return task_logic.OperationControl( - movable_spout_control=task_logic.MovableSpoutControl(enabled=False), audio_control=task_logic.AudioControl(duration=0.2, frequency=9999), odor_control=task_logic.OdorControl(), position_control=task_logic.PositionControl( diff --git a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/template/stages.py b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/template/stages.py index 5b367e51..f9cab5be 100644 --- a/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/template/stages.py +++ b/src/packages/aind_behavior_vr_foraging_curricula/src/aind_behavior_vr_foraging_curricula/template/stages.py @@ -37,15 +37,8 @@ def NumericalUpdaterParametersHelper(initial_value, on_success, on_failure, mini } operation_control = vr_task_logic.OperationControl( - movable_spout_control=vr_task_logic.MovableSpoutControl( - enabled=True, - time_to_collect_after_reward=1, - retracting_distance=2000, - ), audio_control=vr_task_logic.AudioControl(frequency=1000, duration=0.2), - odor_control=vr_task_logic.OdorControl( - valve_max_open_time=100000, target_odor_flow=100, target_total_flow=1000, use_channel_3_as_carrier=True - ), + odor_control=vr_task_logic.OdorControl(target_odor_flow=100, target_total_flow=1000, use_channel_3_as_carrier=True), position_control=vr_task_logic.PositionControl( gain=vr_task_logic.Vector3(x=1, y=1, z=1), initial_position=vr_task_logic.Vector3(x=0, y=2.56, z=0),