Home > FMAToolbox > Data > SetCurrentSession.m

SetCurrentSession

PURPOSE ^

SetCurrentSession - Load all data for a given recording session.

SYNOPSIS ^

function SetCurrentSession(varargin)

DESCRIPTION ^

SetCurrentSession - Load all data for a given recording session.

 Set current session files and read data from disk. Calling SetCurrentSession
 without parameters will display a file selection dialog.

  USAGE

    SetCurrentSession(filename,<options>)

    filename       optional parameter file name; use 'same' to force reload
    <options>      optional list of property-value pairs (see table below)

    =========================================================================
     Properties    Values
    -------------------------------------------------------------------------
     'spikes'      load or skip spike files (default = 'on')
     'verbose'     display progress messages (default = 'on')
    =========================================================================

  NOTE

    If no parameter file name is specified, an interactive file selection
    dialog is displayed.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function SetCurrentSession(varargin)
0002 
0003 %SetCurrentSession - Load all data for a given recording session.
0004 %
0005 % Set current session files and read data from disk. Calling SetCurrentSession
0006 % without parameters will display a file selection dialog.
0007 %
0008 %  USAGE
0009 %
0010 %    SetCurrentSession(filename,<options>)
0011 %
0012 %    filename       optional parameter file name; use 'same' to force reload
0013 %    <options>      optional list of property-value pairs (see table below)
0014 %
0015 %    =========================================================================
0016 %     Properties    Values
0017 %    -------------------------------------------------------------------------
0018 %     'spikes'      load or skip spike files (default = 'on')
0019 %     'verbose'     display progress messages (default = 'on')
0020 %    =========================================================================
0021 %
0022 %  NOTE
0023 %
0024 %    If no parameter file name is specified, an interactive file selection
0025 %    dialog is displayed.
0026 
0027 % Copyright (C) 2004-2017 by Michaƫl Zugaro, 2014 by Gabrielle Girardeau
0028 %
0029 % This program is free software; you can redistribute it and/or modify
0030 % it under the terms of the GNU General Public License as published by
0031 % the Free Software Foundation; either version 3 of the License, or
0032 % (at your option) any later version.
0033 
0034 % Default values
0035 spikes = 'on';
0036 verbose = 'on';
0037 filename = '';
0038 
0039 % Filename?
0040 if nargin ~= 0,
0041     if ~isastring(varargin{1},'spikes'),
0042         filename = varargin{1};
0043         varargin = {varargin{2:end}};
0044     end
0045 end
0046 
0047 % Check number of parameters
0048 if mod(length(varargin),2) ~= 0,
0049   error('Incorrect number of parameters (type ''help <a href="matlab:help SetCurrentSession">SetCurrentSession</a>'' for details).');
0050 end
0051 
0052 % Parse parameter list
0053 for i = 1:2:length(varargin),
0054     if ~ischar(varargin{i}),
0055         error(['Parameter ' num2str(i+2) ' is not a property (type ''help <a href="matlab:help SetCurrentSession">SetCurrentSession</a>'' for details).']);
0056     end
0057     switch(lower(varargin{i})),
0058         case 'verbose',
0059             verbose = lower(varargin{i+1});
0060             if ~isastring(verbose,'on','off'),
0061                 error('Incorrect value for property ''verbose'' (type ''help <a href="matlab:help SetCurrentSession">SetCurrentSession</a>'' for details).');
0062             end
0063         case 'spikes',
0064             spikes = lower(varargin{i+1});
0065             if ~isastring(spikes,'on','off'),
0066                 error('Incorrect value for property ''spikes'' (type ''help <a href="matlab:help SetCurrentSession">SetCurrentSession</a>'' for details).');
0067             end
0068         otherwise,
0069             error(['Unknown property ''' num2str(varargin{i}) ''' (type ''help <a href="matlab:help SetCurrentSession">SetCurrentSession</a>'' for details).']);
0070     end
0071 end
0072 
0073 global DATA;
0074 separator = filesep;
0075 
0076 % Initialization
0077 if isempty(DATA) || ~isfield(DATA,'session') || ~isfield(DATA.session,'path') || ~isfield(DATA.session,'basename'),
0078     format long g;
0079     DATA.session.basename = '';
0080     DATA.session.path = '';
0081     DATA.spikeGroups.nGroups = 0;
0082     DATA.spikeGroups.nSamples = [];
0083     DATA.spikeGroups.peakSamples = [];
0084     DATA.spikeGroups.groups = {};
0085     DATA.nChannels = [];
0086     DATA.nBits = [];
0087     DATA.rates.lfp = [];
0088     DATA.rates.wideband = [];
0089     DATA.rates.video = [];
0090     DATA.maxX = [];
0091     DATA.maxY = [];
0092     DATA.events.time = [];
0093     DATA.events.description = {};
0094     DATA.positions = [];
0095     DATA.spikes = [];
0096     % Default settings
0097     GlobalSettings;
0098 end
0099 
0100 if isempty(filename) || (strcmp(filename,'same') && isempty(DATA.session.basename)),
0101     % Interactive mode
0102     [filename,path] = uigetfile('*.xml','Please select a parameter file for this session');
0103     if filename == 0,return; end
0104     filename = [path filename];
0105 end
0106 
0107 if strcmp(filename,'same'),
0108     % Force reload
0109     path = DATA.session.path;
0110     basename = DATA.session.basename;
0111 else
0112     % Parse file name
0113     [path,basename] = fileparts(filename);
0114     if isempty(path),
0115         path = pwd;
0116     else
0117         if ~exist(path),
0118             error(['Directory ''' path ''' does not exist.']);
0119         end
0120         % Clean path (e.g. simplify ../ or ./ substrings) and make it absolute
0121         here = pwd;
0122         cd(path);
0123         path = pwd;
0124         cd(here);
0125     end
0126 end
0127 
0128 if strcmp(verbose,'on'), disp(['Loading session files for ' basename]); end
0129 
0130 % File already loaded?
0131 if strcmp(basename,DATA.session.basename) & strcmp(path,DATA.session.path) & ~strcmp(filename,'same'),
0132     disp(['... session files already loaded, skipping - type SetCurrentSession(''same'') to force reload']);
0133     disp('Done');
0134     return
0135 end
0136 
0137 % Parameter file
0138 DATA = LoadParameters([path separator basename '.xml']);
0139 if strcmp(verbose,'on'), disp(['... loaded parameter file ''' basename '.xml''']); end
0140 
0141 % Event file(s)
0142 DATA.events.time = [];
0143 DATA.events.description = {};
0144 eventFiles = dir([path separator basename '.*.evt']);
0145 if ~isempty(eventFiles),
0146     for i = 1:length(eventFiles),
0147         events = LoadEvents([path separator eventFiles(i).name]);
0148         if isempty(events.time), continue; end
0149         DATA.events.time = [DATA.events.time ; events.time];
0150         DATA.events.description = {DATA.events.description{:} events.description{:}}';
0151         if strcmp(verbose,'on'), disp(['... loaded event file ''' eventFiles(i).name '''']); end
0152     end
0153     [DATA.events.time,i] = sortrows(DATA.events.time);
0154     DATA.events.description = {DATA.events.description{i}}';
0155 else
0156     if strcmp(verbose,'on'), disp('... (no event file found)'); end
0157 end
0158 
0159 % Position file
0160 DATA.positions = [];
0161 if exist([path separator basename '.pos']),
0162     DATA.positions = LoadPositions([path separator basename '.pos'],DATA.rates.video);
0163     if strcmp(verbose,'on'), disp(['... loaded position file ''' basename '.pos''']); end
0164 elseif exist([path separator basename '.whl']),
0165     DATA.positions = LoadPositions([path separator basename '.whl'],DATA.rates.video);
0166     if strcmp(verbose,'on'), disp(['... loaded position file ''' basename '.whl''']); end
0167 elseif exist([path separator basename '.whl']),
0168     DATA.positions = LoadPositions([path separator basename '.mqa'],DATA.rates.video);
0169     if strcmp(verbose,'on'), disp(['... loaded position file ''' basename '.mqa''']); end
0170 else
0171     if strcmp(verbose,'on'), disp('... (no position file found)'); end
0172 end
0173 
0174 % Spike files
0175 if strcmp(spikes,'on'),
0176     DATA.spikes = [];
0177     for i = 1:DATA.spikeGroups.nGroups,
0178         filename = [path separator basename '.' int2str(i) '.clu'];
0179         if exist(filename,'file'),
0180             try
0181                 DATA.spikes = [DATA.spikes;LoadSpikeTimes(filename,DATA.rates.wideband)];
0182                 if strcmp(verbose,'on'), disp(['... loaded spike files ''' basename '.' int2str(i) '.clu''']); end
0183             catch
0184                 if strcmp(verbose,'on'), disp(['... (could not load spike files ''' basename '.' int2str(i) '.clu'')']); end
0185             end
0186         else
0187             filename = [path separator basename '.clu.' int2str(i)];
0188             if exist(filename,'file'),
0189                 try
0190                     DATA.spikes = [DATA.spikes;LoadSpikeTimes(filename,DATA.rates.wideband)];
0191                     if strcmp(verbose,'on'), disp(['... loaded spike files ''' basename '.clu.' int2str(i) '''']); end
0192                 catch
0193                     if strcmp(verbose,'on'), disp(['... (could not load spike files ''' basename '.clu.' int2str(i) ''')']); end
0194                 end
0195             end
0196         end
0197     end
0198     if isempty(DATA.spikes),
0199         if strcmp(verbose,'on'), disp('... (no spike files found)'); end
0200     end
0201 else
0202     if strcmp(verbose,'on'), disp('... (skipping spike files)'); end
0203 end
0204 
0205 % This is updated only once the files have been properly loaded
0206 DATA.session.basename = basename;
0207 DATA.session.path = path;
0208 
0209 if strcmp(verbose,'on'), disp('Done'); end

Generated on Fri 16-Mar-2018 13:00:20 by m2html © 2005