|
| 1 | +# 2.0.0-rc.1 |
| 2 | + |
| 3 | +## Contributions |
| 4 | + |
| 5 | +This version contains major refactoring efforts and features. We anticipate a few additional refactor efforts in the near term based on feature requests from the community and (CAMBI)[cambi.tech]. These will support multi-modality, data sharing, and more complex language modeling. We are utilizing a release candidate to make features and bugfixes available sooner despite the full second version being in-progress. Thank you for your understanding and continued support! All pull requests in Github from #123 until #217 represent the 2.0.0-rc.1 work. |
| 6 | + |
| 7 | +The highlights: |
| 8 | + |
| 9 | +- `Acquisition Enhancements`: multi-modal support and better performance overall! #171, #174 |
| 10 | +- `Language Model Refactor`: deprecation of docker base models. Addition of `LanguageModel` base class, `UniformLanguageModel` and a hugggingface model `GPT2LanguageModel`. #207 |
| 11 | +- `Signal Model Refactor`: Refactor with base class definitions and general cleanup. PcaRdaKde model updates to decrease training time and limit the magnitude of likelihood responses. #132, #140, #141, #147, #208 |
| 12 | +- `Matrix Display: SCP`: A single character flash Matrix speller is now integrated. A `MatrixDisplay` and accompanying `MatrixCalibration` + `Matrix Time Test Calibration`. #192, #205, #213 |
| 13 | +- `Inquiry Preview`: a mode in RSVP spelling that allows a user to see an inquiry before it is presented in a serial fashion. The user may also engage with the preview using a key press; either to confirm or skip an inquiry. See below for more details. |
| 14 | +- `GUI updates`: all BciPy core GUIs and methods are converted to PyQt5 for better cross-platform availability and tooling. See below for more details. |
| 15 | +- `Linux compatibility`: with the upgrading of dependencies and a helpful shell script (see `scripts/shell/linux_requirements.sh`) for setting up new machines, we are linux compatible. See below for more details. |
| 16 | +- `Prestimulus buffer and Inquiry Based Training` - support to add prestimulus data to reshaping and data queries to permit better filter application. Additionally, use this buffer and the inquiry reshaper to mimic data experienced in real time during training in offline_analysis.py #208 |
| 17 | + |
| 18 | +The details (incomplete, our apologies!): |
| 19 | + |
| 20 | +### Added |
| 21 | + |
| 22 | +- `Makefile`: `run-with-defaults` make command for running `bcipy` and `viewer` command for running the data viewer #149 |
| 23 | +- `.bcipy/README.md`: describes experiments and fields in greater detail #156 |
| 24 | +- `signal/process/filter.py`: add `Notch` and `Bandpass` as classes #147 |
| 25 | +- `signal/process/transform.py`: add `Composition`, `Downsample`, and `get_default_transform` #147 |
| 26 | +- `helpers/visualization.py`: moved plot_edf function from demo to this module #126 |
| 27 | +- `helpers/raw_data.py`: module for raw data format support in BciPy #160 |
| 28 | +- `helpers/load.py`: add `load_users` method for extracting user names from data save location #125 add extract_mode method for determining the mode #126 |
| 29 | +- `helpers/task/`: add `Reshaper`, refactor trial reshaper and add inquiry reshaper #147 add `get_key_press` method with custom stamp argument. #129 |
| 30 | +- `helpers/stimuli.StimuliOrder`: defined ordering of inquiry stimuli. The current approach is to randomize. This adds an alphabetical option. #153 |
| 31 | +- `helpers/stimuli.alphabetize`: method for taking a list of strings and returning them in alphabetical order with characters last in the list. #153 |
| 32 | +- `helpers/validate`: `_validate_experiment_fields` and `validate_experiments`: validates experiments and fields in the correct format #156 |
| 33 | +- `bcipy/helpers/system_utils`: add report execution decorator #163 |
| 34 | +- `scripts/shell/linux_requirements.sh`: add script for installing necessary dependencies on linux systems #167 |
| 35 | +- `.github/workflows/main.yml`: adds support for CI in BciPy #166 |
| 36 | +- `bcipy/gui/file_dialog.py`: PyQt5 window for prompting for file locations #168 |
| 37 | +- `display/paradigm/matrix`: added MatrixDisplay class with single-character presentation (SCP). #180 |
| 38 | + |
| 39 | +### Updated |
| 40 | + |
| 41 | +- `LICENSE.md`: to used the Hippocratic license 2.1 |
| 42 | +- `CODE_OF_CONDUCT.md`: to latest version of the Contributor Covenant |
| 43 | +- `README.md`: Add new glossary terms: mode, session and task #126 #127 and cleanup #129 |
| 44 | +- `bcipy/main.py`: formally, `bci_main.py`. To give a better console entry point and infrastructure for integration testing. In the terminal, you can now run `bcipy` instead of `python bci_main.py` |
| 45 | +- `parameters.json`: add stim_order #153 add max selections #175 remove max_inq_per_trial in favor of max_inq_per_series #176 add inquiry preview #177 with relevant stimuli units in help text, better starting stim_height, and inquiry preview keys #216 |
| 46 | +- `demo_stimuli_generation.py`: update imports and add a case showing the new ordering functionality. #153 |
| 47 | +- `copy_phrase_wrapper`: update logging and exception handling. add stim order. #153 BUGFIX: return transformed sampling rate #159 |
| 48 | +- `random_rsvp_calibration_inq_gen`: rename to `calibration_inquiry_generator` #153 |
| 49 | +- `ExperimentField.py`: updated to use new alert types with timeouts #156 |
| 50 | +- `ExperimentRegistry.py`: add the ability to toggle anonymization of field data and use new alert types with timeouts #156 |
| 51 | +- `FieldRegistry.py`: updated to use new alert types with timeout #156 |
| 52 | +- `gui/BCInterface.py`: use `load_users` method to populate user dropdown and remove internal BCInterface load method #125 |
| 53 | +- `gui/gui_main.py`: update to return a value in FormInput, set a value for IntegerInput only if provided #156 |
| 54 | +- `gui/viewer/data_viewer.py`: Replaced the original WxPython version of the signal data viewer with the new PyQt version #157. Use signal process filters instead of duplicating logic #147. |
| 55 | +- `gui/viewer/file_viewer.py`: to use new raw data format #160 |
| 56 | +- `bcipy/acquisition`: refactored acquisition to support multi-modal acquisition and more performant real-time acquisition. These changes were significant and across multiple PRs. Support for new raw data format #160 |
| 57 | +- `ring_buffer_test.py` -> `test_ring_buffer.py`: to comply with naming conventions #156 |
| 58 | +- `signal/model/base_model.py`: add reshaper to base model class, requiring it to be defined in all models and return a `Reshaper`. Fix return types. #147 |
| 59 | +- `signal/model/offline_analysis.py`: updated to use new reshapers and transforms. #147 updated to report execution time and logging levels #163 |
| 60 | +- `bcipy/language_model/` --> `bcipy/language/` refactor for clarity and add base class `LanguageModel` #164 |
| 61 | +- `bcipy/tasks` --> `bcipy/task`: refactor for clarity, add README, organize tasks under paradigm #162 organize tasks operation objects into `control` module #162 #178 |
| 62 | +- `task/paradigm/rsvp/copy_phrase.py`: refactored overall #146 to use new Session classes #127 and updated to use new reshapers and transforms #147 implements current state of inquiry preview #129 #177 to account for max selection parameter #175 fix targetness #179 |
| 63 | +- `bcipy/task/data.py`: to track number of decisions made #175 |
| 64 | +- `task/control/handler.py`: added the ability to set constants in defined stimuli agent #178 |
| 65 | +- `task/control/query.py`: remove redundant best_selection in favor of one with constants. Implemented constants in return_stimuli methods. #178 |
| 66 | +- `display/rsvp/display.py`: refactored to use new trigger pulse and ensure it occurs only on first display call (whether that be `do_inquiry` or `preview_inquiry`) #149 Overall refactoring of properties into `StimuliProperties`, `InformationProperties`, `TaskDisplayProperties`. Added `PreviewInquiryProperties` and `preview_inquiry` kwarg. Add full-screen parameter to help with scaling stimuli. Add textbox to self.`_create_stimulus`. Add `preview_inquiry` and `_generate_inquiry_preview` methods. #129 |
| 67 | +- `static/images/gui_images`: updated to `gui` and refactored where defined #149 |
| 68 | +- `bcipy/display/main.py`: move `StimuliProperties`, `InformationProperties`, `TaskDisplayProperties` and `PreviewInquiryProperties` to higher level #180 |
| 69 | + |
| 70 | + |
| 71 | +- `helpers/stimuli.py `: refactored for clarity and add `get_fixation` method #149 glossary updates and remove unneeded code #178 fix targetness in copy phrase #179 |
| 72 | +- `helpers/triggers.py`: refactored `_calibration_trigger for clarity` and add `CalibrationType`(deprecating sound and adding text) #149 add an offset correction method #126 |
| 73 | +- `helpers/load.py`: updated to use new raw data format #160 |
| 74 | +- `helpers/convert.py`: mode, write_targetness, and annotation_channels keyword arguments #126 add compression/decompression support for experiments and BciPy session data #173 |
| 75 | +- `helpers/session.py`: refactored session helpers to use the new Session data structures. #127 |
| 76 | +- `helpers/exceptions`: refactored Field and Experiment exceptions to corresponding base exception #156 |
| 77 | +- `feedback/auditory_feedback`: to allow for easier setting of relevant parameters and testing #128 |
| 78 | +- `feedback/visual_feedback`: deprecate shape feedback type, line_color (in the administer method), and compare assertion as both were unused and added unneeded complexity. Set hard-coded values on the class instance for easier changing later. #128 |
| 79 | + |
| 80 | +### Removed |
| 81 | + |
| 82 | +- `target_rsvp_inquiry_generator`: #153 unused |
| 83 | +- `rsvp_copy_phrase_inq_generator`: #153 unused |
| 84 | +- `tasks/rsvp/icon_to_icon.py`: #129 unused |
| 85 | +- `tasks/rsvp/calibration/inter_inquiry_feedback_calibration.py`: unused |
| 86 | +- `generate_icon_match_images`: #153 deprecated task |
| 87 | +- `signal/process/demo/text_filter_demo.py`: #147 removes old matlab generated filter |
| 88 | +- `signal/process/filter/resources/filters.txt`: #147 in favor of new filters and transforms |
| 89 | +- `signal/process/filter/notch.py`: #147 in favor of new filters and transforms |
| 90 | +- `signal/process/filter/downsample.py`: #147 in favor of new filters and transforms |
| 91 | +- `signal/process/filter/bandpass.py`: #147 in favor of new filters and transforms |
| 92 | + |
1 | 93 | # 1.5.0
|
2 | 94 |
|
3 | 95 | ## Contributions
|
4 | 96 |
|
5 |
| -This version contains major refactoring and tooling improvements across the codebase. In addition, it indtrocudes the concept of BciPy Experiments and Fields. Below we describe the major changes along with a PR# in github where applicable. |
| 97 | +This version contains major refactoring and tooling improvements across the codebase. In addition, it introduces the concept of BciPy Experiments and Fields. Below we describe the major changes along with a PR# in github where applicable. |
6 | 98 |
|
7 | 99 | ### Added
|
8 | 100 | - Language model histogram #91
|
9 | 101 | - BciPy official glossary (Sequence -> Inquiry & Epoch -> Series) #121
|
10 | 102 | - System information to `system_utils` (cpu, platform, etc) #98
|
11 |
| -- BciPy Experiments and Fields: See PRs #113 #111 and #114 for more information on the additions! |
| 103 | +- BciPy Experiments and Fields: See PRs #113 #111, #114 for more information on the additions! |
12 | 104 | - `.bcipy` system directory to support experiment and fields #100
|
13 | 105 | - support for python 3.7
|
14 | 106 | - `rsvp/query_mechanisms`: to model the way we build inquiries #108
|
|
0 commit comments