rapidtide 3.0a11__tar.gz → 3.0a12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. {rapidtide-3.0a11 → rapidtide-3.0a12}/CHANGELOG.md +9 -1
  2. {rapidtide-3.0a11/rapidtide.egg-info → rapidtide-3.0a12}/PKG-INFO +1 -1
  3. rapidtide-3.0a12/TODO.md +17 -0
  4. rapidtide-3.0a12/rapidtide/Refiner.py +464 -0
  5. rapidtide-3.0a12/rapidtide/data/examples/src/testfmri +10 -0
  6. rapidtide-3.0a12/rapidtide/data/examples/src/testinitdelay +19 -0
  7. rapidtide-3.0a12/rapidtide/data/examples/src/testnewrefine +49 -0
  8. rapidtide-3.0a12/rapidtide/data/examples/src/testrefineonly +22 -0
  9. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/glmpass.py +8 -1
  10. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/refinedelay.py +72 -32
  11. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/refineregressor.py +38 -24
  12. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate.py +1 -0
  13. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate.ui +1 -0
  14. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_alt.py +5 -4
  15. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_alt.ui +3 -2
  16. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_alt_qt6.py +5 -4
  17. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_big.py +1 -0
  18. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_big.ui +1 -0
  19. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_big_qt6.py +1 -0
  20. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tidepoolTemplate_qt6.py +1 -0
  21. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/parser_funcs.py +10 -2
  22. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/rapidtide.py +197 -325
  23. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/rapidtide_parser.py +35 -13
  24. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/retroglm.py +145 -60
  25. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/tidepool.py +2 -2
  26. {rapidtide-3.0a11 → rapidtide-3.0a12/rapidtide.egg-info}/PKG-INFO +1 -1
  27. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide.egg-info/SOURCES.txt +4 -0
  28. rapidtide-3.0a11/TODO.md +0 -35
  29. rapidtide-3.0a11/rapidtide/data/examples/src/testfmri +0 -132
  30. {rapidtide-3.0a11 → rapidtide-3.0a12}/CODE_OF_CONDUCT.md +0 -0
  31. {rapidtide-3.0a11 → rapidtide-3.0a12}/CONTRIBUTING.md +0 -0
  32. {rapidtide-3.0a11 → rapidtide-3.0a12}/INSTALL.rst +0 -0
  33. {rapidtide-3.0a11 → rapidtide-3.0a12}/LICENSE +0 -0
  34. {rapidtide-3.0a11 → rapidtide-3.0a12}/MANIFEST.in +0 -0
  35. {rapidtide-3.0a11 → rapidtide-3.0a12}/README.rst +0 -0
  36. {rapidtide-3.0a11 → rapidtide-3.0a12}/USAGE.rst +0 -0
  37. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/download-nda-data +0 -0
  38. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/downloadcmd-auther +0 -0
  39. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/gmscalc-HCPYA +0 -0
  40. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/list-rapidtide-relevant-images +0 -0
  41. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/mount-and-run +0 -0
  42. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/rapidtide-HCPYA +0 -0
  43. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/rapidtide-cloud-test +0 -0
  44. {rapidtide-3.0a11 → rapidtide-3.0a12}/cloud/simple-cp-test +0 -0
  45. {rapidtide-3.0a11 → rapidtide-3.0a12}/pyproject.toml +0 -0
  46. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/Colortables.py +0 -0
  47. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/OrthoImageItem.py +0 -0
  48. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/RapidtideDataset.py +0 -0
  49. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/__init__.py +0 -0
  50. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/_version.py +0 -0
  51. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/calcandfitcorrpairs.py +0 -0
  52. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/calccoherence.py +0 -0
  53. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/calcnullsimfunc.py +0 -0
  54. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/calcsimfunc.py +0 -0
  55. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/correlate.py +0 -0
  56. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/installtestdata +0 -0
  57. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/test_findmaxlag.py +0 -0
  58. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/test_io +0 -0
  59. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/test_mlregressallt.py +0 -0
  60. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/test_rapidtidecompare +0 -0
  61. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testalign +0 -0
  62. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testatlasaverage +0 -0
  63. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testboth +0 -0
  64. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testcomplex +0 -0
  65. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testdecomp +0 -0
  66. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testfileorfloat +0 -0
  67. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testfingerprint +0 -0
  68. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testfmridocker +0 -0
  69. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testfrozen +0 -0
  70. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testfuncs +0 -0
  71. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testglmfilt +0 -0
  72. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testhappy +0 -0
  73. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testlinfit +0 -0
  74. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testlocalflow +0 -0
  75. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testnoiseamp +0 -0
  76. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testoscorr +0 -0
  77. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testoutputsize +0 -0
  78. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testpad +0 -0
  79. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testretro +0 -0
  80. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testretrolagtcs +0 -0
  81. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/examples/src/testsimdata +0 -0
  82. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_revised/model.h5 +0 -0
  83. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_revised/model_meta.json +0 -0
  84. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_serdar/model.h5 +0 -0
  85. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_serdar/model_meta.json +0 -0
  86. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_serdar2/model.h5 +0 -0
  87. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/models/model_serdar2/model_meta.json +0 -0
  88. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ASPECTS_2mm.nii.gz +0 -0
  89. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ASPECTS_2mm_mask.nii.gz +0 -0
  90. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ASPECTS_3mm.nii.gz +0 -0
  91. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ASPECTS_3mm_mask.nii.gz +0 -0
  92. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ASPECTS_regions.txt +0 -0
  93. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ATTbasedFlowTerritories_split_2mm.nii.gz +0 -0
  94. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ATTbasedFlowTerritories_split_2mm_mask.nii.gz +0 -0
  95. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/ATTbasedFlowTerritories_split_regions.txt +0 -0
  96. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_binmask_2mm.nii.gz +0 -0
  97. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_lag_2mm.nii.gz +0 -0
  98. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_mask_2mm.nii.gz +0 -0
  99. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_negmask_2mm.nii.gz +0 -0
  100. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_sigma_2mm.nii.gz +0 -0
  101. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200_strength_2mm.nii.gz +0 -0
  102. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
  103. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
  104. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
  105. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
  106. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_graylaghist.json +0 -0
  107. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
  108. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_laghist.json +0 -0
  109. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
  110. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
  111. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
  112. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
  113. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
  114. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
  115. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
  116. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
  117. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_whitelaghist.json +0 -0
  118. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
  119. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +0 -0
  120. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +0 -0
  121. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
  122. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1.xml +0 -0
  123. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_regions.txt +0 -0
  124. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
  125. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  126. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2.xml +0 -0
  127. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_regions.txt +0 -0
  128. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
  129. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  130. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
  131. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
  132. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
  133. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
  134. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_3mm.nii.gz +0 -0
  135. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/MNI152_T1_3mm_brain_mask.nii.gz +0 -0
  136. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/data/reference/slicetimes/HCP-YA_slicetimes.txt +0 -0
  137. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/dlfilter.py +0 -0
  138. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/externaltools.py +0 -0
  139. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/fMRIData_class.py +0 -0
  140. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/filter.py +0 -0
  141. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/fit.py +0 -0
  142. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/happy_supportfuncs.py +0 -0
  143. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/helper_classes.py +0 -0
  144. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/io.py +0 -0
  145. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/makelaggedtcs.py +0 -0
  146. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/maskutil.py +0 -0
  147. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/miscmath.py +0 -0
  148. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/multiproc.py +0 -0
  149. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/patchmatch.py +0 -0
  150. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/peakeval.py +0 -0
  151. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/qualitycheck.py +0 -0
  152. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/resample.py +0 -0
  153. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/__init__.py +0 -0
  154. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/adjustoffset.py +0 -0
  155. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/aligntcs.py +0 -0
  156. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/applydlfilter.py +0 -0
  157. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/atlasaverage.py +0 -0
  158. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/atlastool.py +0 -0
  159. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/calcicc.py +0 -0
  160. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/calctexticc.py +0 -0
  161. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/calcttest.py +0 -0
  162. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/ccorrica.py +0 -0
  163. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/diffrois.py +0 -0
  164. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/endtidalproc.py +0 -0
  165. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/fdica.py +0 -0
  166. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/filtnifti.py +0 -0
  167. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/filttc.py +0 -0
  168. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/fingerprint.py +0 -0
  169. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/fixtr.py +0 -0
  170. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/glmfilt.py +0 -0
  171. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/gmscalc.py +0 -0
  172. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/happy.py +0 -0
  173. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/happy2std.py +0 -0
  174. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/happywarp.py +0 -0
  175. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/histnifti.py +0 -0
  176. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/histtc.py +0 -0
  177. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/localflow.py +0 -0
  178. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/mergequality.py +0 -0
  179. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/pairproc.py +0 -0
  180. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/pairwisemergenifti.py +0 -0
  181. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/physiofreq.py +0 -0
  182. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/pixelcomp.py +0 -0
  183. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/plethquality.py +0 -0
  184. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/polyfitim.py +0 -0
  185. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/proj2flow.py +0 -0
  186. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/rankimage.py +0 -0
  187. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/rapidtide.py +0 -0
  188. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/rapidtide2std.py +0 -0
  189. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/resamplenifti.py +0 -0
  190. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/resampletc.py +0 -0
  191. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/retroglm.py +0 -0
  192. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/retrolagtcs.py +0 -0
  193. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/roisummarize.py +0 -0
  194. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/runqualitycheck.py +0 -0
  195. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showarbcorr.py +0 -0
  196. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showhist.py +0 -0
  197. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showstxcorr.py +0 -0
  198. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showtc.py +0 -0
  199. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showxcorr_legacy.py +0 -0
  200. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showxcorrx.py +0 -0
  201. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/showxy.py +0 -0
  202. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/simdata.py +0 -0
  203. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/spatialdecomp.py +0 -0
  204. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/spatialfit.py +0 -0
  205. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/spatialmi.py +0 -0
  206. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/spectrogram.py +0 -0
  207. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/stupidramtricks.py +0 -0
  208. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/synthASL.py +0 -0
  209. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/tcfrom2col.py +0 -0
  210. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/tcfrom3col.py +0 -0
  211. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/temporaldecomp.py +0 -0
  212. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/testhrv.py +0 -0
  213. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/threeD.py +0 -0
  214. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/tidepool.py +0 -0
  215. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/scripts/variabilityizer.py +0 -0
  216. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/simfuncfit.py +0 -0
  217. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/stats.py +0 -0
  218. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/.coveragerc +0 -0
  219. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/__init__.py +0 -0
  220. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/matplotlibrc +0 -0
  221. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/resethappytargets +0 -0
  222. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/resetrapidtidetargets +0 -0
  223. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/resettargets +0 -0
  224. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/runlocaltest +0 -0
  225. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/showdirectories +0 -0
  226. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/showkernels +0 -0
  227. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_aliasedcorrelate.py +0 -0
  228. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_aligntcs.py +0 -0
  229. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_calcicc.py +0 -0
  230. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_congrid.py +0 -0
  231. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_correlate.py +0 -0
  232. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_corrpass.py +0 -0
  233. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_delayestimation.py +0 -0
  234. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_doresample.py +0 -0
  235. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fastresampler.py +0 -0
  236. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_filter.py +0 -0
  237. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_findmaxlag.py +0 -0
  238. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunhappy_v1.py +0 -0
  239. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunhappy_v2.py +0 -0
  240. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunhappy_v3.py +0 -0
  241. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunhappy_v4.py +0 -0
  242. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunhappy_v5.py +0 -0
  243. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v1.py +0 -0
  244. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v2.py +0 -0
  245. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v3.py +0 -0
  246. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v4.py +0 -0
  247. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v5.py +0 -0
  248. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_fullrunrapidtide_v6.py +0 -0
  249. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_glmpass.py +0 -0
  250. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_io.py +0 -0
  251. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_mi.py +0 -0
  252. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_miscmath.py +0 -0
  253. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_motionregress.py +0 -0
  254. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_nullcorr.py +0 -0
  255. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_padvec.py +0 -0
  256. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_phaseanalysis.py +0 -0
  257. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_rapidtideparser.py +0 -0
  258. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_refinedelay.py +0 -0
  259. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_runmisc.py +0 -0
  260. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_sharedmem.py +0 -0
  261. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_simulate.py +0 -0
  262. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_stcorrelate.py +0 -0
  263. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_timeshift.py +0 -0
  264. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_valtoindex.py +0 -0
  265. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/test_zRapidtideDataset.py +0 -0
  266. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_cardfromfmri_25.0Hz.txt +0 -0
  267. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_cardfromfmri_dlfiltered_25.0Hz.txt +0 -0
  268. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_info.txt +0 -0
  269. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_normcardfromfmri_25.0Hz.txt +0 -0
  270. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_normcardfromfmri_dlfiltered_25.0Hz.txt +0 -0
  271. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_normpleth_25.0Hz.txt +0 -0
  272. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_pleth_25.0Hz.txt +0 -0
  273. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/100206_REST1_LR_pleth_dlfiltered_25.0Hz.txt +0 -0
  274. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/fmri_globalmean.txt +0 -0
  275. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/happy_phase1target_vesselmask.nii.gz +0 -0
  276. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/happy_phase2output_vesselmask.nii.gz +0 -0
  277. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/happy_target_vesselmask.nii.gz +0 -0
  278. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/lforegressor.txt +0 -0
  279. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/lt_rt.txt +0 -0
  280. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/phasetest.txt +0 -0
  281. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/rapidtide2x_phase1target_reference_fmrires.txt +0 -0
  282. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/stcorrtest_Rvalue.txt +0 -0
  283. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/stcorrtest_delay.txt +0 -0
  284. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/stcorrtest_mask.txt +0 -0
  285. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/stcorrtest_pearson.txt +0 -0
  286. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/stcorrtest_pvalue.txt +0 -0
  287. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/testdata/testfilt.txt +0 -0
  288. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/tmp/.placeholder.txt +0 -0
  289. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/usercustomize.py +0 -0
  290. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/tests/utils.py +0 -0
  291. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/transformerdlfilter.py +0 -0
  292. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/util.py +0 -0
  293. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/wiener.py +0 -0
  294. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/wiener2.py +0 -0
  295. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/__init__.py +0 -0
  296. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/adjustoffset.py +0 -0
  297. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/aligntcs.py +0 -0
  298. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/applydlfilter.py +0 -0
  299. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/atlasaverage.py +0 -0
  300. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/atlastool.py +0 -0
  301. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/calctexticc.py +0 -0
  302. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/ccorrica.py +0 -0
  303. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/diffrois.py +0 -0
  304. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/endtidalproc.py +0 -0
  305. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/fdica.py +0 -0
  306. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/filtnifti.py +0 -0
  307. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/filttc.py +0 -0
  308. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/fixtr.py +0 -0
  309. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/glmfilt.py +0 -0
  310. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/glmfrommaps.py +0 -0
  311. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/gmscalc.py +0 -0
  312. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/happy.py +0 -0
  313. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/happy2std.py +0 -0
  314. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/happy_parser.py +0 -0
  315. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/histnifti.py +0 -0
  316. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/histtc.py +0 -0
  317. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/localflow.py +0 -0
  318. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/mergequality.py +0 -0
  319. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/niftidecomp.py +0 -0
  320. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/niftistats.py +0 -0
  321. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/pairproc.py +0 -0
  322. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/pairwisemergenifti.py +0 -0
  323. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/physiofreq.py +0 -0
  324. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/pixelcomp.py +0 -0
  325. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/plethquality.py +0 -0
  326. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/polyfitim.py +0 -0
  327. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/proj2flow.py +0 -0
  328. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/rankimage.py +0 -0
  329. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/rapidtide2std.py +0 -0
  330. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/resamplenifti.py +0 -0
  331. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/resampletc.py +0 -0
  332. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/retrolagtcs.py +0 -0
  333. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/roisummarize.py +0 -0
  334. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/runqualitycheck.py +0 -0
  335. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showarbcorr.py +0 -0
  336. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showhist.py +0 -0
  337. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showstxcorr.py +0 -0
  338. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showtc.py +0 -0
  339. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showxcorrx.py +0 -0
  340. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/showxy.py +0 -0
  341. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/simdata.py +0 -0
  342. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/spatialfit.py +0 -0
  343. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/spatialmi.py +0 -0
  344. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/spectrogram.py +0 -0
  345. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/synthASL.py +0 -0
  346. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/tcfrom2col.py +0 -0
  347. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/tcfrom3col.py +0 -0
  348. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/utils.py +0 -0
  349. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide/workflows/variabilityizer.py +0 -0
  350. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide.egg-info/dependency_links.txt +0 -0
  351. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide.egg-info/entry_points.txt +0 -0
  352. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide.egg-info/requires.txt +0 -0
  353. {rapidtide-3.0a11 → rapidtide-3.0a12}/rapidtide.egg-info/top_level.txt +0 -0
  354. {rapidtide-3.0a11 → rapidtide-3.0a12}/setup.cfg +0 -0
  355. {rapidtide-3.0a11 → rapidtide-3.0a12}/versioneer.py +0 -0
@@ -1,11 +1,19 @@
1
1
  # Release history
2
2
 
3
+ ## Version 3.0alpha12 (3/19/25)
4
+ * (rapidtide) Added option to perform refine on last pass.
5
+ * (rapidtide) Moved refinement out into its own class to make things more modular.
6
+ * (refinedelay) Put in some experimental code to do multiderivative delay fits. Currently doesn't work very well.
7
+ * (tidepool) Changed default colormaps for similarity widty, MTT.
8
+ * (package) Made a script to compile qt templates.
9
+ * (package) Added the ability to set value limits to some parser functions.
10
+
3
11
  ## Version 3.0alpha11 (3/5/25)
4
12
  * (tidepool) Substantial speed improvement switching datasets.
5
13
  * (tidepool) Colormap radio button is now set correctly.
6
14
  * (tidepool) Mask menu label is now set correctly when restoring a loaded dataset.
7
15
  * (versioneer) Updated to 0.29.
8
- * (docs) Tidepool's new functionality is now described.
16
+ * (docs) tidepool's documentation has been updated to reflect the current state of the program.
9
17
 
10
18
  ## Version 3.0alpha10 (2/28/25)
11
19
  * (tidepool) Full support for multiple concurrent datasets. Dataset loading and selection is now done through the File menu.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rapidtide
3
- Version: 3.0a11
3
+ Version: 3.0a12
4
4
  Summary: Tools for performing correlation analysis on fMRI data.
5
5
  Author: Taylor Salo, Daniel M. Drucker, Ph.D., Jeffrey N Stout, Yaroslav O. Halchenko, Derek Monroe
6
6
  Author-email: "Blaise deB. Frederick" <blaise.frederick@gmail.com>
@@ -0,0 +1,17 @@
1
+ To do list
2
+ ----------
3
+
4
+ 1. (package) Expand automated testing
5
+ 4. (tidepool) Implement ASPECTS/JHU averaging
6
+ 7. (rapidtide) Implement a dispersive delay model
7
+ 8. (rapidtide) Add a sinc peak fit
8
+ 9. (tidepool) Fix the weird limit resetting bug when some panes are activated.
9
+ 10. (tidepool)
10
+
11
+ Implement new argument parsing:
12
+ vi \
13
+ rapidtide/scripts/showxcorr_legacy.py \
14
+ rapidtide/scripts/threeD.py \
15
+ rapidtide/experimental/highresmotion \
16
+ rapidtide/experimental/harmonogram \
17
+ rapidtide/workflows/rapidtide2x_parser.py
@@ -0,0 +1,464 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright 2016-2024 Blaise Frederick
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ #
19
+ """
20
+ A class to impmement regressor refinement
21
+ """
22
+ import copy
23
+
24
+ import numpy as np
25
+
26
+ import rapidtide.fit as tide_fit
27
+ import rapidtide.io as tide_io
28
+ import rapidtide.miscmath as tide_math
29
+ import rapidtide.refineregressor as tide_refineregressor
30
+ import rapidtide.resample as tide_resample
31
+ import rapidtide.stats as tide_stats
32
+ import rapidtide.util as tide_util
33
+ from rapidtide.tests.utils import mse
34
+
35
+
36
+ class Refiner:
37
+
38
+ refinemaskvoxels = None
39
+
40
+ def __init__(
41
+ self,
42
+ internalvalidfmrishape,
43
+ internalvalidpaddedfmrishape,
44
+ pid,
45
+ outputname,
46
+ initial_fmri_x,
47
+ paddedinitial_fmri_x,
48
+ os_fmri_x,
49
+ sharedmem=False,
50
+ offsettime=0.0,
51
+ ampthresh=0.3,
52
+ lagminthresh=0.25,
53
+ lagmaxthresh=3.0,
54
+ sigmathresh=1000.0,
55
+ cleanrefined=False,
56
+ bipolar=False,
57
+ fixdelay=False,
58
+ includemask=None,
59
+ excludemask=None,
60
+ LGR=None,
61
+ nprocs=1,
62
+ detrendorder=1,
63
+ alwaysmultiproc=False,
64
+ showprogressbar=True,
65
+ chunksize=50000,
66
+ padtrs=10,
67
+ refineprenorm="var",
68
+ refineweighting=None,
69
+ refinetype="pca",
70
+ pcacomponents=0.8,
71
+ dodispersioncalc=False,
72
+ dispersioncalc_lower=-5.0,
73
+ dispersioncalc_upper=5.0,
74
+ dispersioncalc_step=0.5,
75
+ windowfunc="hamming",
76
+ passes=3,
77
+ maxpasses=15,
78
+ convergencethresh=None,
79
+ interptype="univariate",
80
+ usetmask=False,
81
+ tmask_y=None,
82
+ tmaskos_y=None,
83
+ fastresamplerpadtime=45.0,
84
+ debug=False,
85
+ rt_floattype="float64",
86
+ rt_floatset=np.float64,
87
+ ):
88
+ self.internalvalidfmrishape = internalvalidfmrishape
89
+ self.internalvalidpaddedfmrishape = internalvalidpaddedfmrishape
90
+ self.sharedmem = sharedmem
91
+ self.outputname = outputname
92
+ self.initial_fmri_x = initial_fmri_x
93
+ self.paddedinitial_fmri_x = paddedinitial_fmri_x
94
+ self.os_fmri_x = os_fmri_x
95
+
96
+ self.offsettime = offsettime
97
+ self.ampthresh = ampthresh
98
+ self.lagminthresh = lagminthresh
99
+ self.lagmaxthresh = lagmaxthresh
100
+ self.sigmathresh = sigmathresh
101
+ self.cleanrefined = cleanrefined
102
+ self.bipolar = bipolar
103
+ self.fixdelay = fixdelay
104
+ self.LGR = LGR
105
+ self.nprocs = nprocs
106
+ self.detrendorder = detrendorder
107
+ self.alwaysmultiproc = alwaysmultiproc
108
+ self.showprogressbar = showprogressbar
109
+ self.chunksize = chunksize
110
+ self.padtrs = padtrs
111
+ self.refineprenorm = refineprenorm
112
+ self.refineweighting = refineweighting
113
+ self.refinetype = refinetype
114
+ self.pcacomponents = pcacomponents
115
+ self.dodispersioncalc = dodispersioncalc
116
+ self.dispersioncalc_lower = dispersioncalc_lower
117
+ self.dispersioncalc_upper = dispersioncalc_upper
118
+ self.dispersioncalc_step = dispersioncalc_step
119
+ self.windowfunc = windowfunc
120
+ self.passes = passes
121
+ self.maxpasses = maxpasses
122
+ self.convergencethresh = convergencethresh
123
+ self.interptype = interptype
124
+ self.usetmask = usetmask
125
+ self.tmask_y = tmask_y
126
+ self.tmaskos_y = tmaskos_y
127
+ self.fastresamplerpadtime = fastresamplerpadtime
128
+ self.debug = debug
129
+ self.rt_floattype = rt_floattype
130
+ self.rt_floatset = rt_floatset
131
+
132
+ self.setmasks(includemask, excludemask)
133
+ self.totalrefinementbytes = self._allocatemem(pid)
134
+
135
+ def setmasks(self, includemask, excludemask):
136
+ self.includemask = includemask
137
+ self.excludemask = excludemask
138
+
139
+ def _allocatemem(self, pid):
140
+ if self.sharedmem:
141
+ self.shiftedtcs, self.shiftedtcs_shm = tide_util.allocshared(
142
+ self.internalvalidfmrishape, self.rt_floatset, name=f"shiftedtcs_{pid}"
143
+ )
144
+ self.weights, self.weights_shm = tide_util.allocshared(
145
+ self.internalvalidfmrishape, self.rt_floatset, name=f"weights_{pid}"
146
+ )
147
+ self.paddedshiftedtcs, self.paddedshiftedtcs_shm = tide_util.allocshared(
148
+ self.internalvalidpaddedfmrishape,
149
+ self.rt_floatset,
150
+ name=f"paddedshiftedtcs_{pid}",
151
+ )
152
+ self.paddedweights, self.paddedweights_shm = tide_util.allocshared(
153
+ self.internalvalidpaddedfmrishape,
154
+ self.rt_floatset,
155
+ name=f"paddedweights_{pid}",
156
+ )
157
+ ramlocation = "in shared memory"
158
+ else:
159
+ self.shiftedtcs = np.zeros(self.internalvalidfmrishape, dtype=self.rt_floattype)
160
+ self.weights = np.zeros(self.internalvalidfmrishape, dtype=self.rt_floattype)
161
+ self.paddedshiftedtcs = np.zeros(
162
+ self.internalvalidpaddedfmrishape, dtype=self.rt_floattype
163
+ )
164
+ self.paddedweights = np.zeros(
165
+ self.internalvalidpaddedfmrishape, dtype=self.rt_floattype
166
+ )
167
+ ramlocation = "locally"
168
+ totalrefinementbytes = (
169
+ self.shiftedtcs.nbytes
170
+ + self.weights.nbytes
171
+ + self.paddedshiftedtcs.nbytes
172
+ + self.paddedweights.nbytes
173
+ )
174
+ thesize, theunit = tide_util.format_bytes(totalrefinementbytes)
175
+ print(f"allocated {thesize:.3f} {theunit} {ramlocation} for refinement")
176
+ tide_util.logmem("after refinement array allocation")
177
+ return totalrefinementbytes
178
+
179
+ def cleanup(self):
180
+ del self.paddedshiftedtcs
181
+ del self.paddedweights
182
+ del self.shiftedtcs
183
+ del self.weights
184
+ if self.sharedmem:
185
+ tide_util.cleanup_shm(self.paddedshiftedtcs_shm)
186
+ tide_util.cleanup_shm(self.paddedweights_shm)
187
+ tide_util.cleanup_shm(self.shiftedtcs_shm)
188
+ tide_util.cleanup_shm(self.weights_shm)
189
+
190
+ def makemask(self, lagstrengths, lagtimes, lagsigma, fitmask):
191
+ # create the refinement mask
192
+ (
193
+ self.refinemaskvoxels,
194
+ self.refinemask,
195
+ self.locationfails,
196
+ self.ampfails,
197
+ self.lagfails,
198
+ self.sigmafails,
199
+ self.numinmask,
200
+ ) = tide_refineregressor.makerefinemask(
201
+ lagstrengths,
202
+ lagtimes,
203
+ lagsigma,
204
+ fitmask,
205
+ offsettime=self.offsettime,
206
+ ampthresh=self.ampthresh,
207
+ lagminthresh=self.lagminthresh,
208
+ lagmaxthresh=self.lagmaxthresh,
209
+ sigmathresh=self.sigmathresh,
210
+ cleanrefined=self.cleanrefined,
211
+ bipolar=self.bipolar,
212
+ includemask=self.includemask,
213
+ excludemask=self.excludemask,
214
+ fixdelay=self.fixdelay,
215
+ debug=self.debug,
216
+ )
217
+
218
+ if self.numinmask == 0:
219
+ self.LGR.critical("No voxels in refine mask - adjust thresholds or external masks")
220
+ return False
221
+ else:
222
+ return True
223
+
224
+ def getrefinemask(self):
225
+ return self.refinemask
226
+
227
+ def getpaddedshiftedtcs(self):
228
+ return self.paddedshiftedtcs
229
+
230
+ def alignvoxels(self, fmri_data_valid, fmritr, lagtimes):
231
+ # align timecourses to prepare for refinement
232
+ self.LGR.info("aligning timecourses")
233
+ voxelsprocessed_rra = tide_refineregressor.alignvoxels(
234
+ fmri_data_valid,
235
+ fmritr,
236
+ self.shiftedtcs,
237
+ self.weights,
238
+ self.paddedshiftedtcs,
239
+ self.paddedweights,
240
+ lagtimes,
241
+ self.refinemask,
242
+ nprocs=self.nprocs,
243
+ detrendorder=self.detrendorder,
244
+ offsettime=self.offsettime,
245
+ alwaysmultiproc=self.alwaysmultiproc,
246
+ showprogressbar=self.showprogressbar,
247
+ chunksize=self.chunksize,
248
+ padtrs=self.padtrs,
249
+ debug=self.debug,
250
+ rt_floatset=self.rt_floatset,
251
+ rt_floattype=self.rt_floattype,
252
+ )
253
+ return voxelsprocessed_rra
254
+ # self.LGR.info(f"align complete: {voxelsprocessed_rra=}")
255
+
256
+ def prenormalize(self, lagtimes, lagstrengths, R2):
257
+ tide_refineregressor.prenorm(
258
+ self.paddedshiftedtcs,
259
+ self.refinemask,
260
+ lagtimes,
261
+ self.lagmaxthresh,
262
+ lagstrengths,
263
+ R2,
264
+ self.refineprenorm,
265
+ self.refineweighting,
266
+ )
267
+
268
+ def refine(
269
+ self,
270
+ theprefilter,
271
+ fmritr,
272
+ thepass,
273
+ lagstrengths,
274
+ lagtimes,
275
+ previousnormoutputdata,
276
+ corrmasksize,
277
+ ):
278
+ (
279
+ voxelsprocessed_rr,
280
+ self.paddedoutputdata,
281
+ ) = tide_refineregressor.dorefine(
282
+ self.paddedshiftedtcs,
283
+ self.refinemask,
284
+ self.weights,
285
+ theprefilter,
286
+ fmritr,
287
+ thepass,
288
+ lagstrengths,
289
+ lagtimes,
290
+ self.refinetype,
291
+ 1.0 / fmritr,
292
+ self.outputname,
293
+ detrendorder=self.detrendorder,
294
+ pcacomponents=self.pcacomponents,
295
+ dodispersioncalc=self.dodispersioncalc,
296
+ dispersioncalc_lower=self.dispersioncalc_lower,
297
+ dispersioncalc_upper=self.dispersioncalc_upper,
298
+ dispersioncalc_step=self.dispersioncalc_step,
299
+ windowfunc=self.windowfunc,
300
+ cleanrefined=self.cleanrefined,
301
+ bipolar=self.bipolar,
302
+ debug=self.debug,
303
+ rt_floatset=self.rt_floatset,
304
+ rt_floattype=self.rt_floattype,
305
+ )
306
+ outputdict = {}
307
+ outputdict["refinemasksize_pass" + str(thepass)] = voxelsprocessed_rr
308
+ outputdict["refinemaskpct_pass" + str(thepass)] = 100.0 * voxelsprocessed_rr / corrmasksize
309
+ outputdict["refinelocationfails_pass" + str(thepass)] = self.locationfails
310
+ outputdict["refineampfails_pass" + str(thepass)] = self.ampfails
311
+ outputdict["refinelagfails_pass" + str(thepass)] = self.lagfails
312
+ outputdict["refinesigmafails_pass" + str(thepass)] = self.sigmafails
313
+
314
+ fmrifreq = 1.0 / fmritr
315
+ if voxelsprocessed_rr > 0:
316
+ paddednormoutputdata = tide_math.stdnormalize(
317
+ theprefilter.apply(fmrifreq, self.paddedoutputdata)
318
+ )
319
+ outputdata = self.paddedoutputdata[self.padtrs : -self.padtrs]
320
+ normoutputdata = tide_math.stdnormalize(theprefilter.apply(fmrifreq, outputdata))
321
+ normunfilteredoutputdata = tide_math.stdnormalize(outputdata)
322
+ tide_io.writebidstsv(
323
+ f"{self.outputname}_desc-refinedmovingregressor_timeseries",
324
+ normunfilteredoutputdata,
325
+ fmrifreq,
326
+ columns=["unfiltered_pass" + str(thepass)],
327
+ extraheaderinfo={
328
+ "Description": "The raw and filtered probe regressor produced by the refinement procedure, at the time resolution of the data"
329
+ },
330
+ append=(thepass > 1),
331
+ )
332
+ tide_io.writebidstsv(
333
+ f"{self.outputname}_desc-refinedmovingregressor_timeseries",
334
+ normoutputdata,
335
+ fmrifreq,
336
+ columns=["filtered_pass" + str(thepass)],
337
+ extraheaderinfo={
338
+ "Description": "The raw and filtered probe regressor produced by the refinement procedure, at the time resolution of the data"
339
+ },
340
+ append=True,
341
+ )
342
+
343
+ # check for convergence
344
+ regressormse = mse(normoutputdata, previousnormoutputdata)
345
+ outputdict["regressormse_pass" + str(thepass).zfill(2)] = regressormse
346
+ self.LGR.info(f"regressor difference at end of pass {thepass:d} is {regressormse:.6f}")
347
+ if self.convergencethresh is not None:
348
+ if thepass >= self.maxpasses:
349
+ self.LGR.info("refinement ended (maxpasses reached)")
350
+ stoprefining = True
351
+ refinestopreason = "maxpassesreached"
352
+ elif regressormse < self.convergencethresh:
353
+ self.LGR.info("refinement ended (refinement has converged")
354
+ stoprefining = True
355
+ refinestopreason = "convergence"
356
+ else:
357
+ stoprefining = False
358
+ elif thepass >= self.passes:
359
+ stoprefining = True
360
+ refinestopreason = "passesreached"
361
+ else:
362
+ stoprefining = False
363
+ refinestopreason = None
364
+ outputdict["refinestopreason"] = refinestopreason
365
+
366
+ if self.detrendorder > 0:
367
+ resampnonosref_y = tide_fit.detrend(
368
+ tide_resample.doresample(
369
+ self.paddedinitial_fmri_x,
370
+ paddednormoutputdata,
371
+ self.initial_fmri_x,
372
+ method=self.interptype,
373
+ ),
374
+ order=self.detrendorder,
375
+ demean=True,
376
+ )
377
+ resampref_y = tide_fit.detrend(
378
+ tide_resample.doresample(
379
+ self.paddedinitial_fmri_x,
380
+ paddednormoutputdata,
381
+ self.os_fmri_x,
382
+ method=self.interptype,
383
+ ),
384
+ order=self.detrendorder,
385
+ demean=True,
386
+ )
387
+ else:
388
+ resampnonosref_y = tide_resample.doresample(
389
+ self.paddedinitial_fmri_x,
390
+ paddednormoutputdata,
391
+ self.initial_fmri_x,
392
+ method=self.interptype,
393
+ )
394
+ resampref_y = tide_resample.doresample(
395
+ self.paddedinitial_fmri_x,
396
+ paddednormoutputdata,
397
+ self.os_fmri_x,
398
+ method=self.interptype,
399
+ )
400
+ if self.usetmask:
401
+ resampnonosref_y *= self.tmask_y
402
+ thefit, R2val = tide_fit.mlregress(self.tmask_y, resampnonosref_y)
403
+ resampnonosref_y -= thefit[0, 1] * self.tmask_y
404
+ resampref_y *= self.tmaskos_y
405
+ thefit, R2val = tide_fit.mlregress(self.tmaskos_y, resampref_y)
406
+ resampref_y -= thefit[0, 1] * self.tmaskos_y
407
+
408
+ # reinitialize genlagtc for resampling
409
+ previousnormoutputdata = np.zeros_like(normoutputdata)
410
+ genlagtc = tide_resample.FastResampler(
411
+ self.paddedinitial_fmri_x,
412
+ paddednormoutputdata,
413
+ padtime=self.fastresamplerpadtime,
414
+ )
415
+ genlagtc.save(f"{self.outputname}_desc-lagtcgenerator_timeseries")
416
+ if self.debug:
417
+ genlagtc.info()
418
+ (
419
+ outputdict[f"kurtosis_reference_pass{thepass + 1}"],
420
+ outputdict[f"kurtosisz_reference_pass{thepass + 1}"],
421
+ outputdict[f"kurtosisp_reference_pass{thepass + 1}"],
422
+ ) = tide_stats.kurtosisstats(resampref_y)
423
+ (
424
+ outputdict[f"skewness_reference_pass{thepass + 1}"],
425
+ outputdict[f"skewnessz_reference_pass{thepass + 1}"],
426
+ outputdict[f"skewnessp_reference_pass{thepass + 1}"],
427
+ ) = tide_stats.skewnessstats(resampref_y)
428
+ if not stoprefining:
429
+ tide_io.writebidstsv(
430
+ f"{self.outputname}_desc-movingregressor_timeseries",
431
+ tide_math.stdnormalize(resampnonosref_y),
432
+ 1.0 / fmritr,
433
+ columns=["pass" + str(thepass + 1)],
434
+ extraheaderinfo={
435
+ "Description": "The probe regressor used in each pass, at the time resolution of the data"
436
+ },
437
+ append=True,
438
+ )
439
+ oversampfreq = 1.0 / (self.os_fmri_x[1] - self.os_fmri_x[0])
440
+ tide_io.writebidstsv(
441
+ f"{self.outputname}_desc-oversampledmovingregressor_timeseries",
442
+ tide_math.stdnormalize(resampref_y),
443
+ oversampfreq,
444
+ columns=["pass" + str(thepass + 1)],
445
+ extraheaderinfo={
446
+ "Description": "The probe regressor used in each pass, at the time resolution used for calculating the similarity function"
447
+ },
448
+ append=True,
449
+ )
450
+ else:
451
+ self.LGR.warning(f"refinement failed - terminating at end of pass {thepass}")
452
+ stoprefining = True
453
+ refinestopreason = "emptymask"
454
+
455
+ return (
456
+ voxelsprocessed_rr,
457
+ outputdict,
458
+ previousnormoutputdata,
459
+ resampref_y,
460
+ resampnonosref_y,
461
+ stoprefining,
462
+ refinestopreason,
463
+ genlagtc,
464
+ )
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+
3
+ rapidtide \
4
+ --spatialfilt -1 \
5
+ --nprocs -1 \
6
+ --searchrange -5 20 \
7
+ --simcalcrange 50 -1 \
8
+ --outputlevel max \
9
+ sub-RAPIDTIDETEST.nii.gz \
10
+ ../dst/sub-RAPIDTIDETEST
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+
3
+ rapidtide \
4
+ --spatialfilt -1 \
5
+ --nprocs -1 \
6
+ --searchrange -5 20 \
7
+ --simcalcrange 50 -1 \
8
+ sub-RAPIDTIDETEST.nii.gz \
9
+ ../dst/sub-RAPIDTIDETEST_defaultfilt
10
+
11
+ rapidtide \
12
+ --spatialfilt -1 \
13
+ --nprocs -1 \
14
+ --searchrange -5 20 \
15
+ --simcalcrange 50 -1 \
16
+ --regressor ../dst/sub-RAPIDTIDETEST_defaultfilt_desc-movingregressor_timeseries.json:pass3 \
17
+ --initialdelay ../dst/sub-RAPIDTIDETEST_defaultfilt_desc-maxtimerefined_map.nii.gz \
18
+ sub-RAPIDTIDETEST.nii.gz \
19
+ ../dst/sub-RAPIDTIDETEST_startfromlast
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+
3
+ rapidtide \
4
+ --spatialfilt -1 \
5
+ --nprocs -1 \
6
+ --searchrange -5 20 \
7
+ --simcalcrange 50 -1 \
8
+ --outputlevel max \
9
+ --refineglmderivs 1 \
10
+ sub-RAPIDTIDETEST.nii.gz \
11
+ ../dst/sub-RAPIDTIDETEST_1deriv
12
+
13
+ rapidtide \
14
+ --spatialfilt -1 \
15
+ --nprocs -1 \
16
+ --searchrange -5 20 \
17
+ --simcalcrange 50 -1 \
18
+ --outputlevel max \
19
+ --refineglmderivs 2 \
20
+ sub-RAPIDTIDETEST.nii.gz \
21
+ ../dst/sub-RAPIDTIDETEST_2deriv
22
+
23
+
24
+ retroglm \
25
+ sub-RAPIDTIDETEST.nii.gz \
26
+ ../dst/sub-RAPIDTIDETEST_1deriv \
27
+ --alternateoutput ../dst/retrotest_1to1 \
28
+ --nprocs -1 \
29
+ --glmderivs 0 \
30
+ --refineglmderivs 1 \
31
+ --outputlevel max
32
+
33
+ retroglm \
34
+ sub-RAPIDTIDETEST.nii.gz \
35
+ ../dst/sub-RAPIDTIDETEST_2deriv \
36
+ --alternateoutput ../dst/retrotest_2to1 \
37
+ --nprocs -1 \
38
+ --glmderivs 0 \
39
+ --refineglmderivs 1 \
40
+ --outputlevel max
41
+
42
+ retroglm \
43
+ sub-RAPIDTIDETEST.nii.gz \
44
+ ../dst/sub-RAPIDTIDETEST_1deriv \
45
+ --alternateoutput ../dst/retrotest_1to2 \
46
+ --nprocs -1 \
47
+ --glmderivs 0 \
48
+ --refineglmderivs 2 \
49
+ --outputlevel max
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ rapidtide \
4
+ --spatialfilt -1 \
5
+ --nprocs -1 \
6
+ --passes 1 \
7
+ --nodelayfit \
8
+ --focaldebug \
9
+ --dofinalrefine \
10
+ sub-RAPIDTIDETEST.nii.gz \
11
+ ../dst/sub-RAPIDTIDETEST_firstpass
12
+
13
+ rapidtide \
14
+ --spatialfilt -1 \
15
+ --nprocs -1 \
16
+ --nodelayfit \
17
+ --regressor ../dst/sub-RAPIDTIDETEST_firstpass_desc-refinedmovingregressor_timeseries.json:filtered_pass1 \
18
+ --initialdelay ../dst/sub-RAPIDTIDETEST_firstpass_desc-maxtimerefined_map.nii.gz \
19
+ --dofinalrefine \
20
+ --passes 1 \
21
+ sub-RAPIDTIDETEST.nii.gz \
22
+ ../dst/sub-RAPIDTIDETEST_secondpass
@@ -17,6 +17,7 @@
17
17
  #
18
18
  #
19
19
  import numpy as np
20
+ from scipy.special import factorial
20
21
  from tqdm import tqdm
21
22
 
22
23
  import rapidtide.filter as tide_filt
@@ -350,11 +351,17 @@ def makevoxelspecificderivs(theevs, nderivs=1, debug=False):
350
351
  if nderivs == 0:
351
352
  thenewevs = theevs
352
353
  else:
354
+ taylorcoffs = np.zeros((nderivs + 1), dtype=np.float64)
355
+ taylorcoffs[0] = 1.0
353
356
  thenewevs = np.zeros((theevs.shape[0], theevs.shape[1], nderivs + 1), dtype=float)
357
+ for i in range(1, nderivs + 1):
358
+ taylorcoffs[i] = 1.0 / factorial(i)
354
359
  for thevoxel in range(0, theevs.shape[0]):
355
360
  thenewevs[thevoxel, :, 0] = theevs[thevoxel, :] * 1.0
356
361
  for i in range(1, nderivs + 1):
357
- thenewevs[thevoxel, :, i] = np.gradient(thenewevs[thevoxel, :, i - 1])
362
+ thenewevs[thevoxel, :, i] = taylorcoffs[i] * np.gradient(
363
+ thenewevs[thevoxel, :, i - 1]
364
+ )
358
365
  if debug:
359
366
  print(f"{nderivs=}")
360
367
  print(f"{thenewevs.shape=}")