Skip to content

Commit d851484

Browse files
schewskonegithub-actions
andauthored
made allen data compatible by adding image_names arg (sensorium-competition#148)
* made allen data compatible by adding image_names arg * made Interpolator args explicit --------- Co-authored-by: github-actions <github-actions@github.com>
1 parent bc1c491 commit d851484

1 file changed

Lines changed: 30 additions & 8 deletions

File tree

experanto/interpolators.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,28 @@ def create(root_folder: str, cache_data: bool = False, **kwargs) -> Interpolator
116116
if modality == "sequence":
117117
if meta_data.get("phase_shift_per_signal", False):
118118
return PhaseShiftedSequenceInterpolator(
119-
root_folder, cache_data, **kwargs
119+
root_folder, cache_data=cache_data, **kwargs
120120
)
121121
else:
122-
return SequenceInterpolator(root_folder, cache_data, **kwargs)
122+
return SequenceInterpolator(
123+
root_folder, cache_data=cache_data, **kwargs
124+
)
123125
elif modality == "screen":
124-
return ScreenInterpolator(root_folder, cache_data, **kwargs)
126+
use_stimuli_names = kwargs.pop(
127+
"use_stimuli_names", meta_data.get("use_stimuli_names", False)
128+
)
129+
return ScreenInterpolator(
130+
root_folder,
131+
cache_data=cache_data,
132+
use_stimuli_names=use_stimuli_names,
133+
**kwargs,
134+
)
125135
elif modality == "time_interval":
126-
return TimeIntervalInterpolator(root_folder, cache_data, **kwargs)
136+
return TimeIntervalInterpolator(
137+
root_folder, cache_data=cache_data, **kwargs
138+
)
127139
elif modality == "spikes":
128-
return SpikeInterpolator(root_folder, cache_data, **kwargs)
140+
return SpikeInterpolator(root_folder, cache_data=cache_data, **kwargs)
129141
else:
130142
raise ValueError(
131143
f"There is no interpolator for {modality}. Please use 'sequence', 'screen', 'time_interval' as modality or provide a custom interpolator."
@@ -485,6 +497,8 @@ class ScreenInterpolator(Interpolator):
485497
native image size from metadata.
486498
normalize : bool, default=False
487499
If True, normalizes frames using stored mean/std statistics.
500+
use_stimuli_names : bool, default=False
501+
If True, uses ``stimulus_name`` from metadata to locate data files instead of trial keys.
488502
**kwargs
489503
Additional keyword arguments (ignored).
490504
@@ -505,10 +519,11 @@ class ScreenInterpolator(Interpolator):
505519
def __init__(
506520
self,
507521
root_folder: str,
508-
cache_data: bool = False, # New parameter
522+
cache_data: bool = False,
509523
rescale: bool = False,
510524
rescale_size: tuple[int, int] | None = None,
511525
normalize: bool = False,
526+
use_stimuli_names: bool = False,
512527
**kwargs,
513528
) -> None:
514529
super().__init__(root_folder)
@@ -518,6 +533,7 @@ def __init__(
518533
self.valid_interval = TimeInterval(self.start_time, self.end_time)
519534
self.rescale = rescale
520535
self.cache_trials = cache_data # Store the cache preference
536+
self.use_stimuli_names = use_stimuli_names
521537
self._parse_trials()
522538

523539
# create mapping from image index to file index
@@ -602,8 +618,14 @@ def _parse_trials(self) -> None:
602618
metadatas, keys = self.read_combined_meta()
603619

604620
for key, metadata in zip(keys, metadatas, strict=True):
605-
data_file_name = self.root_folder / "data" / f"{key}.npy"
606-
# Pass the cache_trials parameter when creating trials
621+
if self.use_stimuli_names:
622+
stimulus_name = metadata.get("stimulus_name")
623+
assert (
624+
stimulus_name is not None
625+
), f"stimulus_name is required in metadata when use_stimuli_names is True, but not found for key: {key}"
626+
data_file_name = self.root_folder / "data" / f"{stimulus_name}.npy"
627+
else:
628+
data_file_name = self.root_folder / "data" / f"{key}.npy"
607629
self.trials.append(
608630
ScreenTrial.create(
609631
data_file_name, metadata, cache_data=self.cache_trials

0 commit comments

Comments
 (0)