@@ -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