api.task_logic¶
- class aind_behavior_iso_force.task_logic.Action(value)[source]¶
Bases:
IntFlagDefines the action types
- class aind_behavior_iso_force.task_logic.AindIsoForceTaskLogic(*, name: Literal['AindIsoForce'] = 'AindIsoForce', description: str = '', task_parameters: AindIsoForceTaskParameters, version: Literal['0.1.0-rc0'] = '0.1.0-rc0', stage_name: str | None = None)[source]¶
Bases:
Task- model_config = {'extra': 'forbid', 'str_strip_whitespace': True, 'strict': True, 'validate_assignment': True, 'validate_default': True}[source]¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- task_parameters: AindIsoForceTaskParameters[source]¶
- class aind_behavior_iso_force.task_logic.AindIsoForceTaskParameters(*, rng_seed: float | None = None, aind_behavior_services_pkg_version: Annotated[Literal['0.13.5'], _PydanticGeneralMetadata(pattern='^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$')] = '0.13.5', environment: Environment, operation_control: OperationControl = OperationControl(force=ForceOperationControl(left=LoadCellInput(channel=0, is_inverted=False), right=LoadCellInput(channel=0, is_inverted=True), push=LoadCellInput(channel=1, is_inverted=False), pull=LoadCellInput(channel=1, is_inverted=True))), **extra_data: Any)[source]¶
Bases:
TaskParameters- environment: Environment[source]¶
- model_config = {'extra': 'allow', 'str_strip_whitespace': True, 'strict': True, 'validate_assignment': True, 'validate_default': True}[source]¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- operation_control: OperationControl[source]¶
- class aind_behavior_iso_force.task_logic.Block(*, mode: Literal[BlockStatisticsMode.BLOCK] = BlockStatisticsMode.BLOCK, trials: List[Trial] = [], shuffle: bool = False, repeat_count: int | None = 0)[source]¶
Bases:
BaseModel
- class aind_behavior_iso_force.task_logic.BlockGenerator(*, mode: Literal[BlockStatisticsMode.BLOCK_GENERATOR] = BlockStatisticsMode.BLOCK_GENERATOR, block_size: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=UniformDistribution(family=<DistributionFamily.UNIFORM: 'Uniform'>, distribution_parameters=UniformDistributionParameters(family=<DistributionFamily.UNIFORM: 'Uniform'>, min=50.0, max=60.0), truncation_parameters=None, scaling_parameters=None), trial_template: Trial)[source]¶
Bases:
BaseModel
- type aind_behavior_iso_force.task_logic.BlockStatistics = Annotated[Block | BlockGenerator, FieldInfo(annotation=NoneType, required=True, discriminator='mode')][source]¶
- class aind_behavior_iso_force.task_logic.BlockStatisticsMode(value)[source]¶
Bases:
str,EnumDefines the mode of the environment
- class aind_behavior_iso_force.task_logic.CrossingOutcome(*, action: Action, duration: float, start: Timestamped[ThresholdedJoystickForce], end: Timestamped[ThresholdedJoystickForce], is_valid_duration: bool, is_reward_action: bool)[source]¶
Bases:
BaseModel
- class aind_behavior_iso_force.task_logic.Environment(*, block_statistics: List[BlockStatistics], shuffle: bool = False, repeat_count: int | None = 0)[source]¶
Bases:
BaseModel- block_statistics: List[BlockStatistics][source]¶
- class aind_behavior_iso_force.task_logic.ForceOperationControl(*, left: LoadCellInput = LoadCellInput(channel=0, is_inverted=False), right: LoadCellInput = LoadCellInput(channel=0, is_inverted=True), push: LoadCellInput = LoadCellInput(channel=1, is_inverted=False), pull: LoadCellInput = LoadCellInput(channel=1, is_inverted=True))[source]¶
Bases:
BaseModel- left: LoadCellInput[source]¶
- model_config = {}[source]¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- pull: LoadCellInput[source]¶
- push: LoadCellInput[source]¶
- right: LoadCellInput[source]¶
- class aind_behavior_iso_force.task_logic.ForceThreshold(*, left: float | None = None, right: float | None = None, push: float | None = None, pull: float | None = None)[source]¶
Bases:
BaseModel- from_action(action: Action) float | None[source]¶
Returns the force threshold for the given action.
- Parameters:
action (Action) – The action to get the force threshold for.
- Returns:
The force threshold for the action, or None if no threshold is set.
- Return type:
Optional[float]
- class aind_behavior_iso_force.task_logic.JoystickForce(*, left: float, right: float, push: float, pull: float, right_left: float, push_pull: float)[source]¶
Bases:
BaseModel
- class aind_behavior_iso_force.task_logic.LoadCellInput(*, channel: Annotated[int, Ge(ge=0), Le(le=7)], is_inverted: bool = False)[source]¶
Bases:
BaseModel
- class aind_behavior_iso_force.task_logic.OperantReward(*, reward_type: Literal['Operant'] = 'Operant', amount: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=1.0), truncation_parameters=None, scaling_parameters=None), delay: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.0), truncation_parameters=None, scaling_parameters=None), time_to_collect: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.5), truncation_parameters=None, scaling_parameters=None))[source]¶
Bases:
Reward
- class aind_behavior_iso_force.task_logic.OperationControl(*, force: ForceOperationControl = ForceOperationControl(left=LoadCellInput(channel=0, is_inverted=False), right=LoadCellInput(channel=0, is_inverted=True), push=LoadCellInput(channel=1, is_inverted=False), pull=LoadCellInput(channel=1, is_inverted=True)))[source]¶
Bases:
BaseModel
- class aind_behavior_iso_force.task_logic.QuiescencePeriod(*, duration: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.5), truncation_parameters=None, scaling_parameters=None), force_threshold: ForceThreshold = ForceThreshold(left=None, right=None, push=None, pull=None))[source]¶
Bases:
BaseModelDefines a quiescence settings
- force_threshold: ForceThreshold[source]¶
- class aind_behavior_iso_force.task_logic.ResponsePeriod(*, duration: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.5), truncation_parameters=None, scaling_parameters=None), force_threshold: ForceThreshold = ForceThreshold(left=None, right=None, push=None, pull=None), rewarded_action: Action = <Action.NONE: 0>, force_duration: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.05), truncation_parameters=None, scaling_parameters=None))[source]¶
Bases:
BaseModelDefines a response period
- force_threshold: ForceThreshold[source]¶
- class aind_behavior_iso_force.task_logic.Reward(*, reward_type: Literal['Pavlovian'] = 'Pavlovian', amount: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=1.0), truncation_parameters=None, scaling_parameters=None), delay: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.0), truncation_parameters=None, scaling_parameters=None))[source]¶
Bases:
BaseModel
- type aind_behavior_iso_force.task_logic.RewardPeriod = Annotated[Reward | OperantReward, FieldInfo(annotation=NoneType, required=True, discriminator='reward_type')][source]¶
- class aind_behavior_iso_force.task_logic.ThresholdedJoystickForce(*, left: bool, right: bool, push: bool, pull: bool, joystick_force: JoystickForce)[source]¶
Bases:
BaseModel- joystick_force: JoystickForce[source]¶
- class aind_behavior_iso_force.task_logic.Timestamped(*, seconds: float, value: T)[source]¶
Bases:
BaseModel,Generic[T]
- class aind_behavior_iso_force.task_logic.Trial(*, inter_trial_interval: Distribution, <aind_behavior_services.schema._SgenTypenameAnnotation object at 0x7f8d1f41b050>]=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.5), truncation_parameters=None, scaling_parameters=None), quiescence_period: QuiescencePeriod | None = None, response_period: ResponsePeriod = ResponsePeriod(duration=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.5), truncation_parameters=None, scaling_parameters=None), force_threshold=ForceThreshold(left=None, right=None, push=None, pull=None), rewarded_action=<Action.NONE: 0>, force_duration=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.05), truncation_parameters=None, scaling_parameters=None)), reward_period: RewardPeriod = Reward(reward_type='Pavlovian', amount=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=1.0), truncation_parameters=None, scaling_parameters=None), delay=Scalar(family=<DistributionFamily.SCALAR: 'Scalar'>, distribution_parameters=ScalarDistributionParameter(family=<DistributionFamily.SCALAR: 'Scalar'>, value=0.0), truncation_parameters=None, scaling_parameters=None)))[source]¶
Bases:
BaseModelDefines a trial
- model_config = {}[source]¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- quiescence_period: QuiescencePeriod | None[source]¶
- response_period: ResponsePeriod[source]¶
- reward_period: RewardPeriod[source]¶
- aind_behavior_iso_force.task_logic.normal_distribution_value(mean: float, std: float) NormalDistribution[source]¶
Helper function to create a normal distribution for a given range.
- Parameters:
mean (float) – The mean value of the normal distribution.
std (float) – The standard deviation of the normal distribution.
- Returns:
The normal distribution type.
- Return type:
distributions.Normal
- aind_behavior_iso_force.task_logic.scalar_value(value: float) Scalar[source]¶
Helper function to create a scalar value distribution for a given value.
- Parameters:
value (float) – The value of the scalar distribution.
- Returns:
The scalar distribution type.
- Return type:
distributions.Scalar
- aind_behavior_iso_force.task_logic.uniform_distribution_value(min: float, max: float) UniformDistribution[source]¶
Helper function to create a uniform distribution for a given range.
- Parameters:
min (float) – The minimum value of the uniform distribution.
max (float) – The maximum value of the uniform distribution.
- Returns:
The uniform distribution type.
- Return type:
distributions.Uniform