@@ -82,6 +82,24 @@ def load_variables(layout, types=None, levels=None, skip_empty=True,
8282 return dataset
8383
8484
85+ def _get_timing_info (img_md ):
86+ if 'RepetitionTime' in img_md :
87+ tr = img_md ['RepetitionTime' ]
88+ if 'DelayTime' in img_md :
89+ ta = tr - img_md ['DelayTime' ]
90+ elif 'SliceTiming' in img_md :
91+ slicetimes = sorted (img_md ['SliceTiming' ])
92+ # a, b ... z
93+ # z = final slice onset, b - a = slice duration
94+ ta = slicetimes [- 1 ] + slicetimes [1 ] - slicetimes [0 ]
95+ else :
96+ ta = tr
97+ elif 'VolumeTiming' in img_md :
98+ return NotImplemented
99+
100+ return tr , ta
101+
102+
85103def _load_time_variables (layout , dataset = None , columns = None , scan_length = None ,
86104 drop_na = True , events = True , physio = True , stim = True ,
87105 regressors = True , skip_empty = True , ** selectors ):
@@ -141,8 +159,9 @@ def _load_time_variables(layout, dataset=None, columns=None, scan_length=None,
141159 if 'run' in entities :
142160 entities ['run' ] = int (entities ['run' ])
143161
144- tr = layout .get_metadata (img_f , suffix = 'bold' , domains = domains ,
145- full_search = True )['RepetitionTime' ]
162+ img_md = layout .get_metadata (img_f , suffix = 'bold' , domains = domains ,
163+ full_search = True )
164+ tr , ta = _get_timing_info (img_md )
146165
147166 # Get duration of run: first try to get it directly from the image
148167 # header; if that fails, try to get NumberOfVolumes from the
@@ -162,7 +181,8 @@ def _load_time_variables(layout, dataset=None, columns=None, scan_length=None,
162181 raise ValueError (msg )
163182
164183 run = dataset .get_or_create_node ('run' , entities , image_file = img_f ,
165- duration = duration , repetition_time = tr )
184+ duration = duration , repetition_time = tr ,
185+ acquisition_time = ta )
166186 run_info = run .get_info ()
167187
168188 # Process event files
0 commit comments