@@ -164,16 +164,28 @@ def create(root_folder: str, cache_data: bool = False, **kwargs) -> Interpolator
164164 if modality == "sequence" :
165165 if meta_data .get ("phase_shift_per_signal" , False ):
166166 return PhaseShiftedSequenceInterpolator (
167- root_folder , cache_data , ** kwargs
167+ root_folder , cache_data = cache_data , ** kwargs
168168 )
169169 else :
170- return SequenceInterpolator (root_folder , cache_data , ** kwargs )
170+ return SequenceInterpolator (
171+ root_folder , cache_data = cache_data , ** kwargs
172+ )
171173 elif modality == "screen" :
172- return ScreenInterpolator (root_folder , cache_data , ** kwargs )
174+ use_stimuli_names = kwargs .pop (
175+ "use_stimuli_names" , meta_data .get ("use_stimuli_names" , False )
176+ )
177+ return ScreenInterpolator (
178+ root_folder ,
179+ cache_data = cache_data ,
180+ use_stimuli_names = use_stimuli_names ,
181+ ** kwargs ,
182+ )
173183 elif modality == "time_interval" :
174- return TimeIntervalInterpolator (root_folder , cache_data , ** kwargs )
184+ return TimeIntervalInterpolator (
185+ root_folder , cache_data = cache_data , ** kwargs
186+ )
175187 elif modality == "spikes" :
176- return SpikeInterpolator (root_folder , cache_data , ** kwargs )
188+ return SpikeInterpolator (root_folder , cache_data = cache_data , ** kwargs )
177189 else :
178190 raise ValueError (
179191 f"There is no interpolator for { modality } . Please use 'sequence', 'screen', 'time_interval' as modality or provide a custom interpolator."
@@ -606,6 +618,8 @@ class ScreenInterpolator(Interpolator):
606618 native image size from metadata.
607619 normalize : bool, default=False
608620 If True, normalizes frames using stored mean/std statistics.
621+ use_stimuli_names : bool, default=False
622+ If True, uses ``stimulus_name`` from metadata to locate data files instead of trial keys.
609623 **kwargs
610624 Additional keyword arguments (ignored).
611625
@@ -725,8 +739,14 @@ def _parse_trials(self) -> None:
725739 metadatas , keys = self .read_combined_meta ()
726740
727741 for key , metadata in zip (keys , metadatas , strict = True ):
728- data_file_name = self .root_folder / "data" / f"{ key } .npy"
729- # Pass the cache_trials parameter when creating trials
742+ if self .use_stimuli_names :
743+ stimulus_name = metadata .get ("stimulus_name" )
744+ assert (
745+ stimulus_name is not None
746+ ), f"stimulus_name is required in metadata when use_stimuli_names is True, but not found for key: { key } "
747+ data_file_name = self .root_folder / "data" / f"{ stimulus_name } .npy"
748+ else :
749+ data_file_name = self .root_folder / "data" / f"{ key } .npy"
730750 self .trials .append (
731751 ScreenTrial .create (data_file_name , metadata , cache_data = self .cache_data )
732752 )
0 commit comments