diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 560db1c5..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,50 +0,0 @@ -# How to contribute - -We would love any contributions, in code and otherwise. Whether its a how-to-use problem, a bug report, or idea for enhancement, please check if an *issue* for the topic already exists, and if not, open one yourself and clearly describe what is in your mind. If you are willing to write code, that is also a good place for us to agree on how to proceed. You don't have to be genius with years of experience; we are all learning. :] - -## Getting your code in - -We use a simplified variant of GitFlow-model, and have two main branches: master and develop. All features / bugfixes should be implemented in their own branches, and be branched from the develop branch. Develop branch is then merged to master when releasing. To get your code in, you should first fork the repository, create a branch for your contribution out of develop branch, and when finished, create a pull request. - -### Getting development environment (in Linux/OSX) - -1. Have anaconda / miniconda installed on your system. -1. Fork this repository under your own account. -1. Clone the forked repository to your computer and cd in. -1. Run following command to create isolated environment for development: conda create -n meggie-dev python=3 -1. Activate the environment using: conda activate meggie-dev -1. Install dependencies from conda-forge: conda install -c conda-forge mne -1. Install meggie in develop mode: python setup.py develop -1. Try if meggie runs by running: meggie debug - -### Using Git - -Inside the cloned project directory, you can do following to ensure you are up to date and then create the branch for contribution: -1. Add remote for upstream updates (only once): git remote add upstream git@github.com:cibr-jyu/meggie.git -1. Switch to local develop branch: git checkout develop -1. Download and merge updates from upstream: git pull upstream develop -1. Give a good name for feature / bugfix branch and switch to it: git checkout -b fix-bad-documentation - -[//]: # (Hello) - -Now you are all set to write your code. - -### Writing code - -See developer documentation in *https://cibr-jyu.github.io/meggie*. - -Some notes and guidelines: -* Try to keep your code clean. Use for example pycodestyle or flake8 to check your pep8-compliance. Generated code from Qtdesigner is kept as it is. -* You can use command *meggie debug* to start meggie in mode, where all output is written into terminal, and you can use python debugger normally. -* If you are fond of *import pdb; pdb.set_trace()*, you should use *meggie.utilities.debug import debug\_trace; debug\_trace()*. Otherwise Qt will spam the window full. - -### Finishing with pull request - -When finished, you should save your changes (if not done already): -1. Save changes: git commit -1. Push changes to your fork: git push origin fix-bad-documentation -1. Go to your forked repository on github and it should happily notify you about the push you have just made and allow you to click *Compare & pull request*. Fill the details and let the code fly. - -## License - -When contributing, your code is licensed under BSD license. diff --git a/docs/about.md b/docs/about.md index c262d32e..92bf5b34 100644 --- a/docs/about.md +++ b/docs/about.md @@ -15,4 +15,4 @@ Compared to other tools like FieldTrip, MNE-Python, EEGLAB, Brainstorm, and mnel Meggie can be changed and added to with plugins. If you know Python, you can create new features. This helps Meggie grow and helps everyone who uses it. -To learn more, see our [Developer Documentation](./developer-guide/development.md). +To learn more, see our [Developer Documentation](./developer-guide/architecture.md). diff --git a/docs/developer-guide/architecture.md b/docs/developer-guide/architecture.md index 9067bda7..719fe545 100644 --- a/docs/developer-guide/architecture.md +++ b/docs/developer-guide/architecture.md @@ -1,33 +1,47 @@ -# Prerequisites +# Architecture Overview -This document provides a broad overview with some insights to how meggie is built and how that can be used for advantage. +This document outlines the core structure of Meggie, offering insights into its construction and how developers can leverage its architecture. -## Main classes -There are three basic structures in Meggie. +## Main Classes + +Meggie is structured around three fundamental classes: ### MainWindow -MainWindow contains the user interface, and is implemented with PyQt5. The most important elements of the MainWindow are the left panel, holding experiment-specific information, the bottom console, which logs user actions, and the right panel, which contains the tabs that are used for data transformations. + +MainWindow is the central hub of the user interface, built using PyQt5. Key components include: + +- Left Panel: Displays experiment-specific details. +- Bottom Console: Logs user actions and system messages. +- Right Panel: Hosts tabs for data transformation actions. ### Experiment -Experiment contains the highest-level container for all the data. It implements logic for saving and loading experiments and stores subjects within it. + +The Experiment class serves as the top-level container for all data, handling the saving and loading of experiments, and maintaining a collection of subjects. ### Subject -Subjects are added to experiments and store subject-specific data. Most importantly they are responsible for saving and loading the raw data, but they also store instances of datatypes. -## Actions, pipelines and datatypes -The analysis functionality is based on three key structures: actions, pipelines and datatypes. +Subject instances are nested within experiments and are tasked with managing subject-specific data. Their primary roles are to handle the saving and loading of raw data and to hold instances of various datatypes. + +## Actions, Pipelines, and Datatypes + +Meggie's analytical capabilities are structured into actions, pipelines, and datatypes. ### Datatypes -Often the raw data can be summarized in structures that capture the essential features for the purpose of analysis. For example, based on event information, the raw data can split into small segments of data that are averaged together to create event-related responses. These kind of structures, e.g. epochs, evokeds, spectrums, TFRs, that are instantiated from prespecified datatypes, can be stored within subjects. In meggie, these “blueprints” are all stored, declared and implemented in the datatypes folder. + +Datatypes are templates for summarizing raw data into meaningful structures for analysis, such as epochs, evokeds, spectrums, and TFRs. These templates are defined within the datatypes folder and instantiated as needed to store within subjects. ### Actions -Actions are basic analysis steps such as “filter” or “create epochs”. In Meggie, each one of these is declared independently in its own folder within “actions” folder. Each action consists of metadata in “configuration.json” and python code. The entry point within the python code is assumed to inherit from the Action-class defined in mainwindow/dynamic.py. If done so, the actions can be embedded in pipelines, and are automatically logged in a backlog of actions. + +Actions represent fundamental analysis steps, like "filter" or "create epochs." Each action, located in its respective folder within the actions directory, comprises metadata in configuration.json and Python code. Actions inherit from the Action class in mainwindow/dynamic.py and can be integrated into pipelines and are automatically logged. ### Pipelines -Pipelines are sets of actions arranged as buttons within tabs in the GUI and correspond to certain types of analyses from the beginning to the end such as “Sensor-level continuous data analysis” or “Source-level evoked response analysis”. These are declared in the main configuration.json and as they utilize the actions for implementations, they do not include any python code. + +Pipelines organize actions into a sequence represented as buttons within the GUI tabs. They guide the user through a complete analysis workflow, such as "Sensor-level continuous data analysis." Pipelines are specified in the main configuration.json and rely on actions for implementation, thus containing no Python code themselves. ## Plugins -Creation of plugins is simple. Pipelines, datatypes and actions are dynamically located at the runtime and are loadable from other python packages from meggie namespace. Thus implementing a plugin corresponds to creating a python package (with name in the meggie namespace) which introduced pipelines, actions and/or datatypes. + +Creating plugins for Meggie is designed to be straightforward. The system dynamically locates pipelines, datatypes, and actions at runtime, allowing them to be loaded from external Python packages within the Meggie namespace. To create a plugin, one simply needs to develop a Python package named within the Meggie namespace that introduces new pipelines, actions, and/or datatypes. ## API -We thrive to keep the core of Meggie, which covers everything but the actions, as stable and reusable as possible. Thus as a plugin developer, you are allowed to use the API of MainWindow, Subject and Experiment classes, the four datatypes provided in the datatypes folder, as well as the functions, dialogs and widgets stored in the utilities folder. + +The core of Meggie, excluding the actions, is intended to be stable and reusable. Plugin developers are encouraged to utilize the API provided by the MainWindow, Subject, and Experiment classes. Additionally, developers have access to the four datatypes in the datatypes folder and various utilities, including functions, dialogs, and widgets, found in the utilities folder. diff --git a/docs/developer-guide/development.md b/docs/developer-guide/development.md index c70b22ba..308d74d5 100644 --- a/docs/developer-guide/development.md +++ b/docs/developer-guide/development.md @@ -1,2 +1,7 @@ -# Plugin development -Contents be here. +# Development + +## Setting up + +For an example of a basic plugin template, please visit [Meggie Simple Plugin](https://github.com/cibr-jyu/meggie_simpleplugin) on GitHub. + +Actions, pipelines, and datatypes function identically, regardless of whether they originate from a plugin or from the core of Meggie. Therefore, examining the implementations within the Meggie repository is advisable for understanding their integration and usage. diff --git a/docs/developer-guide/setting-up.md b/docs/developer-guide/setting-up.md deleted file mode 100644 index 8d00ee90..00000000 --- a/docs/developer-guide/setting-up.md +++ /dev/null @@ -1,2 +0,0 @@ -# Setting up -Contents be here. diff --git a/docs/user-guide/actions.md b/docs/user-guide/actions.md index 5bc3edf5..42056f4a 100644 --- a/docs/user-guide/actions.md +++ b/docs/user-guide/actions.md @@ -2,22 +2,22 @@ Actions serve as the primary analytical tools within Meggie. Upon establishing an experiment and incorporating the raw data files for each subject, these actions are systematically employed to progressively convert the raw magnetic or electric signals into meaningful behavioral outcomes. Below is a catalog of the available actions along with their respective descriptions. -## Actions for preprocessing raw data +## Preprocessing {{ACTIONS_RAW}} -## Actions for spectral analysis of continuous data +## Continuous data {{ACTIONS_SPECTRUM}} -## Actions for epoch collections +## Epochs {{ACTIONS_EPOCHS}} -## Actions for evoked response analysis +## Evoked responses {{ACTIONS_EVOKED}} -## Actions for induced response analysis +## Induced responses (TFR) {{ACTIONS_TFR}} diff --git a/docs/user-guide/experiments.md b/docs/user-guide/experiments.md index 7ea7dc48..147e0e99 100644 --- a/docs/user-guide/experiments.md +++ b/docs/user-guide/experiments.md @@ -1,3 +1,39 @@ -# Experiments +# Experiments in Meggie -Contents be here. +This section provides a straightforward overview of Meggie's layout and the steps for starting and managing experiments with subjects. + +## Layout Overview + +Meggie's interface is organized into two main columns: + +- Left Column: This area is your control panel for the experiment. Here, you add new subjects to your experiment and adjust settings like channel groups. It's the organizational hub for your data. + +- Right Column: This column contains the analysis tools, referred to as actions, which you'll apply to your data. These tools are arranged in tabs and are used to process the data step by step. + +## Starting an Experiment + +Begin by creating an experiment where you'll enter basic information such as the experiment's name and the person conducting it. You'll also choose a pipeline that fits your research needs. This helps keep the interface focused and guides you through the necessary steps. A folder for the experiment will be created to store all related files. + +## Adding Subjects + +After setting up your experiment, you can add subjects, which are your individual recordings, using the "Add new..." option in the left column. + +## Applying Actions + +In the right column, you'll find the actions you can apply to your data. These actions are designed to be used on all your subjects at once, making it efficient to process multiple datasets. + +## Preprocessing + +Meggie includes basic preprocessing features to improve the quality of your data. You can remove unwanted noise and apply filters to clean up the signals before further analysis. + +## Working with EEG and MEG Data + +Meggie is equipped to handle both EEG and MEG data. For EEG, it offers tools to add sensor locations and adjust channel references when necessary. + +## Managing Events + +Events, which are significant points in your recordings, can be managed within Meggie. This ensures you have control over important data points for analysis. + +## Progressing Through Analysis + +The goal is to transform raw recordings into data that can inform your research. You'll use actions to move through analysis stages, each tailored to bring out specific features of your data. diff --git a/docs/user-guide/getting-started.md b/docs/user-guide/getting-started.md index 38137e87..2f856df5 100644 --- a/docs/user-guide/getting-started.md +++ b/docs/user-guide/getting-started.md @@ -1,23 +1,23 @@ # Installation Meggie does not have standalone installers, but it can be easily installed on Windows, macOS, or Linux systems with Python 3.9 or higher using either of the following methods: - + ## Using conda Install meggie to a conda environment: ```bash $ conda create -n meggie-env -c conda-forge meggie=={{VERSION}} ``` - + ### Using pip: -Create a virtual environment: +Create a virtual environment folder: ```bash $ python -m venv meggie-env ``` Activate the environment: ```bash -$ source .meggie-env/bin/activate +$ source meggie-env/bin/activate ``` Install dependencies: ```bash @@ -32,7 +32,7 @@ Activate the environment in which Meggie was installed. For conda: ```bash conda activate meggie-env ``` -For pip: +Or, for pip: ```bash source meggie-env/bin/activate ``` diff --git a/meggie/actions/epochs_create/configuration.json b/meggie/actions/epochs_create/configuration.json index 39f9c1c9..8ae2f648 100644 --- a/meggie/actions/epochs_create/configuration.json +++ b/meggie/actions/epochs_create/configuration.json @@ -2,5 +2,5 @@ "id": "epochs_create", "name": "Create epochs", "entry": "CreateEpochs", - "description": "This action is used to create new epoch collections for the selected subject." + "description": "Create a new epoch collection for the current subject." } diff --git a/meggie/actions/epochs_delete/configuration.json b/meggie/actions/epochs_delete/configuration.json index ccab4088..f2c56911 100644 --- a/meggie/actions/epochs_delete/configuration.json +++ b/meggie/actions/epochs_delete/configuration.json @@ -2,5 +2,5 @@ "id": "epochs_delete", "name": "Delete", "entry": "DeleteEpochs", - "description": "This action is used to delete epoch collections from the selected subject." + "description": "Permanently remove the selected epoch collection from the current subject." } diff --git a/meggie/actions/epochs_delete_from_all/configuration.json b/meggie/actions/epochs_delete_from_all/configuration.json index 396b281d..6a9b91e8 100644 --- a/meggie/actions/epochs_delete_from_all/configuration.json +++ b/meggie/actions/epochs_delete_from_all/configuration.json @@ -1,5 +1,6 @@ { "id": "epochs_delete_from_all", "name": "Delete from all", - "entry": "DeleteEpochsFromAll" + "entry": "DeleteEpochsFromAll", + "description": "Permanently remove the selected epoch collection from all matching subjects." } diff --git a/meggie/actions/epochs_info/configuration.json b/meggie/actions/epochs_info/configuration.json index b031b817..87a7ba3e 100644 --- a/meggie/actions/epochs_info/configuration.json +++ b/meggie/actions/epochs_info/configuration.json @@ -1,5 +1,6 @@ { "id": "epochs_info", "name": "Epochs info", - "entry": "Info" + "entry": "Info", + "description": "Extract information about the selected epoch collection." } diff --git a/meggie/actions/epochs_plot/configuration.json b/meggie/actions/epochs_plot/configuration.json index e5baeb3c..92b27aea 100644 --- a/meggie/actions/epochs_plot/configuration.json +++ b/meggie/actions/epochs_plot/configuration.json @@ -1,5 +1,6 @@ { "id": "epochs_plot", "name": "Plot", - "entry": "PlotEpochs" + "entry": "PlotEpochs", + "description": "Generate a simple plot for the selected epoch collection." } diff --git a/meggie/actions/epochs_plot_image/configuration.json b/meggie/actions/epochs_plot_image/configuration.json index f5a4b9b5..25a76228 100644 --- a/meggie/actions/epochs_plot_image/configuration.json +++ b/meggie/actions/epochs_plot_image/configuration.json @@ -1,5 +1,6 @@ { "id": "epochs_plot_image", "name": "Plot image", - "entry": "PlotEpochsImage" + "entry": "PlotEpochsImage", + "description": "Generate an image plot for the selected epoch collection." } diff --git a/meggie/actions/evoked_create/configuration.json b/meggie/actions/evoked_create/configuration.json index 18808828..01c2937c 100644 --- a/meggie/actions/evoked_create/configuration.json +++ b/meggie/actions/evoked_create/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_create", "name": "Create evoked", - "entry": "CreateEvoked" + "entry": "CreateEvoked", + "description": "Compute the average of selected epoch collections independently. Each collection is averaged separately, resulting in a distinct average curve for each." } diff --git a/meggie/actions/evoked_delete/configuration.json b/meggie/actions/evoked_delete/configuration.json index dfae6742..100c8509 100644 --- a/meggie/actions/evoked_delete/configuration.json +++ b/meggie/actions/evoked_delete/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_delete", "name": "Delete", - "entry": "DeleteEvoked" + "entry": "DeleteEvoked", + "description": "Permanently remove the selected evoked response object from the current subject." } diff --git a/meggie/actions/evoked_delete_from_all/configuration.json b/meggie/actions/evoked_delete_from_all/configuration.json index 529d042b..29bdd56e 100644 --- a/meggie/actions/evoked_delete_from_all/configuration.json +++ b/meggie/actions/evoked_delete_from_all/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_delete_from_all", "name": "Delete from all", - "entry": "DeleteEvokedFromAll" + "entry": "DeleteEvokedFromAll", + "description": "Permanently remove the selected evoked response object from all matching subjects." } diff --git a/meggie/actions/evoked_group_average/configuration.json b/meggie/actions/evoked_group_average/configuration.json index 384352fc..85156bdd 100644 --- a/meggie/actions/evoked_group_average/configuration.json +++ b/meggie/actions/evoked_group_average/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_group_average", "name": "Average over subjects", - "entry": "GroupAverage" + "entry": "GroupAverage", + "description": "Calculate the average of the selected evoked response object across subjects, with options to group subjects before averaging." } diff --git a/meggie/actions/evoked_info/configuration.json b/meggie/actions/evoked_info/configuration.json index 502cfdb3..5459c74b 100644 --- a/meggie/actions/evoked_info/configuration.json +++ b/meggie/actions/evoked_info/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_info", "name": "Evoked info", - "entry": "Info" + "entry": "Info", + "description": "Extract information about the selected evoked response." } diff --git a/meggie/actions/evoked_plot/configuration.json b/meggie/actions/evoked_plot/configuration.json index 15ddc43a..f92246cf 100644 --- a/meggie/actions/evoked_plot/configuration.json +++ b/meggie/actions/evoked_plot/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_plot", "name": "Plot", - "entry": "PlotEvoked" + "entry": "PlotEvoked", + "description": "Generate a plot for the selected evoked response object. The response may be visualized for all channels individually or as an average across specified channel groups." } diff --git a/meggie/actions/evoked_plot_topomap/configuration.json b/meggie/actions/evoked_plot_topomap/configuration.json index ab8f9bd0..49c7c842 100644 --- a/meggie/actions/evoked_plot_topomap/configuration.json +++ b/meggie/actions/evoked_plot_topomap/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_plot_topomap", "name": "Plot topomaps", - "entry": "PlotEvokedTopomap" + "entry": "PlotEvokedTopomap", + "description": "Produce a series of topographical maps at specified time intervals for the selected evoked response object." } diff --git a/meggie/actions/evoked_save/configuration.json b/meggie/actions/evoked_save/configuration.json index 2e9a4675..e5956d49 100644 --- a/meggie/actions/evoked_save/configuration.json +++ b/meggie/actions/evoked_save/configuration.json @@ -1,5 +1,6 @@ { "id": "evoked_save", "name": "Save to csv", - "entry": "SaveEvoked" + "entry": "SaveEvoked", + "description": "Export the numerical data from the evoked response object for all matching subjects into a CSV file." } diff --git a/meggie/actions/raw_event_info/configuration.json b/meggie/actions/raw_event_info/configuration.json index c9bb91d5..05820187 100644 --- a/meggie/actions/raw_event_info/configuration.json +++ b/meggie/actions/raw_event_info/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_event_info", "name": "Event info", - "entry": "Info" + "entry": "Info", + "description": "Extract event information from the raw data." } diff --git a/meggie/actions/raw_events_from_annotations/configuration.json b/meggie/actions/raw_events_from_annotations/configuration.json index cd82c611..f08cf44e 100644 --- a/meggie/actions/raw_events_from_annotations/configuration.json +++ b/meggie/actions/raw_events_from_annotations/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_events_from_annotations", "name": "Events from annotations", - "entry": "EventsFromAnnotations" + "entry": "EventsFromAnnotations", + "description": "Create events from annotations for further analysis." } diff --git a/meggie/actions/raw_filter/configuration.json b/meggie/actions/raw_filter/configuration.json index 58a2cf77..b1ade5af 100644 --- a/meggie/actions/raw_filter/configuration.json +++ b/meggie/actions/raw_filter/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_filter", "name": "Filter", - "entry": "Filter" + "entry": "Filter", + "description": "Apply low-pass, high-pass, band-pass, and band-stop filters to raw data to isolate specific frequency ranges or remove unwanted frequencies." } diff --git a/meggie/actions/raw_ica/configuration.json b/meggie/actions/raw_ica/configuration.json index c06766d0..83650d18 100644 --- a/meggie/actions/raw_ica/configuration.json +++ b/meggie/actions/raw_ica/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_ica", "name": "Artifact removal", - "entry": "ICA" + "entry": "ICA", + "description": "Apply Independent Component Analysis (ICA) to raw data to identify and remove artifacts such as heartbeats and eye blinks." } diff --git a/meggie/actions/raw_measurement_info/configuration.json b/meggie/actions/raw_measurement_info/configuration.json index 6ec868b4..77f84c8b 100644 --- a/meggie/actions/raw_measurement_info/configuration.json +++ b/meggie/actions/raw_measurement_info/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_measurement_info", "name": "Measurement info", - "entry": "Info" + "entry": "Info", + "description": "Extract measurement information from the raw data." } diff --git a/meggie/actions/raw_montage/configuration.json b/meggie/actions/raw_montage/configuration.json index b7499470..c4072e3a 100644 --- a/meggie/actions/raw_montage/configuration.json +++ b/meggie/actions/raw_montage/configuration.json @@ -2,5 +2,6 @@ "id": "raw_montage", "name": "Montage", "entry": "Montage", + "description": "Apply a montage to the EEG dataset, enabling the creation of topographical plots.", "tags": ["eeg"] } diff --git a/meggie/actions/raw_plot/configuration.json b/meggie/actions/raw_plot/configuration.json index db936756..c13f8790 100644 --- a/meggie/actions/raw_plot/configuration.json +++ b/meggie/actions/raw_plot/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_plot", "name": "Plot raw", - "entry": "PlotRaw" + "entry": "PlotRaw", + "description": "Produce a time series plot of the raw data." } diff --git a/meggie/actions/raw_plot_projections/configuration.json b/meggie/actions/raw_plot_projections/configuration.json index d1c615ec..50ad0d29 100644 --- a/meggie/actions/raw_plot_projections/configuration.json +++ b/meggie/actions/raw_plot_projections/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_plot_projections", "name": "Plot projections", - "entry": "PlotProjections" + "entry": "PlotProjections", + "description": "Generate a plot to visualize the projection vectors contained within the raw data." } diff --git a/meggie/actions/raw_rereference/configuration.json b/meggie/actions/raw_rereference/configuration.json index f691cea9..1786d2d7 100644 --- a/meggie/actions/raw_rereference/configuration.json +++ b/meggie/actions/raw_rereference/configuration.json @@ -2,5 +2,6 @@ "id": "raw_rereference", "name": "Rereference", "entry": "Rereference", + "description": "Re-reference the raw data to an average reference, which can be computed from one or more selected channels or all channels.", "tags": ["eeg"] } diff --git a/meggie/actions/raw_resample/configuration.json b/meggie/actions/raw_resample/configuration.json index 2669e473..6a74f460 100644 --- a/meggie/actions/raw_resample/configuration.json +++ b/meggie/actions/raw_resample/configuration.json @@ -1,5 +1,6 @@ { "id": "raw_resample", "name": "Resample", - "entry": "Resample" + "entry": "Resample", + "description": "Adjust the dataset by resampling it to a different sampling frequency." } diff --git a/meggie/actions/spectrum_create/configuration.json b/meggie/actions/spectrum_create/configuration.json index 4dea8036..b6546433 100644 --- a/meggie/actions/spectrum_create/configuration.json +++ b/meggie/actions/spectrum_create/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_create", "name": "Create spectrum", - "entry": "CreateSpectrum" + "entry": "CreateSpectrum", + "description": "Calculate the spectral data at specified time intervals for the current subject." } diff --git a/meggie/actions/spectrum_delete/configuration.json b/meggie/actions/spectrum_delete/configuration.json index ae0d7631..ffbc4c1f 100644 --- a/meggie/actions/spectrum_delete/configuration.json +++ b/meggie/actions/spectrum_delete/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_delete", "name": "Delete", - "entry": "DeleteSpectrum" + "entry": "DeleteSpectrum", + "description": "Permanently remove the selected spectrum object from the current subject." } diff --git a/meggie/actions/spectrum_delete_from_all/configuration.json b/meggie/actions/spectrum_delete_from_all/configuration.json index bf19867d..287a8660 100644 --- a/meggie/actions/spectrum_delete_from_all/configuration.json +++ b/meggie/actions/spectrum_delete_from_all/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_delete_from_all", "name": "Delete from all", - "entry": "DeleteSpectrumFromAll" + "entry": "DeleteSpectrumFromAll", + "description": "Permanently remove the selected spectrum object from all matching subjects." } diff --git a/meggie/actions/spectrum_group_average/configuration.json b/meggie/actions/spectrum_group_average/configuration.json index b2dd7464..5e7b3207 100644 --- a/meggie/actions/spectrum_group_average/configuration.json +++ b/meggie/actions/spectrum_group_average/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_group_average", "name": "Average over subjects", - "entry": "GroupAverage" + "entry": "GroupAverage", + "description": "Calculate the average of the selected spectrum object across subjects, with options to group subjects before averaging." } diff --git a/meggie/actions/spectrum_info/configuration.json b/meggie/actions/spectrum_info/configuration.json index e2a655e6..fc7cd088 100644 --- a/meggie/actions/spectrum_info/configuration.json +++ b/meggie/actions/spectrum_info/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_info", "name": "Spectrum info", - "entry": "Info" + "entry": "Info", + "description": "Extract information about the selected spectrum object." } diff --git a/meggie/actions/spectrum_plot/configuration.json b/meggie/actions/spectrum_plot/configuration.json index 80dfa060..9b8cd717 100644 --- a/meggie/actions/spectrum_plot/configuration.json +++ b/meggie/actions/spectrum_plot/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_plot", "name": "Plot", - "entry": "PlotSpectrum" + "entry": "PlotSpectrum", + "description": "Generate a plot for the selected spectrum object. The spectrum object may be visualized for all channels individually or as an average across specified channel groups." } diff --git a/meggie/actions/spectrum_save/configuration.json b/meggie/actions/spectrum_save/configuration.json index 07e9ae4c..e65f81e3 100644 --- a/meggie/actions/spectrum_save/configuration.json +++ b/meggie/actions/spectrum_save/configuration.json @@ -1,5 +1,6 @@ { "id": "spectrum_save", "name": "Save to csv", - "entry": "SaveSpectrum" + "entry": "SaveSpectrum", + "description": "Export the numerical data from the spectrum object for all matching subjects into a CSV file." } diff --git a/meggie/actions/tfr_create/configuration.json b/meggie/actions/tfr_create/configuration.json index 215120c8..91155aab 100644 --- a/meggie/actions/tfr_create/configuration.json +++ b/meggie/actions/tfr_create/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_create", "name": "Create TFR", - "entry": "CreateTFR" + "entry": "CreateTFR", + "description": "Calculate time-frequency representations (TFRs) for selected epoch collections independently, with each collection yielding a unique TFR." } diff --git a/meggie/actions/tfr_delete/configuration.json b/meggie/actions/tfr_delete/configuration.json index 318ea396..795009bd 100644 --- a/meggie/actions/tfr_delete/configuration.json +++ b/meggie/actions/tfr_delete/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_delete", "name": "Delete", - "entry": "DeleteTFR" + "entry": "DeleteTFR", + "description": "Permanently remove the selected TFR object from the current subject." } diff --git a/meggie/actions/tfr_delete_from_all/configuration.json b/meggie/actions/tfr_delete_from_all/configuration.json index b7b2a4a3..3d76f5c9 100644 --- a/meggie/actions/tfr_delete_from_all/configuration.json +++ b/meggie/actions/tfr_delete_from_all/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_delete_from_all", "name": "Delete from all", - "entry": "DeleteTFRFromAll" + "entry": "DeleteTFRFromAll", + "description": "Permanently remove the selected TFR object from all matching subjects." } diff --git a/meggie/actions/tfr_group_average/configuration.json b/meggie/actions/tfr_group_average/configuration.json index f78e405e..a45dcf83 100644 --- a/meggie/actions/tfr_group_average/configuration.json +++ b/meggie/actions/tfr_group_average/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_group_average", "name": "Average over subjects", - "entry": "GroupAverage" + "entry": "GroupAverage", + "description": "Calculate the average of the selected TFR object across subjects, with options to group subjects before averaging." } diff --git a/meggie/actions/tfr_info/configuration.json b/meggie/actions/tfr_info/configuration.json index 8e36fe37..34d357ea 100644 --- a/meggie/actions/tfr_info/configuration.json +++ b/meggie/actions/tfr_info/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_info", "name": "TFR info", - "entry": "Info" + "entry": "Info", + "description": "Extract information about the selected TFR object." } diff --git a/meggie/actions/tfr_plot/configuration.json b/meggie/actions/tfr_plot/configuration.json index e4c094fe..e669d5df 100644 --- a/meggie/actions/tfr_plot/configuration.json +++ b/meggie/actions/tfr_plot/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_plot", "name": "Plot TFR", - "entry": "PlotTFR" + "entry": "PlotTFR", + "description": "Visualize the selected TFR object as a heatmap, with options for individual channel visualization or averaging across channel groups." } diff --git a/meggie/actions/tfr_plot_tse/configuration.json b/meggie/actions/tfr_plot_tse/configuration.json index 498984e6..0ebaf433 100644 --- a/meggie/actions/tfr_plot_tse/configuration.json +++ b/meggie/actions/tfr_plot_tse/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_plot_tse", "name": "Plot TSE", - "entry": "PlotTSE" + "entry": "PlotTSE", + "description": "Visualize the Temporal Spectral Evolution (TSE) of the selected TFR object, collapsing the frequency dimension over a specified interval, for individual channels or averaged across channel groups." } diff --git a/meggie/actions/tfr_save/configuration.json b/meggie/actions/tfr_save/configuration.json index 249cece5..4ba35d26 100644 --- a/meggie/actions/tfr_save/configuration.json +++ b/meggie/actions/tfr_save/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_save", "name": "Save TFR to csv", - "entry": "SaveTFR" + "entry": "SaveTFR", + "description": "Export the numerical data from the TFR object for all matching subjects into a CSV file." } diff --git a/meggie/actions/tfr_save_tse/configuration.json b/meggie/actions/tfr_save_tse/configuration.json index ac22abd0..9f785d82 100644 --- a/meggie/actions/tfr_save_tse/configuration.json +++ b/meggie/actions/tfr_save_tse/configuration.json @@ -1,5 +1,6 @@ { "id": "tfr_save_tse", "name": "Save TSE to csv", - "entry": "SaveTSE" + "entry": "SaveTSE", + "description": "Export the TSE data from the TFR object, collapsing the frequency dimension over a specified interval, into a CSV file for all matching subjects." } diff --git a/mkdocs.yml b/mkdocs.yml index a178d230..cf157e25 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,9 +10,10 @@ nav: - Experiments: user-guide/experiments.md - Actions: user-guide/actions.md - Developer Guide: - - Setting up: developer-guide/setting-up.md - Architecture: developer-guide/architecture.md - Development: developer-guide/development.md + - External Resources: + - Meggie Tutorial: https://meggie.teekuningas.net theme: name: readthedocs diff --git a/update_docs.py b/update_docs.py index dc270470..edee391a 100644 --- a/update_docs.py +++ b/update_docs.py @@ -43,10 +43,18 @@ def get_actions(prefix): # Create the formatted string formatted_strings = [] for action in sorted_actions: + if not action[1]: + continue + + if not action[0].startswith(prefix): + continue + + if action[0].endswith("_info"): + continue + title = f"{action[1]} ({action[0]})" desc = action[2] or "To be added." - if action[0].startswith(prefix) and action[1]: - formatted_strings.append(f"### {title}\n\n{desc}\n") + formatted_strings.append(f"### {title}\n\n{desc}\n") # Join all formatted strings into one final string final_actions_output = "\n".join(formatted_strings)