Skip to content

Commit aef446c

Browse files
authored
Merge pull request #448 from AllenNeuralDynamics/feat-make-mapper-absolute
Use bonsai app to derive session mapper
2 parents c4a45c6 + ddd6e89 commit aef446c

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

src/aind_behavior_vr_foraging/data_mappers/__init__.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import pydantic_settings
88
from aind_behavior_services.session import AindBehaviorSessionModel
99
from aind_behavior_services.utils import model_from_json_file
10-
from clabe.apps import CurriculumSuggestion
10+
from clabe.apps import BonsaiAppSettings, CurriculumSuggestion
1111
from git import Repo
1212

1313
from aind_behavior_vr_foraging.rig import AindVrForagingRig
@@ -21,10 +21,6 @@
2121

2222
class DataMapperCli(pydantic_settings.BaseSettings, cli_kebab_case=True):
2323
data_path: os.PathLike = pydantic.Field(description="Path to the session data directory.")
24-
db_root: os.PathLike = pydantic.Field(
25-
default=Path(r"\\allen\aind\scratch\AindBehavior.db\AindVrForaging"),
26-
description="Root directory for the database for additional metadata.",
27-
)
2824
repo_path: os.PathLike = pydantic.Field(
2925
default=Path("."), description="Path to the repository. By default it will use the current directory."
3026
)
@@ -45,15 +41,20 @@ def cli_cmd(self):
4541
curriculum_suggestion = None
4642

4743
repo = Repo(self.repo_path)
44+
settings = BonsaiAppSettings(
45+
workflow=Path(repo.working_dir) / "src" / "main.bonsai",
46+
executable=Path(repo.working_dir) / "bonsai/bonsai.exe",
47+
)
48+
4849
session_mapped = AindSessionDataMapper(
4950
session=session,
5051
rig=rig,
51-
task_logic_model=task_logic,
52+
task_logic=task_logic,
5253
repository=repo,
53-
script_path=Path("./src/main.bonsai"),
54+
bonsai_app_settings=settings,
5455
curriculum_suggestion=curriculum_suggestion,
5556
).map()
56-
rig_mapped = AindRigDataMapper(rig_schema_filename=f"{rig.rig_name}.json", db_root=Path(self.db_root)).map()
57+
rig_mapped = AindRigDataMapper(rig=rig).map()
5758

5859
assert session.session_name is not None
5960
assert session_mapped is not None

src/aind_behavior_vr_foraging/data_mappers/_session.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from aind_data_schema.core import acquisition
1515
from aind_data_schema_models import units
1616
from aind_data_schema_models.modalities import Modality
17-
from clabe.apps import CurriculumSuggestion
17+
from clabe.apps import BonsaiAppSettings, CurriculumSuggestion
1818
from clabe.data_mapper import aind_data_schema as ads
1919
from clabe.data_mapper import helpers as data_mapper_helpers
2020

@@ -32,8 +32,8 @@ def __init__(
3232
session: AindBehaviorSessionModel,
3333
rig: AindVrForagingRig,
3434
task_logic: AindVrForagingTaskLogic,
35+
bonsai_app_settings: BonsaiAppSettings = BonsaiAppSettings(workflow=Path("./src/main.bonsai")),
3536
repository: Union[os.PathLike, git.Repo] = Path("."),
36-
script_path: os.PathLike = Path("./src/main.bonsai"),
3737
session_end_time: Optional[datetime.datetime] = None,
3838
curriculum_suggestion: Optional[CurriculumSuggestion] = None,
3939
):
@@ -43,7 +43,7 @@ def __init__(
4343
self.repository = repository
4444
if isinstance(self.repository, os.PathLike | str):
4545
self.repository = git.Repo(Path(self.repository))
46-
self.script_path = script_path
46+
self.bonsai_app = bonsai_app_settings
4747
self._session_end_time = session_end_time
4848
self._mapped: Optional[acquisition.Acquisition] = None
4949
self.curriculum = curriculum_suggestion
@@ -260,7 +260,8 @@ def _map_compression(compression: AbsRig.cameras.VideoWriter) -> acquisition.Cod
260260
return list(map(_map_camera, cameras.keys(), cameras.values()))
261261

262262
def _get_bonsai_as_code(self) -> acquisition.Code:
263-
bonsai_env = data_mapper_helpers.snapshot_bonsai_environment(Path("./bonsai/bonsai.config"))
263+
bonsai_folder = Path(self.bonsai_app.executable).parent
264+
bonsai_env = data_mapper_helpers.snapshot_bonsai_environment(bonsai_folder / "bonsai.config")
264265
bonsai_version = bonsai_env.get("Bonsai", "unknown")
265266
assert isinstance(self.repository, git.Repo)
266267

@@ -270,7 +271,7 @@ def _get_bonsai_as_code(self) -> acquisition.Code:
270271
version=self.repository.head.commit.hexsha,
271272
language="Bonsai",
272273
language_version=bonsai_version,
273-
run_script=Path("./src/main.bonsai"),
274+
run_script=Path(self.bonsai_app.workflow),
274275
)
275276

276277
def _get_python_as_code(self) -> acquisition.Code:

src/aind_behavior_vr_foraging/launcher.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ def experiment(launcher: Launcher) -> None:
8484

8585
# Mappers
8686
ads_session = AindSessionDataMapper(
87-
rig=rig, session=session, task_logic=task_logic, curriculum_suggestion=suggestion
87+
rig=rig,
88+
session=session,
89+
task_logic=task_logic,
90+
curriculum_suggestion=suggestion,
91+
bonsai_app_settings=bonsai_app.settings,
8892
).map()
8993
ads_session.write_standard_file(launcher.session_directory)
9094
ads_rig = AindRigDataMapper(rig=rig).map()

tests/test_aind_data_mapper.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from aind_data_schema.core import acquisition, instrument
88
from aind_data_schema.utils import compatibility_check
9+
from clabe.apps import BonsaiAppSettings
910
from git import Repo
1011

1112
from aind_behavior_vr_foraging.data_mappers import AindRigDataMapper, AindSessionDataMapper
@@ -22,7 +23,7 @@ def setUp(self):
2223
self.rig = rig
2324
self.task_logic = task_logic
2425
self.repository = Repo(Path("./"))
25-
self.script_path = Path("./src/main.bonsai")
26+
self.bonsai_app_settings = BonsaiAppSettings(workflow=Path("./src/main.bonsai"))
2627
self.session_end_time = datetime.now()
2728
self.session_directory = None
2829

@@ -31,7 +32,7 @@ def setUp(self):
3132
rig=self.rig,
3233
task_logic=self.task_logic,
3334
repository=self.repository,
34-
script_path=self.script_path,
35+
bonsai_app_settings=self.bonsai_app_settings,
3536
session_end_time=self.session_end_time,
3637
)
3738

@@ -84,12 +85,14 @@ def setUp(self):
8485
self.rig_mapper = AindRigDataMapper(
8586
rig=self.rig,
8687
)
88+
self.bonsai_app_settings = BonsaiAppSettings(workflow=Path("./src/main.bonsai"))
89+
8790
self.session_mapper = AindSessionDataMapper(
8891
session=self.session,
8992
rig=self.rig,
9093
task_logic=self.task_logic,
9194
repository=Repo(Path("./")),
92-
script_path=Path("./src/main.bonsai"),
95+
bonsai_app_settings=self.bonsai_app_settings,
9396
session_end_time=datetime.now(),
9497
)
9598

0 commit comments

Comments
 (0)