<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Hi Roy,
<div class=""><br class="">
</div>
<div class="">Just changing the global ft_default variable is not going to the trick indeed. You’d need to run ft_defaults once more before the changes have an effect. Possibly you’d need to run restoredefaultpath first to be absolutely sure.</div>
<div class=""><br class="">
</div>
<div class="">So, in summary, once you start a matlab session you’d do something like:</div>
<div class=""><br class="">
</div>
<div class="">global ft_default;</div>
<div class="">ft_default.toolbox.signal = ‘matlab’;</div>
<div class=""><br class="">
</div>
<div class="">addpath(<path-to-fieldtrip>);</div>
<div class="">ft_defaults;</div>
<div class=""><br class="">
</div>
<div class="">This should do it, I think.</div>
<div class=""><br class="">
</div>
<div class="">Best wishes and happy computing!</div>
<div class=""><br class="">
</div>
<div class="">JM</div>
<div class=""><br class="">
</div>
<div class="">PS: looking forward to a speed-improved version of the overloaded filtfilt.m</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 22 Feb 2022, at 18:05, Roy Cox via fieldtrip <<a href="mailto:fieldtrip@science.ru.nl" class="">fieldtrip@science.ru.nl</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">hello,
<div class=""><br class="">
</div>
<div class="">I'm having trouble getting Fieldtrip (revision 8108d99ee.) to reliably use Matlab's builtin signal toolbox, rather than the one in Fieldtrip/external/signal. I followed the online suggestions (<a href="https://urldefense.com/v3/__https://www.fieldtriptoolbox.org/faq/should_i_add_fieldtrip_with_all_subdirectories_to_my_matlab_path/__;!!HJOPV4FYYWzcc1jazlU!9W_-dvWnmFYAlMXwYGZwfpXws4MmlqjOSG6WyVaJK6hmqIFPpthFjbCjC3mB-u0gbJolbsCaCy0-mhsceOQlVz4qTPmgPn3zU-vVgQ$" class="">https://www.fieldtriptoolbox.org/faq/should_i_add_fieldtrip_with_all_subdirectories_to_my_matlab_path/</a>)
 and checked the info surrounding ft_defaults.</div>
<div class=""><br class="">
</div>
<div class="">Background: Matab's filtfilt is about twice as fast as Fieldtrip's, which would make a big difference for our overnight sleep EEG. I tested a bandpass filter on a small recording while explicitly adding/removing
<i class="">Fieldtrip/external/signal</i> from the path (as NOT recommended, I know). Doing this right before filtfilt is called (from ft_preprocessing -> preproc -> ft_preproc_bandpassfilter -> filter_with_correction, line 73):</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">Fieldtrip</div>
<div class=""><i class="">tic;filt = filtfilt(B, A, dat')';toc<br class="">
Elapsed time is 7.384431 seconds.</i></div>
</div>
<div class=""><br class="">
</div>
<div class="">Matlab</div>
<div class=""><i class="">tic;filt = filtfilt(B, A, dat')';toc<br class="">
Elapsed time is 3.328224 seconds.</i><br class="">
</div>
<div class=""><i class=""><br class="">
</i></div>
<div class="">I get similar speedups when timing ft_preprocessing, different filters, and for (much) larger datasets, so definitely worth it.</div>
<div class=""><br class="">
</div>
<div class="">Now I try to do things the recommended way from a fresh Matlab session (with all Fieldtrip-related stuff removed from startup.m).</div>
<div class=""><br class="">
</div>
<div class="">First I check:</div>
<div class=""><br class="">
</div>
<div class=""><i class="">which -all filtfilt<br class="">
</i></div>
<div class=""><i class="">C:\Program Files\MATLAB\R2020a\toolbox\signal\signal\filtfilt.m</i></div>
<div class=""><br class="">
</div>
<div class="">Then I initialize Fieldtrip:</div>
<div class=""><br class="">
</div>
<div class=""><i class="">addpath(myPathToFieldtrip)<br class="">
ft_defaults</i><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">and check filtfilt again:</div>
<div class=""><i class="">which -all filtfilt<br class="">
longPathToFieldtrip\external\signal\filtfilt.m<br class="">
C:\Program Files\MATLAB\R2020a\toolbox\signal\signal\filtfilt.m            %Shadowed</i><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">which makes sense since the default is to use Fieldtrip's filtfilt.</div>
<div class=""><br class="">
</div>
<div class="">I then do as suggested:</div>
<div class=""><br class="">
</div>
<div class=""><i class="">global ft_default<br class="">
ft_default.toolbox.signal='matlab';</i><br class="">
<br class="">
</div>
<div class="">and can verify that the global var is correctly set:</div>
<div class=""><i class="">ft_default.toolbox<br class="">
</i></div>
<div class=""><i class=""><br class="">
</i></div>
<div class=""><i class="">ans =  </i></div>
<div class=""><i class="">struct with fields:<br class="">
<br class="">
     images: 'compat'<br class="">
      stats: 'compat'<br class="">
     signal: 'matlab'<br class="">
    cleanup: {}</i><br class="">
</div>
<div class=""><i class=""><br class="">
</i></div>
<div class="">But calling <i class="">which -all filtfilt </i>again, the Fieldtrip path has not been removed. I tried calling
<i class="">ft_defaults </i>a second time (perhaps in order for the new values in
<i class="">ft_default</i> to take effect?), but both filtfilt paths remain. And I verified that Fieldtrip in fact continues to use its own slow filtfilt implementation when calling
<i class="">ft_preprocessing</i>. So it appears that the contents of <i class="">
ft_default.toolbox</i> aren't actually used to update paths, which may or may not be as intended.</div>
<div class=""><br class="">
</div>
<div class="">I have to add that at one (and only one) point during my lengthy explorations Fieldtrip DID pick the requested version (and removed the path to <i class="">\external\signal\ </i>). But I haven't been able to reproduce since, so this seems to work
 only under highly specific conditions.</div>
<div class=""><br class="">
</div>
<div class="">Explicitly removing the path to <i class="">\external\signal\ </i>using
<i class="">rmpath</i> seems to work, but is also risky because I imagine Fieldtrip may attempt to restore this path depending on what functions are called elsewhere in a script (especially if the request for using the Matlab version in <i class="">ft_default.toolbox</i> is
 missed/ignored).</div>
<div class=""><br class="">
</div>
<div class="">Besides physically deleting folders, how do I ensure Fieldtrip ALWAYS uses Matlab's signal (or stats/image) toolboxes and will NEVER attempt to add its own versions back to the Matlab path?</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class="">Roy</div>
</div>
_______________________________________________<br class="">
fieldtrip mailing list<br class="">
<a href="https://mailman.science.ru.nl/mailman/listinfo/fieldtrip" class="">https://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br class="">
https://urldefense.com/v3/__https://doi.org/10.1371/journal.pcbi.1002202__;!!HJOPV4FYYWzcc1jazlU!9W_-dvWnmFYAlMXwYGZwfpXws4MmlqjOSG6WyVaJK6hmqIFPpthFjbCjC3mB-u0gbJolbsCaCy0-mhsceOQlVz4qTPmgPn0TBKpvfw$
<br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>