Back to the main page.

Bug 2095 - make fieldtrip robust to matlab 2013a changes

Status CLOSED FIXED
Reported 2013-04-06 14:10:00 +0200
Modified 2014-01-29 13:40:07 +0100
Product: FieldTrip
Component: core
Version: unspecified
Hardware: PC
Operating System: Mac OS
Importance: P3 normal
Assigned to: Roemer van der Meij
URL:
Tags:
Depends on:
Blocks:
See also:

Robert Oostenveld - 2013-04-06 14:10:29 +0200

On 5 Apr 2013, at 15:09, Arnaud Delorme wrote: The MathWorks has implemented minor changes in Matlab 2013a with dramatic consequences as they could potentially break or corrupt the output of about 10% of EEGLAB functions. EEGLAB graphic interface or command line users (all versions) should not upgrade to this version of Matlab until the issues have been fixed in EEGLAB (probably within a month). Details of some of the non backward compatible changes implemented by the Mathworks are described below. Arno From http://www.mathworks.com/help/matlab/release-notes.html The behavior of unique, union, intersect, setdiff, setxor, and ismember has changed. • If there are repeated elements in the input arrays, the functions unique, union, intersect, setdiff, and setxor return the index to the first occurrence of the repeated elements (or rows). • All index vectors returned by unique, union, intersect, setdiff, or setxor are column vectors.


Robert Oostenveld - 2013-04-06 14:11:28 +0200

todo: - ensure that we vane 2013a on mentat - run the test suite against matlab2013a and see how it goes


Robert Oostenveld - 2013-04-20 15:52:19 +0200

We discussed the fieldtrip revision/matlab version/operating system/test script matrix in our weekly meeting. Jorn will try to get something for windows. I gave it a try for revision 8062 on 64-bit linux and a list of matlab versions. Below the number of test scripts that failed/succeeded for each combination. With older versions there are clearly more problems. However the 101 errors for recent matlab versions is inconsistent with the dashboard, so there appear to be many false negatives. Probably that is due to how I started the 14*350 scripts. So it needs further refinement. But given this (limited) data I'd say that we support from 2007a onwards quite well. It gets slightly better with later versions, but from 2006b->2007a there is a real jump in success. Note that 2009b somehow deviates in the sequence. It is of course interesting to look at the details, I'll post/discuss those later. 275 error_r8062_2006a_glnxa64.txt 211 error_r8062_2006b_glnxa64.txt 131 error_r8062_2007a_glnxa64.txt 108 error_r8062_2007b_glnxa64.txt 103 error_r8062_2008a_glnxa64.txt 101 error_r8062_2008b_glnxa64.txt 105 error_r8062_2009a_glnxa64.txt 127 error_r8062_2009b_glnxa64.txt < note this one 103 error_r8062_2010a_glnxa64.txt 102 error_r8062_2010b_glnxa64.txt 101 error_r8062_2011a_glnxa64.txt 102 error_r8062_2011b_glnxa64.txt 102 error_r8062_2012a_glnxa64.txt 101 error_r8062_2012b_glnxa64.txt 32 success_r8062_2006a_glnxa64.txt 92 success_r8062_2006b_glnxa64.txt 181 success_r8062_2007a_glnxa64.txt 201 success_r8062_2007b_glnxa64.txt 208 success_r8062_2008a_glnxa64.txt 206 success_r8062_2008b_glnxa64.txt 217 success_r8062_2009a_glnxa64.txt 193 success_r8062_2009b_glnxa64.txt < note this one 219 success_r8062_2010a_glnxa64.txt 220 success_r8062_2010b_glnxa64.txt 221 success_r8062_2011a_glnxa64.txt 221 success_r8062_2011b_glnxa64.txt 221 success_r8062_2012a_glnxa64.txt 222 success_r8062_2012b_glnxa64.txt Note that this single run (one FT revision, one OS, 14 matlab versions) resulted in ~5000 log files totaling 13 GB on disk.


Jan-Mathijs Schoffelen - 2013-07-31 14:10:59 +0200

as discussed See http://www.mathworks.nl/help/matlab/release-notes.html "The behavior of unique, union, intersect, setdiff, setxor, and ismember has changed."


Roemer van der Meij - 2013-08-05 15:58:39 +0200

roevdmei@archimedes:~/fieldtrip-dev$ grep 'intersect(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -nT ./fieldtrip2fiff.m: 200: [dummy, i_label, i_chs] = intersect(data.label, {data.hdr.orig.chs.ch_name}); ./ft_artifact_zvalue.m: 535 : tind{tt}=intersect(find(artifact(:,2)<opt.trl(tt,2)),find(artifact(:,2)>opt.trl(tt-1,2))); ./ft_channelcombination.m: 108 : [dum,indx,indx1]=intersect(channelcmb1,datachannel); ./ft_channelcombination.m: 109 : [dum,indx,indx2]=intersect(channelcmb2,datachannel); ./ft_channelselection.m: 459 : [c, ia, ib] = intersect(channel, lower(datachannel)); ./ft_channelselection.m: 469 : [c, ia, ib] = intersect(channel, lower(datachannel)); ./ft_databrowser.m: 958: if any(intersect(begsel:endsel, [opt.event.sample])) ./ft_databrowser.m: 960: ind_rem = intersect(begsel:endsel, [opt.event.sample]); ./ft_freqstatistics.m: 173 : newchan = intersect(chan, varargin{i}.label); ./ft_multiplotER.m: 519: data = dat(intersect(seldat1,seldat2),:); ./ft_recodeevent.m: 120: selecttype(i) = ~isempty(intersect(cfg.eventtype, event(i).type)); ./ft_recodeevent.m: 126: selectvalue(i) = ~isempty(intersect(cfg.eventvalue, event(i).value)); ./ft_regressconfound.m: 94 : cfg.reject = intersect(conflist, cfg.reject); % to be removed ./ft_sensorrealign.m: 353 : label = intersect(lower(elec.label), lower(template.label)); ./ft_sourceparcellate.m: 145 : [inside, i1, i2] = intersect(cfg.parameter, fn); ./ft_sourceplot.m:1365 : [i1,i2,i3] = intersect(parenttag, {'ik';'jk';'ij'}); ./ft_sourceplot.m:1397 : [i1,i2,i3] = intersect(opt.parenttag, {'ik';'jk';'ij'}); ./ft_volumelookup.m: 134 : if isempty(intersect(cfg.maxqueryrange, [1 3 5])) ./ft_volumesegment.m: 494 :if ~isempty(intersect(outp, 'tpm')) ./ft_volumesegment.m: 496 : removefields = intersect(removefields, {'anatomy'}); ./ft_volumesegment.m: 497 :elseif ~isempty(intersect(outp, {'white' 'gray' 'csf' 'brain' 'skull' 'scalp' 'skullstrip'})) ./ft_volumesegment.m: 554 : removefields = intersect(removefields, {'gray' 'white' 'csf'}); ./ft_volumesegment.m: 577 : removefields = intersect(removefields, {'anatomy' 'gray' 'csf'}); ./ft_volumesegment.m: 581 : removefields = intersect(removefields, {'anatomy' 'white' 'csf'}); ./ft_volumesegment.m: 585 : removefields = intersect(removefields, {'anatomy' 'gray' 'white'}); ./compat/ft_componentbrowser_old.m: 67:[labels, cfg.chanidx.lay, cfg.chanidx.comp] = intersect(cfg.layout.label, comp.topolabel); % in case channels are missing ./compat/ft_componentbrowser_old.m: 146: if intersect(h, findobj(cfg.h, 'str', '+')) ./compat/ft_componentbrowser_old.m: 153: elseif intersect(h, findobj(cfg.h, 'str', '-')) ./compat/ft_componentbrowser_old.m: 204: if intersect(h, findobj(cfg.h, 'str', '>>')) ./compat/ft_componentbrowser_old.m: 211: elseif intersect(h, findobj(cfg.h, 'str', '>')) ./compat/ft_componentbrowser_old.m: 218: elseif intersect(h, findobj(cfg.h, 'str', '<')) ./compat/ft_componentbrowser_old.m: 225: elseif intersect(h, findobj(cfg.h, 'str', '<<')) ./connectivity/ft_connectivity_csd2transfer.m: 301 : if ~isempty(intersect(cmbindx(1:(k-1),:), cmbindx(k,:), 'rows')) ./connectivity/ft_connectivity_dtf.m: 86 :% if isempty(intersect(sortindx, sort(indx), 'rows')), ./fileio/ft_chantype.m: 560 : type(intersect(strmatch(label2type{i}{j}, lower(label)), find(strcmp(type, 'unknown')))) = label2type{i}(1); ./fileio/ft_filetype.m:1218 :res = (numel(intersect(fieldnames(var{1}), fnames)) >= 5); ./fileio/ft_filetype.m:1239 :res = length(intersect({'log', 'names'}, {var.name}))==2; ./fileio/ft_read_data.m: 662 : data_in_epoch(iEpoch) = length(intersect(begsamp_epoch:endsamp_epoch,begsample:endsample)); ./fileio/ft_read_data.m: 685 : [dum1, dum2, chanind_sig] = intersect(chanindx, find(chan2sig_ind==iSig)); ./fileio/ft_read_event.m: 785 : [dum,dum2] = intersect(squeeze(Msamp2offset(2,iEpoch,:)), eventOffset); ./forward/ft_apply_montage.m: 122 :remove = setdiff(montage.labelorg, intersect(montage.labelorg, inputlabel)); ./forward/ft_apply_montage.m: 165 :if length(intersect(inputlabel, montage.labelorg))~=length(montage.labelorg) ./peer/peercellfun.m: 285 : [dum, sel] = intersect(jobid, [current.jobid]); ./peer/peercellfun.m: 441 : [dum, sel] = intersect(jobid, [current.jobid]); ./peer/peercellfun.m: 547 : [dum, sel] = intersect(jobid, [current.jobid]); ./private/atlas_lookup.m: 47 :if isempty(intersect(queryrange, [1 3 5 7 9 11])) ./private/cancorr.m: 51 :x = intersect(ind, x); ./private/cancorr.m: 52 :y = intersect(ind, y); ./private/find_triangle_neighbours.m: 38 :% if length(intersect(dhk(i,[1 2]), dhk(j,:)))==2 ./private/find_triangle_neighbours.m: 42 :% if length(intersect(dhk(i,[2 3]), dhk(j,:)))==2 ./private/find_triangle_neighbours.m: 46 :% if length(intersect(dhk(i,[3 1]), dhk(j,:)))==2 ./private/find_triangle_neighbours.m: 69 : if isempty(setdiff(intersect(dhk(i,:), dhk(sel(j),:)), dhk(i,[1 2]))) ./private/find_triangle_neighbours.m: 71 : elseif isempty(setdiff(intersect(dhk(i,:), dhk(sel(j),:)), dhk(i,[2 3]))) ./private/find_triangle_neighbours.m: 73 : elseif isempty(setdiff(intersect(dhk(i,:), dhk(sel(j),:)), dhk(i,[3 1]))) ./private/inputlabel2outputlabel.m: 50: [int,ih,iv] = intersect(H,V); ./private/lbex.m: 32 : sel = intersect(sel, grid.inside); ./private/patchsvd.m: 54 : sel = intersect(sel, grid.inside); ./private/prepare_timefreq_data.m: 555 :[dum, inputorder, outputorder] = intersect(inputdim, outputdim); ./private/resampledesign.m: 94:if ~isempty(intersect(cfg.ivar, cfg.uvar)), warning('there is an intersection between cfg.ivar and cfg.uvar'); end ./private/resampledesign.m: 95:if ~isempty(intersect(cfg.ivar, cfg.wvar)), warning('there is an intersection between cfg.ivar and cfg.wvar'); end ./private/resampledesign.m: 96:if ~isempty(intersect(cfg.ivar, cfg.cvar)), warning('there is an intersection between cfg.ivar and cfg.cvar'); end ./private/resampledesign.m: 97:if ~isempty(intersect(cfg.uvar, cfg.wvar)), warning('there is an intersection between cfg.uvar and cfg.wvar'); end ./private/resampledesign.m: 98:if ~isempty(intersect(cfg.uvar, cfg.cvar)), warning('there is an intersection between cfg.uvar and cfg.cvar'); end ./private/resampledesign.m: 99:if ~isempty(intersect(cfg.wvar, cfg.cvar)), warning('there is an intersection between cfg.wvar and cfg.cvar'); end ./private/rollback_provenance.m: 47 : fn = intersect(fn0, fn1); ./private/topoplot_common.m: 517 : sel1 = intersect(sel1, sellab); ./private/topoplot_common.m: 518 : sel2 = intersect(sel2, sellab); ./private/triangle4pt.m: 52 : lt = [intersect(lt1,lt2); intersect(lt2,lt3); intersect(lt3,lt1)]; ./trialfun/ft_trialfun_general.m: 151 : sel(i) = sel(i) & ~isempty(intersect(event(i).value, cfg.trialdef.eventvalue)); ./utilities/ft_checkdata.m:1594:fn = intersect(fn, {'topo' 'topolabel' 'unmixing'}); ./utilities/ft_datatype_segmentation.m: 148 : [dum, i] = intersect(fn, {'scalp', 'skull', 'brain'}); ./utilities/ft_datatype_segmentation.m: 153 : [dum, i] = intersect(fn, {'skin', 'skull', 'brain'}); % this is not likely ./utilities/ft_datatype_segmentation.m: 207 : if length(intersect(seglabel, {'gray' 'white' 'csf'}))~=3 ./utilities/ft_determine_coordsys.m: 93 : if length(data.coordsys)==3 && length(intersect(data.coordsys, 'rlasif'))==3 ./utilities/ft_selectdata_old.m: 202 : elseif isempty(catdim) && isempty(intersect(dimtok, {'rpt', 'rpttap', 'subj'})) ./utilities/ft_selectdata_old.m: 502 : selchan = intersect(selchan1, selchan2); ./utilities/keyvalcheck.m: 57 : set = intersect(keys, required); ./utilities/keyvalcheck.m: 66 : set = intersect(keys, forbidden); ./contrib/spike/ft_spiketriggeredspectrum_stat.m: 184 :spikesel = intersect(cfg.spikesel(:),inWindow(:)); ./contrib/spike/ft_spiketriggeredspectrum_stat.m: 185 :spikesel = intersect(spikesel,find(isintrial)); ./external/afni/CheckBrikHEAD.m: 269 : if (~isempty(intersect([13 10 34 9 7 11 8], vtmp))), ./external/bct/randomizer_bin_und.m: 86 : iintersect=intersect(alliholes,alljholes); ./external/bct/randomizer_bin_und.m: 100 : c=iintersect(ii(mate)); ./external/bct/randomizer_bin_und.m: 101 : d=iintersect(jj(mate)); ./external/bct/randomizer_bin_und.m: 103 : d=iintersect(ii(mate)); ./external/bct/randomizer_bin_und.m: 104 : c=iintersect(jj(mate)); ./external/ctf/readCTFds.m: 597: positionSet=intersect(strmatch(A,stringA),strmatch(C,stringC)); % strmatch matches empty strings to everything. ./external/ctf/setCTFDataBalance.m: 288: kBad=reindex(chanList,intersect(chanList,kBad)); ./external/ctf/setCTFDataBalance.m: 472: if ~isempty(intersect(Gbalanceindex,badGref)) ./external/ctf/setCTFDataBalance.m: 509: [Cx,Fbal]=intersect(Gindex,Gbalanceindex); % Gindex(Fbal)=Gbalanceindex ./external/ctf/setCTFDataBalance.m: 510: [Cx,Fref]=intersect(Gindex,Grefindex); % Gindex(Fref)=Grefindex ./external/ctf/setCTFDataBalance.m: 531:if ~isempty(intersect(MEGbalanceindex,badGref)) ./external/ctf/setCTFDataBalance.m: 632: (isempty(chanList) | intersect(missingMEG,chanList)) ./external/ctf/setCTFDataBalance.m: 641: if ~isempty(intersect(MEGbalanceindex,badGref)) ./external/ctf/setCTFDataBalance.m: 712:if ~isempty(intersect(Gbalanceindex,badGref)) ./external/ctf/setCTFDataBalance.m: 772:[X c1 c2]=intersect(chanlist,reflist); ./external/ctf/setCTFDataBalance.m: 784: [X c1 c2]=intersect(chanlist,sensorlist); ./external/mne/mne_label_time_courses.m: 40 :[vertices,ia,ib] = intersect(double(stc.vertices),double(lab.vertices)); ./external/simbio/sb_set_bndcon.m: 14 :indij = intersect(indi,indj); ./external/spm8/spm_defaults.m: 24 : if isempty(intersect({'spm','spm_get_defaults'},{d.name})) ./external/spm8/spm_XYZreg.m: 635 :[null,i,e] = intersect([Reg{:,1}],hD); ./external/spm8/spm_XYZreg.m: 671 :[null,i,e] = intersect([Reg{:,1}],hD); ./fileio/private/ft_apply_montage.m: 122 :remove = setdiff(montage.labelorg, intersect(montage.labelorg, inputlabel)); ./fileio/private/ft_apply_montage.m: 165 :if length(intersect(inputlabel, montage.labelorg))~=length(montage.labelorg) ./fileio/private/ft_checkdata.m:1594 :fn = intersect(fn, {'topo' 'topolabel' 'unmixing'}); ./fileio/private/read_combined_ds.m: 68 : filepair = intersect(f(ismat), f(isbin)); ./fileio/private/read_mff_bin.m: 145 : if ~isempty(intersect(chanindx,i)) %only keep channels that are requested ./fileio/private/read_shm_event.m: 92 : trgchan = match_str(hdr.label, intersect(hdr.label(trgchan), type)); ./forward/private/triangle4pt.m: 52 : lt = [intersect(lt1,lt2); intersect(lt2,lt3); intersect(lt3,lt1)]; ./plotting/private/ft_apply_montage.m: 122 :remove = setdiff(montage.labelorg, intersect(montage.labelorg, inputlabel)); ./plotting/private/ft_apply_montage.m: 165 :if length(intersect(inputlabel, montage.labelorg))~=length(montage.labelorg) ./plotting/private/keyvalcheck.m: 57 : set = intersect(keys, required); ./plotting/private/keyvalcheck.m: 66 : set = intersect(keys, forbidden); ./realtime/online_meg/ft_realtime_coillocalizer.m: 121 :[dum, megindx] = intersect(chanindx, megindx); ./realtime/online_meg/ft_realtime_coillocalizer.m: 122 :[dum, refindx] = intersect(chanindx, refindx); ./specest/private/keyvalcheck.m: 57 : set = intersect(keys, required); ./specest/private/keyvalcheck.m: 66 : set = intersect(keys, forbidden); ./test/private/identical.m: 140: fna = intersect(fna, fnb); ./external/gifti/@gifti/gifti.m: 26 : [c, ia] = intersect(f,fieldnames(varargin{1})); ./external/dmlt/external/bayesianlogreg/bayesianlinreg_ep.m: 584 :names = intersect(names1,names2); ./external/dmlt/external/bayesianlogreg/laplacedegenerate_ep.m: 616 :names = intersect(names1,names2); ./external/dmlt/external/bayesianlogreg/LinRegLaplaceEP.m: 534 :names = intersect(names1,names2); ./external/dmlt/external/gpstuff/gp/gp_g.m: 222: if isfield(gp.lik, 'nondiagW') && isfield(gp,'comp_cf') && ~isempty(intersect(gp.comp_cf{1},i)) && isfield(gp.lik, 'xtime') ./external/dmlt/external/gpstuff/gp/gp_g.m: 282: if isfield(gp.lik, 'nondiagW') && isfield(gp,'comp_cf') && ~isempty(intersect(gp.comp_cf{1},i)) && isfield(gp.lik, 'xtime') ./external/dmlt/external/gpstuff/gp/gpla_g.m: 909 : if ~isempty(intersect(gp.comp_cf{1},i)) ./external/dmlt/external/gpstuff/gp/gpla_g.m: 961 : if ~isempty(intersect(gp.comp_cf{1},i)) %do(indnl) ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 470 : K_nf((1:nlt(2))+nlt(1),(1:nl(2))+nl(1)) = gp_cov(gp,xt,x, intersect(gp.comp_cf{2}, predcf)); ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 472 : K_nf(1:nlt(1),1:nl(1)) = gp_cov(gp,xtime, xtime, intersect(gp.comp_cf{1}, predcf)); ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 474 : K_nf(1:nlt(1),1:nl(1)) = gp_cov(gp,xt,x, intersect(gp.comp_cf{1}, predcf)); ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 509 : Kss((1:nlt(2))+nlt(1),(1:nlt(2))+nlt(1)) = gp_trcov(gp,xt,intersect(gp.comp_cf{2}, predcf)); ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 511 : Kss(1:nlt(1),1:nlt(1)) = gp_trcov(gp,xtime,intersect(gp.comp_cf{1}, predcf)); ./external/dmlt/external/gpstuff/gp/gpla_pred.m: 513 : Kss(1:nlt(1),1:nlt(1)) = gp_trcov(gp,xt,intersect(gp.comp_cf{1}, predcf)); ./external/dmlt/external/murphy/KPMtools/myintersect.m: 1 :function C = myintersect(A,B) ./external/dmlt/external/murphy/KPMtools/myintersect.m: 3 :% C = myintersect(A,B) ./external/dmlt/external/murphy/KPMtools/mysubset.m: 10 : p = length(myintersect(small,large)) == length(small);


Roemer van der Meij - 2013-08-05 15:59:37 +0200

Well, that was super readable (thought it would expand the lines). Here without content. roevdmei@archimedes:~/fieldtrip-dev$ grep 'intersect(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./fieldtrip2fiff.m ./ft_artifact_zvalue.m ./ft_channelcombination.m ./ft_channelselection.m ./ft_databrowser.m ./ft_freqstatistics.m ./ft_multiplotER.m ./ft_recodeevent.m ./ft_regressconfound.m ./ft_sensorrealign.m ./ft_sourceparcellate.m ./ft_sourceplot.m ./ft_volumelookup.m ./ft_volumesegment.m ./compat/ft_componentbrowser_old.m ./connectivity/ft_connectivity_csd2transfer.m ./connectivity/ft_connectivity_dtf.m ./fileio/ft_chantype.m ./fileio/ft_filetype.m ./fileio/ft_read_data.m ./fileio/ft_read_event.m ./forward/ft_apply_montage.m ./peer/peercellfun.m ./private/atlas_lookup.m ./private/cancorr.m ./private/find_triangle_neighbours.m ./private/inputlabel2outputlabel.m ./private/lbex.m ./private/patchsvd.m ./private/prepare_timefreq_data.m ./private/resampledesign.m ./private/rollback_provenance.m ./private/topoplot_common.m ./private/triangle4pt.m ./trialfun/ft_trialfun_general.m ./utilities/ft_checkdata.m ./utilities/ft_datatype_segmentation.m ./utilities/ft_determine_coordsys.m ./utilities/ft_selectdata_old.m ./utilities/keyvalcheck.m ./contrib/spike/ft_spiketriggeredspectrum_stat.m ./external/afni/CheckBrikHEAD.m ./external/bct/randomizer_bin_und.m ./external/ctf/readCTFds.m ./external/ctf/setCTFDataBalance.m ./external/mne/mne_label_time_courses.m ./external/simbio/sb_set_bndcon.m ./external/spm8/spm_defaults.m ./external/spm8/spm_XYZreg.m ./fileio/private/ft_apply_montage.m ./fileio/private/ft_checkdata.m ./fileio/private/read_combined_ds.m ./fileio/private/read_mff_bin.m ./fileio/private/read_shm_event.m ./forward/private/triangle4pt.m ./plotting/private/ft_apply_montage.m ./plotting/private/keyvalcheck.m ./realtime/online_meg/ft_realtime_coillocalizer.m ./specest/private/keyvalcheck.m ./test/private/identical.m ./external/gifti/@gifti/gifti.m ./external/dmlt/external/bayesianlogreg/bayesianlinreg_ep.m ./external/dmlt/external/bayesianlogreg/laplacedegenerate_ep.m ./external/dmlt/external/bayesianlogreg/LinRegLaplaceEP.m ./external/dmlt/external/gpstuff/gp/gp_g.m ./external/dmlt/external/gpstuff/gp/gpla_g.m ./external/dmlt/external/gpstuff/gp/gpla_pred.m ./external/dmlt/external/murphy/KPMtools/myintersect.m ./external/dmlt/external/murphy/KPMtools/mysubset.m


Roemer van der Meij - 2013-08-05 16:00:36 +0200

roevdmei@archimedes:~/fieldtrip-dev$ grep 'unique(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./fieldtrip2fiff.m ./ft_analysispipeline.m ./ft_appenddata.m ./ft_appendfreq.m ./ft_appendspike.m ./ft_channelcombination.m ./ft_channelselection.m ./ft_connectivityanalysis.m ./ft_databrowser.m ./ft_dependencycheck.m ./ft_electroderealign.m ./ft_freqanalysis.m ./ft_headmovement.m ./ft_megplanar.m ./ft_multiplotER.m ./ft_multiplotTFR.m ./ft_prepare_concentricspheres.m ./ft_prepare_layout.m ./ft_prepare_sourcemodel.m ./ft_qualitycheck.m ./ft_regressconfound.m ./ft_rejectartifact.m ./ft_scalpcurrentdensity.m ./ft_sensorrealign.m ./ft_singleplotER.m ./ft_singleplotTFR.m ./ft_statistics_stats.m ./ft_stratify.m ./ft_volumerealign.m ./compat/ft_databrowser_old.m ./compat/ft_headmodelplot.m ./connectivity/ft_connectivity_csd2transfer.m ./fileio/ft_filetype.m ./fileio/ft_read_atlas.m ./fileio/ft_read_event.m ./fileio/ft_read_header.m ./fileio/ft_read_headshape.m ./forward/ft_apply_montage.m ./forward/ft_average_sens.m ./forward/ft_headmodel_concentricspheres.m ./forward/ft_headmodel_fns.m ./forward/ft_headmodel_simbio.m ./forward/ft_senslabel.m ./peer/peerlist.m ./plotting/ft_plot_mesh.m ./private/align_ijk2xyz.m ./private/atlas_lookup.m ./private/channelposition.m ./private/checkchan.m ./private/checktime.m ./private/combineClusters.m ./private/convert_event.m ./private/dimassign.m ./private/dimindex.m ./private/find_vertex_neighbours.m ./private/fourier2crsspctrm.m ./private/headsurface.m ./private/labelcmb2indx.m ./private/moviefunction.m ./private/mydepfun.m ./private/parameterselection.m ./private/prepare_design.m ./private/prepare_mesh_headshape.m ./private/prepare_mesh_hexahedral.m ./private/prepare_mesh_manual.m ./private/prepare_mesh_segmentation.m ./private/prepare_resampled_data.m ./private/resampledesign.m ./private/shiftpredict.m ./private/smudge.m ./private/spearman_binned.m ./private/topoplot_common.m ./private/univariate2bivariate.m ./private/validate_seg.m ./specest/ft_specest_hilbert.m ./specest/ft_specest_mtmconvol.m ./specest/ft_specest_mtmfft.m ./specest/ft_specest_tfr.m ./specest/ft_specest_wavelet.m ./statfun/ft_statfun_depsamplesF.m ./statfun/ft_statfun_depsamplesregrT.m ./statfun/ft_statfun_indepsamplesF.m ./statfun/ft_statfun_indepsamplesregrT.m ./test/test_bug1646.m ./test/test_spm_ft_integration.m ./trialfun/ft_trialfun_general.m ./utilities/ft_checkdata.m ./utilities/ft_fetch_data.m ./utilities/ft_selectdata_new.m ./utilities/ft_selectdata_old.m ./utilities/ft_version.m ./utilities/match_str.m ./contrib/spike/ft_spike_jpsth.m ./contrib/spike/ft_spike_select.m ./contrib/spike/ft_spiketriggeredspectrum_convol.m ./contrib/spike/ft_spiketriggeredspectrum_stat.m ./contrib/spike/ft_spike_waveform.m ./contrib/spike/ft_spike_xcorr.m ./external/afni/BrikInfo.m ./external/afni/BrikLoad.m ./external/afni/CheckBrikHEAD.m ./external/afni/GE_get_volsperrun.m ./external/afni/GroupAna.m ./external/afni/TellAfni_Commands.m ./external/afni/WriteBrik.m ./external/bct/findpaths.m ./external/bct/make_motif34lib.m ./external/bct/modularity_finetune_und_sign.m ./external/bct/modularity_louvain_und.m ./external/bct/modularity_louvain_und_sign.m ./external/bct/modularity_probtune_und_sign.m ./external/bct/motif3funct_bin.m ./external/bct/motif3funct_wei.m ./external/bct/motif4funct_bin.m ./external/bct/motif4funct_wei.m ./external/bct/partition_distance.m ./external/bct/reorder_mod.m ./external/biosig/sclose.m ./external/biosig/sopen.m ./external/ctf/addCTFtrial.m ./external/egi_mff/mff_getSummaryInfo.m ./external/egi_mff/read_mff_header.m ./external/icasso/hcluster.m ./external/icasso/icassoDendrogram.m ./external/icasso/som_linkage.m ./external/iso2mesh/advancefront.m ./external/iso2mesh/bbxflatsegment.m ./external/iso2mesh/cgals2m.m ./external/iso2mesh/cgalv2m.m ./external/iso2mesh/edgeneighbors.m ./external/iso2mesh/faceneighbors.m ./external/iso2mesh/finddisconnsurf.m ./external/iso2mesh/getintersecttri.m ./external/iso2mesh/meshconn.m ./external/iso2mesh/mesheuler.m ./external/iso2mesh/meshresample.m ./external/iso2mesh/plotmesh.m ./external/iso2mesh/plotsurf.m ./external/iso2mesh/plottetra.m ./external/iso2mesh/readgts.m ./external/iso2mesh/removedupelem.m ./external/iso2mesh/removedupnodes.m ./external/iso2mesh/surf2mesh.m ./external/iso2mesh/surfedge.m ./external/iso2mesh/surfinterior.m ./external/iso2mesh/surfpart.m ./external/iso2mesh/uniqedges.m ./external/iso2mesh/v2s.m ./external/iso2mesh/vol2mesh.m ./external/iso2mesh/vol2surf.m ./external/mne/fiff_write_float_sparse_ccs.m ./external/mne/fiff_write_float_sparse_rcs.m ./external/mne/mne_make_projector.m ./external/mne/mne_patch_info.m ./external/simbio/revert_assignment.m ./external/simbio/sb_check_sources.m ./external/simbio/sb_rhs_venant.m ./external/spm8/spm_getSPM.m ./external/spm8/spm_input.m ./external/xml4mat/tag2eval.m ./external/xml4mat/xml2mat.m ./fileio/private/channelposition.m ./fileio/private/ft_apply_montage.m ./fileio/private/ft_checkdata.m ./fileio/private/ft_fetch_data.m ./fileio/private/ft_senslabel.m ./fileio/private/labelcmb2indx.m ./fileio/private/match_str.m ./fileio/private/parameterselection.m ./fileio/private/read_combined_ds.m ./fileio/private/read_ctf_pos.m ./fileio/private/read_edf.m ./fileio/private/read_neuralynx_ncs.m ./fileio/private/read_sbin_header.m ./fileio/private/read_spike6mat_header.m ./fileio/private/read_spmeeg_data.m ./fileio/private/read_tdt_tev.m ./forward/private/channelposition.m ./forward/private/match_str.m ./inverse/private/ft_senslabel.m ./plotting/private/channelposition.m ./plotting/private/ft_apply_montage.m ./plotting/private/ft_senslabel.m ./plotting/private/match_str.m ./realtime/example/ft_realtime_classification.m ./test/private/mydepfun.m ./utilities/private/channelposition.m ./utilities/private/fixsegmentation.m ./utilities/private/labelcmb2indx.m ./utilities/private/parameterselection.m ./external/biosig/private/bv2biosig_events.m ./external/biosig/private/getfiletype.m ./external/biosig/private/physicalunits.m ./external/dmlt/+dml/corclas.m ./external/dmlt/+dml/crossvalidator.m ./external/dmlt/+dml/enet.m ./external/dmlt/+dml/lds.m ./external/dmlt/+dml/searchlight.m ./external/dmlt/+dml/slda.m ./external/gifti/@gifti/save.m ./external/gifti/@xmltree/find.m ./external/dmlt/external/glmnet/glmnet.m ./external/dmlt/external/utils/cartprod.m ./external/gifti/@gifti/private/isintent.m ./external/dmlt/external/gpstuff/gp/demo_binomial_apc.m ./external/dmlt/external/gpstuff/gp/demo_multinom.m ./external/dmlt/external/gpstuff/gp/gp_cpred.m ./external/dmlt/external/gpstuff/gp/gpla_e.m ./external/dmlt/external/gpstuff/gp/gpla_g.m ./external/dmlt/external/gpstuff/gp/gpla_pred.m ./external/dmlt/external/gpstuff/gp/lgcp.m ./external/dmlt/external/gpstuff/gp/lgpdens.m ./external/dmlt/external/gpstuff/gp/pred_coxphhs.m ./external/dmlt/external/gpstuff/gp/pred_coxph.m ./external/dmlt/external/gpstuff/gp/pred_coxphp.m ./external/dmlt/external/gpstuff/gp/spinv.m ./external/dmlt/external/gpstuff/misc/set_PIC.m ./external/dmlt/external/murphy/KPMstats/parzen_fit_select_unif.m ./external/dmlt/external/murphy/KPMtools/approx_unique.m


Roemer van der Meij - 2013-08-05 16:02:40 +0200

roevdmei@archimedes:~/fieldtrip-dev$ grep 'union(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./ft_channelrepair.m ./ft_sourcestatistics.m ./private/statistics_wrapper.m ./private/topoplot_common.m ./utilities/ft_checkconfig.m ./external/ctf/setCTFDataBalance.m ./external/afni/private/GetPath.m ./external/dmlt/external/gpstuff/gp/gp_avpredcomp.m ./external/dmlt/external/gpstuff/optim/fsearch.m ./external/dmlt/external/murphy/KPMtools/loadcell.m ./external/dmlt/external/murphy/KPMtools/myunion.m ./external/dmlt/external/murphy/KPMtools/partition_matrix_vec.m roevdmei@archimedes:~/fieldtrip-dev$ grep 'setxor(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./private/triangle4pt.m ./utilities/ft_checkconfig.m ./external/afni/afni_niml_parse.m ./external/bct/reachdist.m ./external/spm8/spm_check_installation.m ./external/spm8/spm_input.m ./forward/private/triangle4pt.m ./external/gifti/@gifti/gifti.m


Roemer van der Meij - 2013-08-05 16:03:06 +0200

roevdmei@archimedes:~/fieldtrip-dev$ grep 'setdiff(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./ft_channelcombination.m ./ft_channelrepair.m ./ft_combineplanar.m ./ft_connectivityanalysis.m ./ft_denoise_pca.m ./ft_dependencycheck.m ./ft_freqstatistics.m ./ft_megplanar.m ./ft_megrealign.m ./ft_multiplotER.m ./ft_multiplotTFR.m ./ft_mvaranalysis.m ./ft_prepare_layout.m ./ft_prepare_sourcemodel.m ./ft_qualitycheck.m ./ft_regressconfound.m ./ft_singleplotER.m ./ft_singleplotTFR.m ./ft_sourcedescriptives.m ./ft_sourcegrandaverage.m ./ft_sourceparcellate.m ./ft_sourcestatistics.m ./ft_stratify.m ./ft_volumereslice.m ./compat/topoplot.m ./connectivity/ft_connectivity_psi.m ./fileio/ft_read_event.m ./fileio/ft_read_headshape.m ./forward/ft_apply_montage.m ./forward/ft_prepare_vol_sens.m ./inverse/beamformer_dics.m ./inverse/beamformer_lcmv.m ./inverse/beamformer_pcc.m ./inverse/beamformer_sam.m ./plotting/ft_plot_montage.m ./private/bsscca.m ./private/channelposition.m ./private/dimlength.m ./private/estimate_fwhm1.m ./private/find_triangle_neighbours.m ./private/find_vertex_neighbours.m ./private/inputlabel2outputlabel.m ./private/moviefunction.m ./private/pos2dim3d.m ./private/pos2dim.m ./private/prepare_mesh_headshape.m ./private/prepare_mesh_hexahedral.m ./private/prepare_mesh_manual.m ./private/prepare_mesh_segmentation.m ./private/retriangulate.m ./private/rollback_provenance.m ./private/select_channel_list.m ./private/sphericalSplineInterpolate.m ./private/statistics_wrapper.m ./private/topoplot_common.m ./private/undobalancing.m ./private/univariate2bivariate.m ./test/test_bug1646.m ./test/test_bug1850.m ./utilities/ft_checkconfig.m ./utilities/ft_checkdata.m ./utilities/ft_selectdata_new.m ./utilities/ft_selectdata_old.m ./utilities/ft_source2full.m ./utilities/ft_source2sparse.m ./utilities/ft_version.m ./utilities/keyvalcheck.m ./engine/private/getcustompath.m ./external/afni/CheckBrikHEAD.m ./external/afni/MatAFNI_Demo.m ./external/afni/plotsign2.m ./external/bct/rentian_scaling.m ./external/ctf/readCTFhdm.m ./external/ctf/setCTFDataBalance.m ./external/icasso/som_linkage.m ./external/iso2mesh/advancefront.m ./external/iso2mesh/extractloops.m ./external/iso2mesh/internalpoint.m ./external/iso2mesh/meshconn.m ./external/iso2mesh/removeisolatednode.m ./external/spm8/spm_check_installation.m ./external/spm8/spm_conman.m ./fileio/private/channelposition.m ./fileio/private/dimlength.m ./fileio/private/ft_apply_montage.m ./fileio/private/ft_checkdata.m ./fileio/private/pos2dim3d.m ./fileio/private/read_nmc_archive_k_hdr.m ./fileio/private/undobalancing.m ./forward/private/channelposition.m ./forward/private/undobalancing.m ./peer/private/getcustompath.m ./plotting/private/channelposition.m ./plotting/private/ft_apply_montage.m ./plotting/private/keyvalcheck.m ./plotting/private/undobalancing.m ./qsub/private/getcustompath.m ./specest/private/keyvalcheck.m ./trialfun/private/select_channel_list.m ./utilities/private/channelposition.m ./utilities/private/dimlength.m ./utilities/private/fixsource.m ./utilities/private/ft_preamble_debug.m ./utilities/private/pos2dim.m ./utilities/private/selparam.m ./utilities/private/undobalancing.m ./external/dmlt/+dml/crossvalidator.m ./external/dmlt/external/minFunc/minFunc.m ./external/dmlt/external/svm/whiten.m ./external/dmlt/external/gpstuff/misc/cvit.m ./external/dmlt/external/gpstuff/optim/bsearch.m ./external/dmlt/external/murphy/KPMtools/loadcell.m ./external/dmlt/external/murphy/KPMtools/marginalize_table.m ./external/dmlt/external/murphy/KPMtools/marg_table.m ./external/dmlt/external/murphy/KPMtools/mysetdiff.m ./external/dmlt/external/murphy/KPMtools/mysymsetdiff.m


Roemer van der Meij - 2013-08-05 16:04:04 +0200

roevdmei@archimedes:~/fieldtrip-dev$ grep 'ismember(' ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m -l ./ft_appendfreq.m ./ft_channelrepair.m ./ft_freqstatistics.m ./ft_megrealign.m ./ft_multiplotER.m ./ft_multiplotTFR.m ./ft_neighbourplot.m ./ft_networkanalysis.m ./ft_prepare_neighbours.m ./ft_regressconfound.m ./ft_singleplotER.m ./ft_singleplotTFR.m ./ft_volumesegment.m ./connectivity/ft_connectivity_csd2transfer.m ./fileio/ft_read_atlas.m ./forward/ft_headmodel_fns.m ./forward/ft_senstype.m ./peer/peerfeval.m ./private/cancorr.m ./private/combineClusters.m ./private/continuous_ns.m ./private/interp_ungridded.m ./private/moviefunction.m ./private/planarchannelset.m ./private/prepare_mesh_headshape.m ./private/prepare_timefreq_data.m ./private/rejectvisual_summary.m ./private/smudge.m ./private/topoplot_common.m ./private/undobalancing.m ./test/test_bug1067.m ./test/test_bug1607.m ./test/test_tutorial_clusterpermutationtimelock.m ./trialfun/ft_trialfun_general.m ./trialfun/ft_trialfun_realtime.m ./utilities/ft_checkconfig.m ./utilities/ft_selectdata_old.m ./utilities/tokenize.m ./contrib/spike/ft_spikedensity.m ./contrib/spike/ft_spike_isi.m ./contrib/spike/ft_spike_plot_raster.m ./contrib/spike/ft_spike_rate.m ./contrib/spike/ft_spike_select.m ./contrib/spike/ft_spiketriggeredspectrum_convol.m ./contrib/spike/ft_spiketriggeredspectrum_fft.m ./contrib/spike/ft_spiketriggeredspectrum_stat.m ./engine/private/tokenize.m ./external/afni/BrikLoad.m ./external/afni/PreProc.m ./external/afni/WriteBrik.m ./external/dipoli/dipoli.m ./external/fileexchange/icp.m ./external/icasso/vis_valuetype.m ./external/iso2mesh/advancefront.m ./external/iso2mesh/finddisconnsurf.m ./external/iso2mesh/surfboolean.m ./external/simbio/sb_check_sources.m ./external/simbio/sb_set_bndcon.m ./external/spm8/spm_check_installation.m ./external/spm8/spm_conman.m ./external/spm8/spm_input.m ./external/spm8/spm.m ./external/spm8/spm_platform.m ./fileio/private/bti2grad.m ./fileio/private/ft_senstype.m ./fileio/private/np_readmarker.m ./fileio/private/read_4d_hdr.m ./fileio/private/read_combined_ds.m ./fileio/private/read_sbin_header.m ./fileio/private/read_spmeeg_data.m ./fileio/private/tokenize.m ./fileio/private/undobalancing.m ./forward/private/undobalancing.m ./inverse/private/ft_senstype.m ./peer/private/tokenize.m ./plotting/private/ft_senstype.m ./plotting/private/intersect_plane.m ./plotting/private/undobalancing.m ./qsub/private/tokenize.m ./realtime/example/bcifun_latidx.m ./realtime/example/ft_realtime_synchronous.m ./test/private/identical.m ./utilities/private/avgoverdim.m ./utilities/private/seloverdim.m ./utilities/private/undobalancing.m ./external/dmlt/+dml/bootstrap.m ./external/dmlt/+dml/crossvalidator.m ./external/dmlt/+dml/method.m ./external/dmlt/+dml/permutation.m ./external/dmlt/+dml/prior.m ./external/dmlt/+dml/searchlight.m ./external/gifti/@gifti/isfield.m ./external/gifti/@gifti/save.m ./external/gifti/@gifti/subsasgn.m ./external/gifti/@xmltree/convert.m ./external/dmlt/external/bayesianlogreg/construct_prior.m ./external/dmlt/external/bayesianlogreg/submodel.m ./external/gifti/@gifti/private/isintent.m ./external/gifti/@gifti/private/read_gifti_file.m ./external/dmlt/external/gpstuff/dist/prior_gamma.m ./external/dmlt/external/gpstuff/dist/prior_gaussian.m ./external/dmlt/external/gpstuff/dist/prior_invgamma.m ./external/dmlt/external/gpstuff/dist/prior_invt.m ./external/dmlt/external/gpstuff/dist/prior_laplace.m ./external/dmlt/external/gpstuff/dist/prior_loggaussian.m ./external/dmlt/external/gpstuff/dist/prior_logt.m ./external/dmlt/external/gpstuff/dist/prior_sinvchi2.m ./external/dmlt/external/gpstuff/dist/prior_sqinvgamma.m ./external/dmlt/external/gpstuff/dist/prior_sqinvsinvchi2.m ./external/dmlt/external/gpstuff/dist/prior_sqrtinvt.m ./external/dmlt/external/gpstuff/dist/prior_sqrtt.m ./external/dmlt/external/gpstuff/dist/prior_t.m ./external/dmlt/external/gpstuff/gp/esls.m ./external/dmlt/external/gpstuff/gp/gp_avpredcomp.m ./external/dmlt/external/gpstuff/gp/gpcf_cat.m ./external/dmlt/external/gpstuff/gp/gpcf_constant.m ./external/dmlt/external/gpstuff/gp/gpcf_exp.m ./external/dmlt/external/gpstuff/gp/gpcf_linear.m ./external/dmlt/external/gpstuff/gp/gpcf_mask.m ./external/dmlt/external/gpstuff/gp/gpcf_matern32.m ./external/dmlt/external/gpstuff/gp/gpcf_matern52.m ./external/dmlt/external/gpstuff/gp/gpcf_neuralnetwork.m ./external/dmlt/external/gpstuff/gp/gpcf_noise.m ./external/dmlt/external/gpstuff/gp/gpcf_periodic.m ./external/dmlt/external/gpstuff/gp/gpcf_ppcs0.m ./external/dmlt/external/gpstuff/gp/gpcf_ppcs1.m ./external/dmlt/external/gpstuff/gp/gpcf_ppcs2.m ./external/dmlt/external/gpstuff/gp/gpcf_ppcs3.m ./external/dmlt/external/gpstuff/gp/gpcf_prod.m ./external/dmlt/external/gpstuff/gp/gpcf_rq.m ./external/dmlt/external/gpstuff/gp/gpcf_scaled.m ./external/dmlt/external/gpstuff/gp/gpcf_sexp.m ./external/dmlt/external/gpstuff/gp/gpcf_sum.m ./external/dmlt/external/gpstuff/gp/gp_cpred.m ./external/dmlt/external/gpstuff/gp/gp_dic.m ./external/dmlt/external/gpstuff/gp/gp_e.m ./external/dmlt/external/gpstuff/gp/gpep_e.m ./external/dmlt/external/gpstuff/gp/gpep_g.m ./external/dmlt/external/gpstuff/gp/gp_g.m ./external/dmlt/external/gpstuff/gp/gpia_loopred.m ./external/dmlt/external/gpstuff/gp/gp_ia.m ./external/dmlt/external/gpstuff/gp/gp_jpred.m ./external/dmlt/external/gpstuff/gp/gp_kfcv_cdf.m ./external/dmlt/external/gpstuff/gp/gp_kfcv.m ./external/dmlt/external/gpstuff/gp/gpla_loopred.m ./external/dmlt/external/gpstuff/gp/gpmc_loopred.m ./external/dmlt/external/gpstuff/gp/gp_mc.m ./external/dmlt/external/gpstuff/gp/gpmf_constant.m ./external/dmlt/external/gpstuff/gp/gpmf_linear.m ./external/dmlt/external/gpstuff/gp/gpmf_squared.m ./external/dmlt/external/gpstuff/gp/gp_optim.m ./external/dmlt/external/gpstuff/gp/gp_pred.m ./external/dmlt/external/gpstuff/gp/gp_set.m ./external/dmlt/external/gpstuff/gp/gp_waic.m ./external/dmlt/external/gpstuff/gp/lgcp.m ./external/dmlt/external/gpstuff/gp/lgpdens.m ./external/dmlt/external/gpstuff/gp/lik_coxph.m ./external/dmlt/external/gpstuff/gp/lik_gaussian.m ./external/dmlt/external/gpstuff/gp/lik_gaussiansmt.m ./external/dmlt/external/gpstuff/gp/lik_inputdependentnoise.m ./external/dmlt/external/gpstuff/gp/lik_inputdependentweibull.m ./external/dmlt/external/gpstuff/gp/lik_loggaussian.m ./external/dmlt/external/gpstuff/gp/lik_loglogistic.m ./external/dmlt/external/gpstuff/gp/lik_negbin.m ./external/dmlt/external/gpstuff/gp/lik_negbinztr.m ./external/dmlt/external/gpstuff/gp/lik_qgp.m ./external/dmlt/external/gpstuff/gp/lik_t.m ./external/dmlt/external/gpstuff/gp/lik_weibull.m ./external/dmlt/external/gpstuff/gp/lik_zinegbin.m ./external/dmlt/external/gpstuff/gp/metric_distancematrix.m ./external/dmlt/external/gpstuff/gp/metric_euclidean.m ./external/dmlt/external/gpstuff/gp/passgp.m ./external/dmlt/external/gpstuff/gp/scaled_mh.m ./external/dmlt/external/gpstuff/gp/surrogate_sls.m ./external/dmlt/external/gpstuff/misc/violinplot.m ./external/dmlt/external/murphy/KPMtools/find_equiv_posns.m ./external/dmlt/external/murphy/KPMtools/loadcell.m ./external/dmlt/external/murphy/KPMtools/myismember.m


Roemer van der Meij - 2013-08-05 16:19:53 +0200

Needless to say, we have a ****load of functions that need to be checked. To be more precise: roevdmei@archimedes:~/fieldtrip-dev$ grep "ismember(\|setxor(\|setdiff(\|intersect(\|union(\|unique(" ./*.m ./*/*.m ./*/*/*.m ./*/*/*/*.m ./*/*/*/*/*.m ./*/*/*/*/*/*.m | wc -l 1465 We need to check ~1465 lines of code (many of them in the dmlt toolbox). Still though, I think it is likely most uses of these functions are harmless wrt to the 2013 changes. I don't think there is any other option than checking them all by hand. Before we do that, we could change all of the calls to point to a ft_ compat function, or we could skip that stage. We could do it in a bug binge all at once, it shouldn't take a single person more than 4 hours to check 300 lines of code. Right? :p


Robert Oostenveld - 2013-08-06 11:13:52 +0200

(In reply to comment #10) please note that *we* should not be checking the external toolboxes. These are included in fieldtrip for convenience to the user, but we do not maintain them. You might want to inform Marcel that he should check DMLT, and we might want to look for updates of the other external toolboxes.


Roemer van der Meij - 2013-08-07 12:16:10 +0200

(In reply to comment #11) Oh yeah, it kind of looks like I suggest to check the externals. Not my intention though. I sent an email to Marcel with a heads-up. Below a better grep (didn't how to work with the recursive search earlier): grep -rno --include=*.m --exclude-dir=external "ismember(\|setxor(\|setdiff(\|intersect(\|union(\|unique(" ./fieldtrip-dev/ | sort | wc -l This results in 718 lines ;), there were quite a few more hits in external than I guessed. It's 'only' in 238 unique functions though.


Robert Oostenveld - 2013-10-25 14:25:40 +0200

As discussed in the FT meeting of last Wednesday, we will issue a warning when people use 2013a to inform them that it might not work as expected. See http://code.google.com/p/fieldtrip/source/detail?spec=svn8641&r=8626


Vladimir Litvak - 2013-12-04 11:00:42 +0100

(In reply to comment #13) As this warning now appears every time when running SPM on the latest Matlab versions, we'd be grateful if you could give this some priority to make the necessary checks and remove the warning.


Roemer van der Meij - 2013-12-04 12:21:17 +0100

Hey Vladimir, Thanks for the nudge, it's time to get this solved. Robert, let's discuss this in the meeting today and plan a bug-binge dedicated to it?


Jan-Mathijs Schoffelen - 2013-12-04 13:56:45 +0100

discussed in FT-meeting. -probably only those cases where the function is used with > 1 output argument -then it depends on how the > 1 output arguments are subsequently used -possible issues occur when these are used in a repmat (or likewise functionality), size, cat TO DO: do a clever grep to reduce the number of to-be-checked lines (and their consecutive lines) Jorn volunteered to assist Roemer to go through the reduced list to identify potential problems.


Roemer van der Meij - 2013-12-04 15:45:01 +0100

Alright, I created a google spreadsheet containing a list of to be checked functions: https://docs.google.com/spreadsheet/ccc?key=0AsgOYRZn0d9VdFd6QWtrcDRlakg0TmlRY2cxRzkyNkE&usp=sharing We can keep track on our progress here. Not so bad, we only need to check 62 calls ;). As a reminder, we need to check: 1) whether being a row vs column vector influences any action on the indices as output ad1) if yes, force index to column vector (for <2013a) and adapt subsequent lines appropriately 2) check whether the input MIGHT contain duplicated items


Jörn M. Horschig - 2013-12-04 16:49:49 +0100

done. I assume that channels can never occur twice, imho that would be user error, because FT usually errors I found only one function to be potentially affected


Roemer van der Meij - 2013-12-04 16:56:10 +0100

Did you open every function and inspect the surrounding code? If so, you're fast! Channels are not the only things being indexed? Besides, in intermediate code there could be duplications, even of channels. Also, in row 18, you say 'see above'. Above where? ;) PS: I forgot to remove some custom functions I had lying around ;), sorry for putting them on the list


Jörn M. Horschig - 2013-12-04 17:04:29 +0100

line 18 is a duplication of line 17, apart from the different folder and yes, I am fast ;) I indeed scanned for all occurences of the respective variables and checked how they are used - mostly they are used for indexing which imho is fine. And mostly, channel labels are indexed. Oh, and I just see that I reversed the question ;) my 'no' should be 'yes'. Guess I should start learning reading titles of spreadsheets ;)


Roemer van der Meij - 2013-12-04 17:08:53 +0100

Well, we already disagree on call #3 ;) [dum, chansel_crs] = ismember(chansel, (1:Ncrs)+Ndat); chansel_crs=chansel_crs(chansel_crs~=0)'; *followed by* all(chansel_crs==(1:Ncrs)) Whether chansel_crs is a column or a row-vector determines whether the last line results in an error. Fixing it now


Roemer van der Meij - 2013-12-04 17:15:13 +0100

Actually, I was a bit too hasty there, I missed that ' ;) (it's already forced to be a row-vector) Shouldn't do this at 5PM


Robert Oostenveld - 2013-12-04 17:37:59 +0100

(In reply to comment #22) > Shouldn't do this at 5PM no, you better work on it later this evening ... into the night :-P


Roemer van der Meij - 2013-12-10 16:08:38 +0100

We don't need to check for the presence of duplicated items. The new functions return the first occurrence, the old ones the last occurrence. This holds for unique, intersect, setdiff, setxor, and ismember (union is a bit weird, but we never use the indices from that one). So, the idea of duplicated items being non-duplicated in the new functions is no longer an issue, as they would have been non-duplicated in the old functions. I cannot think of a case whether it would matter which of two or more multiples are chosen (they're duplicates after all), so, only checking for appropriate use of the indices is necessary. (I had written this in a post last week actually, but didn't submit it seems) I've gone through the list as well. Looks like we're good! Jorn, could you have a quick look at the ones I marked as okay, but that you were doubting? As far as I can see they're fine as well (taking into account the above). If you agree, I'll remove the warning from ft_defaults, and it's closing time!


Jörn M. Horschig - 2013-12-11 10:51:23 +0100

Hi Roemer, the ones I marked are because I am not sure what is supposed to happen if dimord is chan_chan_freq or chan_freq_freq or the like. On the one hand, I am not sure whether anything in FieldTrip actually copes with such cross-region/-frequency data, on the other hand if so I am not sure how this is implemented. From the implementation I saw, such information just gets ignored


Roemer van der Meij - 2013-12-11 12:00:33 +0100

Hi Jorn, I don't think we have to worry about that for the 2013a+ changes. If the output is wrong now in 2013a+, then it would have also been in <2012b. The only thing with respect to duplicated items that changed is that now the first instead of the last of the duplicated elements is returned. So, I would say our code in 2013a+ is *as robust* as it was in 2012b ;p Agreed?


Roemer van der Meij - 2013-12-11 14:41:24 +0100

Discussed in the meeting, all issues deemed solved, we're compatible again :). @Vladimir The warning has been removed from ft_defaults @Guillaume Per Robert's suggestion I added you as a CC. We've been dealing with the matlab changes to several functions like intersect/unique/etc in R2013a+. The most relevant comments here are #1, #16, #17, and #26 (relating the last bit in #17). Especially comment #16 saved us a humongous amount of time, which was a suggestion by Jorn.


Robert Oostenveld - 2013-12-11 15:43:39 +0100

(In reply to comment #27) Hi Guillaume Rouselet, Sorry, Roemer added you to the CC list for this bugzilla issue (upon my request to add "Guillaume"), but it should have been Guillaume Flandin (now also on the CC). cheers, Robert


Roemer van der Meij - 2014-01-29 13:40:07 +0100

Closing time http://www.youtube.com/watch?v=7-0lV5qs1Qw