Skip to content

Commit eb86b1c

Browse files
authored
Merge pull request #49 from AllenNeuralDynamics/feat-autowater
adds autowater logic
2 parents 721608c + b075b4f commit eb86b1c

4 files changed

Lines changed: 281 additions & 24 deletions

File tree

schema/aind_behavior_dynamic_foraging.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,34 @@
434434
"title": "AuditorySecondaryReinforcer",
435435
"type": "object"
436436
},
437+
"AutoWaterParameters": {
438+
"properties": {
439+
"min_ignored_trials": {
440+
"default": 3,
441+
"description": "Minimum consecutive ignored trials before auto water is triggered.",
442+
"minimum": 0,
443+
"title": "Min Ignored Trials",
444+
"type": "integer"
445+
},
446+
"min_unrewarded_trials": {
447+
"default": 3,
448+
"description": "Minimum consecutive unrewarded trials before auto water is triggered.",
449+
"minimum": 0,
450+
"title": "Min Unrewarded Trials",
451+
"type": "integer"
452+
},
453+
"reward_fraction": {
454+
"default": 0.8,
455+
"description": "Fraction of full reward volume delivered during auto water (0=none, 1=full).",
456+
"maximum": 1,
457+
"minimum": 0,
458+
"title": "Reward Fraction",
459+
"type": "number"
460+
}
461+
},
462+
"title": "AutoWaterParameters",
463+
"type": "object"
464+
},
437465
"Axis": {
438466
"description": "Motor axis available",
439467
"enum": [
@@ -965,6 +993,22 @@
965993
},
966994
"description": "Parameters defining the reward probability structure."
967995
},
996+
"autowater_parameters": {
997+
"default": {
998+
"min_ignored_trials": 3,
999+
"min_unrewarded_trials": 3,
1000+
"reward_fraction": 0.8
1001+
},
1002+
"description": "Auto water settings. If set, free water is delivered when the animal exceeds the ignored or unrewarded trial thresholds.",
1003+
"oneOf": [
1004+
{
1005+
"$ref": "#/$defs/AutoWaterParameters"
1006+
},
1007+
{
1008+
"type": "null"
1009+
}
1010+
]
1011+
},
9681012
"is_baiting": {
9691013
"default": false,
9701014
"description": "Whether uncollected rewards carry over to the next trial.",
@@ -3235,6 +3279,22 @@
32353279
},
32363280
"description": "Parameters defining the reward probability structure."
32373281
},
3282+
"autowater_parameters": {
3283+
"default": {
3284+
"min_ignored_trials": 3,
3285+
"min_unrewarded_trials": 3,
3286+
"reward_fraction": 0.8
3287+
},
3288+
"description": "Auto water settings. If set, free water is delivered when the animal exceeds the ignored or unrewarded trial thresholds.",
3289+
"oneOf": [
3290+
{
3291+
"$ref": "#/$defs/AutoWaterParameters"
3292+
},
3293+
{
3294+
"type": "null"
3295+
}
3296+
]
3297+
},
32383298
"is_baiting": {
32393299
"const": true,
32403300
"default": true,

src/Extensions/AindBehaviorDynamicForaging.Generated.cs

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,116 @@ public override string ToString()
769769
}
770770

771771

772+
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.9.0.0 (Newtonsoft.Json v13.0.0.0)")]
773+
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
774+
[Bonsai.CombinatorAttribute(MethodName="Generate")]
775+
public partial class AutoWaterParameters
776+
{
777+
778+
private int _minIgnoredTrials;
779+
780+
private int _minUnrewardedTrials;
781+
782+
private double _rewardFraction;
783+
784+
public AutoWaterParameters()
785+
{
786+
_minIgnoredTrials = 3;
787+
_minUnrewardedTrials = 3;
788+
_rewardFraction = 0.8D;
789+
}
790+
791+
protected AutoWaterParameters(AutoWaterParameters other)
792+
{
793+
_minIgnoredTrials = other._minIgnoredTrials;
794+
_minUnrewardedTrials = other._minUnrewardedTrials;
795+
_rewardFraction = other._rewardFraction;
796+
}
797+
798+
/// <summary>
799+
/// Minimum consecutive ignored trials before auto water is triggered.
800+
/// </summary>
801+
[Newtonsoft.Json.JsonPropertyAttribute("min_ignored_trials")]
802+
[System.ComponentModel.DescriptionAttribute("Minimum consecutive ignored trials before auto water is triggered.")]
803+
public int MinIgnoredTrials
804+
{
805+
get
806+
{
807+
return _minIgnoredTrials;
808+
}
809+
set
810+
{
811+
_minIgnoredTrials = value;
812+
}
813+
}
814+
815+
/// <summary>
816+
/// Minimum consecutive unrewarded trials before auto water is triggered.
817+
/// </summary>
818+
[Newtonsoft.Json.JsonPropertyAttribute("min_unrewarded_trials")]
819+
[System.ComponentModel.DescriptionAttribute("Minimum consecutive unrewarded trials before auto water is triggered.")]
820+
public int MinUnrewardedTrials
821+
{
822+
get
823+
{
824+
return _minUnrewardedTrials;
825+
}
826+
set
827+
{
828+
_minUnrewardedTrials = value;
829+
}
830+
}
831+
832+
/// <summary>
833+
/// Fraction of full reward volume delivered during auto water (0=none, 1=full).
834+
/// </summary>
835+
[Newtonsoft.Json.JsonPropertyAttribute("reward_fraction")]
836+
[System.ComponentModel.DescriptionAttribute("Fraction of full reward volume delivered during auto water (0=none, 1=full).")]
837+
public double RewardFraction
838+
{
839+
get
840+
{
841+
return _rewardFraction;
842+
}
843+
set
844+
{
845+
_rewardFraction = value;
846+
}
847+
}
848+
849+
public System.IObservable<AutoWaterParameters> Generate()
850+
{
851+
return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AutoWaterParameters(this)));
852+
}
853+
854+
public System.IObservable<AutoWaterParameters> Generate<TSource>(System.IObservable<TSource> source)
855+
{
856+
return System.Reactive.Linq.Observable.Select(source, _ => new AutoWaterParameters(this));
857+
}
858+
859+
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
860+
{
861+
stringBuilder.Append("MinIgnoredTrials = " + _minIgnoredTrials + ", ");
862+
stringBuilder.Append("MinUnrewardedTrials = " + _minUnrewardedTrials + ", ");
863+
stringBuilder.Append("RewardFraction = " + _rewardFraction);
864+
return true;
865+
}
866+
867+
public override string ToString()
868+
{
869+
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
870+
stringBuilder.Append(GetType().Name);
871+
stringBuilder.Append(" { ");
872+
if (PrintMembers(stringBuilder))
873+
{
874+
stringBuilder.Append(" ");
875+
}
876+
stringBuilder.Append("}");
877+
return stringBuilder.ToString();
878+
}
879+
}
880+
881+
772882
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.9.0.0 (Newtonsoft.Json v13.0.0.0)")]
773883
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
774884
[Bonsai.CombinatorAttribute(MethodName="Generate")]
@@ -1455,6 +1565,8 @@ public partial class CoupledTrialGeneratorSpec : TrialGeneratorSpec
14551565

14561566
private RewardProbabilityParameters _rewardProbabilityParameters;
14571567

1568+
private AutoWaterParameters _autowaterParameters;
1569+
14581570
private bool _isBaiting;
14591571

14601572
private CoupledTrialGenerationEndConditions _trialGenerationEndParameters;
@@ -1473,6 +1585,7 @@ public CoupledTrialGeneratorSpec()
14731585
_minBlockReward = 1;
14741586
_kernelSize = 2;
14751587
_rewardProbabilityParameters = new RewardProbabilityParameters();
1588+
_autowaterParameters = new AutoWaterParameters();
14761589
_isBaiting = false;
14771590
_trialGenerationEndParameters = new CoupledTrialGenerationEndConditions();
14781591
_behaviorStabilityParameters = new BehaviorStabilityParameters();
@@ -1490,6 +1603,7 @@ protected CoupledTrialGeneratorSpec(CoupledTrialGeneratorSpec other) :
14901603
_minBlockReward = other._minBlockReward;
14911604
_kernelSize = other._kernelSize;
14921605
_rewardProbabilityParameters = other._rewardProbabilityParameters;
1606+
_autowaterParameters = other._autowaterParameters;
14931607
_isBaiting = other._isBaiting;
14941608
_trialGenerationEndParameters = other._trialGenerationEndParameters;
14951609
_behaviorStabilityParameters = other._behaviorStabilityParameters;
@@ -1633,6 +1747,25 @@ public RewardProbabilityParameters RewardProbabilityParameters
16331747
}
16341748
}
16351749

1750+
/// <summary>
1751+
/// Auto water settings. If set, free water is delivered when the animal exceeds the ignored or unrewarded trial thresholds.
1752+
/// </summary>
1753+
[System.Xml.Serialization.XmlIgnoreAttribute()]
1754+
[Newtonsoft.Json.JsonPropertyAttribute("autowater_parameters")]
1755+
[System.ComponentModel.DescriptionAttribute("Auto water settings. If set, free water is delivered when the animal exceeds the " +
1756+
"ignored or unrewarded trial thresholds.")]
1757+
public AutoWaterParameters AutowaterParameters
1758+
{
1759+
get
1760+
{
1761+
return _autowaterParameters;
1762+
}
1763+
set
1764+
{
1765+
_autowaterParameters = value;
1766+
}
1767+
}
1768+
16361769
/// <summary>
16371770
/// Whether uncollected rewards carry over to the next trial.
16381771
/// </summary>
@@ -1729,6 +1862,7 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
17291862
stringBuilder.Append("MinBlockReward = " + _minBlockReward + ", ");
17301863
stringBuilder.Append("KernelSize = " + _kernelSize + ", ");
17311864
stringBuilder.Append("RewardProbabilityParameters = " + _rewardProbabilityParameters + ", ");
1865+
stringBuilder.Append("AutowaterParameters = " + _autowaterParameters + ", ");
17321866
stringBuilder.Append("IsBaiting = " + _isBaiting + ", ");
17331867
stringBuilder.Append("TrialGenerationEndParameters = " + _trialGenerationEndParameters + ", ");
17341868
stringBuilder.Append("BehaviorStabilityParameters = " + _behaviorStabilityParameters + ", ");
@@ -5369,6 +5503,8 @@ public partial class WarmupTrialGeneratorSpec : TrialGeneratorSpec
53695503

53705504
private RewardProbabilityParameters _rewardProbabilityParameters;
53715505

5506+
private AutoWaterParameters _autowaterParameters;
5507+
53725508
private bool _isBaiting;
53735509

53745510
private WarmupTrialGenerationEndConditions _trialGenerationEndParameters;
@@ -5383,6 +5519,7 @@ public WarmupTrialGeneratorSpec()
53835519
_minBlockReward = 1;
53845520
_kernelSize = 2;
53855521
_rewardProbabilityParameters = new RewardProbabilityParameters();
5522+
_autowaterParameters = new AutoWaterParameters();
53865523
_isBaiting = true;
53875524
_trialGenerationEndParameters = new WarmupTrialGenerationEndConditions();
53885525
}
@@ -5398,6 +5535,7 @@ protected WarmupTrialGeneratorSpec(WarmupTrialGeneratorSpec other) :
53985535
_minBlockReward = other._minBlockReward;
53995536
_kernelSize = other._kernelSize;
54005537
_rewardProbabilityParameters = other._rewardProbabilityParameters;
5538+
_autowaterParameters = other._autowaterParameters;
54015539
_isBaiting = other._isBaiting;
54025540
_trialGenerationEndParameters = other._trialGenerationEndParameters;
54035541
}
@@ -5539,6 +5677,25 @@ public RewardProbabilityParameters RewardProbabilityParameters
55395677
}
55405678
}
55415679

5680+
/// <summary>
5681+
/// Auto water settings. If set, free water is delivered when the animal exceeds the ignored or unrewarded trial thresholds.
5682+
/// </summary>
5683+
[System.Xml.Serialization.XmlIgnoreAttribute()]
5684+
[Newtonsoft.Json.JsonPropertyAttribute("autowater_parameters")]
5685+
[System.ComponentModel.DescriptionAttribute("Auto water settings. If set, free water is delivered when the animal exceeds the " +
5686+
"ignored or unrewarded trial thresholds.")]
5687+
public AutoWaterParameters AutowaterParameters
5688+
{
5689+
get
5690+
{
5691+
return _autowaterParameters;
5692+
}
5693+
set
5694+
{
5695+
_autowaterParameters = value;
5696+
}
5697+
}
5698+
55425699
/// <summary>
55435700
/// Whether uncollected rewards carry over to the next trial.
55445701
/// </summary>
@@ -5598,6 +5755,7 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
55985755
stringBuilder.Append("MinBlockReward = " + _minBlockReward + ", ");
55995756
stringBuilder.Append("KernelSize = " + _kernelSize + ", ");
56005757
stringBuilder.Append("RewardProbabilityParameters = " + _rewardProbabilityParameters + ", ");
5758+
stringBuilder.Append("AutowaterParameters = " + _autowaterParameters + ", ");
56015759
stringBuilder.Append("IsBaiting = " + _isBaiting + ", ");
56025760
stringBuilder.Append("TrialGenerationEndParameters = " + _trialGenerationEndParameters);
56035761
return true;
@@ -6453,6 +6611,11 @@ public System.IObservable<string> Process(System.IObservable<AuditorySecondaryRe
64536611
return Process<AuditorySecondaryReinforcer>(source);
64546612
}
64556613

6614+
public System.IObservable<string> Process(System.IObservable<AutoWaterParameters> source)
6615+
{
6616+
return Process<AutoWaterParameters>(source);
6617+
}
6618+
64566619
public System.IObservable<string> Process(System.IObservable<BaseModel> source)
64576620
{
64586621
return Process<BaseModel>(source);
@@ -6641,6 +6804,7 @@ public System.IObservable<string> Process(System.IObservable<Anonymous> source)
66416804
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<AindDynamicForagingTaskLogic>))]
66426805
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<AindDynamicForagingTaskParameters>))]
66436806
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<AuditorySecondaryReinforcer>))]
6807+
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<AutoWaterParameters>))]
66446808
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<BaseModel>))]
66456809
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<BehaviorStabilityParameters>))]
66466810
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Bonsai.Expressions.TypeMapping<CameraControllerSpinnakerCamera>))]

0 commit comments

Comments
 (0)