physion 1.1__tar.gz → 1.2__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.
- {physion-1.1/src/physion.egg-info → physion-1.2}/PKG-INFO +11 -4
- {physion-1.1 → physion-1.2}/README.md +10 -3
- {physion-1.1 → physion-1.2}/pyproject.toml +1 -1
- {physion-1.1 → physion-1.2}/src/physion/__main__.py +6 -2
- physion-1.2/src/physion/acquisition/protocols/black-grey-white-20s-each-x5.json +16 -0
- physion-1.2/src/physion/acquisition/protocols/injection-monitoring.json +38 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/run.py +10 -5
- {physion-1.1 → physion-1.2}/src/physion/acquisition/tools.py +0 -8
- physion-1.2/src/physion/analysis/__init__.py +3 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/read_NWB.py +43 -13
- {physion-1.1 → physion-1.2}/src/physion/assembling/add_ophys.py +5 -3
- {physion-1.1 → physion-1.2}/src/physion/assembling/nwb.py +165 -107
- {physion-1.1 → physion-1.2}/src/physion/assembling/realign_from_photodiode.py +9 -6
- {physion-1.1 → physion-1.2}/src/physion/assembling/update_metadata.py +2 -0
- physion-1.2/src/physion/behavior/convert_to_movie.py +119 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/episodes/evoked_raster.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/dataviz/imaging.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/dataviz/plots.py +0 -1
- physion-1.2/src/physion/dataviz/protocols/template.py +32 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/snapshot.py +1 -1
- {physion-1.1 → physion-1.2}/src/physion/facemotion/gui.py +24 -24
- {physion-1.1 → physion-1.2}/src/physion/facemotion/process.py +19 -18
- {physion-1.1 → physion-1.2}/src/physion/gui/main.py +16 -2
- {physion-1.1 → physion-1.2}/src/physion/gui/menu.py +4 -1
- {physion-1.1 → physion-1.2}/src/physion/gui/parts.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/imaging/bruker/xml_parser.py +6 -3
- {physion-1.1 → physion-1.2}/src/physion/imaging/convert_to_movie.py +108 -89
- {physion-1.1 → physion-1.2}/src/physion/imaging/gui.py +13 -0
- physion-1.1/src/physion/assembling/IO/suite2p_to_nwb.py → physion-1.2/src/physion/imaging/suite2p/to_nwb.py +17 -6
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/acquisition.py +1 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/analysis.py +22 -26
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/tools.py +42 -20
- {physion-1.1 → physion-1.2}/src/physion/pupil/gui.py +33 -30
- {physion-1.1 → physion-1.2}/src/physion/pupil/process.py +7 -8
- physion-1.2/src/physion/utils/camera.py +210 -0
- physion-1.2/src/physion/utils/management/delete.py +96 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/adjust_plots.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/export.py +1 -1
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/morphologies.py +1 -1
- physion-1.2/src/physion/utils/transfer/__init__.py +0 -0
- physion-1.2/src/physion/utils/transfer/__main__.py +32 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/transfer/gui.py +7 -24
- physion-1.2/src/physion/utils/transfer/types.py +77 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/main.py +36 -13
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/center_drifting_grating.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/gaussian_blob.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/line_moving_dots.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/looming_stim.py +2 -2
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/natural_image.py +2 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/scattered_moving_dots.py +3 -4
- {physion-1.1 → physion-1.2/src/physion.egg-info}/PKG-INFO +11 -4
- {physion-1.1 → physion-1.2}/src/physion.egg-info/SOURCES.txt +9 -9
- physion-1.1/src/physion/analysis/__init__.py +0 -3
- physion-1.1/src/physion/assembling/IO/__init__.py +0 -1
- physion-1.1/src/physion/assembling/IO/bruker_data.py +0 -185
- physion-1.1/src/physion/assembling/IO/bruker_xml_parser.py +0 -154
- physion-1.1/src/physion/behavior/convert_to_movie.py +0 -139
- physion-1.1/src/physion/dataviz/protocols/__init__.py +0 -1
- physion-1.1/src/physion/hardware/DummyCamera.py +0 -145
- physion-1.1/src/physion/hardware/FLIRCamera.py +0 -151
- physion-1.1/src/physion/hardware/ThorlabsCamera.py +0 -194
- physion-1.1/src/physion/imaging/suite2p/to_nwb.py +0 -195
- {physion-1.1 → physion-1.2}/LICENSE +0 -0
- {physion-1.1 → physion-1.2}/setup.cfg +0 -0
- {physion-1.1 → physion-1.2}/src/physion/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Adrianna-Bacci-2P.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Jo-Bacci-2P.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Taddy-A1-2P.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Troubleshooting.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Yann-A1-2P.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/configs/Yann-Bacci-2P.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/gui.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/FFDG-contrast-curve+blank.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/Light-Levels-Symmetric-5b-5g-10blank-5g-5b.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/Millman-et-al-2020.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/NDNF-protocol.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/drifting-gratings.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/ff-gratings-2orientations-8contrasts-15repeats.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/ff-gratings-8orientation-2contrasts-15repeats.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/old-NDNF-protocol.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/quick-spatial-mapping.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/size-tuning-protocol-linear.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/size-tuning-protocol-log-long.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/size-tuning-protocol-log.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/size-tuning-protocol-long.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/spatial-mapping.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/protocols/stim-demo.json +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/recordings/Scan1Plane_Screen342V.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/recordings/Scan1Plane_Screen356VOffPeriodScan.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/recordings/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/acquisition/settings.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/behavior.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/dataframe.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/process_NWB.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/FFDG.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/FFDG_with_blank.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/Light_Levels.py +0 -0
- {physion-1.1/src/physion/assembling → physion-1.2/src/physion/analysis/protocols}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/contrast_curves.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/size_tuning.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/protocols/spatial_mapping.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/stat_tools.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/summary_pdf.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/tools.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/analysis/trial_averaging.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/assembling/FOV_coordinates.py +0 -0
- {physion-1.1/src/physion/behavior → physion-1.2/src/physion/assembling}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/assembling/gui.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/assembling/tools.py +0 -0
- {physion-1.1/src/physion/dataviz/dataframe → physion-1.2/src/physion/behavior}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/behavior/locomotion.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/FOV.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/camera.py +0 -0
- {physion-1.1/src/physion/electrophy → physion-1.2/src/physion/dataviz/dataframe}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/episodes/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/episodes/behavior.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/episodes/trial_average.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/gui.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/movie.py +0 -0
- {physion-1.1/src/physion/analysis → physion-1.2/src/physion/dataviz}/protocols/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/pupil.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/raw.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/dataviz/tools.py +0 -0
- {physion-1.1/src/physion/facemotion → physion-1.2/src/physion/electrophy}/__init__.py +0 -0
- {physion-1.1/src/physion/gui → physion-1.2/src/physion/facemotion}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/facemotion/roi.py +0 -0
- {physion-1.1/src/physion/hardware/Dummy → physion-1.2/src/physion/gui}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/gui/calendar.py +0 -0
- {physion-1.1/src/physion/hardware/FLIRcamera → physion-1.2/src/physion/hardware/Dummy}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Dummy/camera.py +0 -0
- {physion-1.1/src/physion/hardware/LogitechWebcam → physion-1.2/src/physion/hardware/FLIRcamera}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/FLIRcamera/export.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/FLIRcamera/launch.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/FLIRcamera/main.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/FLIRcamera/test.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Igor/hdf5.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Igor/igor.py +0 -0
- {physion-1.1/src/physion/hardware/RaspberryPi → physion-1.2/src/physion/hardware/LogitechWebcam}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/LogitechWebcam/main.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/LogitechWebcam/test.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/config.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/inputs_for_screen.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/main.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/pulse.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/recording.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/steps.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/subprocess.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/test.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/NIdaq/zero_AO.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/QCamera/camera_core_test.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/QCamera/frame_rate_test.py +0 -0
- {physion-1.1/src/physion/hardware/Thorlabs → physion-1.2/src/physion/hardware/RaspberryPi}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/RaspberryPi/main.py +0 -0
- {physion-1.1/src/physion/hardware → physion-1.2/src/physion/hardware/Thorlabs}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Thorlabs/cam_test.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Thorlabs/thorcam.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Thorlabs/tkinter_camera_live_view.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/Thorlabs/usb_camera.py +0 -0
- {physion-1.1/src/physion/hardware/zaber_stage → physion-1.2/src/physion/hardware}/__init__.py +0 -0
- {physion-1.1/src/physion/imaging/bruker → physion-1.2/src/physion/hardware/zaber_stage}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/hardware/zaber_stage/main.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/Calcium.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/__init__.py +0 -0
- {physion-1.1/src/physion/imaging/suite2p → physion-1.2/src/physion/imaging/bruker}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/dcnv.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/red_label.py +0 -0
- {physion-1.1/src/physion/intrinsic → physion-1.2/src/physion/imaging/suite2p}/__init__.py +0 -0
- {physion-1.1/src/physion/assembling/IO → physion-1.2/src/physion/imaging/suite2p}/binary.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/suite2p/default_ops.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/suite2p/preprocessing.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/imaging/suite2p/presets.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/RetinotopicMapping.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/SS_analysis.py +0 -0
- {physion-1.1/src/physion/pupil → physion-1.2/src/physion/intrinsic}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/build_protocols.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/pdf.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/intrinsic/somatosensory.py +0 -0
- {physion-1.1/src/physion/utils/management → physion-1.2/src/physion/pupil}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/pupil/outliers.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/pupil/roi.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/__init__.py +0 -0
- {physion-1.1/src/physion/imaging/suite2p → physion-1.2/src/physion/utils}/binary.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/files.py +0 -0
- {physion-1.1/src/physion/assembling/IO → physion-1.2/src/physion/utils}/hdf5.py +0 -0
- {physion-1.1/src/physion/utils/sharing → physion-1.2/src/physion/utils/management}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/matplotlib_style.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/misc.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/npz.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/paths.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_export.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/setup.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/annotations.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/bar.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/colors.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/figure.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/inset.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/legend.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/line.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/pie.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/scatter.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/time_freq.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/src/violin.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/style-sheets/dark-notebook.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/style-sheets/dark.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/style-sheets/manuscript.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/tests/Notebook.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/plot_tools/tests/envs.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/progressBar.py +0 -0
- {physion-1.1/src/physion/utils/transfer → physion-1.2/src/physion/utils/sharing}/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/utils/sharing/prepare_nwb_files.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/build.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/gamma-correction.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/preprocess_NI.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/screens.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/show.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/__init__.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/center_grating.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/flickering_bar.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/oscillDG.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/random_dots.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/template.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/stimuli/uniform_bg.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/tests/opencv.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/tests/psychopy.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion/visual_stim/tests/qt.py +0 -0
- {physion-1.1 → physion-1.2}/src/physion.egg-info/dependency_links.txt +0 -0
- {physion-1.1 → physion-1.2}/src/physion.egg-info/requires.txt +0 -0
- {physion-1.1 → physion-1.2}/src/physion.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: physion
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2
|
|
4
4
|
Summary: Vision Physiology Software
|
|
5
5
|
Author-email: Yann Zerlaut <yann.zerlaut@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/yzerlaut/physion
|
|
@@ -29,9 +29,10 @@ Requires-Dist: ffmpeg-python
|
|
|
29
29
|
Requires-Dist: pyqt5
|
|
30
30
|
Requires-Dist: openpyxl
|
|
31
31
|
|
|
32
|
-
<!--
|
|
33
|
-
<!-- python -m build
|
|
32
|
+
<!-- ** Build Instructions ** -->
|
|
33
|
+
<!-- python -m build -->
|
|
34
34
|
<!-- python -m twine upload --repository pypi dist/* -->
|
|
35
|
+
<!-- -->
|
|
35
36
|
|
|
36
37
|
<div><img src="./docs/icons/physion.png" alt="physion logo" width="35%" align="right" style="margin-left: 10px"></div>
|
|
37
38
|
|
|
@@ -53,7 +54,13 @@ The different modules are detailed in the [documentation below](README.md#module
|
|
|
53
54
|
|
|
54
55
|
## Install
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
Create a `"physion"` environment running `python 3.11`, with:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
conda create -n "physion" python=3.11
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then simply:
|
|
57
64
|
```
|
|
58
65
|
pip install physion
|
|
59
66
|
```
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
<!-- python -m build
|
|
1
|
+
<!-- ** Build Instructions ** -->
|
|
2
|
+
<!-- python -m build -->
|
|
3
3
|
<!-- python -m twine upload --repository pypi dist/* -->
|
|
4
|
+
<!-- -->
|
|
4
5
|
|
|
5
6
|
<div><img src="./docs/icons/physion.png" alt="physion logo" width="35%" align="right" style="margin-left: 10px"></div>
|
|
6
7
|
|
|
@@ -22,7 +23,13 @@ The different modules are detailed in the [documentation below](README.md#module
|
|
|
22
23
|
|
|
23
24
|
## Install
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
Create a `"physion"` environment running `python 3.11`, with:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
conda create -n "physion" python=3.11
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then simply:
|
|
26
33
|
```
|
|
27
34
|
pip install physion
|
|
28
35
|
```
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import sys
|
|
1
|
+
import sys, os
|
|
2
2
|
from PyQt5 import QtWidgets
|
|
3
3
|
|
|
4
4
|
from physion.gui.main import MainWindow
|
|
@@ -10,7 +10,11 @@ try:
|
|
|
10
10
|
except ModuleNotFoundError:
|
|
11
11
|
pass
|
|
12
12
|
|
|
13
|
-
GUI = MainWindow(app
|
|
13
|
+
GUI = MainWindow(app,
|
|
14
|
+
filename=sys.argv[-1] if (('.nwb' in sys.argv[-1]) and \
|
|
15
|
+
os.path.isfile(sys.argv[-1])) else None,
|
|
16
|
+
folder=sys.argv[-1] if ((len(sys.argv)>1) and \
|
|
17
|
+
os.path.isdir(sys.argv[-1])) else None)
|
|
14
18
|
|
|
15
19
|
sys.exit(app.exec_())
|
|
16
20
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Presentation": "Stimuli-Sequence",
|
|
3
|
+
"Stimulus": "uniform-bg",
|
|
4
|
+
"Screen": "Dell-2020",
|
|
5
|
+
"movie_refresh_freq":30,
|
|
6
|
+
"presentation-duration": 20,
|
|
7
|
+
"presentation-blank-screen-color": 0.5,
|
|
8
|
+
"presentation-prestim-period": 2,
|
|
9
|
+
"presentation-poststim-period": 2,
|
|
10
|
+
"presentation-interstim-period": 0,
|
|
11
|
+
"N-repeat": 5,
|
|
12
|
+
"starting-index": 0,
|
|
13
|
+
"bg-color-1": 0.0,
|
|
14
|
+
"bg-color-2": 1.0,
|
|
15
|
+
"N-bg-color": 3
|
|
16
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Presentation": "Stimuli-Sequence",
|
|
3
|
+
"Stimulus": "center-grating",
|
|
4
|
+
"Screen": "Dell-2020",
|
|
5
|
+
"shuffling-seed": 1,
|
|
6
|
+
"movie_refresh_freq":30.0,
|
|
7
|
+
"units":"lin-deg",
|
|
8
|
+
"presentation-duration": 2,
|
|
9
|
+
"presentation-prestim-period": 10,
|
|
10
|
+
"presentation-poststim-period": 10,
|
|
11
|
+
"presentation-interstim-period": 8,
|
|
12
|
+
"presentation-blank-screen-color": 0.5,
|
|
13
|
+
"N-repeat": 38,
|
|
14
|
+
"angle-1": 0,
|
|
15
|
+
"angle-2": 157.5,
|
|
16
|
+
"N-angle": 8,
|
|
17
|
+
"spatial-freq-1": 0.04,
|
|
18
|
+
"spatial-freq-2": 0.04,
|
|
19
|
+
"N-spatial-freq": 0,
|
|
20
|
+
"radius-1": 200,
|
|
21
|
+
"radius-2": 200,
|
|
22
|
+
"N-radius": 0,
|
|
23
|
+
"x-center-1": 0.0,
|
|
24
|
+
"x-center-2": 0.0,
|
|
25
|
+
"N-x-center": 0,
|
|
26
|
+
"y-center-1": 0.0,
|
|
27
|
+
"y-center-2": 0.0,
|
|
28
|
+
"N-y-center": 0,
|
|
29
|
+
"contrast-1": 1.0,
|
|
30
|
+
"contrast-2": 1.0,
|
|
31
|
+
"N-contrast": 1,
|
|
32
|
+
"bg-color-1": 0.5,
|
|
33
|
+
"bg-color-2": 0.5,
|
|
34
|
+
"N-bg-color": 0,
|
|
35
|
+
"phase-1": 90.0,
|
|
36
|
+
"phase-2": 90.0,
|
|
37
|
+
"N-phase": 0
|
|
38
|
+
}
|
|
@@ -59,10 +59,7 @@ def init_VisualStim(self):
|
|
|
59
59
|
p = self.protocol.copy() # a copy of the protocol data for saving
|
|
60
60
|
p['no-window'] = True
|
|
61
61
|
stim = build_VisualStim(p)
|
|
62
|
-
|
|
63
|
-
'visual-stim.npy'), stim.experiment)
|
|
64
|
-
print('[ok] Visual-stimulation data saved as "%s"' %\
|
|
65
|
-
os.path.join(self.date_time_folder, 'visual-stim.npy'))
|
|
62
|
+
stim.save(self.date_time_folder) # writes visual-stim.npy & protocol.json
|
|
66
63
|
|
|
67
64
|
self.max_time = stim.experiment['time_stop'][-1]+\
|
|
68
65
|
stim.experiment['time_start'][0]
|
|
@@ -148,7 +145,14 @@ def run(self):
|
|
|
148
145
|
|
|
149
146
|
NIdaq_metadata_init(self)
|
|
150
147
|
|
|
151
|
-
if
|
|
148
|
+
if self.onlyDemoButton.isChecked():
|
|
149
|
+
np.save(os.path.join(self.date_time_folder, 'NIdaq.start.npy'),
|
|
150
|
+
time.time()*np.ones(1))
|
|
151
|
+
np.save(os.path.join(self.date_time_folder, 'NIdaq.npy'),
|
|
152
|
+
{'analog':np.zeros((1,20000)),
|
|
153
|
+
'digital':np.zeros((1,20000)),
|
|
154
|
+
'dt':1e-2})
|
|
155
|
+
else:
|
|
152
156
|
try:
|
|
153
157
|
self.acq = Acquisition(\
|
|
154
158
|
sampling_rate=\
|
|
@@ -164,6 +168,7 @@ def run(self):
|
|
|
164
168
|
print(e)
|
|
165
169
|
print('\n [!!] PB WITH NI-DAQ [!!] \n')
|
|
166
170
|
self.acq = None
|
|
171
|
+
|
|
167
172
|
|
|
168
173
|
# saving all metadata after full initialization:
|
|
169
174
|
self.save_experiment(self.metadata)
|
|
@@ -50,14 +50,6 @@ def save_experiment(self, metadata):
|
|
|
50
50
|
'%s.xlsx' % self.subjectBox.currentText()))
|
|
51
51
|
print('[ok] Subject data saved as: %s.xlsx' % self.subjectBox.currentText())
|
|
52
52
|
|
|
53
|
-
# SAVING THE PROTOCOL FILE
|
|
54
|
-
if self.protocolBox.currentText()!='None':
|
|
55
|
-
shutil.copy(os.path.join(base_path, 'protocols',
|
|
56
|
-
self.protocolBox.currentText()+'.json'),
|
|
57
|
-
filename.replace('metadata', 'protocol'))
|
|
58
|
-
|
|
59
|
-
print('[ok] Protocol data saved as: protocol.json ')
|
|
60
|
-
|
|
61
53
|
|
|
62
54
|
|
|
63
55
|
def get_subject_props(self, filename=None):
|
|
@@ -502,7 +502,6 @@ class Data:
|
|
|
502
502
|
################################################
|
|
503
503
|
|
|
504
504
|
def init_visual_stim(self, verbose=True):
|
|
505
|
-
self.metadata['load_from_protocol_data'], self.metadata['no-window'] = False, True
|
|
506
505
|
self.metadata['verbose'] = verbose
|
|
507
506
|
self.visual_stim = build_stim(self.metadata)
|
|
508
507
|
|
|
@@ -590,44 +589,73 @@ class Data:
|
|
|
590
589
|
|
|
591
590
|
def list_subquantities(self, quantity):
|
|
592
591
|
if quantity=='CaImaging':
|
|
593
|
-
return ['rawFluo', '
|
|
594
|
-
'F-0.7*Fneu', 'F-Fneu', 'd(F-Fneu)', 'd(F-0.7*Fneu)']
|
|
592
|
+
return ['rawFluo', 'neuropil', 'dFoF', 'Deconvolved']
|
|
595
593
|
else:
|
|
596
594
|
return ['']
|
|
597
595
|
|
|
598
596
|
|
|
599
597
|
|
|
600
598
|
def scan_folder_for_NWBfiles(folder,
|
|
599
|
+
for_protocol=None,
|
|
600
|
+
for_protocols=[],
|
|
601
601
|
sorted_by='filename',
|
|
602
602
|
Nmax=1000000,
|
|
603
603
|
exclude_intrinsic_imaging_files=True,
|
|
604
604
|
verbose=True):
|
|
605
605
|
"""
|
|
606
|
-
scan folders for protocols and returns a
|
|
606
|
+
scan folders for protocols and returns a list of datafiles
|
|
607
607
|
|
|
608
|
-
by default:
|
|
608
|
+
by default: excludes the intrinsic imaging files
|
|
609
609
|
"""
|
|
610
610
|
if verbose:
|
|
611
611
|
print('inspecting the folder "%s" [...]' % folder)
|
|
612
612
|
t0 = time.time()
|
|
613
613
|
|
|
614
|
-
|
|
614
|
+
if (for_protocol is not None) and (len(for_protocols)==0):
|
|
615
|
+
for_protocols = [for_protocol]
|
|
616
|
+
|
|
617
|
+
FILES0 = get_files_with_extension(folder,
|
|
615
618
|
extension='.nwb', recursive=True)
|
|
616
619
|
|
|
617
620
|
if exclude_intrinsic_imaging_files:
|
|
618
|
-
|
|
621
|
+
FILES0 = [f for f in FILES0 if (('left-' not in f) and\
|
|
619
622
|
('down-' not in f) and\
|
|
620
623
|
('right-' not in f) and\
|
|
621
624
|
('up-' not in f))]
|
|
622
625
|
|
|
623
|
-
DATES = np.array([f.split(os.path.sep)[-1].split('-')[0] for f in
|
|
624
|
-
SUBJECTS, PROTOCOLS = [], []
|
|
626
|
+
DATES = np.array([f.split(os.path.sep)[-1].split('-')[0] for f in FILES0])
|
|
627
|
+
FILES, SUBJECTS, PROTOCOLS, PROTOCOL_IDS = [], [], [], []
|
|
628
|
+
|
|
629
|
+
for f in FILES0[:Nmax]:
|
|
625
630
|
|
|
626
|
-
for f in FILES[:Nmax]:
|
|
627
631
|
try:
|
|
628
632
|
data = Data(f, metadata_only=True, verbose=False)
|
|
629
|
-
|
|
630
|
-
|
|
633
|
+
|
|
634
|
+
if len(for_protocols)>0:
|
|
635
|
+
|
|
636
|
+
# we look for specific protocols
|
|
637
|
+
iProtocols, Protocols = [], []
|
|
638
|
+
for protocol in for_protocols:
|
|
639
|
+
iP = np.flatnonzero(data.protocols==protocol)
|
|
640
|
+
if len(iP)==1:
|
|
641
|
+
iProtocols.append(iP[0])
|
|
642
|
+
Protocols.append(data.protocols[iP[0]])
|
|
643
|
+
|
|
644
|
+
if len(Protocols)>0:
|
|
645
|
+
# if it has at least one protocol, we include it
|
|
646
|
+
FILES.append(f)
|
|
647
|
+
PROTOCOLS.append(Protocols)
|
|
648
|
+
PROTOCOL_IDS.append(iProtocols)
|
|
649
|
+
SUBJECTS.append(data.metadata['subject_ID'])
|
|
650
|
+
|
|
651
|
+
else:
|
|
652
|
+
|
|
653
|
+
# we include with all protocols
|
|
654
|
+
FILES.append(f)
|
|
655
|
+
PROTOCOLS.append(data.protocols)
|
|
656
|
+
PROTOCOL_IDS.append(range(len(data.protocols)))
|
|
657
|
+
SUBJECTS.append(data.metadata['subject_ID'])
|
|
658
|
+
|
|
631
659
|
except BaseException as be:
|
|
632
660
|
SUBJECTS.append('N/A')
|
|
633
661
|
if verbose:
|
|
@@ -635,7 +663,8 @@ def scan_folder_for_NWBfiles(folder,
|
|
|
635
663
|
print('\n [!!] Pb with "%s" \n' % f)
|
|
636
664
|
|
|
637
665
|
if verbose:
|
|
638
|
-
print(' -> found n=%i datafiles (in %.1fs) ' % (len(FILES),
|
|
666
|
+
print(' -> found n=%i datafiles (in %.1fs) ' % (len(FILES),
|
|
667
|
+
(time.time()-t0)))
|
|
639
668
|
|
|
640
669
|
# sorted by filename
|
|
641
670
|
|
|
@@ -652,4 +681,5 @@ def scan_folder_for_NWBfiles(folder,
|
|
|
652
681
|
return {'files':np.array(FILES)[isorted],
|
|
653
682
|
'dates':np.array(DATES)[isorted],
|
|
654
683
|
'subjects':np.array(SUBJECTS)[isorted],
|
|
684
|
+
'protocol_ids':[PROTOCOL_IDS[i] for i in isorted],
|
|
655
685
|
'protocols':[PROTOCOLS[i] for i in isorted]}
|
|
@@ -11,11 +11,13 @@ sys.path.append(str(pathlib.Path(__file__).resolve().parents[2]))
|
|
|
11
11
|
# import the 2P trigger delay from the acquisition module !
|
|
12
12
|
from physion.acquisition.recordings.Scan1Plane_Screen342V import TwoP_trigger_delay
|
|
13
13
|
|
|
14
|
-
from physion.
|
|
15
|
-
from physion.
|
|
14
|
+
from physion.imaging.bruker.xml_parser import bruker_xml_parser
|
|
15
|
+
from physion.imaging.suite2p.to_nwb import add_ophys_processing_from_suite2p
|
|
16
|
+
|
|
16
17
|
from physion.utils.files import get_files_with_extension, get_TSeries_folders
|
|
18
|
+
from physion.utils.binary import BinaryFile
|
|
19
|
+
|
|
17
20
|
from physion.assembling.tools import build_subsampling_from_freq
|
|
18
|
-
from physion.assembling.IO.suite2p_to_nwb import add_ophys_processing_from_suite2p
|
|
19
21
|
from physion.utils.paths import FOLDERS, python_path
|
|
20
22
|
from physion.analysis.read_NWB import Data
|
|
21
23
|
|