bids-standard / bids-examples

A set of BIDS compatible datasets with empty raw data files that can be used for writing lightweight software tests.
http://bids-standard.github.io/bids-examples/
175 stars 135 forks source link

genetics_ukbb strange slicetiming. #400

Closed rwblair closed 1 year ago

rwblair commented 1 year ago

https://github.com/bids-standard/bids-examples/blob/master/genetics_ukbb/task-FaceShapeEmotion_bold.json

Slicetiming seems to be numbers across multiple TRs.

rwblair commented 1 year ago

Fails schema.rules.checks.func.SliceTimingGreaterThanRepetitionTime

rwblair commented 1 year ago

Just take first 8 slice timing numbers.

sappelhoff commented 1 year ago

cc @CPernet

CPernet commented 1 year ago

since the order is ascending, we could just substitute with values from 0 to 0.735 (the repetition time) by steps of .0115 (repetition time/length(SliceTiming)

    0
0.0115
0.0230
0.0345
0.0460
0.0575
0.0690
0.0805
0.0920
0.1035
0.1150
0.1265
0.1380
0.1495
0.1610
0.1725
0.1840
0.1955
0.2070
0.2185
0.2300
0.2415
0.2530
0.2645
0.2760
0.2875
0.2990
0.3105
0.3220
0.3335
0.3450
0.3565
0.3680
0.3795
0.3910
0.4025
0.4140
0.4255
0.4370
0.4485
0.4600
0.4715
0.4830
0.4945
0.5060
0.5175
0.5290
0.5405
0.5520
0.5635
0.5750
0.5865
0.5980
0.6095
0.6210
0.6325
0.6440
0.6555
0.6670
0.6785
0.6900
0.7015
0.7130
0.7245
effigies commented 1 year ago

Do we have the source data? Are there actually 8 slices or 64? If it was a multiband sequence with simultaneous acquisition, possibly we should revert to the original (pre- 5124d859deded058e1166784ff1adb1f9bf0e65e) timing.

CPernet commented 1 year ago

oh i do not have the source, but indeed the previous version seems correct, timing is correct and there are 8 zeros while it indicates SMS 8 -- that update was dum, why did I do that??

effigies commented 1 year ago

🤷🏻 Well, the good news is the new validator catches it.

For quick copy-paste, let's switch back to: [0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735, 0, 0.42, 0.105, 0.525, 0.21, 0.63, 0.315, 0.735], for both bold.json files.

effigies commented 1 year ago

Well, that kind of works, except that these slice timings imply a TR of 0.84, not 0.735.

>>> np.arange(0, 0.84, 0.105)
array([0.   , 0.105, 0.21 , 0.315, 0.42 , 0.525, 0.63 , 0.735])

Should we update RepetitionTime as well?

CPernet commented 1 year ago

surely someone has UKBB data? or yes let's make it up

effigies commented 1 year ago

Here's the exam card for biobank: https://www.fmrib.ox.ac.uk/ukbiobank/protocol/V4_23092014.pdf

We have a TR of 735ms, and interleaved. I just calculated it with the following:

>>> indices = np.array([0, 4, 1, 5, 2, 6, 3, 7] * 8)
>>> np.linspace(0, 0.735, 9)[:-1][indices].tolist()

Added to #403.