Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F103590739
spm_eeg_combineplanar.m
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Mar 3, 05:19
Size
6 KB
Mime Type
text/plain
Expires
Wed, Mar 5, 05:19 (1 d, 7 h)
Engine
blob
Format
Raw Data
Handle
24620319
Attached To
R6832 iCAPs public
spm_eeg_combineplanar.m
View Options
function
D
=
spm_eeg_combineplanar
(
S
)
%
Combine
data
from
MEGPLANAR
sensors
%
FORMAT
D
=
spm_eeg_combineplanar
(
S
)
%
%
S
-
optional
input
struct
%
fields
of
S:
%
D
-
MEEG
object
or
filename
%
mode
-
%
'
append
'
-
add
combined
channels
to
the
origal
channels
%
'
replace
'
-
replace
MEGPLANAR
with
combined
[
default
]
%
'
replacemeg
'
-
replace
all
MEG
channels
with
combined
but
%
keep
non
-
MEG
%
'
keep
'
-
only
write
out
the
combined
channels
%
%
prefix
-
prefix
for
the
output
file
[
default
:
'P'
]
%
%
Output:
%
D
-
MEEG
object
(
also
written
on
disk
)
%
%
__________________________________________________________________________
%
Copyright
(
C
)
2008
-
2017
Wellcome
Trust
Centre
for
Neuroimaging
%
Vladimir
Litvak
%
$Id:
spm_eeg_combineplanar
.
m
7132
2017
-
07
-
10
16
:
22
:
58
Z
guillaume
$
SVNrev
=
'
$Rev:
7132
$
'
;
%-
Startup
%--------------------------------------------------------------------------
spm
(
'
FnBanner
'
,
mfilename
,
SVNrev
);
spm
(
'
FigName
','
MEG
Combine
planar
'
);
spm
(
'
Pointer
','
Watch
'
);
if
~
isfield
(
S
,
'
prefix
'
),
S
.
prefix
=
'P'
;
end
if
~
isfield
(
S
,
'
mode
'
),
S
.
mode
=
'
replace
'
;
end
D
=
spm_eeg_load
(
S
.
D
);
isTF
=
strncmpi
(
D
.
transformtype
,
'
TF
'
,
2
);
chanset
=
spm_eeg_planarchannelset
(
D
.
chanlabels
);
chanind
=
[];
labelnew
=
{};
for
i
=
1
:
size
(
chanset
,
1
)
cind
=
D
.
indchannel
(
chanset
(
i
,
1
:
2
));
if
length
(
cind
)
==
2
chanind
=
[
chanind
cind
];
labelnew
=
[
labelnew
;
chanset
(
i
,
end
)];
end
end
megind
=
D
.
indchantype
(
'
MEG
'
);
planarind
=
D
.
indchantype
(
'
MEGPLANAR
'
);
%
add
a
row
of
zeros
;
chanind
(
3
,
end
)
=
0
;
copyind
=
[];
switch
S
.
mode
case
'
append
'
copyind
=
1
:
D
.
nchannels
;
copyind
=
[
copyind
;
copyind
];
chanind
(
3
,
:
)
=
(
D
.
nchannels
+
1
)
:
(
D
.
nchannels
+
size
(
chanind
,
2
));
case
{
'
replace
'
,
'
replacemeg
'
}
ind
=
1
;
for
i
=
1
:
D
.
nchannels
if
any
(
i
==
planarind
)
k
=
find
((
chanind
(
1
,
:
)
==
i
)
|
(
chanind
(
2
,
:
)
==
i
));
if
~
isempty
(
k
)
&&
(
chanind
(
3
,
k
)
==
0
)
chanind
(
3
,
k
)
=
ind
;
ind
=
ind
+
1
;
end
elseif
isequal
(
S
.
mode
,
'
replace
'
)
||
~
any
(
i
==
megind
)
copyind
=
[
copyind
[
i
ind
]
'
];
ind
=
ind
+
1
;
end
end
case
'
keep
'
copyind
=
[];
chanind
(
3
,
:
)
=
1
:
size
(
chanind
,
2
);
end
if
isempty
(
copyind
)
Nchannels
=
max
(
chanind
(
3
,
:
));
else
Nchannels
=
max
([
chanind
(
3
,
:
),
copyind
(
2
,
:
)]);
end
%-
Generate
new
MEEG
object
with
new
files
%--------------------------------------------------------------------------
if
isTF
Dnew
=
clone
(
D
,
[
S
.
prefix
fname
(
D
)],
[
Nchannels
D
.
nfrequencies
D
.
nsamples
D
.
ntrials
],
1
);
else
Dnew
=
clone
(
D
,
[
S
.
prefix
fname
(
D
)],
[
Nchannels
D
.
nsamples
D
.
ntrials
],
1
);
end
if
strcmp
(
D
.
type
,
'
continuous
'
)
%-
Continuous
data
%----------------------------------------------------------------------
blksz
=
D
.
fsample
;
blknum
=
floor
(
D
.
nsamples
/
blksz
);
spm_progress_bar
(
'
Init
'
,
blknum
,
'
Data
blocks
processed
'
);
if
blknum
>
100
,
Ibar
=
floor
(
linspace
(
1
,
blknum
,
100
));
else
Ibar
=
1
:
blknum
;
end
if
isTF
i
=
1
;
while
1
if
i
<=
blknum
Iblock
=
((
i
-
1
)
*
blksz
+
1
)
:
(
i
*
blksz
);
elseif
(
i
==
(
blknum
+
1
))
&&
blknum
*
blksz
<
D
.
nsamples
Iblock
=
(
blknum
*
blksz
+
1
)
:
D
.
nsamples
;
else
break
;
end
planar1
=
D
(
chanind
(
1
,
:
),
:
,
Iblock
);
planar2
=
D
(
chanind
(
2
,
:
),
:
,
Iblock
);
Dnew
(
chanind
(
3
,
:
),
:
,
Iblock
)
=
planar1
+
planar2
;
if
~
isempty
(
copyind
)
Dnew
(
copyind
(
2
,
:
),
:
,
Iblock
)
=
D
(
copyind
(
1
,
:
),
:
,
Iblock
);
end
if
any
(
Ibar
==
i
),
spm_progress_bar
(
'
Set
'
,
i
);
end
i
=
i
+
1
;
end
else
i
=
1
;
while
1
if
i
<=
blknum
Iblock
=
((
i
-
1
)
*
blksz
+
1
)
:
(
i
*
blksz
);
elseif
(
i
==
(
blknum
+
1
))
&&
blknum
*
blksz
<
D
.
nsamples
Iblock
=
(
blknum
*
blksz
+
1
)
:
D
.
nsamples
;
else
break
;
end
planar1
=
D
(
chanind
(
1
,
:
),
Iblock
);
planar2
=
D
(
chanind
(
2
,
:
),
Iblock
);
Dnew
(
chanind
(
3
,
:
),
Iblock
)
=
sqrt
(
planar1
.
^
2
+
planar2
.
^
2
);
if
~
isempty
(
copyind
)
Dnew
(
copyind
(
2
,
:
),
Iblock
)
=
D
(
copyind
(
1
,
:
),
Iblock
);
end
if
any
(
Ibar
==
i
),
spm_progress_bar
(
'
Set
'
,
i
);
end
i
=
i
+
1
;
end
end
else
%-
Epoched
data
%----------------------------------------------------------------------
spm_progress_bar
(
'
Init
'
,
D
.
ntrials
,
'
Trials
processed
'
);
if
D
.
ntrials
>
100
,
Ibar
=
floor
(
linspace
(
1
,
D
.
ntrials
,
100
));
else
Ibar
=
1
:
D
.
ntrials
;
end
if
isTF
for
i
=
1
:
D
.
ntrials
planar1
=
D
(
chanind
(
1
,
:
),
:
,
:
,
i
);
planar2
=
D
(
chanind
(
2
,
:
),
:
,
:
,
i
);
Dnew
(
chanind
(
3
,
:
),
:
,
:
,
i
)
=
planar1
+
planar2
;
if
~
isempty
(
copyind
)
Dnew
(
copyind
(
2
,
:
),
:
,
:
,
i
)
=
D
(
copyind
(
1
,
:
),
:
,
:
,
i
);
end
if
any
(
Ibar
==
i
),
spm_progress_bar
(
'
Set
'
,
i
);
end
end
else
for
i
=
1
:
D
.
ntrials
planar1
=
D
(
chanind
(
1
,
:
),
:
,
i
);
planar2
=
D
(
chanind
(
2
,
:
),
:
,
i
);
Dnew
(
chanind
(
3
,
:
),
:
,
i
)
=
sqrt
(
planar1
.
^
2
+
planar2
.
^
2
);
if
~
isempty
(
copyind
)
Dnew
(
copyind
(
2
,
:
),
:
,
i
)
=
D
(
copyind
(
1
,
:
),
:
,
i
);
end
if
any
(
Ibar
==
i
),
spm_progress_bar
(
'
Set
'
,
i
);
end
end
end
end
spm_progress_bar
(
'
Clear
'
);
Dnew
=
chanlabels
(
Dnew
,
chanind
(
3
,
:
),
labelnew
);
Dnew
=
badchannels
(
Dnew
,
chanind
(
3
,
:
),
badchannels
(
D
,
chanind
(
1
,
:
))
|
badchannels
(
D
,
chanind
(
2
,
:
)));
Dnew
=
chantype
(
Dnew
,
chanind
(
3
,
:
),
'
MEGCOMB
'
);
Dnew
=
units
(
Dnew
,
chanind
(
3
,
:
),
units
(
D
,
chanind
(
1
,
:
)));
Dnew
=
coor2D
(
Dnew
,
chanind
(
3
,
:
),
0.5
*
(
coor2D
(
D
,
chanind
(
1
,
:
))
+
coor2D
(
D
,
chanind
(
1
,
:
))));
if
~
isempty
(
copyind
)
Dnew
=
chanlabels
(
Dnew
,
copyind
(
2
,
:
),
D
.
chanlabels
(
copyind
(
1
,
:
)));
Dnew
=
badchannels
(
Dnew
,
copyind
(
2
,
:
),
badchannels
(
D
,
copyind
(
1
,
:
)));
Dnew
=
chantype
(
Dnew
,
copyind
(
2
,
:
),
D
.
chantype
(
copyind
(
1
,
:
)));
Dnew
=
units
(
Dnew
,
copyind
(
2
,
:
),
D
.
units
(
copyind
(
1
,
:
)));
Dnew
=
coor2D
(
Dnew
,
copyind
(
2
,
:
),
coor2D
(
D
,
copyind
(
1
,
:
)));
end
%-
Save
the
new
M
/
EEG
dataset
%--------------------------------------------------------------------------
Dnew
=
Dnew
.
history
(
mfilename
,
S
);
save
(
Dnew
);
D
=
Dnew
;
%-
Cleanup
%--------------------------------------------------------------------------
fprintf
(
'
%-
40
s:
%
30
s
\
n
','
Completed
'
,
spm
(
'
time
'
));
%-
#
spm
(
'
FigName
','
MEG
Combine
planar:
done
'
);
spm
(
'
Pointer
','
Arrow
'
);
Event Timeline
Log In to Comment