PsPM Versions Save

A matlab suite for Psycho-Physiological Modelling

v6.1.2

3 months ago

Bug fixes

  • GUI
    • A bug that made channel actions in EMG pre-processing unrecognised has been fixed.
    • A bug, which sometimes made DCM not run from the GUI, has been fixed.
  • pspm_convert_hb2hp
    • A bug, which incorrectly selected heart rate channels, has been fixed.
  • pspm_dcm
    • A bug, which could lead to a wrong sample rate being used if more than one SCR channel existed in the file, has been fixed.
  • pspm_glm
    • A bug, which leads to markers being taken from the first marker channel but markervalues from the last, has been fixed.

v6.1.1

3 months ago
  • New features
    • pspm_bf_psrf_2_fc
      • pspm_bf_psrf_2_fc allows to set the time delay between CS and US now. It used to set a basis function for the CS and for the US response with a time delay of 3.5 s as standard.
    • pspm_dcm
      • Missing data epochs from file and data can be combined.
    • pspm_glm
      • pspm_glm now allows a two-element vector and construct the dictionary accordingly. Previously it only allows scalar values in model.window.
  • New functions
    • pspm_check_model
      • The function checks the fields of models.
    • pspm_combine_markerchannels
      • The function allows users to use the GLM option markervalues to create onsets definition from channels distributed across multiple channels.
    • pspm_tam
      • TAM stands for Trial Average Model. The function allows to fit models on trial-averaged data.
  • Adjustments
    • pspm_pupil_pp
      • From then on, pupil preprocessing functions create channels of type pupil rather than pupil_pp.
    • pspm_split_sessions
      • Markers at beginning or end of file are no longer dropped, as marker duplication is not an issue here.
  • Bug fixes
    • pspm_con
      • A bug caused by the new varargout logic of pspm_load1 has been fixed.
    • pspm_dcm
      • A bug that leads dropping sub-threshold missing data periods has been fixed.
    • pspm_get_spike
      • A minor bug caused by a non-existing variable has been fixed.
    • pspm_scr_pp
      • A bug that could change the original file if it saves epochs to missing_epoch.mat has been fixed.
  • Improvements
    • pspm_extract_segments
      • Now pspm_extract_segments process the data after excluding the missing data information that is provided in the model structure.
    • pspm_dcm
      • Processed data are now initialised as data matrix with NaN before inserting data of variable size.
    • pspm_glm
      • A warning has been added if any duration in onset definition is above 0 and modality is not sps.
    • pspm_overwrite
      • The logic of overwriting files in PsPM has been updated. Specifically, the overwriting operation is applicable only if there has been a file with the proposed name of the output file. A warning will be provided if the user chooses not to overwrite the file, since the output of PsPM will not be saved.
    • pspm_split_sessions
      • A misleading warning provided by pspm_split_sessions when it processes a missing epoch file has been fixed.
      • The help text of split_sessions in the GUI has been updated.
  • UI improvements
    • PsPM's UI in Linux environment has been improved.

v6.1.0

8 months ago

General

  • Minimum version of MATLAB
  • Entering PsPM
    • Entering PsPM is now hybrid based on the version of MATLAB, namely through AppDesigner or Guide. PsPM will be entered through AppDesigner when supported and through Guide for older versions of MATLAB. To call PsPM, users should still use the command pspm in the Command Window of MATLAB, where the appropriate way of entering PsPM will be recognised automatically.
    • Users can still use their preferred way to enter PsPM. To enter PsPM through AppDesigner, please type pspm_appdesigner. To enter PsPM through Guide, which is the classic entrance, please type pspm_guide.
    • The AppDesigner version of PsPM UI is newly introduced by MATLAB and the encouraged way for launching PsPM, and it has no functionality difference than the Guide version of PsPM UI.
    • Both AppDesigner and Guide are designed and tested for Windows, macOS (either Intel or Apple Silicon) and Linux. Issues of opening PsPM through either of the two UI systems are encouraged to be reported to PsPM developing group at GitHub.
  • Introducing pspm_options
    • A new function pspm_options is introduced to PsPM for controlling the default and acceptable values of the struct options used by most PsPM functions. The default values of the fields in the struct options for various functions can be directly checked by searching in pspm_options.
    • The default values in pspm_options have been checked and tested for PsPM. If preferred values are different from defaults, users can specify them when calling the corresponding PsPM functions, and the corresponding functions and pspm_options will always respect the users' specification with the highest priority. However, the user's specification needs to satisfy the condition set in pspm_options, and invalid values may be reported as errors.
  • UI Improvements
    • The UI for the following features has been improved and tested
      • Launchpad (AppDesigner)
      • Launchpad (Guide)
      • Batch editor
      • Display data
      • Contrast manager
  • Help text
    • The help text has been updated for all PsPM functions. Help text can be checked by right clicking the functions.

Bug Fixes

  • UI
    • A bug that used to make PsPM crash when Pupil size convert and Gaze convert in Data Preprocessing were selected has been fixed.
    • A bug that leads to error when PsPM is started offline has been fixed.
    • A bug that leads to incorrect x labels in pspm_rev_dcm has been fixed.
  • pspm_convert_...
    • A bug that leads PsPM to crash, which is caused by outdated UI calling for pspm_convert_... functions, has been fixed.
  • pspm_get_eyelink
    • A bug that causes issues when importing eye link data that is scanned at both left and right sides has been fixed.
  • pspm_glm
    • A bug that incorrectly identifies the NaNs in the input data has been fixed.
  • pspm_sf
    • A bug that has lead to incorrect input datafile assigning has been fixed.
    • A bug that leads PsPM crash when pspm_sf is analysing data with missing epochs has been fixed.
    • A bug that leads to error when pspm_sf analyses data where time unit is defined as marker has been fixed.
  • pspm_split_sessions
    • pspm_split_sessions now considers marker_chan_num when calling pspm_trim.

New Features and Improvements

  • channel
    • We have generalised the channel related variables throughout PsPM, which are given as
      • chan/channelchannel
      • chans/channelschannels
      • channel_units/channels_units/chan_units/chans_unitschannel_units
      • chan_combinechannel_combine
      • chan_actionchannel_action
      • channels_headerchannel_header
      • chantypechanneltype
  • import_eyelink
    • Improved import_eyelink for adding some support for importing eyelink data converted by higher version of .EDF files.
  • pspm_con2
    • pspm_con2 is now using pspm_overwrite.
  • pspm_dcm and pspm_dcm_inv
    • .flexevents and .fixevents are now fields of model instead of options.
    • pspm_dcm now uses pspm_get_timing to handle missing epochs.
    • Improved missing epoch support
      • The field .missing is now allocated from options to model.
      • .missing_data is used to load missing epoch data that was loaded from dcm, as an optional field.
    • The index is changed so that the first event will not be excluded when at time 0 in session.
  • pspm_extract_segments
    • The first channel is always referred by marker_chan as default.
  • pspm_glm
    • The fallback for options.exclude_missing has been set for pspm_glm, which is not to exclude any missing epochs.
    • A bug that leads to incorrect missing epoch checking has been fixed.
    • Help text was updated.
    • marker_chan_num now refers to the first marker channel as default.
    • pspm_glm now uses pspm_get_timing to handle missing epochs .
  • pspm_interp1
    • pspm_interp1 now considers the data where no valid values are detected and interpolation is not possible, and warnings will be reported in this case.
  • pspm_merge
    • The default value is set to be [1,2], meaning the first channel will be merged as the default option.
  • pspm_prepdata
    • pspm_prepdata now uses interpolation to handle data with NaN.
      • Data that begins and/or ends with NaN will be filled with the first/last non-NaN values in those positions.
  • pspm_sf
    • pspm_sf now supports missing epochs.
      • Now allow input with NaN that indicates missing epochs.
      • Missing epochs can be specified with options.missing or the automatic NaN detection.
      • Missing epochs will be verified with options.missingthresh.
      • When the missing epochs are longer than 2s, the result out will be converted to [].
      • The UI of SF analysis now allows using missing epochs from files or not to define any missing epochs.
    • pspm_sf now uses pspm_get_timing to handle missing epochs.
    • marker_chan_num now refers to the first marker channel as default.
  • pspm_sf_dcm
    • pspm_sf_dcm now uses pspm_interp1 for interpolating data.
  • pspm_text
    • The Matlab file that stores the information of help text pspm_text.mat will be stored inside the source folder of PsPM and will be deleted when PsPM is quit.
  • pspm_trim
    • marker_chan_num now refers to the first marker channel as default.

Minor Adjustments

  • pspm_sf, pspm_glm and pspm_dcm
    • The option marker_chan_num_event is removed.
    • In default, the first marker channel / event channel is always selected and no users' customisation is allowed.
    • The last data channel / wave channel is always selected.

Reference document

  • New document PsPM Reference for checking the default values and restrictions of options fields.

v6.0.0

1 year ago

New features

  • PsPM now support a developer mode, which allows
    • Minimised terminal output.
    • Automagical parameter selection for testing.
    • Always overwrite files.
  • pspm_extract_segments
    • now allows an option z-score for normalisation.
  • pspm_find_valid_fixations
    • now allows processing preprocessed left/right/combined pupil data.
  • pspm_gaze_pp
    • now allows preprocessing gaze signals.
  • pspm_overwrite
    • now handles the behaviour of overwrite if not defined by the user, and is used where applicable.
  • pspm_time2index
    • now processes adjustable conversion from time to index globally.
  • pspm_update_chantype
    • now allows generalised behaviour of updating channel types.

Bug fix

  • General
    • A bug which may lead to failure of PsPM path searching has been fixed.
    • A bug which may display figures in the GUI has been fixed.
  • pspm_bf_spsrf_box
    • now uses correct parameter settings.
  • pspm_convert_ppu2hb
    • terminates if only one pulse is detected.
  • pspm_data_editor
    • now able to show figures when import a datafile correctly.
  • pspm_dcm
    • now handles missing epochs that start at 0 correctly.
    • now processes variables properly to make length consistent.
  • pspm_display
    • now display plots with correct x-axis ranges.
  • pspm_glm
    • now applies correct variable settings.
    • now produces results correctly when facing many short missing epochs.
  • pspm_interpolate
    • now returns results correctly when applying forced extrapolation.
  • pspm_resp_pp
    • now allows replace as the channel action properly.
  • pspm_scr_pp
    • now uses inconsistent variables when delivering missing epochs.
    • now writes data out properly when epochs are removed.
    • now properly handles data if the first channel is not scr.
  • pspm_sf
    • now refer to model file correctly.
  • pspm_split_sessions
    • now processes missing files with an epoch starting at 0s properly.
    • now properly catches edge cases.
  • ValidSamplesModel
    • now properly throw warnings if histogram counts are zeros.

Improvements

  • General
    • now supports loading ppg data.
    • now displays improved terminal output text.
  • pspm_con1
    • now assesses the statistics in the arguments for throwing warnings when detecting invalid values.
  • pspm_data_editor
    • now displays the x and y axis label and text according to the input data.
    • now sorts the epoch list according to the start data point.
  • pspm_get_marker
    • now detect and update the field flank when applicable.
  • pspm_import
    • now detect and update the field flank when applicable.
  • pspm_load_data
    • now checks whether the input has an empty channel.
    • now autofills some variables.
  • pspm_pupil_pp
    • now calls pspm_load_data to load single channels.
  • pspm_rev_glm
    • now display normalised data for visualisation purpose only.
  • pspm_write_channel
    • now checks whether the input has an empty channel.

GUI

  • "Edit defaults" in the GUI is now working properly.
  • GUI typeface is now generalised across the software.

Discussion Page

PsPM now has a discussion page for users to ask questions about the usage of the software.

v5.1.1

2 years ago

New Functions

  • pspm_bf_data
    • New function template to allow users creating their own basis functions from a data vector.

UI Improvements

  • PsPM now has an improved GUI for the main screen and pspm_display.
  • PsPM now uses system specific design for Windows, macOS and Linux.
  • A bug that affects GUI display has been fixed.

Bugfixes

  • pspm_dcm
    • A bug of channel and data referring that leads to incorrect missing epoch processing has been fixed.
    • pspm_dcm now handles empty epochs correctly.
  • pspm_scr_pp
    • A bug that throws warning when GUI is called has been fixed.
  • pspm_split_sessions
    • A bug that leads to GUI crash has been fixed.
    • pspm_split_sessions now accepts correct number of data files and missing epoch files in the GUI.
    • pspm_split_sessions now processes missing epochs correctly.

v5.1.0

2 years ago

New Features

  • PsPM now has an improved GUI with a more eye-friendly colour and typeface.
  • PsPM now has an alternative GUI built by using .mlapp, which has a more modern appearance across different platforms consistently.

New Functions

  • pspm_scr_pp
    • pspm_scr_pp replaces the classic pspm_simple_qa.
    • pspm_scr_pp now allows users to detect clipping, where the results can be exported together with the original outcome.
    • pspm_scr_pp now allows users to just write artefact epochs and leave data unchanged.

Changes

  • General
    • Dialogs have been rewritten for avoiding endless loops.
    • In the menu, pre-processing has been reconstructed, where pupil size convert and gaze convert are now under pupil and eye tracking.
    • PsPM now always generates test data inside the PsPM folder.
  • pspm_interpolate
    • pspm_interpolate now processes data ending with NaN well without throwing warnings.
  • pspm_find_sounds
    • pspm_find_sounds now throws warning when some data was excluded due to the strict parameter setting.
  • pspm_split_sessions
    • pspm_split_sessions is now using pspm_trim for processing data.

Bugfixes

  • pspm_glm
    • A bug that leads to the failure of selecting left/right eye has been fixed.
  • pspm_load1 and pspm_dcm
    • A bug that leads to the failure of exporting statistics has been fixed.
  • pspm_resp_pp
    • A bug that leads to the failure of opening batch for respiration data processing has been fixed.
  • pspm_scr_pp
    • A bug that leads to incorrect matrix construction has been fixed.

v5.0.0

3 years ago

New Features

  • Allow pspm_data_editor to load an epoch file.
  • Allow pspm_simple_qa to suppress classification of discretisation oscillations as artefacts, to expand artefact windows, and to automatically remove small data islands embedded in artefacts.
  • Allow pspm_simple_qa to store the epochs of data that are filtered out into an output .mat file. The accompanying GUI editor is available under 'Artefact removal' in the tools section.
  • Allow pspm_convert_gaze_distance to convert from distance units to degrees or scanpath speed. The accompanying GUI editor is available under 'Gaze Convert' in the data preprocessing section.
  • Add the possibility to select the flank in the 'Import' module of the GUI of PsPM.
  • Add the possibility to import DSV (delimiter separated values) as well as CSV (comma separated values) data files.

Changes

  • Split the data convert functionality in tools into the 'Gaze Convert' and 'Pupil Size convert' in the data preprocessing section.
  • Factor out blink/saccade edge filtering logic out of pspm_get_eyelink to pspm_blink_saccade_filt.
  • Deprecate edge filtering functionality in pspm_get_eyelink.
  • Make pspm_pupil_correct_eyelink use the last gaze channel when there are multiple gaze x (similarly y) channels in the file.
  • Make pspm_extract_segments return NaN percentages and not ratios.

Bugfixes

  • Scale DCM plot XTick by sample rate.
  • Correct index offset when dealing with the descending flank for continuous markers.
  • Allow pspm_display to plot any type of marker channels.
  • Fix pspm_display behaviour when user tries to load data with less channels than the data he/she is currently displaying.
  • Fix pspm_split_sessions behaviour when the intertrial interval in the data is random. Add an option randomITI (0 or 1) which in the latter case it forces the function to evaluate the mean marker distance using all the markers and not per session. Default value: 0.
  • Remove startsWith and endsWith from all functions for a better backward compatibility.
  • Fix bug in pspm_trim which was wrongly defining the starting trimming point index.

v4.3.0

4 years ago

New Features

  • In pspm_get_events, import.flank can be now set to 'all' what would import all markers and data related to them.
  • pspm_display allows now to display pupil size units and the gaze x & y coordinate units on the y-axis.
  • pspm_extract_segments can be used now with raw data and thus be called easily within another function.

Changes

  • pspm_version has a new URL and thus do not send any warning about version checks anymore.
  • import_eyelink do not import markers which are outside the session end time (END marker).
  • import_eyelink sends a warning whenever two markers have the same timestamp.
  • In pspm_get_eyelink, import.flank set to 'all'.
  • The test of pspm_extract_segments was adapted to the new feature.
  • External functions and libraries were regrouped in one folder called ext.

Bugfixes

  • Fix a bux in pspm_bf_lcrf_gm and pspm_bf_ldrf_gm where the offset was wrongly implemented.
  • Fix a bug in pspm_compute_visual_angle where there was an error in the conversion factor of pixels wrt. to mm.

v4.2.1

4 years ago

New Functions

  • Three new tests (pspm_hb2hp_test.m, pspm_filtfilt_test.m, pspm_butter_test.m)

Changes

  • pspm_display and pspm_ecg_editor do not perform filtering anymore.
  • Treatment of missing data in DCM is now the same regardless of whether they are specified as NaN or via model.missing.
  • Eyelink import parameter blink/saccade edge discard factor default value has been set to 0. This means no extra samples are discarded around blinks/saccades.

Bugfixes

  • Fix a bug in pspm_hb2hp where the function crashed when there is no heartbeat left after lower and upper bound filtering of the heartbeat periods.
  • Fix a bug in import_eyelink which imported more markers than the number of markers in the actual .asc file.
  • Fix a bug in pspm_display which crashed when trying to plot ECG signal that contains NaN.
  • Fix a bug in pspm_prepdata which returned only NaN when input signal contained some NaN values.
  • Fix a bug in pspm_version which crashed when MATLAB was invoked with -nojvm.
  • Fix a bug in pspm_get_viewpoint which returned +,=,+ lines in the marker list and which crashed when given a viewpoint data file containing multiple sessions separated with +,= type of markers.
  • Fix a bug in import_viewpoint which created a new session for every marker containing a + somewhere, e.g.: CS+.
  • Fix a bug in pspm_get_events which was not able to locate a marker if it occurred on the first or last sample in a given data file.
  • Fix a bug in pspm_filtfilt which crashed when the filter parameters were of dimension one.

v3.0.0

4 years ago

Import {#import .unnumbered .unnumbered}

New data types were implemented

  • Noldus Observer compatible
  • Eyelink

Untested data types

CNT data import has not been not tested -- please contact the developers with sample data files.

Filtering for SCR models

Previous versions of PsPM have used a bi-directional high pass filter of 0.0159 for all SCR analyses. We have recently shown a better predictive validity for GLM with a unidirectional filter of 0.05 Hz [@Bach:2013aa]. This also implies that different filters are used for different models. These are now set as defaults, and the way the default settings are implemented has changed. It is now possible to alter the filter settings in the model definition, although we discourage this.

New SF method

A matching pursuit algorithm is now implemented to approximate the number of spontaneous fluctuations (SF) in skin conductance [@Bach:2015aa].

General linear modelling (GLM)

Parametric modulators

Parametric modulators (pmods) are z-normalised before being entered into the design matrix. This is to account for possibly very large or very small numbers -- a badly scaled design matrix can cause induced instability in the inversion. The parameter estimates of the pmods were not transformed back in previous versions, i. e. the parameter estimates of the pmods were independent of the scaling of the pmods. This is appropriate as long as they are the same for all datasets, or if analysis is done strictly on a within-subject level. Some researchers have reported designs in which inference was to be drawn on parameter estimates of pmods on a between-group level, and where the pmods systematically differed between these groups. To account for this possibility, the parameter estimates are now transformed back, such that they refer to the pmods in their original scaling/units.

Parametric confounds

Previous versions of PsPM contained an option to include a parametric modulator across all event types, to account for confounds across all conditions. For example, in an experiment with 5 conditions, one could have included 5 regressors, plus one reaction time confound across all events, without including an associated regressor that contains the event onsets for all these events. This option was removed.

Design matrix filtering

Previous versions of PsPM filtered the design matrix after orthogonalisation of basis sets. This can introduce unwanted dependencies between regressors. PsPM 3.0 filters the regressors first, then orthogonalises the basis sets.

File format

Some minor changes have been made to the data format. In particular, marker channels from previous versions can not be read with the current version - such data files have to be re-imported. Model files have changed drastically, and model files from previous versions can not be read with the current version of the software.

VB inversion

The VBA toolbox (http://mbb-team.github.io/VBA-toolbox/) was updated in October 2014 [@Daunizeau:2014aa]. This update incorporates bugfixes in this toolbox and slightly changed the model estimates in our test models. In terms of predictive validity, we noted that there was no consistent benefit of the old or new version of this code (Figure [fig:VBA]{reference-type="ref" reference="fig:VBA"}).

<insert_image_here> Model comparison between old and new versions of the VBA toolbox, based on two delay fear conditioning datasets. The log Bayes factor quantifies the difference between negative log likelihood (nLL) of parameter estimates obtained from model inversion using the old and new version of VBA. A difference in nLL above 3 indicates significant differences in model evidence which is not exceeded for either data set. Analysis and figure contributed by Matthias Staib.