.. module:: spidet .. _usage: ===== Usage ===== This section gives instructions on how to install the automatic-spike-detection package and contains examples of how to use it. Installation ^^^^^^^^^^^^ The automatic-spike-detection package is hosted on `Python Package Index (PyPi) `_ repository and can be installed with the `package installer for Python `_ ``pip`` via .. code-block:: bash pip install automatic-spike-detection and updated via .. code-block:: bash pip install automatic-spike-detection --upgrade Code Examples ^^^^^^^^^^^^^ SpikeDetectionPipeline """""""""""""""""""""" The :class:`~spidet.spike_detection.spike_detection_pipeline.SpikeDetectionPipeline` class builds the core entity of the automatic-spike-detection package and provides a complete pipeline for spike detection that includes 1. reading the data from the provided file (supported file formats are .h5, .edf, .fif) and transforming the data into a list of :mod:`~spidet.domain.Trace` objects, 2. performing the necessary preprocessing steps by means of the :mod:`~spidet.preprocess.preprocessing` module, 3. applying the line-length transformation using the :mod:`~spidet.spike_detection.line_length` module, 4. performing Nonnegative Matrix Factorization to extract the most discriminating metappatterns, done by the :mod:`~spidet.spike_detection.nmf` module and 5. computing periods of abnormal activity by means of the :mod:`~spidet.spike_detection.thresholding` module. where preprocessing is optimized for the task of detection spikes. An application example could look like .. code-block:: Python # Define the file path file: str = "/home/User/intracranial_EEG_recording.h5" # Define the sparseness parameter in [0, 1] if NMF should run with sparseness constraints # Note that running NMF with sparseness constraints typically increases running time sparseness: float = 0.25 # Set the number of NMF runs performed for each rank in the rank_range # This is optional as there is a default of 100 nmf_runs = 100 # Set the range of rank for which to perform NMF # This, again, is optional and the default includes ranks [2, 3, 4, 5] k_min = 2 k_max = 5 # Initialize the spike detection pipeline spike_detection_pipeline = SpikeDetectionPipeline( file_path=file, save_nmf_matrices=True, sparseness=sparseness, nmf_runs=runs_per_rank, rank_range=(k_min, k_max), ) # In case of an .h5 file, the channel paths within the file need to be defined channel_paths: List[str] = [ "/traces/raw_bipolar/lead/Amy/Amy01-Amy02", "/traces/raw_bipolar/lead/Amy/Amy02-Amy03", "/traces/raw_bipolar/lead/Amy/Amy03-Amy04", "/traces/raw_bipolar/lead/Amy/Amy04-Amy05", ...] # Run the detection pipeline basis_functions: List[BasisFunction], activation_functions: List[ActivationFunction] = spike_detection_pipeline.run( channel_paths=channel_paths, ) Pleas check out the :ref:`API Reference ` for further details on how to use the :class:`~spidet.spike_detection.spike_detection_pipeline.SpikeDetectionPipeline`. Furthermore, all the different components of the pipeline can be used individually and are also explained in the :ref:`API Reference `. ThresholdGenerator """""""""""""""""" Another entity worth providing an example for is the :class:`~spidet.spike_detection.thresholding.ThresholdGenerator` The detection pipeline is a complete end-to-end module. However, it might be necessary to recompute events for a precomputed :class:`~spidet.domain.ActivationFunction` based on a custom defined threshold. A precomputed :math:`H` matrix can be loaded via the :class:`~spidet.load.data_loading.DataLoader` and passed row-wise or as a complete matrix to the :class:`~spidet.spike_detection.thresholding.ThresholdGenerator`. The events can then be computed for a predefined threshold. .. code-block:: Python # Define start datetime of the recording start_datetime = datetime(2021, 11, 11, 16, 1, 20) # Set path to file containing the H matrix file: str = "PATH/TO/H_MATRIX.csv" # Initialize data loader data_loader = DataLoader() # Load spike activation functions activation_functions: List[ ActivationFunction ] = data_loader.load_activation_functions( file_path=file, start_timestamp=start_datetime.timestamp() ) # Initialize the ThresholdGenerator and pass a preloaded activation function threshold_generator = ThresholdGenerator(activation_function_matrix=activation_functions[0]) # Compute the events for the given activation function for the custom defined threshold spike_annotations = threshold_generator.find_events(threshold) For further details, please consult the :ref:`API Reference `.