forked from jcbyts/pdstools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimportPLXEvents.m
105 lines (86 loc) · 2.81 KB
/
importPLXEvents.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
function importPLXEvents(epoch, pl)
% import plexon events and strobed into ovation analysis record
% importPLXEvents(epoch, pl)
import ov.*
assert(isa(epoch, 'us.physion.ovation.domain.concrete.Epoch'), 'first argument must be an epoch')
rawPLX = getAnalysis(epoch, 'Raw PLX Data');
if nargin < 2 || isempty(pl)
[plxfile, plxpath] = uigetfile('*.plx');
pl = fullfile(plxpath, plxfile);
end
if isstr(pl)
if exist(pl, 'file')
fprintf('reading in plexon file')
pl = readPLXFileC(pl, 'all');
else
fprintf('fail\r')
return
end
end
[events, strobed] = plx.getEvents(pl);
spikes = plx.getSpikes(pl);
infoFields = fieldnames(pl);
info = struct();
for ii = 1:21
info.(infoFields{ii}) = pl.(infoFields{ii});
end
info.WaveformTime = (-pl.NumPointsPreThr:(pl.NumPointsWave-pl.NumPointsPreThr))/pl.WaveformFreq;
%--------------------------------------------------------------------------------------------%
%% make analog struct:
if numel(pl.ContSampleCounts)~=numel(pl.ContinuousChannels)
analogChannels = 1:numel(pl.ContinuousChannels);
else
analogChannels = find(pl.ContSampleCounts>0);
end
analogSamplingRates = [pl.ContinuousChannels(analogChannels).ADFrequency]';
analogRates = unique(analogSamplingRates); % to sort into lfp and analog
% if only one rate exists, only make the lfp struct
nRates = numel(analogRates);
if nRates > 0
lfpChannels = analogChannels(analogSamplingRates == analogRates(1));
[lfp_info, lfp_data] = plx.getAnalog(pl, lfpChannels);
if nRates > 1
contChannels = analogChannels(analogSamplingRates == analogRates(2));
[an_info, an_data] = plx.getAnalog(pl, contChannels);
end
end
if isempty(rawPLX)
epoch.addAnalysisRecord('Raw PLX Data', epoch.getMeasurements, epoch.getProtocol, ovation.struct2map(info));
rawPLX = getAnalysis(epoch, 'Raw PLX Data');
end
if isempty(ov.getOutput(rawPLX, 'continuous'))
mkdir('tmp')
fname = [char(epoch.getExperiment.getPurpose) '_continuous.mat'];
fname = fullfile(pwd, 'tmp', fname);
save(fname, 'an_info', 'an_data')
addOutput(rawPLX, fname, 'continuous')
delete(fname)
rmdir('tmp')
end
if isempty(ov.getOutput(rawPLX, 'lfp'))
mkdir('tmp')
fname = [char(epoch.getExperiment.getPurpose) '_lfp.mat'];
fname = fullfile(pwd, 'tmp', fname);
save(fname, 'lfp_info', 'lfp_data')
addOutput(rawPLX, fname, 'lfp')
delete(fname)
rmdir('tmp')
end
if isempty(ov.getOutput(rawPLX, 'events'))
mkdir('tmp')
fname = [char(epoch.getExperiment.getPurpose) '_events.mat'];
fname = fullfile(pwd, 'tmp', fname);
save(fname, 'events', 'strobed', 'info')
addOutput(rawPLX, fname, 'events')
delete(fname)
rmdir('tmp')
end
if isempty(ov.getOutput(rawPLX, 'spikes'))
mkdir('tmp')
fname = [char(epoch.getExperiment.getPurpose) '_spikes.mat'];
fname = fullfile(pwd, 'tmp', fname);
save(fname, 'spikes')
addOutput(rawPLX, fname, 'spikes')
delete(fname)
rmdir('tmp')
end