neuroseq 0.30.0__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 (415) hide show
  1. neuroseq-0.30.0/.gitignore +149 -0
  2. neuroseq-0.30.0/LICENSE +21 -0
  3. neuroseq-0.30.0/PKG-INFO +103 -0
  4. neuroseq-0.30.0/README.md +48 -0
  5. neuroseq-0.30.0/docs/common_issues.md +49 -0
  6. neuroseq-0.30.0/docs/developer/analysis_plugins.md +43 -0
  7. neuroseq-0.30.0/docs/developer/contributing.md +41 -0
  8. neuroseq-0.30.0/docs/developer/custom_simulators.md +156 -0
  9. neuroseq-0.30.0/docs/developer/developer_installation.md +137 -0
  10. neuroseq-0.30.0/docs/developer/documentation.md +52 -0
  11. neuroseq-0.30.0/docs/developer/miscellaneous.md +5 -0
  12. neuroseq-0.30.0/docs/developer/project_history.md +37 -0
  13. neuroseq-0.30.0/docs/developer/releases.md +43 -0
  14. neuroseq-0.30.0/docs/developer/testing.md +168 -0
  15. neuroseq-0.30.0/docs/examples.md +64 -0
  16. neuroseq-0.30.0/docs/getting_started/installation.md +62 -0
  17. neuroseq-0.30.0/docs/getting_started/quickstart.md +11 -0
  18. neuroseq-0.30.0/docs/getting_started/windows_shortcut.md +112 -0
  19. neuroseq-0.30.0/docs/images/SutterPatch_TemplateEditor.png +0 -0
  20. neuroseq-0.30.0/docs/images/amplitude_selection.png +0 -0
  21. neuroseq-0.30.0/docs/images/button_appearance.png +0 -0
  22. neuroseq-0.30.0/docs/images/data_selection.png +0 -0
  23. neuroseq-0.30.0/docs/images/draw_mode.png +0 -0
  24. neuroseq-0.30.0/docs/images/favicon.svg +1 -0
  25. neuroseq-0.30.0/docs/images/hodgkin_huxley_neuron.png +0 -0
  26. neuroseq-0.30.0/docs/images/layout.png +0 -0
  27. neuroseq-0.30.0/docs/images/screenshot.png +0 -0
  28. neuroseq-0.30.0/docs/images/select_mode.png +0 -0
  29. neuroseq-0.30.0/docs/images/stimulus_intensity.png +0 -0
  30. neuroseq-0.30.0/docs/images/toggle_widgets.png +0 -0
  31. neuroseq-0.30.0/docs/index.md +47 -0
  32. neuroseq-0.30.0/docs/user_guide/analysis_and_plugins.md +69 -0
  33. neuroseq-0.30.0/docs/user_guide/brainscales2_delivery.md +260 -0
  34. neuroseq-0.30.0/docs/user_guide/chat_assistant.md +98 -0
  35. neuroseq-0.30.0/docs/user_guide/experiments.md +72 -0
  36. neuroseq-0.30.0/docs/user_guide/export_patch_clamp_stimuli.md +19 -0
  37. neuroseq-0.30.0/docs/user_guide/gui_overview.md +262 -0
  38. neuroseq-0.30.0/docs/user_guide/importing_igor2_waves.md +107 -0
  39. neuroseq-0.30.0/docs/user_guide/importing_imaging_data.md +207 -0
  40. neuroseq-0.30.0/docs/user_guide/multiphoton_holographic_stimulation.md +310 -0
  41. neuroseq-0.30.0/docs/user_guide/run_external_simulators.md +72 -0
  42. neuroseq-0.30.0/docs/user_guide/scanimage_acquisition.md +263 -0
  43. neuroseq-0.30.0/docs/user_guide/simulations.md +153 -0
  44. neuroseq-0.30.0/docs/user_guide/simulations_and_experiments.md +68 -0
  45. neuroseq-0.30.0/docs/user_guide/stdp_synaptic_tuning.md +178 -0
  46. neuroseq-0.30.0/external_simulation_example/run_brian2_externally.py +218 -0
  47. neuroseq-0.30.0/external_simulation_example/simulate.py +73 -0
  48. neuroseq-0.30.0/pyproject.toml +197 -0
  49. neuroseq-0.30.0/scripts/windows/install_shortcut.ps1 +67 -0
  50. neuroseq-0.30.0/scripts/windows/launch_neuroseq.ps1 +138 -0
  51. neuroseq-0.30.0/scripts/windows/neuroseq.ico +0 -0
  52. neuroseq-0.30.0/src/neuroseq/__init__.py +5 -0
  53. neuroseq-0.30.0/src/neuroseq/__main__.py +256 -0
  54. neuroseq-0.30.0/src/neuroseq/add_experiment_data_dialog.py +241 -0
  55. neuroseq-0.30.0/src/neuroseq/analysis_plugins.py +182 -0
  56. neuroseq-0.30.0/src/neuroseq/aoi_shapes.py +65 -0
  57. neuroseq-0.30.0/src/neuroseq/b2_model.py +2772 -0
  58. neuroseq-0.30.0/src/neuroseq/b2_units.py +105 -0
  59. neuroseq-0.30.0/src/neuroseq/background_jobs.py +447 -0
  60. neuroseq-0.30.0/src/neuroseq/cellpose_annotation.py +138 -0
  61. neuroseq-0.30.0/src/neuroseq/cellpose_test_data.py +285 -0
  62. neuroseq-0.30.0/src/neuroseq/console_art.py +98 -0
  63. neuroseq-0.30.0/src/neuroseq/console_widget.py +292 -0
  64. neuroseq-0.30.0/src/neuroseq/data.py +101 -0
  65. neuroseq-0.30.0/src/neuroseq/data_manager_dialog.py +197 -0
  66. neuroseq-0.30.0/src/neuroseq/device_control/__init__.py +1 -0
  67. neuroseq-0.30.0/src/neuroseq/device_control/bss2_connection.py +375 -0
  68. neuroseq-0.30.0/src/neuroseq/device_control/bss2_panel.py +908 -0
  69. neuroseq-0.30.0/src/neuroseq/device_control/bss2_protocol.py +975 -0
  70. neuroseq-0.30.0/src/neuroseq/device_control/bss2_stimulation_host.py +293 -0
  71. neuroseq-0.30.0/src/neuroseq/device_control/scanimage_connection.py +351 -0
  72. neuroseq-0.30.0/src/neuroseq/device_control/scanimage_controls.py +424 -0
  73. neuroseq-0.30.0/src/neuroseq/device_control/scanimage_engine_worker.py +128 -0
  74. neuroseq-0.30.0/src/neuroseq/device_control/scanimage_files.py +49 -0
  75. neuroseq-0.30.0/src/neuroseq/device_control/stimulation_setup_widget.py +38 -0
  76. neuroseq-0.30.0/src/neuroseq/device_control/syscon2_client.py +439 -0
  77. neuroseq-0.30.0/src/neuroseq/device_control/syscon2_connection_manager.py +196 -0
  78. neuroseq-0.30.0/src/neuroseq/device_control/syscon2_panel.py +1523 -0
  79. neuroseq-0.30.0/src/neuroseq/device_control/syscon2_protocol.py +207 -0
  80. neuroseq-0.30.0/src/neuroseq/device_control/syscon2_stimulation_host.py +689 -0
  81. neuroseq-0.30.0/src/neuroseq/elise_support/__init__.py +1 -0
  82. neuroseq-0.30.0/src/neuroseq/elise_support/protocol_dialog.py +92 -0
  83. neuroseq-0.30.0/src/neuroseq/elise_support/replay_metrics.py +298 -0
  84. neuroseq-0.30.0/src/neuroseq/elise_support/workflows.py +318 -0
  85. neuroseq-0.30.0/src/neuroseq/example_models/NN.py +70 -0
  86. neuroseq-0.30.0/src/neuroseq/example_models/__init__.py +0 -0
  87. neuroseq-0.30.0/src/neuroseq/example_models/elise.py +1603 -0
  88. neuroseq-0.30.0/src/neuroseq/example_models/pynn_demo.py +366 -0
  89. neuroseq-0.30.0/src/neuroseq/example_models/sinus_offset.py +209 -0
  90. neuroseq-0.30.0/src/neuroseq/example_projects/__init__.py +81 -0
  91. neuroseq-0.30.0/src/neuroseq/example_projects/_registry.py +36 -0
  92. neuroseq-0.30.0/src/neuroseq/example_projects/networks/__init__.py +1 -0
  93. neuroseq-0.30.0/src/neuroseq/example_projects/networks/default_project.py +178 -0
  94. neuroseq-0.30.0/src/neuroseq/example_projects/networks/elise_project.py +10 -0
  95. neuroseq-0.30.0/src/neuroseq/example_projects/networks/getting_started_project.py +48 -0
  96. neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neuron_with_synapses.py +204 -0
  97. neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neuron_with_synthetic_synapses.py +206 -0
  98. neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neurons_ei_model.py +144 -0
  99. neuroseq-0.30.0/src/neuroseq/example_projects/networks/hh_neurons_with_plasticity.py +215 -0
  100. neuroseq-0.30.0/src/neuroseq/example_projects/networks/locally_connected_network.py +107 -0
  101. neuroseq-0.30.0/src/neuroseq/example_projects/networks/non_linear.py +58 -0
  102. neuroseq-0.30.0/src/neuroseq/example_projects/networks/pynn_demo_project.py +65 -0
  103. neuroseq-0.30.0/src/neuroseq/example_projects/networks/sinus_offset_project.py +57 -0
  104. neuroseq-0.30.0/src/neuroseq/example_projects/networks/two_hh_neurons_with_plasticity.py +239 -0
  105. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/__init__.py +1 -0
  106. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/pyrho_6state_chr2_project.py +154 -0
  107. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_adex_neuron.py +81 -0
  108. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_hh_neuron.py +137 -0
  109. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron.py +63 -0
  110. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron_many_stims.py +115 -0
  111. neuroseq-0.30.0/src/neuroseq/example_projects/neurons/single_lif_neuron_without_stim.py +44 -0
  112. neuroseq-0.30.0/src/neuroseq/export/__init__.py +1 -0
  113. neuroseq-0.30.0/src/neuroseq/export/exporter_igor2.py +408 -0
  114. neuroseq-0.30.0/src/neuroseq/export/exporter_syscon2.py +4076 -0
  115. neuroseq-0.30.0/src/neuroseq/export/igor2_pxp_stim_export_dialog.py +106 -0
  116. neuroseq-0.30.0/src/neuroseq/export/igor2_single_wave_export_dialog.py +179 -0
  117. neuroseq-0.30.0/src/neuroseq/export/power_lut.py +142 -0
  118. neuroseq-0.30.0/src/neuroseq/export/stimulation_generator_dialog.py +1284 -0
  119. neuroseq-0.30.0/src/neuroseq/export/stimulus_export_dialog.py +244 -0
  120. neuroseq-0.30.0/src/neuroseq/export/syscon2_export_service.py +332 -0
  121. neuroseq-0.30.0/src/neuroseq/external_tools.py +73 -0
  122. neuroseq-0.30.0/src/neuroseq/fiji.py +128 -0
  123. neuroseq-0.30.0/src/neuroseq/gpu.py +102 -0
  124. neuroseq-0.30.0/src/neuroseq/gui.py +341 -0
  125. neuroseq-0.30.0/src/neuroseq/gui_settings.py +277 -0
  126. neuroseq-0.30.0/src/neuroseq/icon_manager.py +108 -0
  127. neuroseq-0.30.0/src/neuroseq/importers/__init__.py +1 -0
  128. neuroseq-0.30.0/src/neuroseq/importers/cellpose_import_dialog.py +1770 -0
  129. neuroseq-0.30.0/src/neuroseq/importers/importer_cellpose.py +849 -0
  130. neuroseq-0.30.0/src/neuroseq/importers/importer_patch_clamp_data.py +801 -0
  131. neuroseq-0.30.0/src/neuroseq/importers/importer_scanimage.py +111 -0
  132. neuroseq-0.30.0/src/neuroseq/importers/importer_scanimage_traces.py +188 -0
  133. neuroseq-0.30.0/src/neuroseq/importers/importer_suite2p.py +210 -0
  134. neuroseq-0.30.0/src/neuroseq/importers/importer_syscon2.py +1239 -0
  135. neuroseq-0.30.0/src/neuroseq/importers/importer_tif.py +586 -0
  136. neuroseq-0.30.0/src/neuroseq/importers/patch_clamp_data_input_import_dialog.py +795 -0
  137. neuroseq-0.30.0/src/neuroseq/importers/patch_clamp_data_output_import_dialog.py +1076 -0
  138. neuroseq-0.30.0/src/neuroseq/importers/suite2p_import_dialog.py +606 -0
  139. neuroseq-0.30.0/src/neuroseq/importers/syscon2_import_dialog.py +495 -0
  140. neuroseq-0.30.0/src/neuroseq/importers/tif_import_dialog.py +961 -0
  141. neuroseq-0.30.0/src/neuroseq/io.py +542 -0
  142. neuroseq-0.30.0/src/neuroseq/llm/__init__.py +25 -0
  143. neuroseq-0.30.0/src/neuroseq/llm/anthropic_backend.py +73 -0
  144. neuroseq-0.30.0/src/neuroseq/llm/backend.py +76 -0
  145. neuroseq-0.30.0/src/neuroseq/llm/chat_widget.py +399 -0
  146. neuroseq-0.30.0/src/neuroseq/llm/llm_settings_dialog.py +234 -0
  147. neuroseq-0.30.0/src/neuroseq/llm/ollama.py +113 -0
  148. neuroseq-0.30.0/src/neuroseq/llm/openai_backend.py +79 -0
  149. neuroseq-0.30.0/src/neuroseq/llm/plugin_write_dialog.py +100 -0
  150. neuroseq-0.30.0/src/neuroseq/llm/read_access.py +339 -0
  151. neuroseq-0.30.0/src/neuroseq/llm/secrets.py +43 -0
  152. neuroseq-0.30.0/src/neuroseq/llm/system_prompt.py +85 -0
  153. neuroseq-0.30.0/src/neuroseq/main_scroll.py +187 -0
  154. neuroseq-0.30.0/src/neuroseq/model_descriptions.py +140 -0
  155. neuroseq-0.30.0/src/neuroseq/model_editor.py +1231 -0
  156. neuroseq-0.30.0/src/neuroseq/project.py +1706 -0
  157. neuroseq-0.30.0/src/neuroseq/project_history.py +166 -0
  158. neuroseq-0.30.0/src/neuroseq/project_workspace.py +3966 -0
  159. neuroseq-0.30.0/src/neuroseq/py.typed +0 -0
  160. neuroseq-0.30.0/src/neuroseq/qt_helpers.py +142 -0
  161. neuroseq-0.30.0/src/neuroseq/resources/__init__.py +0 -0
  162. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py +147 -0
  163. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/elise_learning_curves.py +108 -0
  164. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/elise_target_mse.py +189 -0
  165. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/epsp_amplitudes.py +249 -0
  166. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/mean_activity.py +69 -0
  167. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/membrane_parameters.py +326 -0
  168. neuroseq-0.30.0/src/neuroseq/resources/analysis_plugins/replay_mse.py +176 -0
  169. neuroseq-0.30.0/src/neuroseq/resources/bss2/neuroseq_bss2_helper.py +532 -0
  170. neuroseq-0.30.0/src/neuroseq/resources/console_brain.png +0 -0
  171. neuroseq-0.30.0/src/neuroseq/resources/example_data/2p_imaging_FOV.png +0 -0
  172. neuroseq-0.30.0/src/neuroseq/resources/example_data/2p_imaging_FOV_seg.npy +0 -0
  173. neuroseq-0.30.0/src/neuroseq/resources/retro.qss +583 -0
  174. neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_down.svg +3 -0
  175. neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_down_disabled.svg +3 -0
  176. neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_up.svg +3 -0
  177. neuroseq-0.30.0/src/neuroseq/resources/retro_arrow_up_disabled.svg +3 -0
  178. neuroseq-0.30.0/src/neuroseq/resources/retro_check.svg +6 -0
  179. neuroseq-0.30.0/src/neuroseq/resources/retro_check_disabled.svg +4 -0
  180. neuroseq-0.30.0/src/neuroseq/resources/retro_checkbox.svg +5 -0
  181. neuroseq-0.30.0/src/neuroseq/resources/retro_checkbox_disabled.svg +3 -0
  182. neuroseq-0.30.0/src/neuroseq/resources/retro_close.svg +3 -0
  183. neuroseq-0.30.0/src/neuroseq/resources/retro_indeterminate.svg +6 -0
  184. neuroseq-0.30.0/src/neuroseq/resources/retro_indeterminate_disabled.svg +4 -0
  185. neuroseq-0.30.0/src/neuroseq/resources/retro_radio.svg +5 -0
  186. neuroseq-0.30.0/src/neuroseq/resources/retro_radio_disabled.svg +4 -0
  187. neuroseq-0.30.0/src/neuroseq/resources/retro_radio_off.svg +4 -0
  188. neuroseq-0.30.0/src/neuroseq/resources/retro_radio_off_disabled.svg +3 -0
  189. neuroseq-0.30.0/src/neuroseq/resources/rheobase_chronaxie.svg +195 -0
  190. neuroseq-0.30.0/src/neuroseq/resources/scanimage/neuroseq_scanimage.m +212 -0
  191. neuroseq-0.30.0/src/neuroseq/resources/scanimage/neuroseq_scanimage_event.m +4 -0
  192. neuroseq-0.30.0/src/neuroseq/resources/startup_brain.png +0 -0
  193. neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/__init__.py +0 -0
  194. neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/default_1100nm.lut +16 -0
  195. neuroseq-0.30.0/src/neuroseq/resources/syscon_luts/default_940nm.lut +9 -0
  196. neuroseq-0.30.0/src/neuroseq/save_imaging_dialog.py +115 -0
  197. neuroseq-0.30.0/src/neuroseq/save_load_options.py +89 -0
  198. neuroseq-0.30.0/src/neuroseq/spike_detection.py +262 -0
  199. neuroseq-0.30.0/src/neuroseq/startup_dialog.py +157 -0
  200. neuroseq-0.30.0/src/neuroseq/stimulation/__init__.py +0 -0
  201. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/__init__.py +1 -0
  202. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dialog_helpers.py +66 -0
  203. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_blocks.py +84 -0
  204. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_controller.py +164 -0
  205. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_measurement.py +221 -0
  206. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/dynamic_input_routine.py +101 -0
  207. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/hardware_settings_widget.py +223 -0
  208. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/hardware_targets.py +106 -0
  209. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/rheobase.py +27 -0
  210. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/rheobase_dialog.py +2235 -0
  211. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/routine_overview_dialog.py +333 -0
  212. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_synaptic_tuning_dialog.py +1035 -0
  213. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_window.py +44 -0
  214. neuroseq-0.30.0/src/neuroseq/stimulation/dynamic_input/stdp_window_dialog.py +1764 -0
  215. neuroseq-0.30.0/src/neuroseq/stimulation/static_input/__init__.py +1 -0
  216. neuroseq-0.30.0/src/neuroseq/stimulation/static_input/static_input_controller.py +65 -0
  217. neuroseq-0.30.0/src/neuroseq/stimulation/static_input/stim_pattern_dialog.py +434 -0
  218. neuroseq-0.30.0/src/neuroseq/stimulation/static_input/stim_patterns.py +336 -0
  219. neuroseq-0.30.0/src/neuroseq/stimulation/stim.py +55 -0
  220. neuroseq-0.30.0/src/neuroseq/stimulation/stim_array_modifier.py +340 -0
  221. neuroseq-0.30.0/src/neuroseq/stimulation/stim_dialog.py +182 -0
  222. neuroseq-0.30.0/src/neuroseq/stimulation/stim_editor.py +1648 -0
  223. neuroseq-0.30.0/src/neuroseq/stimulation/stim_intensity_dialog.py +168 -0
  224. neuroseq-0.30.0/src/neuroseq/stimulation/stim_loop_dialog.py +66 -0
  225. neuroseq-0.30.0/src/neuroseq/stimulation/stim_timing.py +171 -0
  226. neuroseq-0.30.0/src/neuroseq/synthetic_data_dialog.py +985 -0
  227. neuroseq-0.30.0/src/neuroseq/theme.py +362 -0
  228. neuroseq-0.30.0/src/neuroseq/utils.py +581 -0
  229. neuroseq-0.30.0/src/neuroseq/visualization/__init__.py +1 -0
  230. neuroseq-0.30.0/src/neuroseq/visualization/calcium_video_widget.py +867 -0
  231. neuroseq-0.30.0/src/neuroseq/visualization/cell_overlay_widget.py +1655 -0
  232. neuroseq-0.30.0/src/neuroseq/visualization/custom_analysis_widget.py +362 -0
  233. neuroseq-0.30.0/src/neuroseq/visualization/data_widget.py +351 -0
  234. neuroseq-0.30.0/src/neuroseq/visualization/fpl_widget.py +287 -0
  235. neuroseq-0.30.0/src/neuroseq/visualization/heatmap_widget.py +341 -0
  236. neuroseq-0.30.0/src/neuroseq/visualization/spatial_footprint_widget.py +676 -0
  237. neuroseq-0.30.0/src/neuroseq/visualization/spike_widget.py +141 -0
  238. neuroseq-0.30.0/src/neuroseq/visualization/stim_widget.py +651 -0
  239. neuroseq-0.30.0/src/neuroseq/visualization/time_slider_widget.py +167 -0
  240. neuroseq-0.30.0/src/neuroseq/visualization/timeseries_widget.py +1071 -0
  241. neuroseq-0.30.0/src/neuroseq/visualization/trace_widget.py +827 -0
  242. neuroseq-0.30.0/src/neuroseq/visualization_support/__init__.py +1 -0
  243. neuroseq-0.30.0/src/neuroseq/visualization_support/brightness_contrast.py +282 -0
  244. neuroseq-0.30.0/src/neuroseq/visualization_support/cellpose_ids.py +49 -0
  245. neuroseq-0.30.0/src/neuroseq/visualization_support/constrained_pan_zoom_controller.py +388 -0
  246. neuroseq-0.30.0/src/neuroseq/visualization_support/gridlines.py +190 -0
  247. neuroseq-0.30.0/src/neuroseq/visualization_support/neuron_subset_dialog.py +74 -0
  248. neuroseq-0.30.0/src/neuroseq/visualization_support/region_of_interest.py +82 -0
  249. neuroseq-0.30.0/src/neuroseq/visualization_support/segmentation_brightness_dialog.py +84 -0
  250. neuroseq-0.30.0/src/neuroseq/visualization_support/spatial_footprint_state.py +241 -0
  251. neuroseq-0.30.0/src/neuroseq/visualization_support/trace_widget_state.py +69 -0
  252. neuroseq-0.30.0/src/neuroseq/workspace_acquisition_controller.py +708 -0
  253. neuroseq-0.30.0/src/neuroseq/workspace_devices.py +217 -0
  254. neuroseq-0.30.0/tests/__init__.py +0 -0
  255. neuroseq-0.30.0/tests/bss2_fake_helper.py +182 -0
  256. neuroseq-0.30.0/tests/conftest.py +907 -0
  257. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/aoi_mapping.json +1 -0
  258. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/image.png +0 -0
  259. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy.nseq +0 -0
  260. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy_aoi_dialog.nseq +0 -0
  261. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/legacy_export.seq +245 -0
  262. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/make_aoi_fixture.py +46 -0
  263. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/make_fixture.py +88 -0
  264. neuroseq-0.30.0/tests/data/legacy_cellpose_v1/masks.npy +0 -0
  265. neuroseq-0.30.0/tests/fake_stimulation_host.py +161 -0
  266. neuroseq-0.30.0/tests/matlab/ScanImageTestComponent.m +22 -0
  267. neuroseq-0.30.0/tests/matlab/ScanImageTestRig.m +38 -0
  268. neuroseq-0.30.0/tests/matlab/test_scanimage_adapter.m +225 -0
  269. neuroseq-0.30.0/tests/sampledata/3patchclampneurons.npy +0 -0
  270. neuroseq-0.30.0/tests/sampledata/theme_controls_dark.png +0 -0
  271. neuroseq-0.30.0/tests/sampledata/theme_controls_light.png +0 -0
  272. neuroseq-0.30.0/tests/sampledata/theme_controls_retro.png +0 -0
  273. neuroseq-0.30.0/tests/test_add_experiment_data_dialog.py +69 -0
  274. neuroseq-0.30.0/tests/test_analysis_plugins.py +137 -0
  275. neuroseq-0.30.0/tests/test_b2_units.py +148 -0
  276. neuroseq-0.30.0/tests/test_b2model.py +1343 -0
  277. neuroseq-0.30.0/tests/test_background_io_worker.py +112 -0
  278. neuroseq-0.30.0/tests/test_background_jobs.py +271 -0
  279. neuroseq-0.30.0/tests/test_brightness_contrast.py +161 -0
  280. neuroseq-0.30.0/tests/test_bss2_connection.py +290 -0
  281. neuroseq-0.30.0/tests/test_bss2_helper.py +484 -0
  282. neuroseq-0.30.0/tests/test_bss2_panel.py +598 -0
  283. neuroseq-0.30.0/tests/test_bss2_protocol.py +536 -0
  284. neuroseq-0.30.0/tests/test_bss2_stimulation_host.py +200 -0
  285. neuroseq-0.30.0/tests/test_calcium_video_channels.py +136 -0
  286. neuroseq-0.30.0/tests/test_cellpose_annotation.py +142 -0
  287. neuroseq-0.30.0/tests/test_cellpose_aoi_mapping.py +459 -0
  288. neuroseq-0.30.0/tests/test_cellpose_import_dialog.py +577 -0
  289. neuroseq-0.30.0/tests/test_cellpose_importer.py +635 -0
  290. neuroseq-0.30.0/tests/test_cellpose_orientation.py +181 -0
  291. neuroseq-0.30.0/tests/test_cellpose_test_data.py +240 -0
  292. neuroseq-0.30.0/tests/test_chat_widget.py +226 -0
  293. neuroseq-0.30.0/tests/test_conftest.py +26 -0
  294. neuroseq-0.30.0/tests/test_console.py +202 -0
  295. neuroseq-0.30.0/tests/test_console_art.py +95 -0
  296. neuroseq-0.30.0/tests/test_constrained_pan_zoom_controller.py +185 -0
  297. neuroseq-0.30.0/tests/test_custom_analysis_widget.py +554 -0
  298. neuroseq-0.30.0/tests/test_data_manager_dialog.py +60 -0
  299. neuroseq-0.30.0/tests/test_data_widget.py +86 -0
  300. neuroseq-0.30.0/tests/test_detached_panel_window.py +41 -0
  301. neuroseq-0.30.0/tests/test_drop_import.py +234 -0
  302. neuroseq-0.30.0/tests/test_dynamic_input_blocks.py +137 -0
  303. neuroseq-0.30.0/tests/test_dynamic_input_controller.py +42 -0
  304. neuroseq-0.30.0/tests/test_dynamic_input_measurement.py +95 -0
  305. neuroseq-0.30.0/tests/test_dynamic_input_routine.py +55 -0
  306. neuroseq-0.30.0/tests/test_dynamic_input_stdp_backends.py +232 -0
  307. neuroseq-0.30.0/tests/test_elise_kinetics_archive_migration.py +137 -0
  308. neuroseq-0.30.0/tests/test_elise_opsin_kinetics.py +282 -0
  309. neuroseq-0.30.0/tests/test_elise_opsin_release.py +359 -0
  310. neuroseq-0.30.0/tests/test_elise_protocol.py +449 -0
  311. neuroseq-0.30.0/tests/test_elise_smoke.py +162 -0
  312. neuroseq-0.30.0/tests/test_elise_target_mse.py +191 -0
  313. neuroseq-0.30.0/tests/test_elise_workflows.py +54 -0
  314. neuroseq-0.30.0/tests/test_epsp_analysis.py +124 -0
  315. neuroseq-0.30.0/tests/test_example_models_backend.py +401 -0
  316. neuroseq-0.30.0/tests/test_example_project_elise.py +152 -0
  317. neuroseq-0.30.0/tests/test_example_project_pynn_demo.py +411 -0
  318. neuroseq-0.30.0/tests/test_example_project_sinus_offset.py +69 -0
  319. neuroseq-0.30.0/tests/test_example_projects.py +243 -0
  320. neuroseq-0.30.0/tests/test_exporter_igor2.py +729 -0
  321. neuroseq-0.30.0/tests/test_exporter_syscon2.py +2285 -0
  322. neuroseq-0.30.0/tests/test_external_sim_params_tree.py +198 -0
  323. neuroseq-0.30.0/tests/test_external_sim_worker.py +124 -0
  324. neuroseq-0.30.0/tests/test_external_tools.py +75 -0
  325. neuroseq-0.30.0/tests/test_fiji.py +115 -0
  326. neuroseq-0.30.0/tests/test_fpl_widget.py +209 -0
  327. neuroseq-0.30.0/tests/test_gpu.py +105 -0
  328. neuroseq-0.30.0/tests/test_gridlines.py +75 -0
  329. neuroseq-0.30.0/tests/test_gui.py +4617 -0
  330. neuroseq-0.30.0/tests/test_gui_brian2_threaded_dispatch.py +264 -0
  331. neuroseq-0.30.0/tests/test_gui_external_simulate_dispatch.py +437 -0
  332. neuroseq-0.30.0/tests/test_gui_settings.py +168 -0
  333. neuroseq-0.30.0/tests/test_gui_threaded_io.py +256 -0
  334. neuroseq-0.30.0/tests/test_hardware_settings_widget.py +111 -0
  335. neuroseq-0.30.0/tests/test_hardware_targets.py +45 -0
  336. neuroseq-0.30.0/tests/test_heatmap_widget.py +215 -0
  337. neuroseq-0.30.0/tests/test_icon_manager.py +113 -0
  338. neuroseq-0.30.0/tests/test_igor2_pxp_stim_export_dialog.py +89 -0
  339. neuroseq-0.30.0/tests/test_igor2_single_wave_export_dialog.py +153 -0
  340. neuroseq-0.30.0/tests/test_import_layering.py +70 -0
  341. neuroseq-0.30.0/tests/test_importer_patch_clamp_data.py +976 -0
  342. neuroseq-0.30.0/tests/test_importer_scanimage_traces.py +194 -0
  343. neuroseq-0.30.0/tests/test_importer_suite2p.py +204 -0
  344. neuroseq-0.30.0/tests/test_importer_syscon2.py +2033 -0
  345. neuroseq-0.30.0/tests/test_importer_tif.py +1050 -0
  346. neuroseq-0.30.0/tests/test_io.py +397 -0
  347. neuroseq-0.30.0/tests/test_llm_backend.py +321 -0
  348. neuroseq-0.30.0/tests/test_llm_read_access.py +499 -0
  349. neuroseq-0.30.0/tests/test_llm_settings_dialog.py +119 -0
  350. neuroseq-0.30.0/tests/test_llm_system_prompt.py +90 -0
  351. neuroseq-0.30.0/tests/test_main.py +463 -0
  352. neuroseq-0.30.0/tests/test_main_scroll.py +130 -0
  353. neuroseq-0.30.0/tests/test_membrane_parameters_analysis.py +92 -0
  354. neuroseq-0.30.0/tests/test_modeleditor.py +1074 -0
  355. neuroseq-0.30.0/tests/test_neuron_subset_dialog.py +53 -0
  356. neuroseq-0.30.0/tests/test_open_in_fiji.py +59 -0
  357. neuroseq-0.30.0/tests/test_patch_clamp_data_input_import_dialog.py +1040 -0
  358. neuroseq-0.30.0/tests/test_patch_clamp_data_output_import_dialog.py +920 -0
  359. neuroseq-0.30.0/tests/test_power_lut.py +108 -0
  360. neuroseq-0.30.0/tests/test_project.py +1652 -0
  361. neuroseq-0.30.0/tests/test_project_external_simulate.py +389 -0
  362. neuroseq-0.30.0/tests/test_project_history.py +404 -0
  363. neuroseq-0.30.0/tests/test_project_suggested_sim_time.py +104 -0
  364. neuroseq-0.30.0/tests/test_project_tile_to_length.py +84 -0
  365. neuroseq-0.30.0/tests/test_project_workspaces.py +620 -0
  366. neuroseq-0.30.0/tests/test_pynn_demo_smoke.py +102 -0
  367. neuroseq-0.30.0/tests/test_qt_threading.py +89 -0
  368. neuroseq-0.30.0/tests/test_replay_mse_plugin.py +226 -0
  369. neuroseq-0.30.0/tests/test_rheobase.py +41 -0
  370. neuroseq-0.30.0/tests/test_rheobase_backend.py +182 -0
  371. neuroseq-0.30.0/tests/test_rheobase_dialog.py +1498 -0
  372. neuroseq-0.30.0/tests/test_rheobase_integration.py +93 -0
  373. neuroseq-0.30.0/tests/test_routine_overview_dialog.py +147 -0
  374. neuroseq-0.30.0/tests/test_save_imaging.py +169 -0
  375. neuroseq-0.30.0/tests/test_save_load_options.py +49 -0
  376. neuroseq-0.30.0/tests/test_scanimage.py +1011 -0
  377. neuroseq-0.30.0/tests/test_scanimage_files.py +20 -0
  378. neuroseq-0.30.0/tests/test_sinus_offset_smoke.py +98 -0
  379. neuroseq-0.30.0/tests/test_spatial_footprint_widget.py +1965 -0
  380. neuroseq-0.30.0/tests/test_spike_widget.py +227 -0
  381. neuroseq-0.30.0/tests/test_startup_dialog.py +174 -0
  382. neuroseq-0.30.0/tests/test_stdp_synaptic_tuning_dialog.py +955 -0
  383. neuroseq-0.30.0/tests/test_stdp_window.py +51 -0
  384. neuroseq-0.30.0/tests/test_stdp_window_dialog.py +973 -0
  385. neuroseq-0.30.0/tests/test_stdp_window_integration.py +213 -0
  386. neuroseq-0.30.0/tests/test_stim_array_modifier.py +182 -0
  387. neuroseq-0.30.0/tests/test_stim_dialog.py +89 -0
  388. neuroseq-0.30.0/tests/test_stim_editor.py +2073 -0
  389. neuroseq-0.30.0/tests/test_stim_intensity_dialog.py +115 -0
  390. neuroseq-0.30.0/tests/test_stim_loop.py +195 -0
  391. neuroseq-0.30.0/tests/test_stim_pattern_dialog.py +629 -0
  392. neuroseq-0.30.0/tests/test_stim_patterns.py +455 -0
  393. neuroseq-0.30.0/tests/test_stim_timing.py +218 -0
  394. neuroseq-0.30.0/tests/test_stim_widget.py +1072 -0
  395. neuroseq-0.30.0/tests/test_stimulation_generator_dialog.py +1460 -0
  396. neuroseq-0.30.0/tests/test_stimulation_setup_widget.py +43 -0
  397. neuroseq-0.30.0/tests/test_stimulus_export_dialog.py +100 -0
  398. neuroseq-0.30.0/tests/test_suite2p_import_dialog.py +266 -0
  399. neuroseq-0.30.0/tests/test_synthetic_data_dialog.py +192 -0
  400. neuroseq-0.30.0/tests/test_syscon2_client.py +404 -0
  401. neuroseq-0.30.0/tests/test_syscon2_connection_manager.py +310 -0
  402. neuroseq-0.30.0/tests/test_syscon2_export_service.py +222 -0
  403. neuroseq-0.30.0/tests/test_syscon2_panel.py +1153 -0
  404. neuroseq-0.30.0/tests/test_syscon2_protocol.py +177 -0
  405. neuroseq-0.30.0/tests/test_syscon2_stimulation_host.py +665 -0
  406. neuroseq-0.30.0/tests/test_theme.py +301 -0
  407. neuroseq-0.30.0/tests/test_theme_retro.py +257 -0
  408. neuroseq-0.30.0/tests/test_threaded_external_dispatch.py +219 -0
  409. neuroseq-0.30.0/tests/test_tif_import_dialog.py +1061 -0
  410. neuroseq-0.30.0/tests/test_time_slider_widget.py +136 -0
  411. neuroseq-0.30.0/tests/test_trace_widget.py +1964 -0
  412. neuroseq-0.30.0/tests/test_utils.py +254 -0
  413. neuroseq-0.30.0/tests/test_windows_launcher.py +180 -0
  414. neuroseq-0.30.0/tests/test_workspace_acquisition_controller.py +797 -0
  415. neuroseq-0.30.0/tests/wait_timeout.py +9 -0
@@ -0,0 +1,149 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+ /artifacts/
54
+
55
+ # Translations
56
+ *.mo
57
+ *.pot
58
+
59
+ # Django stuff:
60
+ *.log
61
+ *.prof
62
+ latest.prof
63
+ local_settings.py
64
+ db.sqlite3
65
+ db.sqlite3-journal
66
+
67
+ # Flask stuff:
68
+ instance/
69
+ .webassets-cache
70
+
71
+ # Scrapy stuff:
72
+ .scrapy
73
+
74
+ # Sphinx documentation
75
+ docs/_build/
76
+
77
+ # PyBuilder
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv*
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # Generated documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+ # OS specifics
135
+ *.DS_Store
136
+
137
+ # ide
138
+ .vscode
139
+ .idea
140
+
141
+ # AI tool internal files
142
+ .claude/
143
+ .codex
144
+ uv.lock
145
+ uv.lock
146
+ uv.lock
147
+
148
+ # Stray pytest --basetemp directories
149
+ .pytest-*/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 Andrey Formozov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,103 @@
1
+ Metadata-Version: 2.5
2
+ Name: neuroseq
3
+ Version: 0.30.0
4
+ Summary: Qt-based desktop GUI application for computational neuroscience, combining Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D .seq files).
5
+ Project-URL: Homepage, https://neuroseq.github.io/
6
+ Project-URL: Documentation, https://neuroseq.github.io/
7
+ Project-URL: Source, https://github.com/neuroseq/neuroseq
8
+ Project-URL: Issues, https://github.com/neuroseq/neuroseq/issues
9
+ Author: Andrey Formozov
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: brian2,calcium imaging,gui,holographic stimulation,neuroscience,optogenetics,spiking neural networks
13
+ Classifier: Environment :: X11 Applications :: Qt
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Scientific/Engineering
24
+ Classifier: Topic :: Scientific/Engineering :: Visualization
25
+ Requires-Python: >=3.12
26
+ Requires-Dist: brian2
27
+ Requires-Dist: cellpose[gui]
28
+ Requires-Dist: click
29
+ Requires-Dist: fastplotlib
30
+ Requires-Dist: h5py
31
+ Requires-Dist: igor2
32
+ Requires-Dist: matplotlib
33
+ Requires-Dist: numpy
34
+ Requires-Dist: nvidia-ml-py
35
+ Requires-Dist: pillow
36
+ Requires-Dist: platformdirs
37
+ Requires-Dist: psutil
38
+ Requires-Dist: pyparsing!=3.2.4
39
+ Requires-Dist: pyqt6
40
+ Requires-Dist: pyqt6-qt6!=6.11.1
41
+ Requires-Dist: pyqtgraph!=0.14.0
42
+ Requires-Dist: qtawesome
43
+ Requires-Dist: qtpy
44
+ Requires-Dist: scipy
45
+ Requires-Dist: suite2p>=1.0
46
+ Requires-Dist: tifffile
47
+ Requires-Dist: torch
48
+ Requires-Dist: torchvision
49
+ Provides-Extra: chat
50
+ Requires-Dist: anthropic>=0.40; extra == 'chat'
51
+ Requires-Dist: httpx>=0.27; extra == 'chat'
52
+ Requires-Dist: keyring>=24; extra == 'chat'
53
+ Requires-Dist: openai>=1.40; extra == 'chat'
54
+ Description-Content-Type: text/markdown
55
+
56
+ # NeuroSeq - Neuronal Sequencer
57
+
58
+ [![CI](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml/badge.svg)](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml)
59
+ [![PyPI](https://img.shields.io/pypi/v/neuroseq)](https://pypi.org/project/neuroseq/)
60
+ [![Docs](https://img.shields.io/badge/docs-neuroseq.github.io-blue)](https://neuroseq.github.io/)
61
+
62
+ NeuroSeq is a Qt-based desktop GUI application for computational neuroscience. It combines Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D `.seq` files).
63
+
64
+ ![screenshot](https://raw.githubusercontent.com/neuroseq/neuroseq/main/docs/images/screenshot.png)
65
+
66
+ ## Installation
67
+
68
+ NeuroSeq requires Python 3.12 or newer. Install the latest release from
69
+ [PyPI](https://pypi.org/project/neuroseq/), ideally into a virtual environment
70
+ or Conda environment:
71
+
72
+ ```bash
73
+ pip install neuroseq
74
+ ```
75
+
76
+ Then launch the GUI with:
77
+
78
+ ```bash
79
+ neuroseq
80
+ ```
81
+
82
+ To upgrade to a newer release, run `pip install --upgrade neuroseq`.
83
+
84
+ See the [installation guide](https://neuroseq.github.io/getting_started/installation/)
85
+ for details, including GPU setup and Cython on Windows, and the
86
+ [developer installation guide](https://neuroseq.github.io/developer/developer_installation/)
87
+ to work on NeuroSeq from a repository checkout with uv or Conda.
88
+
89
+ ## Documentation
90
+
91
+ Documentation for the project is available [online](https://neuroseq.github.io/).
92
+ See the [documentation guide](https://neuroseq.github.io/developer/documentation/) to build or preview it locally.
93
+
94
+ ## Contributing and providing feed-back
95
+
96
+ The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
97
+
98
+ To report a bug or suggest a new feature functionality please open a new issue. To implement a new feature, please fork the repository, modify the code accordingly and open a discussion with core developers via submitting a pull request.
99
+
100
+ ## License
101
+
102
+ NeuroSeq is released under the [MIT License](https://github.com/neuroseq/neuroseq/blob/main/LICENSE). Copyright © 2024-2026 Andrey Formozov.
103
+ See [AUTHORS.md](https://github.com/neuroseq/neuroseq/blob/main/AUTHORS.md) for the list of contributors.
@@ -0,0 +1,48 @@
1
+ # NeuroSeq - Neuronal Sequencer
2
+
3
+ [![CI](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml/badge.svg)](https://github.com/neuroseq/neuroseq/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/neuroseq)](https://pypi.org/project/neuroseq/)
5
+ [![Docs](https://img.shields.io/badge/docs-neuroseq.github.io-blue)](https://neuroseq.github.io/)
6
+
7
+ NeuroSeq is a Qt-based desktop GUI application for computational neuroscience. It combines Brian2 spiking neural network simulation with interactive stimulus design, multi-source experimental data import, and hardware export for holographic stimulation (HOLO4D `.seq` files).
8
+
9
+ ![screenshot](https://raw.githubusercontent.com/neuroseq/neuroseq/main/docs/images/screenshot.png)
10
+
11
+ ## Installation
12
+
13
+ NeuroSeq requires Python 3.12 or newer. Install the latest release from
14
+ [PyPI](https://pypi.org/project/neuroseq/), ideally into a virtual environment
15
+ or Conda environment:
16
+
17
+ ```bash
18
+ pip install neuroseq
19
+ ```
20
+
21
+ Then launch the GUI with:
22
+
23
+ ```bash
24
+ neuroseq
25
+ ```
26
+
27
+ To upgrade to a newer release, run `pip install --upgrade neuroseq`.
28
+
29
+ See the [installation guide](https://neuroseq.github.io/getting_started/installation/)
30
+ for details, including GPU setup and Cython on Windows, and the
31
+ [developer installation guide](https://neuroseq.github.io/developer/developer_installation/)
32
+ to work on NeuroSeq from a repository checkout with uv or Conda.
33
+
34
+ ## Documentation
35
+
36
+ Documentation for the project is available [online](https://neuroseq.github.io/).
37
+ See the [documentation guide](https://neuroseq.github.io/developer/documentation/) to build or preview it locally.
38
+
39
+ ## Contributing and providing feed-back
40
+
41
+ The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
42
+
43
+ To report a bug or suggest a new feature functionality please open a new issue. To implement a new feature, please fork the repository, modify the code accordingly and open a discussion with core developers via submitting a pull request.
44
+
45
+ ## License
46
+
47
+ NeuroSeq is released under the [MIT License](https://github.com/neuroseq/neuroseq/blob/main/LICENSE). Copyright © 2024-2026 Andrey Formozov.
48
+ See [AUTHORS.md](https://github.com/neuroseq/neuroseq/blob/main/AUTHORS.md) for the list of contributors.
@@ -0,0 +1,49 @@
1
+ ## Issues during installation
2
+
3
+ ### Long paths in windows
4
+
5
+ During installation on windows one can encounter the following error:
6
+
7
+ ```
8
+ ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 'C:\\Users\\af24\\AppData\\Local\\Temp\\pip-install-i3syxwx0\\imgui-bundle_3462a851e1e44f9caa7b8510206f002e\\external\\hello_imgui\\hello_imgui\\hello_imgui_cmake\\android\\apkCMake\\templates\\sdl\\gradle_template\\app\\src\\main\\java\\org\\libsdl\\app\\HIDDeviceBLESteamController.java'
9
+ HINT: This error might have occurred since this system does not have Windows Long Path support enabled. You can find information on how to enable this at https://pip.pypa.io/warnings/enable-long-paths
10
+ ```
11
+
12
+ The issues can be fixed by entering Registry Editor and modifying _LongPathsEnabled_ variable under _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem_ from "0" to "1".
13
+
14
+ Refer to [this webpage](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later) on the instructions to fix it.
15
+
16
+ ## Imaging / segmentation
17
+
18
+ ### Cellpose "use GPU" is greyed out (segmentation is very slow)
19
+
20
+ Cellpose (and Suite2p) only offer GPU acceleration when **PyTorch** exposes a
21
+ GPU backend — **CUDA** (NVIDIA) or **MPS** (Apple Silicon). A **CPU-only**
22
+ PyTorch build disables the "use GPU" checkbox. This is common on **Windows**,
23
+ where PyPI's default `torch` wheel is CPU-only.
24
+
25
+ Check the installed build (in the NeuroSeq environment):
26
+
27
+ ```bash
28
+ python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
29
+ ```
30
+
31
+ `…+cpu` / `False` means CPU-only. If the machine has an NVIDIA (or
32
+ Apple-Silicon) GPU, install a GPU build and relaunch:
33
+
34
+ ```bash
35
+ uv pip install --torch-backend=auto torch
36
+ ```
37
+
38
+ Not using `uv` (e.g. NeuroSeq is installed into a conda environment)? Install
39
+ directly with pip instead:
40
+
41
+ ```bash
42
+ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
43
+ ```
44
+
45
+ If the machine has **only Intel integrated graphics**, Cellpose cannot use it
46
+ (CUDA/MPS only) — run segmentation on a GPU machine and import its `_seg.npy`
47
+ instead. See
48
+ [Importing imaging data → GPU acceleration](user_guide/importing_imaging_data.md#gpu-acceleration-cellpose-suite2p)
49
+ for details.
@@ -0,0 +1,43 @@
1
+ # Analysis Plugins (Developer)
2
+
3
+ This page describes how the custom analysis plugin system works internally and how to implement new analysis plugins.
4
+
5
+ ## Architecture Overview
6
+
7
+ Plugin support is split across three core modules:
8
+
9
+ - `src/neuroseq/analysis_plugins.py`
10
+ - Discovers plugin modules from `src/neuroseq/resources/analysis_plugins`
11
+ and from the per-user folder returned by `user_plugins_directory()`
12
+ (user plugins never shadow built-in filenames or `PLUGIN_ID`s)
13
+ - Loads each plugin file dynamically
14
+ - Builds `AnalysisPlugin` objects (`id`, `label`, `icon`, `render`)
15
+ - `src/neuroseq/visualization/timeseries_widget.py`
16
+ - Rebuilds right-click analysis menu on demand
17
+ - Adds built-in analysis actions and plugin actions
18
+ - Emits `custom_analysis_requested` with either a built-in `CustomAnalysisType` or an `AnalysisPlugin`
19
+ - `src/neuroseq/visualization/custom_analysis_widget.py`
20
+ - Executes built-in analysis logic
21
+ - Executes plugin `render` callback for plugin analyses
22
+ - Catches plugin exceptions, logs the plugin id, and shows a failure message in the plot
23
+
24
+ ## Plugin Discovery
25
+
26
+ A plugin is a Python file in: `src/neuroseq/resources/analysis_plugins`. It must have `*.py` extention (files starting with `_` will be ignored) and define callable `render_analysis`. Each pluging has ID, NAME and ICON. The default value for ID and NAME is a filename without extention but user can also define them as `PLUGIN_ID`, `PLUGIN_NAME`, and `PLUGIN_ICON` (e.g. `mdi6.puzzle`). `PLUGIN_ID` should be stable over time. Use a machine-oriented id (for example, `mean_activity`) and keep display text in `PLUGIN_NAME`. At the present momement dropdown menu does not distinguish the type of the data that is being analysed and shows all improrted plugins regardless of datatype.
27
+
28
+ See [`src/neuroseq/resources/analysis_plugins/mean_activity.py`](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/resources/analysis_plugins/mean_activity.py) for a working example plugin.
29
+
30
+ ## Advanced Interactive Example
31
+
32
+ The ELiSe plugins are thin wrappers; their supporting code is a regular
33
+ package, `src/neuroseq/elise_support/`: `replay_metrics.py` provides replay
34
+ metrics and CSV export, `workflows.py` connects project data to the analysis
35
+ windows, and `protocol_dialog.py` provides protocol settings. Keep core code
36
+ out of the plugin folder: it is scanned and executed on every right-click
37
+ menu and is excluded from coverage.
38
+
39
+ For an advanced plugin example with UI controls, see [`src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py`](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/resources/analysis_plugins/advanced_mean_activity.py).
40
+
41
+ This plugin extends the basic mean-activity analysis by adding an interactive control bar in the same analysis window.
42
+
43
+ important: for the analysis widgets opened in the same window as it is the case for "show custom analysis" pad it is important to prevent duplicating of controls when the same plugin is run repeatedly in one open analysis widget.
@@ -0,0 +1,41 @@
1
+ # Contributing
2
+
3
+ The NeuroSeq is an open-source project. Everyone can suggest and implement improvements as well as improve overall reliability and stability of its operation.
4
+
5
+ ## Development pipeline
6
+
7
+ 1. Fork and clone repository.
8
+ 2. Create a feature branch.
9
+ 3. [Install](developer_installation.md) in editable mode.
10
+ 4. Modify the code.
11
+ 5. Test new functionality.
12
+ 6. Run [pytests](testing.md) before opening a pull request.
13
+
14
+ ## Project workspaces
15
+
16
+ `gui.py` contains the application shell. Each tab embeds a separate
17
+ `ProjectWorkspace` from `project_workspace.py`, which owns its project's widgets,
18
+ controllers, console namespace, undo history, input designers, detached windows,
19
+ and background jobs. The workspace uses a child `QMainWindow` to lay out its own
20
+ menus and toolbars. `Gui.active_workspace` is the explicit access point for the
21
+ current tab; `Gui.project` and forwarded attribute reads remain available for
22
+ integrations.
23
+
24
+ Switching tabs changes the visible workspace without calling `update_project()`
25
+ or copying widget state into `Project`. Playback pauses when leaving a tab;
26
+ background jobs continue and deliver their results to their owning workspace.
27
+ `update_project()` refreshes data within a workspace, for example after imports
28
+ or model edits. GUI state remains in memory and is not serialized to `.nseq`.
29
+
30
+ Settings and physical connections are application resources. `workspace_devices.py`
31
+ shares the ScanImage connection and SysCon2 transport. Each SysCon2 panel receives
32
+ a session that routes command replies to the requesting workspace; connection
33
+ status is shared. Only the active workspace receives live ScanImage frames.
34
+ Acquisition results are matched by run ID to the workspace that requested them.
35
+ Closing a tab stops its jobs and releases its resources without disconnecting
36
+ other tabs. Application shutdown checks unsaved projects individually and stops
37
+ all workspaces before shutting down the shared connections.
38
+
39
+ Run `uv run pytest tests/test_project_workspaces.py` for tab isolation, background
40
+ result routing, device sessions, and workspace lifecycle tests. Existing widget
41
+ and workflow tests exercise `ProjectWorkspace` directly.
@@ -0,0 +1,156 @@
1
+ # Integration of Custom Simulators
2
+
3
+ This page describes the current structure used for NeuroSeq external simulators and how to implement a new backend.
4
+
5
+ ## Overview
6
+
7
+ NeuroSeq has built-in Brian2 simulator but also supports arbitraty simulation backends. These backends are loaded through `Project.load_external_simulator()` and are expected to produce an `Experiment` object from stimulus arrays.
8
+
9
+ There are now two layers:
10
+
11
+ 1. A shared base class in [src/neuroseq/example_models/NN.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/NN.py).
12
+ 2. A backend implementation class such as [src/neuroseq/example_models/elise.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/elise.py).
13
+
14
+ The base class is intentionally lightweight. It does not use `abc`; instead, subclass methods are expected to override the base methods and the defaults raise `NotImplementedError`.
15
+
16
+ ## Structure of the Base NN Class
17
+
18
+ The shared `NN` class in [src/neuroseq/example_models/NN.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/NN.py) provides common state and parameter handling.
19
+
20
+ It currently contains:
21
+
22
+ 1. `__init__(default_params_schema)`
23
+ Stores a deep copy of the editable parameter schema, initializes flat parameter values from the schema defaults, and initializes cumulative simulated time.
24
+ 2. `simulated_time_seconds`
25
+ Property exposing the amount of simulated time already accumulated by the backend instance.
26
+ 3. `default_params_schema()`
27
+ Returns a deep copy of the editable parameter schema for use in the GUI.
28
+ 4. `flat_default_params()`
29
+ Returns a flat `{name: default_value}` mapping derived from the schema.
30
+ 5. `update_params(params)`
31
+ Merges user-provided parameter overrides onto defaults and resets backend state if anything changed.
32
+ 6. `_flat_defaults()`
33
+ Internal helper that flattens the schema into default values.
34
+ 7. `reset()`
35
+ Subclass hook that must clear backend-specific runtime state.
36
+ 8. `simulate(stims_dict, simulation_time, params=None)`
37
+ Subclass hook that must run one simulation chunk and return an `Experiment`.
38
+
39
+ The important design point is that the base class owns parameter bookkeeping and cumulative time, while the subclass owns backend-specific runtime objects.
40
+
41
+ ## Structure of a Backend Implementation
42
+
43
+ An implementation module should define a backend class derived from `NN`. The ELISE backend in [src/neuroseq/example_models/elise.py](https://github.com/neuroseq/neuroseq/blob/main/src/neuroseq/example_models/elise.py) is the current reference implementation.
44
+
45
+ The backend class should typically provide:
46
+
47
+ 1. `__init__()`
48
+ Calls `super().__init__(DEFAULT_PARAMS)` and initializes backend-specific runtime fields such as cached networks, signatures, RNG state, or imported backend types.
49
+ 2. `reset()`
50
+ Clears runtime state that should be rebuilt when parameters change.
51
+ 3. Backend-specific initialization helpers
52
+ For example, ELISE uses `_import_elise_types()` and `_initialize_network(num_vis)`.
53
+ 4. `simulate(...)`
54
+ Validates inputs, applies parameter updates, initializes or reuses the backend state, advances the simulation, and returns an `Experiment` containing the generated data.
55
+
56
+ For stateful backends, `simulate(...)` should preserve runtime state between calls so repeated runs can continue from the previous state instead of starting over.
57
+
58
+ ## Module-Level Entry Points
59
+
60
+ For integration with the current project and GUI code, the module should expose these entry points:
61
+
62
+ 1. `simulate(stims_dict, simulation_time, params=None)`
63
+ Compatibility wrapper used by the existing call sites.
64
+ 2. `get_simulator()`
65
+ Returns the singleton backend instance.
66
+ 3. `NN`
67
+ Constructor used by `Project.load_external_simulator()` when a module exposes a class-based backend entry point.
68
+ 4. A singleton instance such as `_SIMULATOR = Elise()`.
69
+
70
+ This keeps the current GUI and project logic simple while still allowing a class-based implementation internally.
71
+
72
+ When restoring an archive, `Project` calls the backend instance's optional
73
+ `migrate_project(project)` method after loading the simulator and project data.
74
+ Backends can use this hook to upgrade their own legacy stimulus formats. The
75
+ ELISE implementation keeps these conversions, its example project factory
76
+ (`create_project()`), and teaching-pattern helpers in
77
+ `src/neuroseq/example_models/elise.py`. The example menu registers a small
78
+ wrapper in `example_projects/networks/elise_project.py` that delegates to this factory.
79
+
80
+ Example project factories live in `src/neuroseq/example_projects/`, with one
81
+ project per file under `neurons/` or `networks/`. The package's `__init__.py`
82
+ exports the factories and imports them in their existing menu order.
83
+ `_registry.py` provides the `register_example_project` decorator. New examples
84
+ should define a decorated factory in the appropriate folder, import it in
85
+ the package entry point, and add it to `__all__` so it is exported and appears
86
+ in the example-project menu.
87
+
88
+ ## Expected Data Flow
89
+
90
+ The external simulator call path is:
91
+
92
+ 1. The GUI collects stimulus arrays into `stims_dict`.
93
+ 2. `Project.load_external_simulator()` loads either:
94
+ a. a built-in NeuroSeq simulator module such as `neuroseq:elise`, or
95
+ b. a Python file containing a `simulate(...)` entry point.
96
+ 3. The backend `simulate(...)` method returns an `Experiment`.
97
+ 4. The GUI offers the returned experiment for import or append into the project.
98
+
99
+ ## Minimal Template
100
+
101
+ ```python
102
+ from collections.abc import Mapping
103
+
104
+ from neuroseq.data import Experiment
105
+ from neuroseq.example_models.NN import ParamValue
106
+ from neuroseq.example_models.NN import NN
107
+
108
+ DEFAULT_PARAMS = {
109
+ "example_param": {
110
+ "value": 1.0,
111
+ "default": 1.0,
112
+ "type": "float",
113
+ "group": "General",
114
+ "description": "Example parameter.",
115
+ }
116
+ }
117
+
118
+
119
+ class MyBackend(NN):
120
+ def __init__(self) -> None:
121
+ super().__init__(DEFAULT_PARAMS)
122
+ self._runtime = None
123
+
124
+ def reset(self) -> None:
125
+ self._runtime = None
126
+ self._simulated_time_s = 0.0
127
+
128
+ def simulate(
129
+ self,
130
+ stims_dict: dict,
131
+ simulation_time: float,
132
+ params: Mapping[str, ParamValue] | None = None,
133
+ ) -> Experiment:
134
+ self.update_params(params)
135
+ # build or reuse runtime state
136
+ # run the backend
137
+ # return Experiment(...)
138
+ raise NotImplementedError
139
+
140
+
141
+ def simulate(stims_dict, simulation_time, params=None):
142
+ return _SIMULATOR.simulate(stims_dict, simulation_time, params=params)
143
+
144
+
145
+ def get_simulator() -> MyBackend:
146
+ return _SIMULATOR
147
+
148
+
149
+ _SIMULATOR = MyBackend()
150
+ ```
151
+
152
+ ## Notes
153
+
154
+ 1. The GUI parameter editor consumes the schema stored in `project.external_simulate_params`, so schema keys and value types should remain simple.
155
+ 2. The `Experiment` returned by the backend should be self-contained for the run chunk that was just simulated.
156
+ 3. If the backend is stateful, use `self._simulated_time_s` to align repeated runs with previously simulated time.