<div dir="ltr">Dear fieldtrippers,<div><br></div><div>I found it uncomfortable having to know the names of different variables as I load them, so I have written a function called "load2struct" (see below).</div><div>
It should be used in cases in which the mat file holds only one variable (a volume, a grid, etc), otherwise only the first variable is loaded. In your example, <span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Emilie, you could use:</span></div>
<br>avgs{iFile} = load2struct(datafiles{iFile});<div><br></div><div>For me it helped increase the code readability, and allowed my codes to be more compatible with changes I did along the way, like changing the naming format for variables used for specific subjects.</div>
<div>I hope you find it useful (and also that it's not silly (maybe there's a much simpler solution), or just wrong).<br></div><div><br></div><div>Best,</div><div>Roey</div><div><br></div><div><br></div><div>===========================================================</div>
<div><div>function struct = load2struct(filePath)</div><div>    % LOAD2STRUCT loads the struct in the filePath mat file to a variable,</div><div>    % without needing to know the original field name of this struct.</div><div>
    struct = load(filePath);</div><div>    structFieldName = fieldnames(struct);</div><div>    </div><div>    if (length(structFieldName) > 1)</div><div>        warning('Note: load2struct only loads the first variable in the mat file')</div>
<div>    end</div><div>    eval(['struct = struct.' structFieldName{1} ';']);</div><div>end</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 1, 2014 at 10:28 AM, Eelke Spaak <span dir="ltr"><<a href="mailto:eelke.spaak@donders.ru.nl" target="_blank">eelke.spaak@donders.ru.nl</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Emilie,<br>
<br>
If you assign the return value of MATLAB's load() to a variable, that<br>
variable will become a struct with the variables in the specified<br>
mat-file as its fields. In your case avgs{k} will probably (have not<br>
read your script very thoroughly) be a struct, so avgs{k}.avgFC is the<br>
actual timelock structure. You should replace<br>
<div class=""><br>
avgs{iFile} = load(datafiles{iFile});<br>
<br>
</div>with<br>
<br>
tmp = load(datafiles{iFile});<br>
avgs{iFile} = tmp.avgFC;<br>
<br>
and then I think it should work.<br>
<br>
Best,<br>
Eelke<br>
<div><div class="h5"><br>
On 1 September 2014 09:02, Caspar, Emilie <<a href="mailto:e.caspar@ucl.ac.uk">e.caspar@ucl.ac.uk</a>> wrote:<br>
> Dear all,<br>
><br>
><br>
> I would like to perform the grand average in a separate script than the<br>
> preprocessing one, to avoid a crash, because of the number of participants.<br>
> In the preprocessing script, I performed a timelockanalysis for each<br>
> participants : avgFC = ft_timelockanalysis(cfg, cleandata);<br>
> and then save this file :<br>
> finfname  = [subjID{s} '_RP'];<br>
> mkdir(subjID{s})<br>
> save([subjPath filesep finfname '.mat'], 'avgFC');<br>
><br>
><br>
> So, in my grand average script, I wrote the following :<br>
><br>
> cfg = [];<br>
> homePath    = '/Users/emilie/Desktop/EEG_RP/Grandaverage/';<br>
> eegPath = homePath;<br>
><br>
><br>
><br>
> %% Subjects<br>
> datafiles      =<br>
> {'S83_RP','S84_RP','S85_RP','S87_RP','S88_RP','S89_RP','S90_RP','S91_RP','S92_RP','S93_RP','S94_RP','S97_RP','S98_RP','S99_RP','S100_RP',<br>

> 'S101_RP'};<br>
> nFiles      = length(datafiles);<br>
> avgs = cell(1,nFiles);<br>
><br>
><br>
><br>
> cfg.channel   = 'all';<br>
> cfg.latency   = 'all';<br>
> %cfg.parameter = 'avg';<br>
><br>
><br>
><br>
> for iFile = 1:nFiles<br>
>     thisfile = datafiles{iFile};<br>
>     subjPath = [eegPath  thisfile];<br>
>     file = dir([subjPath  '*.mat']);<br>
>     avgs{iFile} = ft_checkdata(avgs{iFile}, 'datatype', 'timelock',<br>
> 'feedback', 'no');<br>
>     avgs{iFile} = load(datafiles{iFile});<br>
> end<br>
><br>
><br>
><br>
> GA = ft_timelockgrandaverage(cfg, avgs{:});<br>
><br>
> But I'm not pretty sure to understand the error message :<br>
> Error using ft_checkdata (line 366)<br>
> This function requires timelock data as input.<br>
><br>
> Error in Averaging (line 33)<br>
>     avgs{iFile} = ft_checkdata(avgs{iFile}, 'datatype', 'timelock',<br>
> 'feedback', 'no');<br>
><br>
> Because If I'm right, the files in 'datafiles' are the time locked data from<br>
> the preprocessing script.<br>
><br>
> Thank you,<br>
><br>
> Emilie<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> fieldtrip mailing list<br>
> <a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br>
> <a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br>
_______________________________________________<br>
fieldtrip mailing list<br>
<a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br>
</blockquote></div><br></div>