Browse Source

added example function only for loading data

MHK 3 years ago
parent
commit
e82eebc836
1 changed files with 160 additions and 0 deletions
  1. 160 0
      Analysis/example_load_rgc_data.m

+ 160 - 0
Analysis/example_load_rgc_data.m

@@ -0,0 +1,160 @@
+
+function expdata = example_load_rgc_data(varargin)
+%
+%
+%%% example_load_rgc_data %%%
+%
+%
+% This function loads the data for any example cell from the accompanying
+% dataset of Khani and Gollisch (2021). The dataset is available at:
+% https://gin.g-node.org/gollischlab/Khani_and_Gollisch_2021_RGC_spike_trains_chromatic_integration
+% This function first get the path of the downloaded database and then loads
+% the frametimes and spike times of a selected ganglion cells from the list
+% of avaiable good cells. The list that can be found at list_of_good_cells.txt
+% inside each folder of the database.
+% example use: 1- example_load_rgc_data();
+%              2- example_load_rgc_data('datapath','PATH TO DOWNLOAD FOLDER')
+%              3- example_load_rgc_data('datapath','PATH TO DOWNLOAD FOLDER', stimulusnumber, 7)
+%              4- example_load_rgc_data('datapath','PATH TO DOWNLOAD FOLDER', cellnumber, 12, clusternumber, 12)
+%              4- example_load_rgc_data('datapath','PATH TO DOWNLOAD FOLDER', stimulusnumber, 7, cellnumber, 12, clusternumber, 12)
+%
+%
+% ===============================Inputs====================================
+%
+%   datapath        :   path to the folder in the database.
+%   stimulusnumber  :   number to select the correct stimulus.
+%   cellnumber      :   an example cell number from the list of good cells.
+%   clusternumber   :   a cluster number for the selected cell.
+%
+%================================Output====================================
+%
+%   expdata         :   spiketime, frametimes, stimulus parameters and cell
+%                       id information of the selected cell.
+%
+% written by Mohammad, 18.02.2021
+
+%--------------------------------------------------------------------------------------------------%
+%----------                              main-function                                   ----------%
+%--------------------------------------------------------------------------------------------------%
+
+% first load the data for an example cell
+[dp, stimulusnumber, cellnumber, clusternumber]         =       select_example_cell(varargin{:});
+% now load the date that selected example cell
+expdata         =       load_data_for_selected_cell(dp, stimulusnumber, cellnumber, clusternumber);
+expdata.datapath = dp;
+expdata.stimulusnumber = stimulusnumber;
+expdata.cellnumber = cellnumber;
+expdata.clusternumber = clusternumber;
+
+end
+
+%--------------------------------------------------------------------------------------------------%
+%----------                               sub-functions                                  ----------%
+%--------------------------------------------------------------------------------------------------%
+
+function [dp, stimulusnumber, cellnumber, clusternumber] = select_example_cell(varargin)
+% first parse the user inputs
+p = inputParser();      % check the user options.
+p.addParameter('datapath', [],  @(x) ischar(x) || isstring(x));
+p.addParameter('stimulusnumber', [], @isnumeric);
+p.addParameter('cellnumber', [], @isnumeric);
+p.addParameter('clusternumber', [], @isnumeric);
+p.addParameter('help', false,  @(x) islogical(x) || (isnumeric(x) && ismember(x,[0,1])));
+
+p.parse(varargin{:});
+% defualt parameters
+defpara     =    p.Results;
+
+if isempty(defpara.datapath)
+    dp                  =       uigetdir('Select an experiment folder:');
+else
+    dp                  =       defpara.datapath;
+end
+
+if isempty(defpara.cellnumber) || isempty(defpara.clusternumber)
+    listofgoodcells     =       load([dp,filesep,'list_of_good_cells.txt'],'-ascii');
+    cellabels   =   sprintfc('cell %g, cluster %g',listofgoodcells);
+    if numel(cellabels) > 1
+        idx         =   listdlg('PromptString',{'Select an example ganglion cell:'},...
+            'SelectionMode','single','ListString',cellabels,'listsize',[250 250]);
+    else
+        idx         =   1;
+    end
+    cellnumber          =       listofgoodcells(idx,1);
+    clusternumber       =       listofgoodcells(idx,2);
+else
+    cellnumber      =   defpara.cellnumber;
+    clusternumber   =   defpara.clusternumber;
+end
+
+if isempty(defpara.stimulusnumber)
+    stimnames           =       importdata([dp,filesep,'stimuli_names.txt']);
+    cinames     =   stimnames(~(cellfun('isempty',(strfind(stimnames,'_Chromatic_Integration_')))));
+    cinames     =   cinames((cellfun('isempty',(strfind(cinames,'Local')))));
+    cinames     =   cinames((cellfun('isempty',(strfind(cinames,'Grating')))));
+    
+    if numel(cinames) > 1
+        idx     = listdlg('PromptString',{'Select an example dataset:'},...
+            'SelectionMode','single','ListString',cinames,'listsize',[450 100]);
+        cinames     =   cinames{idx};
+    end
+    stimulusnumber      =       str2double(extractBefore(cinames,'_Chromatic'));
+else
+    stimulusnumber  =       defpara.stimulusnumber;
+end
+
+end
+
+%--------------------------------------------------------------------------------------------------%
+
+function expdata = load_data_for_selected_cell(dp, stimnum, cellnum, clusternum)
+%
+ftfolder        =       [dp,filesep,'frametimes'];
+if ~exist(ftfolder,'dir'),      ftfolder    =   dp;     end
+rasfolder       =       [dp,filesep,'spiketimes'];
+if ~exist(rasfolder,'dir'),      rasfolder    =   dp;     end
+paramfolder     =       [dp,filesep,'stimulusparameters'];
+if ~exist(paramfolder,'dir'),      paramfolder    =   dp;     end
+
+ftnames         =       dir([ftfolder, filesep, num2str(stimnum,'%02g'),'*_frametimings.txt']);
+rastername      =       [rasfolder, filesep, sprintf('%d_SP_C%d%02d.txt', stimnum, cellnum, clusternum)];
+
+warning('off','all');   % this is supress the warning about long names, hopefully nothing happen in between these lines!
+expdata.spiketimes      =       load(rastername, '-ascii');
+expdata.frametimes      =       load([ftfolder,filesep,ftnames.name], '-ascii');
+
+stimpath                =       dir([paramfolder,filesep,num2str(stimnum,'%02g'),'*_parameters.txt']);
+
+% now reading the txt file with parameters
+fid             =       fopen([paramfolder,filesep,stimpath.name]);
+tline           =       fgetl(fid);
+while ischar(tline)
+    tline       =       fgetl(fid);
+    if tline    ==      -1,     break;      end
+    fn          =       extractBefore(tline,' = ');
+    if isempty(fn),     continue;           end
+    val         =       extractAfter(tline,' = ');
+    % to convert to double
+    if ~isnan(str2double(val))
+        val     =       str2double(val);
+    end
+    % to convert to logical
+    if strcmp(val,'true'),        val = true;           end
+    if strcmp(val,'false'),       val = false;          end
+    % store the values in a structure
+    stimpara.(fn)       =       val;
+end
+fclose(fid);
+
+expdata.stimpara    =       stimpara;
+expdata.name        =       extractBefore(ftnames.name,'_frametimings.txt');
+expdata.paraname    =       extractBefore(stimpath.name,'_parameters.txt');
+if strcmp(expdata.name , expdata.paraname)
+    expdata         =       rmfield(expdata,'paraname');
+end
+warning('on','all');
+
+end
+
+%--------------------------------------------------------------------------------------------------%
+