pycortex 1.2.7__tar.gz → 1.2.9__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 (442) hide show
  1. {pycortex-1.2.7 → pycortex-1.2.9}/PKG-INFO +8 -6
  2. {pycortex-1.2.7 → pycortex-1.2.9}/README.md +4 -5
  3. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/align.py +202 -85
  4. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/blender/__init__.py +1 -1
  5. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/database.py +19 -12
  6. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/braindata.py +6 -3
  7. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/viewRGB.py +1 -1
  8. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/views.py +20 -9
  9. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/formats.c +415 -223
  10. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/freesurfer.py +201 -58
  11. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/__init__.py +1 -0
  12. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/samplers.py +1 -1
  13. pycortex-1.2.9/cortex/mapper/utils.py +131 -0
  14. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/volume.py +1 -1
  15. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/openctm.c +412 -223
  16. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/subsurface.py +2 -2
  17. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/surface.py +1 -1
  18. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/quickflat/composite.py +6 -4
  19. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/quickflat/view.py +7 -5
  20. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/segment.py +10 -5
  21. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/svgoverlay.py +1 -1
  22. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_dataset.py +2 -2
  23. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_utils.py +2 -0
  24. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/utils.py +266 -78
  25. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/version.py +2 -2
  26. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/data.py +3 -5
  27. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/datamodel.js +91 -35
  28. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/facepick.js +2 -2
  29. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/mriview.js +72 -21
  30. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/svgoverlay.js +6 -3
  31. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/view.py +185 -89
  32. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/xfm.py +3 -3
  33. {pycortex-1.2.7 → pycortex-1.2.9}/pycortex.egg-info/PKG-INFO +8 -6
  34. {pycortex-1.2.7 → pycortex-1.2.9}/pycortex.egg-info/SOURCES.txt +1 -0
  35. {pycortex-1.2.7 → pycortex-1.2.9}/pycortex.egg-info/requires.txt +1 -1
  36. pycortex-1.2.9/pyproject.toml +11 -0
  37. {pycortex-1.2.7 → pycortex-1.2.9}/requirements.txt +1 -1
  38. pycortex-1.2.7/pyproject.toml +0 -4
  39. {pycortex-1.2.7 → pycortex-1.2.9}/LICENSE +0 -0
  40. {pycortex-1.2.7 → pycortex-1.2.9}/MANIFEST.in +0 -0
  41. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/COMPILING.txt +0 -0
  42. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/LICENSE.txt +0 -0
  43. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/Makefile.linux +0 -0
  44. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/Makefile.macosx +0 -0
  45. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/Makefile.mingw +0 -0
  46. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/Makefile.msvc +0 -0
  47. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/README.txt +0 -0
  48. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/Makefile.linux +0 -0
  49. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/Makefile.macosx +0 -0
  50. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/Makefile.mingw +0 -0
  51. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/Makefile.msvc +0 -0
  52. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/compressMG1.c +0 -0
  53. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/compressMG2.c +0 -0
  54. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/compressRAW.c +0 -0
  55. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/internal.h +0 -0
  56. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/Alloc.c +0 -0
  57. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/Alloc.h +0 -0
  58. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzFind.c +0 -0
  59. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzFind.h +0 -0
  60. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzHash.h +0 -0
  61. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaDec.c +0 -0
  62. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaDec.h +0 -0
  63. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaEnc.c +0 -0
  64. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaEnc.h +0 -0
  65. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaLib.c +0 -0
  66. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/LzmaLib.h +0 -0
  67. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/NameMangle.h +0 -0
  68. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/Types.h +0 -0
  69. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/liblzma/readme.txt +0 -0
  70. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/libopenctm.a +0 -0
  71. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm-mingw1.def +0 -0
  72. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm-mingw2.def +0 -0
  73. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm-msvc.def +0 -0
  74. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm.c +0 -0
  75. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm.h +0 -0
  76. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctm.rc +0 -0
  77. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/openctmpp.h +0 -0
  78. {pycortex-1.2.7 → pycortex-1.2.9}/OpenCTM-1.0.3/lib/stream.c +0 -0
  79. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/__init__.py +0 -0
  80. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/anat.py +0 -0
  81. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/appdirs.py +0 -0
  82. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/bbr.sch +0 -0
  83. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/blender/blendlib.py +0 -0
  84. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/brainctm.py +0 -0
  85. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/__init__.py +0 -0
  86. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/dataset.py +0 -0
  87. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/dataset/view2D.py +0 -0
  88. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/defaults.cfg +0 -0
  89. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/export/__init__.py +0 -0
  90. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/export/_default_params.py +0 -0
  91. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/export/panels.py +0 -0
  92. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/export/save_views.py +0 -0
  93. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/fmriprep.py +0 -0
  94. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/formats.pyx +0 -0
  95. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/formats_old.py +0 -0
  96. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/line.py +0 -0
  97. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/mapper.py +0 -0
  98. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/patch.py +0 -0
  99. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mapper/point.py +0 -0
  100. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mayavi_aligner.py +0 -0
  101. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mni.py +0 -0
  102. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/mp.py +0 -0
  103. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/openctm.pxd +0 -0
  104. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/openctm.pyx +0 -0
  105. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/options.py +0 -0
  106. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/__init__.py +0 -0
  107. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/distortion.py +0 -0
  108. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/exact_geodesic.py +0 -0
  109. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/polyutils/misc.py +0 -0
  110. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/quickflat/__init__.py +0 -0
  111. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/quickflat/utils.py +0 -0
  112. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/rois.py +0 -0
  113. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/surfinfo.py +0 -0
  114. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/svgbase.xml +0 -0
  115. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/testing_utils.py +0 -0
  116. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/__init__.py +0 -0
  117. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_formats.py +0 -0
  118. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_freesurfer.py +0 -0
  119. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_polyutils.py +0 -0
  120. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/tests/test_quickflat.py +0 -0
  121. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/volume.py +0 -0
  122. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/FallbackLoader.py +0 -0
  123. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/__init__.py +0 -0
  124. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/demo.html +0 -0
  125. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/explo_demo.html +0 -0
  126. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/favicon.ico +0 -0
  127. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/htmlembed.py +0 -0
  128. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/mixer.html +0 -0
  129. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/public.html +0 -0
  130. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/demo.css +0 -0
  131. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/colors.png +0 -0
  132. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/control-pause.png +0 -0
  133. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/control-play.png +0 -0
  134. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/loading.gif +0 -0
  135. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/magnifying_glass.png +0 -0
  136. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/trigger.png +0 -0
  137. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  138. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  139. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  140. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  141. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  142. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  143. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  144. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  145. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  146. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-icons_222222_256x240.png +0 -0
  147. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-icons_228ef1_256x240.png +0 -0
  148. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-icons_ef8c08_256x240.png +0 -0
  149. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-icons_ffd27a_256x240.png +0 -0
  150. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/images/ui-icons_ffffff_256x240.png +0 -0
  151. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/jquery-ui.min.css +0 -0
  152. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/jquery.miniColors.css +0 -0
  153. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/jsplot.css +0 -0
  154. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/mriview.css +0 -0
  155. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/select2-4.0.3.min.css +0 -0
  156. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/w2ui-1.2.min.css +0 -0
  157. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/w2ui-1.4.2.css +0 -0
  158. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/css/w2ui-1.4.2.min.css +0 -0
  159. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/cursor.png +0 -0
  160. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/demo.js +0 -0
  161. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/flatten_1.svg +0 -0
  162. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/flatten_2.svg +0 -0
  163. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/intro.js +0 -0
  164. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/intro.svg +0 -0
  165. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/rotate_1.svg +0 -0
  166. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/rotate_2.svg +0 -0
  167. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/swipe_left.svg +0 -0
  168. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/swipe_right.svg +0 -0
  169. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/zoom_1.svg +0 -0
  170. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/explo_demo/zoom_2.svg +0 -0
  171. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/LandscapeControls.js +0 -0
  172. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/OculusRiftEffect.js +0 -0
  173. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/axes3d.js +0 -0
  174. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/canvg.js +0 -0
  175. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/CTMLoader.js +0 -0
  176. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/CTMWorker.js +0 -0
  177. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/ctm.js +0 -0
  178. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/license/OpenCTM.txt +0 -0
  179. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/license/js-lzma.txt +0 -0
  180. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/license/js-openctm.txt +0 -0
  181. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/ctm/lzma.js +0 -0
  182. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/dat.gui.min.js +0 -0
  183. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/dataset.js +0 -0
  184. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/facepick_worker.js +0 -0
  185. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/figure.js +0 -0
  186. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/graphview.js +0 -0
  187. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/hoverintent.min.js +0 -0
  188. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jgestures.min.js +0 -0
  189. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery-2.1.1.min.js +0 -0
  190. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery-ui.min.js +0 -0
  191. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery.ddslick.min.js +0 -0
  192. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery.miniColors.js +0 -0
  193. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery.svg.min.js +0 -0
  194. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery.svganim.min.js +0 -0
  195. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/jquery.ui.touch-punch.min.js +0 -0
  196. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/kdTree-min.js +0 -0
  197. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/leap-0.6.4.js +0 -0
  198. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/leap.js +0 -0
  199. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/menu.js +0 -0
  200. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/movement.js +0 -0
  201. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/mriview_surface.js +0 -0
  202. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/mriview_utils.js +0 -0
  203. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/python_interface.js +0 -0
  204. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/rgbcolor.js +0 -0
  205. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/select2-4.0.3.min.js +0 -0
  206. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/shaderlib.js +0 -0
  207. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/shadowtex.js +0 -0
  208. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/sliceplane.js +0 -0
  209. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/surfgeometry.js +0 -0
  210. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/surfload.js +0 -0
  211. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/svg_todataurl.js +0 -0
  212. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/three.js +0 -0
  213. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/w2ui-1.2.min.js +0 -0
  214. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/w2ui-1.4.2.js +0 -0
  215. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/js/w2ui-1.4.2.min.js +0 -0
  216. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/json/wngraph-definitions.json +0 -0
  217. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/json/wngraph-nodenames.json +0 -0
  218. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/json/wngraph-rgbcolors.json +0 -0
  219. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/resources/json/wngraph-testvoxwts.json +0 -0
  220. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/serve.py +0 -0
  221. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/simple.html +0 -0
  222. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/static.html +0 -0
  223. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/template.html +0 -0
  224. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/wngraph-labeled.svg +0 -0
  225. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/wngraph-minimal.html +0 -0
  226. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/wngraph.html +0 -0
  227. {pycortex-1.2.7 → pycortex-1.2.9}/cortex/webgl/wngraph.svg +0 -0
  228. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Accent.png +0 -0
  229. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Accent_r.png +0 -0
  230. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BPROG.png +0 -0
  231. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BROYG.png +0 -0
  232. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BROYG_2D.png +0 -0
  233. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Blues.png +0 -0
  234. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Blues_r.png +0 -0
  235. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BrBG.png +0 -0
  236. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BrBG_r.png +0 -0
  237. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuBkRd.png +0 -0
  238. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuBkRd_alpha_2D.png +0 -0
  239. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuGn.png +0 -0
  240. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuGn_r.png +0 -0
  241. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuOr_2D.png +0 -0
  242. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuPu.png +0 -0
  243. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuPu_r.png +0 -0
  244. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuWtRd.png +0 -0
  245. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuWtRd_alpha.png +0 -0
  246. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/BuWtRd_black_2D.png +0 -0
  247. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/CyanBlueGrayRedPink.png +0 -0
  248. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Dark2.png +0 -0
  249. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Dark2_r.png +0 -0
  250. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GnBu.png +0 -0
  251. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GnBu_r.png +0 -0
  252. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GreenWhiteBlue.png +0 -0
  253. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GreenWhiteBlue_2D.png +0 -0
  254. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GreenWhiteRed.png +0 -0
  255. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/GreenWhiteRed_2D.png +0 -0
  256. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Greens.png +0 -0
  257. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Greens_r.png +0 -0
  258. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Greys.png +0 -0
  259. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Greys_r.png +0 -0
  260. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J4.png +0 -0
  261. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J4R.png +0 -0
  262. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J4s.png +0 -0
  263. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J5.png +0 -0
  264. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J5R.png +0 -0
  265. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J6.png +0 -0
  266. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/J6R.png +0 -0
  267. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/OrRd.png +0 -0
  268. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/OrRd_r.png +0 -0
  269. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Oranges.png +0 -0
  270. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Oranges_r.png +0 -0
  271. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PRGn.png +0 -0
  272. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PRGn_r.png +0 -0
  273. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_BuOr_covar.png +0 -0
  274. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_BuOr_covar_alpha.png +0 -0
  275. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_PinkBlue_covar.png +0 -0
  276. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_RdBu_covar.png +0 -0
  277. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_RdBu_covar_alpha.png +0 -0
  278. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PU_RdGn_covar.png +0 -0
  279. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Paired.png +0 -0
  280. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Paired_r.png +0 -0
  281. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Pastel1.png +0 -0
  282. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Pastel1_r.png +0 -0
  283. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Pastel2.png +0 -0
  284. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Pastel2_r.png +0 -0
  285. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PiYG.png +0 -0
  286. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PiYG_r.png +0 -0
  287. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuBu.png +0 -0
  288. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuBuGn.png +0 -0
  289. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuBuGn_r.png +0 -0
  290. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuBu_r.png +0 -0
  291. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuOr.png +0 -0
  292. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuOr_r.png +0 -0
  293. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuRd.png +0 -0
  294. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/PuRd_r.png +0 -0
  295. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Purples.png +0 -0
  296. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Purples_r.png +0 -0
  297. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RGrB_tsi.png +0 -0
  298. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu.png +0 -0
  299. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_2D.png +0 -0
  300. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_2D_r.png +0 -0
  301. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_covar.png +0 -0
  302. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_covar2.png +0 -0
  303. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_covar_alpha.png +0 -0
  304. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_r.png +0 -0
  305. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdBu_r_alpha.png +0 -0
  306. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdGn_covar.png +0 -0
  307. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdGy.png +0 -0
  308. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdGy_r.png +0 -0
  309. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdPu.png +0 -0
  310. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdPu_r.png +0 -0
  311. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdYlBu.png +0 -0
  312. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdYlBu_r.png +0 -0
  313. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdYlGn.png +0 -0
  314. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/RdYlGn_r.png +0 -0
  315. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Reds.png +0 -0
  316. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Reds_cov.png +0 -0
  317. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Reds_r.png +0 -0
  318. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Retinotopy_RYBCR.png +0 -0
  319. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Retinotopy_RYBCR_2D.png +0 -0
  320. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Retinotopy_RYBCR_alpha.png +0 -0
  321. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set1.png +0 -0
  322. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set1_r.png +0 -0
  323. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set2.png +0 -0
  324. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set2_r.png +0 -0
  325. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set3.png +0 -0
  326. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Set3_r.png +0 -0
  327. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Spectral.png +0 -0
  328. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/Spectral_r.png +0 -0
  329. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlGn.png +0 -0
  330. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlGnBu.png +0 -0
  331. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlGnBu_r.png +0 -0
  332. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlGn_r.png +0 -0
  333. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlOrBr.png +0 -0
  334. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlOrBr_r.png +0 -0
  335. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlOrRd.png +0 -0
  336. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/YlOrRd_r.png +0 -0
  337. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/afmhot.png +0 -0
  338. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/afmhot_r.png +0 -0
  339. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumn.png +0 -0
  340. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumn_alpha.png +0 -0
  341. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumn_blkmin.png +0 -0
  342. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumn_blkmin_alpha_2D.png +0 -0
  343. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumn_r.png +0 -0
  344. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumnblack.png +0 -0
  345. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/autumnblack_alpha_2D.png +0 -0
  346. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/binary.png +0 -0
  347. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/binary_r.png +0 -0
  348. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/bone.png +0 -0
  349. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/bone_r.png +0 -0
  350. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/brg.png +0 -0
  351. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/brg_r.png +0 -0
  352. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/bwr.png +0 -0
  353. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/bwr_r.png +0 -0
  354. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/cool.png +0 -0
  355. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/cool_r.png +0 -0
  356. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/coolwarm.png +0 -0
  357. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/coolwarm_r.png +0 -0
  358. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/copper.png +0 -0
  359. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/copper_r.png +0 -0
  360. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/cubehelix.png +0 -0
  361. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/cubehelix_r.png +0 -0
  362. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/fire.png +0 -0
  363. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/fire_alpha.png +0 -0
  364. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/flag.png +0 -0
  365. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/flag_r.png +0 -0
  366. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/freesurfer_aseg_256.png +0 -0
  367. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_earth.png +0 -0
  368. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_earth_r.png +0 -0
  369. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_gray.png +0 -0
  370. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_gray_r.png +0 -0
  371. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_heat.png +0 -0
  372. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_heat_r.png +0 -0
  373. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_ncar.png +0 -0
  374. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_ncar_r.png +0 -0
  375. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_rainbow.png +0 -0
  376. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_rainbow_r.png +0 -0
  377. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_stern.png +0 -0
  378. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_stern_r.png +0 -0
  379. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_yarg.png +0 -0
  380. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gist_yarg_r.png +0 -0
  381. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gnuplot.png +0 -0
  382. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gnuplot2.png +0 -0
  383. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gnuplot2_r.png +0 -0
  384. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gnuplot_r.png +0 -0
  385. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gray.png +0 -0
  386. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/gray_r.png +0 -0
  387. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/hot.png +0 -0
  388. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/hot_alpha.png +0 -0
  389. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/hot_r.png +0 -0
  390. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/hsv.png +0 -0
  391. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/hsv_r.png +0 -0
  392. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/inferno.png +0 -0
  393. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/inferno_r.png +0 -0
  394. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/jet.png +0 -0
  395. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/jet_r.png +0 -0
  396. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/magma.png +0 -0
  397. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/magma_r.png +0 -0
  398. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/nipy_spectral.png +0 -0
  399. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/nipy_spectral_r.png +0 -0
  400. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/ocean.png +0 -0
  401. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/ocean_r.png +0 -0
  402. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/pink.png +0 -0
  403. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/pink_r.png +0 -0
  404. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/plasma.png +0 -0
  405. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/plasma_alpha.png +0 -0
  406. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/plasma_r.png +0 -0
  407. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/prism.png +0 -0
  408. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/prism_r.png +0 -0
  409. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/rainbow.png +0 -0
  410. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/rainbow_r.png +0 -0
  411. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/seismic.png +0 -0
  412. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/seismic_r.png +0 -0
  413. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/spectral.png +0 -0
  414. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/spectral_r.png +0 -0
  415. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/spring.png +0 -0
  416. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/spring_r.png +0 -0
  417. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/summer.png +0 -0
  418. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/summer_r.png +0 -0
  419. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/terrain.png +0 -0
  420. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/terrain_r.png +0 -0
  421. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/viridis.png +0 -0
  422. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/viridis_r.png +0 -0
  423. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/winter.png +0 -0
  424. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/colormaps/winter_r.png +0 -0
  425. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/anatomicals/raw.nii.gz +0 -0
  426. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/overlays.svg +0 -0
  427. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/flat_lh.gii +0 -0
  428. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/flat_rh.gii +0 -0
  429. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/inflated_lh.gii +0 -0
  430. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/inflated_rh.gii +0 -0
  431. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/pia_lh.gii +0 -0
  432. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/pia_rh.gii +0 -0
  433. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/wm_lh.gii +0 -0
  434. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/surfaces/wm_rh.gii +0 -0
  435. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/transforms/fullhead/matrices.xfm +0 -0
  436. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/transforms/fullhead/reference.nii.gz +0 -0
  437. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/transforms/retinotopy/matrices.xfm +0 -0
  438. {pycortex-1.2.7 → pycortex-1.2.9}/filestore/db/S1/transforms/retinotopy/reference.nii.gz +0 -0
  439. {pycortex-1.2.7 → pycortex-1.2.9}/pycortex.egg-info/dependency_links.txt +0 -0
  440. {pycortex-1.2.7 → pycortex-1.2.9}/pycortex.egg-info/top_level.txt +0 -0
  441. {pycortex-1.2.7 → pycortex-1.2.9}/setup.cfg +0 -0
  442. {pycortex-1.2.7 → pycortex-1.2.9}/setup.py +0 -0
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycortex
3
- Version: 1.2.7
3
+ Version: 1.2.9
4
4
  Summary: Python Cortical mapping software for fMRI data
5
5
  Home-page: http://gallantlab.github.io/pycortex
6
- Download-URL: http://gallantlab.github.io/pycortex
7
6
  Author: James Gao
8
7
  Author-email: james@jamesgao.com
9
8
  License: 2-clause BSD license
9
+ Download-URL: http://gallantlab.github.io/pycortex
10
+ Platform: UNKNOWN
10
11
  Classifier: Development Status :: 6 - Mature
11
12
  Classifier: Intended Audience :: Science/Research
12
13
  Classifier: License :: OSI Approved :: BSD License
@@ -30,6 +31,10 @@ Pycortex is a software library that allows you to visualize fMRI or other volume
30
31
 
31
32
  Installation
32
33
  ------------
34
+
35
+ > [!NOTE]
36
+ > Pycortex cannot be currently installed in Windows, only Linux and macOS are supported.
37
+
33
38
  To install the stable release version of pycortex, do the following:
34
39
 
35
40
  ```bash
@@ -88,7 +93,4 @@ If you use pycortex in published work, please cite the [pycortex paper](http://d
88
93
 
89
94
  _Gao JS, Huth AG, Lescroart MD and Gallant JL (2015) Pycortex: an interactive surface visualizer for fMRI. Front. Neuroinform. 9:23. doi: 10.3389/fninf.2015.00023_
90
95
 
91
- Getting help
92
- ------------
93
- Please post on [NeuroStars](https://neurostars.org/) with the tag `pycortex` to
94
- ask questions about how to use Pycortex.
96
+
@@ -11,6 +11,10 @@ Pycortex is a software library that allows you to visualize fMRI or other volume
11
11
 
12
12
  Installation
13
13
  ------------
14
+
15
+ > [!NOTE]
16
+ > Pycortex cannot be currently installed in Windows, only Linux and macOS are supported.
17
+
14
18
  To install the stable release version of pycortex, do the following:
15
19
 
16
20
  ```bash
@@ -68,8 +72,3 @@ Citation
68
72
  If you use pycortex in published work, please cite the [pycortex paper](http://dx.doi.org/10.3389/fninf.2015.00023):
69
73
 
70
74
  _Gao JS, Huth AG, Lescroart MD and Gallant JL (2015) Pycortex: an interactive surface visualizer for fMRI. Front. Neuroinform. 9:23. doi: 10.3389/fninf.2015.00023_
71
-
72
- Getting help
73
- ------------
74
- Please post on [NeuroStars](https://neurostars.org/) with the tag `pycortex` to
75
- ask questions about how to use Pycortex.
@@ -1,9 +1,18 @@
1
1
  """Contains functions for making alignments between functional data and the surface, or, finding where the brain is.
2
2
  """
3
3
  import os
4
- import numpy as np
5
- from builtins import input
4
+ import shutil
5
+ import subprocess as sp
6
+ import tempfile
6
7
  import warnings
8
+ from builtins import input
9
+
10
+ import numpy as np
11
+
12
+ from .database import db
13
+ from .options import config
14
+ from .xfm import Transform
15
+
7
16
 
8
17
  def mayavi_manual(subject, xfmname, reference=None, **kwargs):
9
18
  """Open GUI for manually aligning a functional volume to the cortical surface for `subject`. This
@@ -155,11 +164,12 @@ def manual(subject, xfmname, output_name="register.lta", wm_color="yellow",
155
164
  Nothing unless noclean is true.
156
165
  """
157
166
 
167
+ import shutil
158
168
  import subprocess as sp
159
169
  import tempfile
160
- import shutil
161
- from .xfm import Transform
170
+
162
171
  from .database import db
172
+ from .xfm import Transform
163
173
 
164
174
  retval = None
165
175
 
@@ -235,120 +245,227 @@ def manual(subject, xfmname, output_name="register.lta", wm_color="yellow",
235
245
  return retval
236
246
 
237
247
 
238
- def automatic(subject, xfmname, reference, noclean=False, bbrtype="signed",
239
- pre_flirt_args='', use_fs_bbr=True, epi_mask=False, intermediate=None):
240
- """Create an automatic alignment using the FLIRT boundary-based alignment (BBR) from FSL.
248
+ def automatic_fsl(
249
+ subject, xfmname, reference, noclean=False, bbrtype="signed", pre_flirt_args=""
250
+ ):
251
+ """Perform automatic alignment using the FLIRT boundary-based alignment (BBR) from
252
+ FSL. The `reference` image and resulting transform called `xfmname` will be
253
+ automatically stored in the database.
241
254
 
242
- If `noclean`, intermediate files will not be removed from /tmp. The `reference` image and resulting
243
- transform called `xfmname` will be automatically stored in the database.
255
+ If `noclean` is set to True, intermediate files will not be removed from /tmp.
244
256
 
245
- It's good practice to open up this transform afterward in the manual aligner and check how it worked.
246
- Do that using the following (with the same `subject` and `xfmname` used here, no need for `reference`):
247
- > align.manual(subject, xfmname)
257
+ It's good practice to open up this transform afterward in the manual aligner and
258
+ check how it worked. Do that using the following code (passing the same `subject`
259
+ and `xfmname` used here, no need for `reference`):
248
260
 
249
- If automatic alignment gives you a very bad answer, you can try giving the pre-BBR FLIRT
250
- some hints by passing '-usesqform' in as `pre_flirt_args`.
261
+ > cortex.align.manual(subject, xfmname)
262
+
263
+ If automatic alignment with FSL fails, you can try giving the pre-BBR FLIRT
264
+ some hints by passing '-usesqform' in as `pre_flirt_args`. Alternatively, you can
265
+ use `cortex.align.automatic` to use Freesurfer's bbregister, which tends to work
266
+ better than FSL.
251
267
 
252
268
  Parameters
253
269
  ----------
254
270
  subject : str
255
271
  Subject identifier.
256
272
  xfmname : str
257
- String identifying the transform to be created.
273
+ Name of the transform to be created and stored in the database.
258
274
  reference : str
259
- Path to a nibabel-readable image that will be used as the reference for this transform.
260
- Usually, this is a single (3D) functional data volume.
275
+ Path to a nibabel-readable image that will be used as the reference for
276
+ this transform. Usually, this is a single (3D) functional data volume.
261
277
  noclean : bool, optional
262
- If True intermediate files will not be removed from /tmp (this is useful for debugging things),
263
- and the returned value will be the name of the temp directory. Default False.
278
+ If True, intermediate files will not be removed from /tmp (this is useful
279
+ for debugging things), and the returned value will be the name of the
280
+ temp directory. Default False.
264
281
  bbrtype : str, optional
265
282
  The 'bbrtype' argument that is passed to FLIRT.
266
283
  pre_flirt_args : str, optional
267
284
  Additional arguments that are passed to the FLIRT pre-alignment step (not BBR).
268
- use_fs_bbr : bool, optional
269
- If True will use freesurfer bbregister instead of FSL BBR. (default, True)
270
- epi_mask : bool, optional
271
- If True, and use_fs_bbr is True, then the flag --epi-mask is passed to bbregister
272
- to mask out areas with spatial distortions. This setting is to be used whenever
273
- the reference was not distortion corrected.
274
- intermediate : str
275
- Path to a nibabel-readable image that will be used as intermediate for the alignment.
276
- Usually, this is a single (3D) functional data volume.
277
285
 
278
286
  Returns
279
287
  -------
280
- Nothing unless `noclean` is True.
288
+ None or path to temp directory if `noclean` is True.
281
289
  """
282
- warnings.warn("Defaults changed in pycortex 1.3. Now automatic alignment "
283
- "uses Freesurfer's bbregister and mri_coreg for "
284
- "initialization.")
285
- import shlex
286
- import shutil
287
- import tempfile
288
- import subprocess as sp
289
-
290
- from .database import db
291
- from .xfm import Transform
292
- from .options import config
293
-
294
- fsl_prefix = config.get("basic", "fsl_prefix")
295
- schfile = os.path.join(os.path.split(os.path.abspath(__file__))[0], "bbr.sch")
296
-
297
290
  retval = None
298
291
  try:
299
292
  cache = tempfile.mkdtemp()
300
293
  absreference = os.path.abspath(reference)
294
+ fsl_prefix = config.get("basic", "fsl_prefix")
295
+ schfile = os.path.join(os.path.split(os.path.abspath(__file__))[0], "bbr.sch")
296
+ raw = db.get_anat(subject, type="raw").get_filename()
297
+ bet = db.get_anat(subject, type="brainmask").get_filename()
298
+ wmseg = db.get_anat(subject, type="whitematter").get_filename()
299
+ # Compute anatomical-to-epi transform
300
+ print("FLIRT pre-alignment")
301
+ cmd = (
302
+ "{fslpre}flirt -in {epi} -ref {bet} -dof 6 {pre_flirt_args} "
303
+ "-omat {cache}/init.mat"
304
+ )
305
+ cmd = cmd.format(
306
+ fslpre=fsl_prefix,
307
+ cache=cache,
308
+ epi=absreference,
309
+ bet=bet,
310
+ pre_flirt_args=pre_flirt_args,
311
+ )
312
+ if sp.call(cmd, shell=True) != 0:
313
+ raise IOError("Error calling initial FLIRT")
314
+
315
+ print("Running BBR")
316
+ # Run epi-to-anat transform (this is more stable than anat-to-epi in FSL!)
317
+ cmd = (
318
+ "{fslpre}flirt -in {epi} -ref {raw} -dof 6 -cost bbr -wmseg {wmseg} "
319
+ "-init {cache}/init.mat -omat {cache}/out.mat -schedule {schfile} "
320
+ "-bbrtype {bbrtype}"
321
+ )
322
+ cmd = cmd.format(
323
+ fslpre=fsl_prefix,
324
+ cache=cache,
325
+ raw=bet,
326
+ wmseg=wmseg,
327
+ epi=absreference,
328
+ schfile=schfile,
329
+ bbrtype=bbrtype,
330
+ )
331
+ if sp.call(cmd, shell=True) != 0:
332
+ raise IOError("Error calling BBR flirt")
301
333
 
302
- if use_fs_bbr:
303
- print('Running freesurfer BBR')
304
- cmd = 'bbregister --s {sub} --mov {absref} --init-coreg --reg {cache}/register.dat --t2'
305
- if epi_mask:
306
- cmd += ' --epi-mask'
307
- if intermediate is not None:
308
- cmd += f' --int {intermediate}'
309
- cmd = cmd.format(sub=subject, absref=absreference, cache=cache)
310
-
311
- if sp.call(cmd, shell=True) != 0:
312
- raise IOError('Error calling freesurfer BBR!')
334
+ x = np.loadtxt(os.path.join(cache, "out.mat"))
335
+ # Pass transform as FROM epi TO anat; transform will be inverted
336
+ # back to anat-to-epi, standard direction for pycortex internal
337
+ # storage by from_fsl
338
+ xfm = Transform.from_fsl(x, absreference, raw)
339
+ xfm.save(subject, xfmname, "coord")
340
+ print("Success")
313
341
 
314
- xfm = Transform.from_freesurfer(os.path.join(cache, "register.dat"), absreference, subject)
342
+ finally:
343
+ if not noclean:
344
+ shutil.rmtree(cache)
315
345
  else:
316
- raw = db.get_anat(subject, type='raw').get_filename()
317
- bet = db.get_anat(subject, type='brainmask').get_filename()
318
- wmseg = db.get_anat(subject, type='whitematter').get_filename()
319
- #Compute anatomical-to-epi transform
320
- print('FLIRT pre-alignment')
321
- cmd = '{fslpre}flirt -in {epi} -ref {bet} -dof 6 {pre_flirt_args} -omat {cache}/init.mat'.format(
322
- fslpre=fsl_prefix, cache=cache, epi=absreference, bet=bet, pre_flirt_args=pre_flirt_args)
323
- if sp.call(cmd, shell=True) != 0:
324
- raise IOError('Error calling initial FLIRT')
325
-
326
-
327
- print('Running BBR')
328
- # Run epi-to-anat transform (this is more stable than anat-to-epi in FSL!)
329
- cmd = '{fslpre}flirt -in {epi} -ref {raw} -dof 6 -cost bbr -wmseg {wmseg} -init {cache}/init.mat -omat {cache}/out.mat -schedule {schfile} -bbrtype {bbrtype}'
330
- cmd = cmd.format(fslpre=fsl_prefix, cache=cache, raw=bet, wmseg=wmseg, epi=absreference, schfile=schfile, bbrtype=bbrtype)
331
- if sp.call(cmd, shell=True) != 0:
332
- raise IOError('Error calling BBR flirt')
333
-
334
- x = np.loadtxt(os.path.join(cache, "out.mat"))
335
- # Pass transform as FROM epi TO anat; transform will be inverted
336
- # back to anat-to-epi, standard direction for pycortex internal
337
- # storage by from_fsl
338
- xfm = Transform.from_fsl(x,absreference,raw)
346
+ retval = cache
347
+ return retval
339
348
 
340
- # Save as pycortex 'coord' transform
341
- xfm.save(subject,xfmname,'coord')
342
- print('Success')
343
349
 
350
+ def automatic(
351
+ subject,
352
+ xfmname,
353
+ reference,
354
+ init="coreg",
355
+ epi_mask=False,
356
+ intermediate=None,
357
+ reference_contrast="t2",
358
+ noclean=False,
359
+ ):
360
+ """Perform automatic alignment using Freesurfer's boundary-based registration.
361
+ The `reference` image and resulting transform called `xfmname` will be automatically
362
+ stored in the database.
363
+
364
+ If `noclean` is set to True, intermediate files will not be removed from /tmp.
365
+
366
+ It's good practice to open up this transform afterward in the manual aligner and
367
+ check how it worked. Do that using the following code (passing the same `subject`
368
+ and `xfmname` used here, no need for `reference`):
369
+
370
+ > cortex.align.manual(subject, xfmname)
371
+
372
+ Parameters
373
+ ----------
374
+ subject : str
375
+ Subject identifier.
376
+ xfmname : str
377
+ Name of the transform to be created and stored in the database.
378
+ reference : str
379
+ Path to a nibabel-readable image that will be used as the reference for
380
+ this transform. Usually, this is a single (3D) functional data volume.
381
+ init : str, optional
382
+ One of "coreg", "fsl", "header", or a path to a transform from the reference
383
+ volume to the anatomical volume.
384
+ Specifies the initialization method to obtain a first alignment that will be
385
+ refined with bbregister. Default is "coreg", which uses Freesurfer's `mri_coreg`
386
+ and it generally performs best. Other options include "fsl" to use FSL's FLIRT
387
+ or "header" to assume that the reference and the anatomical are already close
388
+ enough (this option can be used when the reference and the anatomical are
389
+ acquired in the same session). Finally, you can also specify a path to a
390
+ transform file (in DAT or LTA format) that will be used as initialization.
391
+ epi_mask : bool, optional
392
+ If True, then the flag --epi-mask is passed to bbregister to mask out areas
393
+ with spatial distortions. This setting recommended whenever the reference was
394
+ not distortion corrected.
395
+ intermediate : str
396
+ Path to a nibabel-readable image that will be used as intermediate volume
397
+ for alignment. This is useful if the reference image has a small field-of-view
398
+ and a whole-brain image was acquired in the same session.
399
+ reference_contrast : str
400
+ Contrast of the reference image. This is used to determine the appropriate
401
+ contrast for the reference image in the bbregister command. Default is "t2"
402
+ (for BOLD): gray matter is brighter than white matter.
403
+ The alternative option is "t1": white matter is brighter than gray matter.
404
+ noclean : bool, optional
405
+ If True, intermediate files will not be removed from /tmp (this is useful
406
+ for debugging things), and the returned value will be the name of the
407
+ temp directory. Default False.
408
+
409
+ Returns
410
+ -------
411
+ None or path to temp directory if `noclean` is True.
412
+ """
413
+ warnings.warn(
414
+ "Defaults changed in pycortex 1.2.8. Now automatic alignment uses Freesurfer's "
415
+ "bbregister and mri_coreg for initialization. If you want to use FSL's BBR, "
416
+ "use the function `cortex.align.automatic_fsl` instead."
417
+ )
418
+
419
+ retval = None
420
+ try:
421
+ cache = tempfile.mkdtemp()
422
+ reference = os.path.abspath(reference)
423
+ print("Running freesurfer BBR")
424
+ # Start building the command
425
+ cmd = f"bbregister --s {subject} --mov {reference} --reg {cache}/register.dat "
426
+ cmd += f"--{reference_contrast}"
427
+ if init in ["coreg", "fsl", "header"]:
428
+ cmd += f" --init-{init}"
429
+ else:
430
+ init = os.path.abspath(init)
431
+ cmd += f" --init-reg {init}"
432
+ if epi_mask:
433
+ cmd += " --epi-mask"
434
+ if intermediate is not None:
435
+ intermediate = os.path.abspath(intermediate)
436
+ cmd += f" --int {intermediate}"
437
+ cmd = cmd.format(sub=subject, absref=reference, cache=cache)
438
+
439
+ if sp.call(cmd.split()) != 0:
440
+ raise IOError("Error calling freesurfer BBR!")
441
+
442
+ xfm = Transform.from_freesurfer(
443
+ os.path.join(cache, "register.dat"), reference, subject
444
+ )
445
+ # Save as pycortex 'coord' transform
446
+ xfm.save(subject, xfmname, "coord")
447
+ # Load mincost to provide some information
448
+ # The four values stored in .mincost are
449
+ # 1. quality of the registration (0 to 1, with 0 is perfect)
450
+ # 2. mean of WM just below the surface
451
+ # 3. mean of GM just above the surface
452
+ # 4. percent contrast
453
+ # https://surfer.nmr.mgh.harvard.edu/fswiki/MultiModalTutorialV6.0/MultiModalRegistration
454
+ # Let's return only the quality of the registration
455
+ mincost = np.loadtxt(os.path.join(cache, "register.dat.mincost"))
456
+ print(
457
+ f"bbregister finished with a mincost of {mincost[0]:.2f}\n"
458
+ "Values between 0 and 0.5 indicate a good registration.\n"
459
+ "But you should manually inspect the alignment anyway."
460
+ )
344
461
  finally:
345
462
  if not noclean:
346
463
  shutil.rmtree(cache)
347
464
  else:
348
465
  retval = cache
349
-
350
466
  return retval
351
467
 
468
+
352
469
  def autotweak(subject, xfmname):
353
470
  """Tweak an alignment using the FLIRT boundary-based alignment (BBR) from FSL.
354
471
  Ideally this function should actually use a limited search range, but it doesn't.
@@ -363,12 +480,12 @@ def autotweak(subject, xfmname):
363
480
  """
364
481
  import shlex
365
482
  import shutil
366
- import tempfile
367
483
  import subprocess as sp
484
+ import tempfile
368
485
 
369
486
  from .database import db
370
- from .xfm import Transform
371
487
  from .options import config
488
+ from .xfm import Transform
372
489
 
373
490
  fsl_prefix = config.get("basic", "fsl_prefix")
374
491
  schfile = os.path.join(os.path.split(os.path.abspath(__file__))[0], "bbr.sch")
@@ -60,7 +60,7 @@ def _check_file_blender_version(fpath):
60
60
  import struct
61
61
  with open(fpath, mode='rb') as fid:
62
62
  fid.seek(7)
63
- bitness, endianess, major, minor = struct.unpack("sss2s", fid.read(5))
63
+ bitness, endianness, major, minor = struct.unpack("sss2s", fid.read(5))
64
64
  return (int(major), int(minor))
65
65
 
66
66
 
@@ -1,18 +1,19 @@
1
1
  """
2
2
  Contains a singleton object `db` of type `Database` which allows easy access to surface files, anatomical images, and transforms that are stored in the pycortex filestore.
3
3
  """
4
- import os
5
- import re
6
4
  import copy
5
+ import functools
7
6
  import glob
8
7
  import json
8
+ import os
9
+ import re
9
10
  import shutil
10
- import warnings
11
11
  import tempfile
12
- import functools
13
- import numpy as np
14
- from hashlib import sha1
12
+ import warnings
15
13
  from builtins import input
14
+ from hashlib import sha1
15
+
16
+ import numpy as np
16
17
 
17
18
  from . import options
18
19
 
@@ -104,7 +105,8 @@ class XfmDB(object):
104
105
  raise AttributeError
105
106
 
106
107
  def __repr__(self):
107
- return "Transforms: [{xfms}]".format(xfms=",".join(self.xfms))
108
+ xfms = "\n".join(sorted(self.xfms))
109
+ return f"Available transforms for {self.subject}:\n{xfms}"
108
110
 
109
111
  class XfmSet(object):
110
112
  def __init__(self, subj, name, filestore=default_filestore):
@@ -177,6 +179,7 @@ class Database(object):
177
179
  return self._subjects
178
180
  subjs = os.listdir(os.path.join(self.filestore))
179
181
  subjs = [s for s in subjs if os.path.isdir(os.path.join(self.filestore, s))]
182
+ subjs = sorted(subjs)
180
183
  self._subjects = dict([(sname, SubjectDB(sname, filestore=self.filestore)) for sname in subjs])
181
184
  return self._subjects
182
185
 
@@ -225,7 +228,7 @@ class Database(object):
225
228
  return volume.anat2epispace(anatnib.get_fdata().T.astype(float), subject, xfmname, order=order)
226
229
 
227
230
  def get_surfinfo(self, subject, type="curvature", recache=False, **kwargs):
228
- """Return auxillary surface information from the filestore. Surface info is defined as
231
+ """Return auxiliary surface information from the filestore. Surface info is defined as
229
232
  anatomical information specific to a subject in surface space. A Vertex class will be returned
230
233
  as necessary. Info not found in the filestore will be automatically generated.
231
234
 
@@ -318,8 +321,12 @@ class Database(object):
318
321
  from .utils import load_sparse_array, save_sparse_array
319
322
  if fs_subj is None:
320
323
  fs_subj = subject
321
- fpath = self.get_paths(subject)['surf2surf'].format(source=fs_subj, target=target_subj)
322
- # Backward compatiblity
324
+ fpath = self.get_paths(subject)['surf2surf'].format(
325
+ source=fs_subj,
326
+ target=target_subj,
327
+ surface_type=surface_type
328
+ )
329
+ # Backward compatibility
323
330
  fdir, _ = os.path.split(fpath)
324
331
  if not os.path.exists(fdir):
325
332
  print("Creating surf2surf directory for subject %s"%(subject))
@@ -344,7 +351,7 @@ class Database(object):
344
351
  pts, polys = self.get_surf(subject, "flat", merge=True, nudge=True)
345
352
 
346
353
  paths = self.get_paths(subject)
347
- # NOTE: This try loop is broken, in that it does nothing for the inteded
354
+ # NOTE: This try loop is broken, in that it does nothing for the intended
348
355
  # use case (loading an overlay from a packed subject) - needs fixing.
349
356
  # This hasn't come up yet due to very rare use of packed subjects.
350
357
  if self.auxfile is not None:
@@ -686,7 +693,7 @@ class Database(object):
686
693
  rois=os.path.join(self.filestore, subject, "rois.svg").format(subj=subject),
687
694
  overlays=os.path.join(self.filestore, subject, "overlays.svg").format(subj=subject),
688
695
  views=sorted([os.path.splitext(f)[0] for f in views]),
689
- surf2surf=os.path.join(self.filestore, subject, "surf2surf", "{source}_to_{target}", "matrices.hdf"),
696
+ surf2surf=os.path.join(self.filestore, subject, "surf2surf", "{source}_to_{target}", "matrices_{surface_type}.hdf"),
690
697
  )
691
698
 
692
699
  return filenames
@@ -1,10 +1,12 @@
1
1
  import hashlib
2
2
  from copy import deepcopy
3
- import numpy as np
3
+
4
4
  import h5py
5
+ import numpy as np
5
6
 
6
7
  from ..database import db
7
8
 
9
+
8
10
  class BrainData(object):
9
11
  """
10
12
  Abstract base class for brain data.
@@ -592,9 +594,10 @@ class VertexData(BrainData):
592
594
 
593
595
 
594
596
  def _find_mask(nvox, subject, xfmname):
597
+ import glob
595
598
  import os
596
599
  import re
597
- import glob
600
+
598
601
  import nibabel
599
602
  files = db.get_paths(subject)['masks'].format(xfmname=xfmname, type="*")
600
603
  for fname in glob.glob(files):
@@ -602,7 +605,7 @@ def _find_mask(nvox, subject, xfmname):
602
605
  mask = nib.get_fdata().T != 0
603
606
  if nvox == np.sum(mask):
604
607
  fname = os.path.split(fname)[1]
605
- name = re.compile(r'mask_([\w]+).nii.gz').search(fname)
608
+ name = re.compile(r'mask_(.+).nii.gz').search(fname)
606
609
  return name.group(1), mask
607
610
 
608
611
  raise ValueError('Cannot find a valid mask')
@@ -179,7 +179,7 @@ class VolumeRGB(DataviewRGB):
179
179
  Use the same vmin and vmax for all three color channels?
180
180
  shared_vmin : float, optional
181
181
  Predetermined shared vmin. Does nothing if shared_range == False. If not given,
182
- will be the 1st percentil of all values across all three channels.
182
+ will be the 1st percentile of all values across all three channels.
183
183
  shared_vmax : float, optional
184
184
  Predetermined shared vmax. Does nothing if shared_range == False. If not given,
185
185
  will be the 99th percentile of all values across all three channels
@@ -1,14 +1,23 @@
1
- import os
2
1
  import glob
3
2
  import json
3
+ import os
4
+
4
5
  import h5py
5
6
  import numpy as np
6
7
 
7
8
  from .. import options
8
- from .braindata import BrainData, VolumeData, VertexData
9
+ from .braindata import BrainData, VertexData, VolumeData
9
10
 
10
11
  default_cmap = options.config.get("basic", "default_cmap")
11
12
 
13
+ # register_cmap is deprecated in matplotlib > 3.7.0 and replaced by colormaps.register
14
+ try:
15
+ from matplotlib import colormaps as cm
16
+ def register_cmap(cmap):
17
+ return cm.register(cmap)
18
+ except ImportError:
19
+ from matplotlib.cm import register_cmap
20
+
12
21
 
13
22
  def normalize(data):
14
23
  if isinstance(data, tuple):
@@ -193,7 +202,8 @@ class Dataview(object):
193
202
  def get_cmapdict(self):
194
203
  """Returns a dictionary with cmap information."""
195
204
 
196
- from matplotlib import colors, pyplot as plt
205
+ from matplotlib import colors
206
+ from matplotlib import pyplot as plt
197
207
 
198
208
  try:
199
209
  # plt.get_cmap accepts:
@@ -206,18 +216,19 @@ class Dataview(object):
206
216
  cmapdir = options.config.get('webgl', 'colormaps')
207
217
  colormaps = glob.glob(os.path.join(cmapdir, "*.png"))
208
218
  colormaps = dict(((os.path.split(c)[1][:-4], c) for c in colormaps))
209
- if not self.cmap in colormaps:
219
+ if self.cmap not in colormaps:
210
220
  raise ValueError('Unkown color map %s' % self.cmap)
211
221
  I = plt.imread(colormaps[self.cmap])
212
- cmap = colors.ListedColormap(np.squeeze(I))
222
+ name = self.cmap if isinstance(self.cmap, str) else self.cmap.name
223
+ cmap = colors.ListedColormap(np.squeeze(I), name=name)
213
224
  # Register colormap to matplotlib to avoid loading it again
214
- plt.register_cmap(self.cmap, cmap)
225
+ register_cmap(cmap)
215
226
 
216
227
  return dict(cmap=cmap, vmin=self.vmin, vmax=self.vmax)
217
228
 
218
229
  @property
219
230
  def raw(self):
220
- from matplotlib import colors, cm
231
+ from matplotlib import cm, colors
221
232
 
222
233
  cmap = self.get_cmapdict()['cmap']
223
234
  # Normalize colors according to vmin, vmax
@@ -398,5 +409,5 @@ def u(s, encoding='utf8'):
398
409
  return s
399
410
 
400
411
 
401
- from .viewRGB import VolumeRGB, VertexRGB, Colors
402
- from .view2D import Volume2D, Vertex2D
412
+ from .viewRGB import Colors, VertexRGB, VolumeRGB
413
+ from .view2D import Vertex2D, Volume2D