From 10294b14611a769e431c0c40148658dcf9eec62e Mon Sep 17 00:00:00 2001 From: SPM Date: Wed, 16 Sep 2009 14:16:11 +0100 Subject: [PATCH] SPM8 r3408 --- @file_array/private/file2mat.mexa64 | Bin 20614 -> 20614 bytes @file_array/private/file2mat.mexglx | Bin 18298 -> 18298 bytes @file_array/private/file2mat.mexmaci | Bin 30308 -> 34360 bytes @file_array/private/file2mat.mexmaci64 | Bin 18376 -> 18376 bytes @file_array/private/file2mat.mexw32 | Bin 49152 -> 50688 bytes @file_array/private/file2mat.mexw64 | Bin 17408 -> 17920 bytes @file_array/private/mat2file.mexmaci | Bin 17676 -> 17668 bytes @gifti/export.m | 4 +- @gifti/save.m | 186 +- @meeg/check.m | 6 +- @meeg/clone.m | 20 +- @meeg/condlist.m | 4 +- @meeg/coor2D.m | 49 +- @meeg/delete.m | 17 + @meeg/display.m | 25 +- @meeg/frequencies.m | 41 +- @meeg/fsample.m | 13 +- @meeg/fttimelock.m | 26 + @meeg/getfield.m | 12 + @meeg/history.m | 23 +- @meeg/indchannel.m | 18 + @meeg/indfrequency.m | 29 + @meeg/indtrial.m | 18 + @meeg/meegchannels.m | 4 +- @meeg/private/checkmeeg.m | 88 +- @meeg/private/getset.m | 4 +- @meeg/private/match_str.m | 76 + @meeg/putfsample.m | 10 - @meeg/putnsamples.m | 10 - @meeg/sconfounds.m | 8 +- @meeg/selectdata.m | 59 +- @meeg/size.m | 14 + @meeg/transformtype.m | 6 +- Contents.m | 4 +- EEGtemplates/FIF306_setup.mat | Bin 42280 -> 0 bytes EEGtemplates/Neuromag306_EEG70.mat | Bin 0 -> 4470 bytes EEGtemplates/biosemi64.sfp | 67 + MIP.mat | Bin 222008 -> 221856 bytes canonical/scalp_2562.surf.gii | 2 +- config/spm_cfg.m | 115 +- config/spm_cfg_bms.m | 81 +- config/spm_cfg_defs.m | 66 +- config/spm_cfg_eeg_artefact.m | 235 +- config/spm_cfg_eeg_average.m | 56 +- config/spm_cfg_eeg_bc.m | 61 + config/spm_cfg_eeg_convert.m | 12 +- config/spm_cfg_eeg_merge.m | 73 +- config/spm_cfg_eeg_tf_rescale.m | 138 +- config/spm_run_bms_dcm.m | 66 +- config/spm_run_bms_map.m | 128 +- config/spm_run_bms_vis.m | 46 +- config/spm_run_fmri_est.m | 22 +- exec/make_exec.m | 118 +- external/fieldtrip/private/apply_montage.m | 59 +- external/fieldtrip/private/beamformer_dics.m | 35 +- external/fieldtrip/private/channelposition.m | 66 +- external/fieldtrip/private/channelselection.m | 30 +- external/fieldtrip/private/checkconfig.m | 27 +- external/fieldtrip/private/checkdata.m | 220 +- external/fieldtrip/private/combineplanar.m | 196 +- external/fieldtrip/private/componentbrowser.m | 254 ++ external/fieldtrip/private/ctf2grad.m | 33 +- external/fieldtrip/private/databrowser.m | 890 ++++ external/fieldtrip/private/datatype.m | 16 +- .../fieldtrip/private/denoise_synthetic.m | 59 +- external/fieldtrip/private/dipole_fit.m | 39 +- external/fieldtrip/private/dipolefitting.m | 233 +- external/fieldtrip/private/dipolesimulation.m | 13 +- external/fieldtrip/private/electroderealign.m | 59 +- external/fieldtrip/private/fetch_data.m | 46 +- external/fieldtrip/private/filetype.m | 5 +- external/fieldtrip/private/fixdimord.m | 86 +- external/fieldtrip/private/fixdipole.m | 39 + external/fieldtrip/private/fixinside.m | 3 + external/fieldtrip/private/freqanalysis.m | 5 +- external/fieldtrip/private/freqdescriptives.m | 10 +- external/fieldtrip/private/hastoolbox.m | 5 +- external/fieldtrip/private/issubfield.m | 9 +- external/fieldtrip/private/istrue.m | 7 +- external/fieldtrip/private/keyval.m | 22 +- external/fieldtrip/private/keyvalcheck.m | 53 +- external/fieldtrip/private/layoutplot.m | 37 + external/fieldtrip/private/meg_leadfield1.m | 5 +- external/fieldtrip/private/megplanar.m | 103 +- external/fieldtrip/private/multiplotCC.m | 133 + external/fieldtrip/private/multiplotER.m | 96 +- external/fieldtrip/private/multiplotTFR.m | 90 +- external/fieldtrip/private/planarchannelset.m | 1358 +++--- external/fieldtrip/private/plot_box.m | 117 +- external/fieldtrip/private/plot_dipole.m | 150 + external/fieldtrip/private/plot_lay.m | 26 +- external/fieldtrip/private/plot_line.m | 98 +- external/fieldtrip/private/plot_matrix.m | 69 +- external/fieldtrip/private/plot_mesh.m | 133 +- external/fieldtrip/private/plot_sens.m | 36 +- external/fieldtrip/private/plot_slice.m | 525 ++- external/fieldtrip/private/plot_text.m | 32 +- external/fieldtrip/private/plot_topo.m | 122 + external/fieldtrip/private/plot_topo3d.m | 168 + external/fieldtrip/private/plot_vector.m | 164 +- external/fieldtrip/private/plot_vol.m | 136 +- external/fieldtrip/private/prepare_atlas.m | 5 +- external/fieldtrip/private/prepare_bemmodel.m | 135 +- .../private/prepare_concentricspheres.m | 47 +- .../fieldtrip/private/prepare_freq_matrices.m | 4 + external/fieldtrip/private/prepare_layout.m | 221 +- .../fieldtrip/private/prepare_localspheres.m | 147 +- external/fieldtrip/private/prepare_mask.m | 50 + external/fieldtrip/private/prepare_mesh.m | 121 + .../private/prepare_mesh_headshape.m | 59 + .../fieldtrip/private/prepare_mesh_manual.m | 1073 +++++ .../private/prepare_mesh_segmentation.m | 107 + .../fieldtrip/private/prepare_singleshell.m | 165 +- external/fieldtrip/private/prepare_vol_sens.m | 5 +- external/fieldtrip/private/preproc.m | 12 +- external/fieldtrip/private/preprocessing.m | 122 +- external/fieldtrip/private/read_24bit.c | 5 +- external/fieldtrip/private/read_eeglabdata.m | 19 +- external/fieldtrip/private/read_eeglabevent.m | 16 +- .../fieldtrip/private/read_eeglabheader.m | 32 +- external/fieldtrip/private/read_event.m | 31 +- external/fieldtrip/private/read_header.m | 25 +- external/fieldtrip/private/read_mri.m | 103 +- external/fieldtrip/private/read_sens.m | 16 +- external/fieldtrip/private/redefinetrial.m | 8 +- external/fieldtrip/private/rejectartifact.m | 30 +- external/fieldtrip/private/rejectcomponent.m | 21 +- external/fieldtrip/private/rejectvisual.m | 9 +- external/fieldtrip/private/resampledata.m | 35 +- external/fieldtrip/private/select_box.m | 48 +- external/fieldtrip/private/select_channel.m | 117 +- external/fieldtrip/private/select_point.m | 113 + external/fieldtrip/private/select_point2d.m | 107 + external/fieldtrip/private/select_point3d.m | 97 + external/fieldtrip/private/select_range.m | 239 ++ external/fieldtrip/private/selectdata.m | 181 +- external/fieldtrip/private/senslabel.m | 3682 +++++++++-------- external/fieldtrip/private/senstype.m | 108 +- external/fieldtrip/private/singleplotER.m | 156 +- external/fieldtrip/private/singleplotTFR.m | 166 +- external/fieldtrip/private/sourceanalysis.m | 13 +- .../fieldtrip/private/sourceinterpolate.m | 7 +- external/fieldtrip/private/sourceplot.m | 313 +- external/fieldtrip/private/splint_gh.mexmaci | Bin 12768 -> 12768 bytes external/fieldtrip/private/standardise.m | 8 +- .../fieldtrip/private/statistics_montecarlo.m | 11 +- external/fieldtrip/private/topoplot.m | 5 +- external/fieldtrip/private/topoplotCC.m | 200 + external/fieldtrip/private/topoplotER.m | 121 +- external/fieldtrip/private/topoplotTFR.m | 5 +- .../trialfun_twoclass_classification.m | 79 + external/fieldtrip/private/uilayout.m | 163 + external/fieldtrip/private/volumelookup.m | 7 +- external/fieldtrip/private/volumenormalise.m | 7 +- external/fieldtrip/private/volumerealign.m | 44 +- external/fieldtrip/private/volumesegment.m | 7 +- external/fieldtrip/private/write_data.m | 189 +- external/fileio/private/apply_montage.m | 59 +- external/fileio/private/ctf2grad.m | 33 +- external/fileio/private/filetype.m | 5 +- external/fileio/private/hastoolbox.m | 5 +- external/fileio/private/issubfield.m | 9 +- external/fileio/private/keyval.m | 22 +- external/fileio/private/read_24bit.c | 5 +- external/fileio/private/read_combined_ds.m | 147 + external/fileio/private/read_eeglabdata.m | 19 +- external/fileio/private/read_eeglabevent.m | 16 +- external/fileio/private/read_eeglabheader.m | 32 +- external/fileio/private/read_event.m | 31 +- external/fileio/private/read_header.m | 25 +- external/fileio/private/read_mri.m | 103 +- external/fileio/private/read_plexon_ddt.m | 138 + external/fileio/private/read_plexon_ds.m | 155 + external/fileio/private/read_plexon_plx.m | 431 ++ external/fileio/private/read_sbin_events.m | 5 +- external/fileio/private/read_sens.m | 16 +- external/fileio/private/senslabel.m | 3682 +++++++++-------- external/fileio/private/senstype.m | 108 +- external/fileio/private/write_data.m | 189 +- external/fileio/private/write_plexon_nex.m | 225 + external/forwinv/private/apply_montage.m | 59 +- external/forwinv/private/beamformer_dics.m | 35 +- external/forwinv/private/dipole_fit.m | 39 +- external/forwinv/private/fixdipole.m | 39 + external/forwinv/private/hastoolbox.m | 5 +- external/forwinv/private/issubfield.m | 9 +- external/forwinv/private/keyval.m | 22 +- external/forwinv/private/meg_leadfield1.m | 5 +- external/forwinv/private/prepare_vol_sens.m | 5 +- external/forwinv/private/senslabel.m | 3682 +++++++++-------- external/forwinv/private/senstype.m | 108 +- man/batch/batch.tex | 26 + man/biblio/methods_group.bib | 59 +- man/example_scripts/faces_eeg_montage.m | 19 + man/example_scripts/montage_subject1.m | 7 +- man/manual.pdf | Bin 8721020 -> 10334331 bytes man/manual.tex | 2 +- man/meeg/eeg_sensoranalysis.tex | 15 +- man/mmn/3DSPM.png | Bin 35064 -> 63887 bytes man/mmn/coreg.png | Bin 38160 -> 58570 bytes man/mmn/erp_c23.png | Bin 13490 -> 8397 bytes man/mmn/forward.png | Bin 320199 -> 418634 bytes man/mmn/invert.png | Bin 21459 -> 27066 bytes man/mmn/mesh.png | Bin 62123 -> 128441 bytes man/mmn/mmn.tex | 87 +- man/mmn/topo1.png | Bin 55086 -> 72775 bytes man/multimodal/figures/eeg_check_datareg.jpg | Bin 96782 -> 0 bytes man/multimodal/figures/eeg_coreg.png | Bin 0 -> 55806 bytes man/multimodal/figures/eeg_ecd.jpg | Bin 34993 -> 0 bytes man/multimodal/figures/eeg_erp.png | Bin 0 -> 9345 bytes man/multimodal/figures/eeg_forward.png | Bin 0 -> 527971 bytes man/multimodal/figures/eeg_meshing.png | Bin 0 -> 141174 bytes man/multimodal/figures/eeg_msp.png | Bin 0 -> 24831 bytes man/multimodal/figures/eeg_recon.png | Bin 0 -> 114879 bytes man/multimodal/figures/eeg_scalptime.png | Bin 0 -> 71676 bytes .../figures/eeg_scalptime_results.png | Bin 0 -> 32149 bytes man/multimodal/figures/eeg_topo.png | Bin 0 -> 20741 bytes man/multimodal/figures/figure_32_1.jpg | Bin 24610 -> 0 bytes man/multimodal/figures/figure_32_10.jpg | Bin 116706 -> 0 bytes man/multimodal/figures/figure_32_11.jpg | Bin 25301 -> 0 bytes man/multimodal/figures/figure_32_12.jpg | Bin 31735 -> 0 bytes man/multimodal/figures/figure_32_13_L.jpg | Bin 13937 -> 0 bytes man/multimodal/figures/figure_32_13_R.jpg | Bin 13610 -> 0 bytes man/multimodal/figures/figure_32_14_L.jpg | Bin 19982 -> 0 bytes man/multimodal/figures/figure_32_14_R.jpg | Bin 18829 -> 0 bytes man/multimodal/figures/figure_32_15.jpg | Bin 31064 -> 0 bytes man/multimodal/figures/figure_32_16.jpg | Bin 27724 -> 0 bytes man/multimodal/figures/figure_32_17.jpg | Bin 55447 -> 0 bytes man/multimodal/figures/figure_32_18.jpg | Bin 27057 -> 0 bytes man/multimodal/figures/figure_32_19.jpg | Bin 22628 -> 0 bytes man/multimodal/figures/figure_32_2.jpg | Bin 159450 -> 0 bytes man/multimodal/figures/figure_32_20.jpg | Bin 30050 -> 0 bytes man/multimodal/figures/figure_32_21.jpg | Bin 78456 -> 0 bytes man/multimodal/figures/figure_32_22.jpg | Bin 66593 -> 0 bytes man/multimodal/figures/figure_32_3.jpg | Bin 11169 -> 0 bytes man/multimodal/figures/figure_32_4.jpg | Bin 40242 -> 0 bytes man/multimodal/figures/figure_32_5.jpg | Bin 45301 -> 0 bytes man/multimodal/figures/figure_32_6.jpg | Bin 49923 -> 0 bytes man/multimodal/figures/figure_32_7.jpg | Bin 84916 -> 0 bytes man/multimodal/figures/figure_32_8.jpg | Bin 50182 -> 0 bytes man/multimodal/figures/figure_32_9.jpg | Bin 26703 -> 0 bytes .../figures/fmri_faces_vs_scrambled.png | Bin 0 -> 48670 bytes man/multimodal/figures/fmri_spmf_001_10.jpg | Bin 71618 -> 0 bytes man/multimodal/figures/meg_TF_results.png | Bin 0 -> 16824 bytes man/multimodal/figures/meg_TFimage.png | Bin 0 -> 27002 bytes man/multimodal/figures/meg_coreg.png | Bin 0 -> 43357 bytes man/multimodal/figures/meg_mesh.jpg | Bin 41983 -> 0 bytes man/multimodal/figures/meg_mesh_sens.jpg | Bin 70275 -> 0 bytes man/multimodal/figures/meg_msp.png | Bin 0 -> 21964 bytes man/multimodal/figures/meg_plv_faces.png | Bin 0 -> 9987 bytes man/multimodal/figures/meg_plv_scrambled.png | Bin 0 -> 9702 bytes man/multimodal/figures/meg_pow_faces.png | Bin 0 -> 6705 bytes man/multimodal/figures/meg_pow_scrambled.png | Bin 0 -> 6502 bytes man/multimodal/figures/meg_recon_window.jpg | Bin 21041 -> 0 bytes man/multimodal/figures/meg_scalp_erf.png | Bin 0 -> 59244 bytes man/multimodal/figures/meg_sol_lef.jpg | Bin 72554 -> 0 bytes man/multimodal/figures/meg_sol_rig.jpg | Bin 72120 -> 0 bytes man/multimodal/figures/meg_sol_ven.jpg | Bin 78924 -> 0 bytes man/multimodal/figures/meg_topo180.png | Bin 0 -> 16095 bytes man/multimodal/figures/paradigm.png | Bin 0 -> 51167 bytes man/multimodal/figures/unwarp.jpeg | Bin 36414 -> 0 bytes man/multimodal/figures/unwarp2.jpeg | Bin 35318 -> 0 bytes man/multimodal/multimodal.tex | 770 ++-- .../@cfg_choice/{gencode.m => gencode_item.m} | 22 +- matlabbatch/@cfg_dep/gencode.m | 52 +- .../@cfg_entry/{gencode.m => gencode_item.m} | 20 +- .../{gencode.m => gencode_item.m} | 21 +- .../@cfg_files/{gencode.m => gencode_item.m} | 16 +- matlabbatch/@cfg_item/gencode.m | 164 +- matlabbatch/@cfg_item/gencode_item.m | 151 + .../@cfg_menu/{gencode.m => gencode_item.m} | 20 +- .../@cfg_repeat/{gencode.m => gencode_item.m} | 20 +- matlabbatch/cfg_basicio/cfg_cfg_basicio.m | 2 +- matlabbatch/cfg_basicio/cfg_run_assignin.m | 10 +- matlabbatch/cfg_basicio/cfg_run_runjobs.m | 14 +- .../src/batch_basicio_12_assignin.m | 4 +- matlabbatch/cfg_confgui/cfg_confgui.m | 6 +- matlabbatch/cfg_confgui/cfg_run_template.m | 122 + matlabbatch/cfg_getfile.m | 55 +- matlabbatch/cfg_mlbatch_appcfg.m | 18 +- matlabbatch/cfg_ui.m | 29 +- matlabbatch/cfg_util.m | 8 +- matlabbatch/examples/batch_example_add1_div.m | 19 + .../examples/batch_example_add1_div_reuse_b.m | 41 + .../batch_example_add1_div_reuse_b_outname.m | 41 + matlabbatch/examples/cfg_example_run_div.m | 6 +- ..._appcfg.m => cfg_mlbatch_appcfg.m.example} | 4 +- matlabbatch/gencode.m | 222 +- matlabbatch/gencode_rvalue.m | 47 +- matlabbatch/gencode_substruct.m | 40 +- matlabbatch/gencode_substructcode.m | 38 +- matlabbatch/help2cell.m | 2 +- matlabbatch/hgsave_pre2008a.m | 38 +- matlabbatch/private/cfg_maxextent.m | 6 +- spm.m | 71 +- spm_ADEM_M_set.m | 32 +- spm_BMS.m | 8 +- spm_BMS_gibbs.m | 94 + spm_DEM_M_set.m | 12 +- spm_DisplayTimeSeries.m | 14 +- spm_Menu.fig | Bin 104976 -> 105856 bytes spm_ROI.m | 144 + spm_add.mexmaci | Bin 209008 -> 208964 bytes spm_bias_mex.mexmaci | Bin 213124 -> 213084 bytes spm_bms_display.m | 6 +- spm_bms_display_vox.m | 10 +- spm_brainwarp.mexmaci | Bin 217200 -> 217160 bytes spm_bsplinc.mexmaci | Bin 209044 -> 209004 bytes spm_cat.m | 4 +- spm_changepath.m | 4 +- spm_compare_families.m | 173 +- spm_cond_units.m | 4 +- spm_conv_vol.mexmaci | Bin 213108 -> 213068 bytes spm_cva.m | 125 +- spm_data_id.m | 46 + spm_dcm_bma.m | 113 + spm_dcm_compare.m | 4 +- spm_dcm_create.m | 10 +- spm_dcm_estimate.m | 16 +- spm_dcm_generate.m | 3 +- spm_defaults.m | 4 +- spm_defs.m | 82 +- spm_design_contrasts.m | 5 +- spm_dicom_convert.m | 64 +- spm_dicom_headers.m | 18 +- spm_eeg_artefact.m | 390 +- spm_eeg_artefact5.m | 358 ++ spm_eeg_artefact_flat.m | 87 + spm_eeg_artefact_jump.m | 71 + spm_eeg_artefact_peak2peak.m | 71 + spm_eeg_artefact_threshchan.m | 71 + spm_eeg_average.m | 316 +- spm_eeg_average5.m | 199 + spm_eeg_average_TF.m | 132 +- spm_eeg_bc.m | 61 +- spm_eeg_convert2images.m | 125 +- spm_eeg_convert2scalp.m | 23 +- spm_eeg_copy.m | 15 +- spm_eeg_displayECD.m | 10 +- spm_eeg_downsample.m | 21 +- spm_eeg_epochs.m | 15 +- spm_eeg_filter.m | 18 +- spm_eeg_ft2spm.m | 104 +- spm_eeg_grandmean.m | 9 +- spm_eeg_history.m | 6 +- spm_eeg_inv_checkdatareg.m | 23 +- spm_eeg_inv_checkmeshes.m | 18 +- spm_eeg_inv_imag_api.m | 8 +- spm_eeg_inv_meshdist.m | 4 +- spm_eeg_inv_results.m | 83 +- spm_eeg_inv_vbecd.m | 541 +-- spm_eeg_inv_vbecd_getLF.m | 27 +- spm_eeg_inv_vbecd_gui.m | 566 ++- spm_eeg_inv_visu3D_api.m | 6 +- spm_eeg_invert.m | 332 +- spm_eeg_invert_fuse.m | 133 +- spm_eeg_mask.m | 81 + spm_eeg_mask2channels.m | 65 + spm_eeg_merge.m | 270 +- spm_eeg_merge_TF.m | 167 +- spm_eeg_montage.m | 89 +- spm_eeg_montage_ui.m | 8 +- spm_eeg_prep.m | 48 +- spm_eeg_prep_ui.m | 18 +- spm_eeg_project3D.m | 7 +- spm_eeg_remove_bad_trials.m | 97 + spm_eeg_review.m | 11 +- spm_eeg_review_callbacks.m | 49 +- spm_eeg_review_switchDisplay.m | 42 +- spm_eeg_review_uis.m | 13 +- spm_eeg_robust_average.m | 103 - spm_eeg_robust_average_TF.m | 134 - spm_eeg_tf.m | 23 +- spm_eeg_tf_rescale.m | 63 +- spm_eeg_weight_epochs.m | 68 +- spm_eeg_weight_epochs_TF.m | 149 +- spm_eeg_wrap_dipfit_vbecd.m | 64 + spm_existfile.mexglx | Bin 8503 -> 8505 bytes spm_existfile.mexw32 | Bin 5632 -> 5632 bytes spm_filter.m | 31 +- spm_gamrnd.m | 99 +- spm_gamrnd.mexa64 | Bin 0 -> 14752 bytes spm_gamrnd.mexglx | Bin 0 -> 8725 bytes spm_gamrnd.mexmaci | Bin 0 -> 12852 bytes spm_gamrnd.mexmaci64 | Bin 0 -> 8840 bytes spm_gamrnd.mexw32 | Bin 0 -> 7168 bytes spm_gamrnd.mexw64 | Bin 0 -> 9728 bytes spm_get_data.m | 22 +- spm_global.mexmaci | Bin 204848 -> 204808 bytes spm_hist2.mexmaci | Bin 12956 -> 12956 bytes spm_int_J.m | 16 +- spm_invdef.mexmaci | Bin 25460 -> 25460 bytes spm_jobman.m | 24 +- spm_list.m | 8 +- spm_make_contrasts.m | 7 +- spm_mesh_project.m | 38 + spm_mip.m | 12 +- spm_mip_ui.m | 55 +- spm_multrnd.m | 19 + spm_mvb.m | 47 +- spm_mvb_G.m | 17 +- spm_mvb_p.m | 108 + spm_mvb_ui.m | 156 +- spm_nlsi_N.m | 5 +- spm_orthviews.m | 24 +- spm_peb_ppi.m | 668 +-- spm_phase_shuffle.m | 14 +- spm_powell.m | 10 +- spm_regions.m | 120 +- spm_reml.m | 4 +- spm_reml_sc.m | 4 +- spm_render.m | 286 +- spm_render_vol.mexmaci | Bin 209004 -> 208964 bytes spm_resels_vol.mexmaci | Bin 208944 -> 208904 bytes spm_results_ui.m | 95 +- spm_robust_average.m | 109 + spm_robust_glm.m | 133 + spm_sample_vol.mexmaci | Bin 208896 -> 208856 bytes spm_slice_vol.mexmaci | Bin 204800 -> 204760 bytes spm_spm.m | 332 +- spm_spm_Bayes.m | 6 +- spm_transverse.m | 99 +- spm_uw_show.m | 182 +- spm_vb_neighbors.m | 6 +- src/Makefile | 9 +- src/Makefile.var | 3 +- src/file2mat.c | 30 +- src/spm_gamrnd.c | 123 + toolbox/DARTEL/dartel2.mexmaci | Bin 63268 -> 63268 bytes toolbox/DARTEL/dartel3.mexmaci | Bin 149948 -> 149948 bytes toolbox/DARTEL/optim1.mexmaci | Bin 34028 -> 34028 bytes toolbox/DARTEL/optimN.mexmaci | Bin 42084 -> 42084 bytes toolbox/DARTEL/optimNn.mexmaci | Bin 46180 -> 46180 bytes toolbox/DARTEL/spm_dartel_norm.m | 5 +- toolbox/DARTEL/spm_dartel_norm_fun.m | 12 +- toolbox/DARTEL/spm_dartel_template.m | 3 +- toolbox/DARTEL/tbx_cfg_dartel.m | 353 +- toolbox/DEM/ADEM_mountaincar_loss_3.m | 4 +- toolbox/DEM/ADEM_mountaincar_loss_4.m | 187 + toolbox/DEM/ADEM_mountaincar_loss_5.m | 172 + toolbox/DEM/DEM_demo.m | 5 + toolbox/DEM/spm_SHC_fx.m | 36 + toolbox/DEM/spm_fx_mountaincar.m | 4 +- toolbox/DEM/spm_mc_fx_3.m | 6 +- toolbox/DEM/spm_mc_fx_4.m | 67 + toolbox/DEM/spm_mc_fx_5.m | 68 + toolbox/DEM/spm_mc_fxa_4.m | 29 + toolbox/DEM/spm_mc_fxa_5.m | 28 + toolbox/HDW/spm_def2det.mexmaci | Bin 17272 -> 17264 bytes toolbox/HDW/spm_warp.mexmaci | Bin 29716 -> 29716 bytes toolbox/MEEGtools/spm_MEEGtools.m | 7 +- toolbox/MEEGtools/spm_dcm_ind_save_images.m | 143 - .../MEEGtools/spm_eeg_correct_sensor_data.m | 191 + .../MEEGtools/spm_eeg_ft_artefact_visual.m | 7 +- .../MEEGtools/spm_eeg_ft_beamformer_freq.m | 132 +- .../MEEGtools/spm_eeg_ft_beamformer_mult.m | 504 +++ .../MEEGtools/spm_eeg_ft_beamformer_source.m | 8 +- toolbox/MEEGtools/spm_eeg_ft_datareg_manual.m | 14 +- toolbox/MEEGtools/spm_eeg_ft_dipolefitting.m | 4 +- .../spm_eeg_ft_multitaper_coherence.m | 328 ++ toolbox/MEEGtools/spm_eeg_ft_multitaper_tf.m | 178 + toolbox/MEEGtools/spm_eeg_megheadloc.m | 137 +- toolbox/MEEGtools/spm_eeg_remove_jumps.m | 205 +- toolbox/MEEGtools/spm_eeg_remove_spikes.m | 7 +- toolbox/MEEGtools/spm_eeg_reref_eeg.m | 100 + toolbox/MEEGtools/spm_eeg_spatial_confounds.m | 186 +- toolbox/Seg/spm_invert_def.m | 11 +- toolbox/Seg/spm_load_priors8.m | 7 +- toolbox/Seg/spm_maff8.m | 7 +- toolbox/Seg/spm_preproc8.m | 6 +- toolbox/Seg/spm_preproc_run.m | 5 +- toolbox/Seg/spm_preproc_write8.m | 6 +- toolbox/Seg/spm_sample_priors8.m | 15 +- toolbox/dcm_meeg/spm_api_erp.m | 41 +- toolbox/dcm_meeg/spm_dcm_dem.m | 15 +- toolbox/dcm_meeg/spm_dcm_erp.m | 17 +- toolbox/dcm_meeg/spm_dcm_erp_results.m | 3 +- toolbox/dcm_meeg/spm_dcm_ind.m | 17 +- toolbox/dcm_meeg/spm_dcm_ind_results.m | 38 +- toolbox/dcm_meeg/spm_dcm_phase.m | 16 +- toolbox/dcm_meeg/spm_dcm_ssr.m | 16 +- toolbox/dcm_meeg/spm_eeg_inv_ecd_DrawDip.m | 4 +- toolbox/spectral/spm_wavspec.m | 14 +- 483 files changed, 27728 insertions(+), 13743 deletions(-) create mode 100644 @meeg/delete.m create mode 100644 @meeg/fttimelock.m create mode 100644 @meeg/getfield.m create mode 100644 @meeg/indchannel.m create mode 100644 @meeg/indfrequency.m create mode 100644 @meeg/indtrial.m create mode 100644 @meeg/private/match_str.m delete mode 100644 @meeg/putfsample.m delete mode 100644 @meeg/putnsamples.m create mode 100644 @meeg/size.m delete mode 100644 EEGtemplates/FIF306_setup.mat create mode 100644 EEGtemplates/Neuromag306_EEG70.mat create mode 100644 EEGtemplates/biosemi64.sfp create mode 100644 config/spm_cfg_eeg_bc.m create mode 100644 external/fieldtrip/private/componentbrowser.m create mode 100644 external/fieldtrip/private/databrowser.m create mode 100644 external/fieldtrip/private/fixdipole.m create mode 100644 external/fieldtrip/private/multiplotCC.m create mode 100644 external/fieldtrip/private/plot_dipole.m create mode 100755 external/fieldtrip/private/prepare_mask.m create mode 100644 external/fieldtrip/private/prepare_mesh.m create mode 100644 external/fieldtrip/private/prepare_mesh_headshape.m create mode 100644 external/fieldtrip/private/prepare_mesh_manual.m create mode 100644 external/fieldtrip/private/prepare_mesh_segmentation.m create mode 100644 external/fieldtrip/private/select_point.m create mode 100644 external/fieldtrip/private/select_range.m create mode 100644 external/fieldtrip/private/topoplotCC.m create mode 100644 external/fieldtrip/private/trialfun_twoclass_classification.m create mode 100644 external/fieldtrip/private/uilayout.m create mode 100644 external/fileio/private/read_combined_ds.m create mode 100644 external/fileio/private/read_plexon_ddt.m create mode 100644 external/fileio/private/read_plexon_ds.m create mode 100644 external/fileio/private/read_plexon_plx.m create mode 100644 external/fileio/private/write_plexon_nex.m create mode 100644 external/forwinv/private/fixdipole.m create mode 100644 man/example_scripts/faces_eeg_montage.m delete mode 100644 man/multimodal/figures/eeg_check_datareg.jpg create mode 100644 man/multimodal/figures/eeg_coreg.png delete mode 100644 man/multimodal/figures/eeg_ecd.jpg create mode 100644 man/multimodal/figures/eeg_erp.png create mode 100644 man/multimodal/figures/eeg_forward.png create mode 100644 man/multimodal/figures/eeg_meshing.png create mode 100644 man/multimodal/figures/eeg_msp.png create mode 100644 man/multimodal/figures/eeg_recon.png create mode 100644 man/multimodal/figures/eeg_scalptime.png create mode 100644 man/multimodal/figures/eeg_scalptime_results.png create mode 100644 man/multimodal/figures/eeg_topo.png delete mode 100644 man/multimodal/figures/figure_32_1.jpg delete mode 100644 man/multimodal/figures/figure_32_10.jpg delete mode 100644 man/multimodal/figures/figure_32_11.jpg delete mode 100644 man/multimodal/figures/figure_32_12.jpg delete mode 100644 man/multimodal/figures/figure_32_13_L.jpg delete mode 100644 man/multimodal/figures/figure_32_13_R.jpg delete mode 100644 man/multimodal/figures/figure_32_14_L.jpg delete mode 100644 man/multimodal/figures/figure_32_14_R.jpg delete mode 100644 man/multimodal/figures/figure_32_15.jpg delete mode 100644 man/multimodal/figures/figure_32_16.jpg delete mode 100644 man/multimodal/figures/figure_32_17.jpg delete mode 100644 man/multimodal/figures/figure_32_18.jpg delete mode 100644 man/multimodal/figures/figure_32_19.jpg delete mode 100644 man/multimodal/figures/figure_32_2.jpg delete mode 100644 man/multimodal/figures/figure_32_20.jpg delete mode 100644 man/multimodal/figures/figure_32_21.jpg delete mode 100644 man/multimodal/figures/figure_32_22.jpg delete mode 100644 man/multimodal/figures/figure_32_3.jpg delete mode 100644 man/multimodal/figures/figure_32_4.jpg delete mode 100644 man/multimodal/figures/figure_32_5.jpg delete mode 100644 man/multimodal/figures/figure_32_6.jpg delete mode 100644 man/multimodal/figures/figure_32_7.jpg delete mode 100644 man/multimodal/figures/figure_32_8.jpg delete mode 100644 man/multimodal/figures/figure_32_9.jpg create mode 100644 man/multimodal/figures/fmri_faces_vs_scrambled.png delete mode 100644 man/multimodal/figures/fmri_spmf_001_10.jpg create mode 100644 man/multimodal/figures/meg_TF_results.png create mode 100644 man/multimodal/figures/meg_TFimage.png create mode 100644 man/multimodal/figures/meg_coreg.png delete mode 100644 man/multimodal/figures/meg_mesh.jpg delete mode 100644 man/multimodal/figures/meg_mesh_sens.jpg create mode 100644 man/multimodal/figures/meg_msp.png create mode 100644 man/multimodal/figures/meg_plv_faces.png create mode 100644 man/multimodal/figures/meg_plv_scrambled.png create mode 100644 man/multimodal/figures/meg_pow_faces.png create mode 100644 man/multimodal/figures/meg_pow_scrambled.png delete mode 100644 man/multimodal/figures/meg_recon_window.jpg create mode 100644 man/multimodal/figures/meg_scalp_erf.png delete mode 100644 man/multimodal/figures/meg_sol_lef.jpg delete mode 100644 man/multimodal/figures/meg_sol_rig.jpg delete mode 100644 man/multimodal/figures/meg_sol_ven.jpg create mode 100644 man/multimodal/figures/meg_topo180.png create mode 100644 man/multimodal/figures/paradigm.png delete mode 100644 man/multimodal/figures/unwarp.jpeg delete mode 100644 man/multimodal/figures/unwarp2.jpeg rename matlabbatch/@cfg_choice/{gencode.m => gencode_item.m} (81%) rename matlabbatch/@cfg_entry/{gencode.m => gencode_item.m} (71%) rename matlabbatch/@cfg_exbranch/{gencode.m => gencode_item.m} (79%) rename matlabbatch/@cfg_files/{gencode.m => gencode_item.m} (77%) create mode 100644 matlabbatch/@cfg_item/gencode_item.m rename matlabbatch/@cfg_menu/{gencode.m => gencode_item.m} (69%) rename matlabbatch/@cfg_repeat/{gencode.m => gencode_item.m} (83%) create mode 100644 matlabbatch/cfg_confgui/cfg_run_template.m create mode 100644 matlabbatch/examples/batch_example_add1_div.m create mode 100644 matlabbatch/examples/batch_example_add1_div_reuse_b.m create mode 100644 matlabbatch/examples/batch_example_add1_div_reuse_b_outname.m rename matlabbatch/examples/{cfg_mlbatch_appcfg.m => cfg_mlbatch_appcfg.m.example} (88%) create mode 100644 spm_BMS_gibbs.m create mode 100644 spm_ROI.m create mode 100644 spm_data_id.m create mode 100644 spm_dcm_bma.m create mode 100644 spm_eeg_artefact5.m create mode 100644 spm_eeg_artefact_flat.m create mode 100644 spm_eeg_artefact_jump.m create mode 100644 spm_eeg_artefact_peak2peak.m create mode 100644 spm_eeg_artefact_threshchan.m create mode 100644 spm_eeg_average5.m create mode 100644 spm_eeg_mask.m create mode 100644 spm_eeg_mask2channels.m create mode 100644 spm_eeg_remove_bad_trials.m delete mode 100644 spm_eeg_robust_average.m delete mode 100644 spm_eeg_robust_average_TF.m create mode 100644 spm_eeg_wrap_dipfit_vbecd.m create mode 100755 spm_gamrnd.mexa64 create mode 100755 spm_gamrnd.mexglx create mode 100755 spm_gamrnd.mexmaci create mode 100755 spm_gamrnd.mexmaci64 create mode 100644 spm_gamrnd.mexw32 create mode 100644 spm_gamrnd.mexw64 create mode 100644 spm_mesh_project.m create mode 100644 spm_multrnd.m create mode 100644 spm_mvb_p.m create mode 100644 spm_robust_average.m create mode 100644 spm_robust_glm.m create mode 100644 src/spm_gamrnd.c create mode 100644 toolbox/DEM/ADEM_mountaincar_loss_4.m create mode 100644 toolbox/DEM/ADEM_mountaincar_loss_5.m create mode 100644 toolbox/DEM/spm_SHC_fx.m create mode 100644 toolbox/DEM/spm_mc_fx_4.m create mode 100644 toolbox/DEM/spm_mc_fx_5.m create mode 100644 toolbox/DEM/spm_mc_fxa_4.m create mode 100644 toolbox/DEM/spm_mc_fxa_5.m delete mode 100644 toolbox/MEEGtools/spm_dcm_ind_save_images.m create mode 100644 toolbox/MEEGtools/spm_eeg_correct_sensor_data.m create mode 100644 toolbox/MEEGtools/spm_eeg_ft_beamformer_mult.m create mode 100644 toolbox/MEEGtools/spm_eeg_ft_multitaper_coherence.m create mode 100644 toolbox/MEEGtools/spm_eeg_ft_multitaper_tf.m create mode 100644 toolbox/MEEGtools/spm_eeg_reref_eeg.m diff --git a/@file_array/private/file2mat.mexa64 b/@file_array/private/file2mat.mexa64 index 829b08bd009da39b027a7681b761ac1e994d4306..e0f76658c7a7e87b895864d43b19ba06af2946ea 100644 GIT binary patch delta 3886 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 diff --git a/@file_array/private/file2mat.mexglx b/@file_array/private/file2mat.mexglx index ffb62374f2ff8c5d328f9255a4996dfffe0d3545..745b68660baaf9c0dccc97a116fa006c54497345 100644 GIT binary patch delta 7197 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 delta 5965 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 Q@Y~1cvd3!rm)vLnKPUXlnE(I) diff --git a/@file_array/private/file2mat.mexmaci b/@file_array/private/file2mat.mexmaci index bb3fc60b510928b5985e5db86df5d72a9e295bed..b932e4f334a808e12e28dd27a8bf1d24ab0e3e0c 100644 GIT binary patch literal 34360 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 EA39DFBLDyZ literal 30308 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 Nyfy9k1FZGR{{;m19bNzc diff --git a/@file_array/private/file2mat.mexmaci64 b/@file_array/private/file2mat.mexmaci64 index f6f2092d888875c946309d3b653334705c169eb8..d5a41f9db23b8d54e56afb6fe4ba26047766c8ca 100755 GIT binary patch delta 4050 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 diff --git a/@file_array/private/file2mat.mexw32 b/@file_array/private/file2mat.mexw32 index 67cb8e30d92bbc0406926809e8309eb8bab26dbd..1eb71ec9216aef2d33bc4b25fd14b7d3d294dd77 100755 GIT binary patch literal 50688 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

jnOnm13q@pr@=@ zG5@PB*KqfemDjAOt!4iT@%u});mY~p`L55K-`8-(=d)sSech7zcgph#<~qPwF`t`MORjC)as30iMl)E(S+|1ok$=UCK>eMwSK`hUu4#44>T9o^zjQ%et*g@2 zze-MV`BSd!m2ry8^_1(HWh*eh1#0WL#Nm$L4QkAoUmphCWx&6h*MVgVB6T)gl&Ryr zsuj!bn6hBO3eCeh`}0~}u0+BdGm^@sUP_s^Q?pMjkK_nN{h zH~4k#&yxDP?^qFbYOvP-{`)VbK(5Pm3jm&1bWu@p(Tt)W6zwj0rs%@r!s4mLRmJxd zKTy1;`0tBbAMVI?0g`J0mQC4rK~C3lS5I_}W8(z5HyHkZYG|1$nt<=-v0 zD%MpzIKi4QVN&HJ04;R6uEp2yi+YRhFNv32QTm0_ZDSrA6DYg6tflOSWzUuUsq8Xe zsjt@es_*>r73J&7JIk-AxV9o(@!N`%6<1EUW8ya^Zk~8-lB>w&nhiL4MdOMZioajn zRs4EM?&!~rt|*;Tx~%k{N`G1U=hBalnKLFl=AXt~F}8Z#_Hn-*H>~U{We=6@D*K#o zhVNeAobr|Bo6A>C*f^nQ!aq*hJL&i&Dw0)zxwrU_#knPQqaPgo_oH`=eq;2o(kDt! zj=5*-x5w@qTR!f#aSxBXplobeUD*!b%f1og=a;W8-&DT8;%G(AgyM-+6TdR?u}Qy~ zbd-Gsurhpki>4OcT=bdZV98S@Z%*!b9Aj-3cR+Qwa6R#p}% z`=PJfcidN0KD+$B@{Wp^D{?24O`JRNfr+t6-<#Aq>Agv=<(vauuFH#pMPDoWNzuWg z;l=-6{F{9 zHAVkew4>;iqKk_s7hhOXGW$7Qmrz7Js%f^>w zlz*oD=JHQYtem)VqHCkewHak|i$7OfUVK;arsAIB@g-j`Q6=9h`G=C9lysFmS@OG* zqa`OwGDd%4^rSK08MAlHfw6awYaG`)?nmPu9rufI&yI7I%`Lm7Y;D;O%6?t;`?7b- zKIxm}Yw$hbd&>8$Z^`%-<9|86uKdOF`ihkmV<%3YST`{|@u7(uAzhD7{LRFdCiYEy zYvRaBpPE!OY22jhN%JNxoU~+8Y|`IN`p%^9Px{5AeUqM@^gHr+tINgp>b#=nqKAq+ z#a9*2F21*TU-1*guNPkiJm*1*9xdHj`gG~ zP~2smz$B3IX87??A8e(KTcs3z3>LKD!@83M2@2SVt%5%*NR`Wv8eEjX0(al<+{s^I z_jz{nYR26HjbkcyH! zK$sc3{yv{0&B|(K>_rKjWzaMM4*qRq%*QX7D)@1!a7@l*upJmhe2l52xO7m-fL_MD zw>KS1tzf%9MV(;9n z^)FydQO#eeHVOJGNIzk-YYR+-&q#s#H66I0y2 z^EV5waigLd0Vwr7etT!j84+T1+}*q^Ia5})AOeF;5kzhGYL~9_A14=$`L}a%f9uE} zf7)i}ORc4*M2SCTZ3z7;o|Hf|_4L^r{0?R1=C0R>44JLN$p~wbk&heVS&Ml7HYI8u zUzR+6%#Yw$WMnwPJ;|lW$Y;q9@vTWI<*jFK8rlDtlJ1+Q(U1du^JrDrXIkIf)W@ty_dGZF}qXR1g>NBo3vJmbvhkGQXYKIaDxV#8) z#c5r)w=dHvvp;n$<<8V`sBjgw@)z6BLlmH~m8U+x`Bsb+{x2Kp#ztcQpN;ftN2mWE zHuCLfH*BPU9u53;GiD(1IS@6^@mKXN&lXQCpF1|+0oD`5DiN&4jeO16+iy9180@!* zT{Fn;9y^zhwa+xk4qj_7kZ*G!sp=u^gq^XLSg?ffxA{7Ie)4~UL)2FO2YY_aK~Sw| zh25?`WOQXANfsL#irTNu18VQ=uewwnsc<#TQ=;+)oO0)cTIH}>5ufOonoP>H{xtu- z;|}RJe7(b6`p^Bfk$SB*@{<#_k>$r`d%jiFE4AvE0rjNz{8$m1O^K$q6*8vn;%6O! z^mSGogMrFU0zr~pgF|gTuT7gE{TFXcbIXZXM{f3|iuKb7-@#uU#n8*yB}S+a0OD zE`Z(WJaeOQkYfJ2+U`gQcT4_okCl42(O%c}wY@YJslKXg!71BcmA>jjMKv~4@6D=K zV^4=aO-kri4~9=9bzM%V>TU{U`qdb84=CYSl0sr7T47SUt|y#JQtG?NN+4>P2;ZKg ze)X_ci|~}zn4%sF7DHeXLCL2kQEctviPh!j^M)zy2ebg`7z>CV5Q(~)B5*Pg>T;2? zyk?YzhLIN1;}*JxSG6093Pvp|8@cFHD3jZ@22_ymAW(a!7QQAmdEi+QHcax%{7<*0 zhfX?2#JoAaxD*hY7HA@`)@t=Y>zhb|{TDIM(a1W78ReQns>AvCKtv?>6k&C+Hiy93``M4kG zU_NXx;xvqG%Hw^vj(2wD4sStgim$c-dX7>ze!wTop3pDh5D8Hdx;;mg$hsoR$bTe@ zj0DsZ;>oFpik66V)IA?S))KR~OieK8&7f($dQ95@^fl^vd*?A6!b<%iZ5voVwMQuQ zQN*Ov8fzM-s7JJa0UpAWc^*~Qeg^^(s7G}9Vh*kl13LOss67A)v|c5x)dH_`tyB-` z@_s`vm_VQkp zWjo{n^*59dr9R+V=2v?V-=z!cAth=aA1L`Cpq@p-oR9}1LQR)T`19k7^EYLSP?U&e zgAX>F$iA8y2ClTe8C;>u9lU>h>Fl3CEr2J^Er}L&QLXC_;z9Zpo_%e*ZMQ=}kE9!^ z*5y@XHBM<|hE1!FFG)`?`YH<|HC4L@AYwTKpv$KW-bchUyk5xS7si)__CYYh?fujw z!ma0~ZjX?iLAT8~-r#5nj0WO)RYeAT>IO=bze{tz28b|l?bBs1Esm_402Y?rMuDZt zE()OXkHic~B_REw zP4}Y>v`(=%1n|8$qNoF!H;&so2O|5P=>Vk_ni;oFoM)SzF&LC5gMzyM%7jrtg~_Q1 z>QP`f29<*KLqWZsa6?cW<gHqqpPQfbC$0S_yHXoty1G?`Wq1(GZviX`|L|U#9T^(MTB?YsU@MS5O zu0-#Szwi>emGFrHxUijZ!&KFEMg7yNXSp>yR}PrKQ1`i(iu4@xN6aqmET55mul2Wx z&abwA!=K15$)lIGf?MQBwdaI_%|+Rr&)>_gDYV9y7~ej9`U4KXN^--zRz7Iam$Sge z&{{?(d?|}gctswS^tcJb1vLPB)qI?@ zIQMtsD6E4x{dJiW-ufYmP+kQrV#%-Ki=3-`7b_?a_VqD@TwU@;#BvG@Ppm&+e|bvt zbjF%;jO)-|4UMJCvu_=eJ_u=0Q!U?{&a?6|vgU!*<#!+#uj_#(KMs|tg1L_`$SW*p zhe($nCxwXRQl$U`0GaQtU6!R3QwW zI+swbexq7efWQmOwijmt(;9JjoSTI+`YUo0O+5zSi%eMnCCvvJ_Sw3UJ~g89D~854 z0BsUPy_P~~p&420x0S&p#Nq<2glAR&u%K;*+M# z@$i=X2Z~SPh1_~Hcx$D6dMZLq!TuJxoM#S0JA6fIvV^agf*zb^?{M>^rP5OV50hp{ zC49%EeAD?n{`RCFNl{+vT5kUskE1R>ByQW5gH!oSu6s>w<@{UMZJ|2YRiZ8NZ>ktR zUo9u04V%+R60y8Mk6HY?9psA;_FC3}nQUgUUdt+Acot|uv6B|~TuXr$#PMai{I9ru zM=a-|x0e*P6DYptOk3d(s58kNXR|q@z5gXrZSKcVoTa2{At>=51o$ju|l*p`t+t+N8!oNl4V? zM^gB?+zh_6C`tO5?nKZ~vut1Ci`9dd-IS7xm}`yK%|Y3tknoTg>@lwuyNyEa?R+`PSn4U7oxC zB5iV~{MPC*Jy|-zJinAVHsy`miYsOFhQo8iOYM5=I5lRui*ceBUH^d`fwtJW@L&*Thn#PfR=c!{raX zl}^da7gp+$gD;$3C@tfw#r%8BZvGDDK7M)nJV^ajBz+X~PX2V&hR_9c@Z#Bw5wxIg z^MMc53pmws?l{J_04Mk$MjP;BCmwev!W;O{Zqz=vuFoa!oP;#UaZ1dI8Z8IwY@3K-iD&dBtSEEE+iR>YVS zMI*T5Hf$3(!C5Fa15QOxFU8h?qtDqZ7|o;)co;=$1KtN{N8$DWrviE~cGj>E^8#6j zu^ocNfX`zL0N)9C1?Q(t!2;Ctj~H3NV}Qpo#sNP8IDjz&IP)-e4~7r;d_ay-2i#e~ z*bgy&3Y@CH8lwSt2VhSHp6qrIeITBi#@J@U0du~CJk{(fzw3Q^hPl;SEj90&<9#*Z FzX8}48Y%z) delta 5873 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 M((1hnYu<_be=3LwRsaA1 diff --git a/@file_array/private/mat2file.mexmaci b/@file_array/private/mat2file.mexmaci index 2afe70318ad0bd4ffae56d00d12404a58604a543..56a9a2f3f2dd1328171202d058c0e8762f77a6b1 100644 GIT binary patch delta 289 zcmeC_Vr=PR+`z%i$TFFeSz6UUY3d?1t6QGFO!lYy5|vb$7#J8NfH=c}fk6*Qe{f=8 z5ZUa>oNQMw%*epN2!tRYjl|YOVjCl|t&!NCNbC?Kb|w1_nJK{lSTW zL1wcjbFy8%3?l;rBM^ds3KH80iEV?#c0pnXA+ckT*hNU}CM0$j5_=Ma9R;>{J(9#R tB=&VA_CqB0TO{@mBsMG1qcG11Zf 1, warning('Only handle scalar objects yet.'); end @@ -20,7 +20,7 @@ case 'patch' if isfield(this,'vertices') - s.vertices = subsref(this, substruct('.', 'vertices')); + s.vertices = double(subsref(this, substruct('.', 'vertices'))); end if isfield(this,'faces') s.faces = subsref(this, substruct('.', 'faces')); diff --git a/@gifti/save.m b/@gifti/save.m index 93a4192..73a8981 100644 --- a/@gifti/save.m +++ b/@gifti/save.m @@ -4,32 +4,60 @@ function save(this,filename,encoding) % this - GIfTI object % filename - name of GIfTI file that will be created % encoding - optional argument to specify encoding format, among -% ASCII, Base64Binary, GZipBase64Binary, ExternalFileBinary +% ASCII, Base64Binary, GZipBase64Binary, ExternalFileBinary, +% Collada (.dae) %__________________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Guillaume Flandin -% $Id: save.m 2076 2008-09-10 12:34:08Z guillaume $ +% $Id: save.m 3290 2009-07-27 18:11:52Z guillaume $ error(nargchk(1,3,nargin)); -% Open file for writing +% Check filename and file format %-------------------------------------------------------------------------- +ext = '.gii'; if nargin == 1 filename = 'untitled.gii'; else + if nargin == 3 && strcmpi(encoding,'collada') + ext = '.dae'; + end [p,f,e] = fileparts(filename); - if ~ismember(lower(e),{'.gii'}) - e = '.gii'; + if ~ismember(lower(e),{ext}) + e = ext; end filename = fullfile(p,[f e]); end +% Open file for writing +%-------------------------------------------------------------------------- fid = fopen(filename,'wt'); if fid == -1 error('Unable to write file %s: permission denied.',filename); end +% Write file +%-------------------------------------------------------------------------- +switch ext + case '.gii' + if nargin < 3, encoding = 'GZipBase64Binary'; end + fid = save_gii(fid,this,encoding); + case '.dae' + fid = save_dae(fid,this); + otherwise + error('Unknown file format.'); +end + +% Close file +%-------------------------------------------------------------------------- +fclose(fid); + +%========================================================================== +% function fid = save_gii(fid,this,encoding) +%========================================================================== +function fid = save_gii(fid,this,encoding) + % Defaults for DataArray's attributes %-------------------------------------------------------------------------- [unused,unused,mach] = fopen(fid); @@ -40,11 +68,7 @@ function save(this,filename,encoding) else error('[GIFTI] Unknown byte order "%s".',mach); end -if nargin > 2 - def.Encoding = encoding; -else - def.Encoding = 'GZipBase64Binary'; -end +def.Encoding = encoding; def.Intent = 'NIFTI_INTENT_NONE'; def.DataType = 'NIFTI_TYPE_FLOAT32'; def.ExternalFileName = ''; @@ -214,4 +238,144 @@ function save(this,filename,encoding) end fprintf(fid,'\n'); -fclose(fid); \ No newline at end of file + +%========================================================================== +% function fid = save_dae(fid,this) +%========================================================================== +function fid = save_dae(fid,this) + +o = inline('blanks(x*3)'); + +% Split the mesh into connected components +%-------------------------------------------------------------------------- +s = struct(this); +try + C = spm_mesh_label(s.faces); + d = []; + for i=1:numel(unique(C)) + d(i).faces = s.faces(C==i,:); + u = unique(d(i).faces); + d(i).vertices = s.vertices(u,:); + a = 1:max(d(i).faces(:)); + a(u) = 1:size(d(i).vertices,1); + %a = sparse(1,double(u),1:1:size(d(i).vertices,1)); + d(i).faces = a(d(i).faces); + end + s = d; +end + +% Prolog & root of the Collada XML file +%-------------------------------------------------------------------------- +fprintf(fid,'\n'); +fprintf(fid,'\n'); + +% Assets +%-------------------------------------------------------------------------- +fprintf(fid,'%s\n',o(1)); +fprintf(fid,'%s\n',o(2)); +fprintf(fid,'%s%s\n',o(3),... + 'http://www.fil.ion.ucl.ac.uk/spm/'); +fprintf(fid,'%s%s\n',o(3),spm('Ver')); +fprintf(fid,'%s\n',o(2)); +fprintf(fid,'%s%s\n',o(2),datestr(now,'yyyy-mm-ddTHH:MM:SSZ')); +fprintf(fid,'%s%s\n',o(2),datestr(now,'yyyy-mm-ddTHH:MM:SSZ')); +fprintf(fid,'%s\n',o(2)); +fprintf(fid,'%sZ_UP\n',o(2)); +fprintf(fid,'%s\n',o(1)); + +% Image, Materials, Effects +%-------------------------------------------------------------------------- +%fprintf(fid,'%s\n',o(1)); + +fprintf(fid,'%s\n',o(1)); +for i=1:numel(s) + fprintf(fid,'%s\n',o(2),i,i); + fprintf(fid,'%s\n',o(3),i); + fprintf(fid,'%s\n',o(2)); +end +fprintf(fid,'%s\n',o(1)); + +fprintf(fid,'%s\n',o(1)); +for i=1:numel(s) + fprintf(fid,'%s\n',o(2),i,i); + fprintf(fid,'%s\n',o(3)); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s%f %f %f %d\n',o(7),[0 0 0 1]); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s%f %f %f %d\n',o(7),[0 0 0 1]); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s%f %f %f %d\n',o(7),[0.5 0.5 0.5 1]); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s%d %d %d %d\n',o(7),[1 1 1 1]); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s%f\n',o(7),0); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(3)); + fprintf(fid,'%s\n',o(2)); +end +fprintf(fid,'%s\n',o(1)); + +% Geometry +%-------------------------------------------------------------------------- +fprintf(fid,'%s\n',o(1)); +for i=1:numel(s) + fprintf(fid,'%s\n',o(2),i,i); + fprintf(fid,'%s\n',o(3)); + fprintf(fid,'%s\n',o(4),i); + fprintf(fid,'%s',o(5),i,numel(s(i).vertices)); + fprintf(fid,'%f ',repmat(s(i).vertices',1,[])); + fprintf(fid,'\n'); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(6),size(s(i).vertices,1),i); + fprintf(fid,'%s\n',o(7)); + fprintf(fid,'%s\n',o(7)); + fprintf(fid,'%s\n',o(7)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(4),i); + fprintf(fid,'%s\n',o(5),i); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(4),i,size(s(i).faces,1)); + fprintf(fid,'%s\n',o(5),i); + fprintf(fid,'%s

',o(5)); + fprintf(fid,'%d ',repmat(s(i).faces',1,[])-1); + fprintf(fid,'

\n'); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(3)); + fprintf(fid,'%s\n',o(2)); +end +fprintf(fid,'%s\n',o(1)); + +% Scene +%-------------------------------------------------------------------------- +fprintf(fid,'%s\n',o(1)); +fprintf(fid,'%s\n',o(2)); +for i=1:numel(s) + fprintf(fid,'%s\n',o(3),i); + fprintf(fid,'%s\n',o(4),i); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(7),i,i); + fprintf(fid,'%s\n',o(6)); + fprintf(fid,'%s\n',o(5)); + fprintf(fid,'%s\n',o(4)); + fprintf(fid,'%s\n',o(3)); +end +fprintf(fid,'%s\n',o(2)); +fprintf(fid,'%s\n',o(1)); +fprintf(fid,'%s\n',o(1)); +fprintf(fid,'%s\n',o(2)); +fprintf(fid,'%s\n',o(1)); + +% End of XML +%-------------------------------------------------------------------------- +fprintf(fid,'\n'); diff --git a/@meeg/check.m b/@meeg/check.m index 6517b7d..9ac2063 100644 --- a/@meeg/check.m +++ b/@meeg/check.m @@ -11,7 +11,11 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: check.m 2720 2009-02-09 19:50:46Z vladimir $ +% $Id: check.m 3196 2009-06-11 12:54:47Z vladimir $ + +if nargin == 1 + option = 'basic'; +end [ok, this] = checkmeeg(struct(this), option); diff --git a/@meeg/clone.m b/@meeg/clone.m index 9e4936a..94b4a7f 100644 --- a/@meeg/clone.m +++ b/@meeg/clone.m @@ -1,7 +1,9 @@ -function new = clone(this, fnamedat, dim) +function new = clone(this, fnamedat, dim, reset) % Creates a copy of the object with a new, empty data file, % possibly changing dimensions -% FORMAT new = clone(this, fnamedat, dim) +% FORMAT new = clone(this, fnamedat, dim, reset) +% reset - 0 (default) do not reset channel or trial info unless dimensions +% change, 1 - reset channels only, 2 - trials only, 3 both % Note that when fnamedat comes with a path, the cloned meeg object uses % it. Otherwise, its path is by definition that of the meeg object to be % cloned. @@ -9,7 +11,11 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel, Vladimir Litvak -% $Id: clone.m 2476 2008-11-18 12:58:57Z christophe $ +% $Id: clone.m 3350 2009-09-03 13:19:20Z vladimir $ + +if nargin < 4 + reset = 0; +end if nargin < 3 if ~strcmp(transformtype(this), 'TF') @@ -39,6 +45,10 @@ d(end, end, end, end) = 0; nsampl = dim(3); ntrial = dim(4); + + if ~strncmpi(transformtype(new), 'TF',2) + new = transformtype(new, 'TF'); + end else error('Dimensions different from 3 or 4 are not supported.'); end @@ -52,14 +62,14 @@ new.path = pth; % ensure consistency -if dim(1) ~= nchannels(this) +if (dim(1) ~= nchannels(this)) || ismember(reset, [1 3]) new.channels = []; for i = 1:dim(1) new.channels(i).label = ['Ch' num2str(i)]; end end -if ntrial ~= ntrials(this) +if ntrial ~= ntrials(this) || ismember(reset, [2 3]) new.trials = repmat(struct('label', 'Undefined'), 1, ntrial); end diff --git a/@meeg/condlist.m b/@meeg/condlist.m index 09d87d0..bdbddab 100644 --- a/@meeg/condlist.m +++ b/@meeg/condlist.m @@ -6,7 +6,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: condlist.m 3046 2009-04-02 14:28:31Z vladimir $ +% $Id: condlist.m 3254 2009-07-07 15:18:54Z vladimir $ res = getset(this, 'trials', 'label'); if ~iscell(res) @@ -23,7 +23,7 @@ if numel(res)>1 && isfield(this.other, 'condlist') &&... iscell(this.other.condlist) && ~isempty(this.other.condlist) - [sel1, sel2] = spm_match_str(this.other.condlist, res); + [sel1, sel2] = match_str(this.other.condlist, res); res = res([sel2(:)' setdiff(1:numel(res), sel2)]); end else diff --git a/@meeg/coor2D.m b/@meeg/coor2D.m index bafa148..8b9ae99 100644 --- a/@meeg/coor2D.m +++ b/@meeg/coor2D.m @@ -1,11 +1,11 @@ -function [res, plotind] = coor2D(this, ind, val) +function [res, plotind] = coor2D(this, ind, val, mindist) % returns x and y coordinates of channels in 2D plane % FORMAT coor2D(this) % _______________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging -% Vladimir Litvak -% $Id: coor2D.m 2720 2009-02-09 19:50:46Z vladimir $ +% Vladimir Litvak, Laurence Hunt +% $Id: coor2D.m 3335 2009-08-25 16:37:02Z vladimir $ megind = strmatch('MEG', chantype(this)); @@ -31,7 +31,7 @@ end end -if nargin < 3 +if nargin < 3 || isempty(val) if ~isempty(intersect(ind, megind)) if ~any(cellfun('isempty', {this.channels(megind).X_plot2D})) meg_xy = [this.channels(megind).X_plot2D; this.channels(megind).Y_plot2D]; @@ -77,7 +77,11 @@ end end end - + + if nargin > 3 && ~isempty(mindist) + xy = shiftxy(xy,mindist); + end + res = xy; else this = getset(this, 'channels', 'X_plot2D', ind, val(1, :)); @@ -86,6 +90,7 @@ res = this; end + function xy = grid(n) ncol = ceil(sqrt(n)); @@ -95,3 +100,37 @@ y = fliplr(x); [X, Y] = meshgrid(x, y); xy = [X(1:n); Y(1:n)]; + + +function xy = shiftxy(xy,mindist) + +x = xy(1,:); +y = xy(2,:); + +l=1; +i=1; %filler +mindist = mindist/0.999; % limits the number of loops +while (~isempty(i) && l<50) + xdiff = repmat(x,length(x),1) - repmat(x',1,length(x)); + ydiff = repmat(y,length(y),1) - repmat(y',1,length(y)); + xydist= sqrt(xdiff.^2 + ydiff.^2); %euclidean distance between all sensor pairs + + [i,j] = find(xydistj + + for m = 1:length(i); + if (xydist(i(m),j(m)) == 0) + diffvec = [mindist./sqrt(2) mindist./sqrt(2)]; + else + xydiff = [xdiff(i(m),j(m)) ydiff(i(m),j(m))]; + diffvec = xydiff.*mindist./xydist(i(m),j(m)) - xydiff; + end + x(i(m)) = x(i(m)) - diffvec(1)/2; + y(i(m)) = y(i(m)) - diffvec(2)/2; + x(j(m)) = x(j(m)) + diffvec(1)/2; + y(j(m)) = y(j(m)) + diffvec(2)/2; + end + l = l+1; +end + +xy = [x; y]; diff --git a/@meeg/delete.m b/@meeg/delete.m new file mode 100644 index 0000000..a1d15d4 --- /dev/null +++ b/@meeg/delete.m @@ -0,0 +1,17 @@ +function res = delete(this) +% Delete the files of M/EEG dataset from the disk +% FORMAT res = delete(this) +%_______________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: delete.m 3378 2009-09-09 16:47:16Z guillaume $ + +res = 1; + +try + delete(fullfile(path(this), fnamedat(this))); + delete(fullfile(path(this), fname(this))); +catch + res = 0; +end diff --git a/@meeg/display.m b/@meeg/display.m index 33764cb..929168d 100644 --- a/@meeg/display.m +++ b/@meeg/display.m @@ -5,20 +5,35 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: display.m 2113 2008-09-18 11:14:46Z vladimir $ +% $Id: display.m 3219 2009-06-25 10:15:36Z vladimir $ str = ['SPM M/EEG data object\n'... 'Type: ' type(this) '\n'... + 'Transform: ' transformtype(this) '\n'... num2str(nconditions(this)), ' conditions\n'... - num2str(nchannels(this)), ' channels\n'... + num2str(nchannels(this)), ' channels\n' + ]; + +if strncmpi(transformtype(this),'TF',2) + str = [str num2str(nfrequencies(this)), ' frequencies\n']; +end + +str = [str ... num2str(nsamples(this)), ' samples/trial\n'... num2str(ntrials(this)), ' trials\n'... 'Sampling frequency: ' num2str(fsample(this)) ' Hz\n'... - 'Loaded from file %s\n\n'... - 'Use the syntax D(channels, samples, trials) to access the data\n'... - 'Type "methods(''meeg'')" for the list of methods performing other operations with the object\n'... + 'Loaded from file %s\n\n' ]; +if strncmpi(transformtype(this),'TF',2) + str = [str 'Use the syntax D(channels, frequencies, samples, trials) to access the data\n']; +else + str = [str 'Use the syntax D(channels, samples, trials) to access the data\n']; +end + +str = [str 'Type "methods(''meeg'')" for the list of methods performing other operations with the object\n'... + 'Type "help meeg/method_name" to get help about methods\n']; + str = sprintf(str, fullfile(this.path, this.fname)); disp(str); \ No newline at end of file diff --git a/@meeg/frequencies.m b/@meeg/frequencies.m index 2be6398..fc360ca 100644 --- a/@meeg/frequencies.m +++ b/@meeg/frequencies.m @@ -1,31 +1,40 @@ -function res = frequencies(this, varargin) +function res = frequencies(this, ind, f) % Method for getting/setting frequencies of TF data -% FORMAT res = frequencies(this, varargin) +% FORMAT res = frequencies(this, ind, values) % _________________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: frequencies.m 2857 2009-03-11 13:21:04Z guillaume $ +% $Id: frequencies.m 3350 2009-09-03 13:19:20Z vladimir $ -if isempty(varargin) +if nargin < 3 if strncmpi(transformtype(this), 'TF',2) - res = getset(this, 'transform', 'frequencies'); + res = this.transform.frequencies; else res = []; + return end -else - f = varargin{1}; - + if exist('ind', 'var') == 1 && ~isempty(ind) + res = res(ind); + end +else + if ~strncmpi(transformtype(this), 'TF',2) + error('Frequencies can only be assigned to a TF dataset'); + end + if any(f) <= 0 || any(~isnumeric(f)) - error('Frequencies must be positive numbers'); res = []; return + error('Frequencies must be positive numbers'); + end + + if isempty(ind) || isequal(ind, ':') + ind = 1:size(this, 2); end - - % can't use getset because both information must be set at the same - % time - sD = struct(this); - sD.transform.ID = 'TF'; % could it be TFphase? - sD.transform.frequencies = f; - res = meeg(sD); + if length(ind)~=length(f) || max(ind)>size(this, 2) + error('Wrong frequency axis or indices'); + end + + this.transform.frequencies(ind) = f; + res = this; end diff --git a/@meeg/fsample.m b/@meeg/fsample.m index 1d6d92e..3635a22 100644 --- a/@meeg/fsample.m +++ b/@meeg/fsample.m @@ -1,10 +1,15 @@ -function res = fsample(this) -% Method for getting the sampling rate +function res = fsample(this, value) +% Method for getting and setting the sampling rate % FORMAT res = fsample(this) % _______________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: fsample.m 1373 2008-04-11 14:24:03Z spm $ +% $Id: fsample.m 3200 2009-06-12 17:29:40Z vladimir $ -res = this.Fsample; \ No newline at end of file +if nargin == 1 + res = this.Fsample; +else + this.Fsample = value; + res = this; +end \ No newline at end of file diff --git a/@meeg/fttimelock.m b/@meeg/fttimelock.m new file mode 100644 index 0000000..dbb3704 --- /dev/null +++ b/@meeg/fttimelock.m @@ -0,0 +1,26 @@ +function timelock = fttimelock(this) +% Method for converting meeg object to Fieldtrip timelock/freq struct +% FORMAT timelock = fttimelock(this) +% _______________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: fttimelock.m 3210 2009-06-17 13:46:25Z vladimir $ + +timelock = []; +timelock.label = chanlabels(this); +timelock.label = timelock.label(:); +if isequal(transformtype(this), 'time') + timelock.dimord = 'rpt_chan_time'; + timelock.fsample = fsample(this); + timelock.trial = permute(this.data.y(:, :, :), [3 1 2]); + timelock.dimord = 'rpt_chan_time'; +elseif strncmpi(transformtype(this),'TF',2) + timelock.dimord = 'rpt_chan_freq_time'; + timelock.powspctrm = permute(this.data.y(:, :, :, :), [4 1 2 3]); + timelock.freq = frequencies(this); +else + error('Unknown transform type.'); +end + +timelock.time = time(this); \ No newline at end of file diff --git a/@meeg/getfield.m b/@meeg/getfield.m new file mode 100644 index 0000000..06b3477 --- /dev/null +++ b/@meeg/getfield.m @@ -0,0 +1,12 @@ +function res = getfield(this, varargin) +% Returns fields in .other +% FORMAT res = getfield(this, varargin) +% +% An overloaded function... +% _______________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: getfield.m 3228 2009-06-26 17:43:19Z vladimir $ + +res = getfield(this.other, varargin{:}); \ No newline at end of file diff --git a/@meeg/history.m b/@meeg/history.m index af78657..d6e2989 100644 --- a/@meeg/history.m +++ b/@meeg/history.m @@ -6,7 +6,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: history.m 2348 2008-10-16 16:51:25Z vladimir $ +% $Id: history.m 3196 2009-06-11 12:54:47Z vladimir $ if isempty(varargin) @@ -19,13 +19,20 @@ else nh = length(this.history); end - this.history(nh+1).fun = varargin{1}; - - if isstruct(varargin{2}) && isfield(varargin{2}, 'D') && ... - isa(varargin{2}.D, 'meeg') - varargin{2}.D = fullfile(varargin{2}.D.path, varargin{2}.D.fname); + + if ischar(varargin{1}) + this.history(nh+1).fun = varargin{1}; + + if isstruct(varargin{2}) && isfield(varargin{2}, 'D') && ... + isa(varargin{2}.D, 'meeg') + varargin{2}.D = fullfile(varargin{2}.D.path, varargin{2}.D.fname); + end + + this.history(nh+1).args = varargin{2}; + + elseif isstruct(varargin{1}) + this.history = varargin{1}; end - - this.history(nh+1).args = varargin{2}; + res = this; end \ No newline at end of file diff --git a/@meeg/indchannel.m b/@meeg/indchannel.m new file mode 100644 index 0000000..172c1b2 --- /dev/null +++ b/@meeg/indchannel.m @@ -0,0 +1,18 @@ +function res = indchannel(this, label) +% Method for getting channel indices based on channel labels +% FORMAT res = indchannel(this, label) +% this - MEEG object +% label - string or cell array of labels +% +% res - vector of channel indices matching labels +%__________________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: indchannel.m 3254 2009-07-07 15:18:54Z vladimir $ + +if ischar(label) + label = {label}; +end + +[junk, res] = match_str(label, chanlabels(this)); \ No newline at end of file diff --git a/@meeg/indfrequency.m b/@meeg/indfrequency.m new file mode 100644 index 0000000..67b5c4c --- /dev/null +++ b/@meeg/indfrequency.m @@ -0,0 +1,29 @@ +function res = indfrequency(this, f) +% Method for getting the index closest to given frequency +% FORMAT res = indfrequency(this, f) +% this - MEEG object +% f - vector of frequencies (in Hz) +% +% res - vector of sample indices matching indices +%__________________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Stefan Kiebel +% $Id: indfrequency.m 3254 2009-07-07 15:18:54Z vladimir $ + +if ~strncmpi(transformtype(this),'TF',2) + error('Only TF datasets are supported'); +end + +res = NaN(1,length(f)); +fdiff = mean(diff(frequencies(this))); +if nsamples(this) > 0 + F = frequencies(this); + for i = 1:length(f) + [m, res(i)] = min(abs(F-f(i))); + if m > fdiff + warning('Could not find an index matching the requested frequency %d Hz', f(i)); + res(i) = NaN; + end + end +end diff --git a/@meeg/indtrial.m b/@meeg/indtrial.m new file mode 100644 index 0000000..6169b97 --- /dev/null +++ b/@meeg/indtrial.m @@ -0,0 +1,18 @@ +function res = indtrial(this, label) +% Method for getting channel indices based on channel labels +% FORMAT res = indtrial(this, label) +% this - MEEG object +% label - string or cell array of labels +% +% res - vector of trial indices matching condition labels +%__________________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: indtrial.m 3254 2009-07-07 15:18:54Z vladimir $ + +if ischar(label) + label = {label}; +end + +[junk, res] = match_str(label, conditions(this)); \ No newline at end of file diff --git a/@meeg/meegchannels.m b/@meeg/meegchannels.m index a2a90d2..f3ba4b7 100644 --- a/@meeg/meegchannels.m +++ b/@meeg/meegchannels.m @@ -12,7 +12,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: meegchannels.m 2886 2009-03-16 20:54:17Z guillaume $ +% $Id: meegchannels.m 3228 2009-06-26 17:43:19Z vladimir $ type = chantype(this); @@ -29,6 +29,8 @@ ind = find(ismember(upper(type), {'MEG', 'MEGMAG', 'MEGGRAD'})); case 'MEGPLANAR' ind = find(ismember(upper(type), {'MEGPLANAR'})); + case 'MEEG' + ind = find(ismember(upper(type), {'EEG', 'MEG', 'MEGMAG', 'MEGGRAD'})); otherwise error('Unsupported modality.'); end diff --git a/@meeg/private/checkmeeg.m b/@meeg/private/checkmeeg.m index 03d524c..73c1c26 100644 --- a/@meeg/private/checkmeeg.m +++ b/@meeg/private/checkmeeg.m @@ -9,7 +9,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: checkmeeg.m 3068 2009-04-20 17:21:57Z vladimir $ +% $Id: checkmeeg.m 3394 2009-09-11 16:04:10Z vladimir $ if nargin==1 option = 'basic'; @@ -55,6 +55,45 @@ if ~isfield(meegstruct.trials, 'events') [meegstruct.trials.events] = deal([]); end + + for k = 1:Ntrials + if length(meegstruct.trials(k).bad)>1 || ~ismember(meegstruct.trials(k).bad, [0, 1]) + disp(['checkmeeg: illegal value for bad flag in trial ' num2str(k) ', setting to zero.']); + meegstruct.trials(k).bad = 0; + end + + event = meegstruct.trials(k).events; + + if ~isempty(event) + % make sure that all required elements are present + if ~isfield(event, 'type'), error('type field not defined for each event'); end + if ~isfield(event, 'time'), error('time field not defined for each event'); end + if ~isfield(event, 'value'), [event.value] = deal([]); end + if ~isfield(event, 'offset'), [event.offset] = deal(0); end + if ~isfield(event, 'duration'), [event.duration] = deal([]); end + + + % make sure that all numeric values are double + for i=1:length(event) + if isnumeric(event(i).value) + event(i).value = double(event(i).value); + end + event(i).time = double(event(i).time); + event(i).offset = double(event(i).offset); + event(i).duration = double(event(i).duration); + end + + if ~isempty(event) + % sort the events on the sample on which they occur + % this has the side effect that events without time are discarded + [dum, indx] = sort([event.time]); + event = event(indx); + end + + meegstruct.trials(k).events = event; + end + end + if ~isfield(meegstruct.trials, 'onset') [meegstruct.trials.onset] = deal([]); end @@ -83,12 +122,12 @@ disp('checkmeeg: no channel type, assigning default'); [meegstruct.channels.type] = deal('Other'); end - + % This is for backward compatibility with early SPM8b. Can be removed % after a while. ind = strmatch('MEGREF', {meegstruct.channels.type}, 'exact'); [meegstruct.channels(ind).type] = deal('REF'); - + if ~isfield(meegstruct.channels, 'X_plot2D') [meegstruct.channels.X_plot2D] = deal([]); [meegstruct.channels.Y_plot2D] = deal([]); @@ -125,8 +164,9 @@ if ~isfield(meegstruct.data, 'fnamedat') disp('checkmeeg: data file name missing'); return; - else - meegstruct.data.fnamedat = spm_str_manip(meegstruct.data.fnamedat, 't'); + else + [junk, fnamedat] = fileparts(meegstruct.data.fnamedat); + meegstruct.data.fnamedat = [fnamedat '.dat']; end if ~isfield(meegstruct.data, 'datatype') disp('checkmeeg: data type missing, assigning default'); @@ -174,7 +214,7 @@ % the use of copied (raw) integer data files case 'time' meegstruct.data.y = file_array(fullfile(filepath, meegstruct.data.fnamedat), ... - [Nchannels Nsamples Ntrials], meegstruct.data.datatype); + [Nchannels Nsamples Ntrials], meegstruct.data.datatype); case {'TF', 'TFphase'} meegstruct.data.y = file_array(fullfile(filepath, meegstruct.data.fnamedat), ... @@ -193,8 +233,8 @@ meegstruct.data.y.scl_slope = sav_sc; end - end - + end + switch(meegstruct.transform.ID) case 'time' if Ntrials>1 @@ -209,7 +249,7 @@ expected_size = [Nchannels Nfrequencies Nsamples]; end - + otherwise error('Unknown transform type'); end @@ -222,12 +262,14 @@ if ~isfield(meegstruct, 'type') ||... (strcmp(meegstruct.type, 'continuous') && Ntrials>1) ||... - strcmp(meegstruct.type, 'evoked') && (numel(unique({meegstruct.trials.label})) ~= Ntrials) + strcmp(meegstruct.type, 'evoked') && (numel(unique({meegstruct.trials.label})) ~= Ntrials) ||... + (strcmp(meegstruct.type, 'continuous') && strncmp(meegstruct.transform.ID, 'TF', 2)) disp('checkmeeg: data type is missing or incorrect, assigning default'); % rule of thumb - 10 sec if Nsamples == 0 meegstruct.type = 'continuous'; - elseif Ntrials==1 && (Nsamples/meegstruct.Fsample) > 10 + elseif Ntrials==1 && (Nsamples/meegstruct.Fsample) > 10 &&... + ~strncmp(meegstruct.transform.ID, 'TF', 2) meegstruct.type = 'continuous'; elseif numel(unique({meegstruct.trials.label})) == Ntrials meegstruct.type = 'evoked'; @@ -336,7 +378,7 @@ 'history' 'cache'}; -[sel1, sel2] = spm_match_str(fieldnames_order, fieldnames(meegstruct)); +[sel1, sel2] = match_str(fieldnames_order, fieldnames(meegstruct)); tempcell = struct2cell(meegstruct); meegstruct = cell2struct(tempcell(sel2), fieldnames_order, 1); @@ -348,7 +390,7 @@ chantypes = getset(meegstruct, 'channels', 'type'); eegind = strmatch('EEG', chantypes, 'exact'); megind = strmatch('MEG', chantypes); -lfpind = strmatch('LFP', chantypes, 'exact'); +lfpind = strmatch('LFP', chantypes, 'exact'); % Allow DCM on a pure LFP dataset if strcmp(option, 'dcm') && isempty([eegind megind]) && ~isempty(lfpind) @@ -357,11 +399,11 @@ end if strcmp(option, 'sensfid') || strcmp(option, '3d') ||... - (strcmp(option, 'dcm') && ~isempty([eegind megind])) + (strcmp(option, 'dcm') && ~isempty([eegind megind])) if isempty(meegstruct.sensors) disp('checkmeeg: no sensor positions are defined'); return; - end + end if ~isempty(eegind) if ~isfield(meegstruct.sensors, 'eeg') || isempty(meegstruct.sensors.eeg) @@ -413,31 +455,31 @@ lelbl = {'fidle', 'fidt9', 'lpa', 'lear', 'earl' 'le', 't9', 'spmlpa'}; relbl = {'fidre', 'fidt10', 'rpa', 'rear', 'earr', 're', 't10', 'spmrpa'}; - [sel1, nzind] = spm_match_str(nzlbl, lower(meegstruct.fiducials.fid.label)); + [sel1, nzind] = match_str(nzlbl, lower(meegstruct.fiducials.fid.label)); if isempty(nzind) disp('checkmeeg: could not find the nasion fiducial'); else nzind = nzind(1); end - - [sel1, leind] = spm_match_str(lelbl, lower(meegstruct.fiducials.fid.label)); + + [sel1, leind] = match_str(lelbl, lower(meegstruct.fiducials.fid.label)); if isempty(leind) disp('checkmeeg: could not find the left fiducial'); else leind = leind(1); end - [sel1, reind] = spm_match_str(relbl, lower(meegstruct.fiducials.fid.label)); + [sel1, reind] = match_str(relbl, lower(meegstruct.fiducials.fid.label)); if isempty(reind) disp('checkmeeg: could not find the right fiducial'); else reind = reind(1); end - - restind = setdiff(1:length(meegstruct.fiducials.fid.label), [nzind, leind, reind]); - meegstruct.fiducials.fid.label = meegstruct.fiducials.fid.label([nzind, leind, reind, restind]); - meegstruct.fiducials.fid.pnt = meegstruct.fiducials.fid.pnt([nzind, leind, reind, restind], :); + restind = setdiff(1:length(meegstruct.fiducials.fid.label), [nzind(:)', leind(:)', reind(:)']); + + meegstruct.fiducials.fid.label = meegstruct.fiducials.fid.label([nzind(:)', leind(:)', reind(:)', restind(:)']); + meegstruct.fiducials.fid.pnt = meegstruct.fiducials.fid.pnt([nzind(:)', leind(:)', reind(:)', restind(:)'], :); result = 1; end diff --git a/@meeg/private/getset.m b/@meeg/private/getset.m index b38a5d1..1c58f23 100644 --- a/@meeg/private/getset.m +++ b/@meeg/private/getset.m @@ -5,11 +5,11 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: getset.m 2105 2008-09-17 15:34:09Z vladimir $ +% $Id: getset.m 3368 2009-09-07 22:50:35Z vladimir $ this = struct(this); -if nargin == 3 || isempty(ind) +if nargin == 3 || isempty(ind) || (ischar(ind) && isequal(ind, ':')) try ind = 1:numel(getfield(this, parent)); catch diff --git a/@meeg/private/match_str.m b/@meeg/private/match_str.m new file mode 100644 index 0000000..d32ac7a --- /dev/null +++ b/@meeg/private/match_str.m @@ -0,0 +1,76 @@ +function [sel1, sel2] = match_str(a, b) + +% MATCH_STR looks for matching labels in two listst of strings +% and returns the indices into both the 1st and 2nd list of the matches. +% They will be ordered according to the first input argument. +% +% [sel1, sel2] = match_str(strlist1, strlist2) +% +% The strings can be stored as a char matrix or as an vertical array of +% cells, the matching is done for each row. + +% Copyright (C) 2000, Robert Oostenveld +% +% $Log: match_str.m,v $ +% Revision 1.6 2006/11/06 21:11:45 roboos +% also deal with empty [] input +% +% Revision 1.5 2004/11/10 17:11:40 roboos +% reverted to original implementation and reimplemented the speed up +% from scratch. The previous two revisions both were incompatible +% with the original implementation. +% +% Revision 1.4 2004/11/09 15:28:57 roboos +% fixed incompatibility that was introduced by previous speed increase: +% the original version gave back double occurences, and other fieldtrip +% functions (sourceanalysis) rely on this. The previously commited +% version only gave back one occurence of each hit, this is fixed by jansch +% in this version +% +% Revision 1.3 2004/10/22 15:59:41 roboos +% large speed increase by replacing 2 nested for loops by a standard matlab function (intersect) +% +% Revision 1.2 2003/03/17 10:37:28 roberto +% improved general help comments and added copyrights + +% ensure that both are cell-arrays +if isempty(a) + a = {}; +elseif ~iscell(a) + a = cellstr(a); +end +if isempty(b) + b = {}; +elseif ~iscell(b) + b = cellstr(b); +end + +% ensure that both are column vectors +a = a(:); +b = b(:); + +% regardless of what optimizations are implemented, the code should remain +% functionally compatible to the original, which is +% for i=1:length(a) +% for j=1:length(b) +% if strcmp(a(i),b(j)) +% sel1 = [sel1; i]; +% sel2 = [sel2; j]; +% end +% end +% end + +% replace all unique strings by a unique number and use the fact that +% numeric comparisons are much faster than string comparisons +[dum1, dum2, c] = unique([a; b]); +a = c(1:length(a)); +b = c((length(a)+1):end); + +sel1 = []; +sel2 = []; +for i=1:length(a) + % s = find(strcmp(a(i), b)); % for string comparison + s = find(a(i)==b); % for numeric comparison + sel1 = [sel1; repmat(i, size(s))]; + sel2 = [sel2; s]; +end diff --git a/@meeg/putfsample.m b/@meeg/putfsample.m deleted file mode 100644 index 2b97c61..0000000 --- a/@meeg/putfsample.m +++ /dev/null @@ -1,10 +0,0 @@ -function this = putfsample(this, fsample) -% Method for changing the sampling rate -% FORMAT res = putfsample(this) -% _______________________________________________________________________ -% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging - -% Stefan Kiebel -% $Id: putfsample.m 1373 2008-04-11 14:24:03Z spm $ - -this.Fsample = fsample; \ No newline at end of file diff --git a/@meeg/putnsamples.m b/@meeg/putnsamples.m deleted file mode 100644 index 177ef7f..0000000 --- a/@meeg/putnsamples.m +++ /dev/null @@ -1,10 +0,0 @@ -function this = putnsamples(this, nsamples) -% Method for changing the number of samples -% FORMAT this = putnsample(this, nsamples) -% _______________________________________________________________________ -% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging - -% Stefan Kiebel -% $Id: putnsamples.m 1373 2008-04-11 14:24:03Z spm $ - -this.Nsamples = nsamples; diff --git a/@meeg/sconfounds.m b/@meeg/sconfounds.m index c8a7080..bfa662c 100644 --- a/@meeg/sconfounds.m +++ b/@meeg/sconfounds.m @@ -5,10 +5,10 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Vladimir Litvak -% $Id: sconfounds.m 2419 2008-10-30 19:40:32Z vladimir $ +% $Id: sconfounds.m 3317 2009-08-10 12:39:52Z vladimir $ if nargin == 2 - [sel1, sel2] = spm_match_str(chanlabels(this), newsconfounds.label); + [sel1, sel2] = match_str(chanlabels(this, meegchannels(this)), newsconfounds.label); if length(sel1)=timeborders(1))); - timeEnd = max(find(timeAxis<=timeborders(2))); - timeind = timeStart:timeEnd; + timeind = indsample(this, timeborders(1)):indsample(this, timeborders(2)); end - if isempty(condition) trialind = 1:ntrials(this); else - if ischar(condition) - condition = {condition}; - end - [junk, trialind] = spm_match_str(condition, {this.trials.label}); + trialind = indtrial(this, condition); end -res = double(this.data.y(chanind, timeind, trialind)); \ No newline at end of file +if isequal(transformtype(this), 'time') + res = double(this.data.y(chanind, timeind, trialind)); +else + res = double(this.data.y(chanind, freqind, timeind, trialind)); +end \ No newline at end of file diff --git a/@meeg/size.m b/@meeg/size.m new file mode 100644 index 0000000..1d1ee8b --- /dev/null +++ b/@meeg/size.m @@ -0,0 +1,14 @@ +function res = size(this, varargin) +% returns the dimensions of the data matrix +% FORMAT res = size(this, dim)) +% _______________________________________________________________________ +% Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: size.m 3350 2009-09-03 13:19:20Z vladimir $ + +res = size(this.data.y, varargin{:}); + +if ntrials(this) == 1 + res = [res 1]; +end diff --git a/@meeg/transformtype.m b/@meeg/transformtype.m index 6404c89..afa9ead 100644 --- a/@meeg/transformtype.m +++ b/@meeg/transformtype.m @@ -5,11 +5,15 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: transformtype.m 2081 2008-09-11 13:04:24Z vladimir $ +% $Id: transformtype.m 3350 2009-09-03 13:19:20Z vladimir $ if nargin == 1 res = this.transform.ID; else + if strncmpi(this, 'TF', 2) && length(size(this))~=4 + error('TF transformtype can only be assigned to 4D dataset'); + end + this.transform.ID = newtype; res = this; end diff --git a/Contents.m b/Contents.m index 2303430..33e377b 100644 --- a/Contents.m +++ b/Contents.m @@ -1,5 +1,5 @@ % Statistical Parametric Mapping -% Version 3164 (SPM8) 29-May-09 +% Version 8.2 (SPM8) 16-Sep-2009 %__________________________________________________________________________ % ___ ____ __ __ % / __)( _ \( \/ ) @@ -42,7 +42,7 @@ %__________________________________________________________________________ % Copyright (C) 1991,1994-2003,2005-2009 Wellcome Trust Centre for Neuroimaging -% $Id: Contents.m 3163 2009-05-29 14:04:55Z guillaume $ +% $Id: Contents.m 3407 2009-09-16 13:02:36Z guillaume $ %========================================================================== % PROGRAMMERS NOTE: diff --git a/EEGtemplates/FIF306_setup.mat b/EEGtemplates/FIF306_setup.mat deleted file mode 100644 index ea8c4fa490874a0685074fd1bc77e43b43e53516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42280 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 M6yWc}vCkLsUv#=3UjP6A diff --git a/EEGtemplates/Neuromag306_EEG70.mat b/EEGtemplates/Neuromag306_EEG70.mat new file mode 100644 index 0000000000000000000000000000000000000000..e95cb029b5a5262e2412104ce93ed74e0ba9a8e5 GIT binary patch literal 4470 zcmb7{cT`hb_Q&ZxB3-40_CNti0O=ishm=T>D!qx)t4N6;y(5C4AR;IVNKup~2?9c> z0Y$oWNGJjlAS5KYgY#zI%y0ht-F5ES`@7d(r+m)cYn^MRYi+8l2flI{0yfjNmi6}a z^O6By_j3#L4h->E0~?u|+o>qYfb~PX+`_y(!GQs4VC!%%u$fyF7^(`EhpItU)D%x0 z2t*b9|9z;ajm_ApsHpmBsi^LjR8Fg#(?ZWOxEd|rxGEr_5cl>@;;qHA+>b_spxLMw z;Jk#L3~qm$0nfe>s6L^1;F=+z1dP zM;m;AG9x#{IKvPirgHKbb<^5cqwobyf8W^2{YM+ z^I0M^?vWfKC_Vk8-NPnIhtP>K5UqI>NLlfu;P2f;5_0khKemF&SYcduCrKUxXB%Rt z#SM0npb%}gAvs!HUndCyL9z`AugJqm3{+GA@cU%G=&;d`f`8SVHHi|6j$_ra-iE8Q zE%S_*{8{12BKKJoO#kat zEMyU;vG9KzAd8|*TsYN$KV^29^z7ayFzx}Y|Fc8>7y{n(5r*OI#S2zBXS1%2FCnPd5EL4()sgBMN#4t9HETwP0v zK`&ISv=;^+($p{^kcP6`J@j$RVJym*Zu13|&wqQVtk}U>JgIgx3h1AICv@_Ic`l4A z>>7R<_w_Eg;Cb<-q&_j}U1p~2@+Pngbhh^Uk~MqrrO7s@g@(>2k?0Dz57++2ICYIj ziWXS=8sNjzwYJ#IP3YU{;!}%`&V{wMklEgDCOl?;yKS`# zUEHey4d|io<^Bwq5Eqo%FhmrC^WZkMAo1kwZytYOgRZG3E}0P$1$5p7uA0Xh*o5Z$ z2-IvPYee$NA{d1|O=g2DMQPr-C)6XmW`#TjV#%`)I5v=XGEjR1z{6apDb~v=yXE*qT^u=3#5`aOAgdP0uW; z3tr#aZqr@8Ejdsa>k{o|*i}DOn@o+)c*s5h!iyjgja3JXk5e_arY(0>OcQxH#n?$< zeeuqrrPqA7jMgPUXm5QEc~94qEn>PS&XqCL*TOF^;ZysizCmlY(4Nj~GYLXGHqtG!)-G#0 ztzE@sK`F_8Qr0%Xn=VC8BTu}xw%DmPFJ_ihp=k!2O|BFSSg)?6sm?5X1c^m{oA{(a zNn&e*KluR-$LM4^N5gUHBC9sWF034?EFsk4Pl@@0`rwj-U?s~`=Ki)YtHVRla-F zpq9DiQMJ3Ru$lg|RJPn#*WBx5KB(9qO7rY}fcHpK)EG4LTApmvU3gc4ZtQe8Kg4n% zAtw6Z%!FRPQK+(c=e3I%*c)+%{U6iI*bu&<_|g$y|9fK3ZLg@E#9&nJjuhMx5AYCy zLB(%fm22Et+xM&)lH#&v6}Y5ilhalFRC_+c$|zTrVifag4yxXPVs9s=pK&{4SE_^@ z2PI00cgU5+o4(ebU#(0djFp!Uov2x(YTBF~O)&AkCre8O#)_UXgq4&h`$hWLeFZT> zSWs?D37DM9h_H;aKr5U>DZB?I%U&wlt^NL5bZs>LVw5kUxA^p`;#HhCpi?+w&Rso| zTAVwq5NiHP*P%FiPC=8mX=yl>p9_mJ8n6uHA8`GnI>G2F8*O!hPwHJLZ@vCV0!0OP`d3P{>�m-~OYsvZUDL~jX3dDHO44Kz7h^n~VB@J-(N z`Qh`;7R^};=`woyt)xTDN-5a*KEMPN`o9y!1hB>yp>;9gd;8_+*X^xt5^* z0WIC*v#i_iExjl)1NuUlm=Dh1I=3MQbz*TvthnzYjsXQM6d&n{Haq-&ZhMuS)ZJ&D z0&pTs>&-Keg*_+7Hja%cr~Xr+#fUC1=+W1D`5w|o0>y8ij{Vu%mK-8$RrgnqLDLFK z>fOlmUzF!2MUpU$!tW(Qv?Z4V$ZxGLH;5vAavJ;cG-J-Fzdh*Eh-k7@P1ZhBCbr|O z@e^f$E(Xvcv-Qf78GE`nJ-RT}iwN#!{-)59z7i&N8+xa{p-|#$^wI02WHagS;&Lo? zu*V%ME?=`yRrNkQgu1WyV-VmG?{WgIUAh4=i2&-N-XhSA4e_peu=YAH)j!Q;mlqzF zS*!sUfm_Afa;QFEJQ3=v6Lzjb4a(^<31K|^*1@_kYAk+ z<*CiB=JZ@+t&z(J^i4^vW$R-}6FL5a$62&_G)?BPZq0dl^Ni=$V2|C`xdBpAgJqk% zReDwwydx)u303Nr11};Rfw}a+RiH`MjT-p6y~g?bZAYzbVjc#oAFIx*r7bj=-zrMW zYWPXx`(QNGCL{K`B(PsxWWgRX`}(Jv6)s?P26K4T`OdHBQufc5md07w--fm7uKYw@ z#eMewrYD^D()0#9<){PnqG{&>sWpv??T8$7JQq)rjoJ(2c`vB?g`n`p_BG=xYehm| zxnRJj)KYb*xekKo1KE93V8ZH#3A?TBfzEnR#8937E_gE?Be62)ygF+m{{Y@04z?nT zK5jKPxVuOGn3@VBoMI~3r&k|2Ib!3frxYa7wQ4Zhx17G0&GR$; z&N?oKxlV%jEl<+jL1QB4jH^6NnCE9TUbcPY%kM_H_>64xm-Z1&nbMZL%@W?nz@L&j zJfDA9;8{M$CYq!5gXeif5LMKj^!blkG1_N)6fm~mIo&`$<0Q{%s{P)X%Je1&&i$Ox z=?n*6+Mw(BZaq6Q$sl#-Uc{KB7`$Jd7#jkB-=(qy;~gwG#~s%*!gu`>jDgvs^ZB$W z9B-R!WmIk72sva05i3_x#Z^Vh#&>!R&Toe&5Qs>MiGh70;cF@4B8Al(^i<~~jE#PIueNFVc7iKVE}^udoOyaN z5PZ$AmRM`XIg%GBz);ZlEP#Wj%=N}VZp{ZVki8k|Mpga8bPb^f^e|=#a&x@pF2O{X z_HJo${Zr*vA_@vZ<{RRcc^6X@o&CqlD`LHJBFCw#)o7=G(fyjWLCsQSPVCXV_xgJ@Bs?xa9F+yg=jaab^N-9HLqXwAvMwvGoDa{2uMX0OP zS>7kYZkkiqfAt2dE5+ROX%{*80y%DB?61=t(xng?g^*hc6Dy9)w#xj$Zua(nHtGeH zCBuGl3y-adWLO4_Guyg4HDZRx#AFkqIx+cVz3alL%XO~?5g2e)1FULS@$>dk8^><5 zB8`v!trmd_>L7u+)k>fs$<+7gu_kY3)OtdE!;T5>HuOO9rEy&1SUdYpZ0vyH5y->7 zZaTSjG%#3w_Z*)o;-Ryj);HSejqLAVcr`pf6m<;>t2gWn|7cn)>7ma!V=Sj$<*g#k z$6L=mtiMjdLZAs^H$mP?#Q>(m}SQ^1^waKGs}LfWR8$`N@;eI${~uZna5xt z|7Kv5GX$1ZY!ije5>d~!q*<13hzpAjTtVxO9A!j%IVkjqc`;w{K{*=T+ z8(e{V{Ii%_LQGPu;~Vi87Fhck0z6QRFvR-^SC80{#+RZjhUE(%t$QlMsCvb$;mSZ( zj=*C0T2(a91OT$R-$ecU_eJvby<4*4;p*Bz<*o!?zyB57$+D)<1y#_$epP~2(prEf xZi<#l-i3znJ6-PY^q~Jv7j-iSADN8&IW%Z8d@;G&!_CzlLUWCV%4>rT_7Bbe5|sb| literal 0 HcmV?d00001 diff --git a/EEGtemplates/biosemi64.sfp b/EEGtemplates/biosemi64.sfp new file mode 100644 index 0000000..d472626 --- /dev/null +++ b/EEGtemplates/biosemi64.sfp @@ -0,0 +1,67 @@ +spmnas 1 85 -41 +spmlpa -83 -20 -65 +spmrpa 83 -20 -65 +A1 -29.2644 82.1011 -0.1681 +A2 -54.9914 67.5738 -5.8804 +A3 -32.8795 71.8452 30.1284 +A4 -25.7835 47.4288 69.8291 +A5 -49.1339 46.0206 49.8831 +A6 -64.1055 44.0763 21.4442 +A7 -70.6916 41.8958 -10.8395 +A8 -81.4433 13.7802 -15.1615 +A9 -76.9277 14.1172 25.097 +A10 -58.9898 14.3544 59.7085 +A11 -32.0939 14.4686 86.4236 +A12 -34.1983 -22.4568 90.9388 +A13 -64.2027 -20.782 63.5856 +A14 -80.1105 -18.6349 24.6594 +A15 -85.0072 -16.3778 -18.4196 +A16 -85.8268 -46.4935 -21.2067 +A17 -79.5982 -51.4848 20.7615 +A18 -62.6018 -56.1594 58.5984 +A19 -33.7659 -59.7753 85.984 +A20 -27.4707 -91.1008 62.1009 +A21 -52.4644 -86.8018 41.7174 +A22 -67.4857 -80.9442 12.0896 +A23 -73.4404 -74.4816 -21.5311 +A24 -75.0014 -70.3299 -64.4026 +A25 -55.7888 -99.2792 -20.6777 +A26 -36.5153 -106.8019 16.2198 +A27 -30.1827 -115.1564 -17.6531 +A28 -1.4725 -117.9297 -55.4479 +A29 -0.3825 -118.6416 -12.82 +A30 0.7288 -110.1495 29.4389 +A31 1.798 -92.892 68.8025 +A32 2.5193 -61.2034 93.5467 +B1 0.5966 85.4186 5.2724 +B2 30.3458 82.3208 -2.5084 +B3 56.1483 67.2462 -10.3733 +B4 36.9056 71.7503 28.2715 +B5 1.6107 73.6809 45.2343 +B6 2.3304 47.9355 75.787 +B7 31.496 47.454 66.7353 +B8 53.4301 46.0515 44.4067 +B9 68.9352 44.219 15.7579 +B10 73.3302 42.0529 -16.9723 +B11 81.9645 12.9962 -21.7677 +B12 80.6141 13.3845 18.9204 +B13 64.1073 13.7668 54.9967 +B14 37.0696 14.142 82.3849 +B15 2.747 14.3924 94.9242 +B16 2.8165 -23.3292 101.2672 +B17 39.9696 -22.8958 86.5061 +B18 68.9216 -21.6725 57.4563 +B19 84.453 -19.7733 18.2209 +B20 85.084 -17.5501 -25.2931 +B21 85.4063 -48.208 -28.142 +B22 84.1409 -53.1682 14.4935 +B23 68.2191 -57.4632 53.3152 +B24 40.4866 -60.4388 82.3243 +B25 33.4052 -91.992 61.0662 +B26 56.7709 -88.0486 38.0235 +B27 68.346 -82.269 6.331 +B28 72.7791 -75.9692 -27.446 +B29 72.628 -72.8203 -70.7433 +B30 55.269 -100.7939 -25.2641 +B31 37.125 -107.6542 12.3793 +B32 29.3709 -115.6245 -20.0571 diff --git a/MIP.mat b/MIP.mat index 667eaf59f6f995a23f4b4818ee9ef1725b538724..a85d0f55611b309d1dd72ed8a3e164d32ebb59f5 100644 GIT binary patch delta 79 zcmdmSjCa9N-U;$L?mm7I7G^pM&PAz-C8;S2`FU0f;Xpb#wLn3^NWsv|%D~Xd#8kn^ fz`$~1p!UQBwuv`ZU@CEd_9CiQy zV|R9D?=R!|Hg5IC#90hSO>yGTRbe2<$d>u`Bx7HR)fcm8^LI_LI-Pz#ZRG1}e%3EH z02QK>68Tn{e071eeqDnbB|m>j?ZCzg103PwgablEP)HzfIR)%9?iAmSdP8T0J=0sN fHZut)kC!o`8iO(IfNMqmbxpIhkfp^(s)_djOvNjn diff --git a/canonical/scalp_2562.surf.gii b/canonical/scalp_2562.surf.gii index 920ad4f..c3a534f 100644 --- a/canonical/scalp_2562.surf.gii +++ b/canonical/scalp_2562.surf.gii @@ -34,6 +34,6 @@ 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 - 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 diff --git a/config/spm_cfg.m b/config/spm_cfg.m index dd9b0ae..9d67e1d 100644 --- a/config/spm_cfg.m +++ b/config/spm_cfg.m @@ -4,7 +4,7 @@ %_______________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging -% $Id: spm_cfg.m 2988 2009-03-28 16:47:21Z volkmar $ +% $Id: spm_cfg.m 3250 2009-07-06 09:31:13Z vladimir $ %_______________________________________________________________________ % temporal Temporal @@ -37,7 +37,7 @@ meeg.tag = 'meeg'; meeg.name = 'M/EEG'; meeg.help = {'M/EEG functions.'}; -meeg.values = { spm_cfg_eeg_convert spm_cfg_eeg_montage spm_cfg_eeg_epochs spm_cfg_eeg_filter spm_cfg_eeg_artefact spm_cfg_eeg_average spm_cfg_eeg_downsample spm_cfg_eeg_merge spm_cfg_eeg_contrast spm_cfg_eeg_grandmean spm_cfg_eeg_convert2images}; +meeg.values = { spm_cfg_eeg_convert spm_cfg_eeg_montage spm_cfg_eeg_epochs spm_cfg_eeg_filter spm_cfg_eeg_bc spm_cfg_eeg_artefact spm_cfg_eeg_average spm_cfg_eeg_downsample spm_cfg_eeg_merge spm_cfg_eeg_contrast spm_cfg_eeg_grandmean spm_cfg_eeg_tf_rescale spm_cfg_eeg_convert2images}; % --------------------------------------------------------------------- % util Util @@ -64,65 +64,68 @@ ['See spm_cfg.m or MATLABBATCH documentation ' ... 'for information about the form of SPM''s configuration ' ... 'files.']}; -%-Toolbox autodetection -% Disable warnings when converting SPM5 toolboxes - set this to 'on' to -% debug problems with SPM5 toolboxes -warning('off','matlabbatch:cfg_struct2cfg:verb'); -%-Get the list of toolbox directories -tbxdir = fullfile(spm('Dir'),'toolbox'); -d = dir(tbxdir); d = {d([d.isdir]).name}; -dd = regexp(d,'^\.'); -%(Beware, regexp returns an array if input cell array is of dim 0 or 1) -if ~iscell(dd), dd = {dd}; end -d = {'' d{cellfun('isempty',dd)}}; -ft = {}; dt = {}; -ftc = {}; dtc = {}; -%-Look for '*_cfg_*.m' or '*_config_*.m' files in these directories -for i=1:length(d) - d2 = fullfile(tbxdir,d{i}); - di = dir(d2); di = {di(~[di.isdir]).name}; - f2 = regexp(di,'.*_cfg_.*\.m$'); - if ~iscell(f2), f2 = {f2}; end - fi = {di{~cellfun('isempty',f2)}}; - if ~isempty(fi) - ft = {ft{:} fi{:}}; - dt(end+1:end+length(fi)) = deal({d2}); - else - % try *_config_*.m files, if toolbox does not have '*_cfg_*.m' files - f2 = regexp(di,'.*_config_.*\.m$'); +if ~isdeployed + %-Toolbox autodetection + % In compiled mode, cfg_master will take care of this + % Disable warnings when converting SPM5 toolboxes - set this to 'on' to + % debug problems with SPM5 toolboxes + warning('off','matlabbatch:cfg_struct2cfg:verb'); + %-Get the list of toolbox directories + tbxdir = fullfile(spm('Dir'),'toolbox'); + d = dir(tbxdir); d = {d([d.isdir]).name}; + dd = regexp(d,'^\.'); + %(Beware, regexp returns an array if input cell array is of dim 0 or 1) + if ~iscell(dd), dd = {dd}; end + d = {'' d{cellfun('isempty',dd)}}; + ft = {}; dt = {}; + ftc = {}; dtc = {}; + %-Look for '*_cfg_*.m' or '*_config_*.m' files in these directories + for i=1:length(d) + d2 = fullfile(tbxdir,d{i}); + di = dir(d2); di = {di(~[di.isdir]).name}; + f2 = regexp(di,'.*_cfg_.*\.m$'); if ~iscell(f2), f2 = {f2}; end fi = {di{~cellfun('isempty',f2)}}; - ftc = {ftc{:} fi{:}}; - dtc(end+1:end+length(fi)) = deal({d2}); - end; -end -if ~isempty(ft)||~isempty(ftc) - % The toolbox developer MUST add path to his/her toolbox in his/her 'prog' - % function, with a command line like: - % >> addpath(fullfile(spm('Dir'),'toolbox','mytoolbox'),'-end'); - cwd = pwd; - j = 1; - for i=1:length(ft) - try - cd(dt{i}); - tools.values{j} = feval(strtok(ft{i},'.')); - j = j + 1; - catch - disp(['Loading of toolbox ' fullfile(dt{i},ft{i}) ' failed.']); - end + if ~isempty(fi) + ft = {ft{:} fi{:}}; + dt(end+1:end+length(fi)) = deal({d2}); + else + % try *_config_*.m files, if toolbox does not have '*_cfg_*.m' files + f2 = regexp(di,'.*_config_.*\.m$'); + if ~iscell(f2), f2 = {f2}; end + fi = {di{~cellfun('isempty',f2)}}; + ftc = {ftc{:} fi{:}}; + dtc(end+1:end+length(fi)) = deal({d2}); + end; end - for i=1:length(ftc) - try - cd(dtc{i}); - % use cfg_struct2cfg to convert from SPM5 to matlabbatch - % configuration tree - tools.values{j} = cfg_struct2cfg(feval(strtok(ftc{i},'.'))); - j = j + 1; - catch - disp(['Loading of toolbox ' fullfile(dtc{i},ftc{i}) ' failed.']); + if ~isempty(ft)||~isempty(ftc) + % The toolbox developer MUST add path to his/her toolbox in his/her 'prog' + % function, with a command line like: + % >> addpath(fullfile(spm('Dir'),'toolbox','mytoolbox'),'-end'); + cwd = pwd; + j = 1; + for i=1:length(ft) + try + cd(dt{i}); + tools.values{j} = feval(strtok(ft{i},'.')); + j = j + 1; + catch + disp(['Loading of toolbox ' fullfile(dt{i},ft{i}) ' failed.']); + end + end + for i=1:length(ftc) + try + cd(dtc{i}); + % use cfg_struct2cfg to convert from SPM5 to matlabbatch + % configuration tree + tools.values{j} = cfg_struct2cfg(feval(strtok(ftc{i},'.'))); + j = j + 1; + catch + disp(['Loading of toolbox ' fullfile(dtc{i},ftc{i}) ' failed.']); + end end + cd(cwd); end - cd(cwd); end %_______________________________________________________________________ % spmjobs SPM diff --git a/config/spm_cfg_bms.m b/config/spm_cfg_bms.m index c501dd2..516388b 100644 --- a/config/spm_cfg_bms.m +++ b/config/spm_cfg_bms.m @@ -4,7 +4,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Maria Joao Rosa -% $Id: spm_cfg_bms.m 2915 2009-03-20 19:15:44Z maria $ +% $Id: spm_cfg_bms.m 3288 2009-07-27 09:23:54Z maria $ % --------------------------------------------------------------------- % dir Directory @@ -94,6 +94,27 @@ map.values = {subj_map }; map.num = [1 Inf]; +% --------------------------------------------------------------------- +% mod_name Name +% --------------------------------------------------------------------- +mod_name = cfg_entry; +mod_name.tag = 'mod_name'; +mod_name.name = 'Name'; +mod_name.help = {'Specify name for each model (optional).'}; +mod_name.strtype = 's'; +mod_name.num = [0 Inf]; +mod_name.val = {''}; + +% --------------------------------------------------------------------- +% name_mod Name models +% --------------------------------------------------------------------- +name_mod = cfg_repeat; +name_mod.tag = 'name_mod'; +name_mod.name = 'Name models'; +name_mod.help = {'Specify name for each model (optional).'}'; +name_mod.values = {mod_name }; +name_mod.num = [0 Inf]; + % --------------------------------------------------------------------- % file BMS.mat % --------------------------------------------------------------------- @@ -127,6 +148,24 @@ 'RFX' }'; +% --------------------------------------------------------------------- +% verify_id Verify data ID +% --------------------------------------------------------------------- +verify_id = cfg_menu; +verify_id.tag = 'verify_id'; +verify_id.name = 'Verify data identity'; +verify_id.help = {['Verify whether the model comparison is valid '... + 'i.e. whether the models have been fitted to the same data.']}; +verify_id.labels = { + 'yes' + 'no' +}'; +verify_id.values = { + 1 + 0 +}'; +verify_id.val = {0}; + % --------------------------------------------------------------------- % out_file Output files % --------------------------------------------------------------------- @@ -137,20 +176,26 @@ 'RFX analyses). ']... ''... ['Default option (and faster option): '... - 'Alpha + PPM = alpha.img (Dirichlet '... - 'parameters) + xppm.img (Posterior Probability '... - 'Maps) for each model.. ']... + 'PPM = xppm.img (Posterior Probability Maps) '... + 'for each model.']... ''... - ['Second option: Alpha + PPM + EPM = alpha.img + '... - 'xppm.img + epm.img (Exceedance Probability '... - ' Maps) for each model.']}; + ['Second option: PPM + EPM = xppm.img + '... + 'epm.img (Exceedance Probability '... + 'Maps + Exceedance Probability Maps) for each model.']... + ''... + ['Third option: PPM + EPM + Alpha = xppm.img + '... + 'epm.img + alpha.img (PPM, EPM and Map of Dirichlet '... + 'Parameters) for each model.']}; out_file.labels = { - 'Alpha + PPM' - 'Alpha + PPM + EPM' + 'PPM' + 'PPM + EPM' + 'PPM + EPM + Alpha' + }'; out_file.values = { 0 1 + 2 }'; out_file.val = {0}; @@ -229,6 +274,18 @@ thres.num = [0 Inf]; thres.val = {[]}; +% --------------------------------------------------------------------- +% k Extent threshold +% --------------------------------------------------------------------- +k = cfg_entry; +k.tag = 'k'; +k.name = 'Extent threshold'; +k.help = {['Specify extent threshold (minimum number of voxels '... + 'per cluster).']}; +k.strtype = 'e'; +k.num = [0 Inf]; +k.val = {[]}; + % --------------------------------------------------------------------- % scale Map Scale % --------------------------------------------------------------------- @@ -259,7 +316,7 @@ bms_dcm = cfg_exbranch; bms_dcm.tag = 'bms_dcm'; bms_dcm.name = 'BMS: DCM'; -bms_dcm.val = {dir dcm load_f method }; +bms_dcm.val = {dir dcm load_f method verify_id}; bms_dcm.help = {['Bayesian Model Selection for Dynamic Causal Modelling '... '(DCM) for fMRI or MEEG.']... ''... @@ -299,7 +356,7 @@ bms_map_inf = cfg_exbranch; bms_map_inf.tag = 'bms_map_inf'; bms_map_inf.name = 'BMS: Maps'; -bms_map_inf.val = {dir map method out_file mask nsamp }; +bms_map_inf.val = {dir map name_mod method out_file mask nsamp }; bms_map_inf.help = {'Bayesian Model Selection for Log-Evidence Maps. '... ''... ['Input: log-evidence maps (.img) for each model, session and '... @@ -325,7 +382,7 @@ bms_map_vis = cfg_exbranch; bms_map_vis.tag = 'bms_map_vis'; bms_map_vis.name = 'BMS: Maps (Results)'; -bms_map_vis.val = {file img thres scale }; +bms_map_vis.val = {file img thres k scale}; bms_map_vis.help = {['Bayesian Model Selection Maps (Results). '... 'Show results from BMS Maps (Inference).']}; bms_map_vis.prog = @spm_run_bms_vis; diff --git a/config/spm_cfg_defs.m b/config/spm_cfg_defs.m index 7be2884..1cce4b8 100644 --- a/config/spm_cfg_defs.m +++ b/config/spm_cfg_defs.m @@ -4,7 +4,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % John Ashburner -% $Id: spm_cfg_defs.m 2500 2008-11-28 16:11:15Z john $ +% $Id: spm_cfg_defs.m 3339 2009-08-28 19:14:37Z john $ hsummary = {[... 'This is a utility for working with deformation fields. ',... @@ -177,6 +177,40 @@ applyto.val = {''}; applyto.help = happly; +savepwd = cfg_const; +savepwd.name = 'Current directory'; +savepwd.tag = 'savepwd'; +savepwd.val = {1}; +savepwd.help = {['All created files (deformation fields and warped images) ' ... + 'are written to the current directory.']}; + +savesrc = cfg_const; +savesrc.name = 'Source directories'; +savesrc.tag = 'savesrc'; +savesrc.val = {1}; +savesrc.help = {['The combined deformation field is written into the ' ... + 'directory of the first deformation field, warped images ' ... + 'are written to the same directories as the source ' ... + 'images.']}; + +savedef = cfg_const; +savedef.name = 'Source directory (deformation)'; +savedef.tag = 'savedef'; +savedef.val = {1}; +savedef.help = {['The combined deformation field and the warped images ' ... + 'are written into the directory of the first deformation ' ... + 'field.']}; + +saveusr = files('Output directory','saveusr','dir',[1 1]); +saveusr.help = {['The combined deformation field and the warped images ' ... + 'are written into the specified directory.']}; + +savedir = cfg_choice; +savedir.name = 'Output destination'; +savedir.tag = 'savedir'; +savedir.values = {savepwd savesrc savedef saveusr}; +savedir.val = {savepwd}; + interp = cfg_menu; interp.name = 'Interpolation'; interp.tag = 'interp'; @@ -199,27 +233,29 @@ }; -conf = exbranch('Deformations','defs',{comp,saveas,applyto,interp}); +conf = exbranch('Deformations','defs',{comp,saveas,applyto,savedir,interp}); conf.prog = @spm_defs; -conf.vfiles = @vfiles; +conf.vout = @vout; conf.help = hsummary; return; %_______________________________________________________________________ %_______________________________________________________________________ -function vf = vfiles(job) -vf = {}; -s = strvcat(job.ofname); -if ~isempty(s), - vf = {vf{:}, fullfile(pwd,['y_' s '.nii,1'])}; -end; - -s = strvcat(job.fnames); -for i=1:size(s,1), - [pth,nam,ext,num] = spm_fileparts(s(i,:)); - vf = {vf{:}, fullfile(pwd,['w',nam,ext,num])}; -end; +function vo = vout(job) +vo = []; +if ~strcmp(job.ofname,'') && ~isempty(job.ofname) + vo = cfg_dep; + vo.sname = 'Combined deformation'; + vo.src_output = substruct('.','def'); + vo.tgt_spec = cfg_findspec({{'filter','image','filter','nifti'}}); +end +if iscellstr(job.fnames) && ~isempty(job.fnames) + if isempty(vo), vo = cfg_dep; else vo(end+1) = cfg_dep; end + vo(end).sname = 'Warped images'; + vo(end).src_output = substruct('.','warped'); + vo(end).tgt_spec = cfg_findspec({{'filter','image'}}); +end return; %_______________________________________________________________________ diff --git a/config/spm_cfg_eeg_artefact.m b/config/spm_cfg_eeg_artefact.m index b893b5f..a54c981 100644 --- a/config/spm_cfg_eeg_artefact.m +++ b/config/spm_cfg_eeg_artefact.m @@ -3,10 +3,11 @@ %_______________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging -% Stefan Kiebel -% $Id: spm_cfg_eeg_artefact.m 2225 2008-09-29 12:25:27Z stefan $ +% Vladimir Litvak +% $Id: spm_cfg_eeg_artefact.m 3258 2009-07-08 17:46:54Z vladimir $ + +rev = '$Rev: 3258 $'; -rev = '$Rev: 2225 $'; D = cfg_files; D.tag = 'D'; D.name = 'File Name'; @@ -14,111 +15,94 @@ D.num = [1 1]; D.help = {'Select the EEG mat file.'}; -nothing = cfg_const; -nothing.tag = 'nothing'; -nothing.name = 'No lists'; -nothing.val = {1}; - -out_list = cfg_entry; -out_list.tag = 'out_list'; -out_list.name = 'Artefactual trial list'; -out_list.strtype = 'r'; -out_list.num = [0 inf]; -out_list.help = {'List artefactual trials (0 for none)'}; - -in_list = cfg_entry; -in_list.tag = 'in_list'; -in_list.name = 'Clean trial list'; -in_list.strtype = 'r'; -in_list.num = [0 inf]; -in_list.help = {'List clean trials (0 for none)'}; - -list = cfg_branch; -list.tag = 'list'; -list.name = 'Trial lists'; -list.val = {out_list in_list}; - -External_list = cfg_choice; -External_list.tag = 'External_list'; -External_list.name = 'Use own artefact list'; -External_list.val = {nothing}; -External_list.help = {'Choose this option if you want to specify your own artefact list'}'; -External_list.values = {list nothing}; - -Weightingfunction = cfg_entry; -Weightingfunction.tag = 'Weightingfunction'; -Weightingfunction.name = 'Weightingfunction'; -Weightingfunction.strtype = 'r'; -Weightingfunction.num = [1 1]; -Weightingfunction.val = {3}; -Weightingfunction.help = {'Input offset of weighting function'}; - -Smoothing = cfg_entry; -Smoothing.tag = 'Smoothing'; -Smoothing.name = 'Smoothing'; -Smoothing.strtype = 'r'; -Smoothing.num = [1 1]; -Smoothing.val = {20}; -Smoothing.help = {'FWHM for residual smoothing (ms)'}; - -weighted_arg = cfg_branch; -weighted_arg.tag = 'weighted_arg'; -weighted_arg.name = 'Robust averaging'; -weighted_arg.val = {Weightingfunction Smoothing}; - -nothing = cfg_const; -nothing.tag = 'nothing'; -nothing.name = 'No robust averaging'; -nothing.val = {1}; - -weighted = cfg_choice; -weighted.tag = 'weighted'; -weighted.name = 'Use robust averaging'; -weighted.val = {nothing}; -weighted.help = {'Choose this option if you want to apply robust averaging'}'; -weighted.values = {weighted_arg nothing}; - -nothing = cfg_const; -nothing.tag = 'nothing'; -nothing.name = 'No thresholding'; -nothing.val = {1}; - -channels_threshold = cfg_entry; -channels_threshold.tag = 'channels_threshold'; -channels_threshold.name = 'Channels to threshold'; -channels_threshold.strtype = 'r'; -channels_threshold.num = [1 inf]; -channels_threshold.help = {'Choose channel indices of channels which you want to threshold.'}; - -thresholdval = cfg_entry; -thresholdval.tag = 'thresholdval'; -thresholdval.name = 'Thresholds'; -thresholdval.strtype = 'r'; -thresholdval.num = [1 inf]; -thresholdval.help = {'Channel-wise thresholds. Use single threshold to apply the same threshold to all channels'}; -thresholdval.val = {80}; - -threshold = cfg_branch; -threshold.tag = 'threshold'; -threshold.name = 'Thresholding'; -threshold.val = {channels_threshold thresholdval}; - -Check_Threshold = cfg_choice; -Check_Threshold.tag = 'Check_Threshold'; -Check_Threshold.name = 'Threshold channels'; -Check_Threshold.val = {threshold}; -Check_Threshold.help = {'Choose this option if you want to threshold the data'}'; -Check_Threshold.values = {threshold nothing}; - -artefact = cfg_branch; -artefact.tag = 'artefact'; -artefact.name = 'Artefact'; -artefact.val = {External_list weighted Check_Threshold}; +badchanthresh = cfg_entry; +badchanthresh.tag = 'badchanthresh'; +badchanthresh.name = 'Bad channel threshold'; +badchanthresh.strtype = 'r'; +badchanthresh.num = [1 1]; +badchanthresh.val = {0.2}; +badchanthresh.help = {'Fraction of trials with artefacts ', ... + 'above which an M/EEG channel is declared as bad.'}; + +chanall = cfg_const; +chanall.tag = 'type'; +chanall.name = 'All'; +chanall.val = {'all'}; + +chanmeg = cfg_const; +chanmeg.tag = 'type'; +chanmeg.name = 'MEG'; +chanmeg.val = {'MEG'}; + +chanmegplanar = cfg_const; +chanmegplanar.tag = 'type'; +chanmegplanar.name = 'MEGPLANAR'; +chanmegplanar.val = {'MEGPLANAR'}; + +chaneeg = cfg_const; +chaneeg.tag = 'type'; +chaneeg.name = 'EEG'; +chaneeg.val = {'EEG'}; + +chaneog = cfg_const; +chaneog.tag = 'type'; +chaneog.name = 'EOG'; +chaneog.val = {'EOG'}; + +chanecg = cfg_const; +chanecg.tag = 'type'; +chanecg.name = 'ECG'; +chanecg.val = {'ECG'}; + +chanemg = cfg_const; +chanemg.tag = 'type'; +chanemg.name = 'EMG'; +chanemg.val = {'EMG'}; + +chanlfp = cfg_const; +chanlfp.tag = 'type'; +chanlfp.name = 'LFP'; +chanlfp.val = {'LFP'}; + +chanfile = cfg_files; +chanfile.tag = 'file'; +chanfile.name = 'Channel file'; +chanfile.filter = 'mat'; +chanfile.num = [1 1]; + +channels = cfg_choice; +channels.tag = 'channels'; +channels.name = 'Channel selection'; +channels.values = {chanall, chanmeg, chanmegplanar, chaneeg, chaneog, chanecg, chanemg, chanlfp, chanfile}; +channels.val = {chanall}; + +artefact_funs = dir(fullfile(spm('dir'), 'spm_eeg_artefact_*.m')); +artefact_funs = {artefact_funs(:).name}; + +fun = cfg_choice; +fun.tag = 'fun'; +fun.name = 'Detection algorithm'; +for i = 1:numel(artefact_funs) + fun.values{i} = feval(spm_str_manip(artefact_funs{i}, 'r')); +end + +methods = cfg_branch; +methods.tag = 'methods'; +methods.name = 'Method'; +methods.val = {channels, fun}; + +methodsrep = cfg_repeat; +methodsrep.tag = 'methodsrep'; +methodsrep.name = 'How to look for artefacts'; +methodsrep.help = {'Choose channels and methods for artefact detection'}; +methodsrep.values = {methods}; +methodsrep.num = [1 Inf]; + S = cfg_exbranch; S.tag = 'eeg_artefact'; S.name = 'M/EEG Artefact detection'; -S.val = {D artefact}; +S.val = {D, badchanthresh, methodsrep}; S.help = {'Detect artefacts in epoched M/EEG data.'}; S.prog = @eeg_artefact; S.vout = @vout_eeg_artefact; @@ -128,35 +112,22 @@ function out = eeg_artefact(job) % construct the S struct S.D = job.D{1}; -S.artefact = job.artefact; - -if isfield(S.artefact.External_list, 'nothing') - S.artefact.External_list = 0; -else - S.artefact.External_list = 1; - S.artefact.in_list = job.artefact.External_list.in_list; - S.artefact.out_list = job.artefact.External_list.out_list; - +S.badchanthresh = job.badchanthresh; + +for i = 1:numel(job.methods) + if isfield(job.methods(i).channels, 'type') + S.methods(i).channels = job.methods(i).channels.type; + else + S.methods(i).channels = getfield(load(job.methods(i).channels.file{1}), 'label'); + end + + fun = fieldnames(job.methods(i).fun); + fun = fun{1}; + + S.methods(i).fun = fun; + S.methods(i).settings = getfield(job.methods(i).fun, fun); end - -if isfield(S.artefact.weighted, 'nothing') - S.artefact.Weighted = 0; -else - S.artefact.Weighted = 1; - S.artefact.Weightingfunction = job.artefact.weighted.weighted_arg.Weightingfunction; - S.artefact.Smoothing = job.artefact.weighted.weighted_arg.Smoothing; - -end - -if isfield(S.artefact.Check_Threshold, 'nothing') - S.artefact.Check_Threshold = 0; -else - S.artefact.Check_Threshold = 1; - S.artefact.threshold = job.artefact.Check_Threshold.threshold.thresholdval; - S.artefact.channels_threshold = job.artefact.Check_Threshold.threshold.channels_threshold; - -end - + out.D = spm_eeg_artefact(S); out.Dfname = {out.D.fname}; diff --git a/config/spm_cfg_eeg_average.m b/config/spm_cfg_eeg_average.m index 50cffe1..769ef97 100644 --- a/config/spm_cfg_eeg_average.m +++ b/config/spm_cfg_eeg_average.m @@ -4,9 +4,9 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: spm_cfg_eeg_average.m 2870 2009-03-12 13:43:35Z guillaume $ +% $Id: spm_cfg_eeg_average.m 3258 2009-07-08 17:46:54Z vladimir $ -rev = '$Rev: 2870 $'; +rev = '$Rev: 3258 $'; D = cfg_files; D.tag = 'D'; D.name = 'File Name'; @@ -14,19 +14,65 @@ D.num = [1 1]; D.help = {'Select the M/EEG mat file.'}; +standard = cfg_const; +standard.tag = 'standard'; +standard.name = 'Standard'; +standard.val = {false}; + +ks = cfg_entry; +ks.tag = 'ks'; +ks.name = 'Offset of the weighting function'; +ks.strtype = 'r'; +ks.val = {3}; +ks.num = [1 1]; +ks.help = {'Parameter determining the how far the values should be from the median, '... + 'to be considered outliers (the larger, the farther).'}; + +bycondition = cfg_menu; +bycondition.tag = 'bycondition'; +bycondition.name = 'Compute weights by condition'; +bycondition.help = {'Compute weights for each condition separately or for all conditions together.'}; +bycondition.labels = {'Yes', 'No'}; +bycondition.values = {true, false}; +bycondition.val = {true}; + +savew = cfg_menu; +savew.tag = 'savew'; +savew.name = 'Save weights'; +savew.help = {'Save weights in a separate dataset for quality control.'}; +savew.labels = {'Yes', 'No'}; +savew.values = {true, false}; +savew.val = {true}; + +robust = cfg_branch; +robust.tag = 'robust'; +robust.name = 'Robust'; +robust.val = {ks, bycondition, savew}; + +userobust = cfg_choice; +userobust.tag = 'userobust'; +userobust.name = 'Averaging type'; +userobust.help = {'choose between using standard and robust averaging'}; +userobust.values = {standard, robust}; +userobust.val = {standard}; + S = cfg_exbranch; S.tag = 'eeg_average'; -S.name = 'M/EEG averaging'; -S.val = {D}; +S.name = 'M/EEG Averaging'; +S.val = {D, userobust}; S.help = {'Average epoched EEG/MEG data.'}; S.prog = @eeg_average; S.vout = @vout_eeg_average; S.modality = {'EEG'}; - function out = eeg_average(job) % construct the S struct S.D = job.D{1}; +if isfield(job.userobust, 'robust') + S.robust = job.userobust.robust; +else + S.robust = false; +end S.review = false; out.D = spm_eeg_average(S); diff --git a/config/spm_cfg_eeg_bc.m b/config/spm_cfg_eeg_bc.m new file mode 100644 index 0000000..02bb456 --- /dev/null +++ b/config/spm_cfg_eeg_bc.m @@ -0,0 +1,61 @@ +function S = spm_cfg_eeg_bc +% configuration file for baseline correction +%__________________________________________________________________________ +% Copyright (C) 2009 Wellcome Trust Centre for Neuroimaging + +% Vladimir Litvak +% $Id: spm_cfg_eeg_bc.m 3250 2009-07-06 09:31:13Z vladimir $ + +%-------------------------------------------------------------------------- +% D +%-------------------------------------------------------------------------- +D = cfg_files; +D.tag = 'D'; +D.name = 'File Name'; +D.filter = 'mat'; +D.num = [1 1]; +D.help = {'Select the M/EEG mat file.'}; + +%-------------------------------------------------------------------------- +% time +%-------------------------------------------------------------------------- +time = cfg_entry; +time.tag = 'time'; +time.name = 'Baseline'; +time.help = {'Start and stop of baseline [ms].'}; +time.strtype = 'e'; +time.num = [1 2]; + +%-------------------------------------------------------------------------- +% S +%-------------------------------------------------------------------------- +S = cfg_exbranch; +S.tag = 'eeg_bc'; +S.name = 'M/EEG Baseline correction'; +S.val = {D, time}; +S.help = {'Baseline correction of M/EEG time data'}'; +S.prog = @eeg_bc; +S.vout = @vout_eeg_bc; +S.modality = {'EEG'}; + +%========================================================================== +function out = eeg_bc(job) +% construct the S struct +S.D = job.D{1}; +S.time = job.time; + +out.D = spm_eeg_bc(S); +out.Dfname = {fullfile(out.D.path,out.D.fname)}; + +%========================================================================== +function dep = vout_eeg_bc(job) +% return dependencies +dep(1) = cfg_dep; +dep(1).sname = 'Baseline corrected M/EEG data'; +dep(1).src_output = substruct('.','D'); +dep(1).tgt_spec = cfg_findspec({{'strtype','e'}}); + +dep(2) = cfg_dep; +dep(2).sname = 'Baseline corrected M/EEG datafile'; +dep(2).src_output = substruct('.','Dfname'); +dep(2).tgt_spec = cfg_findspec({{'filter','mat'}}); diff --git a/config/spm_cfg_eeg_convert.m b/config/spm_cfg_eeg_convert.m index e087760..84eabe3 100644 --- a/config/spm_cfg_eeg_convert.m +++ b/config/spm_cfg_eeg_convert.m @@ -4,7 +4,7 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel -% $Id: spm_cfg_eeg_convert.m 3059 2009-04-15 18:09:13Z guillaume $ +% $Id: spm_cfg_eeg_convert.m 3383 2009-09-10 17:53:49Z vladimir $ dataset = cfg_files; dataset.tag = 'dataset'; @@ -18,7 +18,7 @@ timewindow.name = 'Timing'; timewindow.strtype = 'r'; timewindow.num = [1 2]; -timewindow.help = {'start and end of epoch [s]'}; +timewindow.help = {'start and end of epoch [ms]'}; readall = cfg_const; readall.tag = 'readall'; @@ -34,7 +34,7 @@ usetrials = cfg_const; usetrials.tag = 'usetrials'; usetrials.name = 'Trials defined in data'; -usetrials.val = {0}; +usetrials.val = {1}; trlfile = cfg_files; trlfile.tag = 'trlfile'; @@ -197,14 +197,16 @@ S.usetrials = S.continuous.trials.usetrials; end if isfield(S.continuous.trials, 'trlfile') - S.trlfile = S.continuous.trials.trlfile; + S.trlfile = char(S.continuous.trials.trlfile); + S.usetrials = 0; end if isfield(S.continuous.trials, 'define') S.trialdef = S.continuous.trials.define.trialdef; S.pretrig = S.continuous.trials.define.timing(1); S.posttrig = S.continuous.trials.define.timing(2); - + S.reviewtrials = 0; + S.save = 0; S.usetrials = 0; [S.trl, S.conditionlabel] = spm_eeg_definetrial(S); end diff --git a/config/spm_cfg_eeg_merge.m b/config/spm_cfg_eeg_merge.m index ce4c1b3..86dfd4c 100644 --- a/config/spm_cfg_eeg_merge.m +++ b/config/spm_cfg_eeg_merge.m @@ -4,56 +4,69 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Stefan Kiebel, Volkmar Glauche -% $Id: spm_cfg_eeg_merge.m 2225 2008-09-29 12:25:27Z stefan $ +% $Id: spm_cfg_eeg_merge.m 3188 2009-06-08 08:47:46Z vladimir $ -rev = '$Rev: 2225 $'; +rev = '$Rev: 3188 $'; D = cfg_files; D.tag = 'D'; D.name = 'File Names'; D.filter = 'mat'; -D.num = [1 1]; -D.help = {'Select the M/EEG mat file.'}; +D.num = [2 Inf]; +D.help = {'Select the M/EEG mat files.'}; -string = cfg_entry; -string.tag = 'str'; -string.name = 'Label'; -string.strtype = 's'; -string.num = [1 Inf]; +file = cfg_entry; +file.tag = 'file'; +file.name = 'Files to which the rule applies'; +file.strtype = 's'; +file.val = {'.*'}; +file.help = {'Regular expression to match the files to which the rule applies (default - all)'}; -strings = cfg_repeat; -strings.tag = 'unused'; -strings.name = 'Labels'; -strings.values = {string}; +labelorg = cfg_entry; +labelorg.tag = 'labelorg'; +labelorg.name = 'Original labels to which the rule applies'; +labelorg.strtype = 's'; +labelorg.val = {'.*'}; +labelorg.help = {'Regular expression to match the original condition labels to which the rule applies (default - all)'}; -file = cfg_branch; -file.tag = 'file'; -file.name = 'File info'; -file.val = {D strings}; +labelnew = cfg_entry; +labelnew.tag = 'labelnew'; +labelnew.name = 'New label for the merged file'; +labelnew.strtype = 's'; +labelnew.val = {'#labelorg#'}; +labelnew.help = {['New condition label for the merged file. Special tokens can be used as part of the name. '... + '#file# will be replaced by the name of the original file, #labelorg# will be replaced by the original '... + 'condition labels.']}; + +rule = cfg_branch; +rule.tag = 'rule'; +rule.name = 'Recoding rule'; +rule.val = {file, labelorg, labelnew}; +rule.help = {'Recoding rule. The default means that all trials will keep their original label.'}; -files = cfg_repeat; -files.tag = 'unused'; -files.name = 'Files'; -files.num = [2 inf]; -files.values = {file}; + +rules = cfg_repeat; +rules.tag = 'unused'; +rules.name = 'Condition label recoding rules'; +rules.values = {rule}; +rules.num = [1 Inf]; +rules.val = {rule}; +rules.help = {['Specify the rules for translating condition labels from ' ... + 'the original files to the merged file. Multiple rules can be specified. The later ' ... + 'rules have precedence. Trials not matched by any of the rules will keep their original labels.']}; S = cfg_exbranch; S.tag = 'eeg_merge'; S.name = 'M/EEG Merging'; -S.val = {files}; +S.val = {D, rules}; S.help = {'Merge EEG/MEG data.'}; S.prog = @eeg_merge; S.vout = @vout_eeg_merge; S.modality = {'EEG'}; - function out = eeg_merge(job) % construct the S struct -S.D = strvcat(cat(1,job.file(:).D)); -for i = 1:length(job.file) - for j = 1:numel(job.file(i).str) - S.recode{i}{j} = job.file(i).str{j}; - end -end +S.D = strvcat(job.D{:}); +S.recode = job.rule; out.D = spm_eeg_merge(S); out.Dfname = {out.D.fname}; diff --git a/config/spm_cfg_eeg_tf_rescale.m b/config/spm_cfg_eeg_tf_rescale.m index 54baf04..357c166 100644 --- a/config/spm_cfg_eeg_tf_rescale.m +++ b/config/spm_cfg_eeg_tf_rescale.m @@ -1,30 +1,128 @@ function S = spm_cfg_eeg_tf_rescale % configuration file for rescaling spectrograms -%_______________________________________________________________________ +%__________________________________________________________________________ % Copyright (C) 2009 Wellcome Trust Centre for Neuroimaging % Will Penny -% $Id: spm_cfg_eeg_tf_rescale.m 3090 2009-04-29 17:30:05Z will $ - -Fname = cfg_files; -Fname.tag = 'Fname'; -Fname.name = 'File Names'; -Fname.filter = 'mat'; -Fname.num = [1 inf]; -Fname.help = {'Select the M/EEG mat file.'}; - - -S = cfg_exbranch; -S.tag = 'eeg_tf_rescale'; -S.name = 'M/EEG TF Rescale'; -S.val = {Fname}; -S.help = {'Rescale spectrogram using eg Log Ratio operator'}; -S.prog = @eeg_tf_rescale; -S.modality = {'EEG'}; +% $Id: spm_cfg_eeg_tf_rescale.m 3204 2009-06-15 14:45:25Z guillaume $ + +%-------------------------------------------------------------------------- +% D +%-------------------------------------------------------------------------- +D = cfg_files; +D.tag = 'D'; +D.name = 'File Name'; +D.filter = 'mat'; +D.num = [1 1]; +D.help = {'Select the M/EEG mat file.'}; + +%-------------------------------------------------------------------------- +% Sbaseline +%-------------------------------------------------------------------------- +Sbaseline = cfg_entry; +Sbaseline.tag = 'Sbaseline'; +Sbaseline.name = 'Baseline'; +Sbaseline.help = {'Start and stop of baseline [ms].'}; +Sbaseline.strtype = 'e'; +Sbaseline.num = [1 2]; + +%-------------------------------------------------------------------------- +% method_logr +%-------------------------------------------------------------------------- +method_logr = cfg_branch; +method_logr.tag = 'LogR'; +method_logr.name = 'Log Ratio'; +method_logr.val = {Sbaseline}; +method_logr.help = {'Log Ratio.'}; + +%-------------------------------------------------------------------------- +% method_diff +%-------------------------------------------------------------------------- +method_diff = cfg_branch; +method_diff.tag = 'Diff'; +method_diff.name = 'Difference'; +method_diff.val = {Sbaseline}; +method_diff.help = {'Difference.'}; + +%-------------------------------------------------------------------------- +% method_rel +%-------------------------------------------------------------------------- +method_rel = cfg_branch; +method_rel.tag = 'Rel'; +method_rel.name = 'Relative'; +method_rel.val = {Sbaseline}; +method_rel.help = {'Relative.'}; +%-------------------------------------------------------------------------- +% method_log +%-------------------------------------------------------------------------- +method_log = cfg_const; +method_log.tag = 'Log'; +method_log.name = 'Log'; +method_log.val = {1}; +method_log.help = {'Log.'}; +%-------------------------------------------------------------------------- +% method_sqrt +%-------------------------------------------------------------------------- +method_sqrt = cfg_const; +method_sqrt.tag = 'Sqrt'; +method_sqrt.name = 'Sqrt'; +method_sqrt.val = {1}; +method_sqrt.help = {'Square Root.'}; + +%-------------------------------------------------------------------------- +% method +%-------------------------------------------------------------------------- +method = cfg_choice; +method.tag = 'method'; +method.name = 'Rescale method'; +method.val = {method_logr}; +method.help = {'Select the rescale method.'}; +method.values = {method_logr method_diff method_rel method_log method_sqrt}; + +%-------------------------------------------------------------------------- +% S +%-------------------------------------------------------------------------- +S = cfg_exbranch; +S.tag = 'eeg_tf_rescale'; +S.name = 'M/EEG Time-Frequency Rescale'; +S.val = {D, method}; +S.help = {'Rescale (avg) spectrogram with nonlinear and/or difference operator.' + 'For ''Log'' and ''Sqrt'', these functions are applied to spectrogram.' + 'For ''LogR'', ''Rel'' and ''Diff'' this function computes power in the baseline.' + 'p_b and outputs:' + '(i) p-p_b for ''Diff''' + '(ii) 100*(p-p_b)/p_b for ''Rel''' + '(iii) log (p/p_b) for ''LogR'''}'; +S.prog = @eeg_tf_rescale; +S.vout = @vout_eeg_tf_rescale; +S.modality = {'EEG'}; + +%========================================================================== function out = eeg_tf_rescale(job) % construct the S struct -S = job; -S.Fname = strvcat(job.Fname); +S.D = job.D{1}; +S.tf.method = fieldnames(job.method); +S.tf.method = S.tf.method{1}; +switch lower(S.tf.method) + case {'logr','diff', 'rel'} + S.tf.Sbaseline = job.method.(S.tf.method).Sbaseline; + case {'log', 'sqrt'} +end + +out.D = spm_eeg_tf_rescale(S); +out.Dfname = {fullfile(out.D.path,out.D.fname)}; + +%========================================================================== +function dep = vout_eeg_tf_rescale(job) +% return dependencies +dep(1) = cfg_dep; +dep(1).sname = 'Rescaled TF Data'; +dep(1).src_output = substruct('.','D'); +dep(1).tgt_spec = cfg_findspec({{'strtype','e'}}); +dep(2) = cfg_dep; +dep(2).sname = 'Rescaled TF Datafile'; +dep(2).src_output = substruct('.','Dfname'); +dep(2).tgt_spec = cfg_findspec({{'filter','mat'}}); diff --git a/config/spm_run_bms_dcm.m b/config/spm_run_bms_dcm.m index c10c9d0..71b137e 100644 --- a/config/spm_run_bms_dcm.m +++ b/config/spm_run_bms_dcm.m @@ -1,43 +1,43 @@ function out = spm_run_bms_dcm (varargin) -% API to compare DCMs on the basis of their log-evidences. Three methods +% API to compare DCMs on the basis of their log-evidences. Three methods % are available to identify the best among alternative models: % -% (1) single subject BMS using Bayes factors +% (1) single subject BMS using Bayes factors % (see Penny et al, NeuroImage, 2004) -% (2) fixed effects group BMS using group Bayes factors +% (2) fixed effects group BMS using group Bayes factors % (see Stephan et al,NeuroImage, 2007) % (3) random effects group BMS using exceedance probabilities % (see Stephan et al,NeuroImage, 2009) % -% Note: All functions use the negative free energy (F) as an approximation +% Note: All functions use the negative free energy (F) as an approximation % to the log model evidence. % % __________________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Chun-Chuan Chen -% $Id: spm_run_bms_dcm.m 2793 2009-02-26 18:29:41Z cc $ +% $Id: spm_run_bms_dcm.m 3363 2009-09-04 15:11:19Z christophe $ job = varargin{1}; fname ='BMS.mat'; % Output filename -fname = [job.dir{1},fname]; % Output filename (including directory) +fname = fullfile(job.dir{1},fname);% Output filename (including directory) F = []; N = {}; % prepare the data -if isempty(job.load_f{1})==0 +if isempty(job.load_f{1})==0 data=job.load_f{1}; load(data); nm = size(F,2); % No of Models - N = 1:nm; + N = 1:nm; else ns = size(job.sess_dcm,2); % No of Subjects nsess = size(job.sess_dcm{1},2); % No of sessions nm = size(job.sess_dcm{1}(1).mod_dcm,1); % No of Models - + % Check if No of models > 2 if nm < 2 msgbox('Please select more than one file') @@ -52,9 +52,11 @@ if (nsess_now == nsess && nmodels== nm) % Check no of sess/mods + ID = zeros(nsess, nm); + for j=1:nm - F_sess = []; + F_sess = []; for h = 1:nsess_now @@ -62,6 +64,29 @@ DCM_tmp = load(tmp{1}); F_sess = [F_sess,DCM_tmp.DCM.F]; + % Data ID verification. At least for now we'll + % re-compute the IDs rather than use the ones stored + % with the DCM. + if job.verify_id + M = DCM_tmp.DCM.M; + + if isfield(DCM_tmp.DCM, 'xY') + Y = DCM_tmp.DCM.xY; %not fMRI + else + Y = DCM_tmp.DCM.Y; % fMRI + end + + if isfield(M,'FS') + try + ID(h, j) = spm_data_id(feval(M.FS,Y.y,M)); + catch + ID(h, j) = spm_data_id(feval(M.FS,Y.y)); + end + else + ID(h, j) = spm_data_id(Y.y); + end + + end end F_mod = sum(F_sess); @@ -69,8 +94,17 @@ N{j} = sprintf('model%d',j); end + + if job.verify_id + failind = find(max(abs(diff(ID))) > eps); + if ~isempty(failind) + out.files{1} = []; + msgbox(['Error: the models for subject ' num2str(k) ... + ' session(s) ' num2str(failind) ' were not fitted to the same data.']); + return + end + end else - out.files{1} = []; msgbox('Error: the number of sessions/models should be the same for all subjects!') return @@ -155,5 +189,15 @@ end + +spm_figure('GetWin','Graphics'); +axes('position', [0.01, 0.01, 0.01, 0.01]); +axis off +if job.verify_id + text(0, 0, 'Data identity has been verified'); +else + text(0, 0, 'Data identity has not been verified'); +end + end diff --git a/config/spm_run_bms_map.m b/config/spm_run_bms_map.m index bbdd969..87ee102 100644 --- a/config/spm_run_bms_map.m +++ b/config/spm_run_bms_map.m @@ -41,28 +41,45 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Maria Joao Rosa -% $Id: spm_run_bms_map.m 2915 2009-03-20 19:15:44Z maria $ +% $Id: spm_run_bms_map.m 3288 2009-07-27 09:23:54Z maria $ % Input % ------------------------------------------------------------------------- -method = job.method; % Inference method -direct = job.dir{1}; -fname = [direct,'BMS.mat']; % Output filename (including directory) -mask = length(job.mask{1}); % Mask image +method = job.method; % Inference method +direct = job.dir{1}; +fname = [direct,'BMS.mat']; % Output filename (including directory) +mask = length(job.mask{1}); % Mask image if mask mask_image = spm_vol(job.mask); % Mask image Vol end -nsamps = str2num(job.nsamp); % Number of samples (nmodels > 3) -do_ecp = job.out_file; % Compute Exceedance Probability +nsamps = str2num(job.nsamp); % Number of samples (nmodels > 3) +do_maps = job.out_file; +do_ecp = do_maps > 0; % Compute Exceedance Probability +do_alpha = do_maps > 1; % Compute Alpha Parameters % Nb. of subjects and models % ------------------------------------------------------------------------- -nsubjs = size(job.sess_map,2); -nmodels = size(job.sess_map{1}(1).mod_map,1); -nsess = size(job.sess_map{1},2); +nsubjs = size(job.sess_map,2); +nmodels = size(job.sess_map{1}(1).mod_map,1); +nsess = size(job.sess_map{1},2); +nnames = size(job.mod_name,2); +names = job.mod_name; + +% Name models +% ------------------------------------------------------------------------- +if nnames < nmodels + for nn=1:nmodels-nnames + names = [names, sprintf('m%d',nn)]; + end +end + +if size(unique(names(1:nmodels)),2) < nmodels, + id = 'Indentical names for different models!'; % Same name! + error(id); +end if nmodels < 2 - msgbox('Please select more than one file') % Models must be > 1! + msgbox('Please select more than one file!') % Models must be > 1! return end @@ -117,9 +134,9 @@ % Load Vols for all subjects/models for i = 1:nmodels, - model_ppm(i).fname = sprintf('%smodel%d_ppm.img',direct,i); - model_ppm(i).descrip = sprintf('PPM: model %d',i); - BMS.map.ffx.ppm{i} = model_ppm(i).fname; + model_ppm(i).fname = sprintf('%s%s_model_ppm.img',direct,names{i}); + model_ppm(i).descrip = sprintf('PPM: %s model',names{i}); + BMS.map.ffx.ppm{i} = model_ppm(i).fname; for s = 1:nsubjs, for se = 1:nsess, @@ -162,16 +179,6 @@ % BMS structure out.files{1} = fname; - - % Create alpha .img files for each model - model_alpha(1:nmodels) = struct(... - 'fname', '',... - 'dim', DIM',... - 'dt', [spm_type('float32') spm_platform('bigend')],... - 'mat', M,... - 'pinfo', [1 0 0]',... - 'n', [1 1], ... - 'descrip', ''); % Create PPM .img files for each model model_exp_r(1:nmodels) = struct(... @@ -184,29 +191,43 @@ 'descrip', ''); if do_ecp - % Create EPM .img files for each model - model_xp(1:nmodels) = struct(... - 'fname', '',... - 'dim', DIM',... - 'dt', [spm_type('float32') spm_platform('bigend')],... - 'mat', M,... - 'pinfo', [1 0 0]',... - 'n', [1 1], ... - 'descrip', ''); + % Create EPM .img files for each model + model_xp(1:nmodels) = struct(... + 'fname', '',... + 'dim', DIM',... + 'dt', [spm_type('float32') spm_platform('bigend')],... + 'mat', M,... + 'pinfo', [1 0 0]',... + 'n', [1 1], ... + 'descrip', ''); + end + + if do_alpha + % Create alpha .img files for each model + model_alpha(1:nmodels) = struct(... + 'fname', '',... + 'dim', DIM',... + 'dt', [spm_type('float32') spm_platform('bigend')],... + 'mat', M,... + 'pinfo', [1 0 0]',... + 'n', [1 1], ... + 'descrip', ''); end % Load Vols for all subjects/models for i = 1:nmodels, - model_alpha(i).fname = sprintf('%smodel%d_alpha.img',direct,i); - model_alpha(i).descrip = sprintf('Alpha: model %d',i); - BMS.map.rfx.alpha{i} = model_alpha(i).fname; - model_exp_r(i).fname = sprintf('%smodel%d_xppm.img',direct,i); - model_exp_r(i).descrip = sprintf('Exp_r: model %d',i); - BMS.map.rfx.ppm{i} = model_exp_r(i).fname; + model_exp_r(i).fname = sprintf('%s%s_model_xppm.img',direct,names{i}); + model_exp_r(i).descrip = sprintf('Exp_r: %s model',names{i}); + BMS.map.rfx.ppm{i} = model_exp_r(i).fname; if do_ecp - model_xp(i).fname = sprintf('%smodel%d_epm.img',direct,i); - model_xp(i).descrip = sprintf('XP: model %d',i); - BMS.map.rfx.epm{i} = model_xp(i).fname; + model_xp(i).fname = sprintf('%s%s_model_epm.img',direct,names{i}); + model_xp(i).descrip = sprintf('XP: %s model',names{i}); + BMS.map.rfx.epm{i} = model_xp(i).fname; + end + if do_alpha + model_alpha(i).fname = sprintf('%s%s_model_alpha.img',direct,names{i}); + model_alpha(i).descrip = sprintf('Alpha: %s model',names{i}); + BMS.map.rfx.alpha{i} = model_alpha(i).fname; end for s = 1:nsubjs, for se = 1:nsess, @@ -227,10 +248,10 @@ end end - % Create files - model_alpha = spm_create_vol(model_alpha); - model_exp_r = spm_create_vol(model_exp_r); - if do_ecp, model_xp = spm_create_vol(model_xp); end + % Create files + model_exp_r = spm_create_vol(model_exp_r); + if do_ecp, model_xp = spm_create_vol(model_xp); end + if do_alpha, model_alpha = spm_create_vol(model_alpha); end % Save data and BMS BMS.fname = fname; @@ -334,41 +355,42 @@ if Nvoxels > 0 % Initialise results - alpha_total = zeros(Nvoxels,nmodels); exp_r_total = zeros(Nvoxels,nmodels); if do_ecp, xp_total = zeros(Nvoxels,nmodels); end + if do_alpha, alpha_total = zeros(Nvoxels,nmodels); end % Do BMS in all voxels of slice z for n = 1:Nvoxels, lme = z_models(:,:,non_nan(n)); % Group BMS [alpha,exp_r,xp] = spm_BMS(lme,nsamps,0,0,do_ecp); - alpha_total(n,:) = alpha; % Dirichlet par. exp_r_total(n,:) = exp_r; % Cond. Expecta. if do_ecp, xp_total(n,:) = xp; end % Exceeda. Prob. + if do_alpha, alpha_total(n,:) = alpha; end % Dirichlet par. end % Write images for i = 1:nmodels, - j(non_nan) = alpha_total(:,i); - model_alpha(i) = spm_write_plane(model_alpha(i),j,z); j(non_nan) = exp_r_total(:,i); model_exp_r(i) = spm_write_plane(model_exp_r(i),j,z); if do_ecp j(non_nan) = xp_total(:,i); model_xp(i) = spm_write_plane(model_xp(i),j,z); end + if do_alpha + j(non_nan) = alpha_total(:,i); + model_alpha(i) = spm_write_plane(model_alpha(i),j,z); + end end else % Write images when Nvoxels = 0 for i = 1:nmodels, - model_alpha(i) = spm_write_plane(model_alpha(i),j,z); model_exp_r(i) = spm_write_plane(model_exp_r(i),j,z); if do_ecp, model_xp(i) = spm_write_plane(model_xp(i),j,z); end + if do_alpha, model_alpha(i) = spm_write_plane(model_alpha(i),j,z); end end end - - + end end % Loop over slices diff --git a/config/spm_run_bms_vis.m b/config/spm_run_bms_vis.m index b69a01c..8b6b051 100644 --- a/config/spm_run_bms_vis.m +++ b/config/spm_run_bms_vis.m @@ -13,12 +13,12 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % Maria Joao Rosa -% $Id: spm_run_bms_vis.m 2788 2009-02-25 16:42:23Z maria $ +% $Id: spm_run_bms_vis.m 3288 2009-07-27 09:23:54Z maria $ % Input % ------------------------------------------------------------------------- if isempty(varargin) - job.file{1}=''; job.img{1}=''; job.thres = []; job.scale = []; + job.file{1}=''; job.img{1}=''; job.thres = []; job.scale = []; job.k=[]; else job = varargin{1}; end @@ -26,6 +26,7 @@ image = length(job.img{1}); thres_b = length(job.thres); odds_b = length(job.scale); +ext_thre = length(job.k); % Initialise SPM Interactive window % ------------------------------------------------------------------------- @@ -45,13 +46,14 @@ % Load BMS load(file_fname); +wd = fileparts(file_fname); % Select results (.img) from BMS Maps % ------------------------------------------------------------------------- if image post = job.img{1}; else - post = spm_select(1,'image','Select BMS Maps results (ex: ppm, alpha or epm image)'); + post = spm_select(1,'image','Select BMS Maps results (ex: ppm, alpha or epm image)',[],wd,'.img'); end % Select threshold to apply to image @@ -62,6 +64,14 @@ threshold = spm_input('Probability Threshold:', '+1', 'r', '0.5', [1, inf]); end +% Extent threshold +% ------------------------------------------------------------------------- +if ext_thre + k = job.k; +else + k = spm_input('& extent threshold {voxels}','+1','r',0,1,[0,Inf]); +end + % Select scale % ------------------------------------------------------------------------- if odds_b @@ -88,7 +98,7 @@ [pathstr,name_image] = fileparts(V.fname); undersc = find(name_image=='_'); res_name = name_image(undersc(end)+1); -subset_model = name_image(1:undersc(end)-1); +subset_model = name_image(1:undersc(end-1)-1); % Show results being displayed on graphics window switch res_name @@ -126,7 +136,7 @@ % ------------------------------------------------------------------------- if ~isempty(z_above) - z_ps = z_above; + z_orig = z_above; % Log odds transform if odds z_odds = log(z_above./(ones(1,length(z_above))-z_above)); @@ -136,14 +146,32 @@ odds = 0; % Don't plot odds end end + + % Calculate extent threshold filtering + % --------------------------------------------------------------------- + A = spm_clusters(xyz_above); + Q = []; + for i = 1:max(A) + j = find(A == i); + if length(j) >= k; Q = [Q j]; end + end + + % ...eliminate voxels + %---------------------------------------------------------------------- + Z = z_above(:,Q); + XYZ = xyz_above(:,Q); + z_ps = z_orig(:,Q); + if isempty(Q) + warning(sprintf('No voxels survive extent threshold k=%0.2g',k)) + end % Save data in xSPM structure - voxels_mm = M*[xyz_above;ones(1,size(xyz_above,2))]; + voxels_mm = M*[XYZ;ones(1,size(XYZ,2))]; voxels_mm = voxels_mm(1:3,:); xSPM.swd = file_fname; xSPM.STAT = ''; - xSPM.Z = z_above; - xSPM.XYZ = xyz_above; + xSPM.Z = Z; + xSPM.XYZ = XYZ; xSPM.XYZmm = voxels_mm; xSPM.xVol.M = M; xSPM.xVol.DIM = DIM; @@ -151,7 +179,7 @@ xSPM.M = M; xSPM.iM = iM; xSPM.n = 1; - xSPM.k = 0; + xSPM.k = k; xSPM.df = []; xSPM.u = threshold; xSPM.STAT = ''; diff --git a/config/spm_run_fmri_est.m b/config/spm_run_fmri_est.m index 6724a1a..20df6d3 100644 --- a/config/spm_run_fmri_est.m +++ b/config/spm_run_fmri_est.m @@ -10,7 +10,7 @@ %_______________________________________________________________________ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging -% $Id: spm_run_fmri_est.m 2928 2009-03-24 08:54:32Z lee $ +% $Id: spm_run_fmri_est.m 3327 2009-08-18 08:27:32Z volkmar $ global defaults @@ -34,28 +34,12 @@ %----------------------------------------------------------------------- cd(fileparts(job.spmmat{:})); -% COMMENTED OUT BY DRG. THIS SHOULD BE TAKEN CARE OF WITHIN SPM_SPM AND -% SPM_SPM_BAYES. REMOVE THIS SECTION ONCE THIS HAS BEEN VERIFIED. -%-If we've gotten to this point we're committed to overwriting files. -% Delete them so we don't get stuck in spm_spm -%----------------------------------------------------------------------- -% files = {'^mask\..{3}$','^ResMS\..{3}$','^RPV\..{3}$',... -% '^beta_.{4}\..{3}$','^con_.{4}\..{3}$','^ResI_.{4}\..{3}$',... -% '^ess_.{4}\..{3}$', '^spm\w{1}_.{4}\..{3}$'}; -% -% for i=1:length(files) -% j = spm_select('List',pwd,files{i}); -% for k=1:size(j,1) -% spm_unlink(deblank(j(k,:))); -% end -% end -% END COMMENTED OUT BY DRG - %======================================================================= % B A Y E S I A N 2nd L E V E L E S T I M A T I O N %======================================================================= if isfield(job.method,'Bayesian2') - %out.spmvar = spm_spm_Bayes(SPM); + SPM = spm_spm_Bayes(SPM); + %out.spmvar = SPM; cd(original_dir); % Change back fprintf('Done\n'); return diff --git a/exec/make_exec.m b/exec/make_exec.m index bbcbb9f..49410b1 100644 --- a/exec/make_exec.m +++ b/exec/make_exec.m @@ -18,8 +18,120 @@ % Copyright (C) 2008 Wellcome Trust Centre for Neuroimaging % John Ashburner -% $Id: make_exec.m 1143 2008-02-07 19:33:33Z spm $ +% $Id: make_exec.m 3226 2009-06-25 18:13:11Z volkmar $ -mcc('-m','-v','-o',['spm_' computer],'exec_spm.m' ,'spm_load.m', '-I',spm('Dir'),'-R','-nojvm') -mcc('-m','-v','-o',['jobman_' computer],'exec_jobman.m','spm_load.m', '-I',spm('Dir'),'-R','-nojvm') +%======================================================================= +%-Files to include explicitly +%======================================================================= +% Matlab compiler will include all files that are referenced explicitly +% in the compiled code. If there is a file missing (e.g. data file, +% (f)eval'ed file), add it to the 'includefiles' list with its full +% path. If you want to add a directory and all of its contents, add it to +% the 'includedirs' list with its full path. +% By default, all files in spm('dir') are included and all subdirectories +% except matlabbatch, config and exec. Selected files from these +% directories will be included if they are referenced from any compiled +% function. Including spm('dir') instead would cause unwanted side +% effects during batch initialisation. +%-List of files +%----------------------------------------------------------------------- +[includefiles includedirs] = cfg_getfile('FPList',spm('dir'),'.*'); + +%-Clean up list of directories +%----------------------------------------------------------------------- +includedirs = includedirs(~(strcmp(includedirs,fullfile(spm('dir'),'config'))| ... + strcmp(includedirs,fullfile(spm('dir'),'exec'))| ... + strcmp(includedirs,fullfile(spm('dir'),'matlabbatch')))); + +includefiles = [includefiles; includedirs]; +%-Add '-a' switch for each file to include +%----------------------------------------------------------------------- +sw = cell(size(includefiles)); +[sw{:}] = deal('-a'); +tmp = [sw includefiles]'; +includefiles = tmp(:); + +%======================================================================= +%-Configuration management +%======================================================================= +% 1) locate all currently used batch configs +% 2) copy them to fullfile(spm('dir'),'exec') with unique names +% 3) create fullfile(spm('dir'),'exec','cfg_master.m') which calls the +% configs at runtime +% compiled spm_jobman will execute this file and add the applications + +%-Locate batch configs and copy them +%----------------------------------------------------------------------- +apps = which('cfg_mlbatch_appcfg','-all'); +cfgfiles = cell(1,2*numel(apps)+2); +for k = 1:numel(apps) + cfgfiles{2*k-1} = '-a'; + cfgfiles{2*k} = fullfile(spm('dir'),'exec',sprintf('cfg_mlbatch_appcfg_%d.m',k)); + copyfile(apps{k}, cfgfiles{2*k}); +end + +%-Create code for cfg_master.m +%----------------------------------------------------------------------- +cfgfiles{end-1} ='-a'; +cfgfiles{end} = fullfile(spm('dir'),'exec','cfg_master.m'); +fid = fopen(cfgfiles{end},'w'); +fprintf(fid,'function cfg_master\n'); +for k = 1:numel(apps) + fprintf(fid,'[cfg, def] = cfg_mlbatch_appcfg_%d;\n', k); + if strcmp(apps{k},... + fullfile(spm('dir'),'config','cfg_mlbatch_appcfg.m')) + % create code to insert toolbox config + %-Toolbox autodetection + %-Get the list of toolbox directories + tbxdir = fullfile(spm('Dir'),'toolbox'); + d = dir(tbxdir); d = {d([d.isdir]).name}; + dd = regexp(d,'^\.'); + %(Beware, regexp returns an array if input cell array is of dim 0 or 1) + if ~iscell(dd), dd = {dd}; end + d = {'' d{cellfun('isempty',dd)}}; + ft = {}; + ftc = {}; + %-Look for '*_cfg_*.m' or '*_config_*.m' files in these directories + for i=1:length(d) + d2 = fullfile(tbxdir,d{i}); + di = dir(d2); di = {di(~[di.isdir]).name}; + f2 = regexp(di,'.*_cfg_.*\.m$'); + if ~iscell(f2), f2 = {f2}; end + fi = {di{~cellfun('isempty',f2)}}; + if ~isempty(fi) + ft = {ft{:} fi{:}}; + else + % try *_config_*.m files, if toolbox does not have '*_cfg_*.m' files + f2 = regexp(di,'.*_config_.*\.m$'); + if ~iscell(f2), f2 = {f2}; end + fi = {di{~cellfun('isempty',f2)}}; + ftc = {ftc{:} fi{:}}; + end; + end + if ~isempty(ft)||~isempty(ftc) + if isempty(ft) + ftstr = ''; + else + ft = cellfun(@(cft)strtok(cft,'.'),ft,'UniformOutput',false); + ftstr = sprintf('%s ', ft{:}); + end + if isempty(ftc) + ftcstr = ''; + else + ftc = cellfun(@(cftc)strtok(cftc,'.'),ftc,'UniformOutput',false); + ftcstr = sprintf('cfg_struct2cfg(%s) ', ftc{:}); + end + % assume that tools are the last thing in SPM config + fprintf(fid,'cfg.values{end}.values = {%s %s};\n', ftstr, ftcstr); + end + end + fprintf(fid,'cfg_util(''addapp'', cfg, def);\n'); +end +fclose(fid); + +%======================================================================= +%-Compile +%======================================================================= +mcc('-m','-v','-o',['spm_' computer],'exec_spm.m' ,'spm_load.m', '-I',spm('Dir'),includefiles{:},cfgfiles{:}) +mcc('-m','-v','-o',['jobman_' computer],'exec_jobman.m','spm_load.m', '-I',spm('Dir'),includefiles{:},cfgfiles{:}) diff --git a/external/fieldtrip/private/apply_montage.m b/external/fieldtrip/private/apply_montage.m index e7a0f07..ccf0716 100644 --- a/external/fieldtrip/private/apply_montage.m +++ b/external/fieldtrip/private/apply_montage.m @@ -7,7 +7,11 @@ % forward computation and source reconstruction of the data. % % Use as -% [sens] = apply_montage(sens, montage, ...) +% [sens] = apply_montage(sens, montage, ...) +% [data] = apply_montage(data, montage, ...) +% [montage] = apply_montage(montage1, montage2, ...) +% where the input is a FieldTrip sensor definition as obtained from READ_SENS +% or a FieldTrip raw data structure as obtained from PREPROCESSING. % % A montage is specified as a structure with the fields % montage.tra = MxN matrix @@ -18,11 +22,35 @@ % 'keepunused' string, 'yes' or 'no' (default = 'no') % 'inverse' string, 'yes' or 'no' (default = 'no') % +% If the first input is a montage, then the second input montage will be +% applied to the first. In effect the resulting montage will first do +% montage1, then montage2. +% % See also READ_SENS, TRANSFORM_SENS % Copyright (C) 2008, Robert Oostenveld % % $Log: apply_montage.m,v $ +% Revision 1.19 2009/07/02 16:14:15 roboos +% allow to apply one montage on another one +% +% Revision 1.18 2009/07/02 09:18:41 vlalit +% Fixing a bug in building an inverse montage (confusion between 'montage' and 'tra') +% +% Revision 1.17 2009/07/01 09:21:37 roboos +% changed handling of rank-reduced montage for inversion, give warning +% removed the modification by vladimir for the sequential application of montages +% +% Revision 1.16 2009/06/27 13:24:54 vlalit +% Additional fixes to make custom balancing work. +% +% Revision 1.15 2009/06/26 17:39:17 vlalit +% Added the possiblity to handle custom montages applied to MEG sensors (for removing +% spatial confounds). Hopefully there won't be major side effects. +% +% Revision 1.14 2009/06/17 10:13:05 roboos +% improved documentation +% % Revision 1.13 2009/03/26 11:07:40 roboos % start with an explicit check on the channel number % @@ -70,6 +98,12 @@ keepunused = keyval('keepunused', varargin{:}); if isempty(keepunused), keepunused = 'no'; end inverse = keyval('inverse', varargin{:}); if isempty(inverse), inverse = 'no'; end +% check the consistency of the input sensor array or data +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % the input data structure is also a montage, i.e. apply the montages sequentially + sens.label = sens.labelnew; +end + % check the consistency of the montage if size(montage.tra,1)~=length(montage.labelnew) error('the number of channels in the montage is inconsistent'); @@ -79,9 +113,15 @@ if strcmp(inverse, 'yes') % apply the inverse montage, i.e. undo a previously applied montage - tmp.labelnew = montage.labelorg; - tmp.labelorg = montage.labelnew; - tmp.tra = inv(montage.tra); + tmp.labelnew = montage.labelorg; % swap around + tmp.labelorg = montage.labelnew; % swap around + tmp.tra = full(montage.tra); + if rank(tmp.tra) < length(tmp.tra) + warning('the linear projection for the montage is not full-rank, the resulting data will have reduced dimensionality'); + tmp.tra = pinv(tmp.tra); + else + tmp.tra = inv(tmp.tra); + end montage = tmp; end @@ -150,10 +190,17 @@ montage.tra = sparse(montage.tra(:,selmont)); montage.labelorg = montage.labelorg(selmont); -if isfield(sens, 'tra') +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % apply the montage on top of the other montage + sens = rmfield(sens, 'label'); + sens.tra = montage.tra * sens.tra; + sens.labelnew = montage.labelnew; + +elseif isfield(sens, 'tra') % apply the montage to the sensor array sens.tra = montage.tra * sens.tra; sens.label = montage.labelnew; + elseif isfield(sens, 'trial') % apply the montage to the data that was preprocessed using fieldtrip Ntrials = numel(sens.trial); @@ -177,5 +224,3 @@ function y = indx2logical(x, n) y = false(1,n); y(x) = true; - - diff --git a/external/fieldtrip/private/beamformer_dics.m b/external/fieldtrip/private/beamformer_dics.m index fe84b22..3cf9393 100644 --- a/external/fieldtrip/private/beamformer_dics.m +++ b/external/fieldtrip/private/beamformer_dics.m @@ -47,6 +47,9 @@ % Copyright (C) 2003-2008, Robert Oostenveld % % $Log: beamformer_dics.m,v $ +% Revision 1.15 2009/06/17 13:40:37 roboos +% small change in the order of the code for subspace projection +% % Revision 1.14 2009/05/14 19:25:12 roboos % added a FIXME comment % @@ -263,6 +266,13 @@ % compute the leadfield lf = compute_leadfield(dip.pos(i,:), grad, vol, 'reducerank', reducerank, 'normalize', normalize, 'normalizeparam', normalizeparam); end + if isfield(dip, 'subspace') + % do subspace projection of the forward model + lf = dip.subspace{i} * lf; + % the cross-spectral density becomes voxel dependent due to the projection + Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; + invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); + end if fixedori % compute the leadfield for the optimal dipole orientation % subsequently the leadfield for only that dipole orientation will be used for the final filter computation @@ -272,13 +282,6 @@ lf = lf * eta; dipout.ori{i} = eta; end - if isfield(dip, 'subspace') - % do subspace projection of the forward model - lf = dip.subspace{i} * lf; - % the cross-spectral density becomes voxel dependent due to the projection - Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; - invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); - end if isfield(dip, 'filter') % use the provided filter filt = dip.filter{i}; @@ -327,6 +330,13 @@ % compute the leadfield lf = compute_leadfield(dip.pos(i,:), grad, vol, 'reducerank', reducerank, 'normalize', normalize); end + if isfield(dip, 'subspace') + % do subspace projection of the forward model + lf = dip.subspace{i} * lf; + % the cross-spectral density becomes voxel dependent due to the projection + Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; + invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); + end if fixedori % compute the leadfield for the optimal dipole orientation % subsequently the leadfield for only that dipole orientation will be used for the final filter computation @@ -336,14 +346,6 @@ lf = lf * eta; dipout.ori{i} = eta; end - if isfield(dip, 'subspace') - % do subspace projection of the forward model - lf = dip.subspace{i} * lf; - % the cross-spectral density becomes voxel dependent due to the projection - Cr = dip.subspace{i} * Cr_pre_subspace; - Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; - invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); - end if isfield(dip, 'filter') % use the provided filter filt = dip.filter{i}; @@ -358,6 +360,7 @@ end csd = filt*Cr; % Gross eqn. 6 if powlambda1 + % FIXME this should use the dipole orientation with maximum power coh = lambda1(csd)^2 / (pow * Pr); % Gross eqn. 9 elseif powtrace coh = norm(csd)^2 / (pow * Pr); @@ -504,7 +507,7 @@ % standard Matlab function, except that the default tolerance is twice as % high. % Copyright 1984-2004 The MathWorks, Inc. -% $Revision: 1.14 $ $Date: 2009/05/14 19:25:12 $ +% $Revision: 1.15 $ $Date: 2009/06/17 13:40:37 $ % default tolerance increased by factor 2 (Robert Oostenveld, 7 Feb 2004) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function X = pinv(A,varargin) diff --git a/external/fieldtrip/private/channelposition.m b/external/fieldtrip/private/channelposition.m index 47fd1d6..b7742af 100644 --- a/external/fieldtrip/private/channelposition.m +++ b/external/fieldtrip/private/channelposition.m @@ -8,6 +8,27 @@ % Copyright (C) 2009, Robert Oostenveld & Vladimir Litvak % % $Log: channelposition.m,v $ +% Revision 1.9 2009/08/10 12:33:57 vlalit +% Adding thresholds to ignore small values in the tra also for Neuromag and planar +% +% Revision 1.8 2009/07/08 07:42:50 jansch +% undone previous adjustment. convention now is that sequential balancing steps +% should be recorded in the grad-structure itself; rather than having +% balance.XXX and balance.YYY, it should be balance.XXX_YYY and +% balance.current = 'XXX_YYY' +% +% Revision 1.7 2009/07/07 08:03:29 jansch +% allowing for sequential unbalancing, convention being that the individual +% balancing steps in balance.current are separated by '_', and the chronological +% ordering of the balancing steps are from right to left +% +% Revision 1.6 2009/06/26 17:39:04 vlalit +% Added the possiblity to handle custom montages applied to MEG sensors (for removing +% spatial confounds). Hopefully there won't be major side effects. +% +% Revision 1.5 2009/06/03 09:49:03 roboos +% change in whitespace +% % Revision 1.4 2009/04/03 08:14:27 vlalit % getting rid of the dependence on statistics toolbox I accidentally introduced by using % nanmin. @@ -23,24 +44,29 @@ % new function, will be used as helper function in prepare_layout % -switch senstype(sens) +if isfield(sens, 'balance') && ~strcmp(sens.balance.current, 'none') + fnames = setdiff(fieldnames(sens.balance), 'current'); + indx = find(ismember(fnames, sens.balance.current)); + + if length(indx)==1, + % undo the synthetic gradient balancing + fprintf('undoing the %s balancing\n', sens.balance.current); + sens = apply_montage(sens, getfield(sens.balance, sens.balance.current), 'inverse', 'yes'); + sens.balance.current = 'none'; + else + warning('cannot undo %s balancing\n', sens.balance.current); + end +end +switch senstype(sens) case {'ctf151', 'ctf275' 'bti148', 'bti248'} - if isfield(sens, 'balance') && ~strcmp(sens.balance.current, 'none') - - % undo the synthetic gradient balancing - fprintf('undoing the %s balancing\n', sens.balance.current); - sens = apply_montage(sens, getfield(sens.balance, sens.balance.current), 'inverse', 'yes'); - sens.balance.current = 'none'; - end - % remove the non-MEG channels altogether sel = chantype(sens, 'meg'); sens.label = sens.label(sel); sens.tra = sens.tra(sel,:); % subsequently remove the unused coils - used = any(abs(sens.tra)<10*eps, 1); % allow a little bit of rounding-off error + used = any(abs(sens.tra)<0.5, 1); % allow a little bit of rounding-off error sens.pnt = sens.pnt(used,:); sens.ori = sens.ori(used,:); sens.tra = sens.tra(:,used); @@ -49,7 +75,7 @@ dist = sqrt(sum((sens.pnt - repmat(mean(sens.pnt), size(sens.pnt, 1), 1)).^2, 2)); % put the corresponding distances instead of non-zero tra entries - dist = (abs(sens.tra)>10*eps).*repmat(dist', size(sens.tra, 1), 1); + dist = (abs(sens.tra)>0.5).*repmat(dist', size(sens.tra, 1), 1); % put nans instead of the zero entries dist(~dist) = inf; @@ -79,8 +105,8 @@ if length(sel)==2 ind = [ind; i]; lab(i,:) = {ch1, ch2}; - meanpnt1 = mean(sens.pnt(find(sens.tra(sel(1),:)),:), 1); - meanpnt2 = mean(sens.pnt(find(sens.tra(sel(2),:)),:), 1); + meanpnt1 = mean(sens.pnt(abs(sens.tra(sel(1),:))>0.5, :), 1); + meanpnt2 = mean(sens.pnt(abs(sens.tra(sel(2),:))>0.5, :), 1); pnt(i,:) = mean([meanpnt1; meanpnt2], 1); end end @@ -106,8 +132,8 @@ if (length(sel)==2) ind = [ind; i]; lab(i,:) = {ch1, ch2}; - meanpnt1 = mean(sens.pnt(find(sens.tra(sel(1),:)),:), 1); - meanpnt2 = mean(sens.pnt(find(sens.tra(sel(2),:)),:), 1); + meanpnt1 = mean(sens.pnt(abs(sens.tra(sel(1),:))>0.5,:), 1); + meanpnt2 = mean(sens.pnt(abs(sens.tra(sel(2),:))>0.5,:), 1); pnt(i,:) = mean([meanpnt1; meanpnt2], 1); end end @@ -135,9 +161,9 @@ if (length(sel)==3) ind = [ind; i]; lab(i,:) = {ch1, ch2, ch3}; - meanpnt1 = mean(sens.pnt(find(sens.tra(sel(1),:)),:), 1); - meanpnt2 = mean(sens.pnt(find(sens.tra(sel(2),:)),:), 1); - meanpnt3 = mean(sens.pnt(find(sens.tra(sel(3),:)),:), 1); + meanpnt1 = mean(sens.pnt(abs(sens.tra(sel(1),:))>0.5,:), 1); + meanpnt2 = mean(sens.pnt(abs(sens.tra(sel(2),:))>0.5,:), 1); + meanpnt3 = mean(sens.pnt(abs(sens.tra(sel(3),:))>0.5,:), 1); pnt(i,:) = mean([meanpnt1; meanpnt2; meanpnt3], 1); end end @@ -172,7 +198,7 @@ n = size(lab,2); % this is to fix the planar layouts, which cannot be plotted anyway if n>1 && size(lab, 1)>1 %this is to prevent confusion when lab happens to be a row array - pnt = repmat(pnt, n, 1); + pnt = repmat(pnt, n, 1); end -lab = lab(:); \ No newline at end of file +lab = lab(:); diff --git a/external/fieldtrip/private/channelselection.m b/external/fieldtrip/private/channelselection.m index 6407bde..390b5a2 100644 --- a/external/fieldtrip/private/channelselection.m +++ b/external/fieldtrip/private/channelselection.m @@ -14,8 +14,9 @@ % E.g. % 'all' is replaced by all channels in the datafile % 'gui' a graphical user interface will pop up to select the channels -% 'C*' is replaced by all channels that mactch the wildcard, e.g. C1, C2, C3, ... -% '*1' is replaced by all channels that mactch the wildcard, e.g. C1, P1, F1, ... +% 'C*' is replaced by all channels that match the wildcard, e.g. C1, C2, C3, ... +% '*1' is replaced by all channels that match the wildcard, e.g. C1, P1, F1, ... +% 'M*1' is replaced by all channels that match the wildcard, e.g. MEG0111, MEG0131, MEG0131, ... % 'MEG' is replaced by all MEG channels (works for CTF, 4D and Neuromag) % 'MEGREF' is replaced by all MEG reference channels (works for CTF and 4D) % 'EEG' is replaced by all recognized EEG channels (this is system dependent) @@ -48,6 +49,15 @@ % Copyright (C) 2003-2009, Robert Oostenveld % % $Log: channelselection.m,v $ +% Revision 1.39 2009/08/04 13:54:20 roboos +% allow datachannel as single string +% +% Revision 1.38 2009/07/08 07:27:37 roboos +% improved wildcard selection, now also in middle like "M*1" +% +% Revision 1.37 2009/06/19 16:51:30 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.36 2009/02/18 07:57:07 roboos % added support for selection based on wildcards (like 'C*' and '*1') % @@ -114,6 +124,11 @@ channel = {channel}; end +if ~iscell(datachannel) + % ensure that a single input argument like 'all' also works + datachannel = {datachannel}; +end + % ensure that both inputs are column vectors channel = channel(:); datachannel = datachannel(:); @@ -152,11 +167,20 @@ findreg = []; for i=1:length(channel) if length(channel{i})>1 && channel{i}(1)=='*' + % the wildcard is at the start labelreg = labelreg | ~cellfun(@isempty, regexp(datachannel, ['.*' channel{i}(2:end) '$'], 'once')); findreg = [findreg i]; elseif length(channel{i})>1 && channel{i}(end)=='*' + % the wildcard is at the end labelreg = labelreg | ~cellfun(@isempty, regexp(datachannel, ['^' channel{i}(1:end-1) '.*'], 'once')); findreg = [findreg i]; + elseif length(channel{i})>1 && any(channel{i}=='*') + % the wildcard is in the middle + sel = strfind(channel{i}, '*'); + str1 = channel{i}(1:(sel-1)); + str2 = channel{i}((sel+1):end); + labelreg = labelreg | ~cellfun(@isempty, regexp(datachannel, ['^' str1 '.*' str2 '$'], 'once')); + findreg = [findreg i]; end end labelreg = datachannel(labelreg); @@ -219,7 +243,7 @@ labelmeg = datachannel(strncmp('MEG', datachannel, length('MEG'))); labeleeg = datachannel(strncmp('EEG', datachannel, length('EEG'))); - case {'biosemi128', 'biosemi256', 'egi64', 'egi128', 'egi256', 'ext1020'} + case {'biosemi64', 'biosemi128', 'biosemi256', 'egi64', 'egi128', 'egi256', 'ext1020'} % use an external helper function to define the list with EEG channel names labeleeg = senslabel(senstype(datachannel)); diff --git a/external/fieldtrip/private/checkconfig.m b/external/fieldtrip/private/checkconfig.m index d7409cb..2b71823 100644 --- a/external/fieldtrip/private/checkconfig.m +++ b/external/fieldtrip/private/checkconfig.m @@ -44,6 +44,15 @@ % Copyright (C) 2007-2008, Robert Oostenveld, Saskia Haegens % % $Log: checkconfig.m,v $ +% Revision 1.18 2009/08/05 13:03:55 roboos +% changed selection of file based on 'gui' +% +% Revision 1.17 2009/07/15 12:10:07 jansch +% added subspace and keepsubspace for subcfg dics and lcmv +% +% Revision 1.16 2009/06/04 13:41:33 marvger +% renamed mvlap case +% % Revision 1.15 2009/05/22 13:20:18 marvger % added case for mvlap method % @@ -403,6 +412,8 @@ 'reducerank' 'keepcsd' 'realfilter' + 'subspace' + 'keepsubspace' }; case 'lcmv' @@ -420,6 +431,7 @@ 'reducerank' 'keepcov' 'subspace' + 'keepsubspace' }; case 'pcc' @@ -459,7 +471,7 @@ 'reducerank' }; - case 'mvlap' + case 'mvl' fieldname = {}; otherwise @@ -501,14 +513,11 @@ if ~isempty(cfg.dataset) if strcmp(cfg.dataset, 'gui'); - d = uigetdir; - if d==0 - [f, p] = uigetfile; - if f==0 - error('You should select a dataset file or directory'); - else - d = fullfile(p, f); - end + [f, p] = uigetfile('*.*', 'Select a file'); + if isequal(f, 0) + error('User pressed cancel'); + else + d = fullfile(p, f); end cfg.dataset = d; end diff --git a/external/fieldtrip/private/checkdata.m b/external/fieldtrip/private/checkdata.m index 5dbac44..ce5575c 100644 --- a/external/fieldtrip/private/checkdata.m +++ b/external/fieldtrip/private/checkdata.m @@ -30,9 +30,32 @@ % [data] = checkdata(data, 'senstype', {'ctf151', 'ctf275'}), e.g. in megrealign % [data] = checkdata(data, 'datatype', {'timelock', 'freq'}), e.g. in sourceanalysis -% Copyright (C) 2007-2008, Robert Oostenveld +% Copyright (C) 2007-2009, Robert Oostenveld % % $Log: checkdata.m,v $ +% Revision 1.18 2009/08/24 08:57:01 jansch +% some changes regarding dealing with dim in source data. made a temporary +% bypass for jan excluding sourcedata from fixdimord. this is done to be able +% to further develop this part of the code without creating an entirely parallel +% version of it. eventually the bypass will be removed +% +% Revision 1.17 2009/08/03 15:08:24 ingnie +% also send source and volume data to fixdimord +% +% Revision 1.16 2009/08/03 11:55:11 roboos +% added comp2raw conversion +% +% Revision 1.15 2009/07/15 12:11:19 jansch +% experimental bypass of sourcedescriptives to create source with single trial +% power per voxel: dimord = 'rpt_pos', undocumented +% +% Revision 1.14 2009/07/06 09:38:24 jansch +% added fixinside to source2volume +% +% Revision 1.13 2009/06/15 12:56:23 roboos +% added a fixcoh function (for sparse->full) +% added some explicit error handling to fixcsd function +% % Revision 1.12 2009/04/17 09:12:12 jansch % fixed bug in freq2raw and another typo in source2volume % @@ -243,6 +266,8 @@ isvolume = datatype(data, 'volume'); issource = datatype(data, 'source'); isdip = datatype(data, 'dip'); +ismvar = datatype(data, 'mvar'); +isfreqmvar = datatype(data, 'freqmvar'); % FIXME use the istrue function on ismeg and hasxxx options @@ -274,12 +299,24 @@ fprintf('the input is source data with %d positions\n', nsource); elseif isdip fprintf('the input is dipole data\n'); + elseif ismvar + fprintf('the input is mvar data\n'); + elseif isfreqmvar + fprintf('the input is freqmvar data\n'); end end % give feedback -if isfreq || istimelock || iscomp - % ensure consistency between the dimord string and the axes that describe the data dimensions - data = fixdimord(data); +%HACK for jan to bypass source and volume data to enter fixdimord +[st,result] = system('whoami'); +if isempty(strfind(result,'jan')) + if isfreq || istimelock || iscomp || issource || isvolume + % ensure consistency between the dimord string and the axes that describe the data dimensions + data = fixdimord(data); + end +else + if isfreq || istimelock || iscomp + data = fixdimord(data); + end end if istimelock @@ -325,6 +362,10 @@ okflag = okflag + issource; case 'dip' okflag = okflag + isdip; + case 'mvar' + okflag = okflag + ismvar; + case 'freqmvar' + okflag = okflag + isfreqmvar; end % switch dtype end % for dtype @@ -361,6 +402,11 @@ isfreq = 0; israw = 1; okflag = 1; + elseif isequal(dtype(iCell), {'raw'}) && iscomp + data = comp2raw(data); + iscomp = 0; + israw = 1; + okflag = 1; end end % for iCell end % if okflag @@ -472,7 +518,7 @@ if isfield(data, 'xgrid'), data = rmfield(data, 'xgrid'); end if isfield(data, 'ygrid'), data = rmfield(data, 'ygrid'); end if isfield(data, 'zgrid'), data = rmfield(data, 'zgrid'); end - + % the following section is to make a dimord-consistent representation of % volume and source data, taking trials, time and frequency into account if isequal(hasdimord, 'yes') && ~isfield(data, 'dimord') @@ -488,6 +534,19 @@ end if isfield(data, 'trial') && isstruct(data.trial) Nrpt = length(data.trial); + elseif isfield(data, 'avg') && isfield(data.avg, 'mom') && strcmp(sourcedimord, 'rpt_pos'), + Npos = size(data.pos,1); + Nrpt = length(data.cumtapcnt); + tmpmom = zeros(Npos, size(data.avg.mom{data.inside(1)},2)); + tmpmom(data.inside,:) = cat(1,data.avg.mom{data.inside}); + tmppow = zeros(Npos, Nrpt); + tapcnt = [0;cumsum(data.cumtapcnt)]; + for k = 1:Nrpt + Ntap = tapcnt(k+1)-tapcnt(k); + tmppow(data.inside,k) = sum(abs(tmpmom(data.inside,(tapcnt(k)+1):tapcnt(k+1))).^2,2)./Ntap; + end + data.pow = tmppow'; + data = rmfield(data, 'avg'); else Nrpt = 1; end @@ -538,12 +597,40 @@ data = rmfield(data, 'trial'); end end - + % ensure consistent dimensions of the source reconstructed data % reshape each of the source reconstructed parameters - dim = [data.dim 1]; - - param = parameterselection('all', data); + if isfield(data, 'dim'), + dim = [data.dim 1]; + else + %HACK + dimtok = tokenize(data.dimord, '_'); + for i=1:length(dimtok) + if strcmp(dimtok(i),'pos') + dim(1,i) = size(getsubfield(data,dimtok{i}),1); + elseif strcmp(dimtok(i),'rpt') + dim(1,i) = nan; + else + dim(1,i) = length(getsubfield(data,dimtok{i})); + end + end + i = find(isnan(dim)); + if ~isempty(i) + n = fieldnames(data); + for ii=1:length(n) + numels(1,ii) = numel(getfield(data,n{ii})); + end + nrpt = numels./prod(dim(setdiff(1:length(dim),i))); + nrpt = nrpt(nrpt==round(nrpt)); + dim(i) = max(nrpt); + end + if numel(dim)==1, dim(1,2) = 1; end; + end + + if issource, exclude = {'inside' 'fwhm' 'leadfield' 'q' 'rough'}; end + if isvolume, exclude = { 'fwhm' 'leadfield' 'q' 'rough'}; end + + param = setdiff(parameterselection('all', data), exclude); for i=1:length(param) if any(param{i}=='.') % the parameter is nested in a substructure, which can have multiple elements (e.g. source.trial(1).pow, source.trial(2).pow, ...) @@ -611,10 +698,14 @@ if ~isempty(cmbrepresentation) if istimelock data = fixcov(data, cmbrepresentation); - elseif isfreq + elseif isfreq && isfield(data, 'cohspctrm') + data = fixcoh(data, cmbrepresentation, channelcmb); + elseif isfreq && ~isfield(data, 'cohspctrm') + data = fixcsd(data, cmbrepresentation, channelcmb); + elseif isfreqmvar data = fixcsd(data, cmbrepresentation, channelcmb); else - error('This function requires data with a covariance or cross-spectrum'); + error('This function requires data with a covariance, coherence or cross-spectrum'); end end % cmbrepresentation @@ -626,9 +717,9 @@ % represent the covariance matrix in a particular manner %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function data = fixcov(data, desired) -if isfield(data, 'cov') && ~isfield(data, 'labelcmb') +if isfield(data, 'cov') && ~isfield(data, 'labelcmb') current = 'full'; -elseif isfield(data, 'cov') && isfield(data, 'labelcmb') +elseif isfield(data, 'cov') && isfield(data, 'labelcmb') current = 'sparse'; else error('Could not determine the current representation of the covariance matrix'); @@ -637,31 +728,87 @@ % nothing to do elseif strcmp(current, 'full') && strcmp(desired, 'sparse') % FIXME should be implemented + error('not yet implemented'); elseif strcmp(current, 'sparse') && strcmp(desired, 'full') % FIXME should be implemented + error('not yet implemented'); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% represent the covariance matrix in a particular manner +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function data = fixcoh(data, desired, channelcmb) +if isfield(data, 'cohspctrm') && ~isfield(data, 'labelcmb') + current = 'full'; +elseif isfield(data, 'cohspctrm') && isfield(data, 'labelcmb') + current = 'sparse'; +else + error('Could not determine the current representation of the coherence'); +end +if isequal(current, desired) + % nothing to do +elseif strcmp(current, 'full') && strcmp(desired, 'sparse') + % FIXME should be implemented + error('not yet implemented'); + +elseif strcmp(current, 'sparse') && strcmp(desired, 'full') + dimtok = tokenize(data.dimord, '_'); + if ~isempty(strmatch('freq', dimtok)), nfrq=length(data.freq); else nfrq = 1; end + if ~isempty(strmatch('time', dimtok)), ntim=length(data.time); else ntim = 1; end + nchan = length(data.label); + cmbindx = zeros(nchan); + for k = 1:size(data.labelcmb,1) + ch1 = find(strcmp(data.label, data.labelcmb(k,1))); + ch2 = find(strcmp(data.label, data.labelcmb(k,2))); + if ~isempty(ch1) && ~isempty(ch2), cmbindx(ch1,ch2) = k; end + end + cohspctrm = nan(nchan,nchan,nfrq,ntim); + for k = 1:ntim + for m = 1:nfrq + tmpdat = nan+zeros(nchan); + tmpdat(find(cmbindx)) = data.cohspctrm(cmbindx(find(cmbindx)),m,k); + tmpdat = ctranspose(tmpdat); + tmpdat(find(cmbindx)) = data.cohspctrm(cmbindx(find(cmbindx)),m,k); + cohspctrm(:,:,m,k) = tmpdat; + end + end + % remove obsolete fields + data = rmfield(data, 'powspctrm'); + data = rmfield(data, 'labelcmb'); + % replace updated fields + data.cohspctrm = cohspctrm; + try, data = rmfield(data, 'dof'); end + if ntim>1, + data.dimord = 'chan_chan_freq_time'; + else + data.dimord = 'chan_chan_freq'; + end + end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % represent the cross-spectral-density matrix in a particular manner %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function data = fixcsd(data, desired, channelcmb) -if isfield(data, 'powspctrm') +if isfield(data, 'crsspctrm') && isfield(data, 'powspctrm') current = 'sparsewithpow'; -elseif isfield(data, 'crsspctrm') && ~isfield(data, 'labelcmb') +elseif isfield(data, 'crsspctrm') && ~isfield(data, 'labelcmb') current = 'full'; -elseif isfield(data, 'crsspctrm') && isfield(data, 'labelcmb') +elseif isfield(data, 'crsspctrm') && isfield(data, 'labelcmb') current = 'sparse'; elseif isfield(data, 'fourierspctrm') && ~isfield(data, 'labelcmb') current = 'fourier'; else error('Could not determine the current representation of the cross-spectrum matrix'); end + if isequal(current, desired) % nothing to do + elseif (strcmp(current, 'full') && strcmp(desired, 'sparsewithpow')) + error('not yet implemented'); elseif (strcmp(current, 'fourier') && strcmp(desired, 'sparsewithpow')) - % this is what freqdescriptives currently does as an intermediate step dimtok = tokenize(data.dimord, '_'); if ~isempty(strmatch('rpttap', dimtok)), @@ -735,19 +882,21 @@ end if flag, siz = size(data.crsspctrm); data.crsspctrm = reshape(data.crsspctrm, siz(2:end)); end - elseif (strcmp(current, 'sparse') && strcmp(desired, 'sparsewithpow')) % convert back to crsspctrm/powspctrm representation: useful for plotting functions etc + error('not yet implemented'); - -elseif (strcmp(current, 'full') && strcmp(desired, 'fourier')) || ... +elseif (strcmp(current, 'full') && strcmp(desired, 'fourier')) || ... (strcmp(current, 'sparse') && strcmp(desired, 'fourier')) || ... (strcmp(current, 'sparsewithpow') && strcmp(desired, 'fourier')) % this is not possible + error('converting the cross-spectrum into a Fourier representation is not possible'); elseif strcmp(current, 'full') && strcmp(desired, 'sparse') % why would you want this? FIXME give explicit error -elseif strcmp(current, 'fourier') && strcmp(desired, 'sparse') + error('not yet implemented'); + +elseif strcmp(current, 'fourier') && strcmp(desired, 'sparse') if isempty(channelcmb), error('no channel combinations are specified'); end % this is what freqdescriptives currently does as an intermediate step @@ -776,7 +925,7 @@ crsspctrm = zeros(nrpt,ncmb,nfrq,ntim)+i.*zeros(nrpt,ncmb,nfrq,ntim); sumtapcnt = [0;cumsum(data.cumtapcnt(:))]; %for k = 1:ntim - % for m = 1:nfrq + %for m = 1:nfrq %for p = 1:nrpt % indx = (sumtapcnt(p)+1):sumtapcnt(p+1); % tmpdat1 = data.fourierspctrm(indx,cmbindx(:,1),m,k); @@ -789,7 +938,7 @@ tmpdat2 = data.fourierspctrm(indx,cmbindx(:,2),:,:); crsspctrm(p,:,:,:) = (sum(tmpdat1.*conj(tmpdat2),1))./data.cumtapcnt(p); end - % end + %end %end data.crsspctrm = crsspctrm; data.labelcmb = labelcmb; @@ -927,6 +1076,14 @@ end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% convert between datatypes +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function data = comp2raw(data) +% just remove the component topographies +data = rmfield(data, 'topo'); +data = rmfield(data, 'topolabel'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % convert between datatypes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -949,12 +1106,16 @@ if isfield(data, 'dimord') % it is a modern source description - - %this part depends on the assumption that the list of positions is describing a full 3D volume in + + %this part depends on the assumption that the list of positions is describing a full 3D volume in %an ordered way which allows for the extraction of a transformation matrix %i.e. slice by slice - try, - data.dim = pos2dim3d(data.pos, data.dim); + try, + if isfield(data, 'dim'), + data.dim = pos2dim3d(data.pos, data.dim); + else + data.dim = pos2dim3d(data); + end catch end end @@ -967,7 +1128,7 @@ [x y z] = ndgrid(xgrid, ygrid, zgrid); ind = [x(:) y(:) z(:)]; % these are the positions expressed in voxel indices along each of the three axes pos = data.pos; % these are the positions expressed in head coordinates - % represent the positions in a manner that is compatible with the homogeneous matrix multiplication, + % represent the positions in a manner that is compatible with the homogeneous matrix multiplication, % i.e. pos = H * ind ind = ind'; ind(4,:) = 1; pos = pos'; pos(4,:) = 1; @@ -981,6 +1142,9 @@ if isfield(data, 'ygrid'), data = rmfield(data, 'ygrid'); end if isfield(data, 'zgrid'), data = rmfield(data, 'zgrid'); end +% make inside a volume +data = fixinside(data, 'logical'); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % convert between datatypes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/external/fieldtrip/private/combineplanar.m b/external/fieldtrip/private/combineplanar.m index 60b6102..5d18979 100644 --- a/external/fieldtrip/private/combineplanar.m +++ b/external/fieldtrip/private/combineplanar.m @@ -28,6 +28,13 @@ % Copyright (C) 2004, Ole Jensen, Robert Oostenveld % % $Log: combineplanar.m,v $ +% Revision 1.43 2009/07/23 08:11:29 crimic +% fixed tiny bug +% +% Revision 1.42 2009/07/17 08:17:24 jansch +% rewriting of big parts of the code; incorporating checkdata etc. implementation +% of 'svd' combinemethod also for time domain data +% % Revision 1.41 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -171,9 +178,13 @@ cfg = checkconfig(cfg, 'trackconfig', 'on'); % check if the input data is valid for this function -% TODO this is not yet consistent with the code that is approx. 15 lines below data = checkdata(data, 'datatype', {'raw', 'freq', 'timelock'}, 'feedback', 'yes', 'senstype', {'ctf151_planar', 'ctf275_planar', 'neuromag122', 'neuromag306', 'bti248_planar', 'bti148_planar'}); +israw = datatype(data, 'raw'); +isfreq = datatype(data, 'freq'); +istimelock = datatype(data, 'timelock'); +try, dimord = data.dimord; end + % set the defaults if ~isfield(cfg, 'blc'), cfg.blc = 'no'; end if ~isfield(cfg, 'blcwindow'), cfg.blcwindow = 'all'; end @@ -181,6 +192,7 @@ if ~isfield(cfg, 'combinemethod'), cfg.combinemethod = 'sum'; end if ~isfield(cfg, 'foilim'), cfg.foilim = []; end if ~isfield(cfg, 'trials'), cfg.trials = 'all'; end +if ~isfield(cfg, 'feedback'), cfg.feedback = 'none'; end if isfield(cfg, 'baseline') warning('only supporting cfg.baseline for backwards compatibility, please update your cfg'); cfg.blc = 'yes'; @@ -190,12 +202,6 @@ cfg.blcwindow = [min(data.time) max(data.time)]; end -% check the input data -% TODO make consistent with checkdata -if (~isfield(data, 'avg') && ~isfield(data, 'powspctrm')) && ~isfield(data, 'fourierspctrm') && ~isfield(data, 'trial'), - error('unsupported data format') -end - % select trials of interest if ~strcmp(cfg.trials, 'all') error('trial selection has not been implemented yet') % first fix checkdata (see above) @@ -223,7 +229,7 @@ % perform baseline correction if strcmp(cfg.blc, 'yes') - if ~isfield(data, 'avg') + if ~istimelock, error('baseline correction is only supported for ERFs') else if ischar(cfg.blcwindow) && strcmp(cfg.blcwindow, 'all') @@ -238,76 +244,112 @@ end end -if strcmp(cfg.combinemethod, 'sum'), - if isfield(data, 'powspctrm') - % compute the power of each planar channel, simply by adding the power - if strcmp(data.dimord, 'chan_freq') - tmp1 = data.powspctrm(sel_dH,:) + data.powspctrm(sel_dV,:); - tmp2 = data.powspctrm(sel_other,:); - data.powspctrm = [tmp1; tmp2]; - elseif strcmp(data.dimord, 'chan_freq_time') - tmp1 = data.powspctrm(sel_dH,:,:) + data.powspctrm(sel_dV,:,:); - tmp2 = data.powspctrm(sel_other,:,:); - data.powspctrm = cat(1, tmp1, tmp2); - elseif strcmp(data.dimord, 'rpt_chan_freq') - tmp1 = data.powspctrm(:,sel_dH,:) + data.powspctrm(:,sel_dV,:); - tmp2 = data.powspctrm(:,sel_other,:); - data.powspctrm = cat(2, tmp1, tmp2); - elseif strcmp(data.dimord, 'rpt_chan_freq_time') - tmp1 = data.powspctrm(:,sel_dH,:,:) + data.powspctrm(:,sel_dV,:,:); - tmp2 = data.powspctrm(:,sel_other,:,:); - data.powspctrm = cat(2, tmp1, tmp2); - else - error('unsupported dimension order of frequency data'); - end - else - % convert average to raw data using simple helper function - % this allows the same function to work on multiple data types - % TODO make consistent with checkdata - [data, inputdimord] = data2raw(data); - ntrial = length(data.trial); - for i=1:ntrial - % compute the magnitude of each planar channel, simply by pythagoras - tmp1 = sqrt(data.trial{i}(sel_dH,:).^2 + data.trial{i}(sel_dV,:).^2); - tmp2 = data.trial{i}(sel_other,:); - data.trial{i} = [tmp1; tmp2]; - end - % convert raw data back to average using simple helper function - % this allows the same function to work on multiple data types - % TODO make consistent with checkdata - [data] = raw2data(data, inputdimord); - end -elseif strcmp(cfg.combinemethod, 'svd'), - if isempty(cfg.foilim), cfg.foilim = [data.freq(1) data.freq(end)]; end; - fbin = nearest(data.freq, cfg.foilim(1)):nearest(data.freq, cfg.foilim(2)); - if isfield(data, 'fourierspctrm'), - Nrpt = size(data.fourierspctrm,1); - Nsgn = length(sel_dH); - Nfrq = length(fbin); - Ntim = size(data.fourierspctrm,4); - %fourier= complex(zeros(Nrpt,Nsgn,Nfrq,Ntim),zeros(Nrpt,Nsgn,Nfrq,Ntim)); - fourier= zeros(Nrpt,Nsgn,Nfrq,Ntim)+nan; - progress('init', 'textbar', 'computing the svd'); - for j = 1:Nsgn - progress(j/Nsgn, 'computing the svd of signal %d/%d\n', j, Nsgn); - for k = 1:Nfrq - for m = 1:Ntim - dum = data.fourierspctrm(:,[sel_dH(j) sel_dV(j)],fbin(k),m); - timbin = find(~isnan(dum(:,1))); - [fourier(timbin,j,k,m)] = svdfft(transpose(dum(timbin,:)),1); - end - end - end - progress('close'); - other = data.fourierspctrm(:,sel_other,fbin,:); - data = rmfield(data,'fourierspctrm'); - data.fourierspctrm = cat(2, fourier, other); - data.freq = data.freq(fbin); - else - error('this method is not yet implemented'); +if isfreq + switch cfg.combinemethod + case 'sum' + if isfield(data, 'powspctrm'), + % compute the power of each planar channel, by summing the horizontal and vertical gradients + dimtok = tokenize(dimord,'_'); + catdim = strmatch('chan',dimtok); + if catdim==1, + tmp1 = data.powspctrm(sel_dH,:,:,:) + data.powspctrm(sel_dV,:,:,:); + tmp2 = data.powspctrm(sel_other,:,:,:); + elseif catdim==2, + tmp1 = data.powspctrm(:,sel_dH,:,:,:) + data.powspctrm(:,sel_dV,:,:,:); + tmp2 = data.powspctrm(:,sel_other,:,:,:); + else + error('unsupported dimension order of frequency data'); + end + data.powspctrm = cat(catdim, tmp1, tmp2); + else + error('cfg.combinemethod = ''sum'' only works for frequency data with powspctrm'); + end + case 'svd' + if isfield(data, 'fourierspctrm'), + if isempty(cfg.foilim), cfg.foilim = [data.freq(1) data.freq(end)]; end; + fbin = nearest(data.freq, cfg.foilim(1)):nearest(data.freq, cfg.foilim(2)); + + Nrpt = size(data.fourierspctrm,1); + Nsgn = length(sel_dH); + Nfrq = length(fbin); + Ntim = size(data.fourierspctrm,4); + %fourier= complex(zeros(Nrpt,Nsgn,Nfrq,Ntim),zeros(Nrpt,Nsgn,Nfrq,Ntim)); + fourier= zeros(Nrpt,Nsgn,Nfrq,Ntim)+nan; + progress('init', cfg.feedback, 'computing the svd'); + for j = 1:Nsgn + progress(j/Nsgn, 'computing the svd of signal %d/%d\n', j, Nsgn); + for k = 1:Nfrq + dum = reshape(data.fourierspctrm(:,[sel_dH(j) sel_dV(j)],fbin(k),:), [Nrpt 2 Ntim]); + dum = permute(dum, [2 3 1]); + dum = reshape(dum, [2 Ntim*Nrpt]); + timbin = ~isnan(dum(1,:)); + dum2 = svdfft(dum(:,timbin),1); + dum(1,timbin) = dum2; + dum = reshape(dum(1,:),[Ntim Nrpt]); + fourier(:,j,k,:) = transpose(dum); + + %for m = 1:Ntim + % dum = data.fourierspctrm(:,[sel_dH(j) sel_dV(j)],fbin(k),m); + % timbin = find(~isnan(dum(:,1))); + % [fourier(timbin,j,k,m)] = svdfft(transpose(dum(timbin,:)),1); + %end + end + end + progress('close'); + other = data.fourierspctrm(:,sel_other,fbin,:); + data = rmfield(data,'fourierspctrm'); + data.fourierspctrm = cat(2, fourier, other); + data.freq = data.freq(fbin); + else + error('cfg.combinemethod = ''svd'' only works for frequency data with fourierspctrm'); + end + otherwise end else - error('unknown combinemethod'); + if istimelock, + data = checkdata(data, 'datatype', 'raw', 'feedback', 'yes'); + end + + switch cfg.combinemethod + case 'sum' + Nrpt = length(data.trial); + for k = 1:Nrpt + tmp1 = sqrt(data.trial{k}(sel_dH,:).^2 + data.trial{k}(sel_dV,:).^2); + tmp2 = data.trial{k}(sel_other,:); + data.trial{k} = [tmp1;tmp2]; + end + case 'svd' + Nrpt = length(data.trial); + Nsgn = length(sel_dH); + Nsmp = cellfun('size', data.trial, 2); + Csmp = cumsum([0 Nsmp]); + %do a 'fixed orientation' across all trials approach here + %this is different from the frequency case FIXME + tmpdat = zeros(2, sum(Nsmp)); + for k = 1:Nsgn + for m = 1:Nrpt + tmpdat(:, (Csmp(m)+1):Csmp(m+1)) = data.trial{m}([sel_dH(k) sel_dV(k)],:); + end + tmpdat2 = abs(svdfft(tmpdat,1)); + tmpdat2 = mat2cell(tmpdat2, 1, Nsmp); + for m = 1:Nrpt + if k==1, trial{m} = zeros(Nsgn, Nsmp(m)); end + trial{m}(k,:) = tmpdat2{m}; + end + end + + for m = 1:Nrpt + other = data.trial{m}(sel_other,:); + trial{m} = [trial{m}; other]; + end + data.trial = trial; + + otherwise + end + + if istimelock, + data = checkdata(data, 'datatype', 'timelock', 'feedback', 'yes'); + end end if strcmp(cfg.combinegrad, 'no') && ~isfield(data, 'grad') @@ -372,7 +414,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: combineplanar.m,v 1.41 2009/01/20 13:01:31 sashae Exp $'; +cfg.version.id = '$Id: combineplanar.m,v 1.43 2009/07/23 08:11:29 crimic Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/componentbrowser.m b/external/fieldtrip/private/componentbrowser.m new file mode 100644 index 0000000..e2f4121 --- /dev/null +++ b/external/fieldtrip/private/componentbrowser.m @@ -0,0 +1,254 @@ +function [varargout] = componentbrowser(cfg, comp) + +% COMPONENTBROWSER plots topography and activations of ICA components +% +% Use as +% componentbrowser(cfg, comp) +% where comp is a FieldTrip structure obtained from COMPONENTANALYSIS. +% +% The configuration has the following parameters: +% cfg.comp = a vector with the components to plot (ex. 1:10) (optional) +% cfg.trial = choose which trial to plot first (optional, only one trial) +% cfg.layout = because the output of componentanalysis does not contain +% information on the layout, you need to specify in a variety of ways: +% - you can provide a pre-computed layout structure (see prepare_layout) +% - you can give the name of an ascii layout file with extension *.lay +% - you can give the name of an electrode file +% - you can give an electrode definition, i.e. "elec" structure +% - you can give a gradiometer definition, i.e. "grad" structure +% +% See also COMPONENTANALYSIS + +% Copyright (C) 2009, Giovanni Piantoni +% +% $Log: componentbrowser.m,v $ +% Revision 1.3 2009/08/05 08:58:54 roboos +% changed the order of the input arguments to plot_topo from (val, x, y) into (x, y, val) +% +% Revision 1.2 2009/07/29 15:05:41 giopia +% removed prepare_mask, added << >> buttons, updated help +% +% Revision 1.1 2009/07/17 14:25:39 giopia +% moved to main directory +% +% Revision 1.4 2009/07/15 08:38:28 giopia +% general cleanup, prepare_mask now standalone function +% +% Revision 1.3 2009/06/19 15:11:00 giopia +% allows scroll through components +% +% Revision 1.2 2009/06/03 14:00:26 roboos +% fixed cfg.lay, should be cfg.layout +% +% Revision 1.1 2009/06/02 15:48:58 giopia +% first implementation, plot topoplot, activations and simple interactive +% + +fieldtripdefs + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Prepare the data +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% check that the data comes from componentanalysis +comp = checkdata(comp, 'datatype', 'comp'); + +% set the defaults: +if ~isfield(cfg, 'comp'), cfg.comp = 1:10; end +if ~isfield(cfg, 'trial'), cfg.trial = 1; end + +if numel(cfg.trial) > 1, + warning('componentbrowser:cfg_onetrial', 'only one trial can be plotted at the time'); + cfg.trial = cfg.trial(1); +end + +% Read or create the layout that will be used for plotting: +[cfg.layout] = prepare_layout(cfg, comp); + +% Identify the channels to plot +[labels, cfg.chanidx.lay, cfg.chanidx.comp] = intersect(cfg.layout.label, comp.topolabel); % in case channels are missing +if isempty(cfg.chanidx.lay) + error('componentbrowser:labelmismatch', 'The channel labels in the data do not match the labels of the layout'); +end + +% fixed variables +cfg.shift = 1.2; % distance between topoplots + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Create figure and assign userdata +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% create figure and axes +cfg.h = figure('uni','pix', 'name', 'componentbrowser', 'vis', 'off', 'numbertitle', 'off'); +cfg.axis = axes; +hold on + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Buttons and Callbacks +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% scroll components +uicontrol(cfg.h,'uni','pix','pos',[105 5 25 18],'str','-',... + 'call',{@plottopography, comp}); + +cfg.ncomp = uicontrol(cfg.h,'sty','text','uni','pix','pos',[130 5 150 18],... + 'str',['comp n.' num2str(cfg.comp(1)) '-' num2str(cfg.comp(end))]); + +uicontrol(cfg.h,'uni','pix','pos',[280 5 25 18],'str','+',... + 'call',{@plottopography, comp}); + +% scroll trials +uicontrol(cfg.h,'uni','pix','pos',[330 5 25 18],'str','<<',... + 'call',{@plotactivation, comp}); + +uicontrol(cfg.h,'uni','pix','pos',[355 5 25 18],'str', '<',... + 'call',{@plotactivation, comp}); + +cfg.ntrl = uicontrol(cfg.h,'sty','text','uni','pix','pos',[380 5 70 18],... + 'str',['trial n.' num2str(cfg.trial)]); + +uicontrol(cfg.h,'uni','pix','pos',[450 5 25 18],'str', '>',... + 'call',{@plotactivation, comp}); + +uicontrol(cfg.h,'uni','pix','pos',[475 5 25 18],'str','>>',... + 'call',{@plotactivation, comp}); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% First callback and final adjustments +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% first call of the two plotting functions +plottopography([], cfg, comp) +plotactivation([], cfg, comp) + +% final adjustments +set(cfg.h, 'vis', 'on') +axis equal +axis off +hold off + +% the (optional) output is the handle +if nargout == 1; + varargout{1} = cfg.h; +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PLOTTOPOGRAPHY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function plottopography(h, cfg, comp) +% now plottopography is not associated with a callback, but it might in +% the future + +if isempty(h) % when called in isolation + set(cfg.h, 'user', cfg) +else + cfg = get(get(h, 'par'), 'user'); + + % which button has been pressed + if intersect(h, findobj(cfg.h, 'str', '+')) + + cfg.comp = cfg.comp + numel(cfg.comp); + if cfg.comp(end) > size(comp.label,1) + cfg.comp = cfg.comp - (cfg.comp(end) - size(comp.label,1)); + end + + elseif intersect(h, findobj(cfg.h, 'str', '-')) + + cfg.comp = cfg.comp - numel(cfg.comp); + if cfg.comp(1) < 1 + cfg.comp = cfg.comp - cfg.comp(1) + 1; + end + + end +end + +set(cfg.ncomp, 'str', ['comp n.' num2str(cfg.comp(1)) '-' num2str(cfg.comp(end))]) +drawnow +delete(findobj(cfg.h, 'tag', 'comptopo')) + +cnt = 0; +for k = cfg.comp + cnt = cnt + 1; + + % write number of the component on the left + h_text(cnt) = plot_text(-2.5, -cnt*cfg.shift, ['n. ' num2str(cfg.comp(cnt))]); + + % plot only topography (no layout) + h_topo(cnt) = plot_topo(cfg.layout.pos(cfg.chanidx.lay,1), cfg.layout.pos(cfg.chanidx.lay,2), comp.topo(cfg.chanidx.comp, k), ... + 'hpos', -1, 'vpos', -cnt*cfg.shift, 'mask', cfg.layout.mask); + % plot layout + plot_lay(cfg.layout, 'hpos', -1, 'vpos', -cnt*cfg.shift, 'point', false, 'box', false, 'label', false, 'mask', true, 'verbose', false); +end + +set(h_text, 'tag', 'comptopo') +set(h_topo, 'tag', 'comptopo') + +% in the colorbar, green should be zero +colorlimits = get(cfg.axis, 'clim'); +set(cfg.axis, 'clim', [-1 1] * max(abs(colorlimits))) + +plotactivation([], cfg, comp) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PLOTACTIVATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function plotactivation(h, cfg, comp) +% plotactivation can be called in isolation or by buttondownfcn +% cfg is stored in 'user' of the main figure + +if isempty(h) % when called in isolation + set(cfg.h, 'user', cfg) +else + cfg = get(get(h, 'par'), 'user'); + + % which button has been pressed + if intersect(h, findobj(cfg.h, 'str', '>>')) + + cfg.trial = cfg.trial + 10; + if cfg.trial > size(comp.trial,2) + cfg.trial = size(comp.trial,2); + end + + elseif intersect(h, findobj(cfg.h, 'str', '>')) + + cfg.trial = cfg.trial + 1; + if cfg.trial > size(comp.trial,2) + cfg.trial = size(comp.trial,2); + end + + elseif intersect(h, findobj(cfg.h, 'str', '<')) + + cfg.trial = cfg.trial - 1; + if cfg.trial < 1 + cfg.trial = 1; + end + + elseif intersect(h, findobj(cfg.h, 'str', '<<')) + + cfg.trial = cfg.trial - 10; + if cfg.trial < 1 + cfg.trial = 1; + end + + end +end + +set(cfg.ntrl,'str',['trial n. ' num2str(cfg.trial)]) +drawnow +delete(findobj(cfg.h,'tag', 'activations')); + +hold on +cnt = 0; +for k = cfg.comp + cnt = cnt + 1; + + % plot the activations + h_act(cnt) = plot_vector(comp.trial{cfg.trial}(k,:), 'hpos', 6 , 'vpos', -cnt*cfg.shift, 'width', 12, 'height', 1, 'box', true); +end + +h_inv = plot(6+12+1, -cnt*cfg.shift, '.'); % +set(h_inv, 'vis', 'off') + +set(h_act, 'tag', 'activations') +set(cfg.h, 'user', cfg) +hold off diff --git a/external/fieldtrip/private/ctf2grad.m b/external/fieldtrip/private/ctf2grad.m index 1910b30..7a8138d 100644 --- a/external/fieldtrip/private/ctf2grad.m +++ b/external/fieldtrip/private/ctf2grad.m @@ -14,6 +14,9 @@ % Copyright (C) 2004, Robert Oostenveld % % $Log: ctf2grad.m,v $ +% Revision 1.4 2009/08/05 08:36:57 roboos +% preallocate the memory that will hold the coil positions, orientations and weights -> significant speedup +% % Revision 1.3 2009/03/23 21:16:03 roboos % don't give error if balancing fails, but only warning and remove the balancing information % @@ -100,6 +103,16 @@ selREF = selREF(:)'; numMEG = length(selMEG); numREF = length(selREF); + + % determine the number of channels and coils + coilcount = 0; + coilcount = coilcount + sum([hdr.res4.senres(selREF).numCoils]); + coilcount = coilcount + sum([hdr.res4.senres(selMEG).numCoils]); + chancount = numMEG + numREF; + % preallocate the memory + grad.pnt = zeros(coilcount, 3); % this will hold the position of each coil + grad.ori = zeros(coilcount, 3); % this will hold the orientation of each coil + grad.tra = zeros(chancount, coilcount); % this describes how each coil contributes to each channel % combine the bottom and top coil of each MEG channel for i=1:numMEG @@ -123,6 +136,10 @@ grad.tra(i,i ) = 1; grad.tra(i,i+numMEG) = 1; end + + % the MEG channels always have 2 coils, the reference channels vary in the number of coils + chancount = 1*numMEG; + coilcount = 2*numMEG; % combine the coils of each reference channel for i=1:numREF @@ -136,12 +153,14 @@ ori = hdr.res4.senres(n).ori'; end % determine the number of coils for this channel - numcoils = sum(sum(pos.^2, 2)~=0); + numcoils = hdr.res4.senres(n).numCoils; % add the coils of this channel to the gradiometer array + chancount = chancount+1; for j=1:numcoils - grad.pnt(end+1, :) = pos(j,:); - grad.ori(end+1, :) = ori(j,:) .* -sign(hdr.res4.senres(n).properGain); - grad.tra(i+numMEG, end+1) = 1; + coilcount = coilcount+1; + grad.pnt(coilcount, :) = pos(j,:); + grad.ori(coilcount, :) = ori(j,:) .* -sign(hdr.res4.senres(n).properGain); + grad.tra(chancount, coilcount) = 1; end end @@ -260,9 +279,9 @@ numcoils = sum(sum(pos.^2, 2)~=0); % add the coils of this channel to the gradiometer array for j=1:numcoils - grad.pnt(end+1, :) = pos(j,:); - grad.ori(end+1, :) = ori(j,:) .* -sign(hdr.gainV(n)); - grad.tra(i+numMEG, end+1) = 1; + grad.pnt(numMEG+i, :) = pos(j,:); + grad.ori(numMEG+i, :) = ori(j,:) .* -sign(hdr.gainV(n)); + grad.tra(numMEG+i, 2*numMEG+i) = 1; end end diff --git a/external/fieldtrip/private/databrowser.m b/external/fieldtrip/private/databrowser.m new file mode 100644 index 0000000..c33166c --- /dev/null +++ b/external/fieldtrip/private/databrowser.m @@ -0,0 +1,890 @@ +function [cfg] = databrowser(cfg, data) + +% DATABROWSER can be used for visual inspection of data. Artifacts detected +% by FieldTrip artifact functions are marked. Data pieces can be marked as +% artifact by manual selection as well. +% +% Use as +% cfg = databrowser(cfg) +% with the cfg as obtained from DEFINETRIAL, or as +% cfg = databrowser(cfg, data) +% with the data as obtained from PREPROCESSING +% +% The following configuration options are supported: +% cfg.dataset = +% cfg.trl = +% cfg.continuous = 'yes' or 'no' +% cfg.channel = cell-array with channel labels, see CHANNELSELECTION +% cfg.zscale = [zmin zmax] or 'auto' (default = 'auto') +% cfg.blocksize = number (in seconds), only aplicable if data contains only 1 (long) trial +% cfg.artfctdef.xxx.artifact = Nx2 matrix with artifact segments +% cfg.viewmode = string, 'butterfly', 'vertical', 'component' (default = 'butterfly') +% cfg.selectfeature = string, name of feature to be selected/added (default = 'visual') +% cfg.selectmode = string, what to do with a selection, can be 'joint', 'individual', 'mutiplot', 'topoplot-avg', 'topoplot-pow' (default = 'joint' +% +% See also PREPROCESSING + +% Copyright (C) 2009, Robert Oostenveld, Ingrid Niewenhuis +% +% $Log: databrowser.m,v $ +% Revision 1.12 2009/08/05 14:16:53 roboos +% added various options for selectmode +% +% Revision 1.11 2009/08/05 09:14:58 roboos +% fixed problem with zscale=auto when all data was negative +% +% Revision 1.10 2009/08/05 08:58:54 roboos +% changed the order of the input arguments to plot_topo from (val, x, y) into (x, y, val) +% +% Revision 1.9 2009/08/05 08:26:41 roboos +% if not continuous, keep the original data segments and don't display the horizontal zoom +% if continuous, use the label 'segment', other 'trial' +% give more information in figure title +% implemented preprocessing of data, use cfg.preproc +% added cfg.viewmode for external specification of visualisation method +% various bug fixes ans speed improvements +% +% Revision 1.8 2009/08/04 16:15:35 roboos +% removed settings uicontrol elements and button +% converted trial/channel/horizontal/vertical from text label into pushbutton with input dialog +% +% Revision 1.7 2009/08/04 13:37:00 ingnie +% renamed cfg.selectbehaviour into selectmode (consistent with viewmode) +% fixed bug in displaying of multiple artifacts in a single trial for viewmode=vertical +% +% Revision 1.6 2009/08/04 11:59:06 roboos +% first attempt to add some buttons to the figure and to toggle between the setting and the normal display +% +% Revision 1.5 2009/08/03 20:49:28 roboos +% some improvements for channelselection when reading data fromk disk +% +% Revision 1.4 2009/08/03 18:28:44 roboos +% started with implementation viewmode=component/layout/vertical/butterfly +% many small changes +% +% Revision 1.3 2009/08/03 10:55:43 roboos +% restructured the main function (order in which figure and opt are constructed), added multiplotER feature +% +% Revision 1.2 2009/08/03 08:30:17 ingnie +% replaced the initial version of Giovanni with another databrowser that Ingrid and Robert implemented. The newer one already has more functionality, like adding/removing artifacts and horizontal and vertical zooming +% + +fieldtripdefs + +if nargin>1 + data = checkdata(data, 'datatype', {'raw', 'comp'}, 'feedback', 'yes'); +else + % check if the input cfg is valid for this function + cfg = checkconfig(cfg, 'dataset2files', {'yes'}); + cfg = checkconfig(cfg, 'required', {'headerfile', 'datafile'}); + cfg = checkconfig(cfg, 'renamed', {'datatype', 'continuous'}); + cfg = checkconfig(cfg, 'renamedval', {'continuous', 'continuous', 'yes'}); +end + +% set the defaults +if ~isfield(cfg, 'channel'), cfg.channel = 'all'; end +if ~isfield(cfg, 'continuous'), cfg.continuous = 'no'; end % only for reading from file +if ~isfield(cfg, 'zscale'), cfg.zscale = 'auto'; end +if ~isfield(cfg, 'artfctdef'), cfg.artfctdef = struct; end +if ~isfield(cfg, 'selectfeature'), cfg.selectfeature = 'visual'; end % string or cell-array +if ~isfield(cfg, 'selectmode'), cfg.selectmode = 'joint'; end % joint or individual +if ~isfield(cfg, 'viewmode'), cfg.viewmode = 'butterfly'; end % butterfly, vertical, component, settings +if ~isfield(cfg, 'blocksize'), cfg.blocksize = 1; end % only for segmenting continuous data, i.e. one long trial +if ~isfield(cfg, 'preproc'), cfg.preproc = []; end % see preproc for options + +if ischar(cfg.selectfeature) + % ensure that it is a cell array + cfg.selectfeature = {cfg.selectfeature}; +end + +if nargin>1 + % read or create the layout that will be used for plotting + cfg.layout = prepare_layout(cfg, data); +else + % read or create the layout that will be used for plotting + cfg.layout = prepare_layout(cfg); +end + +% get some initial parameters from the data +if nargin>1 + % fetch the header + hdr = fetch_header(data); + + cfg.channel = channelselection(cfg.channel, data.label); + chansel = match_str(data.label, cfg.channel); + fsample = 1/(data.time{1}(2)-data.time{1}(1)); + Nchans = length(chansel); + + % this is how the input data is segmented + trlorg = findcfg(data.cfg, 'trl'); + Ntrials = size(trlorg, 1); + +else + % read the header + hdr = read_header(cfg.headerfile, 'headerformat', cfg.headerformat); + + % this option relates to reading over trial boundaries in a pseudo-continuous dataset + if ~isfield(cfg, 'continuous') + if hdr.nTrials==1 + cfg.continuous = 'yes'; + else + cfg.continuous = 'no'; + end + end + + if ~isfield(cfg, 'trl') + % treat the data as continuous if possible, otherwise define all trials as indicated in the header + if strcmp(cfg.continuous, 'yes') + trl = zeros(1, 3); + trl(1,1) = 1; + trl(1,2) = hdr.nSamples*hdr.nTrials; + trl(1,3) = 0; + else + trl = zeros(hdr.nTrials, 3); + for i=1:hdr.nTrials + trl(i,1) = (i-1)*hdr.nSamples + 1; + trl(i,2) = (i )*hdr.nSamples ; + trl(i,3) = -hdr.nSamplesPre; + end + end + cfg.trl = trl; + end + + cfg.channel = channelselection(cfg.channel, hdr.label); + chansel = match_str(hdr.label, cfg.channel); + fsample = hdr.Fs; + Nchans = length(chansel); + + % this is how the data from file should be segmented + trlorg = cfg.trl; + Ntrials = size(trlorg, 1); +end + +if Nchans == 0 + error('no channels to display'); +end + +if Ntrials == 0 + error('no trials to display'); +end + +% collect the artifacts that have been detected from cfg.artfctdef.xxx.artifact +artlabel = fieldnames(cfg.artfctdef); +sel = zeros(size(artlabel)); +artifact = cell(size(artlabel)); +for i=1:length(artlabel) + sel(i) = issubfield(cfg.artfctdef, [artlabel{i} '.artifact']); + if sel(i) + artifact{i} = getsubfield(cfg.artfctdef, [artlabel{i} '.artifact']); + num = size(artifact{i}, 1); + if isempty(num) + num = 0; + end + fprintf('detected %3d %s artifacts\n', num, artlabel{i}); + end +end +artifact = artifact(sel==1); +artlabel = artlabel(sel==1); + +for i=1:length(cfg.selectfeature) + if ~any(strcmp(cfg.selectfeature{i}, artlabel)) + artifact = {[], artifact{:}}; + artlabel = {cfg.selectfeature{i}, artlabel{:}}; + end +end + +% FIXME ensure nice sorting of artifact labels + +% make a single vector representing all artifacts +datbegsample = min(trlorg(:,1)); +datendsample = max(trlorg(:,2)); +artdat = zeros(length(artifact), datendsample); +for i=1:length(artifact) + for j=1:size(artifact{i},1) + artbegsample = artifact{i}(j,1); + artendsample = artifact{i}(j,2); + artendsample = min(artendsample, datendsample); + artdat(i, artbegsample:artendsample) = 1; + end +end + +artdata = []; +artdata.trial{1} = artdat; +artdata.time{1} = offset2time(0, fsample, datendsample); +artdata.label = artlabel; +artdata.fsample = fsample; +artdata.cfg.trl = [1 datendsample 0]; + +if ischar(cfg.zscale) && strcmp(cfg.zscale, 'auto') + if nargin>1 + dat = data.trial{1}(chansel,:); + minval = min(dat(:)); + maxval = max(dat(:)); + cfg.zscale = max(abs(minval), abs(maxval)); + else + cfg.zscale = 1; % FIXME + end +end + +h = figure; +set(h, 'KeyPressFcn', @keyboard_cb); +set(h, 'WindowButtonDownFcn', {@select_range, 'multiple', false, 'xrange', true, 'yrange', false, 'clear', true, 'callback', {@select_range_cb, h}, 'event', 'WindowButtonDownFcn'}); +set(h, 'WindowButtonUpFcn', {@select_range, 'multiple', false, 'xrange', true, 'yrange', false, 'clear', true, 'callback', {@select_range_cb, h}, 'event', 'WindowButtonUpFcn'}); +set(h, 'WindowButtonMotionFcn', {@select_range, 'multiple', false, 'xrange', true, 'yrange', false, 'clear', true, 'callback', {@select_range_cb, h}, 'event', 'WindowButtonMotionFcn'}); + +% opt represents the global data/settings, it should contain +% - the original data, epoched or continuous +% - the artifacts represented as continuous data +% - the redraw_cb settings +% - the preproc settings +% - the select_range_cb settings (also used in keyboard_cb) + +% these elements are stored inside the figure so that the callback routines can modify them +opt = []; +if nargin<2 + opt.orgdata = []; % this means that it will look in opt.cfg.dataset +else + opt.orgdata = data; +end +opt.artdata = artdata; +opt.cfg = cfg; % the configuration of this function, not of the preprocessing +opt.hdr = hdr; +opt.trlop = 1; % active trial being displayed +opt.ftsel = 1; % current artifact/feature being selected +opt.trlorg = trlorg; +opt.fsample = fsample; +opt.cleanup = false; % this is needed for a corrent handling if the figure is closed (either in the corner or by "q") +if strcmp(cfg.continuous, 'yes') + opt.trialname = 'segment'; +else + opt.trialname = 'trial'; +end +guidata(h, opt); + +% make the user interface elements for the data view +uicontrol('tag', 'group1', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', opt.trialname, 'userdata', 't') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '<', 'userdata', 'leftarrow') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '>', 'userdata', 'rightarrow') + +uicontrol('tag', 'group1', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', 'channel','userdata', 'c') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '<', 'userdata', 'uparrow') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '>', 'userdata', 'downarrow') + +uicontrol('tag', 'group1a', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', 'horizontal', 'userdata', 'h') +uicontrol('tag', 'group2a', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '-', 'userdata', 'shift+leftarrow') +uicontrol('tag', 'group2a', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '+', 'userdata', 'shift+rightarrow') +if strcmp(cfg.continuous, 'no') + uilayout(h, 'tag', 'group1a', 'visible', 'off', 'retag', 'group1'); + uilayout(h, 'tag', 'group2a', 'visible', 'off', 'retag', 'group2'); +else + uilayout(h, 'tag', 'group1a', 'visible', 'on', 'retag', 'group1'); + uilayout(h, 'tag', 'group2a', 'visible', 'on', 'retag', 'group2'); +end + +uicontrol('tag', 'group1', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', 'vertical', 'userdata', 'v') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '-', 'userdata', 'shift+downarrow') +uicontrol('tag', 'group2', 'parent', h, 'units', 'normalized', 'style', 'pushbutton', 'string', '+', 'userdata', 'shift+uparrow') + +uilayout(h, 'tag', 'group1', 'width', 0.10, 'height', 0.05); +uilayout(h, 'tag', 'group2', 'width', 0.05, 'height', 0.05); +uilayout(h, 'tag', 'group1', 'style', 'pushbutton', 'callback', @keyboard_cb); +uilayout(h, 'tag', 'group2', 'style', 'pushbutton', 'callback', @keyboard_cb); + +uilayout(h, 'tag', 'group1', 'retag', 'viewui'); +uilayout(h, 'tag', 'group2', 'retag', 'viewui'); +uilayout(h, 'tag', 'viewui', 'BackgroundColor', [0.8 0.8 0.8], 'hpos', 'auto', 'vpos', 0.01); + +definetrial_cb(h); +redraw_cb(h); + +if nargout + % wait until the user interface is closed, get the user data with the updated artifact details + set(h, 'CloseRequestFcn', @cleanup_cb); + + while ishandle(h) + uiwait(h); + opt = guidata(h); + if opt.cleanup + delete(h); + end + end + + % add the updated artifact definitions to the output cfg + for i=1:length(opt.artdata.label) + tmp = diff([0 opt.artdata.trial{1}(i,:) 0]); + artbeg = find(tmp==+1); + artend = find(tmp==-1) - 1; + cfg.artfctdef.(opt.artdata.label{i}).artifact = [artbeg' artend']; + end +end % if nargout + +% add version information to the configuration +try + % get the full name of the function + cfg.version.name = mfilename('fullpath'); +catch + % required for compatibility with Matlab versions prior to release 13 (6.5) + [st, i] = dbstack; + cfg.version.name = st(i); +end +cfg.version.id = '$Id: databrowser.m,v 1.12 2009/08/05 14:16:53 roboos Exp $'; +% remember the configuration details of the input data +try cfg.previous = data.cfg; end + +end % main function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function cleanup_cb(h, eventdata) +opt = guidata(h); +opt.cleanup = true; +guidata(h, opt); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function definetrial_cb(h, eventdata) +opt = guidata(h); +if strcmp(opt.cfg.continuous, 'no') + % keep the original trial definition for visualisation + opt.trlvis = opt.trlorg; +else + % construct a trial definition for visualisation + if isfield(opt, 'trlvis') + thistrlbeg = opt.trlvis(opt.trlop,1); + thistrlend = opt.trlvis(opt.trlop,2); + % remember a representative sample of the current trial + % thissample = round((thistrlbeg+thistrlend)/2); + thissample = thistrlbeg; + end + % look at opt.cfg.blocksize and make opt.trl accordingly + % if original data contains more than one trial, it will fail in fetc_data + datbegsample = min(opt.trlorg(:,1)); + datendsample = max(opt.trlorg(:,2)); + smppertrl = round(opt.fsample * opt.cfg.blocksize); + begsamples = datbegsample:smppertrl:datendsample; + endsamples = datbegsample+smppertrl-1:smppertrl:datendsample; + if numel(endsamples)length(opt.hdr.label) + chansel = chansel - (max(chansel)-length(opt.hdr.label)); + end + % convert numeric array into cell-array with channel labels + opt.cfg.channel = opt.hdr.label(chansel); + disp(opt.cfg.channel); + guidata(h, opt); + redraw_cb(h, eventdata); + case 'shift+leftarrow' + opt.cfg.blocksize = opt.cfg.blocksize*sqrt(2); + disp(opt.cfg.blocksize); + guidata(h, opt); + definetrial_cb(h, eventdata); + redraw_cb(h, eventdata); + case 'shift+rightarrow' + opt.cfg.blocksize = opt.cfg.blocksize/sqrt(2); + disp(opt.cfg.blocksize); + guidata(h, opt); + definetrial_cb(h, eventdata); + redraw_cb(h, eventdata); + case 'shift+uparrow' + opt.cfg.zscale = opt.cfg.zscale/sqrt(2); + guidata(h, opt); + redraw_cb(h, eventdata); + case 'shift+downarrow' + opt.cfg.zscale = opt.cfg.zscale*sqrt(2); + guidata(h, opt); + redraw_cb(h, eventdata); + case 'q' + guidata(h, opt); + cleanup_cb(h); + case 't' + % select the trial to display + response = inputdlg(sprintf('%s to display', opt.trialname), 'specify', 1, {num2str(opt.trlop)}); + if ~isempty(response) + opt.trlop = str2double(response); + opt.trlop = min(opt.trlop, size(opt.trlvis,1)); % should not be larger than the number of trials + opt.trlop = max(opt.trlop, 1); % should not be smaller than 1 + end + guidata(h, opt); + redraw_cb(h, eventdata); + case 'h' + % select the horizontal scaling + response = inputdlg('horizontal scale', 'specify', 1, {num2str(opt.cfg.blocksize)}); + if ~isempty(response) + opt.cfg.blocksize = str2double(response); + end + guidata(h, opt); + definetrial_cb(h, eventdata); + redraw_cb(h, eventdata); + case 'v' + % select the vertical scaling + response = inputdlg('vertical scale', 'specify', 1, {num2str(opt.cfg.zscale)}); + if ~isempty(response) + opt.cfg.zscale = str2double(response); + end + guidata(h, opt); + redraw_cb(h, eventdata); + case 'c' + % select channels + select = match_str(opt.hdr.label, opt.cfg.channel); + select = select_channel_list(opt.hdr.label, select); + opt.cfg.channel = opt.hdr.label(select); + guidata(h, opt); + redraw_cb(h, eventdata); + case 'control+control' + % do nothing + case 'shift+shift' + % do nothing + otherwise + guidata(h, opt); + help_cb(h); +end +uiresume(h); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function toggle_viewmode_cb(h, eventdata, varargin) +opt = guidata(getparent(h)); +if ~isempty(varargin) && ischar(varargin{1}) + opt.cfg.viewmode = varargin{1}; +end +guidata(getparent(h), opt); +redraw_cb(h); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function h = getparent(h) +p = h; +while p~=0 + h = p; + p = get(h, 'parent'); +end +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function redraw_cb(h, eventdata) +h = getparent(h); +opt = guidata(h); +figure(h); % ensure that the calling figure is in the front +cla; % clear the content in the current axis + +fprintf('redrawing with viewmode %s\n', opt.cfg.viewmode); + + +artcol = [0.9686 0.7608 0.7686; 0.7529 0.7098 0.9647; 0.7373 0.9725 0.6824;0.8118 0.8118 0.8118; 0.9725 0.6745 0.4784; 0.9765 0.9176 0.5686]; + +begsample = opt.trlvis(opt.trlop, 1); +endsample = opt.trlvis(opt.trlop, 2); +offset = opt.trlvis(opt.trlop, 3); +chanindx = match_str(opt.hdr.label, opt.cfg.channel); + +if isempty(opt.orgdata) + fprintf('reading data... '); + dat = read_data(opt.cfg.datafile, 'header', opt.hdr, 'begsample', begsample, 'endsample', endsample, 'chanindx', chanindx, 'checkboundary', strcmp(opt.cfg.continuous, 'no'), 'dataformat', opt.cfg.dataformat, 'headerformat', opt.cfg.headerformat); +else + fprintf('fetching data... '); + dat = fetch_data(opt.orgdata, 'header', opt.hdr, 'begsample', begsample, 'endsample', endsample, 'chanindx', chanindx); +end +fprintf('done\n'); + +fprintf('fetching artifacts... '); +art = fetch_data(opt.artdata, 'begsample', begsample, 'endsample', endsample); +fprintf('done\n'); + +% apply preprocessing and determine the time axis +fprintf('preprocessing data... '); +[dat, lab, tim] = preproc(dat, opt.hdr.label(chanindx), opt.fsample, opt.cfg.preproc, offset); +fprintf('done\n'); + +fprintf('plotting data... '); +switch opt.cfg.viewmode + case 'butterfly' + for i=1:length(opt.artdata.label) + tmp = diff([0 art(i,:) 0]); + artbeg = find(tmp==+1); + artend = find(tmp==-1) - 1; + for j=1:numel(artbeg) + plot_box([tim(artbeg(j)) tim(artend(j)) -opt.cfg.zscale opt.cfg.zscale], 'facecolor', artcol(i,:), 'edgecolor', 'none'); + end + end + + % plot the data on top of the box + plot_vector(tim, dat) + ax(1) = tim(1); + ax(2) = tim(end); + ax(3) = -opt.cfg.zscale; + ax(4) = opt.cfg.zscale; + axis(ax); + title(sprintf('%s %d, time from %g to %g s', opt.trialname, opt.trlop, tim(1), tim(end))); + xlabel('time'); + + case 'vertical' + tmpcfg = []; + tmpcfg.layout = 'vertical'; + tmpcfg.channel = opt.cfg.channel; + tmpcfg.skipcomnt = 'yes'; + tmpcfg.skipscale = 'yes'; + laytime = prepare_layout(tmpcfg, opt.orgdata); + + hlim = [tim(1) tim(end)]; + vlim = [-opt.cfg.zscale +opt.cfg.zscale]; + + % determine the position of each of the labels + labelx = laytime.pos(:,1) - laytime.width/2 - 0.01; + labely = laytime.pos(:,2); + + ax(1) = min(laytime.pos(:,1) - laytime.width/2); + ax(2) = max(laytime.pos(:,1) + laytime.width/2); + ax(3) = min(laytime.pos(:,2) - laytime.height/2); + ax(4) = max(laytime.pos(:,2) + laytime.height/2); + axis(ax) + + % remember the scaling of the horizontal axis, this is needed for mouse input + hpos(1) = laytime.pos(1,1) - laytime.width(1)/2; % the position of the left side of the timecourse box + hpos(2) = laytime.pos(1,1) + laytime.width(1)/2; % the position of the right side of the timecourse box + opt.hlim = hlim; + opt.hpos = hpos; + + for j=1:length(opt.artdata.label) + tmp = diff([0 art(j,:) 0]); + artbeg = find(tmp==+1); + artend = find(tmp==-1) - 1; + arttim = [tim(artbeg)' tim(artend)']; % convert the artifact sample number to time + arttim = (arttim - opt.hlim(1)) / (opt.hlim(2) - opt.hlim(1)); % convert to value relative to box, i.e. from 0 to 1 + arttim = arttim * (opt.hpos(2) - opt.hpos(1)) + opt.hpos(1); % convert from relative to actual value along the horizontal figure axis + + for k=1:numel(artbeg) + plot_box([arttim(k,1) arttim(k,2) ax(3) ax(4)], 'facecolor', artcol(j,:), 'edgecolor', 'none'); + end + end % for each of the artifact channels + + for i=1:length(chanindx) + datsel = i; + laysel = match_str(laytime.label, opt.hdr.label(chanindx(i))); + if ~isempty(datsel) + plot_text(labelx(laysel), labely(laysel), opt.hdr.label(chanindx(i)), 'HorizontalAlignment', 'right'); + plot_vector(tim, dat(datsel, :), 'hpos', laytime.pos(laysel,1), 'vpos', laytime.pos(laysel,2), 'width', laytime.width(laysel), 'height', laytime.height(laysel), 'hlim', hlim, 'vlim', vlim, 'box', false); + end + end + + set(gca, 'xTick', []) + set(gca, 'yTick', []) + title(sprintf('%s %d, time from %g to %g s', opt.trialname, opt.trlop, tim(1), tim(end))); + + case 'component' + compindx = chanindx; + clear chanindx + + tmpcfg = []; + tmpcfg.layout = 'vertical'; + tmpcfg.channel = opt.cfg.channel; + tmpcfg.skipcomnt = 'yes'; + tmpcfg.skipscale = 'yes'; + laytime = prepare_layout(tmpcfg, opt.orgdata); + + tmpcfg = []; + tmpcfg.layout = opt.cfg.layout; + laychan = prepare_layout(tmpcfg, opt.orgdata); + + % determine the position of each of the topographies + laytopo.pos(:,1) = laytime.pos(:,1) - laytime.width/2 - laytime.height*2; + laytopo.pos(:,2) = laytime.pos(:,2); + laytopo.width = laytime.height; + laytopo.height = laytime.height; + laytopo.label = laytime.label; + + % determine the position of each of the labels + labelx = laytopo.pos(:,1) + laytopo.width; + labely = laytopo.pos(:,2); + + hlim = [tim(1) tim(end)]; + vlim = [-opt.cfg.zscale +opt.cfg.zscale]; + + [sel1, sel2] = match_str(opt.orgdata.topolabel, laychan.label); + chanx = laychan.pos(sel2,1); + chany = laychan.pos(sel2,2); + + for i=1:length(compindx) + datsel = i; + laysel = match_str(laytime.label,opt.hdr.label(compindx(i))); + if ~isempty(datsel) + plot_text(labelx(laysel), labely(laysel), opt.hdr.label(compindx(i))); + % plot the timecourse of this component + plot_vector(tim, dat(datsel, :), 'hpos', laytime.pos(laysel,1), 'vpos', laytime.pos(laysel,2), 'width', laytime.width(laysel), 'height', laytime.height(laysel), 'hlim', hlim, 'vlim', vlim); + % plot the topography of this component + chanz = opt.orgdata.topo(sel1,compindx(i)); + plot_topo(chanx, chany, chanz, 'mask', laychan.mask, 'outline', laychan.outline, 'hpos', laytopo.pos(laysel,1), 'vpos', laytopo.pos(laysel,2), 'width', laytopo.width(laysel), 'height', laytopo.height(laysel)) + axis equal + drawnow + end + end + set(gca, 'xTick', []) + set(gca, 'yTick', []) + title(sprintf('%s %d, time from %g to %g s', opt.trialname, opt.trlop, tim(1), tim(end))); + + ax(1) = min(laytopo.pos(:,1) - laytopo.width/2); + ax(2) = max(laytime.pos(:,1) + laytime.width/2); + ax(3) = min(laytime.pos(:,2) - laytime.height/2); + ax(4) = max(laytime.pos(:,2) + laytime.height/2); + axis(ax) + + % remember the scaling of the horizontal axis, this is needed for mouse input + hpos(1) = laytime.pos(1,1) - laytime.width(1)/2; % the position of the left side of the timecourse box + hpos(2) = laytime.pos(1,1) + laytime.width(1)/2; % the position of the right side of the timecourse box + opt.hlim = hlim; + opt.hpos = hpos; + + case 'settings' + % FIXME implement further details + + otherwise + error('unknown viewmode "%s"', opt.cfg.viewmode); +end % switch viewmode +fprintf('done\n'); + +guidata(h, opt); +end diff --git a/external/fieldtrip/private/datatype.m b/external/fieldtrip/private/datatype.m index ccceb81..59e737a 100644 --- a/external/fieldtrip/private/datatype.m +++ b/external/fieldtrip/private/datatype.m @@ -13,6 +13,12 @@ % Copyright (C) 2008, Robert Oostenveld % % $Log: datatype.m,v $ +% Revision 1.8 2009/08/17 08:41:00 jansch +% added undocumented and experimental datatypes mvar and freqmvar +% +% Revision 1.7 2009/06/15 12:55:18 roboos +% also recognize cohspctrm as type=freq +% % Revision 1.6 2009/03/25 20:52:07 jansch % changed the conditional order to ensure correct behaviour for a comp-struct % @@ -35,18 +41,26 @@ % determine the type of input data, this can be raw, freq, timelock, comp, spike, source, volume, dip israw = isfield(data, 'label') && isfield(data, 'time') && isa(data.time, 'cell') && isfield(data, 'trial') && isa(data.trial, 'cell'); -isfreq = isfield(data, 'label') && isfield(data, 'freq') && (isfield(data, 'powspctrm') || isfield(data, 'crsspctrm') || isfield(data, 'fourierspctrm')); +isfreq = isfield(data, 'label') && isfield(data, 'freq') && (isfield(data, 'powspctrm') || isfield(data, 'crsspctrm') || isfield(data, 'cohspctrm') || isfield(data, 'fourierspctrm')); istimelock = isfield(data, 'label') && isfield(data, 'time') && ~isfield(data, 'freq') && ((isfield(data, 'avg') && isnumeric(data.avg)) || (isfield(data, 'trial') && isnumeric(data.trial) || (isfield(data, 'cov') && isnumeric(data.cov)))); iscomp = isfield(data, 'topo') || isfield(data, 'topolabel'); isspike = isfield(data, 'label') && isfield(data, 'waveform') && isa(data.waveform, 'cell') && isfield(data, 'timestamp') && isa(data.timestamp, 'cell'); isvolume = isfield(data, 'transform') && isfield(data, 'dim'); issource = isfield(data, 'pos'); isdip = isfield(data, 'dip'); +ismvar = isfield(data, 'dimord') && ~isempty(strfind(data.dimord, 'lag')); +isfreqmvar = isfield(data, 'freq') && isfield(data, 'transfer'); if iscomp type = 'comp'; %comp should conditionally go before raw, otherwise the returned datatype %will be raw +elseif isfreqmvar + type = 'freqmvar'; + %freqmvar should conditionally go before freq, otherwise the returned datatype + %will be freq in the case of frequency mvar data +elseif ismvar + type = 'mvar'; elseif israw type = 'raw'; elseif isfreq diff --git a/external/fieldtrip/private/denoise_synthetic.m b/external/fieldtrip/private/denoise_synthetic.m index 4e5242c..8b0d975 100644 --- a/external/fieldtrip/private/denoise_synthetic.m +++ b/external/fieldtrip/private/denoise_synthetic.m @@ -15,6 +15,9 @@ % Copyright (C) 2004-2008, Robert Oostenveld % % $Log: denoise_synthetic.m,v $ +% Revision 1.8 2009/07/08 07:20:48 roboos +% allow for arbitrary balancing and not only a small hardcoded list +% % Revision 1.7 2008/09/22 20:17:43 roboos % added call to fieldtripdefs to the begin of the function % @@ -80,41 +83,31 @@ current = data.grad.balance.current; desired = cfg.gradient; -% first undo/invert the previously applied balancing -switch current - case 'none' - % nothing to do - case 'G1BR' - data.grad = apply_montage(data.grad, data.grad.balance.G1BR, 'keepunused', 'yes', 'inverse', 'yes'); - data = apply_montage(data , data.grad.balance.G1BR, 'keepunused', 'yes', 'inverse', 'yes'); - case 'G2BR' - data.grad = apply_montage(data.grad, data.grad.balance.G2BR, 'keepunused', 'yes', 'inverse', 'yes'); - data = apply_montage(data , data.grad.balance.G2BR, 'keepunused', 'yes', 'inverse', 'yes'); - case 'G3BR' - data.grad = apply_montage(data.grad, data.grad.balance.G3BR, 'keepunused', 'yes', 'inverse', 'yes'); - data = apply_montage(data , data.grad.balance.G3BR, 'keepunused', 'yes', 'inverse', 'yes'); - otherwise +if ~strcmp(current, 'none') + % first undo/invert the previously applied balancing + try + current_montage = getfield(data.grad.balance, data.grad.balance.current); + catch error('unknown balancing for input data'); -end -data.grad.balance.current = 'none'; + end + fprintf('converting from "%s" to "none"\n', current); + data.grad = apply_montage(data.grad, current_montage, 'keepunused', 'yes', 'inverse', 'yes'); + data = apply_montage(data , current_montage, 'keepunused', 'yes', 'inverse', 'yes'); + data.grad.balance.current = 'none'; +end % if -% then apply the desired balancing -switch desired - case 'none' - % nothing to do - case 'G1BR' - data.grad = apply_montage(data.grad, data.grad.balance.G1BR, 'keepunused', 'yes', 'inverse', 'no'); - data = apply_montage(data , data.grad.balance.G1BR, 'keepunused', 'yes', 'inverse', 'no'); - case 'G2BR' - data.grad = apply_montage(data.grad, data.grad.balance.G2BR, 'keepunused', 'yes', 'inverse', 'no'); - data = apply_montage(data , data.grad.balance.G2BR, 'keepunused', 'yes', 'inverse', 'no'); - case 'G3BR' - data.grad = apply_montage(data.grad, data.grad.balance.G3BR, 'keepunused', 'yes', 'inverse', 'no'); - data = apply_montage(data , data.grad.balance.G3BR, 'keepunused', 'yes', 'inverse', 'no'); - otherwise +if ~strcmp(desired, 'none') + % then apply the desired balancing + try + desired_montage = getfield(data.grad.balance, cfg.gradient); + catch error('unknown balancing for input data'); -end -data.grad.balance.current = desired; + end + fprintf('converting from "none" to "%s"\n', desired); + data.grad = apply_montage(data.grad, desired_montage, 'keepunused', 'yes', 'inverse', 'yes'); + data = apply_montage(data , desired_montage, 'keepunused', 'yes', 'inverse', 'yes'); + data.grad.balance.current = desired; +end % if % reorder the channels to stay close to the original ordering [selorg, selnew] = match_str(labelorg, data.label); @@ -136,7 +129,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: denoise_synthetic.m,v 1.7 2008/09/22 20:17:43 roboos Exp $'; +cfg.version.id = '$Id: denoise_synthetic.m,v 1.8 2009/07/08 07:20:48 roboos Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/dipole_fit.m b/external/fieldtrip/private/dipole_fit.m index e68a5a5..04137f1 100644 --- a/external/fieldtrip/private/dipole_fit.m +++ b/external/fieldtrip/private/dipole_fit.m @@ -28,6 +28,9 @@ % Copyright (C) 2003-2008, Robert Oostenveld % % $Log: dipole_fit.m,v $ +% Revision 1.15 2009/07/02 15:38:06 roboos +% use fixdipole for consistent dipole structure representation +% % Revision 1.14 2009/03/13 07:24:52 roboos % changed handling of optimization function (fminunc/fminsearch), now uses hastoolbox which is also able to check the availablity of a license for the optimimization toolbox % @@ -169,38 +172,15 @@ dat = avgref(dat); end -% check the input dipole position specification, should be Nx3 -[m, n] = size(dip.pos); -if n==3 - % this is ok -elseif m==3 - % it is possible to translate it into a Nx3 unambiguously - warning('input dipole positions should be specified as Nx3 matrix'); - dip.pos = dip.pos'; -else - error('input dipole positions should be specified as Nx3 matrix'); -end - -if isfield(dip, 'mom') - % check the input dipole moment specification, should be 3xN - [m, n] = size(dip.mom); - if m==3 - % this is ok - elseif n==3 - % it is possible to translate it into a 3xN unambiguously - warning('input dipole moments should be specified as 3xN matrix'); - dip.mom = dip.mom'; - else - error('input dipole moments should be specified as 3xN matrix'); - end -end +% ensure correct dipole position and moment specification +dip = fixdipole(dip); % reformat the position parameters in case of multiple dipoles, this % should result in the matrix changing from [x1 y1 z1; x2 y2 z2] to % [x1 y1 z1 x2 y2 z2] for the constraints to work -param = dip.pos'; -param = param(:)'; numdip = size(dip.pos, 1); +param = dip.pos'; +param = param(:)'; % add the orientation to the nonlinear parameters if isfield(constr, 'fixedori') && constr.fixedori @@ -271,9 +251,12 @@ dipout.mom = ori; % dipole orientation as vector dipout.ampl = mom; % dipole strength else - dipout.mom = mom; % dipole moment, which represents both the orientation and strength as vector + dipout.mom = mom; % dipole moment as vector or matrix, which represents both the orientation and strength as vector end +% ensure correct dipole position and moment specification +dipout = fixdipole(dipout); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DIPFIT_ERROR computes the error between measured and model data % and can be used for non-linear fitting of dipole position diff --git a/external/fieldtrip/private/dipolefitting.m b/external/fieldtrip/private/dipolefitting.m index 102d6ca..88df1ae 100644 --- a/external/fieldtrip/private/dipolefitting.m +++ b/external/fieldtrip/private/dipolefitting.m @@ -26,7 +26,7 @@ % cfg.hdmfile = string, file containing the volume conduction model % or alternatively % cfg.vol = structure with volume conduction model -% If the sensor information is not contained in the data itself you should +% If the sensor information is not contained in the data itself you should % also specify the sensor information using % cfg.gradfile = string, file containing the gradiometer definition % cfg.elecfile = string, file containing the electrode definition @@ -104,7 +104,7 @@ % cfg.grid.inside, documented % cfg.grid.outside, documented % cfg.symmetry, documented -% cfg.mri +% cfg.mri % cfg.mriunits % cfg.smooth % cfg.sourceunits @@ -121,8 +121,22 @@ % cfg.vol, documented % Copyright (C) 2004-2006, Robert Oostenveld -% +% % $Log: dipolefitting.m,v $ +% Revision 1.57 2009/07/02 15:55:15 roboos +% fixed typo +% +% Revision 1.56 2009/07/02 15:54:15 roboos +% convert 1x6 dipole position (after scanning with symmetric pair) into 2x3 to prevent warning later +% +% Revision 1.55 2009/07/02 15:37:04 roboos +% use senstype instead of strcmp +% use fixdipole helper function for consistent dipole structure representation +% +% Revision 1.54 2009/06/03 09:51:16 roboos +% changed input specification of dip.mom into 3xNdipoles +% give explicit error if unsupported dipole model +% % Revision 1.53 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -443,7 +457,7 @@ end % check whether EEG is average referenced -if strcmp(sens.type, 'electrodes') +if senstype(sens, 'eeg') if any(rv(Vdata, avgref(Vdata))>0.001) warning('the EEG data is not average referenced, correcting this'); end @@ -453,7 +467,7 @@ % set to zeros if no initial dipole was specified if ~isfield(cfg, 'dip') cfg.dip.pos = zeros(cfg.numdipoles, 3); - cfg.dip.mom = zeros(cfg.numdipoles*3, 1); + cfg.dip.mom = zeros(3*cfg.numdipoles, 1); end % set to zeros if no initial dipole position was specified @@ -463,11 +477,11 @@ % set to zeros if no initial dipole moment was specified if ~isfield(cfg.dip, 'mom') - cfg.dip.mom = zeros(cfg.numdipoles*3, 1); + cfg.dip.mom = zeros(3*cfg.numdipoles, 1); end % check the specified dipole model -if prod(size(cfg.dip.pos))~=cfg.numdipoles*3 || prod(size(cfg.dip.mom))~=cfg.numdipoles*3 +if numel(cfg.dip.pos)~=cfg.numdipoles*3 || numel(cfg.dip.mom)~=cfg.numdipoles*3 error('inconsistent number of dipoles in configuration') end @@ -500,12 +514,14 @@ % dipole moment this makes the model potential U=lf*pinv(lf)*V and the % model error is norm(V-U) = norm(V-lf*pinv(lf)*V) = norm((eye-lf*pinv(lf))*V) switch cfg.model - case 'regional' - % sum the error over all latencies - grid.error(indx,1) = sum(sum(((eye(nchans)-lf*pinv(lf))*Vdata).^2)); - case 'moving' - % remember the error for each latency independently - grid.error(indx,:) = sum(((eye(nchans)-lf*pinv(lf))*Vdata).^2); + case 'regional' + % sum the error over all latencies + grid.error(indx,1) = sum(sum(((eye(nchans)-lf*pinv(lf))*Vdata).^2)); + case 'moving' + % remember the error for each latency independently + grid.error(indx,:) = sum(((eye(nchans)-lf*pinv(lf))*Vdata).^2); + otherwise + error('unsupported cfg.model'); end % switch model end % looping over the grid progress('close'); @@ -514,8 +530,9 @@ case 'regional' % find the grid point(s) with the minimum error [err, indx] = min(grid.error(grid.inside)); - dip.pos = grid.pos(grid.inside(indx),:); % note that for a symmetric dipole pair this results in a vector - dip.mom = zeros(cfg.numdipoles*3,1); % set the dipole moment to zero + dip.pos = grid.pos(grid.inside(indx),:); % note that for a symmetric dipole pair this results in a vector + dip.pos = reshape(dip.pos, cfg.numdipoles, 3); % convert to a Nx3 array + dip.mom = zeros(cfg.numdipoles*3,1); % set the dipole moment to zero if cfg.numdipoles==1 fprintf('found minimum after scanning on grid point [%g %g %g]\n', dip.pos(1), dip.pos(2), dip.pos(3)); elseif cfg.numdipoles==2 @@ -525,44 +542,45 @@ for t=1:ntime % find the grid point(s) with the minimum error [err, indx] = min(grid.error(grid.inside,t)); - dip(t).pos = grid.pos(grid.inside(indx),:); % note that for a symmetric dipole pair this results in a vector - dip(t).mom = zeros(cfg.numdipoles*3,1); % set the dipole moment to zero + dip(t).pos = grid.pos(grid.inside(indx),:); % note that for a symmetric dipole pair this results in a vector + dip(t).pos = reshape(dip(t).pos, cfg.numdipoles, 3); % convert to a Nx3 array + dip(t).mom = zeros(cfg.numdipoles*3,1); % set the dipole moment to zero if cfg.numdipoles==1 fprintf('found minimum after scanning for topography %d on grid point [%g %g %g]\n', t, dip(t).pos(1), dip(t).pos(2), dip(t).pos(3)); elseif cfg.numdipoles==2 fprintf('found minimum after scanning for topography %d on grid point [%g %g %g; %g %g %g]\n', t, dip(t).pos(1), dip(t).pos(2), dip(t).pos(3), dip(t).pos(4), dip(t).pos(5), dip(t).pos(6)); end end + otherwise + error('unsupported cfg.model'); end % switch model end % if gridsearch if strcmp(cfg.gridsearch, 'no') % use the initial guess supplied in the configuration for the remainder switch cfg.model - case 'regional' - dip = cfg.dip; - case 'moving' - for t=1:ntime - dip(t) = cfg.dip; - end + case 'regional' + dip = struct(cfg.dip); + case 'moving' + for t=1:ntime + dip(t) = struct(cfg.dip); + end + otherwise + error('unsupported cfg.model'); end % switch model -end +end % multiple dipoles can be represented either as a 1x(N*3) vector or as a Nx3 matrix, % i.e. [x1 y1 z1 x2 y2 z2] or [x1 y1 z1; x2 y2 z2] switch cfg.model -case 'regional' - if length(dip.pos)==cfg.numdipoles*3 - % reshape the vector representation into a N*3 matrix - dip.pos = transpose(reshape(dip.pos, 3, cfg.numdipoles)); - end -case 'moving' - for t=1:ntime - if length(dip(t).pos)==cfg.numdipoles*3 - % reshape the vector representation into a N*3 matrix - dip(t).pos = transpose(reshape(dip(t).pos, 3, cfg.numdipoles)); + case 'regional' + dip = fixdipole(dip); + case 'moving' + for t=1:ntime + dip(t) = fixdipole(dip(t)); end - end + otherwise + error('unsupported cfg.model'); end % switch model if isfield(cfg, 'dipfit') @@ -578,55 +596,60 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if strcmp(cfg.nonlinear, 'yes') switch cfg.model - case 'regional' - % perform the non-linear dipole fit for all latencies together - % catch errors due to non-convergence - try - dip = dipole_fit(dip, sens, vol, Vdata, optarg{:}); - success = 1; - if cfg.numdipoles==1 - fprintf('found minimum after non-linear optimization on [%g %g %g]\n', dip.pos(1), dip.pos(2), dip.pos(3)); - elseif cfg.numdipoles==2 - fprintf('found minimum after non-linear optimization on [%g %g %g; %g %g %g]\n', dip.pos(1,1), dip.pos(1,2), dip.pos(1,3), dip.pos(2,1), dip.pos(2,2), dip.pos(2,3)); - end - catch - success = 0; - disp(lasterr); - end - case 'moving' - % perform the non-linear dipole fit for each latency independently - % instead of using dip(t) = dipole_fit(dip(t),...), I am using temporary variables dipin and dipout - % this is to prevent errors of the type "Subscripted assignment between dissimilar structures" - dipin = dip; - for t=1:ntime + case 'regional' + % perform the non-linear dipole fit for all latencies together % catch errors due to non-convergence try - dipout(t) = dipole_fit(dipin(t), sens, vol, Vdata(:,t), optarg{:}); - success(t) = 1; + dip = dipole_fit(dip, sens, vol, Vdata, optarg{:}); + success = 1; if cfg.numdipoles==1 - fprintf('found minimum after non-linear optimization for topography %d on [%g %g %g]\n', t, dipout(t).pos(1), dipout(t).pos(2), dipout(t).pos(3)); + fprintf('found minimum after non-linear optimization on [%g %g %g]\n', dip.pos(1), dip.pos(2), dip.pos(3)); elseif cfg.numdipoles==2 - fprintf('found minimum after non-linear optimization for topography %d on [%g %g %g; %g %g %g]\n', t, dipout(t).pos(1,1), dipout(t).pos(1,2), dipout(t).pos(1,3), dipout(t).pos(2,1), dipout(t).pos(2,2), dipout(t).pos(2,3)); + fprintf('found minimum after non-linear optimization on [%g %g %g; %g %g %g]\n', dip.pos(1,1), dip.pos(1,2), dip.pos(1,3), dip.pos(2,1), dip.pos(2,2), dip.pos(2,3)); end catch - dipout(t).pos = dipin(t).pos; - dipout(t).mom = dipin(t).mom; - success(t) = 0; + success = 0; disp(lasterr); end - end - dip = dipout; - clear dipin dipout - end + case 'moving' + % perform the non-linear dipole fit for each latency independently + % instead of using dip(t) = dipole_fit(dip(t),...), I am using temporary variables dipin and dipout + % this is to prevent errors of the type "Subscripted assignment between dissimilar structures" + dipin = dip; + for t=1:ntime + % catch errors due to non-convergence + try + dipout(t) = dipole_fit(dipin(t), sens, vol, Vdata(:,t), optarg{:}); + success(t) = 1; + if cfg.numdipoles==1 + fprintf('found minimum after non-linear optimization for topography %d on [%g %g %g]\n', t, dipout(t).pos(1), dipout(t).pos(2), dipout(t).pos(3)); + elseif cfg.numdipoles==2 + fprintf('found minimum after non-linear optimization for topography %d on [%g %g %g; %g %g %g]\n', t, dipout(t).pos(1,1), dipout(t).pos(1,2), dipout(t).pos(1,3), dipout(t).pos(2,1), dipout(t).pos(2,2), dipout(t).pos(2,3)); + end + catch + dipout(t).pos = dipin(t).pos; + dipout(t).mom = dipin(t).mom; + success(t) = 0; + disp(lasterr); + end + end + dip = dipout; + clear dipin dipout + otherwise + error('unsupported cfg.model'); + end % switch model end % if nonlinear if strcmp(cfg.nonlinear, 'no') % the optimal dipole positions are either obrained from scanning or from the initial configured seed switch cfg.model - case 'regional' - success = 1; - case 'moving' - success = ones(1,ntime); + case 'regional' + success = 1; + case 'moving' + success = ones(1,ntime); + otherwise + error('unsupported cfg.model'); + end % switch model end @@ -634,42 +657,46 @@ % compute the model potential distribution and the residual variance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% switch cfg.model -case 'regional' - if success - % re-compute the leadfield in order to compute the model potential and dipole moment - lf = compute_leadfield(dip.pos, sens, vol); - % compute all details of the final dipole model - dip.mom = pinv(lf)*Vdata; - dip.pot = lf*dip.mom; - dip.rv = rv(Vdata, dip.pot); - Vmodel = dip.pot; - end -case 'moving' - for t=1:ntime - if success(t) + case 'regional' + if success % re-compute the leadfield in order to compute the model potential and dipole moment - lf = compute_leadfield(dip(t).pos, sens, vol); + lf = compute_leadfield(dip.pos, sens, vol); % compute all details of the final dipole model - dip(t).mom = pinv(lf)*Vdata(:,t); - dip(t).pot = lf*dip(t).mom; - dip(t).rv = rv(Vdata(:,t), dip(t).pot); - Vmodel(:,t) = dip(t).pot; + dip.mom = pinv(lf)*Vdata; + dip.pot = lf*dip.mom; + dip.rv = rv(Vdata, dip.pot); + Vmodel = dip.pot; end - end + case 'moving' + for t=1:ntime + if success(t) + % re-compute the leadfield in order to compute the model potential and dipole moment + lf = compute_leadfield(dip(t).pos, sens, vol); + % compute all details of the final dipole model + dip(t).mom = pinv(lf)*Vdata(:,t); + dip(t).pot = lf*dip(t).mom; + dip(t).rv = rv(Vdata(:,t), dip(t).pot); + Vmodel(:,t) = dip(t).pot; + end + end + otherwise + error('unsupported cfg.model'); end % switch model switch cfg.model -case 'regional' - if isfreq - % the matrix with the dipole moment is encrypted and cannot be interpreted straight away - % reconstruct the frequency representation of the data at the source level - [dip.pow, dip.csd, dip.fourier] = timelock2freq(dip.mom); - end -case 'moving' - if isfreq - % although this is technically possible sofar, it does not make any sense - warning('a moving dipole model in the frequency domain is not supported'); - end + case 'regional' + if isfreq + % the matrix with the dipole moment is encrypted and cannot be interpreted straight away + % reconstruct the frequency representation of the data at the source level + [dip.pow, dip.csd, dip.fourier] = timelock2freq(dip.mom); + end + case 'moving' + if isfreq + % although this is technically possible sofar, it does not make any sense + warning('a moving dipole model in the frequency domain is not supported'); + end + otherwise + error('unsupported cfg.model'); end % switch model %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -705,7 +732,7 @@ end % get the output cfg -cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); +cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); % add the version details of this function call to the configuration try @@ -716,7 +743,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: dipolefitting.m,v 1.53 2009/01/20 13:01:31 sashae Exp $'; +cfg.version.id = '$Id: dipolefitting.m,v 1.57 2009/07/02 15:55:15 roboos Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/dipolesimulation.m b/external/fieldtrip/private/dipolesimulation.m index bbd2c48..40a34fc 100644 --- a/external/fieldtrip/private/dipolesimulation.m +++ b/external/fieldtrip/private/dipolesimulation.m @@ -59,6 +59,9 @@ % Copyright (C) 2004, Robert Oostenveld % % $Log: dipolesimulation.m,v $ +% Revision 1.24 2009/07/02 15:37:32 roboos +% use fixdipole for consistent dipole structure representation +% % Revision 1.23 2009/03/23 21:19:51 roboos % allow different amplitudes for different dipoles % @@ -109,10 +112,8 @@ if ~isfield(cfg, 'feedback'), cfg.feedback = 'text'; end if ~isfield(cfg, 'channel'), cfg.channel = 'all'; end +cfg.dip = fixdipole(cfg.dip); Ndipoles = size(cfg.dip.pos,1); -if size(cfg.dip.pos,2)~=3 - error('dipole positions should be specified as [x, y, z]'); -end % prepare the volume conductor and the sensor array [vol, sens, cfg] = prepare_headmodel(cfg, []); @@ -126,10 +127,6 @@ end Ntrials = cfg.ntrials; -if all(size(cfg.dip.mom)==[1 3]) - cfg.dip.mom = cfg.dip.mom'; -end - if isfield(cfg.dip, 'frequency') % this should be a column vector cfg.dip.frequency = cfg.dip.frequency(:); @@ -252,7 +249,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: dipolesimulation.m,v 1.23 2009/03/23 21:19:51 roboos Exp $'; +cfg.version.id = '$Id: dipolesimulation.m,v 1.24 2009/07/02 15:37:32 roboos Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/electroderealign.m b/external/fieldtrip/private/electroderealign.m index dea261c..0c39dfd 100644 --- a/external/fieldtrip/private/electroderealign.m +++ b/external/fieldtrip/private/electroderealign.m @@ -1,4 +1,4 @@ -function [norm] = electroderealign(cfg); +function [norm] = electroderealign(cfg) % ELECTRODEREALIGN rotates and translates electrode positions to % template electrode positions or towards the head surface. It can @@ -48,6 +48,7 @@ % cfg.casesensitive = 'yes' or 'no', determines whether string comparisons % between electrode labels are case sensitive (default = 'yes') % cfg.feedback = 'yes' or 'no' (default = 'no') +% cfg.outline = 'yes' or 'no' to add the outline characteristic landmarks such as sulci (default = 'no') % % The electrode set that will be realigned is specified as % cfg.elecfile = string with filename, or alternatively @@ -76,11 +77,17 @@ % single triangulated boundary, or a Nx3 matrix with surface % points % -% See also READ_FCDC_ELEC, VOLUMEREALIGN +% See also READ_ELEC, VOLUMEREALIGN -% Copyright (C) 2005-2008, Robert Oostenveld +% Copyright (C) 2005-2009, Robert Oostenveld % % $Log: electroderealign.m,v $ +% Revision 1.13 2009/06/30 07:10:11 roboos +% first proper implementation of manual clicking of electrode locations (using scalp mesh) +% +% Revision 1.12 2009/06/04 10:03:46 roboos +% fixed problem in the input og cfg.headshape when it was not required +% % Revision 1.11 2009/05/25 08:05:18 roboos % ensure that cfg.headshape is a sturct and not a config object (in case tracking is on) % @@ -165,11 +172,12 @@ % set the defaults if ~isfield(cfg, 'channel'), cfg.channel = 'all'; end if ~isfield(cfg, 'feedback'), cfg.feedback = 'no'; end +if ~isfield(cfg, 'outline'), cfg.outline = 'no'; end if ~isfield(cfg, 'casesensitive'), cfg.casesensitive = 'yes'; end if ~isfield(cfg, 'headshape'), cfg.headshape = []; end % for triangulated head surface, without labels if ~isfield(cfg, 'template'), cfg.template = []; end % for electrodes or fiducials, always with labels -if isa(cfg.headshape, 'config') +if isfield(cfg, 'headshape') && isa(cfg.headshape, 'config') % convert the nested config-object back into a normal structure cfg.headshape = struct(cfg.headshape); end @@ -224,7 +232,7 @@ end if ~isfield(headshape, 'tri') % generate a closed triangulation from the surface points - headshape.pnt = unique(headshape,pnt, 'rows'); + headshape.pnt = unique(headshape.pnt, 'rows'); headshape.tri = projecttri(headshape.pnt); end end @@ -494,16 +502,23 @@ norm = tmp; clear tmp - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% elseif strcmp(cfg.method, 'position') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % open a figure + % open a figure fig = figure; rotate3d on - % plot_mesh - % select_point - - keyboard + plot_mesh(headshape, 'edgecolor', 'k') + xyz = select_point3d(headshape, 'multiple', true); + orig.pnt = xyz; + for i=1:size(orig.pnt,1) + orig.label{i,1} = 'unknown'; + end + + if strcmp(cfg.outline, 'yes') + % FIXME also go over the outlines with manual clicking + keyboard + end else error('unknown method'); @@ -511,10 +526,22 @@ % apply the spatial transformation to all electrodes, and replace the % electrode labels by their case-sensitive original values -if any(strcmp(cfg.method, {'rigidbody', 'globalrescale', 'traditional', 'nonlin1', 'nonlin2', 'nonlin3', 'nonlin4', 'nonlin5'})) - norm.pnt = warp_apply(norm.m, orig.pnt, cfg.method); -else - norm.pnt = warp_apply(norm.m, orig.pnt, 'homogenous'); +switch cfg.method + case {'rigidbody', 'globalrescale', 'traditional', 'nonlin1', 'nonlin2', 'nonlin3', 'nonlin4', 'nonlin5'} + norm.pnt = warp_apply(norm.m, orig.pnt, cfg.method); + if isfield(orig, 'outline') + % FIXME also apply the warp to the outlines + end + case {'interactive'} + norm.pnt = warp_apply(norm.m, orig.pnt, 'homogenous'); + if isfield(orig, 'outline') + % FIXME also apply the warp to the outlines + end + case {'position'} + % the positions are already assigned in correspondence with the mesh + norm = orig; + otherwise + error('unknown method'); end if isfield(orig, 'label') @@ -530,7 +557,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: electroderealign.m,v 1.11 2009/05/25 08:05:18 roboos Exp $'; +cfg.version.id = '$Id: electroderealign.m,v 1.13 2009/06/30 07:10:11 roboos Exp $'; % remember the configuration norm.cfg = cfg; diff --git a/external/fieldtrip/private/fetch_data.m b/external/fieldtrip/private/fetch_data.m index e19c77d..1c31527 100644 --- a/external/fieldtrip/private/fetch_data.m +++ b/external/fieldtrip/private/fetch_data.m @@ -11,6 +11,20 @@ % Copyright (C) 2008, Esther Meeuwissen % % $Log: fetch_data.m,v $ +% Revision 1.4 2009/08/05 08:23:25 roboos +% use preallocated integet vectors for all indexing +% skip the indexing of trials that are of no interest -> huge speedup +% +% Revision 1.3 2009/08/04 16:14:05 roboos +% give error for multiple occurence +% return nan for missing samples +% +% Revision 1.2 2009/07/06 09:41:18 jansch +% multiple changes. allowing for selection of rpt in frequency data when input +% data has rpttap. allowing for grandaveraging functionality in the case of +% multiple inputs with the same dimensionalities. this is equivalent to the +% XXXgrandaverage functions with keepindividual = 'yes'. +% % Revision 1.1 2008/11/13 09:55:36 roboos % moved from fieldtrip/private, fileio or from roboos/misc to new location at fieldtrip/public % @@ -62,22 +76,30 @@ % these are for bookkeeping maxsample = max(trl(:,2)); -count = zeros(1, maxsample); -trialnum = NaN(1, maxsample); -samplenum = NaN(1, maxsample); +count = zeros(1, maxsample, 'int32'); +trialnum = zeros(1, maxsample, 'int32'); +samplenum = zeros(1, maxsample, 'int32'); +% determine for each sample in the data where it originates from for trllop=1:trlnum + trlbeg = trl(trllop,1); + trlend = trl(trllop,2); + if trlbeg>endsample || trlend Nan - trialnum(trl(trllop,1):trl(trllop,2)) = trllop; + trialnum(trlbeg:trlend) = trllop; % make samplenum vector with samplenrs for each sample in the old trials - samplenum(trl(trllop,1):trl(trllop,2)) = 1:trllen(trllop); + samplenum(trlbeg:trlend) = 1:trllen(trllop); end % overlap --> NaN -trialnum(count>1) = NaN; -samplenum(count>1) = NaN; +%trialnum(count>1) = NaN; +%samplenum(count>1) = NaN; % make a subselection for the desired samples count = count(begsample:endsample); @@ -86,14 +108,18 @@ % check if all samples are present and are not present twice or more if any(count==0) - error('not all requested samples are present in the data'); + warning('not all requested samples are present in the data, filling with NaNs'); elseif any(count>1) error('some of the requested samples occur twice in the data'); end % construct the output data array -dat = zeros(length(chanindx), length(samplenum)); +dat = nan(length(chanindx), length(samplenum)); for smplop=1:length(samplenum) + if samplenum(smplop)==0 + dat(:, smplop) = nan; + else dat(:, smplop) = data.trial{trialnum(smplop)}(chanindx,samplenum(smplop)); + end end diff --git a/external/fieldtrip/private/filetype.m b/external/fieldtrip/private/filetype.m index b454bfd..25515ab 100644 --- a/external/fieldtrip/private/filetype.m +++ b/external/fieldtrip/private/filetype.m @@ -54,6 +54,9 @@ % Copyright (C) 2003-2007 Robert Oostenveld % % $Log: filetype.m,v $ +% Revision 1.98 2009/07/07 10:38:38 roboos +% added header check for dicom +% % Revision 1.97 2009/05/06 15:42:06 roboos % also remember/check previous directory and don't do filetype caching in case type=unknown % @@ -903,7 +906,7 @@ type = 'layout'; manufacturer = 'Ole Jensen'; content = 'layout of channels for plotting'; -elseif filetype_check_extension(filename, '.dcm') || filetype_check_extension(filename, '.ima') +elseif filetype_check_extension(filename, '.dcm') || filetype_check_extension(filename, '.ima') || filetype_check_header(filename, 'DICM', 128) type = 'dicom'; manufacturer = 'Dicom'; content = 'image data'; diff --git a/external/fieldtrip/private/fixdimord.m b/external/fieldtrip/private/fixdimord.m index 16ee59f..f694d76 100644 --- a/external/fieldtrip/private/fixdimord.m +++ b/external/fieldtrip/private/fixdimord.m @@ -10,8 +10,8 @@ % This will modify the data.dimord field to ensure consistency. % The name of the axis is the same as the name of the dimord, i.e. if % dimord='freq_time', then data.freq and data.time should be present. -% -% The default dimensions in the data are described by +% +% The default dimensions in the data are described by % 'time' % 'freq' % 'chan' @@ -21,9 +21,18 @@ % 'chancmb' % 'rpttap' -% Copyright (C) 2006, Robert Oostenveld, Jan-Mathijs Schoffelen +% Copyright (C) 2009, Robert Oostenveld, Jan-Mathijs Schoffelen % % $Log: fixdimord.m,v $ +% Revision 1.3 2009/08/03 15:53:32 ingnie +% fixed bug introduced in last revision, thanks to Esther +% +% Revision 1.2 2009/08/03 15:07:51 ingnie +% cut off dimord from source and volume data, dimord is not implemented in source and volume data yet, but some functions do add it which causes unexpected behavior +% +% Revision 1.1 2009/07/02 08:04:36 roboos +% moved fixdimord and fixinside from private to public +% % Revision 1.8 2006/04/12 09:11:23 roboos % added ; to the end of a line % @@ -49,10 +58,23 @@ % new implementation % +if strcmp('volume', datatype(data)) || strcmp('source', datatype(data)); + if isfield(data, 'dimord') + % data should not have a dimord (is not implemented yet, but some + % functions add a dimord to these data which leads to unexpected behavior) + warning(sprintf('unexpected dimord "%s", dimord is removed from data', data.dimord)); + data = rmfield(data, 'dimord'); + return + else + %is okay + return + end +end + if ~isfield(data, 'dimord') if ~isfield(data, 'trial') || ~iscell(data.trial) || ... - ~isfield(data, 'time') || ~iscell(data.time) || ... - ~isfield(data, 'label') || ~iscell(data.label) + ~isfield(data, 'time') || ~iscell(data.time) || ... + ~isfield(data, 'label') || ~iscell(data.label) error('The data does not contain a dimord, but it also does not resemble raw data'); elseif isfield(data, 'topo') % the data resembles a component decomposition @@ -68,43 +90,43 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:length(dimtok) -switch dimtok{i} -case {'tim' 'time' 'toi' 'latency'} - dimtok{i} = 'time'; + switch dimtok{i} + case {'tim' 'time' 'toi' 'latency'} + dimtok{i} = 'time'; -case {'frq' 'freq' 'foi' 'frequency'} - dimtok{i} = 'freq'; + case {'frq' 'freq' 'foi' 'frequency'} + dimtok{i} = 'freq'; -case {'sgn' 'label' 'chan'} - dimtok{i} = 'chan'; + case {'sgn' 'label' 'chan'} + dimtok{i} = 'chan'; -case {'rpt' 'trial'} - dimtok{i} = 'rpt'; + case {'rpt' 'trial'} + dimtok{i} = 'rpt'; -case {'subj' 'subject'} - dimtok{i} = 'subj'; + case {'subj' 'subject'} + dimtok{i} = 'subj'; -case {'comp'} - % don't change, it is ok + case {'comp'} + % don't change, it is ok -case {'sgncmb' 'labelcmb' 'chancmb'} - dimtok{i} = 'chan'; + case {'sgncmb' 'labelcmb' 'chancmb'} + dimtok{i} = 'chan'; -case {'rpttap'} - % this is a 2-D field, coding trials and tapers along the same dimension - % don't change, it is ok + case {'rpttap'} + % this is a 2-D field, coding trials and tapers along the same dimension + % don't change, it is ok -case {'refchan'} - % don't change, it is ok + case {'refchan'} + % don't change, it is ok -case {'vox' 'repl' 'wcond'} - % these are used in some fieldtrip functions, but are not considered standard - warning(sprintf('unexpected dimord "%s"', data.dimord)); + case {'vox' 'repl' 'wcond'} + % these are used in some fieldtrip functions, but are not considered standard + warning(sprintf('unexpected dimord "%s"', data.dimord)); -otherwise - error(sprintf('unexpected dimord "%s"', data.dimord)); + otherwise + error(sprintf('unexpected dimord "%s"', data.dimord)); -end % switch dimtok + end % switch dimtok end % for length dimtok %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -142,7 +164,7 @@ % elseif isfield(data, 'fourierspctrm') % mat = data.fourierspctrm; % end -% +% % add the descriptive axis for each dimension % for i=1:length(dimtok) % if isfield(data, dimtok{i}) diff --git a/external/fieldtrip/private/fixdipole.m b/external/fieldtrip/private/fixdipole.m new file mode 100644 index 0000000..8a9de8c --- /dev/null +++ b/external/fieldtrip/private/fixdipole.m @@ -0,0 +1,39 @@ +function dip = fixdipole(dip) + +% FIXDIPOLE ensures that the dipole position and moment are +% consistently represented throughout FieldTrip functions. + +% Copyright (C) 2009, Robert Oostenveld +% +% $Log: fixdipole.m,v $ +% Revision 1.1 2009/07/02 15:35:55 roboos +% helper function for consistent dipole representation +% + +[m, n] = size(dip.pos); + +if n==3 + % the input representation is Nx3, which is what we want +elseif m==3 + % it is possible to translate it into a Nx3 unambiguously + warning('input dipole positions should be specified as Nx3 matrix'); + dip.pos = dip.pos'; +elseif m==1 + % it is possible to translate it into a Nx3 unambiguously + warning('input dipole positions should be specified as Nx3 matrix'); + dip.pos = reshape(dip.pos, 3, n/3)'; +else + % it is not clear how to convert to a Nx3 matrix + error('input dipole positions should be specified as Nx3 matrix'); +end + +if isfield(dip, 'mom') + ndip = size(dip.pos,1); + if numel(dip.mom)==ndip*3 + ntime = 1; + else + ntime = numel(dip.mom)/(ndip*3); + end + dip.mom = reshape(dip.mom, ndip*3, ntime); +end + diff --git a/external/fieldtrip/private/fixinside.m b/external/fieldtrip/private/fixinside.m index b36f950..8ed9b9f 100644 --- a/external/fieldtrip/private/fixinside.m +++ b/external/fieldtrip/private/fixinside.m @@ -12,6 +12,9 @@ % Copyright (C) 2006, Robert Oostenveld % % $Log: fixinside.m,v $ +% Revision 1.1 2009/07/02 08:04:36 roboos +% moved fixdimord and fixinside from private to public +% % Revision 1.3 2007/07/17 10:34:34 roboos % prevent display of source structure on screen by adding ; % diff --git a/external/fieldtrip/private/freqanalysis.m b/external/fieldtrip/private/freqanalysis.m index 13409ed..40b04f5 100644 --- a/external/fieldtrip/private/freqanalysis.m +++ b/external/fieldtrip/private/freqanalysis.m @@ -40,6 +40,9 @@ % Copyright (C) 2004-2006, F.C. Donders Centre, Markus Siegel % % $Log: freqanalysis.m,v $ +% Revision 1.45 2009/07/30 19:44:43 ingnie +% also allow datatype comp (by chekdata) +% % Revision 1.44 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -162,7 +165,7 @@ fieldtripdefs % check if the input data is valid for this function -data = checkdata(data, 'datatype', 'raw', 'feedback', 'yes', 'hasoffset', 'yes'); +data = checkdata(data, 'datatype', {'raw', 'comp'}, 'feedback', 'yes', 'hasoffset', 'yes'); % check if the input cfg is valid for this function cfg = checkconfig(cfg, 'trackconfig', 'on'); diff --git a/external/fieldtrip/private/freqdescriptives.m b/external/fieldtrip/private/freqdescriptives.m index 1e4ee5e..78fda98 100644 --- a/external/fieldtrip/private/freqdescriptives.m +++ b/external/fieldtrip/private/freqdescriptives.m @@ -65,6 +65,9 @@ % Copyright (C) 2004-2006, Pascal Fries & Jan-Mathijs Schoffelen, F.C. Donders Centre % % $Log: freqdescriptives.m,v $ +% Revision 1.59 2009/06/12 11:48:22 jansch +% added default for cfg.keepfourier +% % Revision 1.58 2009/04/08 06:05:23 roboos % give warning in case plv and input only one trial (solves the problem of Wendy) % @@ -212,6 +215,7 @@ if ~isfield(cfg, 'foilim'), cfg.foilim = 'all'; end if ~isfield(cfg, 'toilim'), cfg.toilim = 'all'; end if ~isfield(cfg, 'keeptrials'), cfg.keeptrials = 'no'; end +if ~isfield(cfg, 'keepfourier'), cfg.keepfourier = 'no'; end if ~isfield(cfg, 'channelcmb'), if hascsd @@ -432,9 +436,9 @@ % new efficient version sumcrsspctrm(1,1:Ncmb,1:Nfrq,1:Ntim) = nansum(freq.crsspctrm,1); -% does the same as the old inefficient version +%% does the same as the old inefficient version % sumcrsspctrm = complex(zeros(1,Ncmb,Nfrq,Ntim), ... -% zeros(1,Ncmb,Nfrq,Ntim)); +% zeros(1,Ncmb,Nfrq,Ntim)); % for j = 1:Ncmb % sumcrsspctrm(1,j,:,:) = nansum(freq.crsspctrm(:,j,:,:),1); % end @@ -691,7 +695,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: freqdescriptives.m,v 1.58 2009/04/08 06:05:23 roboos Exp $'; +cfg.version.id = '$Id: freqdescriptives.m,v 1.59 2009/06/12 11:48:22 jansch Exp $'; try, cfg.previous = freq.cfg; end % remember the configuration details diff --git a/external/fieldtrip/private/hastoolbox.m b/external/fieldtrip/private/hastoolbox.m index 8289f0d..79640d3 100644 --- a/external/fieldtrip/private/hastoolbox.m +++ b/external/fieldtrip/private/hastoolbox.m @@ -10,6 +10,9 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: hastoolbox.m,v $ +% Revision 1.36 2009/09/08 14:34:01 roboos +% also detect 64 bit windows version (thanks to arno) +% % Revision 1.35 2009/04/21 09:54:15 roboos % added prtools % @@ -318,7 +321,7 @@ % for windows computers in the F.C. Donders Centre prefix = 'h:\common\matlab'; - if ~status && strcmp(computer, 'PCWIN') + if ~status && (strcmp(computer, 'PCWIN') || strcmp(computer, 'PCWIN64')) status = myaddpath(fullfile(prefix, lower(toolbox)), silent); end diff --git a/external/fieldtrip/private/issubfield.m b/external/fieldtrip/private/issubfield.m index f494642..60d94f4 100644 --- a/external/fieldtrip/private/issubfield.m +++ b/external/fieldtrip/private/issubfield.m @@ -1,4 +1,4 @@ -function [r] = issubfield(s, f); +function [r] = issubfield(s, f) % ISSUBFIELD tests for the presence of a field in a structure just like the standard % Matlab ISFIELD function, except that you can also specify nested fields @@ -17,6 +17,9 @@ % Copyright (C) 2005, Robert Oostenveld % % $Log: issubfield.m,v $ +% Revision 1.2 2009/07/30 20:11:44 ingnie +% made output boolian +% % Revision 1.1 2008/11/13 09:55:36 roboos % moved from fieldtrip/private, fileio or from roboos/misc to new location at fieldtrip/public % @@ -26,7 +29,7 @@ try getsubfield(s, f); % if this works, then the subfield must be present - r = 1; + r = true; catch - r = 0; % apparently the subfield is not present + r = false; % apparently the subfield is not present end \ No newline at end of file diff --git a/external/fieldtrip/private/istrue.m b/external/fieldtrip/private/istrue.m index ce9a92c..2cfd5a9 100644 --- a/external/fieldtrip/private/istrue.m +++ b/external/fieldtrip/private/istrue.m @@ -6,6 +6,9 @@ % Copyright (C) 2009, Robert Oostenveld % % $Log: istrue.m,v $ +% Revision 1.4 2009/06/05 14:26:23 crimic +% added 'none' option +% % Revision 1.3 2009/05/14 11:57:37 crimic % introduced check for 'y' and 'n' % @@ -16,8 +19,8 @@ % extended and moved from plotting to public % -true_list = {'yes' 'true' 'on' 'y'}; -false_list = {'no' 'false' 'off' 'n'}; +true_list = {'yes' 'true' 'on' 'y' }; +false_list = {'no' 'false' 'off' 'n' 'none'}; if ischar(x) % convert string to boolean value diff --git a/external/fieldtrip/private/keyval.m b/external/fieldtrip/private/keyval.m index b9fefe7..106cf02 100644 --- a/external/fieldtrip/private/keyval.m +++ b/external/fieldtrip/private/keyval.m @@ -11,6 +11,12 @@ % Copyright (C) 2005-2007, Robert Oostenveld % % $Log: keyval.m,v $ +% Revision 1.5 2009/08/04 11:58:28 roboos +% perform a case-insensitive string comparison for keys +% +% Revision 1.4 2009/07/14 16:11:02 roboos +% speed up the input checks +% % Revision 1.3 2009/05/14 19:24:02 roboos % removed ; at end of function declaration % @@ -35,22 +41,20 @@ error('optional input arguments should come in key-value pairs, i.e. there should be an even number'); end -for i=1:2:length(varargin) - if ~ischar(varargin{i}) - % the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values - error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); - end -end - +% the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values keys = varargin(1:2:end); vals = varargin(2:2:end); -hit = find(strcmp(key, keys)); +if ~all(cellfun(@ischar, keys)) + error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); +end + +hit = find(strcmpi(key, keys)); if isempty(hit) % the requested key was not found val = []; elseif length(hit)==1 - % the requested key was found + % the requested key was found val = vals{hit}; else error('multiple input arguments with the same name'); diff --git a/external/fieldtrip/private/keyvalcheck.m b/external/fieldtrip/private/keyvalcheck.m index a85af05..b928f19 100644 --- a/external/fieldtrip/private/keyvalcheck.m +++ b/external/fieldtrip/private/keyvalcheck.m @@ -12,10 +12,28 @@ function keyvalcheck(arglist, varargin) % Copyright (C) 2009, Robert Oostenveld % % $Log: keyvalcheck.m,v $ +% Revision 1.4 2009/08/05 08:50:50 roboos +% allow different case in the option names, i.e. use case-insensitive comparisons +% +% Revision 1.3 2009/07/14 16:10:34 roboos +% added caching for previous input +% +% Revision 1.2 2009/06/15 14:23:26 roboos +% only check an option if specified (i.e. non-empty) +% % Revision 1.1 2009/04/14 19:37:44 roboos % new helper function, used in plot_xxx functions % +% this is to speed up subsequent calls with the same input arguments +persistent previous_argin + +current_argin = {arglist, varargin{:}}; +if ~isempty(previous_argin) && isequal(previous_argin, current_argin) + % the input is the same to the previous input, and that was OK + return +end + required = keyval('required', varargin); forbidden = keyval('forbidden', varargin); optional = keyval('optional', varargin); @@ -27,17 +45,34 @@ function keyvalcheck(arglist, varargin) error('optional input arguments should come in key-value pairs, i.e. there should be an even number'); end -set = intersect(keys, required); -if numel(set)~=numel(required) - error('the required input argument ''%s'' was not specified', set{:}); +keys = cellfun(@lower, keys, 'UniformOutput', false); + +if ~isempty(required) + % only check if specified + required = cellfun(@lower, required, 'UniformOutput', false); + set = intersect(keys, required); + if numel(set)~=numel(required) + error('the required input argument ''%s'' was not specified', set{:}); + end end -set = intersect(keys, forbidden); -if numel(set)~=0 - error('the input argument ''%s'' is forbidden', set{:}); +if ~isempty(forbidden) + % only check if specified + forbidden = cellfun(@lower, forbidden, 'UniformOutput', false); + set = intersect(keys, forbidden); + if numel(set)~=0 + error('the input argument ''%s'' is forbidden', set{:}); + end end -set = setdiff(keys, optional); -if numel(set)>0 - error('the input argument ''%s'' is forbidden', set{:}); +if ~isempty(optional) + % only check if specified + optional = cellfun(@lower, optional, 'UniformOutput', false); + set = setdiff(keys, optional); + if numel(set)>0 + error('the input argument ''%s'' is forbidden', set{:}); + end end + +% remember the current input arguments, which appear to be OK +previous_argin = current_argin; diff --git a/external/fieldtrip/private/layoutplot.m b/external/fieldtrip/private/layoutplot.m index da0c81a..4937eee 100644 --- a/external/fieldtrip/private/layoutplot.m +++ b/external/fieldtrip/private/layoutplot.m @@ -43,9 +43,15 @@ function layoutplot(cfg, data) % % See also prepare_layout, topoplotER, topoplotTFR, multiplotER, multiplotTFR +% Undocumented options +% cfg.montage + % Copyright (C) 2006-2008, Robert Oostenveld % % $Log: layoutplot.m,v $ +% Revision 1.11 2009/09/10 12:30:00 roboos +% added option for plotting an arrow for each of the bipolar electrode pairs, requires a montage and a layout +% % Revision 1.10 2009/05/12 12:35:15 roboos % moved plotting to seperate function (plot_lay) where it can be reused % @@ -137,3 +143,34 @@ function layoutplot(cfg, data) plot_lay(lay, 'point', true, 'box', true, 'label', true, 'mask', true, 'outline', true); +% the following code can be used to verify a bipolar montage, given the +% layout of the monopolar channels +if isfield(cfg, 'montage') && ~isempty(cfg.montage) + fprintf('plotting an arrow for each of the bipolar electrode pairs\n'); + % the arrow begins at the +1 electrode + % the arrow ends at the -1 electrode + for i=1:length(cfg.montage.labelnew) + begindx = find(cfg.montage.tra(i,:)==+1); + endindx = find(cfg.montage.tra(i,:)==-1); + if ~numel(begindx)==1 || ~numel(endindx)==1 + % the re-referenced channel does not seem to be a bipolar pair + continue + end + % find the position of the begin and end of the arrow + beglab = cfg.montage.labelorg{begindx}; + endlab = cfg.montage.labelorg{endindx}; + begindx = find(strcmp(lay.label, beglab)); % the index in the layout + endindx = find(strcmp(lay.label, endlab)); % the index in the layout + if ~numel(begindx)==1 || ~numel(endindx)==1 + % one of the channels in the bipolar pair does not seem to be in the layout + continue + end + + begpos = lay.pos(begindx,:); + endpos = lay.pos(endindx,:); + arrow(begpos, endpos, 'Length', 5) + + end % for all re-referenced channels +end % if montage + + diff --git a/external/fieldtrip/private/meg_leadfield1.m b/external/fieldtrip/private/meg_leadfield1.m index 447fcb0..c3ef0af 100644 --- a/external/fieldtrip/private/meg_leadfield1.m +++ b/external/fieldtrip/private/meg_leadfield1.m @@ -5,7 +5,7 @@ % [lf] = meg_leadfield1(R, pos, ori) % % with input arguments -% R position dipole +% R position dipole % pos position magnetometers % ori orientation magnetometers % @@ -21,6 +21,9 @@ % Copyright (C) 2002-2008, Robert Oostenveld % % $Log: meg_leadfield1.m,v $ +% Revision 1.3 2009/06/17 13:38:06 roboos +% cleaned up documentation +% % Revision 1.2 2009/03/12 11:05:04 roboos % implemented auto-compilation of the mex file in case it is missing % diff --git a/external/fieldtrip/private/megplanar.m b/external/fieldtrip/private/megplanar.m index 92e8948..e7cd281 100644 --- a/external/fieldtrip/private/megplanar.m +++ b/external/fieldtrip/private/megplanar.m @@ -2,7 +2,9 @@ % MEGPLANAR computes planar MEG gradients gradients for raw data % obtained from PREPROCESSING or an average ERF that was computed using -% TIMELOCKANALYSIS. +% TIMELOCKANALYSIS. It can also work on data in the frequency domain, +% obtained with FREQANALYSIS. Prerequisite for this is that the data contain +% complex-valued fourierspectra. % % Use as % [interp] = megplanar(cfg, data) @@ -21,7 +23,8 @@ % large number of dipoles that are placed in the upper layer of the brain % surface, followed by a forward computation towards a planar gradiometer % array. This requires the specification of a volume conduction model of -% the head and of a source model. +% the head and of a source model. The 'sourceproject' method is not supported for +% frequency domain data. % % A head model must be specified with % cfg.hdmfile = string, file containing the volume conduction model @@ -59,6 +62,25 @@ % Copyright (C) 2004, Robert Oostenveld % % $Log: megplanar.m,v $ +% Revision 1.45 2009/07/19 13:19:42 jansch +% fixed re-conversion into timelock datatype when input is timelock datatype +% +% Revision 1.44 2009/07/17 08:05:12 jansch +% fixed small bug +% +% Revision 1.43 2009/07/16 15:07:26 jansch +% updated documentation +% +% Revision 1.42 2009/07/16 15:05:15 jansch +% added possibility to perform planar transformation on frequency domain data. +% the frequency data of course should contain fourierspectra +% +% Revision 1.41 2009/07/14 12:35:36 roboos +% ensure that the input data is meg with a grad field +% +% Revision 1.40 2009/06/04 10:03:46 roboos +% fixed problem in the input og cfg.headshape when it was not required +% % Revision 1.39 2009/05/25 08:05:18 roboos % ensure that cfg.headshape is a sturct and not a config object (in case tracking is on) % @@ -198,8 +220,16 @@ cfg = checkconfig(cfg, 'trackconfig', 'on'); +isfreq = datatype(data, 'freq'); +israw = datatype(data, 'raw'); +istlck = datatype(data, 'timelock'); + % check if the input data is valid for this function -data = checkdata(data, 'datatype', 'raw', 'feedback', 'yes', 'senstype', {'ctf151', 'ctf275', 'bti148', 'bti248'}); +data = checkdata(data, 'datatype', {'raw' 'freq'}, 'feedback', 'yes', 'ismeg', 'yes', 'senstype', {'ctf151', 'ctf275', 'bti148', 'bti248'}); + +if isfreq, + if ~isfield(data, 'fourierspctrm'), error('freq data should containt fourier spectra'); end +end % set the default configuration if ~isfield(cfg, 'channel'), cfg.channel = 'MEG'; end @@ -213,7 +243,7 @@ if ~isfield(cfg, 'spheremesh'), cfg.spheremesh = 642; end end -if isa(cfg.headshape, 'config') +if isfield(cfg, 'headshape') && isa(cfg.headshape, 'config') % convert the nested config-object back into a normal structure cfg.headshape = struct(cfg.headshape); end @@ -223,7 +253,7 @@ cfg = checkconfig(cfg, 'renamedvalue', {'headshape', 'headmodel', []}); % select trials of interest -if ~strcmp(cfg.trials, 'all') +if ~strcmp(cfg.trials, 'all') && israw if islogical(cfg.trials), cfg.trials=find(cfg.trials); end fprintf('selecting %d trials\n', length(cfg.trials)); data.trial = data.trial(cfg.trials); @@ -241,9 +271,21 @@ cfg.trlold=trl; cfg.trl=trl(cfg.trials,:); end +elseif ~strcmp(cfg.trials, 'all') && isfreq + warning('subselection of trials is only supported for raw data as input'); end -Ntrials = length(data.trial); +if israw || istlck, + Ntrials = length(data.trial); +elseif isfreq, + Ntrials = length(data.cumtapcnt); + Nfreq = length(data.freq); + if isfield(data, 'time') + Ntime = length(data.time); + else + Ntime = 1; + end +end Nchan = length(data.label); % find the corresponding channels in the data and the gradiometer array @@ -441,7 +483,7 @@ gradC(chan,[chan neighbindx]) = A(3,:); end -elseif strcmp(cfg.planarmethod, 'sourceproject') +elseif strcmp(cfg.planarmethod, 'sourceproject') && israw %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Do an inverse computation with a simplified distributed source model % and compute forward again with the axial gradiometer array replaced by @@ -512,6 +554,8 @@ end end +elseif strcmp(cfg.planarmethod, 'sourceproject') && isfreq + error('the method ''sourceproject'' is not supported for frequency data as input'); else error('unknown method for computation of planar gradient'); end % cfg.planarmethod @@ -566,11 +610,6 @@ % combine the different sections in one linear transformation matrix transform = [transformH; transformV; transformC; transformO]; - % compute the planar gradient by multiplying the gradient-matrices with the data - for trial=1:Ntrials - interp.trial{trial} = transform * data.trial{trial}; - end - % combine the new labels into a single cell-array interp.label = [labelH(:); labelV(:); labelC(:); labelO(:)]; @@ -586,11 +625,41 @@ % remember the planar gradiometer definition interp.grad = planar.grad; -end % nearest neighbours methods + if israw || istlck, + % compute the planar gradient by multiplying the gradient-matrices with the data + for trial=1:Ntrials + interp.trial{trial} = transform * data.trial{trial}; + end + + % these should be remembered from the original data + interp.fsample = data.fsample; + interp.time = data.time; + + if istlck + % convert back into timelock structure + interp = checkdata(interp, 'datatype', 'timelock'); + end + + elseif isfreq + % compute the planar gradient by multiplying the gradient-matrices with the data + siz = size(data.fourierspctrm); + planardat = zeros(siz(1), size(transform,1), Nfreq, Ntime); + for foilop=1:Nfreq + for timlop = 1:Ntime + planardat(:,:,foilop,timlop) = data.fourierspctrm(:,:,foilop,timlop) * transform'; + end + end + interp.fourierspctrm = planardat; + + if isfield(data, 'time'), interp.time = data.time; end + if isfield(data, 'cumtapcnt'), interp.cumtapcnt = data.cumtapcnt; end + if isfield(data, 'cumsumcnt'), interp.cumsumcnt = data.cumsumcnt; end + interp.freq = data.freq; + interp.dimord = data.dimord; + interp.transform = transform; + end -% these should be remembered from the original data -interp.fsample = data.fsample; -interp.time = data.time; +end % nearest neighbours methods % get the output cfg cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); @@ -604,7 +673,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: megplanar.m,v 1.39 2009/05/25 08:05:18 roboos Exp $'; +cfg.version.id = '$Id: megplanar.m,v 1.45 2009/07/19 13:19:42 jansch Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/multiplotCC.m b/external/fieldtrip/private/multiplotCC.m new file mode 100644 index 0000000..08299c0 --- /dev/null +++ b/external/fieldtrip/private/multiplotCC.m @@ -0,0 +1,133 @@ +function multiplotCC(cfg, data) + +% MULTIPLOTCC visualiuzes the coherence between channels by using multiple +% topoplots. The topoplot at a given channel location shows the coherence +% of that channel with all other channels. +% +% Use as +% multiplotCC(cfg, data) + +% Undocumented local options: +% cfg.layout = layout filename or a structure produced by prepare_layout +% cfg.xlim +% cfg.xparam +% cfg.zparam +% This function requires input from FREQSTATISTICS_SHIFTPREDICT +% This function should be rewritten, using the clean topoplot implementation + +% Copyright (C) 2005-2006, Jan-Mathijs Schoffelen, Robert Oostenveld +% +% $Log: multiplotCC.m,v $ +% Revision 1.12 2009/06/17 13:44:52 roboos +% cleaned up help +% +% Revision 1.11 2008/09/22 20:17:43 roboos +% added call to fieldtripdefs to the begin of the function +% +% Revision 1.10 2008/09/22 12:53:27 roboos +% ensure equal and tight axes +% +% Revision 1.9 2007/04/03 15:37:07 roboos +% renamed the checkinput function to checkdata +% +% Revision 1.8 2007/03/27 11:05:19 ingnie +% changed call to fixdimord in call to checkinput +% +% Revision 1.7 2007/03/21 16:24:13 chrhes +% updated documentation regarding the fact that cfg.layout can also contain a +% layout structure obtained using the function prepare_layout.m +% +% Revision 1.6 2006/04/20 09:58:34 roboos +% updated documentation +% +% Revision 1.5 2006/04/10 12:21:14 roboos +% improved documentation +% +% Revision 1.4 2006/03/14 08:09:22 roboos +% added copyrigth and cvs log statement +% + +fieldtripdefs + +if ~isfield(cfg, 'layout'), cfg.layout = 'CTF151s.lay'; end; +if ~isfield(cfg, 'xparam'), cfg.xparam = 'foi'; end; +if ~isfield(cfg, 'xlim'), cfg.xlim = 'all'; end; +if ~isfield(cfg, 'zparam'), cfg.zparam = 'avg.icohspctrm'; end; + +% for backward compatibility with old data structures +data = checkdata(data); + +if strcmp(cfg.zparam, 'avg.icohspctrm') && ~issubfield(data, 'avg.icohspctrm'), + data.avg.icohspctrm = abs(imag(data.avg.cohspctrm)); +end + +if strcmp(data.dimord, 'refchan_chan_freq'), + %reshape input-data, such that topoplotER will take it + cnt = 1; + siz = size(data.prob); + data.labelcmb = cell(siz(1)*siz(2),2); + data.prob = reshape(data.prob, [siz(1)*siz(2) siz(3)]); + data.stat = reshape(data.stat, [siz(1)*siz(2) siz(3)]); + for j = 1:length(data.label) + for k = 1:length(data.reflabel) + data.labelcmb(cnt,:) = [data.reflabel(k) data.label(j)]; + cnt = cnt + 1; + end + end + tmpdata = data; +else + dat = getsubfield(data, cfg.zparam); + scale = [0 max(dat(:))-0.2]; +end + +if isfield(cfg, 'xparam'), + xparam = getsubfield(data, cfg.xparam); + if ~strcmp(cfg.xlim, 'all'), + fbin = [nearest(xparam, cfg.xlim(1)) nearest(xparam, cfg.xlim(2))]; + else + fbin = [xparam(1) xparam(end)]; + end +end + +[chNum,X,Y,Width,Height,Lbl] = textread(cfg.layout,'%f %f %f %f %f %s'); + +xScaleFac = 1/(max(Width)+ max(X) - min(X)); +yScaleFac = 1/(max(Height)+ max(Y) - min(Y)); + + +Xpos = xScaleFac*(X-min(X)); +Ypos = 0.9*yScaleFac*(Y-min(Y)); + +for k=1:length(chNum) - 2 + subplotOL('position',[Xpos(k) Ypos(k)+(Height(k)*yScaleFac) Width(k)*xScaleFac*2 Height(k)*yScaleFac*2]) + config.layout = cfg.layout; + if exist('tmpdata'), + + config.style = 'straight'; + config.electrodes = 'off'; + config.hlinewidth = 0.5; + try, config.refmarker = strmatch(Lbl(k), data.reflabel); + catch, config.refmarker = strmatch(Lbl(k), data.label); end + config.maplimits = [0 0.5]; + config.ecolor = [1 1 1]; + config.interplimits = 'electrodes'; + if isfield(cfg, 'xparam'), + config.xparam = cfg.xparam; + config.xlim = xparam; + else + config.xparam = 'time'; + config.xlim = [k-0.5 k+0.5]; + end + config.zparam = cfg.zparam; + config.cohrefchannel = Lbl(k); + config.showxlim = 'no'; + config.showzlim = 'no'; + config.colorbar = 'no'; + config.zlim = scale; + config.grid_scale = 30; + topoplotER(config, data); + drawnow; + end +end + + diff --git a/external/fieldtrip/private/multiplotER.m b/external/fieldtrip/private/multiplotER.m index 5ccb9d9..44e6dd3 100644 --- a/external/fieldtrip/private/multiplotER.m +++ b/external/fieldtrip/private/multiplotER.m @@ -21,7 +21,7 @@ % cfg.maskparameter = field in the first dataset to be used for marking significant data % cfg.xlim = 'maxmin' or [xmin xmax] (default = 'maxmin') % cfg.ylim = 'maxmin' or [ymin ymax] (default = 'maxmin') -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.baseline = 'yes','no' or [time1 time2] (default = 'no'), see TIMELOCKBASELINE or FREQBASELINE % cfg.baselinetype = 'absolute' or 'relative' (default = 'absolute') % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') @@ -77,6 +77,15 @@ % Copyright (C) 2003-2006, Ole Jensen % % $Log: multiplotER.m,v $ +% Revision 1.51 2009/07/14 13:21:09 roboos +% changed the interactive plotting: instead of using plotSelection it now uses the selection function from the new plotting module (select_range and select_channel) and uses a local subfunction to update the cfg and call the next figure +% +% Revision 1.50 2009/06/17 13:44:52 roboos +% cleaned up help +% +% Revision 1.49 2009/06/17 13:35:53 roboos +% some minor changes to comments +% % Revision 1.48 2009/05/12 18:13:12 roboos % added handling of cfg.cohrefchannel='gui' for manual/interactive selection % @@ -325,16 +334,15 @@ cfg.yparam = cfg.zparam; end -% Old style coherence plotting with cohtargetchannel is no longer supported: +% Old style coherence plotting with cohtargetchannel is no longer supported cfg = checkconfig(cfg, 'unused', {'cohtargetchannel'}); -% Read or create the layout that will be used for plotting: +% Read or create the layout that will be used for plotting lay = prepare_layout(cfg, varargin{1}); -% Remember the layout to speed up subsequent plot calls cfg.layout = lay; for k=1:length(varargin) - % Check for unconverted coherence spectrum data: + % Check for unconverted coherence spectrum data if (strcmp(cfg.zparam,'cohspctrm')) && (isfield(varargin{k}, 'labelcmb')) % A reference channel is required: if ~isfield(cfg,'cohrefchannel'), @@ -346,15 +354,16 @@ h = clf; plot_lay(lay, 'box', false); title('Select the reference channel by clicking on it...'); - info = []; + % add the channel information to the figure + info = guidata(h); info.x = lay.pos(:,1); info.y = lay.pos(:,2); info.label = lay.label; guidata(h, info); - set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_cohrefchannel, cfg, varargin{:}}}); + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_multiplotER, cfg, varargin{:}}}); return end - + % Convert 2-dimensional channel matrix to a single dimension: sel1 = strmatch(cfg.cohrefchannel, varargin{k}.labelcmb(:,2)); sel2 = strmatch(cfg.cohrefchannel, varargin{k}.labelcmb(:,1)); @@ -500,37 +509,17 @@ % Make the figure interactive: if strcmp(cfg.interactive, 'yes') - userData.hFigure = gcf; - userData.hAxes = gca; - for i=1:10 - userData.hSelection{i} = plot(mean(X), mean(Y)); - set(userData.hSelection{i}, 'XData', [mean(X)]); - set(userData.hSelection{i}, 'YData', [mean(Y)]); - set(userData.hSelection{i}, 'Color', [0 0 0]); - set(userData.hSelection{i}, 'EraseMode', 'xor'); - set(userData.hSelection{i}, 'LineStyle', '--'); - set(userData.hSelection{i}, 'LineWidth', 1.5); - set(userData.hSelection{i}, 'Visible', 'on'); - userData.range{i} = []; - end - userData.iSelection = 0; - userData.plotType = 'multiplot'; - userData.selecting = 0; - userData.selectionType = ''; - userData.selectAxes = 'z'; - userData.lastClick = []; - userData.cfg = cfg; - userData.data = varargin; - userData.chanX = chanX; - userData.chanY = chanY; - userData.chanLabels = chanLabels; - tag = sprintf('%.5f', 10000 * rand(1)); - set(gcf, 'Renderer', cfg.renderer); - set(gcf, 'Tag', tag); - set(gcf, 'UserData', userData); - set(gcf, 'WindowButtonMotionFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 0);']); - set(gcf, 'WindowButtonDownFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 1);']); - set(gcf, 'WindowButtonUpFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 2);']); + + % add the channel information to the figure + info = guidata(gcf); + info.x = lay.pos(:,1); + info.y = lay.pos(:,2); + info.label = lay.label; + guidata(gcf, info); + + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonMotionFcn'}); end axis tight @@ -656,12 +645,31 @@ function plotWnd(x,y,xidc,xlim,ylim,xpos,ypos,width,height,label,cfg,style,mask) end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -% this function is called by select_channel +% SUBFUNCTION which is called after selecting channels in case of cfg.cohrefchannel='gui' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function select_cohrefchannel(label, cfg, varargin) -fprintf('selected "%s" as reference channel\n', label); +function select_multiplotER(label, cfg, varargin) cfg.cohrefchannel = label; -figure +fprintf('selected cfg.cohrefchannel = ''%s''\n', cfg.cohrefchannel); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); multiplotER(cfg, varargin{:}); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting channels in case of cfg.interactive='yes' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_singleplotER(label, cfg, varargin) +if ~isempty(label) + cfg.xlim = 'maxmin'; + cfg.channel = label; + fprintf('selected cfg.channel = {'); + for i=1:(length(cfg.channel)-1) + fprintf('''%s'', ', cfg.channel{i}); + end + fprintf('''%s''}\n', cfg.channel{end}); + p = get(gcf, 'Position'); + f = figure; + set(f, 'Position', p); + singleplotER(cfg, varargin{:}); +end + diff --git a/external/fieldtrip/private/multiplotTFR.m b/external/fieldtrip/private/multiplotTFR.m index 54eb95e..431f2a2 100644 --- a/external/fieldtrip/private/multiplotTFR.m +++ b/external/fieldtrip/private/multiplotTFR.m @@ -21,7 +21,7 @@ % cfg.xlim = 'maxmin' or [xmin xmax] (default = 'maxmin') % cfg.ylim = 'maxmin' or [ymin ymax] (default = 'maxmin') % cfg.zlim = 'maxmin','absmax' or [zmin zmax] (default = 'maxmin') -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.baseline = 'yes','no' or [time1 time2] (default = 'no'), see FREQBASELINE % cfg.baselinetype = 'absolute' or 'relative' (default = 'absolute') % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') @@ -39,7 +39,7 @@ % interactive plot when a selected area is clicked. Multiple areas % can be selected by holding down the SHIFT key. % cfg.masknans = 'yes' or 'no' (default = 'yes') -% +% cfg.renderer = 'painters', 'zbuffer',' opengl' or 'none' (default = []) % cfg.layout = specify the channel layout for plotting using one of % the following ways: % @@ -73,6 +73,15 @@ % Copyright (C) 2003-2006, Ole Jensen % % $Log: multiplotTFR.m,v $ +% Revision 1.51 2009/07/14 13:52:16 roboos +% changed the interactive plotting: instead of using plotSelection it now uses the selection function from the new plotting module (select_range and select_channel) and uses a local subfunction to update the cfg and call the next figure +% +% Revision 1.50 2009/07/14 13:27:25 roboos +% consistent handling of cfg.renderer, default is to let matlab decide +% +% Revision 1.49 2009/06/17 13:44:52 roboos +% cleaned up help +% % Revision 1.48 2009/05/12 18:48:15 roboos % added handling of cfg.cohrefchannel='gui' for manual/interactive selection % changed default for cfg.renderer -> let matlab decide @@ -308,7 +317,7 @@ info.y = lay.pos(:,2); info.label = lay.label; guidata(h, info); - set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_cohrefchannel, cfg, data}}); + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_multiplotTFR, cfg, data}}); return end @@ -494,45 +503,22 @@ end; % plot colorbar: -if isfield(cfg, 'colorbar') & (strcmp(cfg.colorbar, 'yes')) +if isfield(cfg, 'colorbar') && (strcmp(cfg.colorbar, 'yes')) colorbar; end % Make the figure interactive: if strcmp(cfg.interactive, 'yes') - userData.hFigure = gcf; - userData.hAxes = gca; - for i=1:10 - userData.hSelection{i} = plot(mean(chanX), mean(chanY)); - set(userData.hSelection{i}, 'XData', [mean(chanX)]); - set(userData.hSelection{i}, 'YData', [mean(chanY)]); - set(userData.hSelection{i}, 'Color', [0 0 0]); - set(userData.hSelection{i}, 'EraseMode', 'xor'); - set(userData.hSelection{i}, 'LineStyle', '--'); - set(userData.hSelection{i}, 'LineWidth', 1.5); - set(userData.hSelection{i}, 'Visible', 'on'); - userData.range{i} = []; - end - userData.iSelection = 0; - userData.plotType = 'multiplot'; - userData.selecting = 0; - userData.selectionType = ''; - userData.selectAxes = 'z'; - userData.lastClick = []; - userData.cfg = cfg; - userData.data = data; - userData.chanX = chanX; - userData.chanY = chanY; - userData.chanLabels = chanLabels; - tag = sprintf('%.5f', 10000 * rand(1)); - if ~isempty(cfg.renderer) - set(gcf, 'Renderer', cfg.renderer); - end - set(gcf, 'Tag', tag); - set(gcf, 'UserData', userData); - set(gcf, 'WindowButtonMotionFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 0);']); - set(gcf, 'WindowButtonDownFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 1);']); - set(gcf, 'WindowButtonUpFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 2);']); + % add the channel information to the figure + info = guidata(gcf); + info.x = lay.pos(:,1); + info.y = lay.pos(:,2); + info.label = lay.label; + guidata(gcf, info); + + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, data}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, data}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, data}, 'event', 'WindowButtonMotionFcn'}); end axis tight @@ -559,12 +545,32 @@ end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -% this function is called by select_channel +% SUBFUNCTION which is called by select_channel in case cfg.cohrefchannel='gui' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function select_cohrefchannel(label, cfg, varargin) -fprintf('selected "%s" as reference channel\n', label); +function select_multiplotTFR(label, cfg, varargin) cfg.cohrefchannel = label; -figure +fprintf('selected cfg.cohrefchannel = ''%s''\n', cfg.cohrefchannel); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); multiplotTFR(cfg, varargin{:}); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting channels in case of cfg.interactive='yes' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_singleplotTFR(label, cfg, varargin) +if ~isempty(label) + cfg.xlim = 'maxmin'; + cfg.ylim = 'maxmin'; + cfg.channel = label; + fprintf('selected cfg.channel = {'); + for i=1:(length(cfg.channel)-1) + fprintf('''%s'', ', cfg.channel{i}); + end + fprintf('''%s''}\n', cfg.channel{end}); + p = get(gcf, 'Position'); + f = figure; + set(f, 'Position', p); + singleplotTFR(cfg, varargin{:}); +end + diff --git a/external/fieldtrip/private/planarchannelset.m b/external/fieldtrip/private/planarchannelset.m index 2a8f489..0131f0a 100644 --- a/external/fieldtrip/private/planarchannelset.m +++ b/external/fieldtrip/private/planarchannelset.m @@ -12,6 +12,12 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: planarchannelset.m,v $ +% Revision 1.10 2009/07/29 06:47:55 roboos +% resolved conflict related to simultaneous changes to the neuromag306alt handling +% +% Revision 1.9 2009/07/21 11:55:56 roboos +% added support for the alternative neuromag306 channel names, changed channel order for neuromag306 +% % Revision 1.8 2009/03/23 21:12:20 jansch % added support for bti148_planar % @@ -29,626 +35,742 @@ % switch lower(senstype(data)) -case 'ctf151_planar' -planar = { - 'MLC11_dH' 'MLC11_dV' 'MLC11' - 'MLC12_dH' 'MLC12_dV' 'MLC12' - 'MLC13_dH' 'MLC13_dV' 'MLC13' - 'MLC14_dH' 'MLC14_dV' 'MLC14' - 'MLC15_dH' 'MLC15_dV' 'MLC15' - 'MLC21_dH' 'MLC21_dV' 'MLC21' - 'MLC22_dH' 'MLC22_dV' 'MLC22' - 'MLC23_dH' 'MLC23_dV' 'MLC23' - 'MLC24_dH' 'MLC24_dV' 'MLC24' - 'MLC31_dH' 'MLC31_dV' 'MLC31' - 'MLC32_dH' 'MLC32_dV' 'MLC32' - 'MLC33_dH' 'MLC33_dV' 'MLC33' - 'MLC41_dH' 'MLC41_dV' 'MLC41' - 'MLC42_dH' 'MLC42_dV' 'MLC42' - 'MLC43_dH' 'MLC43_dV' 'MLC43' - 'MLF11_dH' 'MLF11_dV' 'MLF11' - 'MLF12_dH' 'MLF12_dV' 'MLF12' - 'MLF21_dH' 'MLF21_dV' 'MLF21' - 'MLF22_dH' 'MLF22_dV' 'MLF22' - 'MLF23_dH' 'MLF23_dV' 'MLF23' - 'MLF31_dH' 'MLF31_dV' 'MLF31' - 'MLF32_dH' 'MLF32_dV' 'MLF32' - 'MLF33_dH' 'MLF33_dV' 'MLF33' - 'MLF34_dH' 'MLF34_dV' 'MLF34' - 'MLF41_dH' 'MLF41_dV' 'MLF41' - 'MLF42_dH' 'MLF42_dV' 'MLF42' - 'MLF43_dH' 'MLF43_dV' 'MLF43' - 'MLF44_dH' 'MLF44_dV' 'MLF44' - 'MLF45_dH' 'MLF45_dV' 'MLF45' - 'MLF51_dH' 'MLF51_dV' 'MLF51' - 'MLF52_dH' 'MLF52_dV' 'MLF52' - 'MLO11_dH' 'MLO11_dV' 'MLO11' - 'MLO12_dH' 'MLO12_dV' 'MLO12' - 'MLO21_dH' 'MLO21_dV' 'MLO21' - 'MLO22_dH' 'MLO22_dV' 'MLO22' - 'MLO31_dH' 'MLO31_dV' 'MLO31' - 'MLO32_dH' 'MLO32_dV' 'MLO32' - 'MLO33_dH' 'MLO33_dV' 'MLO33' - 'MLO41_dH' 'MLO41_dV' 'MLO41' - 'MLO42_dH' 'MLO42_dV' 'MLO42' - 'MLO43_dH' 'MLO43_dV' 'MLO43' - 'MLP11_dH' 'MLP11_dV' 'MLP11' - 'MLP12_dH' 'MLP12_dV' 'MLP12' - 'MLP13_dH' 'MLP13_dV' 'MLP13' - 'MLP21_dH' 'MLP21_dV' 'MLP21' - 'MLP22_dH' 'MLP22_dV' 'MLP22' - 'MLP31_dH' 'MLP31_dV' 'MLP31' - 'MLP32_dH' 'MLP32_dV' 'MLP32' - 'MLP33_dH' 'MLP33_dV' 'MLP33' - 'MLP34_dH' 'MLP34_dV' 'MLP34' - 'MLT11_dH' 'MLT11_dV' 'MLT11' - 'MLT12_dH' 'MLT12_dV' 'MLT12' - 'MLT13_dH' 'MLT13_dV' 'MLT13' - 'MLT14_dH' 'MLT14_dV' 'MLT14' - 'MLT15_dH' 'MLT15_dV' 'MLT15' - 'MLT16_dH' 'MLT16_dV' 'MLT16' - 'MLT21_dH' 'MLT21_dV' 'MLT21' - 'MLT22_dH' 'MLT22_dV' 'MLT22' - 'MLT23_dH' 'MLT23_dV' 'MLT23' - 'MLT24_dH' 'MLT24_dV' 'MLT24' - 'MLT25_dH' 'MLT25_dV' 'MLT25' - 'MLT26_dH' 'MLT26_dV' 'MLT26' - 'MLT31_dH' 'MLT31_dV' 'MLT31' - 'MLT32_dH' 'MLT32_dV' 'MLT32' - 'MLT33_dH' 'MLT33_dV' 'MLT33' - 'MLT34_dH' 'MLT34_dV' 'MLT34' - 'MLT35_dH' 'MLT35_dV' 'MLT35' - 'MLT41_dH' 'MLT41_dV' 'MLT41' - 'MLT42_dH' 'MLT42_dV' 'MLT42' - 'MLT43_dH' 'MLT43_dV' 'MLT43' - 'MLT44_dH' 'MLT44_dV' 'MLT44' - 'MRC11_dH' 'MRC11_dV' 'MRC11' - 'MRC12_dH' 'MRC12_dV' 'MRC12' - 'MRC13_dH' 'MRC13_dV' 'MRC13' - 'MRC14_dH' 'MRC14_dV' 'MRC14' - 'MRC15_dH' 'MRC15_dV' 'MRC15' - 'MRC21_dH' 'MRC21_dV' 'MRC21' - 'MRC22_dH' 'MRC22_dV' 'MRC22' - 'MRC23_dH' 'MRC23_dV' 'MRC23' - 'MRC24_dH' 'MRC24_dV' 'MRC24' - 'MRC31_dH' 'MRC31_dV' 'MRC31' - 'MRC32_dH' 'MRC32_dV' 'MRC32' - 'MRC33_dH' 'MRC33_dV' 'MRC33' - 'MRC41_dH' 'MRC41_dV' 'MRC41' - 'MRC42_dH' 'MRC42_dV' 'MRC42' - 'MRC43_dH' 'MRC43_dV' 'MRC43' - 'MRF11_dH' 'MRF11_dV' 'MRF11' - 'MRF12_dH' 'MRF12_dV' 'MRF12' - 'MRF21_dH' 'MRF21_dV' 'MRF21' - 'MRF22_dH' 'MRF22_dV' 'MRF22' - 'MRF23_dH' 'MRF23_dV' 'MRF23' - 'MRF31_dH' 'MRF31_dV' 'MRF31' - 'MRF32_dH' 'MRF32_dV' 'MRF32' - 'MRF33_dH' 'MRF33_dV' 'MRF33' - 'MRF34_dH' 'MRF34_dV' 'MRF34' - 'MRF41_dH' 'MRF41_dV' 'MRF41' - 'MRF42_dH' 'MRF42_dV' 'MRF42' - 'MRF43_dH' 'MRF43_dV' 'MRF43' - 'MRF44_dH' 'MRF44_dV' 'MRF44' - 'MRF45_dH' 'MRF45_dV' 'MRF45' - 'MRF51_dH' 'MRF51_dV' 'MRF51' - 'MRF52_dH' 'MRF52_dV' 'MRF52' - 'MRO11_dH' 'MRO11_dV' 'MRO11' - 'MRO12_dH' 'MRO12_dV' 'MRO12' - 'MRO21_dH' 'MRO21_dV' 'MRO21' - 'MRO22_dH' 'MRO22_dV' 'MRO22' - 'MRO31_dH' 'MRO31_dV' 'MRO31' - 'MRO32_dH' 'MRO32_dV' 'MRO32' - 'MRO33_dH' 'MRO33_dV' 'MRO33' - 'MRO41_dH' 'MRO41_dV' 'MRO41' - 'MRO42_dH' 'MRO42_dV' 'MRO42' - 'MRO43_dH' 'MRO43_dV' 'MRO43' - 'MRP11_dH' 'MRP11_dV' 'MRP11' - 'MRP12_dH' 'MRP12_dV' 'MRP12' - 'MRP13_dH' 'MRP13_dV' 'MRP13' - 'MRP21_dH' 'MRP21_dV' 'MRP21' - 'MRP22_dH' 'MRP22_dV' 'MRP22' - 'MRP31_dH' 'MRP31_dV' 'MRP31' - 'MRP32_dH' 'MRP32_dV' 'MRP32' - 'MRP33_dH' 'MRP33_dV' 'MRP33' - 'MRP34_dH' 'MRP34_dV' 'MRP34' - 'MRT11_dH' 'MRT11_dV' 'MRT11' - 'MRT12_dH' 'MRT12_dV' 'MRT12' - 'MRT13_dH' 'MRT13_dV' 'MRT13' - 'MRT14_dH' 'MRT14_dV' 'MRT14' - 'MRT15_dH' 'MRT15_dV' 'MRT15' - 'MRT16_dH' 'MRT16_dV' 'MRT16' - 'MRT21_dH' 'MRT21_dV' 'MRT21' - 'MRT22_dH' 'MRT22_dV' 'MRT22' - 'MRT23_dH' 'MRT23_dV' 'MRT23' - 'MRT24_dH' 'MRT24_dV' 'MRT24' - 'MRT25_dH' 'MRT25_dV' 'MRT25' - 'MRT26_dH' 'MRT26_dV' 'MRT26' - 'MRT31_dH' 'MRT31_dV' 'MRT31' - 'MRT32_dH' 'MRT32_dV' 'MRT32' - 'MRT33_dH' 'MRT33_dV' 'MRT33' - 'MRT34_dH' 'MRT34_dV' 'MRT34' - 'MRT35_dH' 'MRT35_dV' 'MRT35' - 'MRT41_dH' 'MRT41_dV' 'MRT41' - 'MRT42_dH' 'MRT42_dV' 'MRT42' - 'MRT43_dH' 'MRT43_dV' 'MRT43' - 'MRT44_dH' 'MRT44_dV' 'MRT44' - 'MZC01_dH' 'MZC01_dV' 'MZC01' - 'MZC02_dH' 'MZC02_dV' 'MZC02' - 'MZF01_dH' 'MZF01_dV' 'MZF01' - 'MZF02_dH' 'MZF02_dV' 'MZF02' - 'MZF03_dH' 'MZF03_dV' 'MZF03' - 'MZO01_dH' 'MZO01_dV' 'MZO01' - 'MZO02_dH' 'MZO02_dV' 'MZO02' - 'MZP01_dH' 'MZP01_dV' 'MZP01' - 'MZP02_dH' 'MZP02_dV' 'MZP02' -}; + case 'ctf151_planar' + planar = { + 'MLC11_dH' 'MLC11_dV' 'MLC11' + 'MLC12_dH' 'MLC12_dV' 'MLC12' + 'MLC13_dH' 'MLC13_dV' 'MLC13' + 'MLC14_dH' 'MLC14_dV' 'MLC14' + 'MLC15_dH' 'MLC15_dV' 'MLC15' + 'MLC21_dH' 'MLC21_dV' 'MLC21' + 'MLC22_dH' 'MLC22_dV' 'MLC22' + 'MLC23_dH' 'MLC23_dV' 'MLC23' + 'MLC24_dH' 'MLC24_dV' 'MLC24' + 'MLC31_dH' 'MLC31_dV' 'MLC31' + 'MLC32_dH' 'MLC32_dV' 'MLC32' + 'MLC33_dH' 'MLC33_dV' 'MLC33' + 'MLC41_dH' 'MLC41_dV' 'MLC41' + 'MLC42_dH' 'MLC42_dV' 'MLC42' + 'MLC43_dH' 'MLC43_dV' 'MLC43' + 'MLF11_dH' 'MLF11_dV' 'MLF11' + 'MLF12_dH' 'MLF12_dV' 'MLF12' + 'MLF21_dH' 'MLF21_dV' 'MLF21' + 'MLF22_dH' 'MLF22_dV' 'MLF22' + 'MLF23_dH' 'MLF23_dV' 'MLF23' + 'MLF31_dH' 'MLF31_dV' 'MLF31' + 'MLF32_dH' 'MLF32_dV' 'MLF32' + 'MLF33_dH' 'MLF33_dV' 'MLF33' + 'MLF34_dH' 'MLF34_dV' 'MLF34' + 'MLF41_dH' 'MLF41_dV' 'MLF41' + 'MLF42_dH' 'MLF42_dV' 'MLF42' + 'MLF43_dH' 'MLF43_dV' 'MLF43' + 'MLF44_dH' 'MLF44_dV' 'MLF44' + 'MLF45_dH' 'MLF45_dV' 'MLF45' + 'MLF51_dH' 'MLF51_dV' 'MLF51' + 'MLF52_dH' 'MLF52_dV' 'MLF52' + 'MLO11_dH' 'MLO11_dV' 'MLO11' + 'MLO12_dH' 'MLO12_dV' 'MLO12' + 'MLO21_dH' 'MLO21_dV' 'MLO21' + 'MLO22_dH' 'MLO22_dV' 'MLO22' + 'MLO31_dH' 'MLO31_dV' 'MLO31' + 'MLO32_dH' 'MLO32_dV' 'MLO32' + 'MLO33_dH' 'MLO33_dV' 'MLO33' + 'MLO41_dH' 'MLO41_dV' 'MLO41' + 'MLO42_dH' 'MLO42_dV' 'MLO42' + 'MLO43_dH' 'MLO43_dV' 'MLO43' + 'MLP11_dH' 'MLP11_dV' 'MLP11' + 'MLP12_dH' 'MLP12_dV' 'MLP12' + 'MLP13_dH' 'MLP13_dV' 'MLP13' + 'MLP21_dH' 'MLP21_dV' 'MLP21' + 'MLP22_dH' 'MLP22_dV' 'MLP22' + 'MLP31_dH' 'MLP31_dV' 'MLP31' + 'MLP32_dH' 'MLP32_dV' 'MLP32' + 'MLP33_dH' 'MLP33_dV' 'MLP33' + 'MLP34_dH' 'MLP34_dV' 'MLP34' + 'MLT11_dH' 'MLT11_dV' 'MLT11' + 'MLT12_dH' 'MLT12_dV' 'MLT12' + 'MLT13_dH' 'MLT13_dV' 'MLT13' + 'MLT14_dH' 'MLT14_dV' 'MLT14' + 'MLT15_dH' 'MLT15_dV' 'MLT15' + 'MLT16_dH' 'MLT16_dV' 'MLT16' + 'MLT21_dH' 'MLT21_dV' 'MLT21' + 'MLT22_dH' 'MLT22_dV' 'MLT22' + 'MLT23_dH' 'MLT23_dV' 'MLT23' + 'MLT24_dH' 'MLT24_dV' 'MLT24' + 'MLT25_dH' 'MLT25_dV' 'MLT25' + 'MLT26_dH' 'MLT26_dV' 'MLT26' + 'MLT31_dH' 'MLT31_dV' 'MLT31' + 'MLT32_dH' 'MLT32_dV' 'MLT32' + 'MLT33_dH' 'MLT33_dV' 'MLT33' + 'MLT34_dH' 'MLT34_dV' 'MLT34' + 'MLT35_dH' 'MLT35_dV' 'MLT35' + 'MLT41_dH' 'MLT41_dV' 'MLT41' + 'MLT42_dH' 'MLT42_dV' 'MLT42' + 'MLT43_dH' 'MLT43_dV' 'MLT43' + 'MLT44_dH' 'MLT44_dV' 'MLT44' + 'MRC11_dH' 'MRC11_dV' 'MRC11' + 'MRC12_dH' 'MRC12_dV' 'MRC12' + 'MRC13_dH' 'MRC13_dV' 'MRC13' + 'MRC14_dH' 'MRC14_dV' 'MRC14' + 'MRC15_dH' 'MRC15_dV' 'MRC15' + 'MRC21_dH' 'MRC21_dV' 'MRC21' + 'MRC22_dH' 'MRC22_dV' 'MRC22' + 'MRC23_dH' 'MRC23_dV' 'MRC23' + 'MRC24_dH' 'MRC24_dV' 'MRC24' + 'MRC31_dH' 'MRC31_dV' 'MRC31' + 'MRC32_dH' 'MRC32_dV' 'MRC32' + 'MRC33_dH' 'MRC33_dV' 'MRC33' + 'MRC41_dH' 'MRC41_dV' 'MRC41' + 'MRC42_dH' 'MRC42_dV' 'MRC42' + 'MRC43_dH' 'MRC43_dV' 'MRC43' + 'MRF11_dH' 'MRF11_dV' 'MRF11' + 'MRF12_dH' 'MRF12_dV' 'MRF12' + 'MRF21_dH' 'MRF21_dV' 'MRF21' + 'MRF22_dH' 'MRF22_dV' 'MRF22' + 'MRF23_dH' 'MRF23_dV' 'MRF23' + 'MRF31_dH' 'MRF31_dV' 'MRF31' + 'MRF32_dH' 'MRF32_dV' 'MRF32' + 'MRF33_dH' 'MRF33_dV' 'MRF33' + 'MRF34_dH' 'MRF34_dV' 'MRF34' + 'MRF41_dH' 'MRF41_dV' 'MRF41' + 'MRF42_dH' 'MRF42_dV' 'MRF42' + 'MRF43_dH' 'MRF43_dV' 'MRF43' + 'MRF44_dH' 'MRF44_dV' 'MRF44' + 'MRF45_dH' 'MRF45_dV' 'MRF45' + 'MRF51_dH' 'MRF51_dV' 'MRF51' + 'MRF52_dH' 'MRF52_dV' 'MRF52' + 'MRO11_dH' 'MRO11_dV' 'MRO11' + 'MRO12_dH' 'MRO12_dV' 'MRO12' + 'MRO21_dH' 'MRO21_dV' 'MRO21' + 'MRO22_dH' 'MRO22_dV' 'MRO22' + 'MRO31_dH' 'MRO31_dV' 'MRO31' + 'MRO32_dH' 'MRO32_dV' 'MRO32' + 'MRO33_dH' 'MRO33_dV' 'MRO33' + 'MRO41_dH' 'MRO41_dV' 'MRO41' + 'MRO42_dH' 'MRO42_dV' 'MRO42' + 'MRO43_dH' 'MRO43_dV' 'MRO43' + 'MRP11_dH' 'MRP11_dV' 'MRP11' + 'MRP12_dH' 'MRP12_dV' 'MRP12' + 'MRP13_dH' 'MRP13_dV' 'MRP13' + 'MRP21_dH' 'MRP21_dV' 'MRP21' + 'MRP22_dH' 'MRP22_dV' 'MRP22' + 'MRP31_dH' 'MRP31_dV' 'MRP31' + 'MRP32_dH' 'MRP32_dV' 'MRP32' + 'MRP33_dH' 'MRP33_dV' 'MRP33' + 'MRP34_dH' 'MRP34_dV' 'MRP34' + 'MRT11_dH' 'MRT11_dV' 'MRT11' + 'MRT12_dH' 'MRT12_dV' 'MRT12' + 'MRT13_dH' 'MRT13_dV' 'MRT13' + 'MRT14_dH' 'MRT14_dV' 'MRT14' + 'MRT15_dH' 'MRT15_dV' 'MRT15' + 'MRT16_dH' 'MRT16_dV' 'MRT16' + 'MRT21_dH' 'MRT21_dV' 'MRT21' + 'MRT22_dH' 'MRT22_dV' 'MRT22' + 'MRT23_dH' 'MRT23_dV' 'MRT23' + 'MRT24_dH' 'MRT24_dV' 'MRT24' + 'MRT25_dH' 'MRT25_dV' 'MRT25' + 'MRT26_dH' 'MRT26_dV' 'MRT26' + 'MRT31_dH' 'MRT31_dV' 'MRT31' + 'MRT32_dH' 'MRT32_dV' 'MRT32' + 'MRT33_dH' 'MRT33_dV' 'MRT33' + 'MRT34_dH' 'MRT34_dV' 'MRT34' + 'MRT35_dH' 'MRT35_dV' 'MRT35' + 'MRT41_dH' 'MRT41_dV' 'MRT41' + 'MRT42_dH' 'MRT42_dV' 'MRT42' + 'MRT43_dH' 'MRT43_dV' 'MRT43' + 'MRT44_dH' 'MRT44_dV' 'MRT44' + 'MZC01_dH' 'MZC01_dV' 'MZC01' + 'MZC02_dH' 'MZC02_dV' 'MZC02' + 'MZF01_dH' 'MZF01_dV' 'MZF01' + 'MZF02_dH' 'MZF02_dV' 'MZF02' + 'MZF03_dH' 'MZF03_dV' 'MZF03' + 'MZO01_dH' 'MZO01_dV' 'MZO01' + 'MZO02_dH' 'MZO02_dV' 'MZO02' + 'MZP01_dH' 'MZP01_dV' 'MZP01' + 'MZP02_dH' 'MZP02_dV' 'MZP02' + }; + + case 'ctf275_planar' + planar = { + 'MLC11_dH' 'MLC11_dV' 'MLC11' + 'MLC12_dH' 'MLC12_dV' 'MLC12' + 'MLC13_dH' 'MLC13_dV' 'MLC13' + 'MLC14_dH' 'MLC14_dV' 'MLC14' + 'MLC15_dH' 'MLC15_dV' 'MLC15' + 'MLC16_dH' 'MLC16_dV' 'MLC16' + 'MLC17_dH' 'MLC17_dV' 'MLC17' + 'MLC21_dH' 'MLC21_dV' 'MLC21' + 'MLC22_dH' 'MLC22_dV' 'MLC22' + 'MLC23_dH' 'MLC23_dV' 'MLC23' + 'MLC24_dH' 'MLC24_dV' 'MLC24' + 'MLC25_dH' 'MLC25_dV' 'MLC25' + 'MLC31_dH' 'MLC31_dV' 'MLC31' + 'MLC32_dH' 'MLC32_dV' 'MLC32' + 'MLC41_dH' 'MLC41_dV' 'MLC41' + 'MLC42_dH' 'MLC42_dV' 'MLC42' + 'MLC51_dH' 'MLC51_dV' 'MLC51' + 'MLC52_dH' 'MLC52_dV' 'MLC52' + 'MLC53_dH' 'MLC53_dV' 'MLC53' + 'MLC54_dH' 'MLC54_dV' 'MLC54' + 'MLC55_dH' 'MLC55_dV' 'MLC55' + 'MLC61_dH' 'MLC61_dV' 'MLC61' + 'MLC62_dH' 'MLC62_dV' 'MLC62' + 'MLC63_dH' 'MLC63_dV' 'MLC63' + 'MLF11_dH' 'MLF11_dV' 'MLF11' + 'MLF12_dH' 'MLF12_dV' 'MLF12' + 'MLF13_dH' 'MLF13_dV' 'MLF13' + 'MLF14_dH' 'MLF14_dV' 'MLF14' + 'MLF21_dH' 'MLF21_dV' 'MLF21' + 'MLF22_dH' 'MLF22_dV' 'MLF22' + 'MLF23_dH' 'MLF23_dV' 'MLF23' + 'MLF24_dH' 'MLF24_dV' 'MLF24' + 'MLF25_dH' 'MLF25_dV' 'MLF25' + 'MLF31_dH' 'MLF31_dV' 'MLF31' + 'MLF32_dH' 'MLF32_dV' 'MLF32' + 'MLF33_dH' 'MLF33_dV' 'MLF33' + 'MLF34_dH' 'MLF34_dV' 'MLF34' + 'MLF35_dH' 'MLF35_dV' 'MLF35' + 'MLF41_dH' 'MLF41_dV' 'MLF41' + 'MLF42_dH' 'MLF42_dV' 'MLF42' + 'MLF43_dH' 'MLF43_dV' 'MLF43' + 'MLF44_dH' 'MLF44_dV' 'MLF44' + 'MLF45_dH' 'MLF45_dV' 'MLF45' + 'MLF46_dH' 'MLF46_dV' 'MLF46' + 'MLF51_dH' 'MLF51_dV' 'MLF51' + 'MLF52_dH' 'MLF52_dV' 'MLF52' + 'MLF53_dH' 'MLF53_dV' 'MLF53' + 'MLF54_dH' 'MLF54_dV' 'MLF54' + 'MLF55_dH' 'MLF55_dV' 'MLF55' + 'MLF56_dH' 'MLF56_dV' 'MLF56' + 'MLF61_dH' 'MLF61_dV' 'MLF61' + 'MLF62_dH' 'MLF62_dV' 'MLF62' + 'MLF63_dH' 'MLF63_dV' 'MLF63' + 'MLF64_dH' 'MLF64_dV' 'MLF64' + 'MLF65_dH' 'MLF65_dV' 'MLF65' + 'MLF66_dH' 'MLF66_dV' 'MLF66' + 'MLF67_dH' 'MLF67_dV' 'MLF67' + 'MLO11_dH' 'MLO11_dV' 'MLO11' + 'MLO12_dH' 'MLO12_dV' 'MLO12' + 'MLO13_dH' 'MLO13_dV' 'MLO13' + 'MLO14_dH' 'MLO14_dV' 'MLO14' + 'MLO21_dH' 'MLO21_dV' 'MLO21' + 'MLO22_dH' 'MLO22_dV' 'MLO22' + 'MLO23_dH' 'MLO23_dV' 'MLO23' + 'MLO24_dH' 'MLO24_dV' 'MLO24' + 'MLO31_dH' 'MLO31_dV' 'MLO31' + 'MLO32_dH' 'MLO32_dV' 'MLO32' + 'MLO33_dH' 'MLO33_dV' 'MLO33' + 'MLO34_dH' 'MLO34_dV' 'MLO34' + 'MLO41_dH' 'MLO41_dV' 'MLO41' + 'MLO42_dH' 'MLO42_dV' 'MLO42' + 'MLO43_dH' 'MLO43_dV' 'MLO43' + 'MLO44_dH' 'MLO44_dV' 'MLO44' + 'MLO51_dH' 'MLO51_dV' 'MLO51' + 'MLO52_dH' 'MLO52_dV' 'MLO52' + 'MLO53_dH' 'MLO53_dV' 'MLO53' + 'MLP11_dH' 'MLP11_dV' 'MLP11' + 'MLP12_dH' 'MLP12_dV' 'MLP12' + 'MLP21_dH' 'MLP21_dV' 'MLP21' + 'MLP22_dH' 'MLP22_dV' 'MLP22' + 'MLP23_dH' 'MLP23_dV' 'MLP23' + 'MLP31_dH' 'MLP31_dV' 'MLP31' + 'MLP32_dH' 'MLP32_dV' 'MLP32' + 'MLP33_dH' 'MLP33_dV' 'MLP33' + 'MLP34_dH' 'MLP34_dV' 'MLP34' + 'MLP35_dH' 'MLP35_dV' 'MLP35' + 'MLP41_dH' 'MLP41_dV' 'MLP41' + 'MLP42_dH' 'MLP42_dV' 'MLP42' + 'MLP43_dH' 'MLP43_dV' 'MLP43' + 'MLP44_dH' 'MLP44_dV' 'MLP44' + 'MLP45_dH' 'MLP45_dV' 'MLP45' + 'MLP51_dH' 'MLP51_dV' 'MLP51' + 'MLP52_dH' 'MLP52_dV' 'MLP52' + 'MLP53_dH' 'MLP53_dV' 'MLP53' + 'MLP54_dH' 'MLP54_dV' 'MLP54' + 'MLP55_dH' 'MLP55_dV' 'MLP55' + 'MLP56_dH' 'MLP56_dV' 'MLP56' + 'MLP57_dH' 'MLP57_dV' 'MLP57' + 'MLT11_dH' 'MLT11_dV' 'MLT11' + 'MLT12_dH' 'MLT12_dV' 'MLT12' + 'MLT13_dH' 'MLT13_dV' 'MLT13' + 'MLT14_dH' 'MLT14_dV' 'MLT14' + 'MLT15_dH' 'MLT15_dV' 'MLT15' + 'MLT16_dH' 'MLT16_dV' 'MLT16' + 'MLT21_dH' 'MLT21_dV' 'MLT21' + 'MLT22_dH' 'MLT22_dV' 'MLT22' + 'MLT23_dH' 'MLT23_dV' 'MLT23' + 'MLT24_dH' 'MLT24_dV' 'MLT24' + 'MLT25_dH' 'MLT25_dV' 'MLT25' + 'MLT26_dH' 'MLT26_dV' 'MLT26' + 'MLT27_dH' 'MLT27_dV' 'MLT27' + 'MLT31_dH' 'MLT31_dV' 'MLT31' + 'MLT32_dH' 'MLT32_dV' 'MLT32' + 'MLT33_dH' 'MLT33_dV' 'MLT33' + 'MLT34_dH' 'MLT34_dV' 'MLT34' + 'MLT35_dH' 'MLT35_dV' 'MLT35' + 'MLT36_dH' 'MLT36_dV' 'MLT36' + 'MLT37_dH' 'MLT37_dV' 'MLT37' + 'MLT41_dH' 'MLT41_dV' 'MLT41' + 'MLT42_dH' 'MLT42_dV' 'MLT42' + 'MLT43_dH' 'MLT43_dV' 'MLT43' + 'MLT44_dH' 'MLT44_dV' 'MLT44' + 'MLT45_dH' 'MLT45_dV' 'MLT45' + 'MLT46_dH' 'MLT46_dV' 'MLT46' + 'MLT47_dH' 'MLT47_dV' 'MLT47' + 'MLT51_dH' 'MLT51_dV' 'MLT51' + 'MLT52_dH' 'MLT52_dV' 'MLT52' + 'MLT53_dH' 'MLT53_dV' 'MLT53' + 'MLT54_dH' 'MLT54_dV' 'MLT54' + 'MLT55_dH' 'MLT55_dV' 'MLT55' + 'MLT56_dH' 'MLT56_dV' 'MLT56' + 'MLT57_dH' 'MLT57_dV' 'MLT57' + 'MRC11_dH' 'MRC11_dV' 'MRC11' + 'MRC12_dH' 'MRC12_dV' 'MRC12' + 'MRC13_dH' 'MRC13_dV' 'MRC13' + 'MRC14_dH' 'MRC14_dV' 'MRC14' + 'MRC15_dH' 'MRC15_dV' 'MRC15' + 'MRC16_dH' 'MRC16_dV' 'MRC16' + 'MRC17_dH' 'MRC17_dV' 'MRC17' + 'MRC21_dH' 'MRC21_dV' 'MRC21' + 'MRC22_dH' 'MRC22_dV' 'MRC22' + 'MRC23_dH' 'MRC23_dV' 'MRC23' + 'MRC24_dH' 'MRC24_dV' 'MRC24' + 'MRC25_dH' 'MRC25_dV' 'MRC25' + 'MRC31_dH' 'MRC31_dV' 'MRC31' + 'MRC32_dH' 'MRC32_dV' 'MRC32' + 'MRC41_dH' 'MRC41_dV' 'MRC41' + 'MRC42_dH' 'MRC42_dV' 'MRC42' + 'MRC51_dH' 'MRC51_dV' 'MRC51' + 'MRC52_dH' 'MRC52_dV' 'MRC52' + 'MRC53_dH' 'MRC53_dV' 'MRC53' + 'MRC54_dH' 'MRC54_dV' 'MRC54' + 'MRC55_dH' 'MRC55_dV' 'MRC55' + 'MRC61_dH' 'MRC61_dV' 'MRC61' + 'MRC62_dH' 'MRC62_dV' 'MRC62' + 'MRC63_dH' 'MRC63_dV' 'MRC63' + 'MRF11_dH' 'MRF11_dV' 'MRF11' + 'MRF12_dH' 'MRF12_dV' 'MRF12' + 'MRF13_dH' 'MRF13_dV' 'MRF13' + 'MRF14_dH' 'MRF14_dV' 'MRF14' + 'MRF21_dH' 'MRF21_dV' 'MRF21' + 'MRF22_dH' 'MRF22_dV' 'MRF22' + 'MRF23_dH' 'MRF23_dV' 'MRF23' + 'MRF24_dH' 'MRF24_dV' 'MRF24' + 'MRF25_dH' 'MRF25_dV' 'MRF25' + 'MRF31_dH' 'MRF31_dV' 'MRF31' + 'MRF32_dH' 'MRF32_dV' 'MRF32' + 'MRF33_dH' 'MRF33_dV' 'MRF33' + 'MRF34_dH' 'MRF34_dV' 'MRF34' + 'MRF35_dH' 'MRF35_dV' 'MRF35' + 'MRF41_dH' 'MRF41_dV' 'MRF41' + 'MRF42_dH' 'MRF42_dV' 'MRF42' + 'MRF43_dH' 'MRF43_dV' 'MRF43' + 'MRF44_dH' 'MRF44_dV' 'MRF44' + 'MRF45_dH' 'MRF45_dV' 'MRF45' + 'MRF46_dH' 'MRF46_dV' 'MRF46' + 'MRF51_dH' 'MRF51_dV' 'MRF51' + 'MRF52_dH' 'MRF52_dV' 'MRF52' + 'MRF53_dH' 'MRF53_dV' 'MRF53' + 'MRF54_dH' 'MRF54_dV' 'MRF54' + 'MRF55_dH' 'MRF55_dV' 'MRF55' + 'MRF56_dH' 'MRF56_dV' 'MRF56' + 'MRF61_dH' 'MRF61_dV' 'MRF61' + 'MRF62_dH' 'MRF62_dV' 'MRF62' + 'MRF63_dH' 'MRF63_dV' 'MRF63' + 'MRF64_dH' 'MRF64_dV' 'MRF64' + 'MRF65_dH' 'MRF65_dV' 'MRF65' + 'MRF66_dH' 'MRF66_dV' 'MRF66' + 'MRF67_dH' 'MRF67_dV' 'MRF67' + 'MRO11_dH' 'MRO11_dV' 'MRO11' + 'MRO12_dH' 'MRO12_dV' 'MRO12' + 'MRO13_dH' 'MRO13_dV' 'MRO13' + 'MRO14_dH' 'MRO14_dV' 'MRO14' + 'MRO21_dH' 'MRO21_dV' 'MRO21' + 'MRO22_dH' 'MRO22_dV' 'MRO22' + 'MRO23_dH' 'MRO23_dV' 'MRO23' + 'MRO24_dH' 'MRO24_dV' 'MRO24' + 'MRO31_dH' 'MRO31_dV' 'MRO31' + 'MRO32_dH' 'MRO32_dV' 'MRO32' + 'MRO33_dH' 'MRO33_dV' 'MRO33' + 'MRO34_dH' 'MRO34_dV' 'MRO34' + 'MRO41_dH' 'MRO41_dV' 'MRO41' + 'MRO42_dH' 'MRO42_dV' 'MRO42' + 'MRO43_dH' 'MRO43_dV' 'MRO43' + 'MRO44_dH' 'MRO44_dV' 'MRO44' + 'MRO51_dH' 'MRO51_dV' 'MRO51' + 'MRO52_dH' 'MRO52_dV' 'MRO52' + 'MRO53_dH' 'MRO53_dV' 'MRO53' + 'MRP11_dH' 'MRP11_dV' 'MRP11' + 'MRP12_dH' 'MRP12_dV' 'MRP12' + 'MRP21_dH' 'MRP21_dV' 'MRP21' + 'MRP22_dH' 'MRP22_dV' 'MRP22' + 'MRP23_dH' 'MRP23_dV' 'MRP23' + 'MRP31_dH' 'MRP31_dV' 'MRP31' + 'MRP32_dH' 'MRP32_dV' 'MRP32' + 'MRP33_dH' 'MRP33_dV' 'MRP33' + 'MRP34_dH' 'MRP34_dV' 'MRP34' + 'MRP35_dH' 'MRP35_dV' 'MRP35' + 'MRP41_dH' 'MRP41_dV' 'MRP41' + 'MRP42_dH' 'MRP42_dV' 'MRP42' + 'MRP43_dH' 'MRP43_dV' 'MRP43' + 'MRP44_dH' 'MRP44_dV' 'MRP44' + 'MRP45_dH' 'MRP45_dV' 'MRP45' + 'MRP51_dH' 'MRP51_dV' 'MRP51' + 'MRP52_dH' 'MRP52_dV' 'MRP52' + 'MRP53_dH' 'MRP53_dV' 'MRP53' + 'MRP54_dH' 'MRP54_dV' 'MRP54' + 'MRP55_dH' 'MRP55_dV' 'MRP55' + 'MRP56_dH' 'MRP56_dV' 'MRP56' + 'MRP57_dH' 'MRP57_dV' 'MRP57' + 'MRT11_dH' 'MRT11_dV' 'MRT11' + 'MRT12_dH' 'MRT12_dV' 'MRT12' + 'MRT13_dH' 'MRT13_dV' 'MRT13' + 'MRT14_dH' 'MRT14_dV' 'MRT14' + 'MRT15_dH' 'MRT15_dV' 'MRT15' + 'MRT16_dH' 'MRT16_dV' 'MRT16' + 'MRT21_dH' 'MRT21_dV' 'MRT21' + 'MRT22_dH' 'MRT22_dV' 'MRT22' + 'MRT23_dH' 'MRT23_dV' 'MRT23' + 'MRT24_dH' 'MRT24_dV' 'MRT24' + 'MRT25_dH' 'MRT25_dV' 'MRT25' + 'MRT26_dH' 'MRT26_dV' 'MRT26' + 'MRT27_dH' 'MRT27_dV' 'MRT27' + 'MRT31_dH' 'MRT31_dV' 'MRT31' + 'MRT32_dH' 'MRT32_dV' 'MRT32' + 'MRT33_dH' 'MRT33_dV' 'MRT33' + 'MRT34_dH' 'MRT34_dV' 'MRT34' + 'MRT35_dH' 'MRT35_dV' 'MRT35' + 'MRT36_dH' 'MRT36_dV' 'MRT36' + 'MRT37_dH' 'MRT37_dV' 'MRT37' + 'MRT41_dH' 'MRT41_dV' 'MRT41' + 'MRT42_dH' 'MRT42_dV' 'MRT42' + 'MRT43_dH' 'MRT43_dV' 'MRT43' + 'MRT44_dH' 'MRT44_dV' 'MRT44' + 'MRT45_dH' 'MRT45_dV' 'MRT45' + 'MRT46_dH' 'MRT46_dV' 'MRT46' + 'MRT47_dH' 'MRT47_dV' 'MRT47' + 'MRT51_dH' 'MRT51_dV' 'MRT51' + 'MRT52_dH' 'MRT52_dV' 'MRT52' + 'MRT53_dH' 'MRT53_dV' 'MRT53' + 'MRT54_dH' 'MRT54_dV' 'MRT54' + 'MRT55_dH' 'MRT55_dV' 'MRT55' + 'MRT56_dH' 'MRT56_dV' 'MRT56' + 'MRT57_dH' 'MRT57_dV' 'MRT57' + 'MZC01_dH' 'MZC01_dV' 'MZC01' + 'MZC02_dH' 'MZC02_dV' 'MZC02' + 'MZC03_dH' 'MZC03_dV' 'MZC03' + 'MZC04_dH' 'MZC04_dV' 'MZC04' + 'MZF01_dH' 'MZF01_dV' 'MZF01' + 'MZF02_dH' 'MZF02_dV' 'MZF02' + 'MZF03_dH' 'MZF03_dV' 'MZF03' + 'MZO01_dH' 'MZO01_dV' 'MZO01' + 'MZO02_dH' 'MZO02_dV' 'MZO02' + 'MZO03_dH' 'MZO03_dV' 'MZO03' + 'MZP01_dH' 'MZP01_dV' 'MZP01' + }; + + case 'neuromag122' + planar = { + 'MEG 001' 'MEG 002' 'MEG 001+002' + 'MEG 003' 'MEG 004' 'MEG 003+004' + 'MEG 005' 'MEG 006' 'MEG 005+006' + 'MEG 007' 'MEG 008' 'MEG 007+008' + 'MEG 009' 'MEG 010' 'MEG 009+010' + 'MEG 011' 'MEG 012' 'MEG 011+012' + 'MEG 013' 'MEG 014' 'MEG 013+014' + 'MEG 015' 'MEG 016' 'MEG 015+016' + 'MEG 017' 'MEG 018' 'MEG 017+018' + 'MEG 019' 'MEG 020' 'MEG 019+020' + 'MEG 021' 'MEG 022' 'MEG 021+022' + 'MEG 023' 'MEG 024' 'MEG 023+024' + 'MEG 025' 'MEG 026' 'MEG 025+026' + 'MEG 027' 'MEG 028' 'MEG 027+028' + 'MEG 029' 'MEG 030' 'MEG 029+030' + 'MEG 031' 'MEG 032' 'MEG 031+032' + 'MEG 033' 'MEG 034' 'MEG 033+034' + 'MEG 035' 'MEG 036' 'MEG 035+036' + 'MEG 037' 'MEG 038' 'MEG 037+038' + 'MEG 039' 'MEG 040' 'MEG 039+040' + 'MEG 041' 'MEG 042' 'MEG 041+042' + 'MEG 043' 'MEG 044' 'MEG 043+044' + 'MEG 045' 'MEG 046' 'MEG 045+046' + 'MEG 047' 'MEG 048' 'MEG 047+048' + 'MEG 049' 'MEG 050' 'MEG 049+050' + 'MEG 051' 'MEG 052' 'MEG 051+052' + 'MEG 053' 'MEG 054' 'MEG 053+054' + 'MEG 055' 'MEG 056' 'MEG 055+056' + 'MEG 057' 'MEG 058' 'MEG 057+058' + 'MEG 059' 'MEG 060' 'MEG 059+060' + 'MEG 061' 'MEG 062' 'MEG 061+062' + 'MEG 063' 'MEG 064' 'MEG 063+064' + 'MEG 065' 'MEG 066' 'MEG 065+066' + 'MEG 067' 'MEG 068' 'MEG 067+068' + 'MEG 069' 'MEG 070' 'MEG 069+070' + 'MEG 071' 'MEG 072' 'MEG 071+072' + 'MEG 073' 'MEG 074' 'MEG 073+074' + 'MEG 075' 'MEG 076' 'MEG 075+076' + 'MEG 077' 'MEG 078' 'MEG 077+078' + 'MEG 079' 'MEG 080' 'MEG 079+080' + 'MEG 081' 'MEG 082' 'MEG 081+082' + 'MEG 083' 'MEG 084' 'MEG 083+084' + 'MEG 085' 'MEG 086' 'MEG 085+086' + 'MEG 087' 'MEG 088' 'MEG 087+088' + 'MEG 089' 'MEG 090' 'MEG 089+090' + 'MEG 091' 'MEG 092' 'MEG 091+092' + 'MEG 093' 'MEG 094' 'MEG 093+094' + 'MEG 095' 'MEG 096' 'MEG 095+096' + 'MEG 097' 'MEG 098' 'MEG 097+098' + 'MEG 099' 'MEG 100' 'MEG 099+100' + 'MEG 101' 'MEG 102' 'MEG 101+102' + 'MEG 103' 'MEG 104' 'MEG 103+104' + 'MEG 105' 'MEG 106' 'MEG 105+106' + 'MEG 107' 'MEG 108' 'MEG 107+108' + 'MEG 109' 'MEG 110' 'MEG 109+110' + 'MEG 111' 'MEG 112' 'MEG 111+112' + 'MEG 113' 'MEG 114' 'MEG 113+114' + 'MEG 115' 'MEG 116' 'MEG 115+116' + 'MEG 117' 'MEG 118' 'MEG 117+118' + 'MEG 119' 'MEG 120' 'MEG 119+120' + 'MEG 121' 'MEG 122' 'MEG 121+122' + }; + + case 'neuromag306' + count1 = mean(ismember(data.label, senslabel('neuromag306'))); + count2 = mean(ismember(data.label, senslabel('neuromag306alt'))); + + if count1>count2 + % it looks like the channels have a space in them + % the last commented column contains the magnetometer labels + planar = { + 'MEG 0112' 'MEG 0113' 'MEG 0112+0113' % 'MEG 0111' + 'MEG 0122' 'MEG 0123' 'MEG 0122+0123' % 'MEG 0121' + 'MEG 0132' 'MEG 0133' 'MEG 0132+0133' % 'MEG 0131' + 'MEG 0142' 'MEG 0143' 'MEG 0142+0143' % 'MEG 0141' + 'MEG 0212' 'MEG 0213' 'MEG 0212+0213' % 'MEG 0211' + 'MEG 0222' 'MEG 0223' 'MEG 0222+0223' % 'MEG 0221' + 'MEG 0232' 'MEG 0233' 'MEG 0232+0233' % 'MEG 0231' + 'MEG 0242' 'MEG 0243' 'MEG 0242+0243' % 'MEG 0241' + 'MEG 0312' 'MEG 0313' 'MEG 0312+0313' % 'MEG 0311' + 'MEG 0322' 'MEG 0323' 'MEG 0322+0323' % 'MEG 0321' + 'MEG 0332' 'MEG 0333' 'MEG 0332+0333' % 'MEG 0331' + 'MEG 0342' 'MEG 0343' 'MEG 0342+0343' % 'MEG 0341' + 'MEG 0412' 'MEG 0413' 'MEG 0412+0413' % 'MEG 0411' + 'MEG 0422' 'MEG 0423' 'MEG 0422+0423' % 'MEG 0421' + 'MEG 0432' 'MEG 0433' 'MEG 0432+0433' % 'MEG 0431' + 'MEG 0442' 'MEG 0443' 'MEG 0442+0443' % 'MEG 0441' + 'MEG 0512' 'MEG 0513' 'MEG 0512+0513' % 'MEG 0511' + 'MEG 0522' 'MEG 0523' 'MEG 0522+0523' % 'MEG 0521' + 'MEG 0532' 'MEG 0533' 'MEG 0532+0533' % 'MEG 0531' + 'MEG 0542' 'MEG 0543' 'MEG 0542+0543' % 'MEG 0541' + 'MEG 0612' 'MEG 0613' 'MEG 0612+0613' % 'MEG 0611' + 'MEG 0622' 'MEG 0623' 'MEG 0622+0623' % 'MEG 0621' + 'MEG 0632' 'MEG 0633' 'MEG 0632+0633' % 'MEG 0631' + 'MEG 0642' 'MEG 0643' 'MEG 0642+0643' % 'MEG 0641' + 'MEG 0712' 'MEG 0713' 'MEG 0712+0713' % 'MEG 0711' + 'MEG 0722' 'MEG 0723' 'MEG 0722+0723' % 'MEG 0721' + 'MEG 0732' 'MEG 0733' 'MEG 0732+0733' % 'MEG 0731' + 'MEG 0742' 'MEG 0743' 'MEG 0742+0743' % 'MEG 0741' + 'MEG 0812' 'MEG 0813' 'MEG 0812+0813' % 'MEG 0811' + 'MEG 0822' 'MEG 0823' 'MEG 0822+0823' % 'MEG 0821' + 'MEG 0912' 'MEG 0913' 'MEG 0912+0913' % 'MEG 0911' + 'MEG 0922' 'MEG 0923' 'MEG 0922+0923' % 'MEG 0921' + 'MEG 0932' 'MEG 0933' 'MEG 0932+0933' % 'MEG 0931' + 'MEG 0942' 'MEG 0943' 'MEG 0942+0943' % 'MEG 0941' + 'MEG 1012' 'MEG 1013' 'MEG 1012+1013' % 'MEG 1011' + 'MEG 1022' 'MEG 1023' 'MEG 1022+1023' % 'MEG 1021' + 'MEG 1032' 'MEG 1033' 'MEG 1032+1033' % 'MEG 1031' + 'MEG 1042' 'MEG 1043' 'MEG 1042+1043' % 'MEG 1041' + 'MEG 1112' 'MEG 1113' 'MEG 1112+1113' % 'MEG 1111' + 'MEG 1122' 'MEG 1123' 'MEG 1122+1123' % 'MEG 1121' + 'MEG 1132' 'MEG 1133' 'MEG 1132+1133' % 'MEG 1131' + 'MEG 1142' 'MEG 1143' 'MEG 1142+1143' % 'MEG 1141' + 'MEG 1212' 'MEG 1213' 'MEG 1212+1213' % 'MEG 1211' + 'MEG 1222' 'MEG 1223' 'MEG 1222+1223' % 'MEG 1221' + 'MEG 1232' 'MEG 1233' 'MEG 1232+1233' % 'MEG 1231' + 'MEG 1242' 'MEG 1243' 'MEG 1242+1243' % 'MEG 1241' + 'MEG 1312' 'MEG 1313' 'MEG 1312+1313' % 'MEG 1311' + 'MEG 1322' 'MEG 1323' 'MEG 1322+1323' % 'MEG 1321' + 'MEG 1332' 'MEG 1333' 'MEG 1332+1333' % 'MEG 1331' + 'MEG 1342' 'MEG 1343' 'MEG 1342+1343' % 'MEG 1341' + 'MEG 1412' 'MEG 1413' 'MEG 1412+1413' % 'MEG 1411' + 'MEG 1422' 'MEG 1423' 'MEG 1422+1423' % 'MEG 1421' + 'MEG 1432' 'MEG 1433' 'MEG 1432+1433' % 'MEG 1431' + 'MEG 1442' 'MEG 1443' 'MEG 1442+1443' % 'MEG 1441' + 'MEG 1512' 'MEG 1513' 'MEG 1512+1513' % 'MEG 1511' + 'MEG 1522' 'MEG 1523' 'MEG 1522+1523' % 'MEG 1521' + 'MEG 1532' 'MEG 1533' 'MEG 1532+1533' % 'MEG 1531' + 'MEG 1542' 'MEG 1543' 'MEG 1542+1543' % 'MEG 1541' + 'MEG 1612' 'MEG 1613' 'MEG 1612+1613' % 'MEG 1611' + 'MEG 1622' 'MEG 1623' 'MEG 1622+1623' % 'MEG 1621' + 'MEG 1632' 'MEG 1633' 'MEG 1632+1633' % 'MEG 1631' + 'MEG 1642' 'MEG 1643' 'MEG 1642+1643' % 'MEG 1641' + 'MEG 1712' 'MEG 1713' 'MEG 1712+1713' % 'MEG 1711' + 'MEG 1722' 'MEG 1723' 'MEG 1722+1723' % 'MEG 1721' + 'MEG 1732' 'MEG 1733' 'MEG 1732+1733' % 'MEG 1731' + 'MEG 1742' 'MEG 1743' 'MEG 1742+1743' % 'MEG 1741' + 'MEG 1812' 'MEG 1813' 'MEG 1812+1813' % 'MEG 1811' + 'MEG 1822' 'MEG 1823' 'MEG 1822+1823' % 'MEG 1821' + 'MEG 1832' 'MEG 1833' 'MEG 1832+1833' % 'MEG 1831' + 'MEG 1842' 'MEG 1843' 'MEG 1842+1843' % 'MEG 1841' + 'MEG 1912' 'MEG 1913' 'MEG 1912+1913' % 'MEG 1911' + 'MEG 1922' 'MEG 1923' 'MEG 1922+1923' % 'MEG 1921' + 'MEG 1932' 'MEG 1933' 'MEG 1932+1933' % 'MEG 1931' + 'MEG 1942' 'MEG 1943' 'MEG 1942+1943' % 'MEG 1941' + 'MEG 2012' 'MEG 2013' 'MEG 2012+2013' % 'MEG 2011' + 'MEG 2022' 'MEG 2023' 'MEG 2022+2023' % 'MEG 2021' + 'MEG 2032' 'MEG 2033' 'MEG 2032+2033' % 'MEG 2031' + 'MEG 2042' 'MEG 2043' 'MEG 2042+2043' % 'MEG 2041' + 'MEG 2112' 'MEG 2113' 'MEG 2112+2113' % 'MEG 2111' + 'MEG 2122' 'MEG 2123' 'MEG 2122+2123' % 'MEG 2121' + 'MEG 2132' 'MEG 2133' 'MEG 2132+2133' % 'MEG 2131' + 'MEG 2142' 'MEG 2143' 'MEG 2142+2143' % 'MEG 2141' + 'MEG 2212' 'MEG 2213' 'MEG 2212+2213' % 'MEG 2211' + 'MEG 2222' 'MEG 2223' 'MEG 2222+2223' % 'MEG 2221' + 'MEG 2232' 'MEG 2233' 'MEG 2232+2233' % 'MEG 2231' + 'MEG 2242' 'MEG 2243' 'MEG 2242+2243' % 'MEG 2241' + 'MEG 2312' 'MEG 2313' 'MEG 2312+2313' % 'MEG 2311' + 'MEG 2322' 'MEG 2323' 'MEG 2322+2323' % 'MEG 2321' + 'MEG 2332' 'MEG 2333' 'MEG 2332+2333' % 'MEG 2331' + 'MEG 2342' 'MEG 2343' 'MEG 2342+2343' % 'MEG 2341' + 'MEG 2412' 'MEG 2413' 'MEG 2412+2413' % 'MEG 2411' + 'MEG 2422' 'MEG 2423' 'MEG 2422+2423' % 'MEG 2421' + 'MEG 2432' 'MEG 2433' 'MEG 2432+2433' % 'MEG 2431' + 'MEG 2442' 'MEG 2443' 'MEG 2442+2443' % 'MEG 2441' + 'MEG 2512' 'MEG 2513' 'MEG 2512+2513' % 'MEG 2511' + 'MEG 2522' 'MEG 2523' 'MEG 2522+2523' % 'MEG 2521' + 'MEG 2532' 'MEG 2533' 'MEG 2532+2533' % 'MEG 2531' + 'MEG 2542' 'MEG 2543' 'MEG 2542+2543' % 'MEG 2541' + 'MEG 2612' 'MEG 2613' 'MEG 2612+2613' % 'MEG 2611' + 'MEG 2622' 'MEG 2623' 'MEG 2622+2623' % 'MEG 2621' + 'MEG 2632' 'MEG 2633' 'MEG 2632+2633' % 'MEG 2631' + 'MEG 2642' 'MEG 2643' 'MEG 2642+2643' % 'MEG 2641' + }; + elseif count1 mskana - % % TODO: HERE THE FUNCTION THAT MAKES TO SLICE DIMENSION ALWAYS THE THIRD - % % DIMENSION, AND ALSO KEEP TRANSFORMATION MATRIX UP TO DATE - % zoiets - %if hasana; ana = shiftdim(ana,slicedim-1); end; - %if hasfun; fun = shiftdim(fun,slicedim-1); end; - %if hasmsk; msk = shiftdim(msk,slicedim-1); end; +slicerange = keyval('slicerange', varargin); if isempty(slicerange),slicerange='auto'; end +nslices = keyval('nslices', varargin); if isempty(nslices),nslices=4; end +slicedim = keyval('slicedim', varargin); if isempty(slicedim),slicedim=3; end +title_ = keyval('title', varargin); if isempty(title_),title_=''; end +colorbar1 = keyval('colorbar', varargin); if isempty(colorbar1),colorbar1='yes'; end +funparameter = keyval('funparameter', varargin); if isempty(funparameter),funparameter=[]; end +anaparameter = keyval('anaparameter', varargin); if isempty(anaparameter),anaparameter='anatomy'; end +maskparameter = keyval('maskparameter', varargin); if isempty(maskparameter),maskparameter=[]; end +flat2D = keyval('flat2D', varargin); if isempty(flat2D),flat2D=false; end +map = keyval('map', varargin); if isempty(map),map='gray'; end +transform = keyval('transform', varargin); if isempty(transform),transform=eye(4); end +tag = keyval('tag', varargin); if isempty(tag),tag=[]; end + +%%% funparameter +% has fun? +if ~isempty(funparameter) + if issubfield(data, funparameter) + hasfun = 1; + fun = getsubfield(data, funparameter); + else + error('funparameter not found in data'); + end +else + hasfun = 0; + fprintf('no functional parameter\n'); +end +if hasfun + handle_fun(fun) +end +%%% anaparameter +if isequal(anaparameter,'anatomy') + if isfield(data, 'anatomy') + hasana = 1; + mri8 = isa(data.anatomy, 'uint8'); + mri16 = isa(data.anatomy, 'uint16'); + % convert integers to single precision float if neccessary + if mri8 || mri16 + fprintf('converting anatomy to double\n'); + ana = double(data.anatomy); + else + ana = data.anatomy; + end + else + warning('no anatomical volume present, not plotting anatomy\n') + hasana = 0; + end +elseif isempty(anaparameter); + hasana = 0; + fprintf('not plotting anatomy\n'); +else + warning('do not understand anaparameter, not plotting anatomy\n') + hasana = 0; +end +%%% maskparameter +% has mask? +if ~isempty(maskparameter) + if issubfield(data, maskparameter) + if ~hasfun + error('you can not have a mask without functional data') + else + hasmsk = 1; + msk = getsubfield(data, maskparameter); + if islogical(msk) %otherwise sign() not posible + msk = double(msk); + end + end + else + error('maskparameter not found in data'); + end +else + hasmsk = 0; + fprintf('no masking parameter\n'); +end +if hasmsk + handle_msk(msk); +end + + %%%%% select slices + ss = setdiff([1 2 3], slicedim); + if ~isstr(slicerange) ind_fslice = slicerange(1); ind_lslice = slicerange(2); elseif isequal(slicerange, 'auto') if hasfun %default if isfield(data,'inside') - ind_fslice = min(find(max(max(data.inside,[],1),[],2))); - ind_lslice = max(find(max(max(data.inside,[],1),[],2))); + ind_fslice = min(find(max(max(data.inside,[],ss(1)),[],ss(2)))); + ind_lslice = max(find(max(max(data.inside,[],ss(1)),[],ss(2)))); else - ind_fslice = min(find(~isnan(max(max(fun,[],1),[],2)))); - ind_lslice = max(find(~isnan(max(max(fun,[],1),[],2)))); + ind_fslice = min(find(~isnan(max(max(fun,[],ss(1)),[],ss(2))))); + ind_lslice = max(find(~isnan(max(max(fun,[],ss(1)),[],ss(2))))); end elseif hasana %if only ana, no fun - ind_fslice = min(find(max(max(ana,[],1),[],2))); - ind_lslice = max(find(max(max(ana,[],1),[],2))); + ind_fslice = min(find(max(max(ana,[],ss(1)),[],ss(2)))); + ind_lslice = max(find(max(max(ana,[],ss(1)),[],ss(2)))); else error('no functional parameter and no anatomical parameter, can not plot'); end else error('do not understand slicerange'); end - ind_allslice = linspace(ind_fslice,ind_lslice,nslices); - ind_allslice = round(ind_allslice); - % make new ana, fun, msk, mskana with only the slices that will be plotted (slice dim is always third dimension) - if hasana; new_ana = ana(:,:,ind_allslice); clear ana; ana=new_ana; clear new_ana; end; - if hasfun; new_fun = fun(:,:,ind_allslice); clear fun; fun=new_fun; clear new_fun; end; - if hasmsk; new_msk = msk(:,:,ind_allslice); clear msk; msk=new_msk; clear new_msk; end; - %if hasmskana; new_mskana = mskana(:,:,ind_allslice); clear mskana; mskana=new_mskana; clear new_mskana; end; - - % update the dimensions of the volume - if hasana; dim=size(ana); else dim=size(fun); end; - - %%%%% make "quilts", that contain all slices on 2D patched sheet - % Number of patches along sides of Quilt (M and N) - % Size (in voxels) of side of patches of Quilt (m and n) - m = dim(1); - n = dim(2); - M = ceil(sqrt(dim(3))); - N = ceil(sqrt(dim(3))); - num_patch = N*M; - if slicedim~=3 - error('only supported for slicedim=3'); + + if nslices==1 + ind_allslice = (ind_fslice+ind_lslice)/2; + elseif nslices==2 + ind_allslice = [ind_fslice+(ind_lslice-ind_fslice)/5 ind_fslice+4*(ind_lslice-ind_fslice)/5]; + else + ind_allslice = linspace(ind_fslice,ind_lslice,nslices); end - num_slice = (dim(slicedim)); - num_empt = num_patch-num_slice; - % put empty slides on ana, fun, msk, mskana to fill Quilt up - if hasana; ana(:,:,end+1:num_patch)=0; end; - if hasfun; fun(:,:,end+1:num_patch)=0; end; - if hasmsk; msk(:,:,end+1:num_patch)=0; end; - %if hasmskana; mskana(:,:,end:num_patch)=0; end; - % put the slices in the quilt - for iSlice = 1:num_slice - xbeg = floor((iSlice-1)./M); - ybeg = mod(iSlice-1, M); - if hasana - quilt_ana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(ana(:,:,iSlice)); + ind_allslice = round(ind_allslice); + + + % if i want to plot a 2D representation of several slices + if flat2D + + % make new ana, fun, msk, mskana with only the slices that will be plotted (slice dim is always third dimension) + if slicedim == 3 + if hasana; new_ana = ana(:,:,ind_allslice); clear ana; ana=new_ana; clear new_ana; end; + if hasfun; new_fun = fun(:,:,ind_allslice); clear fun; fun=new_fun; clear new_fun; end; + if hasmsk; new_msk = msk(:,:,ind_allslice); clear msk; msk=new_msk; clear new_msk; end; + elseif slicedim == 2 + if hasana; new_ana = ana(:,ind_allslice,:); clear ana; ana=new_ana; clear new_ana; end; + if hasfun; new_fun = fun(:,ind_allslice,:); clear fun; fun=new_fun; clear new_fun; end; + if hasmsk; new_msk = msk(:,ind_allslice,:); clear msk; msk=new_msk; clear new_msk; end; + elseif slicedim == 1 + if hasana; new_ana = ana(ind_allslice,:,:); clear ana; ana=new_ana; clear new_ana; end; + if hasfun; new_fun = fun(ind_allslice,:,:); clear fun; fun=new_fun; clear new_fun; end; + if hasmsk; new_msk = msk(ind_allslice,:,:); clear msk; msk=new_msk; clear new_msk; end; + else + error('Error: incorrect slice dimension specification') end - if hasfun - quilt_fun(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(fun(:,:,iSlice)); + %if hasmskana; new_mskana = mskana(:,:,ind_allslice); clear mskana; mskana=new_mskana; clear new_mskana; end; + + % update the dimensions of the volume + if hasana; dim=size(ana); else dim=size(fun); end; + + %%%%% make "quilts", that contain all slices on 2D patched sheet + % Number of patches along sides of Quilt (M and N) + % Size (in voxels) of side of patches of Quilt (m and n) + + if slicedim == 3 + m = dim(1); + n = dim(2); + if length(dim)==2 + dim(3) = 1; + end + M = ceil(sqrt(dim(3))); + N = ceil(sqrt(dim(3))); + elseif slicedim == 2 + m = dim(1); + n = dim(3); + M = ceil(sqrt(dim(2))); + N = ceil(sqrt(dim(2))); + elseif slicedim == 1 + m = dim(2); + n = dim(3); + M = ceil(sqrt(dim(1))); + N = ceil(sqrt(dim(1))); end - if hasmsk - quilt_msk(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(msk(:,:,iSlice)); + + num_patch = N*M; + % if slicedim~=3 + % error('only supported for slicedim=3'); + % end + num_slice = (dim(slicedim)); + num_empt = num_patch-num_slice; + + % put empty slides on ana, fun, msk, mskana to fill Quilt up + if slicedim == 3 + if hasana; ana(:,:,end+1:num_patch)=0; end; + if hasfun; fun(:,:,end+1:num_patch)=0; end; + if hasmsk; msk(:,:,end+1:num_patch)=0; end; + elseif slicedim == 2 + if hasana; ana(:,end+1:num_patch,:)=0; end; + if hasfun; fun(:,end+1:num_patch,:)=0; end; + if hasmsk; msk(:,end+1:num_patch,:)=0; end; + elseif slicedim == 1 + if hasana; ana(end+1:num_patch,:,:)=0; end; + if hasfun; fun(end+1:num_patch,:,:)=0; end; + if hasmsk; msk(end+1:num_patch,:,:)=0; end; end - % if hasmskana - % quilt_mskana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(mskana(:,:,iSlice)); - % end - end - % make vols and scales, containes volumes to be plotted (fun, ana, msk) %added ingnie - if hasana; vols2D{1} = quilt_ana; scales{1} = []; end; % needed when only plotting ana - if hasfun; vols2D{2} = quilt_fun; scales{2} = [fcolmin fcolmax]; end; - if hasmsk; vols2D{3} = quilt_msk; scales{3} = [opacmin opacmax]; end; - plot2D(vols2D, scales); + %if hasmskana; mskana(:,:,end:num_patch)=0; end; + % put the slices in the quilt + for iSlice = 1:num_slice + xbeg = floor((iSlice-1)./M); + ybeg = mod(iSlice-1, M); + if slicedim == 3 + if hasana + quilt_ana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(ana(:,:,iSlice)); + end + if hasfun + quilt_fun(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(fun(:,:,iSlice)); + end + if hasmsk + quilt_msk(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(msk(:,:,iSlice)); + end + elseif slicedim == 2 + if hasana + quilt_ana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(ana(:,iSlice,:)); + end + if hasfun + quilt_fun(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(fun(:,iSlice,:)); + end + if hasmsk + quilt_msk(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(msk(:,iSlice,:)); + end + elseif slicedim == 1 + if hasana + quilt_ana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(ana(iSlice,:,:)); + end + if hasfun + quilt_fun(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(fun(iSlice,:,:)); + end + if hasmsk + quilt_msk(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(msk(iSlice,:,:)); + end + end - axis off + % if hasmskana + % quilt_mskana(ybeg.*m+1:(ybeg+1).*m, xbeg.*n+1:(xbeg+1).*n)=squeeze(mskana(:,:,iSlice)); + % end + end + % make vols and scales, containes volumes to be plotted (fun, ana, msk) %added ingnie + if hasana; vols2D{1} = quilt_ana; scales{1} = []; end; % needed when only plotting ana + if hasfun; vols2D{2} = quilt_fun; scales{2} = [fcolmin fcolmax]; end; + if hasmsk; vols2D{3} = quilt_msk; scales{3} = [opacmin opacmax]; end; - if strcmp(colorbar1, 'yes'), - if hasfun - % use a normal Matlab coorbar - hc = colorbar; - set(hc, 'YLim', [fcolmin fcolmax]); - else - warning('no colorbar possible without functional data') + plot2D(vols2D, scales); + axis off + + if strcmp(colorbar1, 'yes'), + if hasfun + % use a normal Matlab colorbar + hc = colorbar; + set(hc, 'YLim', [fcolmin fcolmax]); + else + warning('no colorbar possible without functional data') + end end + + else + plot_slice_sub(ana,slicedim,ind_allslice,map,transform); end + + if ~isempty(title_), title(title_); end - if ~isempty(title), title(title); end +function plot_slice_sub(data,slicedim,ind_allslice,map,transform) +if ~ishold, hold on, end +ds = size(data); - % get the output cfg - cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); +% determine location of each anatomical voxel in its own voxel coordinates +i = 1:ds(1); +j = 1:ds(2); +k = 1:ds(3); +[I, J, K] = ndgrid(i, j, k); +ijk = [I(:) J(:) K(:) ones(prod(ds),1)]'; -end +% determine location of each anatomical voxel in head coordinates +xyz = transform * ijk; +xyz = permute(xyz,[2 1 3]); +xdata = reshape(xyz(:,1), [ds(2) ds(1) ds(3)]); +ydata = reshape(xyz(:,2), [ds(2) ds(1) ds(3)]); +zdata = reshape(xyz(:,3), [ds(2) ds(1) ds(3)]); +if slicedim == 3 + for i=1:length(ind_allslice) + cdata = squeeze(data(:,:,ind_allslice(i))); + xdata_ = squeeze(xdata(:,:,ind_allslice(i))); + ydata_ = squeeze(ydata(:,:,ind_allslice(i))); + zdata_ = squeeze(zdata(:,:,ind_allslice(i))); + news = surface('cdata',cdata,'alphadata',cdata, 'xdata',xdata_, 'ydata',ydata_, 'zdata',zdata_); + set(news,'facec','interp','edgec','n','facea',0.5); + end +elseif slicedim == 2 + for i=1:length(ind_allslice) + cdata = squeeze(data(:,ind_allslice(i),:)); + xdata_ = squeeze(xdata(:,ind_allslice(i),:)); + ydata_ = squeeze(ydata(:,ind_allslice(i),:)); + zdata_ = squeeze(zdata(:,ind_allslice(i),:)); + news = surface('cdata',cdata,'alphadata',cdata, 'xdata',xdata_, 'ydata',ydata_, 'zdata',zdata_); + set(news,'facec','interp','edgec','n','facea',0.5); + end +elseif slicedim == 1 + for i=1:length(ind_allslice) + cdata = squeeze(data(ind_allslice(i),:,:)); + xdata_ = squeeze(xdata(ind_allslice(i),:,:)); + ydata_ = squeeze(ydata(ind_allslice(i),:,:)); + zdata_ = squeeze(zdata(ind_allslice(i),:,:)); + news = surface('cdata',cdata,'alphadata',cdata, 'xdata',xdata_, 'ydata',ydata_, 'zdata',zdata_); + set(news,'facec','interp','edgec','n','facea',0.5); + end +end +view(45,45) +colormap(map) +axis off +axis vis3d +axis equal -function plot2D(vols2D, scales); +function plot2D(vols2D, scales) cla; % put 2D volumes in fun, ana and msk hasana = length(vols2D)>0 && ~isempty(vols2D{1}); @@ -166,12 +377,14 @@ function plot_slice(data,varargin) clear amin amax; % convert anatomy into RGB values ana = cat(3, ana, ana, ana); - ha = imagesc(ana); +% ha = imagesc(ana); + plot_matrix(ana) end hold on if hasfun - hf = imagesc(fun); +% hf = imagesc(fun); + plot_matrix(fun) caxis(scales{2}); % apply the opacity mask to the functional data if hasmsk @@ -188,40 +401,110 @@ function plot_slice(data,varargin) axis tight axis xy -function [vols2D] = handle_ortho(vols, indx, slicedir, dim); - -% put 2Dvolumes in fun, ana and msk -if length(vols)>=1 && isempty(vols{1}); hasana=0; else ana=vols{1}; hasana=1; end; -if length(vols)>=2 - if isempty(vols{2}); hasfun=0; else fun=vols{2}; hasfun=1; end; -else hasfun=0; end -if length(vols)>=3 - if isempty(vols{3}); hasmsk=0; else msk=vols{3}; hasmsk=1; end; -else hasmsk=0; end - -% select the indices of the intersection -xi = indx(1); -yi = indx(2); -zi = indx(3); - -% select the slice to plot -if slicedir==1 - yi = 1:dim(2); - zi = 1:dim(3); -elseif slicedir==2 - xi = 1:dim(1); - zi = 1:dim(3); -elseif slicedir==3 - xi = 1:dim(1); - yi = 1:dim(2); -end - -% cut out the slice of interest -if hasana; ana = squeeze(ana(xi,yi,zi)); end; -if hasfun; fun = squeeze(fun(xi,yi,zi)); end; -if hasmsk; msk = squeeze(msk(xi,yi,zi)); end; +function handle_fun(fun) + % determine scaling min and max (fcolmin fcolmax) and funcolormap + funmin = min(fun(:)); + funmax = max(fun(:)); + % smart lims: make from auto other string + if isequal(cfg.funcolorlim,'auto') + if sign(funmin)>-1 && sign(funmax)>-1 + cfg.funcolorlim = 'zeromax'; + elseif sign(funmin)<1 && sign(funmax)<1 + cfg.funcolorlim = 'minzero'; + else + cfg.funcolorlim = 'maxabs'; + end + end + if ischar(cfg.funcolorlim) + % limits are given as string + if isequal(cfg.funcolorlim,'maxabs') + fcolmin = -max(abs([funmin,funmax])); + fcolmax = max(abs([funmin,funmax])); + if isequal(cfg.funcolormap,'auto'); cfg.funcolormap = 'jet'; end; + elseif isequal(cfg.funcolorlim,'zeromax') + fcolmin = 0; + fcolmax = funmax; + if isequal(cfg.funcolormap,'auto'); cfg.funcolormap = 'hot'; end; + elseif isequal(cfg.funcolorlim,'minzero') + fcolmin = funmin; + fcolmax = 0; + if isequal(cfg.funcolormap,'auto'); cfg.funcolormap = 'cool'; end; + else + error('do not understand cfg.funcolorlim'); + end + else + % limits are numeric + fcolmin = cfg.funcolorlim(1); + fcolmax = cfg.funcolorlim(2); + % smart colormap + if isequal(cfg.funcolormap,'auto') + if sign(fcolmin) == -1 && sign(fcolmax) == 1 + cfg.funcolormap = 'jet'; + else + if fcolmin < 0 + cfg.funcolormap = 'cool'; + else + cfg.funcolormap = 'hot'; + end + end + end + end %if ischar + clear funmin funmax; + % ensure that the functional data is real + if ~isreal(fun) + fprintf('taking absolute value of complex data\n'); + fun = abs(fun); + end -%put fun, ana and msk in vols2D -if hasana; vols2D{1} = ana; end; -if hasfun; vols2D{2} = fun; end; -if hasmsk; vols2D{3} = msk; end; +function handle_msk(msk) + mskmin = min(msk(:)); + mskmax = max(msk(:)); + % determine the opacity limits and the opacity map + % smart lims: make from auto other string, or equal to funcolorlim if funparameter == maskparameter + if isequal(cfg.opacitylim,'auto') + if isequal(cfg.funparameter,cfg.maskparameter) + cfg.opacitylim = cfg.funcolorlim; + else + if sign(mskmin)>-1 && sign(mskmax)>-1 + cfg.opacitylim = 'zeromax'; + elseif sign(mskmin)<1 && sign(mskmax)<1 + cfg.opacitylim = 'minzero'; + else + cfg.opacitylim = 'maxabs'; + end + end + end + if ischar(cfg.opacitylim) + % limits are given as string + switch cfg.opacitylim + case 'zeromax' + opacmin = 0; + opacmax = mskmax; + if isequal(cfg.opacitymap,'auto'), cfg.opacitymap = 'rampup'; end; + case 'minzero' + opacmin = mskmin; + opacmax = 0; + if isequal(cfg.opacitymap,'auto'), cfg.opacitymap = 'rampdown'; end; + case 'maxabs' + opacmin = -max(abs([mskmin, mskmax])); + opacmax = max(abs([mskmin, mskmax])); + if isequal(cfg.opacitymap,'auto'), cfg.opacitymap = 'vdown'; end; + otherwise + error('incorrect specification of cfg.opacitylim'); + end + else + % limits are numeric + opacmin = cfg.opacitylim(1); + opacmax = cfg.opacitylim(2); + if isequal(cfg.opacitymap,'auto') + if sign(opacmin)>-1 && sign(opacmax)>-1 + cfg.opacitymap = 'rampup'; + elseif sign(opacmin)<1 && sign(opacmax)<1 + cfg.opacitymap = 'rampdown'; + else + cfg.opacitymap = 'vdown'; + end + end + end % handling opacitylim and opacitymap + clear mskmin mskmax; + \ No newline at end of file diff --git a/external/fieldtrip/private/plot_text.m b/external/fieldtrip/private/plot_text.m index a657901..73b3a94 100644 --- a/external/fieldtrip/private/plot_text.m +++ b/external/fieldtrip/private/plot_text.m @@ -1,10 +1,17 @@ -function plot_text(X, Y, str, varargin) +function [varargout] = plot_text(X, Y, str, varargin) % PLOT_TEXT % Copyrights (C) 2009, Robert Oostenveld % % $Log: plot_text.m,v $ +% Revision 1.5 2009/08/05 08:52:09 roboos +% added HorizontalAlignment option +% use CamelCase for options that are passed on to the default set() function +% +% Revision 1.4 2009/06/02 15:40:36 giopia +% added varargout to pass handle +% % Revision 1.3 2009/04/14 19:48:28 roboos % added keyvalcheck % @@ -13,16 +20,17 @@ function plot_text(X, Y, str, varargin) % % get the optional input arguments -keyvalcheck(varargin, 'optional', {'hpos', 'vpos', 'width', 'height', 'hlim', 'vlim', 'color', 'fontsize', 'fontname'}); +keyvalcheck(varargin, 'optional', {'hpos', 'vpos', 'width', 'height', 'hlim', 'vlim', 'Color', 'FontSize', 'FontName', 'HorizontalAlignment'}); hpos = keyval('hpos', varargin); vpos = keyval('vpos', varargin); width = keyval('width', varargin); height = keyval('height', varargin); hlim = keyval('hlim', varargin); vlim = keyval('vlim', varargin); -color = keyval('color', varargin); if isempty(color), color = 'k'; end -fontsize = keyval('fontsize', varargin); -fontname = keyval('fontname', varargin); +Color = keyval('Color', varargin); if isempty(Color), Color = 'k'; end +FontSize = keyval('FontSize', varargin); +FontName = keyval('FontName', varargin); +HorizontalAlignment = keyval('HorizontalAlignment', varargin); if isempty(HorizontalAlignment), HorizontalAlignment = 'center'; end abc = axis; if isempty(hlim) @@ -68,10 +76,12 @@ function plot_text(X, Y, str, varargin) Y = Y + vpos; h = text(X, Y, str); -set(h, 'HorizontalAlignment', 'center'); -% set(h, 'VerticalAlignment', 'middle'); % this is already the default -set(h, 'Color', color); -if ~isempty(fontsize), set(h, 'FontSize', fontsize); end -if ~isempty(fontname), set(h, 'FontName', fontname); end - +set(h, 'HorizontalAlignment', HorizontalAlignment); +set(h, 'Color', Color); +if ~isempty(FontSize), set(h, 'FontSize', FontSize); end +if ~isempty(FontName), set(h, 'FontName', FontName); end +% the (optional) output is the handle +if nargout == 1; + varargout{1} = h; +end diff --git a/external/fieldtrip/private/plot_topo.m b/external/fieldtrip/private/plot_topo.m index e69de29..61db650 100644 --- a/external/fieldtrip/private/plot_topo.m +++ b/external/fieldtrip/private/plot_topo.m @@ -0,0 +1,122 @@ +function [varargout] = plot_topo(chanX, chanY, dat, varargin) + +% PLOT_TOPO interpolates and plots the 2-D spatial topography of the +% potential or field distribution over the head +% +% Use as +% plot_topo(x, y, val, ...) +% +% Additional options should be specified in key-value pairs and can be +% 'hpos' +% 'vpos' +% 'width' +% 'height' +% 'shading' +% 'gridscale' +% 'mask' +% 'outline' + +% Copyrights (C) 2009, Giovanni Piantoni +% +% $Log: plot_topo.m,v $ +% Revision 1.7 2009/08/12 15:15:18 jansch +% also changed the order of inputs on the first line of the function +% +% Revision 1.6 2009/08/05 08:58:54 roboos +% changed the order of the input arguments to plot_topo from (val, x, y) into (x, y, val) +% +% Revision 1.5 2009/08/05 08:53:20 roboos +% plot the outline of the head if specified +% keep hold on/off the same +% +% Revision 1.4 2009/07/29 15:04:16 giopia +% resolved ambiguity of var mask +% +% Revision 1.3 2009/07/29 10:24:24 roboos +% construct the binary image for masking inside this function and reuse it as long as the relevant input does not change +% this is achieved with a persistent variable and by checking the input arguments +% +% Revision 1.2 2009/06/02 15:36:25 giopia +% first implementation based on topoplot.m +% + +% these are for speeding up the plotting on subsequent calls +persistent previous_argin previous_maskimage + +holdflag = ishold; +hold on + +% get the optional input arguments +keyvalcheck(varargin, 'optional', {'hpos', 'vpos', 'width', 'height', 'gridscale', 'shading', 'mask', 'outline'}); +hpos = keyval('hpos', varargin); if isempty(hpos); hpos = 0; end +vpos = keyval('vpos', varargin); if isempty(vpos); vpos = 0; end +width = keyval('width', varargin); if isempty(width); width = 1; end +height = keyval('height', varargin); if isempty(height); height = 1; end +gridscale = keyval('gridscale', varargin); if isempty(gridscale); gridscale = 67; end; % 67 in original +shading = keyval('shading', varargin); if isempty(shading); shading = 'flat'; end; +mask = keyval('mask', varargin); +outline = keyval('outline', varargin); + +% try to speed up the preparation of the mask on subsequent calls +current_argin = {chanX, chanY, gridscale, mask}; +if isequal(current_argin, previous_argin) + % don't construct the binary image, but reuse it from the previous call + maskimage = previous_maskimage; +elseif ~isempty(mask) + % convert the mask into a binary image + maskimage = false(gridscale); + hlim = [min(chanX) max(chanX)]; + vlim = [min(chanY) max(chanY)]; + xi = linspace(hlim(1), hlim(2), gridscale); % x-axis for interpolation (row vector) + yi = linspace(vlim(1), vlim(2), gridscale); % y-axis for interpolation (row vector) + [Xi,Yi] = meshgrid(xi', yi); + for i=1:length(mask) + mask{i}(end+1,:) = mask{i}(1,:); % force them to be closed + maskimage(inside_contour([Xi(:) Yi(:)], mask{i})) = true; + end +else + maskimage = []; +end + +chanX = chanX * width + hpos; +chanY = chanY * height + vpos; + +hlim = [min(chanX) max(chanX)]; +vlim = [min(chanY) max(chanY)]; + +xi = linspace(hlim(1), hlim(2), gridscale); % x-axis for interpolation (row vector) +yi = linspace(vlim(1), vlim(2), gridscale); % y-axis for interpolation (row vector) +[Xi,Yi,Zi] = griddata(chanX', chanY, dat, xi', yi, 'v4'); % interpolate the topographic data + +if ~isempty(maskimage) + % apply anatomical mask to the data, i.e. that determines that the interpolated data outside the circle is not displayed + Zi(~maskimage) = NaN; +end + +deltax = xi(2)-xi(1); % length of grid entry +deltay = yi(2)-yi(1); % length of grid entry +h = surface(Xi-deltax/2,Yi-deltay/2,zeros(size(Zi)), Zi, 'EdgeColor', 'none', 'FaceColor', shading); + +% plot the outline of the head, ears and nose +for i=1:length(outline) + xval = outline{i}(:,1) * width + hpos; + yval = outline{i}(:,2) * height + vpos; + plot(xval, yval, 'Color', 'k', 'LineWidth', 1) +end + +% the (optional) output is the handle +if nargout == 1 + varargout{1} = h; +end + +% remember the current input and output arguments, so that they can be +% reused on a subsequent call in case the same input argument is given +if isempty(previous_argin) + previous_argin = current_argin; + previous_maskimage = maskimage; +end + +if ~holdflag + hold off +end + diff --git a/external/fieldtrip/private/plot_topo3d.m b/external/fieldtrip/private/plot_topo3d.m index e69de29..3a7b5d1 100644 --- a/external/fieldtrip/private/plot_topo3d.m +++ b/external/fieldtrip/private/plot_topo3d.m @@ -0,0 +1,168 @@ +function plot_topo3d(pnt, val, varargin) + +% PLOT_TOPO3D makes a 3-D topographic representation of the electric +% potential or field at the sensor locations +% +% Use as +% plot_topo3d(pos, val, ...); +% where the channel positions are given as a Nx3 matrix and the values are +% given as Nx1 vector. + +% Optional input arguments should be specified in key-value pairs and can include +% ... +% +% See also PLOT_TOPO2D, PLOTTING + +% Copyright (C) 2009, Robert Oostenveld +% +% $Log: plot_topo3d.m,v $ +% Revision 1.3 2009/06/03 09:55:10 roboos +% prevent camera lighting of the interpolated helmet/scalp surface +% +% Revision 1.2 2009/06/03 08:55:55 roboos +% first functional version +% + +% get the optional input arguments +topostyle = keyval('topostyle', varargin); if isempty(topostyle), topostyle = 'color'; end +contourstyle = keyval('contourstyle', varargin); if isempty(contourstyle), contourstyle = false; end +isocontour = keyval('isocontour', varargin); if isempty(isocontour), isocontour = 'auto'; end + +% the interpolation requires a triangulation +tri = projecttri(pnt, 'delaunay'); + +% everything is added to the current figure +holdflag = ishold; +hold on + +if ~isequal(topostyle, false) + switch topostyle + case 'color' + % plot a 2D or 3D triangulated surface with linear interpolation + if length(val)==size(pnt,1) + hs = patch('Vertices', pnt, 'Faces', tri, 'FaceVertexCData', val, 'FaceColor', 'interp'); + else + hs = patch('Vertices', pnt, 'Faces', tri, 'CData', val, 'FaceColor', 'flat'); + end + set(hs, 'EdgeColor', 'none'); + set(hs, 'FaceLighting', 'none'); + otherwise + error('unsupported topostyle'); + end % switch contourstyle +end % plot the interpolated topography + + +if ~isequal(contourstyle, false) + + if isequal(isocontour, 'auto') + minval = min(val); + maxval = max(val); + scale = max(abs(minval), abs(maxval)); + scale = 10^(floor(log10(scale))-1); + minval = floor(minval/scale)*scale; + maxval = ceil(maxval/scale)*scale; + isocontour = minval:scale:maxval; + end + + triangle_val = val(tri); + triangle_min = min(triangle_val, [], 2); + triangle_max = max(triangle_val, [], 2); + + for cnt_indx=1:length(isocontour) + cnt = isocontour(cnt_indx); + use = cnt>=triangle_min & cnt<=triangle_max; + counter = 0; + intersect1 = []; + intersect2 = []; + + for tri_indx=find(use)' + pos = pnt(tri(tri_indx,:), :); + v(1) = triangle_val(tri_indx,1); + v(2) = triangle_val(tri_indx,2); + v(3) = triangle_val(tri_indx,3); + la(1) = (cnt-v(1)) / (v(2)-v(1)); % abcissa between vertex 1 and 2 + la(2) = (cnt-v(2)) / (v(3)-v(2)); % abcissa between vertex 2 and 3 + la(3) = (cnt-v(3)) / (v(1)-v(3)); % abcissa between vertex 1 and 2 + abc(1,:) = pos(1,:) + la(1) * (pos(2,:) - pos(1,:)); + abc(2,:) = pos(2,:) + la(2) * (pos(3,:) - pos(2,:)); + abc(3,:) = pos(3,:) + la(3) * (pos(1,:) - pos(3,:)); + counter = counter + 1; + sel = find(la>=0 & la<=1); + intersect1(counter, :) = abc(sel(1),:); + intersect2(counter, :) = abc(sel(2),:); + end + + % remember the details for external reference + contour(cnt_indx).level = cnt; + contour(cnt_indx).n = counter; + contour(cnt_indx).intersect1 = intersect1; + contour(cnt_indx).intersect2 = intersect2; + end + + % collect all different contour isocontour for plotting + intersect1 = []; + intersect2 = []; + cntlevel = []; + for cnt_indx=1:length(isocontour) + intersect1 = [intersect1; contour(cnt_indx).intersect1]; + intersect2 = [intersect2; contour(cnt_indx).intersect2]; + cntlevel = [cntlevel; ones(contour(cnt_indx).n,1) * isocontour(cnt_indx)]; + end + + X = [intersect1(:,1) intersect2(:,1)]'; + Y = [intersect1(:,2) intersect2(:,2)]'; + C = [cntlevel(:) cntlevel(:)]'; + + if size(pnt,2)>2 + Z = [intersect1(:,3) intersect2(:,3)]'; + else + Z = zeros(2, length(cntlevel)); + end + + switch contourstyle + case 'black' + % make black-white contours + hc = []; + for i=1:length(cntlevel) + if cntlevel(i)>0 + linestyle = '-'; + linewidth = 1; + elseif cntlevel(i)<0 + linestyle = '--'; + linewidth = 1; + else + linestyle = '-'; + linewidth = 2; + end + h1 = patch('XData', X(:,i), 'Ydata', Y(:,i), ... + 'ZData', Z(:,i), 'CData', C(:,i), ... + 'facecolor','none','edgecolor','black', ... + 'linestyle', linestyle, 'linewidth', linewidth, ... + 'userdata',cntlevel(i)); + hc = [hc; h1]; + end + + case 'color' + % make full-color contours + hc = []; + for i=1:length(cntlevel) + h1 = patch('XData', X(:,i), 'Ydata', Y(:,i), ... + 'ZData', Z(:,i), 'CData', C(:,i), ... + 'facecolor','none','edgecolor','flat',... + 'userdata',cntlevel(i)); + hc = [hc; h1]; + end + + otherwise + error('unsupported contourstyle'); + end % switch contourstyle + +end % plot the contours + +axis off +axis vis3d +axis equal + +if ~holdflag + hold off +end diff --git a/external/fieldtrip/private/plot_vector.m b/external/fieldtrip/private/plot_vector.m index ddeec7e..16114ab 100644 --- a/external/fieldtrip/private/plot_vector.m +++ b/external/fieldtrip/private/plot_vector.m @@ -1,4 +1,4 @@ -function plot_vector(varargin) +function [varargout] = plot_vector(varargin) % PLOT_VECTOR % @@ -15,8 +15,10 @@ function plot_vector(varargin) % 'hlim' % 'vlim' % 'style' -% 'axis' can be 'yes' or 'no' -% 'box' can be 'yes' or 'no' +% 'axis' can be 'yes' or 'no' +% 'box' can be 'yes' or 'no' +% 'highlight' +% 'highlightstyle' % % Example use % plot_vector(randn(1,100), 'width', 1, 'height', 1, 'hpos', 0, 'vpos', 0) @@ -24,6 +26,19 @@ function plot_vector(varargin) % Copyrights (C) 2009, Robert Oostenveld % % $Log: plot_vector.m,v $ +% Revision 1.10 2009/07/30 09:13:58 ingnie +% fixed bug in determining if function was called as plot(x,y,...) or plot(y,...) +% +% Revision 1.9 2009/07/14 16:14:45 roboos +% fixed the plotting of the axes, which were not at [0, 0] +% some general cleanup +% +% Revision 1.8 2009/06/04 13:11:54 crimic +% added highlight option +% +% Revision 1.7 2009/06/02 15:42:52 giopia +% correct error in first if-statement and added varargout for handle +% % Revision 1.6 2009/04/15 20:00:45 roboos % small change in input parsing % @@ -37,8 +52,10 @@ function plot_vector(varargin) % many small changes to make it fully functional % -if nargin>1 && isnumeric(varargin{1}) && isnumeric(varargin{2}) -if nargin>2 && all(cellfun(@isnumeric, varargin(1:2))) +holdflag = ishold; +hold on + +if nargin>1 && all(cellfun(@isnumeric, varargin(1:2))) % the function was called like plot(x, y, ...) hdat = varargin{1}; vdat = varargin{2}; @@ -55,25 +72,26 @@ function plot_vector(varargin) end % get the optional input arguments -keyvalcheck(varargin, 'optional', {'hpos', 'vpos', 'width', 'height', 'hlim', 'vlim', 'style', 'axis', 'box'}); -hpos = keyval('hpos', varargin); -vpos = keyval('vpos', varargin); -width = keyval('width', varargin); -height = keyval('height', varargin); -hlim = keyval('hlim', varargin); -vlim = keyval('vlim', varargin); -style = keyval('style', varargin); if isempty(style), style = '-'; end -axis = keyval('axis', varargin); if isempty(axis), axis = false; end -box = keyval('box', varargin); if isempty(box), box = false; end -% label = keyval('label', varargin); % FIXME - -if isempty(hlim) - hlim = 'maxmin'; -end +keyvalcheck(varargin, 'optional', {'hpos', 'vpos', 'width', 'height', 'hlim', 'vlim', 'style', 'label', 'fontsize', 'axis', 'box','highlight','highlightstyle'}); +hpos = keyval('hpos', varargin); +vpos = keyval('vpos', varargin); +width = keyval('width', varargin); +height = keyval('height', varargin); +hlim = keyval('hlim', varargin); if isempty(hlim), hlim = 'maxmin'; end +vlim = keyval('vlim', varargin); if isempty(vlim), vlim = 'maxmin'; end +style = keyval('style', varargin); if isempty(style), style = '-'; end +label = keyval('label', varargin); +fontsize = keyval('fontsize', varargin); +axis = keyval('axis', varargin); if isempty(axis), axis = false; end +box = keyval('box', varargin); if isempty(box), box = false; end +highlight = keyval('highlight', varargin); +highlightstyle = keyval('highlightstyle', varargin); if isempty(highlightstyle), highlightstyle = 'box'; end + +% convert the yes/no strings into boolean values +axis = istrue(axis); +box = istrue(box); -if isempty(vlim) - vlim = 'maxmin'; -end +% label = keyval('label', varargin); % FIXME if ischar(hlim) switch hlim @@ -99,19 +117,19 @@ function plot_vector(varargin) end % switch end % if ischar -if isempty(hpos); + +if isempty(hpos) && ~isempty(hlim) hpos = (hlim(1)+hlim(2))/2; end - -if isempty(vpos); +if isempty(vpos) && ~isempty(vlim) vpos = (vlim(1)+vlim(2))/2; end -if isempty(width), +if isempty(width) && ~isempty(hlim) width = hlim(2)-hlim(1); end -if isempty(height), +if isempty(height) && ~isempty(vlim) height = vlim(2)-vlim(1); end @@ -123,7 +141,6 @@ function plot_vector(varargin) hdat = hdat .* width; % then shift to the new horizontal position hdat = hdat + hpos; - % first shift the vertical axis to zero vdat = vdat - (vlim(1)+vlim(2))/2; % then scale to length 1 @@ -133,17 +150,62 @@ function plot_vector(varargin) % then shift to the new vertical position vdat = vdat + vpos; -plot(hdat, vdat, style); +if ~isempty(highlight) + switch highlightstyle + case 'box' + % find the sample number where the highligh begins and ends + if ~islogical(highlight) + highlight=logical(highlight); + warning('converting mask to logical values') + end + begsample = find(diff([0 highlight 0])== 1); + endsample = find(diff([0 highlight 0])==-1)-1; + for i=1:length(begsample) + begx = hdat(begsample(i)); + endx = hdat(endsample(i)); + plot_box([begx endx vpos-height/2 vpos+height/2], 'facecolor', [.6 .6 .6], 'edgecolor', 'none'); + end + case 'thickness' + error('unsupported highlightstyle') + case 'opacity' + error('unsupported highlightstyle') + otherwise + error('unsupported highlightstyle') + end % switch highlightstyle +end -if istrue(box) - boxposition = zeros(1,4); - % this plots a box around the original hpos/vpos with appropriate width/height +h = plot(hdat, vdat, style); + +if ~isempty(label) boxposition(1) = hpos - width/2; boxposition(2) = hpos + width/2; boxposition(3) = vpos - height/2; boxposition(4) = vpos + height/2; - plot_box(boxposition); + h = text(boxposition(1), boxposition(4), label); + if ~isempty(fontsize) + set(h, 'Fontsize', fontsize); + end +end +if box + boxposition = zeros(1,4); + % this plots a box around the original hpos/vpos with appropriate width/height + x1 = hpos - width/2; + x2 = hpos + width/2; + y1 = vpos - height/2; + y2 = vpos + height/2; + + X = [x1 x2 x2 x1 x1]; + Y = [y1 y1 y2 y2 y1]; + line(X, Y); + +% % this plots a box around the original hpos/vpos with appropriate width/height +% boxposition(1) = hpos - width/2; +% boxposition(2) = hpos + width/2; +% boxposition(3) = vpos - height/2; +% boxposition(4) = vpos + height/2; +% plot_box(boxposition, 'facecolor', 'none', 'edgecolor', 'k'); + % this plots a box around the complete data % boxposition(1) = hlim(1); % boxposition(2) = hlim(2); @@ -152,23 +214,29 @@ function plot_vector(varargin) % plot_box(boxposition, 'hpos', hpos, 'vpos', vpos, 'width', width, 'height', height, 'hlim', hlim, 'vlim', vlim); end -if istrue(axis) - % X = hlim; - % Y = [0 0]; - % plot_line(X, Y, 'hpos', hpos, 'vpos', vpos, 'width', width, 'height', height, 'hlim', hlim, 'vlim', vlim); - % str = sprintf('%g', hlim(1)); plot_text(X(1), Y(1), str, 'hpos', hpos, 'vpos', vpos, 'width', width, 'height', height, 'hlim', hlim, 'vlim', vlim); - % str = sprintf('%g', hlim(2)); plot_text(X(2), Y(2), str, 'hpos', hpos, 'vpos', vpos, 'width', width, 'height', height, 'hlim', hlim, 'vlim', vlim); - +if axis + % determine where the original [0, 0] in the data is located in the scaled and shifted axes + x0 = interp1(hlim, hpos + [-width/2 width/2 ], 0, 'linear', 'extrap'); + y0 = interp1(vlim, vpos + [-height/2 height/2], 0, 'linear', 'extrap'); + X = [hpos-width/2 hpos+width/2]; - Y = [vpos vpos]; + Y = [y0 y0]; plot_line(X, Y); - str = sprintf('%g', hlim(1)); plot_text(X(1), Y(1), str); - str = sprintf('%g', hlim(2)); plot_text(X(2), Y(2), str); - - X = [hpos hpos]; + % str = sprintf('%g', hlim(1)); plot_text(X(1), Y(1), str); + % str = sprintf('%g', hlim(2)); plot_text(X(2), Y(2), str); + + X = [x0 x0]; Y = [vpos-height/2 vpos+height/2]; plot_line(X, Y); - str = sprintf('%g', vlim(1)); plot_text(X(1), Y(1), str); - str = sprintf('%g', vlim(2)); plot_text(X(2), Y(2), str); + % str = sprintf('%g', vlim(1)); plot_text(X(1), Y(1), str); + % str = sprintf('%g', vlim(2)); plot_text(X(2), Y(2), str); end +% the (optional) output is the handle +if nargout == 1; + varargout{1} = h; +end + +if ~holdflag + hold off +end diff --git a/external/fieldtrip/private/plot_vol.m b/external/fieldtrip/private/plot_vol.m index fa6736d..adf337b 100644 --- a/external/fieldtrip/private/plot_vol.m +++ b/external/fieldtrip/private/plot_vol.m @@ -9,24 +9,29 @@ function plot_vol(vol, varargin) % Graphic facilities are available for vertices, edges and faces. A list of % the arguments is given below with the correspondent admitted choices. % -% 'faces' ['yes', 'no', 1, 0, 'true', 'false'] -% 'facecolor' ['brain', 'cortex', 'skin', 'black', 'red', 'r', ..., [0.5 1 0], ...] -% 'faceindex' ['yes', 'no', 1, 0, 'true', 'false'] -% 'vertices' ['yes', 'no', 1, 0, 'true', 'false'] -% 'vertexcolor' ['brain', 'cortex', 'skin', 'black', 'red', 'r', ..., [0.5 1 0], ...] -% 'vertexindex' ['yes', 'no', 1, 0, 'true', 'false'] -% 'edges' ['yes', 'no', 1, 0, 'true', 'false'] -% 'edgecolor' ['brain', 'cortex', 'skin', 'black', 'red', 'r', ..., [0.5 1 0], ...] -% 'colormap' ['gray', 'hot', 'cool', 'copper', 'spring', 'summer', ...] +% 'facecolor' [r g b] values or string, for example 'brain', 'cortex', 'skin', 'black', 'red', 'r' +% 'vertexcolor' [r g b] values or string, for example 'brain', 'cortex', 'skin', 'black', 'red', 'r' +% 'edgecolor' [r g b] values or string, for example 'brain', 'cortex', 'skin', 'black', 'red', 'r' +% 'faceindex' true or false +% 'vertexindex' true or false % % Example -% vol.r = [1 5 10]; -% vol.o = [0 0 4]; -% figure, plot_vol(vol,'colormap','cool') -% -% Copyright (C) 2009, Cristiano Micheli +% vol.r = [86 88 92 100]; +% vol.o = [0 0 40]; +% figure, plot_vol(vol) + +% Copyright (C) 2009, Cristiano Micheli % % $Log: plot_vol.m,v $ +% Revision 1.10 2009/09/04 09:26:28 crimic +% made sphere mesh lighter, added plot_mesh options +% +% Revision 1.9 2009/06/25 16:03:06 crimic +% function now compatible with toolbox guidelines +% +% Revision 1.8 2009/06/03 10:05:40 roboos +% changed handling of mesh generation and teh actual plotting +% % Revision 1.7 2009/04/22 11:45:02 crimic % updated help % @@ -46,82 +51,59 @@ function plot_vol(vol, varargin) % created function to plot forward model geometry % +keyvalcheck(varargin, 'forbidden', {'faces', 'edges', 'vertices'}); % get the optional input arguments -faces = keyval('faces', varargin); -facecolor = keyval('facecolor', varargin); -faceindex = keyval('faceindex', varargin); -vertices = keyval('vertices', varargin); if isempty(vertices),vertices=1;end -vertexcolor = keyval('vertexcolor', varargin); -vertexindex = keyval('vertexindex', varargin); -vertexsize = keyval('vertexsize', varargin); if isempty(vertexsize),vertexsize=10;end -edges = keyval('edges', varargin); if isempty(edges),edges=1;end -edgecolor = keyval('edgecolor', varargin); -map = keyval('colormap', varargin); -% we will probably need a sphere, so let's prepare one -[pnt, tri] = icosahedron642; +faceindex = keyval('faceindex', varargin); if isempty(faceindex),faceindex = 'none';end +vertexindex = keyval('vertexindex', varargin); if isempty(faceindex),vertexindex ='none';end +vertexsize = keyval('vertexsize', varargin); if isempty(vertexsize), vertexsize = 10; end +facecolor = keyval('facecolor', varargin); if isempty(facecolor),facecolor = 'white'; end +vertexcolor = keyval('vertexcolor', varargin); if isempty(vertexcolor),vertexcolor ='none';end +edgecolor = keyval('edgecolor', varargin); if isempty(edgecolor),edgecolor = 'k';end +facealpha = keyval('facealpha', varargin); if isempty(facealpha),facealpha = 1;end +map = keyval('colormap', varargin); -if ~isempty(map) - try - cmap=colormap(map);close(gcf); - catch - error('Colormap does not exist') - end - % set the color of the sphere: - color = [(linspace(cmap(1,1),cmap(64,1),length(vol.bnd)))' (linspace(cmap(1,2),cmap(64,2),length(vol.bnd)))' ... - (linspace(cmap(1,3),cmap(64,3),length(vol.bnd)))']; -end +faceindex = istrue(faceindex); +vertexindex = istrue(vertexindex); + -switch voltype(vol) - case {'singlesphere' 'concentric'} +% we will probably need a sphere, so let's prepare one +[pnt, tri] = icosahedron162; +% prepare a single or multiple triangulated boundaries +switch voltype(vol) + case {'singlesphere' 'concentric'} vol.r = sort(vol.r); + bnd = []; for i=1:length(vol.r) - bnd = []; - bnd.pnt = pnt*vol.r(i); - bnd.pnt(:,1) = bnd.pnt(:,1) + vol.o(1); - bnd.pnt(:,2) = bnd.pnt(:,2) + vol.o(2); - bnd.pnt(:,3) = bnd.pnt(:,3) + vol.o(3); - - bnd.tri = tri; - - if ~isempty(map) - plot_mesh(bnd,'edgecolor', [color(i,1) color(i,2) color(i,3)], ... - 'vertexcolor', [color(i,1) color(i,2) color(i,3)]); - else - plot_mesh(bnd); - end + bnd(i).pnt(:,1) = pnt(:,1)*vol.r(i) + vol.o(1); + bnd(i).pnt(:,2) = pnt(:,2)*vol.r(i) + vol.o(2); + bnd(i).pnt(:,3) = pnt(:,3)*vol.r(i) + vol.o(3); + bnd(i).tri = tri; end - + case 'multisphere' + bnd = []; for i=1:length(vol.label) - bnd = []; - bnd.pnt = pnt*vol.r(i); - bnd.pnt(:,1) = bnd.pnt(:,1) + vol.o(i,1); - bnd.pnt(:,2) = bnd.pnt(:,2) + vol.o(i,2); - bnd.pnt(:,3) = bnd.pnt(:,3) + vol.o(i,3); - - bnd.tri = tri; - - if ~isempty(map) - plot_mesh(bnd,'edgecolor', [color(i,1) color(i,2) color(i,3)], ... - 'vertexcolor', [color(i,1) color(i,2) color(i,3)]); - else - plot_mesh(bnd); - end - end + bnd(i).pnt(:,1) = pnt(:,1)*vol.r(i) + vol.o(i,1); + bnd(i).pnt(:,2) = pnt(:,2)*vol.r(i) + vol.o(i,2); + bnd(i).pnt(:,3) = pnt(:,3)*vol.r(i) + vol.o(i,3); + bnd(i).tri = tri; + end case {'bem', 'dipoli', 'asa', 'avo', 'bemcp', 'nolte'} - for i=1:length(vol.bnd) - if ~isempty(map) - plot_mesh(vol.bnd(i),'edgecolor', [color(i,1) color(i,2) color(i,3)], ... - 'vertexcolor', [color(i,1) color(i,2) color(i,3)]); - else - plot_mesh(vol.bnd(i)); - end - end - + % these already contain one or multiple triangulated surfaces for the boundaries + bnd = vol.bnd; + otherwise error('unsupported voltype') end + +% plot the triangulated surfaces of the volume conduction model +for i=1:length(bnd) + plot_mesh(bnd(i),'faceindex',faceindex,'vertexindex',vertexindex, ... + 'vertexsize',vertexsize,'facecolor',facecolor,'edgecolor',edgecolor, ... + 'vertexcolor',vertexcolor,'facealpha',facealpha); +end + diff --git a/external/fieldtrip/private/prepare_atlas.m b/external/fieldtrip/private/prepare_atlas.m index ba66e5d..819d6d5 100644 --- a/external/fieldtrip/private/prepare_atlas.m +++ b/external/fieldtrip/private/prepare_atlas.m @@ -14,6 +14,9 @@ % Copyright (C) 2005-2008, Robert Oostenveld, Ingrid Nieuwenhuis % % $Log: prepare_atlas.m,v $ +% Revision 1.2 2009/07/14 07:27:30 roboos +% replaced read_fcdc_mri with read_mri to avoid warning +% % Revision 1.1 2008/12/05 13:46:24 ingnie % this function replaces atlas_init % @@ -35,7 +38,7 @@ % check whether the required AFNI toolbox is available hastoolbox('afni', 1); - atlas = read_fcdc_mri(filename); + atlas = read_mri(filename); % the AFNI atlas contains two volumes at 1mm resolution atlas.brick0 = atlas.anatomy(:,:,:,1); diff --git a/external/fieldtrip/private/prepare_bemmodel.m b/external/fieldtrip/private/prepare_bemmodel.m index e22909c..4153e04 100644 --- a/external/fieldtrip/private/prepare_bemmodel.m +++ b/external/fieldtrip/private/prepare_bemmodel.m @@ -1,12 +1,14 @@ -function [vol] = prepare_bemmodel(cfg, mri) +function [vol, cfg] = prepare_bemmodel(cfg, mri) % PREPARE_BEMMODEL constructs triangulations of the boundaries between % multiple segmented tissue types in an anatomical MRI and subsequently % computes the BEM system matrix. % % Use as -% [vol] = prepare_bemmodel(cfg, mri), or -% [vol] = prepare_bemmodel(cfg, vol) +% [vol, cfg] = prepare_bemmodel(cfg, mri), or +% [vol, cfg] = prepare_bemmodel(cfg, seg), or +% [vol, cfg] = prepare_bemmodel(cfg, vol), or +% [vol, cfg] = prepare_bemmodel(cfg) % % The configuration can contain % cfg.tissue = [1 2 3], segmentation value of each tissue type @@ -27,6 +29,9 @@ % Copyright (C) 2005-2009, Robert Oostenveld % % $Log: prepare_bemmodel.m,v $ +% Revision 1.17 2009/07/16 09:11:19 crimic +% added link to prepare_mesh.m and modified help +% % Revision 1.16 2009/03/30 15:06:14 roboos % added the patch from Alexandre to support openmeeg % @@ -49,26 +54,18 @@ if ~isfield(cfg, 'tissue'), cfg.tissue = [8 12 14]; end if ~isfield(cfg, 'numvertices'), cfg.numvertices = [1 2 3] * 500; end -if ~isfield(cfg, 'conductivity'), cfg.conductivity = [1 1/80 1] * 0.33; end if ~isfield(cfg, 'hdmfile'), cfg.hdmfile = []; end if ~isfield(cfg, 'isolatedsource'), cfg.isolatedsource = []; end -if ~isfield(cfg, 'method'), cfg.method = 'dipoli'; end - -% there are two types of input possible -hasmri = isfield(mri, 'transform'); -hasvol = isfield(mri, 'bnd'); - -if hasvol && ~hasmri - % rename the second input argument - vol = mri; - clear mri; -elseif hasmri && ~hasvol - % start with an empty volume conductor - vol = []; +if ~isfield(cfg, 'method'), cfg.method = 'dipoli'; end % dipoli, openmeeg, bemcp, brainstorm +if ~isfield(cfg, 'conductivity') && isfield(mri, 'cond') + cfg.conductivity = mri.cond; else - error('invalid input arguments'); + cfg.conductivity = [1 1/80 1] * 0.33; end +% start with an empty volume conductor +vol = []; + if ~isfield(vol, 'cond') % assign the conductivity of each compartment vol.cond = cfg.conductivity; @@ -77,32 +74,11 @@ % determine the number of compartments Ncompartment = length(vol.cond); -if hasmri - fprintf('using the segmented MRI\n'); - [mrix, mriy, mriz] = ndgrid(1:size(mri.seg,1), 1:size(mri.seg,2), 1:size(mri.seg,3)); - % construct the triangulations of the boundaries from the segmented MRI - for i=1:Ncompartment - fprintf('triangulating the boundary of compartment %d\n', i); - seg = imfill((mri.seg==cfg.tissue(i)), 'holes'); - ori(1) = mean(mrix(seg(:))); - ori(2) = mean(mriy(seg(:))); - ori(3) = mean(mriz(seg(:))); - [pnt, tri] = triangulate_seg(seg, cfg.numvertices(i), ori); - % apply the coordinate transformation from voxel to head coordinates - pnt(:,4) = 1; - pnt = (mri.transform * (pnt'))'; - pnt = pnt(:,1:3); - vol.bnd(i).pnt = pnt; - vol.bnd(i).tri = tri; - end +% construct the geometry of the BEM boundaries +if nargin==1 + vol.bnd = prepare_mesh(cfg); else - fprintf('using the pre-specified triangulated boundaries\n'); -end - -% ensure that the vertices and triangles are double precision, otherwise the bemcp mex files will crash -for i=1:length(vol.bnd) - vol.bnd(i).pnt = double(vol.bnd(i).pnt); - vol.bnd(i).tri = double(vol.bnd(i).tri); + vol.bnd = prepare_mesh(cfg, mri); end vol.source = find_innermost_boundary(vol.bnd); @@ -130,28 +106,18 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % this uses an implementation that was contributed by Thom Oostendorp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % determine whether the command-line DIPOLI executable is available hastoolbox('dipoli', 1); + % use the dipoli wrapper function vol = dipoli(vol, cfg.isolatedsource); - -elseif strcmp(cfg.method, 'brainstorm') - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % this uses an implementation from the BrainStorm toolbox - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - hastoolbox('brainstorm', 1); - - error('not yet implemented'); - + vol.type = 'dipoli'; + elseif strcmp(cfg.method, 'bemcp') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % this uses an implementation that was contributed by Christophe Philips %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hastoolbox('bemcp', 1); - - vol.type = 'bemcp'; - + % do some sanity checks if length(vol.bnd)~=3 error('this only works for three surfaces'); @@ -162,15 +128,15 @@ if vol.source~=1 error('the source compartment should correspond to the first surface'); end - + % Build Triangle 4th point vol = triangle4pt(vol); - + % 2. BEM model estimation, only for the scalp surface - + defl =[ 0 0 1/size(vol.bnd(vol.skin).pnt,1)]; % ensure deflation for skin surface, i.e. average reference over skin - + % NOTE: % Calculation proceeds by estimating each submatrix C_ij and combine them. % There are 2 options: @@ -182,52 +148,52 @@ % The latter option requires less memory, but would take much more time to % estimate. % This faster but memory hungry solution is implemented here. - + % Deal first with surface 1 and 2 (inner and outer skull %-------------------------------- - + % NOTE: % C11st/C22st/C33st are simply the matrix C11/C22/C33 minus the identity % matrix, i.e. C11st = C11-eye(N) - + weight = (vol.cond(1)-vol.cond(2))/((vol.cond(1)+vol.cond(2))*2*pi); C11st = bem_Cii_lin(vol.bnd(1).tri,vol.bnd(1).pnt, weight,defl(1),vol.bnd(1).pnt4); weight = (vol.cond(1)-vol.cond(2))/((vol.cond(2)+vol.cond(3))*2*pi); C21 = bem_Cij_lin(vol.bnd(2).pnt,vol.bnd(1).pnt,vol.bnd(1).tri, weight,defl(1)); tmp1 = C21/C11st; - + weight = (vol.cond(2)-vol.cond(3))/((vol.cond(1)+vol.cond(2))*2*pi); C12 = bem_Cij_lin(vol.bnd(1).pnt,vol.bnd(2).pnt,vol.bnd(2).tri, weight,defl(2)); weight = (vol.cond(2)-vol.cond(3))/((vol.cond(2)+vol.cond(3))*2*pi); C22st = bem_Cii_lin(vol.bnd(2).tri,vol.bnd(2).pnt, weight,defl(2),vol.bnd(2).pnt4); tmp2 = C12/C22st; - + % Try to spare some memory: tmp10 = - tmp2 * C21 + C11st; clear C21 C11st tmp11 = - tmp1 * C12 + C22st; clear C12 C22st - + % Combine with the effect of surface 3 (scalp) on the first 2 %------------------------------------------------------------ weight = (vol.cond(1)-vol.cond(2))/(vol.cond(3)*2*pi); C31 = bem_Cij_lin(vol.bnd(3).pnt,vol.bnd(1).pnt,vol.bnd(1).tri, weight,defl(1)); -% tmp4 = C31/(- tmp2 * C21 + C11st ); -% clear C31 C21 C11st + % tmp4 = C31/(- tmp2 * C21 + C11st ); + % clear C31 C21 C11st tmp4 = C31/tmp10; clear C31 tmp10 - + weight = (vol.cond(2)-vol.cond(3))/(vol.cond(3)*2*pi); C32 = bem_Cij_lin(vol.bnd(3).pnt,vol.bnd(2).pnt,vol.bnd(2).tri, weight,defl(2)); -% tmp3 = C32/(- tmp1 * C12 + C22st ); -% clear C12 C22st C32 + % tmp3 = C32/(- tmp1 * C12 + C22st ); + % clear C12 C22st C32 tmp3 = C32/tmp11; clear C32 tmp11 - + tmp5 = tmp3*tmp1-tmp4; tmp6 = tmp4*tmp2-tmp3; clear tmp1 tmp2 tmp3 tmp4 - + % Finally include effect of surface 3 on the others %-------------------------------------------------- % As the gama1 intermediate matrix is built as the sum of 3 matrices, I can @@ -235,32 +201,39 @@ weight = vol.cond(3)/((vol.cond(1)+vol.cond(2))*2*pi); Ci3 = bem_Cij_lin(vol.bnd(1).pnt,vol.bnd(3).pnt,vol.bnd(3).tri, weight,defl(3)); gama1 = - tmp5*Ci3; % gama1 = - tmp5*C13; - + weight = vol.cond(3)/((vol.cond(2)+vol.cond(3))*2*pi); Ci3 = bem_Cij_lin(vol.bnd(2).pnt,vol.bnd(3).pnt,vol.bnd(3).tri, weight,defl(3)); gama1 = gama1 - tmp6*Ci3; % gama1 = - tmp5*C13 - tmp6*C23; - + weight = 1/(2*pi); Ci3 = bem_Cii_lin(vol.bnd(3).tri,vol.bnd(3).pnt, weight,defl(3),vol.bnd(3).pnt4); gama1 = gama1 - Ci3; % gama1 = - tmp5*C13 - tmp6*C23 - C33st; clear Ci3 - + % Build system matrix %-------------------- i_gama1 = inv(gama1); vol.mat = [i_gama1*tmp5 i_gama1*tmp6 i_gama1]; - + vol.type = 'bemcp'; + elseif strcmp(cfg.method, 'openmeeg') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % this uses an implementation that was contributed by INRIA Odyssee Team %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % determine whether the OpenMEEG command-line executables is available hastoolbox('openmeeg', 1); + % use the openmeeg wrapper function vol = openmeeg(vol); vol.type = 'openmeeg'; - + +elseif strcmp(cfg.method, 'brainstorm') + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % this uses an implementation from the BrainStorm toolbox + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + hastoolbox('brainstorm', 1); + error('not yet implemented'); + else error('unsupported method'); end % which method diff --git a/external/fieldtrip/private/prepare_concentricspheres.m b/external/fieldtrip/private/prepare_concentricspheres.m index d4ea5f8..b6d4ded 100644 --- a/external/fieldtrip/private/prepare_concentricspheres.m +++ b/external/fieldtrip/private/prepare_concentricspheres.m @@ -1,8 +1,7 @@ function [vol, cfg] = prepare_concentricspheres(cfg) -% PREPARE_CONCENTRICSPHERES creates a MEG volume conductor model with a sphere -% for every sensor. You can also use it to create a single sphere -% model that is fitted to the MRI or to the head shape points. +% PREPARE_CONCENTRICSPHERES creates a EEG volume conductor model with +% multiple concentric spheres. % % Use as % [vol, cfg] = prepare_concentricspheres(cfg) @@ -15,7 +14,6 @@ % cfg.nonlinear = 'yes' or 'no' (default = 'yes') % cfg.feedback = 'yes' or 'no' (default = 'yes') % -% % Example: % % % first create 4 surfaces that represent the brain, csf, skull and skin @@ -38,6 +36,12 @@ % Copyright (C) 2009, Vladimir Litvak & Robert Oostenveld % % $Log: prepare_concentricspheres.m,v $ +% Revision 1.8 2009/07/16 09:14:52 crimic +% part of code reimplemented in function prepare_mesh_headshape.m +% +% Revision 1.7 2009/06/23 14:59:28 crimic +% use of plotting toolbox funtion: plot_mesh +% % Revision 1.6 2009/05/29 11:40:07 roboos % only convert cfg.headshape from config to struct in case it is present % @@ -65,6 +69,7 @@ if ~isfield(cfg, 'fitind'), cfg.fitind = 'all'; end if ~isfield(cfg, 'feedback'), cfg.feedback = 'yes'; end if ~isfield(cfg, 'conductivity'), cfg.conductivity = [0.3300 1 0.0042 0.3300]; end +if ~isfield(cfg, 'numvertices'), cfg.numvertices = 'same'; end if isfield(cfg, 'headshape') && isa(cfg.headshape, 'config') % convert the nested config-object back into a normal structure @@ -74,25 +79,7 @@ cfg = checkconfig(cfg, 'forbidden', 'nonlinear'); % get the surface describing the head shape -if isstruct(cfg.headshape) && isfield(cfg.headshape, 'pnt') - % use the headshape surface specified in the configuration - headshape = cfg.headshape; -elseif isnumeric(cfg.headshape) && size(cfg.headshape,2)==3 - % use the headshape points specified in the configuration - headshape.pnt = cfg.headshape; -elseif ischar(cfg.headshape) - % read the headshape from file - headshape = read_headshape(cfg.headshape); -else - error('cfg.headshape is not specified correctly') -end -if ~isfield(headshape, 'tri') - for i=1:length(headshape) - % generate a closed triangulation from the surface points - headshape(i).pnt = unique(headshape(i).pnt, 'rows'); - headshape(i).tri = projecttri(headshape(i).pnt); - end -end +headshape = prepare_mesh_headshape(cfg); if strcmp(cfg.fitind, 'all') fitind = 1:numel(headshape); @@ -140,15 +127,17 @@ headshape(end-i+1).tri = []; end - % FIXME switch to plot_mesh % plot the original surface - triplot(headshape(end-i+1).pnt, headshape(end-i+1).tri, [], 'edges'); + bndtmp = []; + bndtmp.pnt = headshape(end-i+1).pnt; + bndtmp.tri = headshape(end-i+1).tri; + plot_mesh(bndtmp,'facecolor','none') - % FIXME switch to plot_mesh % plot the sphere surface - spnt = sphere_pnt*vol.r(i) + repmat(single_o, size(sphere_pnt, 1), 1); - hs = triplot(spnt, sphere_tri, [], 'edges'); - set(hs, 'EdgeColor', colors{mod(i, numel(colors)) + 1}); + bndtmp = []; + bndtmp.pnt = sphere_pnt*vol.r(i) + repmat(single_o, size(sphere_pnt, 1), 1); + bndtmp.tri = sphere_tri; + plot_mesh(bndtmp,'edgecolor',colors{mod(i, numel(colors)) + 1},'facecolor','none'); end end diff --git a/external/fieldtrip/private/prepare_freq_matrices.m b/external/fieldtrip/private/prepare_freq_matrices.m index da88108..fde81e9 100644 --- a/external/fieldtrip/private/prepare_freq_matrices.m +++ b/external/fieldtrip/private/prepare_freq_matrices.m @@ -11,6 +11,9 @@ % Copyright (C) 2004-2006, Robert Oostenveld % % $Log: prepare_freq_matrices.m,v $ +% Revision 1.25 2009/08/16 12:43:22 jansch +% added default empty cfg.refchan +% % Revision 1.24 2009/02/05 10:22:07 roboos % better support for single-trial data, thanks to Vladimir % @@ -98,6 +101,7 @@ % set the defaults if ~isfield(cfg, 'dicsfix'), cfg.dicsfix = 'yes'; end if ~isfield(cfg, 'quickflag'), cfg.quickflag = 0; end +if ~isfield(cfg, 'refchan'), cfg.refchan = []; end quickflag = cfg.quickflag==1; diff --git a/external/fieldtrip/private/prepare_layout.m b/external/fieldtrip/private/prepare_layout.m index a469fa3..bac6e7f 100644 --- a/external/fieldtrip/private/prepare_layout.m +++ b/external/fieldtrip/private/prepare_layout.m @@ -24,6 +24,7 @@ % cfg.output filename to which the layout will be written (default = []) % cfg.montage 'no' or a montage structure (default = 'no') % cfg.image filename, use an image to construct a layout (e.g. usefull for ECoG grids) +% cfg.bw if an image is used and bw = 1 transforms the image in black and white (default = 0, do not transform) % % Alternatively the layout can be constructed from either % data.elec structure with electrode positions @@ -46,6 +47,31 @@ % Copyright (C) 2007-2009, Robert Oostenveld % % $Log: prepare_layout.m,v $ +% Revision 1.40 2009/08/05 08:22:09 roboos +% better detection of empty/absent input data +% +% Revision 1.39 2009/08/05 06:32:41 roboos +% fixed layout generation for ordered and vertical when no data was given as input, labels fully depend on cfg.channel, not on data.label +% +% Revision 1.38 2009/08/04 13:57:00 roboos +% make tight vertical and orderer layout in case cfg.channel is specified +% allow skipping the COMNT and SCALE positions through the cfg +% +% Revision 1.37 2009/06/30 07:08:55 roboos +% removed debug keyboard statement +% +% Revision 1.36 2009/06/17 14:03:41 roboos +% consistent handling of ginput in case figure is closed +% +% Revision 1.35 2009/06/05 15:30:05 crimic +% updated help +% +% Revision 1.34 2009/06/05 15:28:03 crimic +% updated cfg +% +% Revision 1.33 2009/06/05 15:26:32 crimic +% minor change +% % Revision 1.32 2009/05/18 15:59:44 roboos % optinal plotting of RGB as greyscale image % @@ -186,14 +212,18 @@ if ~isfield(cfg, 'feedback'), cfg.feedback = 'no'; end if ~isfield(cfg, 'montage'), cfg.montage = 'no'; end if ~isfield(cfg, 'image'), cfg.image = []; end +if ~isfield(cfg, 'bw'), cfg.bw = 0; end +if ~isfield(cfg, 'channel'), cfg.channel = 'all'; end +if ~isfield(cfg, 'skipscale'), cfg.skipscale = 'no'; end +if ~isfield(cfg, 'skipcomnt'), cfg.skipcomnt = 'no'; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % try to generate the layout structure %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -skipscale = false; % in general a scale is desired -skipcomnt = false; % in general a comment desired +skipscale = strcmp(cfg.skipscale, 'yes'); % in general a scale is desired +skipcomnt = strcmp(cfg.skipcomnt, 'yes'); % in general a comment desired if isa(cfg.layout, 'config') % convert the nested config-object back into a normal structure @@ -205,7 +235,7 @@ % a lay structure) if isstruct(cfg.layout) && isfield(cfg.layout, 'pos') && isfield(cfg.layout, 'label') && isfield(cfg.layout, 'width') && isfield(cfg.layout, 'height') lay = cfg.layout; - + elseif isstruct(cfg.layout) && isfield(cfg.layout, 'pos') && isfield(cfg.layout, 'label') && (~isfield(cfg.layout, 'width') || ~isfield(cfg.layout, 'height')) lay = cfg.layout; % add width and height for multiplotting @@ -217,10 +247,18 @@ mindist = min(d(:)); lay.width = ones(nchans,1) * mindist * 0.8; lay.height = ones(nchans,1) * mindist * 0.6; - + elseif isequal(cfg.layout, 'butterfly') - nchan = length(data.label); - lay.label = data.label; + if nargin>1 && ~isempty(data) + % look at the data to determine the overlapping channels + cfg.channel = channelselection(cfg.channel, data.label); + chanindx = match_str(data.label, cfg.channel); + nchan = length(data.label(chanindx)); + lay.label = data.label(chanindx); + else + nchan = length(cfg.channel); + lay.label = cfg.channel; + end lay.pos = zeros(nchan,2); % centered at (0,0) lay.width = ones(nchan,1) * 1.0; lay.height = ones(nchan,1) * 1.0; @@ -228,10 +266,18 @@ lay.outline = {}; skipscale = true; % a scale is not desired skipcomnt = true; % a comment is initially not desired, or at least requires more thought - + elseif isequal(cfg.layout, 'vertical') - nchan = length(data.label); - lay.label = data.label; + if nargin>1 && ~isempty(data) + % look at the data to determine the overlapping channels + cfg.channel = channelselection(cfg.channel, data.label); + chanindx = match_str(data.label, cfg.channel); + nchan = length(data.label(chanindx)); + lay.label = data.label(chanindx); + else + nchan = length(cfg.channel); + lay.label = cfg.channel; + end for i=1:(nchan+2) x = 0.5; y = 1-i/(nchan+1+2); @@ -246,9 +292,18 @@ end lay.mask = {}; lay.outline = {}; - + elseif isequal(cfg.layout, 'ordered') - nchan = length(data.label); + if nargin>1 && ~isempty(data) + % look at the data to determine the overlapping channels + cfg.channel = channelselection(cfg.channel, data.label); + chanindx = match_str(data.label, cfg.channel); + nchan = length(data.label(chanindx)); + lay.label = data.label(chanindx); + else + nchan = length(cfg.channel); + lay.label = cfg.channel; + end ncol = ceil(sqrt(nchan))+1; nrow = ceil(sqrt(nchan))+1; k = 0; @@ -264,68 +319,66 @@ end end end - lay.label = data.label; - + lay.label{end+1} = 'SCALE'; lay.width(end+1) = 0.8 * 1/ncol; lay.height(end+1) = 0.8 * 1/nrow; x = (ncol-2)/ncol; y = 0/nrow; lay.pos(end+1,:) = [x y]; - + lay.label{end+1} = 'COMNT'; lay.width(end+1) = 0.8 * 1/ncol; lay.height(end+1) = 0.8 * 1/nrow; x = (ncol-1)/ncol; y = 0/nrow; - lay.pos(end+1,:) = [x y]; - - + lay.pos(end+1,:) = [x y]; + % try to generate layout from other configuration options elseif ischar(cfg.layout) && filetype(cfg.layout, 'matlab') fprintf('reading layout from file %s\n', cfg.layout); load(cfg.layout, 'lay'); - + elseif ischar(cfg.layout) && filetype(cfg.layout, 'layout') fprintf('reading layout from file %s\n', cfg.layout); lay = readlay(cfg.layout); - + elseif ischar(cfg.layout) && ~filetype(cfg.layout, 'layout') % assume that cfg.layout is an electrode file fprintf('creating layout from electrode file %s\n', cfg.layout); lay = sens2lay(read_sens(cfg.layout), cfg.rotate, cfg.projection, cfg.style); - + elseif ischar(cfg.elecfile) fprintf('creating layout from electrode file %s\n', cfg.elecfile); lay = sens2lay(read_sens(cfg.elecfile), cfg.rotate, cfg.projection, cfg.style); - + elseif ~isempty(cfg.elec) && isstruct(cfg.elec) fprintf('creating layout from cfg.elec\n'); lay = sens2lay(cfg.elec, cfg.rotate, cfg.projection, cfg.style); - + elseif isfield(data, 'elec') && isstruct(data.elec) fprintf('creating layout from data.elec\n'); lay = sens2lay(data.elec, cfg.rotate, cfg.projection, cfg.style); - + elseif ischar(cfg.gradfile) fprintf('creating layout from gradiometer file %s\n', cfg.gradfile); lay = sens2lay(read_sens(cfg.gradfile), cfg.rotate, cfg.projection, cfg.style); - + elseif ~isempty(cfg.grad) && isstruct(cfg.grad) fprintf('creating layout from cfg.grad\n'); lay = sens2lay(cfg.grad, cfg.rotate, cfg.projection, cfg.style); - + elseif isfield(data, 'grad') && isstruct(data.grad) fprintf('creating layout from data.grad\n'); lay = sens2lay(data.grad, cfg.rotate, cfg.projection, cfg.style); - + elseif ~isempty(cfg.image) && isempty(cfg.layout) fprintf('reading background image from %s\n', cfg.image); img = imread(cfg.image); img = flipdim(img, 1); % in combination with "axis xy" - + figure - bw = 1; + bw = cfg.bw; if bw % convert to greyscale image @@ -341,7 +394,7 @@ axis equal axis off axis xy - + % get the electrode positions pos = zeros(0,2); electrodehelp = [ ... @@ -355,13 +408,20 @@ while again fprintf(electrodehelp) disp(round(pos)); % values are integers/pixels - [x, y, k] = ginput(1) + try + [x, y, k] = ginput(1); + catch + % this happens if the figure is closed + return; + end + switch k case 1 pos = cat(1, pos, [x y]); % add it to the figure plot(x, y, 'b.'); plot(x, y, 'yo'); + case 8 if size(pos,1)>0 % remove the last point @@ -375,13 +435,15 @@ plot(pos(:,1), pos(:,2), 'b.'); plot(pos(:,1), pos(:,2), 'yo'); end + case 'q' again = 0; + otherwise warning('invalid button (%d)', k); end end - + % get the mask outline polygon = {}; thispolygon = 1; @@ -401,10 +463,15 @@ for i=1:length(polygon) fprintf('polygon %d has %d points\n', i, size(polygon{i},1)); end - - [x, y, k] = ginput(1); + + try + [x, y, k] = ginput(1); + catch + % this happens if the figure is closed + return; + end + switch k - case 1 polygon{thispolygon} = cat(1, polygon{thispolygon}, [x y]); % add the last line segment to the figure @@ -413,7 +480,7 @@ y = polygon{i}([end-1 end],2); end plot(x, y, 'g.-'); - + case 8 % backspace if size(polygon{thispolygon},1)>0 % remove the last point @@ -438,7 +505,7 @@ plot(x, y, 'g.-'); end end - + case 'c' if size(polygon{thispolygon},1)>0 % close the polygon @@ -451,7 +518,7 @@ thispolygon = thispolygon + 1; polygon{thispolygon} = zeros(0,2); end - + case 'q' if size(polygon{thispolygon},1)>0 % close the polygon @@ -462,15 +529,15 @@ plot(x, y, 'g.-'); end again = 0; - + otherwise warning('invalid button (%d)', k); end end % remember this set of polygons as the mask mask = polygon; - - + + % get the outline, e.g. head shape and sulci polygon = {}; thispolygon = 1; @@ -491,10 +558,15 @@ for i=1:length(polygon) fprintf('polygon %d has %d points\n', i, size(polygon{i},1)); end - - [x, y, k] = ginput(1); + + try + [x, y, k] = ginput(1); + catch + % this happens if the figure is closed + return; + end + switch k - case 1 polygon{thispolygon} = cat(1, polygon{thispolygon}, [x y]); % add the last line segment to the figure @@ -503,7 +575,7 @@ y = polygon{i}([end-1 end],2); end plot(x, y, 'm.-'); - + case 8 % backspace if size(polygon{thispolygon},1)>0 % remove the last point @@ -528,13 +600,12 @@ plot(x, y, 'm.-'); end end - + case 'c' if size(polygon{thispolygon},1)>0 x = polygon{thispolygon}(1,1); y = polygon{thispolygon}(1,2); polygon{thispolygon} = cat(1, polygon{thispolygon}, [x y]); - keyboard % add the last line segment to the figure x = polygon{i}([end-1 end],1); y = polygon{i}([end-1 end],2); @@ -543,24 +614,24 @@ thispolygon = thispolygon + 1; polygon{thispolygon} = zeros(0,2); end - + case 'n' if size(polygon{thispolygon},1)>0 % switch to the next polygon thispolygon = thispolygon + 1; polygon{thispolygon} = zeros(0,2); end - + case 'q' again = 0; - + otherwise warning('invalid button (%d)', k); end end % remember this set of polygons as the outline outline = polygon; - + % convert electrode positions into a layout structure lay.pos = pos; nchans = size(pos,1); @@ -578,7 +649,7 @@ % add mask and outline polygons lay.mask = mask; lay.outline = outline; - + else fprintf('reverting to 151 channel CTF default\n'); lay = readlay('CTF151.lay'); @@ -631,7 +702,7 @@ if ~strcmp(cfg.montage, 'no') Norg = length(cfg.montage.labelorg); Nnew = length(cfg.montage.labelnew); - + for i=1:Nnew cfg.montage.tra(i,:) = abs(cfg.montage.tra(i,:)); cfg.montage.tra(i,:) = cfg.montage.tra(i,:) ./ sum(cfg.montage.tra(i,:)); @@ -663,6 +734,13 @@ Y = max(lay.pos(:,2)); Y = min(lay.pos(:,2)); lay.pos(end+1,:) = [X Y]; +elseif any(strcmp('COMNT', lay.label)) && skipcomnt + % remove the scale entry + sel = find(strcmp('COMNT', lay.label)); + lay.label(sel) = []; + lay.pos(sel,:) = []; + lay.width(sel) = []; + lay.height(sel) = []; end if ~any(strcmp('SCALE', lay.label)) && strcmpi(cfg.style, '2d') && ~skipscale @@ -674,6 +752,13 @@ Y = max(lay.pos(:,2)); Y = min(lay.pos(:,2)); lay.pos(end+1,:) = [X Y]; +elseif any(strcmp('SCALE', lay.label)) && skipscale + % remove the scale entry + sel = find(strcmp('SCALE', lay.label)); + lay.label(sel) = []; + lay.pos(sel,:) = []; + lay.width(sel) = []; + lay.height(sel) = []; end % to plot the layout for debugging, you can use this code snippet @@ -737,7 +822,7 @@ rz = 90; case {'neuromag122', 'neuromag306'} rz = 0; - case 'electrode' + case 'electrode' rz = 90; otherwise rz = 0; @@ -749,19 +834,19 @@ [pnt, label] = channelposition(sens); if strcmpi(style, '3d') - lay.pos = pnt; - lay.label = label; + lay.pos = pnt; + lay.label = label; else - prj = elproj(pnt, method); - d = dist(prj'); - d(find(eye(size(d)))) = inf; - mindist = min(d(:)); - X = prj(:,1); - Y = prj(:,2); - Width = ones(size(X)) * mindist * 0.8; - Height = ones(size(X)) * mindist * 0.6; - lay.pos = [X Y]; - lay.width = Width; - lay.height = Height; - lay.label = label; -end + prj = elproj(pnt, method); + d = dist(prj'); + d(find(eye(size(d)))) = inf; + mindist = min(d(:)); + X = prj(:,1); + Y = prj(:,2); + Width = ones(size(X)) * mindist * 0.8; + Height = ones(size(X)) * mindist * 0.6; + lay.pos = [X Y]; + lay.width = Width; + lay.height = Height; + lay.label = label; +end diff --git a/external/fieldtrip/private/prepare_localspheres.m b/external/fieldtrip/private/prepare_localspheres.m index ba20922..c64c9f9 100644 --- a/external/fieldtrip/private/prepare_localspheres.m +++ b/external/fieldtrip/private/prepare_localspheres.m @@ -1,12 +1,13 @@ -function [vol, cfg] = prepare_localspheres(cfg, mri); +function [vol, cfg] = prepare_localspheres(cfg, mri) % PREPARE_LOCALSPHERES creates a MEG volume conductor model with a sphere % for every sensor. You can also use it to create a single sphere % model that is fitted to the MRI or to the head shape points. % % Use as +% [vol, cfg] = prepare_localspheres(cfg, seg), or +% [vol, cfg] = prepare_localspheres(cfg, mri), or % [vol, cfg] = prepare_localspheres(cfg) -% [vol, cfg] = prepare_localspheres(cfg, seg) % % The input configuration should contain % cfg.grad = structure with gradiometer definition, or @@ -40,6 +41,12 @@ % Copyright (C) 2005-2006, Jan-Mathijs Schoffelen & Robert Oostenveld % % $Log: prepare_localspheres.m,v $ +% Revision 1.29 2009/07/29 06:40:41 roboos +% updated plotting functions +% +% Revision 1.28 2009/07/16 09:17:17 crimic +% link to prepare_mesh.m function +% % Revision 1.27 2009/05/29 10:47:19 roboos % only convert to struct in case headshape is specified % @@ -145,111 +152,13 @@ if ~isfield(cfg, 'singlesphere'), cfg.singlesphere = 'no'; end if ~isfield(cfg, 'headshape'), cfg.headshape = []; end -if isfield(cfg, 'headshape') && isa(cfg.headshape, 'config') - % convert the nested config-object back into a normal structure - cfg.headshape = struct(cfg.headshape); -end - -if nargin>1 && isempty(cfg.headshape) - basedonmri = 1; - basedonheadshape = 0; -elseif nargin==1 && ~isempty(cfg.headshape) - basedonmri = 0; - basedonheadshape = 1; +% construct the geometry of the headshape using a single boundary +if nargin==1 + headshape = prepare_mesh(cfg); else - error('inconsistent configuration, cfg.headshape should not be used in combination with an mri input') + headshape = prepare_mesh(cfg, mri); end -if basedonmri - % obtain the head shape from the segmented MRI - seg = zeros(mri.dim); - if isfield(mri, 'gray') - fprintf('including gray matter in segmentation for brain compartment\n') - seg = seg | (mri.gray>(cfg.threshold*max(mri.gray(:)))); - end - if isfield(mri, 'white') - fprintf('including white matter in segmentation for brain compartment\n') - seg = seg | (mri.white>(cfg.threshold*max(mri.white(:)))); - end - if isfield(mri, 'csf') - fprintf('including CSF in segmentation for brain compartment\n') - seg = seg | (mri.csf>(cfg.threshold*max(mri.csf(:)))); - end - if ~strcmp(cfg.smooth, 'no'), - % check whether the required SPM2 toolbox is available - hastoolbox('spm2', 1); - fprintf('smoothing the segmentation with a %d-pixel FWHM kernel\n',cfg.smooth); - seg = double(seg); - spm_smooth(seg, seg, cfg.smooth); - end - % threshold for the last time - seg = (seg>(cfg.threshold*max(seg(:)))); - % determine the center of gravity of the segmented brain - xgrid = 1:mri.dim(1); - ygrid = 1:mri.dim(2); - zgrid = 1:mri.dim(3); - [X, Y, Z] = ndgrid(xgrid, ygrid, zgrid); - ori(1) = mean(X(seg)); - ori(2) = mean(Y(seg)); - ori(3) = mean(Z(seg)); - pnt = triangulate_seg(seg, cfg.spheremesh, ori); - pnt(:,4) = 1; - pnt = (mri.transform * pnt')'; - % convert the MRI surface points into the same units as the source/gradiometer - scale = 1; - switch cfg.sourceunits - case 'mm' - scale = scale * 1000; - case 'cm' - scale = scale * 100; - case 'dm' - scale = scale * 10; - case 'm' - scale = scale * 1; - otherwise - error('unknown physical dimension in cfg.sourceunits'); - end - switch cfg.mriunits - case 'mm' - scale = scale / 1000; - case 'cm' - scale = scale / 100; - case 'dm' - scale = scale / 10; - case 'm' - scale = scale / 1; - otherwise - error('unknown physical dimension in cfg.mriunits'); - end - if scale~=1 - fprintf('converting MRI surface points from %s into %s\n', cfg.sourceunits, cfg.mriunits); - headshape.pnt = pnt(:,1:3) * scale; - else - headshape.pnt = pnt(:,1:3); - end - fprintf('placed %d points on the brain surface\n', length(headshape.pnt)); - -elseif basedonheadshape - % get the surface describing the head shape - if isstruct(cfg.headshape) && isfield(cfg.headshape, 'pnt') - % use the headshape surface specified in the configuration - headshape = cfg.headshape; - elseif isnumeric(cfg.headshape) && size(cfg.headshape,2)==3 - % use the headshape points specified in the configuration - headshape.pnt = cfg.headshape; - elseif ischar(cfg.headshape) - % read the headshape from file - headshape = read_headshape(cfg.headshape); - else - error('cfg.headshape is not specified correctly') - end - headshape.pnt = unique(headshape.pnt, 'rows'); - % this function does not use the triangulation - if isfield(headshape, 'tri') - headshape = rmfield(headshape, 'tri'); - end -end % basedonmri or basedonheadshape - % read the gradiometer definition from file or copy it from the configuration if isfield(cfg, 'gradfile') grad = read_sens(cfg.gradfile); @@ -273,8 +182,8 @@ % plot all channels and headshape points if strcmp(cfg.feedback, 'yes') cla - plot3(grad.pnt(:,1), grad.pnt(:,2), grad.pnt(:,3), 'b.'); % all coils - plot3(headshape.pnt(:,1), headshape.pnt(:,2), headshape.pnt(:,3), 'g.'); + plot_sens(grad); + plot_mesh(headshape, 'vertexcolor', 'g', 'facecolor', 'none', 'edgecolor', 'none'); drawnow end @@ -282,6 +191,8 @@ [single_o, single_r] = fitsphere(headshape.pnt); fprintf('single sphere, %5d surface points, center = [%4.1f %4.1f %4.1f], radius = %4.1f\n', Nshape, single_o(1), single_o(2), single_o(3), single_r); +vol = []; + if strcmp(cfg.singlesphere, 'yes') % only return a single sphere vol.r = single_r; @@ -298,13 +209,13 @@ coilsel = find(grad.tra(chan,:)~=0); allpnt = grad.pnt(coilsel, :); % position of all coils belonging to this channel allori = grad.ori(coilsel, :); % orientation of all coils belonging to this channel - + if strcmp(cfg.feedback, 'yes') cla plot3(grad.pnt(:,1), grad.pnt(:,2), grad.pnt(:,3), 'b.'); % all coils plot3(allpnt(:,1), allpnt(:,2), allpnt(:,3), 'r*'); % this channel in red end - + % determine the average position and orientation of this channel thispnt = mean(allpnt,1); [u, s, v] = svd(allori); @@ -313,13 +224,13 @@ % the orientation should be outwards pointing thisori = -thisori; end - + % compute the distance from every coil along this channels orientation - dist = []; + dist = zeros(size(coilsel)); for i=1:length(coilsel) dist(i) = dot((allpnt(i,:)-thispnt), thisori); end - + [m, i] = min(dist); % check whether the minimum difference is larger than a typical distance if abs(m)>(cfg.baseline/4) @@ -327,15 +238,15 @@ % except when the center of the channel is approximately just as good (planar gradiometer) thispnt = allpnt(i,:); end - + % find the headshape points that are close to this channel dist = sqrt(sum((headshape.pnt-repmat(thispnt,Nshape,1)).^2, 2)); shapesel = find(dist10 [o, r] = fitsphere(headshape.pnt(shapesel,:)); @@ -345,21 +256,21 @@ o = single_o; r = single_r; end - + if r > cfg.maxradius fprintf('channel = %s, not enough surface points, using all points\n', grad.label{chan}); o = single_o; r = single_r; end - + % add this sphere to the volume conductor vol.o(chan,:) = o; vol.r(chan) = r; vol.label{chan} = grad.label{chan}; -end +end % for all channels vol.type = 'multisphere'; % get the output cfg -cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); +cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); diff --git a/external/fieldtrip/private/prepare_mask.m b/external/fieldtrip/private/prepare_mask.m new file mode 100755 index 0000000..b414cb9 --- /dev/null +++ b/external/fieldtrip/private/prepare_mask.m @@ -0,0 +1,50 @@ +function [mask] = prepare_mask(layout, varargin) +% PREPARE_MASK calculate anatomical mask only once, based only on layout +% Use as: +% [mask] = prepare_mask(layout, 'key', 'val'); +% with optional parameter: +% 'gridscale' scale of the interpolated grid (default: 67) +% +% See also COMPONENTBROWSER, DATABROWSER + +% Copyright (C) 2009 +% +% $Log: prepare_mask.m,v $ +% Revision 1.1 2009/07/15 08:40:54 giopia +% from topoplot, it relies on inside_contour +% + +% check the input +if ~isfield(layout, 'mask') + warning('prepare_mask:nomask', 'Mask is not present in layout. Mask not created'); + mask = []; + return +end + +[gridscale] = keyval('gridscale', varargin); +if isempty(gridscale); gridscale = 67; end + +% find limits for interpolation: +xmin = +inf; +xmax = -inf; +ymin = +inf; +ymax = -inf; + +for i=1:length(layout.mask) + xmin = min([xmin; layout.mask{i}(:,1)]); + xmax = max([xmax; layout.mask{i}(:,1)]); + ymin = min([ymin; layout.mask{i}(:,2)]); + ymax = max([ymax; layout.mask{i}(:,2)]); +end + +xi = linspace(xmin, xmax, gridscale); % x-axis for interpolation (row vector) +yi = linspace(ymin, ymax, gridscale); % y-axis for interpolation (row vector) +Xi = ones(gridscale,1)*xi; +Yi = (ones(gridscale,1)*yi)'; + +% apply anatomical mask to the data, i.e. that determines that the interpolated data outside the circle is not displayed +mask = false(gridscale); +for i=1:length(layout.mask) + layout.mask{i}(end+1,:) = layout.mask{i}(1,:); % force them to be closed + mask(inside_contour([Xi(:) Yi(:)], layout.mask{i})) = true; +end diff --git a/external/fieldtrip/private/prepare_mesh.m b/external/fieldtrip/private/prepare_mesh.m new file mode 100644 index 0000000..02c96cb --- /dev/null +++ b/external/fieldtrip/private/prepare_mesh.m @@ -0,0 +1,121 @@ +function bnd = prepare_mesh(cfg, mri) + +% PREPARE_MESH creates a triangulated surface mesh for the volume +% conduction model. The mesh can either be selected manually from raw +% mri data or can be generated starting from a segmented volume +% information stored in the mri structure. The result is a bnd +% structure which contains the information about all segmented surfaces +% related to mri and are expressed in world coordinates. +% +% Use as +% bnd = prepare_mesh(cfg, mri) +% +% Configuration options: +% cfg.method = 'segmentation' or 'manual' +% cfg.tissue = list with segmentation values corresponding with each compartment +% cfg.downsample = integer (1,2, ...) defines the level of refinement of the mri data +% cfg.headshape = a filename containing headshape, a Nx3 matrix with surface +% points, or a structure with a single or multiple boundaries +% +% Example use: +% mri = read_mri('Subject01.mri'); +% cfg = []; +% cfg.method = 'manual'; +% cfg.downsample = 2; +% bnd = prepare_mesh(cfg, mri); + +% Copyrights (C) 2009, Cristiano Micheli & Robert Oostenveld +% +% $Log: prepare_mesh.m,v $ +% Revision 1.11 2009/07/29 06:43:16 roboos +% fixed basedonseg for headshape input (thanks to Vladimir) +% +% Revision 1.10 2009/07/16 09:00:51 crimic +% added choice of multiple mesh methods and fixed a small typo +% +% Revision 1.9 2009/06/17 13:38:41 roboos +% cleaned up handling of method=manual +% +% Revision 1.8 2009/06/15 14:01:08 roboos +% minor updates in documentation and default cfg +% +% Revision 1.7 2009/06/03 12:07:11 crimic +% changed help +% +% Revision 1.6 2009/06/03 12:05:06 crimic +% added cfg.numcompartments option as input for automatic segmentation +% +% Revision 1.5 2009/06/02 10:18:39 crimic +% minor changes +% +% Revision 1.4 2009/05/14 19:23:33 roboos +% small cleanup, nothing functionally changed +% +% Revision 1.3 2009/05/06 16:09:17 roboos +% renamed gui_mesh into prepare_mesh_manual and moved to private +% some cleanup of the code +% +% Revision 1.2 2009/05/06 08:46:29 crimic +% First implementation +% + +cfg = checkconfig(cfg, 'forbidden', 'numcompartments'); + +% set the defaults +if ~isfield(cfg, 'downsample'), cfg.downsample = 1; end +if ~isfield(cfg, 'tissue'), cfg.tissue = []; end +if ~isfield(cfg, 'numvertices'), cfg.numvertices = []; end + +if isfield(cfg, 'headshape') && isa(cfg.headshape, 'config') + % convert the nested cmethodonfig-object back into a normal structure + cfg.headshape = struct(cfg.headshape); +end + +% there are three types of input possible +if nargin>1 && (~isfield(cfg,'headshape') || isempty(cfg.headshape)) + basedonseg = isfield(mri, 'transform') && any(isfield(mri, {'seg', 'csf', 'white', 'gray'})); + basedonmri = isfield(mri, 'transform') && ~basedonseg; + basedonvol = isfield(mri, 'bnd'); + basedonheadshape = 0; +elseif nargin==1 && isfield(cfg,'headshape') && ~isempty(cfg.headshape) + basedonseg = 0; + basedonmri = 0; + basedonvol = 0; + basedonheadshape = 1; +else + error('inconsistent configuration, cfg.headshape should not be used in combination with an mri input') +end + +if basedonseg || basedonmri + % optionally downsample the anatomical MRI and/or the tissue segmentation + tmpcfg = []; + tmpcfg.downsample = cfg.downsample; + mri = volumedownsample(tmpcfg, mri); +end + +if basedonseg + fprintf('using the segmentation approach\n'); + bnd = prepare_mesh_segmentation(cfg, mri); + +elseif basedonmri + fprintf('using the manual approach\n'); + bnd = prepare_mesh_manual(cfg, mri); + +elseif basedonheadshape + fprintf('using the head shape to construct a triangulated mesh\n'); + bnd = prepare_mesh_headshape(cfg); + +elseif basedonvol + fprintf('using the mesh specified in the input volume conductor\n'); + bnd = mri.bnd; + +else + error('unsupported cfg.method and/or input') +end + +% ensure that the vertices and triangles are double precision, otherwise the bemcp mex files will crash +for i=1:length(bnd) + bnd(i).pnt = double(bnd(i).pnt); + bnd(i).tri = double(bnd(i).tri); +end + diff --git a/external/fieldtrip/private/prepare_mesh_headshape.m b/external/fieldtrip/private/prepare_mesh_headshape.m new file mode 100644 index 0000000..157f361 --- /dev/null +++ b/external/fieldtrip/private/prepare_mesh_headshape.m @@ -0,0 +1,59 @@ +function bnd = prepare_mesh_headshape(cfg) + +% PREPARE_MESH_HEADSHAPE +% +% See also PREPARE_MESH_MANUAL, PREPARE_MESH_SEGMENTATION + +% Copyrights (C) 2009, Robert Oostenveld +% +% $Log: prepare_mesh_headshape.m,v $ +% Revision 1.2 2009/09/09 14:34:55 roboos +% fixed bug in case the input consisted of multiple boundaries +% +% Revision 1.1 2009/07/13 14:45:06 crimic +% copy code of existin funtions into stand-alone functions for inclusion in the prepare_mesh helper function +% + +% get the surface describing the head shape +if isstruct(cfg.headshape) && isfield(cfg.headshape, 'pnt') + % use the headshape surface specified in the configuration + headshape = cfg.headshape; +elseif isnumeric(cfg.headshape) && size(cfg.headshape,2)==3 + % use the headshape points specified in the configuration + headshape.pnt = cfg.headshape; +elseif ischar(cfg.headshape) + % read the headshape from file + headshape = read_headshape(cfg.headshape); +else + error('cfg.headshape is not specified correctly') +end + +% usually a headshape only describes a single surface boundaries, but there are cases +% that multiple surfaces are included, e.g. skin, skull, brain +nbnd = numel(headshape); + +if ~isfield(headshape, 'tri') + % generate a closed triangulation from the surface points + for i=1:nbnd + headshape(i).pnt = unique(headshape(i).pnt, 'rows'); + headshape(i).tri = projecttri(headshape(i).pnt); + end +end + +if ~isempty(cfg.numvertices) && ~strcmp(cfg.numvertices, 'same') + for i=1:nbnd + [tri1, pnt1] = reducepatch(headshape(i).tri, headshape(i).pnt, 3*cfg.numvertices); + % remove double vertices + pnt1 = unique(pnt1, 'rows'); + % reconstruct the triangulation + tri1 = projecttri(pnt1); + % replace the probably unevenly distributed triangulation with a regular one + % and retriangulate it to the desired accuracy + [pnt2, tri2] = msphere(cfg.numvertices); % this is a regular triangulation + [headshape(i).pnt, headshape(i).tri] = retriangulate(pnt1, tri1, pnt2, tri2, 2); + end +end + +% the output should only describe one or multiple boundaries and should not +% include any other fields +bnd = rmfield(headshape, setdiff(fieldnames(headshape), {'pnt', 'tri'})); diff --git a/external/fieldtrip/private/prepare_mesh_manual.m b/external/fieldtrip/private/prepare_mesh_manual.m new file mode 100644 index 0000000..8a0544d --- /dev/null +++ b/external/fieldtrip/private/prepare_mesh_manual.m @@ -0,0 +1,1073 @@ +function bnd = prepare_mesh_manual(cfg, mri) + +% PREPARE_MESH_MANUAL is called by PREPARE_MESH and opens a GUI to manually +% select points/polygons in an mri dataset. +% +% It allows: +% Visualization of 3d data in 3 different projections +% Adjustment of brightness for every slice +% Storage of the data points in an external .mat file +% Retrieval of previously saved data points +% Slice fast scrolling with keyboard arrows +% Polygons or points selection/deselection +% +% See also PREPARE_MESH_SEGMENTATION, PREPARE_MESH_HEADSHAPE + +% Copyrights (C) 2009, Cristiano Micheli & Robert Oostenveld +% +% $Log: prepare_mesh_manual.m,v $ +% Revision 1.10 2009/08/31 11:13:45 crimic +% minibug fix +% +% Revision 1.9 2009/08/27 16:12:13 crimic +% minibug fix +% +% Revision 1.8 2009/07/13 14:43:05 crimic +% inserted spherical harmonics sub-functions +% +% Revision 1.7 2009/06/30 11:45:38 roboos +% renamed select_point2d function call +% +% Revision 1.6 2009/06/26 14:33:28 crimic +% added mesh smoothing option and subfunctions +% +% Revision 1.5 2009/06/26 13:06:21 crimic +% point delete function implemented +% +% Revision 1.4 2009/06/17 13:37:11 roboos +% used autoindentation to clean up whitespace +% +% Revision 1.3 2009/06/03 11:29:59 crimic +% small fixes +% +% Revision 1.2 2009/06/03 10:36:29 crimic +% changes of layout and small fixes +% +% Revision 1.1 2009/05/06 16:09:17 roboos +% renamed gui_mesh into prepare_mesh_manual and moved to private +% some cleanup of the code +% +% Revision 1.1 2009/05/06 13:55:37 crimic +% First implementation +% + +% FIXME: control slice's cmap referred to abs values +% FIXME: clean structure slicedata +% FIXME: check function assign3dpoints + +global obj + +bnd.pnt = []; +bnd.tri = []; + +hasheadshape = isfield(cfg, 'headshape'); +hasbnd = isfield(cfg, 'bnd'); % FIXME why is this in cfg? +hasmri = nargin>1; + +% check the consistency of the input arguments +if hasheadshape && hasbnd + error('you should not specify cfg.headshape and cfg.bnd simultaneously'); +end + +% check the consistency of the input arguments +if ~hasmri + % FIXME give a warning or so? + mri.anatomy = []; + mri.transform = eye(4); +else + % ensure that it is double precision + mri.anatomy = double(mri.anatomy); +end + +if hasheadshape + if ~isempty(cfg.headshape) + % get the surface describing the head shape + if isstruct(cfg.headshape) && isfield(cfg.headshape, 'pnt') + % use the headshape surface specified in the configuration + headshape = cfg.headshape; + elseif isnumeric(cfg.headshape) && size(cfg.headshape,2)==3 + % use the headshape points specified in the configuration + headshape.pnt = cfg.headshape; + elseif ischar(cfg.headshape) + % read the headshape from file + headshape = read_headshape(cfg.headshape); + else + headshape = []; + end + if ~isfield(headshape, 'tri') + for i=1:length(headshape) + % generate a closed triangulation from the surface points + headshape(i).pnt = unique(headshape(i).pnt, 'rows'); + headshape(i).tri = projecttri(headshape(i).pnt); + end + end + % start with the headshape + bnd = headshape; + end +elseif hasbnd + if ~isempty(cfg.bnd) + % start with the prespecified boundaries + bnd = cfg.bnd; + end +else + % start with an empty boundary if not specified + bnd.pnt = []; + bnd.tri = []; +end + +% creating the GUI +fig = figure; + +% initialize some values +slicedata = []; points = bnd.pnt; +axs = floor(size(mri.anatomy,1)/2); + +% initialize properties +set(fig, 'KeyPressFcn',@keypress); +set(fig, 'CloseRequestFcn', @cb_close); +setappdata(fig,'data',mri.anatomy); +setappdata(fig,'prop',{1,axs,0,[]}); +setappdata(fig,'slicedata',slicedata); +setappdata(fig,'points',points); +setappdata(fig,'box',[]); + +% add GUI elements +cb_creategui(gca); +cb_redraw(gca); +waitfor(fig); + +% close sequence +global pnt +try + tmp = pnt; + clear global pnt + pnt = tmp; + clear tmp + [tri] = projecttri(pnt); + bnd.pnt = pnt; + bnd.tri = tri; +catch + bnd.pnt = []; + bnd.tri = []; +end + + +function cb_redraw(hObject, eventdata, handles); +fig = get(hObject, 'parent'); +prop = getappdata(fig,'prop'); +data = getappdata(fig,'data'); +slicedata = getappdata(fig,'slicedata'); +points = getappdata(fig,'points'); + +% draw image +try + cla + % i,j,k axes + if (prop{1}==1) %jk + imh=imagesc(squeeze(data(prop{2},:,:))); + xlabel('k'); + ylabel('j'); + colormap bone + elseif (prop{1}==2) %ik + imh=imagesc(squeeze(data(:,prop{2},:))); + xlabel('k'); + ylabel('i'); + colormap bone + elseif (prop{1}==3) %ij + imh=imagesc(squeeze(data(:,:,prop{2}))); + xlabel('j'); + ylabel('i'); + colormap bone + end + axis equal; axis tight + brighten(prop{3}); + title([ 'slice ' num2str(prop{2}) ]) +catch +end +if ~ishold,hold on,end +% draw points and lines +for zz = 1:length(slicedata) + if(slicedata(zz).proj==prop{1}) + if(slicedata(zz).slice==prop{2}) + polygon = slicedata(zz).polygon; + for kk=1:length(polygon) + if ~isempty(polygon{kk}) + [xs,ys]=deal(polygon{kk}(:,1),polygon{kk}(:,2)); + plot(xs, ys, 'g.-'); + end + end + end + end +end % end for + +% draw other slices points +points = getappdata(fig,'points'); +pnts = round(points); +if ~isempty(pnts) + % exclude polygons inside the same slice + indx = find(points(:,prop{1})==prop{2}); + tmp = ones(1,size(points,1)); + tmp(indx) = 0; + pnts = points(find(tmp),:); + % calculate indexes of other proj falling in current slice + indx2 = find(round(pnts(:,prop{1}))==prop{2}); + rest = setdiff([1 2 3],prop{1}); + % plot the points + for jj=1:length(indx2) + [x,y] = deal(pnts(indx2(jj),rest(1)),pnts(indx2(jj),rest(2))); + plot(y,x,'g*') + end +end + +% add blue cross markers in case of box selection +box = getappdata(fig,'box'); +point2mark = getappdata(fig,'point2mark'); + +if ~isempty(point2mark) + plot(point2mark.x,point2mark.y,'marker','+') +end + +if ~isempty(box) + for kk=1:size(box,1) + proj = box(kk,1); + slice = box(kk,2); + rowmin = box(kk,3); + rowmax = box(kk,4); + colmin = box(kk,5); + colmax = box(kk,6); + aaa = get(findobj(fig, 'color', 'g')); + for ii=1:length(aaa) + if ispolygon(aaa(ii)) + L = length(aaa(ii).YData); + for jj=1:L + cond = lt(aaa(ii).YData(jj),rowmax).*gt(aaa(ii).YData(jj),rowmin).* ... + lt(aaa(ii).XData(jj),colmax).*gt(aaa(ii).XData(jj),colmin); + if cond + plot(aaa(ii).XData(jj),aaa(ii).YData(jj),'marker','+') + end + end + elseif ispoint(aaa(ii)) + cond = lt(aaa(ii).YData,rowmax).*gt(aaa(ii).YData,rowmin).* ... + lt(aaa(ii).XData,colmax).*gt(aaa(ii).XData,colmin); + % the test after cond takes care the box doesnt propagate in 3D + if (cond && (proj == prop{1}) && (slice == prop{2})) + plot(aaa(ii).XData,aaa(ii).YData,'marker','+') + end + end + end + end +end + +if get(findobj(fig, 'tag', 'toggle axes'), 'value') + axis on +else + axis off +end + +function cb_creategui(hObject, eventdata, handles) + +fig = get(hObject, 'parent'); +% define the position of each GUI element +position = { + [1] % view radio + [1 1] % del ins + [1] % label slice + [1 1] % slice + [1] % brightness + [1 1] % brightness + [1] % axis visible + [1 1] % view ij + [1 1] % jk ik + [1] % label mesh + [1 1] % view open mesh + [1 1] % save exit buttons + }; + +% define the style of each GUI element +style = { + {'radiobutton'} + {'radiobutton' 'radiobutton'} + {'text' } + {'pushbutton' 'pushbutton'} + {'text'} + {'pushbutton' 'pushbutton'} + {'checkbox'} + {'text' 'radiobutton'} + {'radiobutton' 'radiobutton'} + {'text' } + {'pushbutton' 'pushbutton'} + {'pushbutton' 'pushbutton'} + }; + +% define the descriptive string of each GUI element +string = { + {'View'} + {'Ins' 'Del'} + {'slice'} + {'<' '>'} + {'brightness'} + {'+' '-'} + {'axes'} + {'plane' 'jk'} + {'ik' 'ij'} + {'mesh'} + {'smooth' 'view'} + {'Cancel' 'OK'} + }; + +% define the value of each GUI element + +prop = getappdata(fig,'prop'); +value = { + {1} + {0 0} + {[]} + {[] []} + {[]} + {[] []} + {0} + {[] 1} + {0 0} + {[]} + {1 1} + {1 1} + }; + +% define a tag for each GUI element +tag = { + {'view'} + {'ins' 'del' } + {'slice'} + {'min' 'max'} + {'brightness'} + {'plus' 'minus'} + {'toggle axes'} + {'plane' 'one'} + {'two' 'three'} + {'mesh'} + {'smoothm' 'viewm'} + {'cancel' 'OK'} + }; + +% define the callback function of each GUI element +callback = { + {@which_task1} + {@which_task2 @which_task3} + {[]} + {@cb_btn @cb_btn} + {[]} + {@cb_btn @cb_btn} + {@cb_redraw} + {[] @cb_btnp1} + {@cb_btnp2 @cb_btnp3} + {[]} + {@smooth_mesh @view_mesh} + {@cancel_mesh @cb_btn} + }; + +visible = { + {'on'} + {'on' 'on'} + {'on'} + {'on' 'on'} + {'on'} + {'on' 'on'} + {'on'} + {'on' 'on'} + {'on' 'on'} + {'on'} + {'on' 'on'} + {'on' 'on'} + }; + +layoutgui(fig, [0.77 0.10 0.20 0.85], position, style, string, value, tag, callback,visible); + +function h = layoutgui(fig, geometry, position, style, string, value, tag, callback,visible); +horipos = geometry(1); % lower left corner of the GUI part in the figure +vertpos = geometry(2); % lower left corner of the GUI part in the figure +width = geometry(3); % width of the GUI part in the figure +height = geometry(4); % height of the GUI part in the figure +horidist = 0.05; +vertdist = 0.05; +options = {'units', 'normalized', 'HorizontalAlignment', 'center'}; % 'VerticalAlignment', 'middle' +Nrow = size(position,1); +h = cell(Nrow,1); +for i=1:Nrow + if isempty(position{i}) + continue; + end + position{i} = position{i} ./ sum(position{i}); + Ncol = size(position{i},2); + ybeg = (Nrow-i )/Nrow + vertdist/2; + yend = (Nrow-i+1)/Nrow - vertdist/2; + for j=1:Ncol + xbeg = sum(position{i}(1:(j-1))) + horidist/2; + xend = sum(position{i}(1:(j ))) - horidist/2; + pos(1) = xbeg*width + horipos; + pos(2) = ybeg*height + vertpos; + pos(3) = (xend-xbeg)*width; + pos(4) = (yend-ybeg)*height; + h{i}{j} = uicontrol(fig, ... + options{:}, ... + 'position', pos, ... + 'style', style{i}{j}, ... + 'string', string{i}{j}, ... + 'tag', tag{i}{j}, ... + 'value', value{i}{j}, ... + 'callback', callback{i}{j}, ... + 'visible', visible{i}{j} ... + ); + end +end + +function cb_btn(hObject, eventdata, handles) +fig = get(gca, 'parent'); +prop = getappdata(fig,'prop'); +slice = prop{2}; +br = prop{3}; +datdim = size(getappdata(fig,'data')); +% p1 = [];p2 = [];p3 = []; +p1 = get(findobj('string','jk'),'value'); +p2 = get(findobj('string','ik'),'value'); +p3 = get(findobj('string','ij'),'value'); +set(findobj('string','-'),'Value',prop{3}); +set(findobj('string','+'),'Value',prop{3}); +beta = get(findobj('string','-'),'Value'); + +if (p1) %jk + setappdata(fig,'prop',{1,round(datdim(1)/2),br,prop{4}}); + cb_redraw(gca); +elseif (p2) %ik + setappdata(fig,'prop',{2,round(datdim(2)/2),br,prop{4}}); + cb_redraw(gca); +elseif (p3) %ij + setappdata(fig,'prop',{3,round(datdim(3)/2),br,prop{4}}); + cb_redraw(gca); +end +if strcmp(get(hObject,'string'),'-') + beta=beta-0.05; + set(findobj('string','-'),'Value',beta); + set(findobj('string','+'),'Value',beta); + setappdata(fig,'prop',{prop{1},prop{2},beta,prop{4}}); + cb_redraw(gca); +elseif strcmp(get(hObject,'string'),'+') + beta=beta+0.05; + set(findobj('string','+'),'Value',beta); + setappdata(fig,'prop',{prop{1},prop{2},beta,prop{4}}); + cb_redraw(gca); +end + +if strcmp(get(hObject,'string'),'<') + setappdata(fig,'prop',{prop{1},slice-1,0,prop{4}}); + cb_redraw(gca); +end +if strcmp(get(hObject,'string'),'>') + setappdata(fig,'prop',{prop{1},slice+1,0,prop{4}}); + cb_redraw(gca); +end +if strcmp(get(hObject,'string'),'OK') + close(fig) +end + +function keypress(h, eventdata, handles, varargin) +fig = get(gca, 'parent'); +prop = getappdata(fig,'prop'); +dat = guidata(gcbf); +key = get(gcbf, 'CurrentCharacter'); +slice = prop{2}; +if key + switch key + case 28 + setappdata(fig,'prop',{prop{1},slice-1,0,prop{4}}); + cb_redraw(gca); + case 29 + setappdata(fig,'prop',{prop{1},slice+1,0,prop{4}}); + cb_redraw(gca); + otherwise + end +end +uiresume(h) + +function build_polygon +fig = get(gca, 'parent'); +prop = getappdata(fig,'prop'); +data = getappdata(fig,'data'); +ss = size(data); +proj = prop{1}; +slice = prop{2}; +thispolygon =1; +polygon{thispolygon} = zeros(0,2); +maskhelp = [ ... + '------------------------------------------------------------------------\n' ... + 'specify polygons for masking the topographic interpolation\n' ... + 'press the right mouse button to add another point to the current polygon\n' ... + 'press backspace on the keyboard to remove the last point\n' ... + 'press "c" on the keyboard to close this polygon and start with another\n' ... + 'press "q" or ESC on the keyboard to continue\n' ... + ]; +again = 1; +if ~ishold,hold,end +fprintf(maskhelp); +fprintf('\n'); + +while again + for i=1:length(polygon) + fprintf('polygon %d has %d points\n', i, size(polygon{i},1)); + end + + [x, y, k] = ginput(1); + okflag = 0; + + % check points do not fall out of image boundaries + if get(findobj('string','Ins'),'value') + if (proj == 1 && y1 && y>1) + okflag = 1; + elseif (proj == 2 && y1 && y>1) + okflag = 1; + elseif (proj == 3 && y1 && y>1) + okflag = 1; + else + okflag = 0; + end + end + + if okflag + switch lower(k) + case 1 + polygon{thispolygon} = cat(1, polygon{thispolygon}, [x y]); + % add the last line segment to the figure + if size(polygon{thispolygon},1)>1 + x = polygon{i}([end-1 end],1); + y = polygon{i}([end-1 end],2); + end + plot(x, y, 'g.-'); + + case 8 % backspace + if size(polygon{thispolygon},1)>0 + % redraw existing polygons + cb_redraw(gca); + % remove the last point of current polygon + polygon{thispolygon} = polygon{thispolygon}(1:end-1,:); + for i=1:length(polygon) + x = polygon{i}(:,1); + y = polygon{i}(:,2); + if i~=thispolygon + % close the polygon in the figure + x(end) = x(1); + y(end) = y(1); + end + set(gca,'nextplot','new') + plot(x, y, 'g.-'); + end + end + + case 'c' + if size(polygon{thispolygon},1)>0 + % close the polygon + polygon{thispolygon}(end+1,:) = polygon{thispolygon}(1,:); + % close the polygon in the figure + x = polygon{i}([end-1 end],1); + y = polygon{i}([end-1 end],2); + plot(x, y, 'g.-'); + % switch to the next polygon + thispolygon = thispolygon + 1; + polygon{thispolygon} = zeros(0,2); + slicedata = getappdata(fig,'slicedata'); + m = length(slicedata); + slicedata(m+1).proj = prop{1}; + slicedata(m+1).slice = prop{2}; + slicedata(m+1).polygon = polygon; + setappdata(fig,'slicedata',slicedata); + end + + case {'q', 27} + if size(polygon{thispolygon},1)>0 + % close the polygon + polygon{thispolygon}(end+1,:) = polygon{thispolygon}(1,:); + % close the polygon in the figure + x = polygon{i}([end-1 end],1); + y = polygon{i}([end-1 end],2); + plot(x, y, 'g.-'); + end + again = 0; + %set(gcf,'WindowButtonDownFcn',''); + slicedata = getappdata(fig,'slicedata'); + m = length(slicedata); + if ~isempty(polygon{thispolygon}) + slicedata(m+1).proj = prop{1}; + slicedata(m+1).slice = prop{2}; + slicedata(m+1).polygon = polygon; + setappdata(fig,'slicedata',slicedata); + end + otherwise + warning('invalid button (%d)', k); + end + + end + assign_points3d +end + +function cb_btn_dwn(hObject, eventdata, handles) +build_polygon +uiresume + +function cb_btn_dwn2(hObject, eventdata, handles) +global obj +erase_points2d(obj) +uiresume + + +function erase_points2d (obj) +fig = get(gca, 'parent'); +prop = getappdata(fig,'prop'); +slicedata = getappdata(fig,'slicedata'); +pntsslice = []; + +% 2d slice selected box boundaries +if strcmp(get(obj,'string'),'box') + [x, y] = select_box; + rowmin = min(y); rowmax = max(y); + colmin = min(x); colmax = max(x); + box = getappdata(fig,'box'); + box = [box; prop{1} prop{2} rowmin rowmax colmin colmax]; + setappdata(fig,'box',box); +else + % converts lines to points + pos = slicedata2pnts(prop{1},prop{2}); + tmp = select_point(pos); + point2mark.x = tmp(1); point2mark.y = tmp(2); + setappdata(fig,'point2mark',point2mark); +end + +maskhelp = [ ... + '------------------------------------------------------------------------\n' ... + 'Delete points:\n' ... + 'press "c" on the keyboard to undo all selections\n' ... + 'press "d" or DEL on the keyboard to delete all selections\n' ... + ]; +fprintf(maskhelp); +fprintf('\n'); +again = 1; +if ~ishold,hold,end +cb_redraw(gca); + +% waits for a key press +while again + [junk1, junk2, k] = ginput(1); + + switch lower(k) + case 'c' + if strcmp(get(obj,'string'),'box') + % undoes all the selections, but only in the current slice + ind = []; + for ii=1:size(box,1) + if box(ii,1)==prop{1} && box(ii,2)==prop{2} + ind = [ind,ii]; + end + end + box(ind,:) = []; + setappdata(fig,'box',box); + cb_redraw(gca); + again = 0; + set(gcf,'WindowButtonDownFcn',''); + else + setappdata(fig,'point2mark',[]); + cb_redraw(gca); + again = 0; + set(gcf,'WindowButtonDownFcn',''); + end + case {'d', 127} + if strcmp(get(obj,'string'),'box') + update_slicedata + % deletes only the points selected in the current slice + ind = []; + for ii=1:size(box,1) + if box(ii,1)==prop{1} && box(ii,2)==prop{2} + ind = [ind,ii]; + end + end + box(ind,:) = []; + setappdata(fig,'box',box); + cb_redraw(gca); + again = 0; + set(gcf,'WindowButtonDownFcn',''); + else + update_slicedata + setappdata(fig,'point2mark',[]); + cb_redraw(gca); + again = 0; + set(gcf,'WindowButtonDownFcn',''); + end + otherwise + end +end +assign_points3d + +function assign_points3d +fig = get(gca, 'parent'); +slicedata = getappdata(fig,'slicedata'); + +points = []; +for zz = 1:length(slicedata) + slice = slicedata(zz).slice; + proj = slicedata(zz).proj; + polygon = slicedata(zz).polygon; + for kk=1:length(polygon) + if ~isempty(polygon{kk}) + [xs,ys]=deal(polygon{kk}(:,1),polygon{kk}(:,2)); + if (proj==1) %jk + tmp = [ slice*ones(length(xs),1),ys(:),xs(:) ]; + points = [points; unique(tmp,'rows')]; + elseif (proj==2) %ik + tmp = [ ys(:),slice*ones(length(xs),1),xs(:) ]; + points = [points; unique(tmp,'rows')]; + elseif (proj==3) %ij + tmp = [ ys(:),xs(:),slice*ones(length(xs),1) ]; + points = [points; unique(tmp,'rows')]; + end + end + end +end +setappdata(fig,'points',points); + +function update_slicedata +fig = get(gca, 'parent'); +prop = getappdata(fig,'prop'); +slicedata = getappdata(fig,'slicedata'); +box = getappdata(fig,'box'); +point2mark = getappdata(fig,'point2mark'); +% case of box selection +if ~isempty(box) && ~isempty(slicedata) + for zz = 1:length(slicedata) + slice = slicedata(zz).slice; + proj = slicedata(zz).proj; + polygon = slicedata(zz).polygon; + for uu=1:size(box,1) + if (box(uu,1)==proj) && (box(uu,2)==slice) + for kk=1:length(polygon) + if ~isempty(polygon{kk}) + [xs,ys] = deal(polygon{kk}(:,1),polygon{kk}(:,2)); + tmpind = lt(ys,ones(length(xs),1)*box(uu,4)).*gt(ys,ones(length(xs),1)*box(uu,3)).* ... + lt(xs,ones(length(xs),1)*box(uu,6)).*gt(xs,ones(length(xs),1)*box(uu,5)); + slicedata(zz).polygon{kk} = [ xs(find(~tmpind)),ys(find(~tmpind)) ]; + end + end + end + end + end + % case of point selection +else + if ~isempty(slicedata) + for zz = 1:length(slicedata) + slice = slicedata(zz).slice; + proj = slicedata(zz).proj; + polygon = slicedata(zz).polygon; + for kk=1:length(polygon) + if ~isempty(polygon{kk}) + [xs,ys] = deal(polygon{kk}(:,1),polygon{kk}(:,2)); + tmpind = eq(xs,point2mark.x).*eq(ys,point2mark.y); + slicedata(zz).polygon{kk} = [ xs(find(~tmpind)),ys(find(~tmpind)) ]; + end + end + end + end +end +setappdata(fig,'slicedata',slicedata) + +% FIXME: obsolete: replaced by headshape at the beginning +function smooth_mesh(hObject, eventdata, handles) +fig = get(gca,'parent'); +disp('not yet implemented') + +% FIXME: make it work for pre-loaded meshes +function view_mesh(hObject, eventdata, handles) +fig = get(gca, 'parent'); +assign_points3d +pnt = getappdata(fig,'points'); +pnt_ = pnt; +if ~isempty(pnt) + tri = projecttri(pnt); + bnd.pnt = pnt_; + bnd.tri = tri; + slicedata = getappdata(fig,'slicedata'); + figure,plot_mesh(bnd,'vertexcolor','k') +end + +function cancel_mesh(hObject, eventdata, handles) +fig = get(gca, 'parent'); +close(fig) + +function cb_close(hObject, eventdata, handles) +% get the points from the figure +fig = hObject; +global pnt +pnt = getappdata(fig, 'points'); +set(fig, 'CloseRequestFcn', @delete); +delete(fig); + +function cb_btnp1(hObject, eventdata, handles) +set(findobj('string','jk'),'value',1); +set(findobj('string','ik'),'value',0); +set(findobj('string','ij'),'value',0); +cb_btn(hObject); + +function cb_btnp2(hObject, eventdata, handles) +set(findobj('string','jk'),'value',0); +set(findobj('string','ik'),'value',1); +set(findobj('string','ij'),'value',0); +cb_btn(hObject); + +function cb_btnp3(hObject, eventdata, handles) +set(findobj('string','jk'),'value',0); +set(findobj('string','ik'),'value',0); +set(findobj('string','ij'),'value',1); +cb_btn(hObject); + +function which_task1(hObject, eventdata, handles) +set(gcf,'WindowButtonDownFcn',''); +set(findobj('string','View'),'value',1); +set(findobj('string','Ins'), 'value',0); +set(findobj('string','Del'), 'value',0); +set(gcf,'WindowButtonDownFcn',''); +change_panel + +function which_task2(hObject, eventdata, handles) +set(findobj('string','View'),'value',0); +set(findobj('string','Ins'), 'value',1); +set(findobj('string','Del'), 'value',0); +set(gcf,'WindowButtonDownFcn',@cb_btn_dwn); +change_panel + +function which_task3(hObject, eventdata, handles) +set(gcf,'WindowButtonDownFcn',''); +set(findobj('string','View'),'value',0); +set(findobj('string','Ins'), 'value',0); +set(findobj('string','Del'), 'value',1); +change_panel + +function change_panel +% affect panel visualization +w1 = get(findobj('string','View'),'value'); +w2 = get(findobj('string','Ins'), 'value'); +w3 = get(findobj('string','Del'), 'value'); + +if w1 + set(findobj('tag','slice'),'string','slice'); + set(findobj('tag','min'),'string','<'); + set(findobj('tag','max'),'string','>'); + set(findobj('tag','min'),'style','pushbutton'); + set(findobj('tag','max'),'style','pushbutton'); + set(findobj('tag','min'),'callback',@cb_btn); + set(findobj('tag','max'),'callback',@cb_btn); + set(findobj('tag','mesh'),'visible','on'); + set(findobj('tag','openm'),'visible','on'); + set(findobj('tag','viewm'),'visible','on'); + set(findobj('tag','brightness'),'visible','on'); + set(findobj('tag','plus'),'visible','on'); + set(findobj('tag','minus'),'visible','on'); + set(findobj('tag','toggle axes'),'visible','on'); + set(findobj('tag','plane'),'visible','on'); + set(findobj('tag','one'),'visible','on'); + set(findobj('tag','two'),'visible','on'); + set(findobj('tag','three'),'visible','on'); +elseif w2 + set(findobj('tag','slice'),'string','select points'); + set(findobj('tag','min'),'string','close'); + set(findobj('tag','max'),'string','next'); + set(findobj('tag','min'),'style','pushbutton'); + set(findobj('tag','max'),'style','pushbutton'); + set(findobj('tag','min'),'callback',@tins_close); + set(findobj('tag','max'),'callback',@tins_next); + set(findobj('tag','mesh'),'visible','off'); + set(findobj('tag','openm'),'visible','off'); + set(findobj('tag','viewm'),'visible','off'); + set(findobj('tag','brightness'),'visible','off'); + set(findobj('tag','plus'),'visible','off'); + set(findobj('tag','minus'),'visible','off'); + set(findobj('tag','toggle axes'),'visible','off'); + set(findobj('tag','plane'),'visible','off'); + set(findobj('tag','one'),'visible','off'); + set(findobj('tag','two'),'visible','off'); + set(findobj('tag','three'),'visible','off'); +elseif w3 + set(findobj('tag','slice'),'string','select points'); + set(findobj('tag','min'),'string','box'); + set(findobj('tag','max'),'string','point'); + set(findobj('tag','min'),'style','pushbutton'); + set(findobj('tag','max'),'style','pushbutton'); + set(findobj('tag','min'),'callback',@tdel_box); + set(findobj('tag','max'),'callback',@tdel_single); + set(findobj('tag','mesh'),'visible','off'); + set(findobj('tag','openm'),'visible','off'); + set(findobj('tag','viewm'),'visible','off'); + set(findobj('tag','brightness'),'visible','off'); + set(findobj('tag','plus'),'visible','off'); + set(findobj('tag','minus'),'visible','off'); + set(findobj('tag','toggle axes'),'visible','off'); + set(findobj('tag','plane'),'visible','off'); + set(findobj('tag','one'),'visible','off'); + set(findobj('tag','two'),'visible','off'); + set(findobj('tag','three'),'visible','off'); +end + +function tins_close(hObject, eventdata, handles) +set(gcf,'WindowButtonDownFcn',''); + +function tins_next(hObject, eventdata, handles) +set(gcf,'WindowButtonDownFcn',''); + + +function tdel_box(hObject, eventdata, handles) +global obj +obj = gco; +set(gcf,'WindowButtonDownFcn',@cb_btn_dwn2); + +function tdel_single(hObject, eventdata, handles) +global obj +obj = gco; +set(gcf,'WindowButtonDownFcn',@cb_btn_dwn2); + +% accessory functions: +function [pnts] = slicedata2pnts(proj,slice) +fig = get(gca, 'parent'); +slicedata = getappdata(fig,'slicedata'); +pnts = []; +for i=1:length(slicedata) + if slicedata(i).slice==slice && slicedata(i).proj == proj + for j=1:length(slicedata(i).polygon) + if ~isempty(slicedata(i).polygon{j}) + tmp = slicedata(i).polygon{j}; + xs = tmp(:,1); ys = tmp(:,2); + pnts = [pnts;[unique([xs,ys],'rows')]]; + end + end + end +end + +function h = ispolygon(x) +h = length(x.XData)>1; + +function h = ispoint(x) +h = length(x.XData)==1; + +function [T,P] = points2param(pnt) +x = pnt(:,1); y = pnt(:,2); z = pnt(:,3); +[phi,theta,R] = cart2sph(x,y,z); +theta = theta + pi/2; +phi = phi + pi; +T = theta(:); +P = phi(:); + +function [bnd2,a,Or] = spherical_harmonic_mesh(bnd, nl) + +% SPHERICAL_HARMONIC_MESH realizes the smoothed version of a mesh contained in the first +% argument bnd. The boundary argument (bnd) contains typically 2 fields +% called .pnt and .tri referring to vertices and triangulation of a mesh. +% The degree of smoothing is given by the order in the second input: nl +% +% Use as +% bnd2 = spherical_harmonic_mesh(bnd, nl); + +% nl = 12; % from van 't Ent paper + +bnd2 = []; + +% calculate midpoint +Or = mean(bnd.pnt); +% rescale all points +x = bnd.pnt(:,1) - Or(1); +y = bnd.pnt(:,2) - Or(2); +z = bnd.pnt(:,3) - Or(3); +X = [x(:), y(:), z(:)]; + +% convert points to parameters +[T,P] = points2param(X); + +% basis function +B = shlib_B(nl, T, P); +Y = B'*X; + +% solve the linear system +a = pinv(B'*B)*Y; + +% build the surface +Xs = zeros(size(X)); +for l = 0:nl-1 + for m = -l:l + if m<0 + Yml = shlib_Yml(l, abs(m), T, P); + Yml = (-1)^m*conj(Yml); + else + Yml = shlib_Yml(l, m, T, P); + end + indx = l^2 + l + m+1; + Xs = Xs + Yml*a(indx,:); + end + fprintf('%d of %d\n', l, nl); +end +% Just take the real part +Xs = real(Xs); +% reconstruct the matrices for plotting. +xs = reshape(Xs(:,1), size(x,1), size(x,2)); +ys = reshape(Xs(:,2), size(x,1), size(x,2)); +zs = reshape(Xs(:,3), size(x,1), size(x,2)); + +bnd2.pnt = [xs(:)+Or(1) ys(:)+Or(2) zs(:)+Or(3)]; +[bnd2.tri] = projecttri(bnd.pnt); + +function B = shlib_B(nl, theta, phi) +% function B = shlib_B(nl, theta, phi) +% +% Constructs the matrix of basis functions +% where b(i,l^2 + l + m) = Yml(theta, phi) +% +% See also: shlib_Yml.m, shlib_decomp.m, shlib_gen_shfnc.m +% +% Dr. A. I. Hanna (2006). +B = zeros(length(theta), nl^2+2*nl+1); +for l = 0:nl-1 + for m = -l:l + if m<0 + Yml = shlib_Yml(l, abs(m), theta, phi); + Yml = (-1)^m*conj(Yml); + else + Yml = shlib_Yml(l, m, theta, phi); + end + indx = l^2 + l + m+1; + B(:, indx) = Yml; + end +end +return; + +function Yml = shlib_Yml(l, m, theta, phi) +% function Yml = shlib_Yml(l, m, theta, phi) +% +% A matlab function that takes a given order and degree, and the matrix of +% theta and phi and constructs a spherical harmonic from these. The +% analogue in the 1D case would be to give a particular frequency. +% +% Inputs: +% m - order of the spherical harmonic +% l - degree of the spherical harmonic +% theta - matrix of polar coordinates \theta \in [0, \pi] +% phi - matrix of azimuthal cooridinates \phi \in [0, 2\pi) +% +% Example: +% +% [x, y] = meshgrid(-1:.1:1); +% z = x.^2 + y.^2; +% [phi,theta,R] = cart2sph(x,y,z); +% Yml = spharm_aih(2,2, theta(:), phi(:)); +% +% See also: shlib_B.m, shlib_decomp.m, shlib_gen_shfnc.m +% +% Dr. A. I. Hanna (2006) +Pml=legendre(l,cos(theta)); +if l~=0 + Pml=squeeze(Pml(m+1,:,:)); +end +Pml = Pml(:); +% Yml = sqrt(((2*l+1)/4).*(factorial(l-m)/factorial(l+m))).*Pml.*exp(sqrt(-1).*m.*phi); +% new: +Yml = sqrt(((2*l+1)/(4*pi)).*(factorial(l-m)/factorial(l+m))).*Pml.*exp(sqrt(-1).*m.*phi); +return; diff --git a/external/fieldtrip/private/prepare_mesh_segmentation.m b/external/fieldtrip/private/prepare_mesh_segmentation.m new file mode 100644 index 0000000..349d54a --- /dev/null +++ b/external/fieldtrip/private/prepare_mesh_segmentation.m @@ -0,0 +1,107 @@ +function bnd = prepare_mesh_segmentation(cfg, mri) + +% PREPARE_MESH_SEGMENTATION +% +% See also PREPARE_MESH_MANUAL,PREPARE_MESH_HEADSHAPE + +% Copyrights (C) 2009, Robert Oostenveld +% +% $Log: prepare_mesh_segmentation.m,v $ +% Revision 1.4 2009/08/11 12:47:20 jansch +% fixed bug in assignment of default cfg.threshold +% +% Revision 1.3 2009/07/17 10:10:56 crimic +% added initial checks and variables consinstency +% +% Revision 1.2 2009/07/16 15:30:55 crimic +% fixed tiny error +% +% Revision 1.1 2009/07/13 14:45:06 crimic +% copy code of existing functions into stand-alone functions for inclusion in the prepare_mesh helper function +% + +% some initial checks +cfg = checkconfig(cfg, 'forbidden', 'numcompartments'); +if ~isfield(mri, 'tissue') && isfield(mri, 'gray'), cfg.tissue = 1; end +if ~isfield(cfg, 'threshold'), cfg.threshold = 0; end + +fprintf('using the segmented MRI\n'); + +if ~isfield(mri, 'seg') && isequal(cfg.tissue, 1) + mri.seg = zeros(size(mri.gray )); + % construct the single image segmentation from the three probabilistic + % tissue segmentations for csf, white and gray matter + if isfield(mri, 'gray') + fprintf('including gray matter in segmentation for brain compartment\n') + mri.seg = mri.seg | (mri.gray>(cfg.threshold*max(mri.gray(:)))); + end + if isfield(mri, 'white') + fprintf('including white matter in segmentation for brain compartment\n') + mri.seg = mri.seg | (mri.white>(cfg.threshold*max(mri.white(:)))); + end + if isfield(mri, 'csf') + fprintf('including CSF in segmentation for brain compartment\n') + mri.seg = mri.seg | (mri.csf>(cfg.threshold*max(mri.csf(:)))); + end + if ~strcmp(cfg.smooth, 'no'), + % check whether the required SPM2 toolbox is available + hastoolbox('spm2', 1); + fprintf('smoothing the segmentation with a %d-pixel FWHM kernel\n',cfg.smooth); + mri.seg = double(mri.seg); + spm_smooth(mri.seg, mri.seg, cfg.smooth); + end + % threshold for the last time + mri.seg = (mri.seg>(cfg.threshold*max(mri.seg(:)))); +end + +[mrix, mriy, mriz] = ndgrid(1:size(mri.seg,1), 1:size(mri.seg,2), 1:size(mri.seg,3)); + +% construct the triangulations of the boundaries from the segmented MRI +for i=1:length(cfg.tissue) + fprintf('triangulating the boundary of compartment %d\n', i); + seg = imfill((mri.seg==cfg.tissue(i)), 'holes'); + ori(1) = mean(mrix(seg(:))); + ori(2) = mean(mriy(seg(:))); + ori(3) = mean(mriz(seg(:))); + [pnt, tri] = triangulate_seg(seg, cfg.numvertices(i), ori); + % apply the coordinate transformation from voxel to head coordinates + pnt(:,4) = 1; + pnt = (mri.transform * (pnt'))'; + pnt = pnt(:,1:3); + + % convert the MRI surface points into the same units as the source/gradiometer + scale = 1; + switch cfg.sourceunits + case 'mm' + scale = scale * 1000; + case 'cm' + scale = scale * 100; + case 'dm' + scale = scale * 10; + case 'm' + scale = scale * 1; + otherwise + error('unknown physical dimension in cfg.sourceunits'); + end + switch cfg.mriunits + case 'mm' + scale = scale / 1000; + case 'cm' + scale = scale / 100; + case 'dm' + scale = scale / 10; + case 'm' + scale = scale / 1; + otherwise + error('unknown physical dimension in cfg.mriunits'); + end + if scale~=1 + fprintf('converting MRI surface points from %s into %s\n', cfg.sourceunits, cfg.mriunits); + pnt = pnt* scale; + end + + bnd(i).pnt = pnt; + bnd(i).tri = tri; + fprintf(['segmentation compartment %d of ' num2str(length(cfg.tissue)) ' completed\n'],i); +end + diff --git a/external/fieldtrip/private/prepare_singleshell.m b/external/fieldtrip/private/prepare_singleshell.m index 0b7a90f..914d7f8 100644 --- a/external/fieldtrip/private/prepare_singleshell.m +++ b/external/fieldtrip/private/prepare_singleshell.m @@ -1,4 +1,4 @@ -function [vol, cfg] = prepare_singleshell(cfg, mri); +function [vol, cfg] = prepare_singleshell(cfg, mri) % PREPARE_SINGLESHELL creates a simple and fast method for the MEG forward % calculation for one shell of arbitrary shape. This is based on a @@ -7,14 +7,15 @@ % constructed from spherical harmonics. % % Use as -% [vol] = prepare_singleshell(cfg) -% [vol] = prepare_singleshell(cfg, seg) +% [vol, cfg] = prepare_singleshell(cfg, seg), or +% [vol, cfg] = prepare_singleshell(cfg, mri), or +% [vol, cfg] = prepare_singleshell(cfg) % % If you do not use a segmented MRI, the configuration should contain % cfg.headshape = a filename containing headshape, a structure containing a % single triangulated boundary, or a Nx3 matrix with surface % points -% cfg.spheremesh = number, to retriangulate the mesh with a sphere (default = 3000) +% cfg.numvertices = number, to retriangulate the mesh with a sphere (default = 3000) % instead of specifying a number, you can specify 'same' to keep the % vertices of the mesh identical to the original headshape points % @@ -35,6 +36,12 @@ % Copyright (C) 2006-2007, Robert Oostenveld % % $Log: prepare_singleshell.m,v $ +% Revision 1.22 2009/07/16 09:08:32 crimic +% added link with prepare_mesh function +% +% Revision 1.21 2009/05/29 12:31:04 roboos +% only convert cfg.headshape from config to struct in case it is present +% % Revision 1.20 2009/05/25 08:05:18 roboos % ensure that cfg.headshape is a sturct and not a config object (in case tracking is on) % @@ -101,158 +108,24 @@ fieldtripdefs cfg = checkconfig(cfg, 'trackconfig', 'on'); +cfg = checkconfig(cfg, 'renamed', {'spheremesh', 'numvertices'}); % set the defaults if ~isfield(cfg, 'smooth'); cfg.smooth = 5; end % in voxels if ~isfield(cfg, 'mriunits'); cfg.mriunits = 'mm'; end if ~isfield(cfg, 'sourceunits'), cfg.sourceunits = 'cm'; end if ~isfield(cfg, 'threshold'), cfg.threshold = 0.5; end % relative -if ~isfield(cfg, 'spheremesh'), cfg.spheremesh = 4000; end % approximate number of vertices in spere - -if isa(cfg.headshape, 'config') - % convert the nested config-object back into a normal structure - cfg.headshape = struct(cfg.headshape); -end - -if nargin>1 && (~isfield(cfg,'headshape') || isempty(cfg.headshape)) - basedonmri = 1; - basedonheadshape = 0; -elseif nargin==1 && isfield(cfg,'headshape') && ~isempty(cfg.headshape) - basedonmri = 0; - basedonheadshape = 1; -else - error('inconsistent configuration, cfg.headshape should not be used in combination with an mri input') -end - -if basedonmri - % obtain the head shape from the segmented MRI - seg = zeros(mri.dim); - if isfield(mri, 'gray') - fprintf('including gray matter in segmentation for brain compartment\n') - seg = seg | (mri.gray>(cfg.threshold*max(mri.gray(:)))); - end - if isfield(mri, 'white') - fprintf('including white matter in segmentation for brain compartment\n') - seg = seg | (mri.white>(cfg.threshold*max(mri.white(:)))); - end - if isfield(mri, 'csf') - fprintf('including CSF in segmentation for brain compartment\n') - seg = seg | (mri.csf>(cfg.threshold*max(mri.csf(:)))); - end - if ~strcmp(cfg.smooth, 'no'), - % check whether the required SPM2 toolbox is available - hastoolbox('spm2', 1); - fprintf('smoothing the segmentation with a %d-pixel FWHM kernel\n',cfg.smooth); - seg = double(seg); - spm_smooth(seg, seg, cfg.smooth); - end - % threshold for the last time - seg = (seg>(cfg.threshold*max(seg(:)))); - % determine the center of gravity of the segmented brain - xgrid = 1:mri.dim(1); - ygrid = 1:mri.dim(2); - zgrid = 1:mri.dim(3); - [X, Y, Z] = ndgrid(xgrid, ygrid, zgrid); - ori(1) = mean(X(seg)); - ori(2) = mean(Y(seg)); - ori(3) = mean(Z(seg)); - pnt = triangulate_seg(seg, cfg.spheremesh, ori); - pnt(:,4) = 1; - pnt = (mri.transform * pnt')'; - % convert the MRI surface points into the same units as the source/gradiometer - scale = 1; - switch cfg.sourceunits - case 'mm' - scale = scale * 1000; - case 'cm' - scale = scale * 100; - case 'dm' - scale = scale * 10; - case 'm' - scale = scale * 1; - otherwise - error('unknown physical dimension in cfg.sourceunits'); - end - switch cfg.mriunits - case 'mm' - scale = scale / 1000; - case 'cm' - scale = scale / 100; - case 'dm' - scale = scale / 10; - case 'm' - scale = scale / 1; - otherwise - error('unknown physical dimension in cfg.mriunits'); - end - if scale~=1 - fprintf('converting MRI surface points from %s into %s\n', cfg.sourceunits, cfg.mriunits); - shape = pnt(:,1:3) * scale; - else - shape = pnt(:,1:3); - end - - % compute triangulation - shape = unique(shape, 'rows'); - pnt = shape; - Npnt = size(pnt,1); - avg = mean(pnt, 1); - pnt = pnt - repmat(avg, Npnt, 1); % shift center of points towards the origin - dist = sqrt(sum(pnt.^2,2)); - pnt = pnt ./ repmat(dist, 1, 3); % normalize to a unit sphere - tri = convhulln(pnt); % construct the triangulation using a convex hull - pnt = shape; - - fprintf('placed %d points on the brain surface\n', length(shape)); -elseif basedonheadshape - % get the surface describing the head shape - if isstruct(cfg.headshape) && isfield(cfg.headshape, 'pnt') - % use the headshape surface specified in the configuration - headshape = cfg.headshape; - elseif isnumeric(cfg.headshape) && size(cfg.headshape,2)==3 - % use the headshape points specified in the configuration - headshape.pnt = cfg.headshape; - elseif ischar(cfg.headshape) - % read the headshape from file - headshape = read_headshape(cfg.headshape); - else - error('cfg.headshape is not specified correctly') - end - if ~isfield(headshape, 'tri') - % generate a closed triangulation from the surface points - headshape.pnt = unique(headshape.pnt, 'rows'); - headshape.tri = projecttri(headshape.pnt); - end - - pnt = headshape.pnt; - tri = headshape.tri; - -end % basedonmri or basedonheadshape - -if nargin<2 - % the triangulation is based on the shape, - if isequal(cfg.spheremesh, 'same') - % keep the same triangulation - tri = projecttri(pnt); % the triangulation is not guaranteed closed, reconstruct it - else - [tri1, pnt1] = reducepatch(tri, pnt, 3*cfg.spheremesh); - % remove double vertices - pnt1 = unique(pnt1, 'rows'); - % reconstruct the triangulation - tri1 = projecttri(pnt1); - % replace the probably unevenly distributed triangulation with a regular one - % and retriangulate it to the desired accuracy - [pnt2, tri2] = msphere(cfg.spheremesh); % this is a regular triangulation - [pnt, tri] = retriangulate(pnt1, tri1, pnt2, tri2, 2); - end -end +if ~isfield(cfg, 'spheremesh'), cfg.numvertices = 4000; end % approximate number of vertices in sphere % construct the geometry of the volume conductor model, containing a single boundary % the initialization of the forward computation code is done later in prepare_headmodel vol = []; -vol.bnd.pnt = pnt; -vol.bnd.tri = tri; -vol.type = 'nolte'; +if nargin==1 + vol.bnd = prepare_mesh(cfg); +else + vol.bnd = prepare_mesh(cfg, mri); +end +vol.type = 'nolte'; % get the output cfg cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); diff --git a/external/fieldtrip/private/prepare_vol_sens.m b/external/fieldtrip/private/prepare_vol_sens.m index fef176e..6a47ff5 100644 --- a/external/fieldtrip/private/prepare_vol_sens.m +++ b/external/fieldtrip/private/prepare_vol_sens.m @@ -40,6 +40,9 @@ % Copyright (C) 2004-2009, Robert Oostenveld % % $Log: prepare_vol_sens.m,v $ +% Revision 1.19 2009/05/29 11:50:34 vlalit +% Fixed a bug with wrong kind of brackets +% % Revision 1.18 2009/05/25 11:50:40 roboos % consistent handling of multiple spheres in case of ctf localspheres.hdm and fieldtrip prepare_localspheres, also in case of synthetic gradients. % @@ -228,7 +231,7 @@ warning('using the global fitted single sphere for %d channels that do not have a local sphere', length(missing)); end for i=1:length(missing) - vol.label(end+1) = missing{i}; + vol.label(end+1) = missing(i); vol.r(end+1,:) = singlesphere.r; vol.o(end+1,:) = singlesphere.o; end diff --git a/external/fieldtrip/private/preproc.m b/external/fieldtrip/private/preproc.m index 958fb20..79eb30b 100644 --- a/external/fieldtrip/private/preproc.m +++ b/external/fieldtrip/private/preproc.m @@ -96,6 +96,13 @@ % Copyright (C) 2004-2009, Robert Oostenveld % % $Log: preproc.m,v $ +% Revision 1.37 2009/08/05 08:36:09 roboos +% don't fill up the complete data with nans if a nan is detected +% the behaviour of not filtering and giving a warning remains the same +% +% Revision 1.36 2009/06/17 10:12:26 roboos +% cfg.montage=[] should also work (just like 'no') +% % Revision 1.35 2009/03/13 13:24:00 jansch % added support for preproc_denoise % @@ -340,7 +347,7 @@ dat = preproc_rereference(dat, refindx); end -if ~strcmp(cfg.montage, 'no') +if ~strcmp(cfg.montage, 'no') && ~isempty(cfg.montage) % this is an alternative approach for rereferencing, with arbitrary complex linear combinations of channels tmp.trial = {dat}; tmp.label = label; @@ -351,8 +358,7 @@ end if any(any(isnan(dat))) - % filtering is not possible for at least a selection of the data, replace all data with nans - dat(:) = nan; + % filtering is not possible for at least a selection of the data if nargout>2 nsamples = size(dat,2); time = (offset - begpadding + (0:(nsamples-1)))/fsample; diff --git a/external/fieldtrip/private/preprocessing.m b/external/fieldtrip/private/preprocessing.m index e8624d5..86d0b5f 100644 --- a/external/fieldtrip/private/preprocessing.m +++ b/external/fieldtrip/private/preprocessing.m @@ -86,6 +86,8 @@ % Undocumented local options: % cfg.artfctdef % cfg.removemcg +% cfg.output.dataset +% cfg.output.dataformat % % This function depends on PREPROC which has the following options: % cfg.absdiff @@ -125,6 +127,15 @@ % Copyright (C) 2003-2007, Robert Oostenveld, SMI, FCDC % % $Log: preprocessing.m,v $ +% Revision 1.109 2009/09/08 14:23:21 roboos +% changed the syntaxt for concatenation of implicitref to cfg.channel +% +% Revision 1.108 2009/06/17 13:44:14 roboos +% fixed output label in case of rereferencing with a montage +% +% Revision 1.107 2009/06/17 10:14:26 roboos +% added support for preprocessing data from disk and immediate writing to disk (trial by trial), which allows for preprocessing very large datasets without having them completely in memory (e.g. rereferencing sdma datasets) +% % Revision 1.106 2009/01/28 10:24:04 jansch % changed dataformat in call to checkdata into datatype % @@ -384,20 +395,20 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % do preprocessing of data that has already been read %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - + % the input data must be raw data = checkdata(data, 'datatype', 'raw', 'hasoffset', 'yes'); - + % check if the input cfg is valid for this function cfg = checkconfig(cfg, 'forbidden', {'trl', 'dataset', 'datafile', 'headerfile'}); - + if cfg.padding>0 error('cfg.padding should be zero, since filter padding is only possible while reading the data from file'); end - + % set the defaults if ~isfield(cfg, 'trials'), cfg.trials = 'all'; end - + % select trials of interest if ~strcmp(cfg.trials, 'all') if islogical(cfg.trials), cfg.trials=find(cfg.trials); end @@ -406,23 +417,40 @@ data.time = data.time(cfg.trials); data.offset = data.offset(cfg.trials); end - + % translate the channel groups (like 'all' and 'MEG') into real labels cfg.channel = channelselection(cfg.channel, data.label); rawindx = match_str(data.label, cfg.channel); - + % this will contain the newly processed data dataout = []; - + progress('init', cfg.feedback, 'preprocessing'); ntrl = length(data.trial); for i=1:ntrl progress(i/ntrl, 'preprocessing trial %d from %d\n', i, ntrl); % do the preprocessing on the selected channels [dataout.trial{i}, dataout.label, dataout.time{i}, cfg] = preproc(data.trial{i}(rawindx,:), data.label(rawindx), data.fsample, cfg, data.offset(i)); + + if isfield(cfg, 'output') && ~isempty(cfg.output) + % write the processed data to file + newhdr = []; + newhdr.Fs = hdr.Fs; + newhdr.label = label; + newhdr.nChans = length(newhdr.label); + + % only append for the second and consecutive trials + write_data(cfg.output.dataset, dataout.trial{i}, 'dataformat', cfg.output.dataformat, 'header', newhdr, 'append', i~=1); + + if nargout==0 + % don't keep the data in memory + dataout.trial{i} = []; + end + end + end % for all trials progress('close'); - + % update the trial definition (trl) in case of trial selection if ~strcmp(cfg.trials, 'all') % try to locate the trl in the nested configuration @@ -442,37 +470,37 @@ % get the output cfg cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); - + % remember the configuration details of the input data if isfield(data, 'cfg'); cfg.previous = data.cfg; end - + % take along relevant fields of input data to output data if isfield(data, 'hdr'); dataout.hdr = data.hdr; end if isfield(data, 'fsample'); dataout.fsample = data.fsample; end if isfield(data, 'grad'); dataout.grad = data.grad; end if isfield(data, 'elec'); dataout.elec = data.elec; end - + % replace the input data with the output data data = dataout; - + else %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % read the data from file and do the preprocessing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - + if isfield(cfg, 'trialdef') && ~isfield(cfg, 'trl') error('you must call DEFINETRIAL prior to PREPROCESSING'); end - + % check if the input cfg is valid for this function cfg = checkconfig(cfg, 'dataset2files', {'yes'}); cfg = checkconfig(cfg, 'required', {'headerfile', 'datafile'}); cfg = checkconfig(cfg, 'renamed', {'datatype', 'continuous'}); cfg = checkconfig(cfg, 'renamedval', {'continuous', 'continuous', 'yes'}); - + % read the header hdr = read_header(cfg.headerfile, 'headerformat', cfg.headerformat); - + % this option relates to reading over trial boundaries in a pseudo-continuous dataset if ~isfield(cfg, 'continuous') if hdr.nTrials==1 @@ -481,32 +509,32 @@ cfg.continuous = 'no'; end end - + % this should be a cell array if ~iscell(cfg.channel) && ischar(cfg.channel) cfg.channel = {cfg.channel}; end - + % this should be a cell array if ~iscell(cfg.refchannel) && ischar(cfg.refchannel) cfg.refchannel = {cfg.refchannel}; end - + % do a sanity check for the re-referencing if strcmp(cfg.reref, 'no') && ~isempty(cfg.refchannel) warning('no re-referencing is performed'); cfg.refchannel = {}; end - + % translate the channel groups (like 'all' and 'MEG') into real labels cfg.channel = channelselection(cfg.channel, hdr.label); - + if ~isempty(cfg.implicitref) % add the label of the implicit reference channel to these cell-arrays - cfg.channel = {cfg.channel{:} cfg.implicitref}; + cfg.channel = cat(1, cfg.channel(:), cfg.implicitref); end cfg.refchannel = channelselection(cfg.refchannel, cfg.channel); - + % determine the length in samples to which the data should be padded before filtering is applied % the filter padding is done by reading a longer segment of data from the original data file if cfg.padding>0 @@ -527,7 +555,7 @@ % no padding was requested padding = 0; end - + if ~isfield(cfg, 'trl') % treat the data as continuous if possible, otherwise define all trials as indicated in the header if strcmp(cfg.continuous, 'yes') @@ -545,7 +573,7 @@ end cfg.trl = trl; end - + if any(strmatch('reject', fieldnames(cfg))) || ... any(strmatch('rejecteog', fieldnames(cfg))) || ... any(strmatch('rejectmuscle', fieldnames(cfg))) || ... @@ -553,12 +581,12 @@ % this is only for backward compatibility error('you should call REJECTARTIFACT prior to PREPROCESSING, please update your scripts'); end - + ntrl = size(cfg.trl,1); if ntrl<1 error('no trials were selected for preprocessing, see DEFINETRIAL for help'); end - + % compute the template for MCG and the QRS latency indices, and add it to the configuration if strcmp(cfg.removemcg, 'yes') cfg = template_mcg(cfg); @@ -568,10 +596,10 @@ fprintf('removing mcg on channel %s\n', mcgchannel{i}); end end - + % determine the channel numbers of interest for preprocessing [chnindx, rawindx] = match_str(cfg.channel, hdr.label); - + progress('init', cfg.feedback, 'reading and preprocessing'); for i=1:ntrl progress(i/ntrl, 'reading and preprocessing trial %d from %d\n', i, ntrl); @@ -600,29 +628,45 @@ endsample = hdr.nSamples*hdr.nTrials; end end - + % ONLY RELEVANT FOR NEUROSCAN CNT if ~isfield(cfg, 'nsdf') hdr.nsdf=16; else hdr.nsdf=cfg.nsdf; end - + % read the raw data with padding on both sides of the trial dat = read_data(cfg.datafile, 'header', hdr, 'begsample', begsample, 'endsample', endsample, 'chanindx', rawindx, 'checkboundary', strcmp(cfg.continuous, 'no'), 'dataformat', cfg.dataformat); - + % do the preprocessing on the padded trial data and remove the padding after filtering [cutdat{i}, label, time{i}, cfg] = preproc(dat, hdr.label(rawindx), hdr.Fs, cfg, cfg.trl(i,3), begpadding, endpadding); - + + if isfield(cfg, 'output') && ~isempty(cfg.output) + % write the processed data to file + newhdr = []; + newhdr.Fs = hdr.Fs; + newhdr.label = label; + newhdr.nChans = length(newhdr.label); + + % only append for the second and consecutive trials + write_data(cfg.output.dataset, cutdat{i}, 'dataformat', cfg.output.dataformat, 'header', newhdr, 'append', i~=1); + + if nargout==0 + % don't keep the data in memory + cutdat{i} = []; + end + end + % ONLY RELEVANT FOR NEUROSCAN CNT hdr=rmfield(hdr,'nsdf'); - + end % for all trials progress('close'); - + % collect the results data.hdr = hdr; % header details of the datafile - data.label = cfg.channel; % labels of channels that have been read + data.label = label; % labels of channels that have been read, can be different from labels in file due to montage data.trial = cutdat; % cell-array with TIMExCHAN data.time = time; % vector with the timeaxis for each individual trial data.fsample = hdr.Fs; @@ -632,7 +676,7 @@ % get the output cfg cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); - + end % if nargin>1 % add the version details of this function call to the configuration @@ -644,7 +688,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: preprocessing.m,v 1.106 2009/01/28 10:24:04 jansch Exp $'; +cfg.version.id = '$Id: preprocessing.m,v 1.109 2009/09/08 14:23:21 roboos Exp $'; % remember the exact configuration details in the output data.cfg = cfg; diff --git a/external/fieldtrip/private/read_24bit.c b/external/fieldtrip/private/read_24bit.c index 95c8998..fdb3b16 100644 --- a/external/fieldtrip/private/read_24bit.c +++ b/external/fieldtrip/private/read_24bit.c @@ -19,6 +19,9 @@ * * * $Log: read_24bit.c,v $ + * Revision 1.4 2009/06/08 16:33:08 roboos + * include sys/types.h for all platforms, not only WIN32/64, since also required for OSX 10.4 + * * Revision 1.3 2009/03/30 07:23:03 roboos * changed ifdef syntax * @@ -59,11 +62,11 @@ #define _LARGEFILE_SOURCE #include +#include #include "mex.h" #include "matrix.h" #if defined(_WIN32) || defined(_WIN64) -#include #define int32_t INT32_T #define int64_t INT64_T #define fseeko fseek diff --git a/external/fieldtrip/private/read_eeglabdata.m b/external/fieldtrip/private/read_eeglabdata.m index 730adbf..4c2f13e 100644 --- a/external/fieldtrip/private/read_eeglabdata.m +++ b/external/fieldtrip/private/read_eeglabdata.m @@ -36,6 +36,10 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabdata.m,v $ +% Revision 1.3 2009/07/01 15:35:19 vlalit +% Try several different ways of looking for the data file +% before giving up (fix suggested by Jakob Scherer) +% % Revision 1.2 2009/02/27 12:03:09 vlalit % Arno's fix for a bug reported by Antanas Spokas % @@ -72,7 +76,20 @@ if strcmpi(header.orig.data(end-2:end), 'set'), header.ori = load('-mat', filename); else - fid = fopen(header.orig.data); + + % assuming that the data file is in the current directory + fid = fopen(header.orig.data); + + % assuming the .dat and .set files are located in the same directory + if fid == -1 + pathstr = fileparts(filename); + fid = fopen(fullfile(pathstr, header.orig.data)); + end + + if fid == -1 + fid = fopen(fullfile(header.orig.filepath, header.orig.data)); % + end + if fid == -1, error('Cannot not find data file'); end; % only read the desired trials diff --git a/external/fieldtrip/private/read_eeglabevent.m b/external/fieldtrip/private/read_eeglabevent.m index 1c438b7..28c0f6a 100644 --- a/external/fieldtrip/private/read_eeglabevent.m +++ b/external/fieldtrip/private/read_eeglabevent.m @@ -33,6 +33,12 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabevent.m,v $ +% Revision 1.4 2009/08/29 05:11:31 josdie +% After consultation with Arno, changed so that value (when present) and type fields in EEGlab .set files are treated as being reversed from value and type fields in FieldTrip files. +% +% Revision 1.3 2009/08/09 01:45:24 josdie +% Changed event value to equal EEGlab's event value rather than type. +% % Revision 1.2 2009/02/02 20:45:34 josdie % FieldTrip's .value field now set to EEGlab's .type field. FieldTrip's .type field set to 'trigger'. FieldTrip's .duration field set to 0 rather than empty. % @@ -64,8 +70,14 @@ event = []; oldevent = header.orig.event; for index = 1:length(oldevent) - event(index).value = num2str( oldevent(index).type ); - event(index).type = 'trigger'; + event(index).value = num2str( oldevent(index).type ); + if isfield(oldevent,'code') + event(index).type = oldevent(index).code; + elseif isfield(oldevent,'value') + event(index).type = oldevent(index).value; + else + event(index).type = 'trigger'; + end; if header.nTrials > 1 event(index).sample = oldevent(index).latency-header.nSamplesPre; event(index).offset = header.nSamplesPre; diff --git a/external/fieldtrip/private/read_eeglabheader.m b/external/fieldtrip/private/read_eeglabheader.m index 65845cd..5ab7e60 100644 --- a/external/fieldtrip/private/read_eeglabheader.m +++ b/external/fieldtrip/private/read_eeglabheader.m @@ -30,6 +30,18 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabheader.m,v $ +% Revision 1.6 2009/08/08 04:07:02 josdie +% Bug in Joe's brain fixed. Change to header.nSamplesPre calculation changed back. +% +% Revision 1.5 2009/08/08 03:17:26 josdie +% Fixed bug that was causing hdr.label to have as many labels as there are time points rather than matching the number of channels. +% +% Revision 1.4 2009/08/08 03:05:29 josdie +% Fixed bug in calculation of header.nSamplesPre. +% +% Revision 1.3 2009/07/01 16:08:21 vlalit +% Fixing a bug in converting channel locations to elec struct (reproted by Jakib Scherer) +% % Revision 1.2 2009/01/23 15:35:46 roboos % create default channel names if EEG.chanlocs.labels is missing % @@ -70,18 +82,20 @@ header.label = { EEG.chanlocs.labels }'; catch warning('creating default channel names'); - for i=1:header.nSamples + for i=1:header.nChans header.label{i} = sprintf('chan%03d', i); end end -for ind = 1:length( EEG.chanlocs ) - header.elec.label{ind} = EEG.chanlocs(ind).labels; - if ~isempty(EEG.chanlocs(ind).X) - % this channel has a position - header.elec.pnt(ind,1) = EEG.chanlocs(ind).X; - header.elec.pnt(ind,2) = EEG.chanlocs(ind).Y; - header.elec.pnt(ind,3) = EEG.chanlocs(ind).Z; - end; +ind = 1; +for i = 1:length( EEG.chanlocs ) + if ~isempty(EEG.chanlocs(i).X) + header.elec.label{ind, 1} = EEG.chanlocs(i).labels; + % this channel has a position + header.elec.pnt(ind,1) = EEG.chanlocs(i).X; + header.elec.pnt(ind,2) = EEG.chanlocs(i).Y; + header.elec.pnt(ind,3) = EEG.chanlocs(i).Z; + ind = ind+1; + end; end; % remove data diff --git a/external/fieldtrip/private/read_event.m b/external/fieldtrip/private/read_event.m index 4e1748b..bb88b15 100644 --- a/external/fieldtrip/private/read_event.m +++ b/external/fieldtrip/private/read_event.m @@ -59,6 +59,19 @@ % Copyright (C) 2004-2008, Robert Oostenveld % % $Log: read_event.m,v $ +% Revision 1.103 2009/08/21 12:03:42 vlalit +% Fixed a bug with handling of 16 and 32-bit Neuroscan cnt variants. +% +% Revision 1.102 2009/08/09 03:34:55 josdie +% Modified egi_egia so that combined subject average files have the cell names start with a four character subject code (e.g., S001) so that other software can decode the subject number more reliably. +% +% Revision 1.101 2009/07/28 11:22:54 roboos +% improved detection of binary trigger channels for neuromag +% +% Revision 1.100 2009/06/09 13:54:30 marvger +% removed warning for empty events; interferes with continuous pooling in +% realtime applications +% % Revision 1.99 2009/05/22 09:02:29 marvger % changed tcp handling % @@ -897,7 +910,7 @@ event(eventCount).sample = (eventCount-1)*hdr.nSamples + 1; event(eventCount).offset = -hdr.nSamplesPre; event(eventCount).duration = hdr.nSamples; - event(eventCount).value = ['S' num2str(subject) cnames{cell}]; + event(eventCount).value = ['S' sprintf('%03d',subject) cnames{cell}]; end end @@ -1221,9 +1234,13 @@ end if iscontinuous - binary = {'STI 014', 'STI 015', 'STI 016'}; - binaryindx = match_str(hdr.label, binary); analogindx = strmatch('STI', hdr.label); + binaryindx = find(strcmp(chantype(hdr), 'trigger')); + if isempty(binaryindx) + % use a predefined set of channel names + binary = {'STI 014', 'STI 015', 'STI 016'}; + binaryindx = match_str(hdr.label, binary); + end if ~isempty(binaryindx) % add triggers based on the binary trigger channel, this is based on @@ -1518,10 +1535,10 @@ event(end ).offset = -hdr.nSamplesPre; event(end ).value = []; - case 'ns_cnt' + case {'ns_cnt', 'ns_cnt16', 'ns_cnt32'} % read the header, the original header includes the event table if isempty(hdr) - hdr = read_header(filename); + hdr = read_header(filename, 'headerformat', eventformat); end % translate the event table into known FieldTrip event types for i=1:hdr.orig.nevent @@ -1618,8 +1635,8 @@ % this has the side effect that events without a sample number are discarded [dum, indx] = sort([event.sample]); event = event(indx); -else - warning(sprintf('no events found in %s', filename)); +% else +% warning(sprintf('no events found in %s', filename)); end % apply the optional filters diff --git a/external/fieldtrip/private/read_header.m b/external/fieldtrip/private/read_header.m index 7b72f3e..37afb3b 100644 --- a/external/fieldtrip/private/read_header.m +++ b/external/fieldtrip/private/read_header.m @@ -55,6 +55,18 @@ % Copyright (C) 2003-2008, Robert Oostenveld, F.C. Donders Centre % % $Log: read_header.m,v $ +% Revision 1.98 2009/08/05 00:26:38 josdie +% Workaround for defect in number of subjects field in EGIS average files generated by NetStation. +% +% Revision 1.97 2009/07/19 19:49:21 josdie +% Deleted egi_egis changing a zero hdr.nSamplesPre to a one. +% +% Revision 1.96 2009/07/09 10:00:45 roboos +% no leading spaces for fake channel names in fcdc_buffer +% +% Revision 1.95 2009/06/17 13:43:20 roboos +% don't include LastTimeStamp in output +% % Revision 1.94 2009/04/20 17:19:01 vlalit % Changed the MNE reader not to set hdr.elec when there are no EEG channels. % @@ -841,7 +853,8 @@ for i = 1:hdr.nChans hdr.label{i} = ['e' num2str(i)]; end; - hdr.nTrials = fhdr(11)*fhdr(18); %number of trials is numSubjects * numCells + %since NetStation does not properly set the fhdr(11) field, use the number of subjects from the chdr instead + hdr.nTrials = chdr(1,2)*fhdr(18); %number of trials is numSubjects * numCells hdr.nSamplesPre = ceil(fhdr(14)/(1000/hdr.Fs)); if any(chdr(:,3)-chdr(1,3)) @@ -878,10 +891,6 @@ % actually allocated to the age of the subject, although NetStation % does not use it when generating an EGIS session file. - if hdr.nSamplesPre == 0 - hdr.nSamplesPre = 1; %If baseline was left as zero, then change to "1" to avoid possible issues with software expecting a non-zero baseline. - end; - if any(chdr(:,3)-chdr(1,3)) error('Number of samples not the same for all cells.'); end; @@ -945,7 +954,7 @@ hdr.nTrials = 1; % since continuous warning('creating fake channel names'); for i=1:hdr.nChans - hdr.label{i} = sprintf('%3d', i); + hdr.label{i} = sprintf('%d', i); end % this should be a column vector hdr.label = hdr.label(:); @@ -1006,7 +1015,6 @@ LastTimeStamp = ncs.hdr.LastTimeStamp; % this is the first timestamp of the last block, i.e. not the timestamp of the last sample hdr.TimeStampPerSample = double(LastTimeStamp - FirstTimeStamp) ./ ((ncs.NRecords-1)*512); hdr.FirstTimeStamp = FirstTimeStamp; - hdr.LastTimeStamp = LastTimeStamp + uint64((512-1)*hdr.TimeStampPerSample); case 'neuralynx_nse' nse = read_neuralynx_nse(filename, 1, 0); @@ -1018,7 +1026,7 @@ hdr.nSamples = 32; % there are 32 samples in each waveform hdr.nSamplesPre = 0; hdr.orig = nse.hdr; - % FIXME add hdr.FirstTimeStamp and hdr.LastTimeStamp + % FIXME add hdr.FirstTimeStamp and hdr.TimeStampPerSample case {'neuralynx_ttl', 'neuralynx_tsl', 'neuralynx_tsh'} % these are hardcoded, they contain an 8-byte header and int32 values for a single channel @@ -1361,7 +1369,6 @@ % the timestamps indicate the beginning of each block, hence the timestamp of the last block corresponds with the end of the previous block hdr.TimeStampPerSample = double(ts(end)-ts(1))/sum(num(1:(end-1))); hdr.FirstTimeStamp = ts(1); % the timestamp of the first continuous sample - hdr.LastTimeStamp = ts(end) + uint64(hdr.TimeStampPerSample * num(end)); % the timestamp of the last sample (not the beginning of the last block) % also make the spike channels visible for i=1:length(orig.ChannelHeader) diff --git a/external/fieldtrip/private/read_mri.m b/external/fieldtrip/private/read_mri.m index eabfeaa..ecf08de 100644 --- a/external/fieldtrip/private/read_mri.m +++ b/external/fieldtrip/private/read_mri.m @@ -16,6 +16,22 @@ % Copyright (C) 2004-2009, Robert Oostenveld % % $Log: read_mri.m,v $ +% Revision 1.11 2009/07/16 12:57:12 roboos +% fixed fprintf feedback for dicom reader +% +% Revision 1.10 2009/07/09 15:07:59 roboos +% use another coordinate transformation matrix for fif MRI +% +% Revision 1.9 2009/07/08 08:08:45 roboos +% also support mne toolbox fiff_read_mri function +% +% Revision 1.8 2009/07/07 10:40:37 roboos +% Improved handling of sequence of files, also when the files don't have nice names. +% Use SeriesNumber from the DICOM header to figure out which slices go together. +% +% Revision 1.7 2009/07/02 15:04:09 roboos +% construct transformation matrix for dicom files +% % Revision 1.6 2009/03/11 15:02:18 vlalit % Use either SPM5 or SPM8 to read *.nii files. % @@ -185,43 +201,102 @@ transform(2,4) = -dim(2) - transform(2,4); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -elseif filetype(filename, 'neuromag_fif') - % use the neuromag functions to read the Neuromag MRI - % FIXME this needs to be checked to ensure consistency with the FieldTrip definition of volume data +elseif filetype(filename, 'neuromag_fif') && hastoolbox('mne') + % use the mne functions to read the Neuromag MRI + hdr = fiff_read_mri(filename); + img = cat(3, hdr.slices.data); + hdr.slices = rmfield(hdr.slices, 'data'); % remove the image data to save memory + % hmm, which transformation matrix should I use? + if issubfield(hdr.voxel_trans, 'trans') + transform = hdr.voxel_trans.trans; + elseif issubfield(hdr.trans, 'trans') + transform = hdr.trans.trans; + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +elseif filetype(filename, 'neuromag_fif') && hastoolbox('meg_pd') + % use the meg_pd functions to read the Neuromag MRI [img,coords] = loadmri(filename); dev = loadtrans(filename,'MRI','HEAD'); - transform = dev*coords; + transform = dev*coords; hdr.coords = coords; - hdr.dev = dev; + hdr.dev = dev; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +elseif filetype(filename, 'neuromag_fif') + error('reading MRI data from a fif file requires either the MNE toolbox or the meg_pd toolbox to be installed'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% elseif filetype(filename, 'dicom') % this uses the Image processing toolbox - % the DICOM file probably represents a stack of slices + % the DICOM file probably represents a stack of slices, possibly even multiple volumes + orig = dicominfo(filename); + dim(1) = orig.Rows; + dim(2) = orig.Columns; + [p, f] = fileparts(filename); + + % this works for the Siemens scanners at the FCDC tok = tokenize(f, '.'); for i=5:length(tok) - tok{i} = '*'; % this works for the Siemens scanners at the FCDC + tok{i} = '*'; end filename = sprintf('%s.', tok{:}); % reconstruct the filename with wildcards and '.' between the segments filename = filename(1:end-1); % remove the last '.' dirlist = dir(fullfile(p, filename)); dirlist = {dirlist.name}; + + if length(dirlist)==1 + % try something else to get a list of all the slices + dirlist = dir(fullfile(p, '*')); + dirlist = {dirlist(~[dirlist.isdir]).name}; + end + + keep = false(1, length(dirlist)); for i=1:length(dirlist) filename = char(fullfile(p, dirlist{i})); - fprintf('reading ''%s''\n', filename); - info = dicominfo(filename); - img(:,:,i) = dicomread(info); - hdr(i) = info; - if i==1 - % this pre-allocates enough space for the other slices - img(1,1,length(dirlist)) = 0; + if ~filetype(filename, 'dicom') + keep(i) = false; + fprintf('skipping ''%s'' because of incorrect filetype\n', filename); + end + % read the header information + info = dicominfo(filename); + if info.SeriesNumber~=orig.SeriesNumber + keep(i) = false; + fprintf('skipping ''%s'' because of different SeriesNumber\n', filename); + else + keep(i) = true; + hdr(i) = info; end end + % remove the files that were skipped + hdr = hdr(keep); + dirlist = dirlist(keep); + + % pre-allocate enough space for the subsequent slices + dim(3) = length(dirlist); + img = zeros(dim(1), dim(2), dim(3)); + for i=1:length(dirlist) + filename = char(fullfile(p, dirlist{i})); + fprintf('reading image data from ''%s''\n', filename); + img(:,:,i) = dicomread(hdr(i)); + end + % reorder the slices [z, indx] = sort(cell2mat({hdr.SliceLocation})); hdr = hdr(indx); img = img(:,:,indx); + + try + % construct a homgenous transformation matrix that performs the scaling from voxels to mm + dx = hdr(1).PixelSpacing(1); + dy = hdr(1).PixelSpacing(2); + dz = hdr(2).SliceLocation - hdr(1).SliceLocation; + transform = eye(4); + transform(1,1) = dx; + transform(2,2) = dy; + transform(3,3) = dz; + end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% else diff --git a/external/fieldtrip/private/read_sens.m b/external/fieldtrip/private/read_sens.m index c21a80e..e30027b 100644 --- a/external/fieldtrip/private/read_sens.m +++ b/external/fieldtrip/private/read_sens.m @@ -32,6 +32,13 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: read_sens.m,v $ +% Revision 1.14 2009/07/02 10:34:21 vlalit +% Added eeglab_set to the list of formats where electrode locations can be found in +% the header. +% +% Revision 1.13 2009/06/03 09:52:15 roboos +% added zebris_sfp +% % Revision 1.12 2009/02/02 16:10:15 vlalit % Provide the 'headertype' argument to the internal read_header call. % @@ -171,7 +178,7 @@ % This is for EEG formats where electrode positions can be stored with the data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'spmeeg_mat'} + case {'spmeeg_mat', 'eeglab_set'} % check the availability of the required low-level toolbox % this is required because the read_sens function is also on itself included in the forwinv toolbox hastoolbox('fileio'); @@ -218,6 +225,13 @@ else error('no electrodes or gradiometers found in Matlab file'); end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % these are created by a Zebris tracker, at CRC in Liege at least. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + case 'zebris_sfp' + [sens.fid, sens.pnt, sens.fid_label, sens.label] = read_zebris(filename, 0); otherwise error('unknown fileformat for electrodes or gradiometers'); diff --git a/external/fieldtrip/private/redefinetrial.m b/external/fieldtrip/private/redefinetrial.m index aba8d2a..9e48b48 100644 --- a/external/fieldtrip/private/redefinetrial.m +++ b/external/fieldtrip/private/redefinetrial.m @@ -41,6 +41,10 @@ % Copyright (C) 2006-2008, Robert Oostenveld % % $Log: redefinetrial.m,v $ +% Revision 1.25 2009/08/13 20:47:02 jansch +% changed typo in key-value pair 'hdr',hdr. this should read 'header',hdr and +% speeds up the function considerably +% % Revision 1.24 2009/01/14 15:11:22 roboos % corrected documentation for cfg.begsample/endsample % fixed bug in output data.cfg.trl (one sample too long at the end) for input cfg.toilim and input cfg.begsample/endsample @@ -266,7 +270,7 @@ endsample = trl(iTrl,2); offset = trl(iTrl,3); trllength = endsample - begsample + 1; - data.trial{iTrl} = fetch_data(dataold, 'hdr', hdr, 'begsample', begsample, 'endsample', endsample, 'chanindx', 1:hdr.nChans); + data.trial{iTrl} = fetch_data(dataold, 'header', hdr, 'begsample', begsample, 'endsample', endsample, 'chanindx', 1:hdr.nChans, 'docheck', 0); data.time{iTrl} = offset2time(offset, dataold.fsample, trllength); end data.hdr = hdr; @@ -313,7 +317,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: redefinetrial.m,v 1.24 2009/01/14 15:11:22 roboos Exp $'; +cfg.version.id = '$Id: redefinetrial.m,v 1.25 2009/08/13 20:47:02 jansch Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end try, cfg.previous = dataold.cfg; end % in case of ~isempty(cfg.trl) diff --git a/external/fieldtrip/private/rejectartifact.m b/external/fieldtrip/private/rejectartifact.m index f3a61f9..abb2e36 100644 --- a/external/fieldtrip/private/rejectartifact.m +++ b/external/fieldtrip/private/rejectartifact.m @@ -52,6 +52,9 @@ % Copyright (C) 2003-2007, Robert Oostenveld % % $Log: rejectartifact.m,v $ +% Revision 1.48 2009/06/23 18:33:17 roboos +% use the trl from the input data and not from the config in case of nargin>1 +% % Revision 1.47 2009/03/23 21:20:10 roboos % removed extra ; % @@ -226,10 +229,15 @@ end end +if nargin>1 + trl = findcfg(data.cfg, 'trl'); +elseif isfield(cfg, 'trl') + trl = cfg.trl; +end + % ensure that there are trials that can be scanned for artifacts and/or rejected -if ~isfield(cfg, 'trl') || isempty(cfg.trl) - warning('no trials were selected, cannot perform artifact detection/rejection'); - return; +if isempty(trl) + error('no trials were selected, cannot perform artifact detection/rejection'); end % prevent double occurences of artifact types, ensure that the order remains the same @@ -267,13 +275,13 @@ cfg.artfctdef.type = dum(find(sel)); % combine all trials into a single boolean vector -trialall = zeros(1,max(cfg.trl(:,2))); -for j=1:size(cfg.trl,1) - trialall(cfg.trl(j,1):cfg.trl(j,2)) = 1; +trialall = zeros(1,max(trl(:,2))); +for j=1:size(trl,1) + trialall(trl(j,1):trl(j,2)) = 1; end % combine all artifacts into a single boolean vector -rejectall = zeros(1,max(cfg.trl(:,2))); +rejectall = zeros(1,max(trl(:,2))); for i=1:length(cfg.artfctdef.type) dum = artifact{i}; for j=1:size(dum,1) @@ -301,7 +309,7 @@ if strcmp(cfg.artfctdef.feedback, 'yes') COLOR = 'grcmykgrcmykgrcmykgrcmyk'; % use the trial definition present in the local configuration - trl = cfg.trl; + trl = trl; % compute the time axis that corresponds with each trial time = {}; for i=1:size(trl,1) @@ -341,7 +349,7 @@ plot(x, y, 'b') for j=1:length(cfg.artfctdef.type) x = time{i}; - y = rejectall(cfg.trl(i,1):cfg.trl(i,2)); + y = rejectall(trl(i,1):trl(i,2)); y(y~=j) = nan; y(y==j) = i + j*0.03; plot(x, y, COLOR(j)); @@ -382,7 +390,7 @@ % remove the trials that (partially) coincide with a rejection mark %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if strcmp(cfg.artfctdef.reject, 'partial') || strcmp(cfg.artfctdef.reject, 'complete') - trl = cfg.trl; + trl = trl; trialok = []; count_complete_reject = 0; count_partial_reject = 0; @@ -441,7 +449,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: rejectartifact.m,v 1.47 2009/03/23 21:20:10 roboos Exp $'; +cfg.version.id = '$Id: rejectartifact.m,v 1.48 2009/06/23 18:33:17 roboos Exp $'; % % remember the exact configuration details in the output % cfgtmp = cfg; diff --git a/external/fieldtrip/private/rejectcomponent.m b/external/fieldtrip/private/rejectcomponent.m index e36d40d..9c090fa 100644 --- a/external/fieldtrip/private/rejectcomponent.m +++ b/external/fieldtrip/private/rejectcomponent.m @@ -25,6 +25,10 @@ % Copyright (C) 2005-2009, Robert Oostenveld % % $Log: rejectcomponent.m,v $ +% Revision 1.12 2009/08/14 09:30:20 jansch +% also pass configuration of input data-structure to the output data.cfg in +% case of nargin==3 +% % Revision 1.11 2009/03/26 13:21:50 jansch % ensure correct montage in the case of hasdata % @@ -111,7 +115,7 @@ invtopo = pinv(topo); tra = eye(length(selcomp)) - topo(:, cfg.component)*invtopo(cfg.component, :); %I am not sure about this, but it gives comparable results to the ~hasdata case - %when comp contains non-orthogonal (=ica) topographies + %when comp contains non-orthogonal (=ica) topographies, and contains a complete decomposition %the following is incorrect %topo = comp.topo(selcomp, cfg.component); @@ -175,9 +179,18 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: rejectcomponent.m,v 1.11 2009/03/26 13:21:50 jansch Exp $'; -% remember the configuration details of the input data -try, cfg.previous = comp.cfg; end +cfg.version.id = '$Id: rejectcomponent.m,v 1.12 2009/08/14 09:30:20 jansch Exp $'; +if nargin==2, + % remember the configuration details of the input data + try, cfg.previous = comp.cfg; end +elseif nargin==3, + try, cfg.previous{2} = comp.cfg; end + try, cfg.previous{1} = data.cfg; end + %the configuration of the data is relatively more important + %potential use of findcfg in subsequent analysis steps looks into + %the previous{1} first +end + % keep the configuration in the output data.cfg = cfg; diff --git a/external/fieldtrip/private/rejectvisual.m b/external/fieldtrip/private/rejectvisual.m index 322542a..1508e08 100644 --- a/external/fieldtrip/private/rejectvisual.m +++ b/external/fieldtrip/private/rejectvisual.m @@ -107,6 +107,9 @@ % Copyright (C) 2005-2006, Markus Bauer, Robert Oostenveld % % $Log: rejectvisual.m,v $ +% Revision 1.29 2009/07/21 08:33:15 crimic +% corrected typo +% % Revision 1.28 2009/03/31 18:39:43 roboos % don't print removed if empty (thanks to Irina) % @@ -394,7 +397,7 @@ for i=1:(length(removed)-1) fprintf('%s, ', data.label{removed(i)}); end - fprintf('%s\n', data.label{removed(i)}); + fprintf('%s\n', data.label{removed(end)}); % remove channels that are not selected for i=1:length(data.trial) @@ -408,7 +411,7 @@ for i=1:(length(removed)-1) fprintf('%s, ', data.label{removed(i)}); end - fprintf('%s\n', data.label{removed(i)}); + fprintf('%s\n', data.label{removed(end)}); % fill the data from the bad channels with nans for i=1:length(data.trial) @@ -431,7 +434,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: rejectvisual.m,v 1.28 2009/03/31 18:39:43 roboos Exp $'; +cfg.version.id = '$Id: rejectvisual.m,v 1.29 2009/07/21 08:33:15 crimic Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/resampledata.m b/external/fieldtrip/private/resampledata.m index 4b3b0b5..c12d630 100644 --- a/external/fieldtrip/private/resampledata.m +++ b/external/fieldtrip/private/resampledata.m @@ -44,6 +44,11 @@ % Copyright (C) 2004-2009, FC Donders Centre, Robert Oostenveld % % $Log: resampledata.m,v $ +% Revision 1.22 2009/08/14 09:35:45 jansch +% pass an updated trl matrix to the output as cfg.resampletrl, containing a +% 'consistent' trial description matrix relative to the new sampling rate. +% this is needed if in a later step fetch_data is invoked +% % Revision 1.21 2009/04/03 08:06:35 jansch % included possibility to resample data structures with an original non-integer % sampling rate @@ -141,6 +146,15 @@ cfg.resamplefs = 256; end +% this is needed if only a subset of trials is requested, +% and for an attempt to pass in the output a trl matrix +% which contains the indexing in the updated sampling rate +if isfield(data, 'cfg') % try to locate the trl in the nested configuration + trl = findcfg(data.cfg, 'trl'); +else + trl = []; +end + % select trials of interest if ~strcmp(cfg.trials, 'all') if islogical(cfg.trials), cfg.trials=find(cfg.trials); end @@ -148,11 +162,6 @@ data.trial = data.trial(cfg.trials); data.time = data.time(cfg.trials); % update the trial definition (trl) - if isfield(data, 'cfg') % try to locate the trl in the nested configuration - trl = findcfg(data.cfg, 'trl'); - else - trl = []; - end if isempty(trl) % a trial definition is expected in each continuous data set warning('could not locate the trial definition ''trl'' in the data structure'); @@ -238,6 +247,20 @@ end % if usefsample or usetime +%try to give an updated trl matrix, which is necessary to fool +%fetch_data and fetch_header at a potential later stage of the +%analysis pipeline +%FIXME this is only done in case of usefsample, think of whether +%it is possible as well in the other case +if ~isempty(trl) && usefsample, + trlorig = trl; + offsindx = round((trl(:,1)-trl(:,3)).*(fsres./fsorig)); + offs = round(trl(:,3).*(fsres./fsorig)); + nsmp = cellfun('size',data.trial,2)'; + trl = [offsindx+offs offsindx+offs+nsmp-1 offs]; + cfg.resampletrl = trl; +end + fprintf('original sampling rate = %d Hz\nnew sampling rate = %d Hz\n', cfg.origfs, data.fsample); % get the output cfg @@ -252,7 +275,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: resampledata.m,v 1.21 2009/04/03 08:06:35 jansch Exp $'; +cfg.version.id = '$Id: resampledata.m,v 1.22 2009/08/14 09:35:45 jansch Exp $'; % remember the configuration details of the input data try, cfg.previous = data.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/select_box.m b/external/fieldtrip/private/select_box.m index 19811f6..460ceed 100644 --- a/external/fieldtrip/private/select_box.m +++ b/external/fieldtrip/private/select_box.m @@ -1,29 +1,53 @@ -function [x, y] = select_box; +function [x, y] = select_box(handle, eventdata, varargin) % SELECT_BOX helper function for selecting a rectangular region % in the current figure using the mouse. % % Use as -% [x, y] = select_box; +% [x, y] = select_box(...) % -% It returns a 2-element vector x and a 2-element vector y +% It returns a 2-element vector x and a 2-element vector y % with the corners of the selected region. +% +% Optional input arguments should come in key-value pairs and can include +% 'multiple' true/false, make multiple selections by dragging, clicking +% in one will finalize the selection (default = false) % Copyright (C) 2006, Robert Oostenveld % % $Log: select_box.m,v $ +% Revision 1.6 2009/07/14 13:18:33 roboos +% updated channel selection, use select_range and two local helper functions, also support multiple selections +% +% Revision 1.5 2009/06/04 10:50:50 roboos +% changed handling of inputs +% +% Revision 1.4 2009/06/03 11:21:49 crimic +% bug fixes +% +% Revision 1.3 2009/05/29 15:56:08 roboos +% added input argument handling for 'multiple', the actual implementation does not support it yet +% % Revision 1.2 2009/04/15 12:34:29 crimic % added code of original select2d.m function % % Revision 1.1 2006/05/17 14:38:09 roboos % new implementation -% -k = waitforbuttonpress; -point1 = get(gca,'CurrentPoint'); % button down detected -finalRect = rbbox; % return figure units -point2 = get(gca,'CurrentPoint'); % button up detected -point1 = point1(1,1:2); % extract x and y -point2 = point2(1,1:2); -x = sort([point1(1) point2(1)]); -y = sort([point1(2) point2(2)]); +% get the optional arguments +multiple = keyval('multiple', varargin); if isempty(multiple), multiple = false; end + +if multiple + error('not yet implemented'); +else + k = waitforbuttonpress; + point1 = get(gca,'CurrentPoint'); % button down detected + finalRect = rbbox; % return figure units + point2 = get(gca,'CurrentPoint'); % button up detected + point1 = point1(1,1:2); % extract x and y + point2 = point2(1,1:2); + x = sort([point1(1) point2(1)]); + y = sort([point1(2) point2(2)]); +end + + diff --git a/external/fieldtrip/private/select_channel.m b/external/fieldtrip/private/select_channel.m index b56ce30..f00db25 100644 --- a/external/fieldtrip/private/select_channel.m +++ b/external/fieldtrip/private/select_channel.m @@ -1,4 +1,4 @@ -function label = select_channel(h, eventdata, varargin) +function select_channel(handle, eventdata, varargin) % SELECT_CHANNEL is a helper function that can be used as callback function % in a figure. It allows the user to select a channel. The channel labels @@ -7,10 +7,11 @@ % Use as % label = select_channel(h, eventdata, ...) % The first two arguments are automatically passed by Matlab to any -% callback function. Additional options should be specified in key-value -% pairs and can be -% 'callback' = function handle to be executed after channels have been -% selected +% callback function. +% +% Additional options should be specified in key-value pairs and can be +% 'callback' = function handle to be executed after channels have been selected +% % You can pass additional arguments to the callback function in a cell-array % like {@function_handle,arg1,arg2} % @@ -26,8 +27,13 @@ % info.label = lay.label % guidata(gcf, info) % -% % add this function ass callback -% set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', @disp}) +% % add this function as the callback to make a single selection +% set(gcf, 'WindowButtonDownFcn', {@select_channel, 'callback', @disp}) +% +% % or to make multiple selections +% set(gcf, 'WindowButtonDownFcn', {@select_channel, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonDownFcn'}) +% set(gcf, 'WindowButtonUpFcn', {@select_channel, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonDownFcn'}) +% set(gcf, 'WindowButtonMotionFcn', {@select_channel, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonDownFcn'}) % % Subsequently you can click in the figure and you'll see that the disp % function is executed as callback and that it displays the selected @@ -36,6 +42,9 @@ % Copyright (C) 2009, Robert Oostenveld % % $Log: select_channel.m,v $ +% Revision 1.3 2009/07/14 13:18:33 roboos +% updated channel selection, use select_range and two local helper functions, also support multiple selections +% % Revision 1.2 2009/05/12 18:10:43 roboos % added handling of follow-up callback function % @@ -44,39 +53,57 @@ % % get optional input arguments -callback = keyval('callback', varargin{:}); +callback = keyval('callback', varargin); +multiple = keyval('multiple', varargin); if isempty(multiple), multiple = false; end -pos = get(gca, 'CurrentPoint'); -x = pos(1,1); -y = pos(1,2); +% convert 'yes/no' string to boolean value +multiple = istrue(multiple); -info = guidata(h); -chan_x = info.x; -chan_y = info.y; -chan_lab = info.label; +if multiple + % the selection is done using select_range, which will subsequently call select_channel_multiple + set(gcf, 'WindowButtonDownFcn', {@select_range, 'multiple', true, 'callback', {@select_channel_multiple, callback}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonUpFcn', {@select_range, 'multiple', true, 'callback', {@select_channel_multiple, callback}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_range, 'multiple', true, 'callback', {@select_channel_multiple, callback}, 'event', 'WindowButtonMotionFcn'}); +else + % the selection is done using select_channel_single + pos = get(gca, 'CurrentPoint'); + pos = pos(1,1:2); + select_channel_single(pos, callback) +end % if multiple -% compute the distance between the clicked point and all channels -chan_pos = [chan_x chan_y]; -chan_dist = dist(chan_pos'); -chan_dist = triu(chan_dist, 1); -chan_dist = chan_dist(:); -chan_dist = chan_dist(chan_dist>0); -% allow for some tolerance in the clicking -chan_dist = median(chan_dist); -tolerance = 0.3*chan_dist; -dx = chan_x - x; -dy = chan_y - y; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION to assist in the selection of a single channel +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_channel_single(pos, callback) + +info = guidata(gcf); +x = info.x; +y = info.y; +label = info.label; + +% compute a tolerance measure +distance = dist([x y]'); +distance = triu(distance, 1); +distance = distance(:); +distance = distance(distance>0); +distance = median(distance); +tolerance = 0.3*distance; + +% compute the distance between the clicked point and all channels +dx = x - pos(1); +dy = y - pos(2); dd = sqrt(dx.^2 + dy.^2); [d, i] = min(dd); if d=range(i, 1) & x<=range(i, 2) & y>=range(i, 3) & y<=range(i, 4)); end +label = label(select); -uiresume; % ?? +% execute the original callback with the selected channels as input argument +if any(select) + if ~isempty(callback) + if isa(callback, 'cell') + % the callback specifies a function and additional arguments + funhandle = callback{1}; + funargs = callback(2:end); + feval(funhandle, label, funargs{:}); + else + % the callback only specifies a function + funhandle = callback; + feval(funhandle, label); + end + end +end diff --git a/external/fieldtrip/private/select_point.m b/external/fieldtrip/private/select_point.m new file mode 100644 index 0000000..d1ceaa3 --- /dev/null +++ b/external/fieldtrip/private/select_point.m @@ -0,0 +1,113 @@ +function [selected] = select_point(pos, varargin) + +% SELECT_POINT helper function for selecting a one or multiple points +% in the current figure using the mouse. +% +% Use as +% [selected] = select_point(pos, ...) +% +% It returns a list of the [x y] coordinates of the selected points. +% +% Optional input arguments should come in key-value pairs and can include +% 'multiple' true/false, make multiple selections, pressing "q" on the keyboard finalizes the selection (default = false) +% 'nearest' true/false (default = true) +% +% Example use +% pos = randn(10,2); +% figure +% plot(pos(:,1), pos(:,2), '.') +% select_point(pos) + +% $Log: select_point.m,v $ +% Revision 1.2 2009/06/30 11:46:15 roboos +% fixed docu +% +% Revision 1.1 2009/06/30 11:44:34 roboos +% renamed select_pointd into select_point for consistency with plot_topo +% +% Revision 1.7 2009/06/22 12:33:11 crimic +% minor change +% +% Revision 1.6 2009/06/16 08:17:40 crimic +% added check on input +% +% Revision 1.5 2009/06/15 15:46:45 roboos +% first implementation of point3d, multiple changes to point2d, still some work to be done to make them consistent +% +% Revision 1.4 2009/06/15 13:43:27 roboos +% reimplemented from scratch +% +% Revision 1.3 2009/06/04 10:51:09 roboos +% only whitespace +% +% Revision 1.2 2009/06/03 11:23:46 crimic +% first implementation +% + + +% get optional input arguments +nearest = keyval('nearest', varargin); if isempty(nearest), nearest = true; end +multiple = keyval('multiple', varargin); if isempty(multiple), multiple = false; end + +% ensure that it is boolean +nearest = istrue(nearest); +multiple = istrue(multiple); + +if multiple + fprintf('select multiple points by clicking in the figure, press "q" if you are done\n'); +end + +x = []; +y = []; +done = false; + +selected = zeros(0,3); + +% ensure that "q" is not the current character, which happens if you reuse the same figure +set(gcf, 'CurrentCharacter', 'x') + +while ~done + k = waitforbuttonpress; + point = get(gca,'CurrentPoint'); % button down detected + key = get(gcf,'CurrentCharacter'); % which key was pressed (if any)? + if strcmp(key, 'q') + % we are done with the clicking + done = true; + else + % add the current point + x(end+1) = point(1,1); + y(end+1) = point(1,2); + end + + if ~multiple + done = true; + end +end + +if nearest && ~isempty(pos) + % determine the points that are the nearest to the displayed points + selected = []; + + % compute the distance between the points to get an estimate of the tolerance + dp = dist(pos'); + dp = triu(dp, 1); + dp = dp(:); + dp = dp(dp>0); + % allow for some tolerance in the clicking + dp = median(dp); + tolerance = 0.3*dp; + + for i=1:length(x) + % compute the distance between the clicked position and all points + dx = pos(:,1) - x(i); + dy = pos(:,2) - y(i); + dd = sqrt(dx.^2 + dy.^2); + [d, i] = min(dd); + if d0); + % allow for some tolerance in the clicking + dp = median(dp); + tolerance = 0.3*dp; + + for i=1:length(x) + % compute the distance between the clicked position and all points + dx = pos(:,1) - x(i); + dy = pos(:,2) - y(i); + dd = sqrt(dx.^2 + dy.^2); + [d, i] = min(dd); + if d1 + warning('using the first patch object in the figure'); + h = h(1); +end + +selected = zeros(0,3); + +done = false; +while ~done + k = waitforbuttonpress; + [p v vi facev facei] = select3d(h); + key = get(gcf,'CurrentCharacter'); % which key was pressed (if any)? + + if strcmp(key, 'q') + % finished selecting points + done = true; + else + % a new point was selected + if nearest + selected(end+1,:) = v; + else + selected(end+1,:) = p; + end % if nearest + fprintf('selected point at [%f %f %f]\n', selected(end,1), selected(end,2), selected(end,3)); + end + + if ~multiple + done = true; + end +end + diff --git a/external/fieldtrip/private/select_range.m b/external/fieldtrip/private/select_range.m new file mode 100644 index 0000000..f1e535a --- /dev/null +++ b/external/fieldtrip/private/select_range.m @@ -0,0 +1,239 @@ +function select_range(handle, eventdata, varargin) + +% SELECT_RANGE is a helper function that can be used as callback function +% in a figure. It allows the user to select a horizontal or a vertical +% range, or one or multiple boxes. +% +% Example +% x = randn(10,1); +% y = randn(10,1); +% figure; plot(x, y, '.'); +% +% set(gcf, 'WindowButtonDownFcn', {@select_range, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonDownFcn'}); +% set(gcf, 'WindowButtonUpFcn', {@select_range, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonUpFcn'}); +% set(gcf, 'WindowButtonMotionFcn', {@select_range, 'multiple', true, 'callback', @disp, 'event', 'WindowButtonMotionFcn'}); +% +% set(gcf, 'WindowButtonDownFcn', {@select_range, 'multiple', false, 'xrange', false, 'yrange', false, 'callback', @disp, 'event', 'WindowButtonDownFcn'}); +% set(gcf, 'WindowButtonUpFcn', {@select_range, 'multiple', false, 'xrange', false, 'yrange', false, 'callback', @disp, 'event', 'WindowButtonUpFcn'}); +% set(gcf, 'WindowButtonMotionFcn', {@select_range, 'multiple', false, 'xrange', false, 'yrange', false, 'callback', @disp, 'event', 'WindowButtonMotionFcn'}); + +% Copyright (C) 2009, Robert Oostenveld +% +% $Log: select_range.m,v $ +% Revision 1.5 2009/08/04 11:56:55 roboos +% again a change in the handling user data +% added explicit option for clearing the user data in the figure +% +% Revision 1.4 2009/08/03 20:39:16 roboos +% reverted to revision 1.2 and changed the setappdata handling +% +% Revision 1.2 2009/07/30 19:10:25 ingnie +% deleted disp(callback) +% +% Revision 1.1 2009/07/14 13:17:41 roboos +% implemented new function, to be used as callback in interactive data selection +% + +% get the optional arguments +event = keyval('event', varargin); +callback = keyval('callback', varargin); +multiple = keyval('multiple', varargin); if isempty(multiple), multiple = false; end +xrange = keyval('xrange', varargin); if isempty(xrange), xrange = true; end +yrange = keyval('yrange', varargin); if isempty(yrange), yrange = true; end +clear = keyval('clear', varargin); if isempty(clear), clear = false; end + +% convert 'yes/no' string to boolean value +multiple = istrue(multiple); +xrange = istrue(xrange); +yrange = istrue(yrange); + +p = handle; +while ~isequal(p, 0) + handle = p; + p = get(handle, 'parent'); +end + +if ishandle(handle) + userData = getappdata(handle, 'select_range_m'); +else + userData = []; +end + +if isempty(userData) + userData.range = []; % this is a Nx4 matrix with the selection range + userData.box = []; % this is a Nx1 vector with the line handle +end + +p = get(gca, 'CurrentPoint'); +p = p(1,1:2); + +abc = axis; +xLim = abc(1:2); +yLim = abc(3:4); + +% limit cursor coordinates +if p(1)xLim(2), p(1)=xLim(2); end; +if p(2)yLim(2), p(2)=yLim(2); end; + +% determine whether the user is currently making a selection +selecting = numel(userData.range)>0 && any(isnan(userData.range(end,:))); +pointonly = ~xrange && ~yrange; + +if pointonly && multiple + warning('multiple selections are not possible for a point'); + multiple = false; +end + +switch event + case 'WindowButtonDownFcn' + if inSelection(p, userData.range) + % the user has clicked in one of the existing selections + evalCallback(callback, userData.range); + if clear + delete(userData.box(ishandle(userData.box))); + userData.range = []; + userData.box = []; + set(handle, 'Pointer', 'crosshair'); + end + + else + if ~multiple + % start with a new selection + delete(userData.box(ishandle(userData.box))); + userData.range = []; + userData.box = []; + end + + % add a new selection range + userData.range(end+1,1:4) = nan; + userData.range(end,1) = p(1); + userData.range(end,3) = p(2); + + % add a new selection box + xData = [nan nan nan nan nan]; + yData = [nan nan nan nan nan]; + userData.box(end+1) = line(xData, yData); + end + + case 'WindowButtonUpFcn' + if selecting + % select the other corner of the box + userData.range(end,2) = p(1); + userData.range(end,4) = p(2); + end + + if multiple && ~isempty(userData.range) && ~diff(userData.range(end,1:2)) && ~diff(userData.range(end,3:4)) + % start with a new selection + delete(userData.box(ishandle(userData.box))); + userData.range = []; + userData.box = []; + end + + if ~isempty(userData.range) + % ensure that the selection is sane + if diff(userData.range(end,1:2))<0 + userData.range(end,1:2) = userData.range(end,[2 1]); + end + if diff(userData.range(end,3:4))<0 + userData.range(end,3:4) = userData.range(end,[4 3]); + end + if pointonly + % only select a single point + userData.range(end,2) = userData.range(end,1); + userData.range(end,4) = userData.range(end,3); + elseif ~xrange + % only select along the y-axis + userData.range(end,1:2) = [-inf inf]; + elseif ~yrange + % only select along the x-axis + userData.range(end,3:4) = [-inf inf]; + end + end + + if pointonly && ~multiple + evalCallback(callback, userData.range); + if clear + delete(userData.box(ishandle(userData.box))); + userData.range = []; + userData.box = []; + set(handle, 'Pointer', 'crosshair'); + end + end + + case 'WindowButtonMotionFcn' + if selecting && ~pointonly + % update the selection box + if xrange + x1 = userData.range(end,1); + x2 = p(1); + else + x1 = xLim(1); + x2 = xLim(2); + end + if yrange + y1 = userData.range(end,3); + y2 = p(2); + else + y1 = yLim(1); + y2 = yLim(2); + end + + xData = [x1 x2 x2 x1 x1]; + yData = [y1 y1 y2 y2 y1]; + set(userData.box(end), 'xData', xData); + set(userData.box(end), 'yData', yData); + set(userData.box(end), 'Color', [0 0 0]); + set(userData.box(end), 'EraseMode', 'xor'); + set(userData.box(end), 'LineStyle', '--'); + set(userData.box(end), 'LineWidth', 1.5); + set(userData.box(end), 'Visible', 'on'); + + else + % update the cursor + if inSelection(p, userData.range) + set(handle, 'Pointer', 'hand'); + else + set(handle, 'Pointer', 'crosshair'); + end + end + + otherwise + error('unexpected event "%s"', event); + +end % switch event + +% put the modified selections back into the figure +if ishandle(handle) + setappdata(handle, 'select_range_m', userData); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function retval = inSelection(p, range) +if isempty(range) + retval = false; +else + retval = (p(1)>=range(:,1) & p(1)<=range(:,2) & p(2)>=range(:,3) & p(2)<=range(:,4)); + retval = any(retval); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function evalCallback(callback, val) +if ~isempty(callback) + if isa(callback, 'cell') + % the callback specifies a function and additional arguments + funhandle = callback{1}; + funargs = callback(2:end); + feval(funhandle, val, funargs{:}); + else + % the callback only specifies a function + funhandle = callback; + feval(funhandle, val); + end +end + diff --git a/external/fieldtrip/private/selectdata.m b/external/fieldtrip/private/selectdata.m index ace76a0..5850d28 100644 --- a/external/fieldtrip/private/selectdata.m +++ b/external/fieldtrip/private/selectdata.m @@ -29,6 +29,22 @@ % Copyright (C) 2009, Jan-Mathijs Schoffelen % % $Log: selectdata.m,v $ +% Revision 1.10 2009/08/18 09:55:46 jansch +% included possibility to concatenate over grid positions, allowing for cutting +% the dipole grid and glueing it together later on +% +% Revision 1.9 2009/08/17 08:41:19 jansch +% multiple changes +% +% Revision 1.8 2009/07/15 12:11:57 jansch +% fixed small bug +% +% Revision 1.7 2009/07/06 09:41:18 jansch +% multiple changes. allowing for selection of rpt in frequency data when input +% data has rpttap. allowing for grandaveraging functionality in the case of +% multiple inputs with the same dimensionalities. this is equivalent to the +% XXXgrandaverage functions with keepindividual = 'yes'. +% % Revision 1.6 2009/04/14 18:29:32 roboos % deleted the subfunction istrue, since it now is a seperate function % @@ -53,7 +69,7 @@ dimord = cell(1,length(data)); for k = 1:length(data) - data{k} = checkdata(data{k}, 'datatype', {'freq' 'timelock' 'source', 'volume'}); + data{k} = checkdata(data{k}, 'datatype', {'freq' 'timelock' 'source', 'volume', 'freqmvar'}); [dtype{k}, dimord{k}] = datatype(data{k}); end @@ -70,6 +86,7 @@ istlck = datatype(data{1},'timelock'); issource = datatype(data{1},'source'); isvolume = datatype(data{1},'volume'); +isfreqmvar = datatype(data{1},'freqmvar'); selchan = keyval('channel', kvp); selectchan = ~isempty(selchan); selfoi = keyval('foilim', kvp); selectfoi = ~isempty(selfoi); @@ -84,6 +101,9 @@ avgoverroi = keyval('avgoverroi', kvp); if isempty(avgoverroi), avgoverroi = false; end avgoverrpt = keyval('avgoverrpt', kvp); if isempty(avgoverrpt), avgoverrpt = false; end +% create anonymous function and apply it to the boolean input arguments +istrue = @(x)(ischar(x) && (strcmpi(x, 'yes') || strcmpi(x, 'true')) || (~isempty(x) && numel(x)==1 && x==1)); + % ensure that these are boolean arguments, optionally convert from "yes"/"no" to true/false avgoverchan = istrue(avgoverchan); avgoverfreq = istrue(avgoverfreq); @@ -96,7 +116,7 @@ end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% from here on the data is concatenated +% concatenate the data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if length(data)>1, @@ -108,33 +128,39 @@ param = {param}; end - dimtok = tokenize(dimord{1}, '_'); + dimtok = tokenize(dimord{1}, '_'); dimtok(strmatch('chan', dimtok)) = {'label'}; % data.chan does not exist - dimmat = zeros(length(dimtok), length(data)); + dimmat = zeros(length(dimtok), length(data)); dimmat(:,1) = 1; for k = 1:length(dimtok) - try, + if isempty(strfind(dimtok{k},'rpt')), dimdat = getfield(data{1}, dimtok{k}); - catch - % dimtok is probably 'rpt' or so - dimdat = getsubfield(data{1}, param{1}); + else + % dimtok is 'rpt' or 'rpttap' + dimdat = size(getsubfield(data{1}, param{1}),1); end for m = 2:length(data) - try, + if isempty(strfind(dimtok{k},'rpt')), dimdat2 = getfield(data{m},dimtok{k}); - catch - % dimtok is probably 'rpt' or so - dimdat2 = getsubfield(data{m}, param{1}); + else + % dimtok is 'rpt' or 'rpttap' + dimdat2 = size(getsubfield(data{m}, param{1}),1); end try, dimmat(k,m) = all(dimdat(:)==dimdat2(:)); catch end; try, dimmat(k,m) = all(cellfun(@isequal,dimdat,dimdat2)); catch end; end end catdim = find(sum(dimmat,2)1, error('ambiguous dimensions for concatenation'); + elseif isempty(catdim) && isempty(strmatch('rpt',dimtok)) && isempty(strmatch('rpttap',dimtok)), + %treat as individual observations: prepend a first dimension 'rpt' + %(so this part should be able to cover the functionality of ...grandaverage) + catdim = 0; + elseif isempty(catdim) + error('don''t know how to concatenate the data'); end % concatenate the data @@ -143,28 +169,65 @@ for m = 1:length(tmp) tmp{m} = getsubfield(data{m},param{k}); end - data{1} = setsubfield(data{1}, param{k}, cat(catdim,tmp{:})); + if catdim==0, + ndim = length(size(tmp{1})); + data{1} = setsubfield(data{1}, param{k}, permute(cat(ndim+1,tmp{:}),[ndim+1 1:ndim])); + else + data{1} = setsubfield(data{1}, param{k}, cat(catdim,tmp{:})); + end end + if catdim==0, + %a dimension has been prepended + dimtok = ['rpt' dimtok]; + catdim = 1; + dimord{1} = ['rpt_',dimord{1}]; + if issubfield(data{1}, 'dim'), + dim = [length(data) data{1}.dim]; + end + else + if issubfield(data{1}, 'dim'), + dim = data{1}.dim; + end + end + % concatenate the relevant descriptive fields in the data-structure if ~strcmp(dimtok{catdim},'rpt') && ~strcmp(dimtok{catdim},'rpttap'), for k = 1:length(data) if k==1, tmp = getsubfield(data{k}, dimtok{catdim}); + if strcmp(dimtok{catdim},'pos') && isfield(data{k},'inside'), + tmpinside = getfield(data{k}, 'inside'); + tmpoutside = getfield(data{k}, 'outside'); + tmpnvox = numel(tmpinside)+numel(tmpoutside); + end else if strcmp(dimtok{catdim},'pos'), tmp = [tmp; getsubfield(data{k}, dimtok{catdim})]; sortflag = 0; - else + + %FIXME make this robust, now inside as vector is assumed + if exist('tmpinside', 'var') + tmpx = getfield(data{k}, 'inside'); + tmpx2 = getfield(data{k}, 'outside'); + tmpnvox = numel(tmpinside)+numel(tmpoutside); + tmpinside = [tmpinside(:)' tmpnvox(end)+tmpx(:)']; + tmpoutside = [tmpoutside(:)' tmpnvox(end)+tmpx2(:)']; + end + else tmp = [tmp getsubfield(data{k}, dimtok{catdim})]; sortflag = 1; end end end data{1} = setsubfield(data{1}, dimtok{catdim}, tmp); + if exist('tmpinside', 'var') + data{1} = setfield(data{1}, 'inside', tmpinside); + data{1} = setfield(data{1}, 'outside', tmpoutside); + end else % no such field as {'label','time','freq','pos'} has to be concatenated sortflag = 0; end - + % concatenate the relevant descriptive fields in the data-structure (continued) tryfields = {'cumsumcnt' 'cumtapcnt' 'dof'}; for k = 1:length(tryfields) @@ -182,9 +245,9 @@ end % FIXME this is ugly: solve it - if issource || isvolume, - data{1}.dim(catdim) = max(size(tmp)); - end + %if issource || isvolume, + % data{1}.dim(catdim) = max(size(tmp)); + %end % sort concatenated data FIXME this is also ugly and depends on tmp if sortflag && ~iscell(tmp), @@ -196,19 +259,24 @@ tmp = ipermute(tmp(ind,:,:,:,:), [catdim setdiff(1:length(size(tmp)), catdim)]); data{1} = setsubfield(data{1}, param{k}, tmp); end - elseif iscell(tmp) + elseif exist('tmp', 'var') && iscell(tmp) %in this case (ugly!) tmp is probably a cell-array containing functional data end - + % remove unspecified parameters - rmparam = setdiff(parameterselection('all',data{1}),param); + rmparam = setdiff(parameterselection('all',data{1}),[param 'pos' 'inside' 'outside']); for k = 1:length(rmparam) data{1} = rmsubfield(data{1}, rmparam{k}); end - + % keep the first structure only - data = data{1}; - dimord = dimord{1}; + data = data{1}; + dimord = dimord{1}; + data.dimord = dimord; + if isfield(data, 'dim'), + %data.dim = dim; + data.dim = size(data.(param{1})); + end else % nothing to do @@ -216,11 +284,25 @@ dimord = dimord{1}; end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% from here on the data is concatenated +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % determine the subselection in the data if selectrpt, dimtok = tokenize(data.dimord, '_'); if strcmp(dimtok{1}, 'rpttap'), - error('here you have to ensure the correct handling of tapers'); + %account for the tapers + sumtapcnt = [0;cumsum(data.cumtapcnt(:))]; + begtapcnt = sumtapcnt(1:end-1)+1; + endtapcnt = sumtapcnt(2:end); + begtapcnt = begtapcnt(selrpt); + endtapcnt = endtapcnt(selrpt); + tapers = zeros(1,sumtapcnt(end)); + for k = 1:length(begtapcnt) + tapers(begtapcnt(k):endtapcnt(k)) = 1; + end + selrpt = find(tapers); else % do nothing end @@ -232,7 +314,16 @@ if selectfoi, if length(selfoi)==1, selfoi(2) = selfoi; end; - selfoi = nearest(data.freq, selfoi(1)):nearest(data.freq, selfoi(2)); + if length(selfoi)==2, + %treat selfoi as lower limit and upper limit + selfoi = nearest(data.freq, selfoi(1)):nearest(data.freq, selfoi(2)); + else + %treat selfoi as a list of frequencies + for k=1:length(selfoi) + tmpfoi(k) = nearest(data.freq, selfoi(k)); + end + selfoi = tmpfoi; + end end if selecttoi, @@ -245,6 +336,24 @@ end if isfreq, + if isfield(data, 'labelcmb'), + %there is a crsspctrm field, this will only be selectdimmed + %if we apply a trick + tmpdata = data; + tmpdata.label = data.labelcmb; + if selectrpt, tmpdata = seloverdim(tmpdata, 'rpt', selrpt); end + if selectchan, tmpdata = seloverdim(tmpdata, 'chan', selchan); end + if selectfoi, tmpdata = seloverdim(tmpdata, 'freq', selfoi); end + if selecttoi, tmpdata = seloverdim(tmpdata, 'time', seltoi); end + % average over dimensions + if avgoverrpt, data = avgoverdim(data, 'rpt'); end + if avgoverchan, data = avgoverdim(data, 'chan'); end + if avgoverfreq, data = avgoverdim(data, 'freq'); end + if avgovertime, data = avgoverdim(data, 'time'); end + crsspctrm = tmpdata.crsspctrm; clear tmpdata; + else + crsspctrm = []; + end % make the subselection if selectrpt, data = seloverdim(data, 'rpt', selrpt); end if selectchan, data = seloverdim(data, 'chan', selchan); end @@ -255,6 +364,7 @@ if avgoverchan, data = avgoverdim(data, 'chan'); end if avgoverfreq, data = avgoverdim(data, 'freq'); end if avgovertime, data = avgoverdim(data, 'time'); end + if ~isempty(crsspctrm), data.crsspctrm = crsspctrm; end elseif istlck, % make the subselection @@ -269,9 +379,24 @@ if avgovertime, data = avgoverdim(data, 'time'); end elseif issource, - error('this is not yet implemented'); + %FIXME fill in everything + if selectrpt, data = seloverdim(data, 'rpt', selrpt); end + if selectfoi, data = seloverdim(data, 'freq', selfoi); end + if avgoverrpt, data = avgoverdim(data, 'rpt'); end + if avgoverfreq, data = avgoverdim(data, 'freq'); end elseif isvolume, error('this is not yet implemented'); +elseif isfreqmvar, + % make the subselection + if selectrpt, data = seloverdim(data, 'rpt', selrpt); end + if selectchan, data = seloverdim(data, 'chan', selchan); end + if selectfoi, data = seloverdim(data, 'freq', selfoi); end + if selecttoi, data = seloverdim(data, 'time', seltoi); end + % average over dimensions + if avgoverrpt, data = avgoverdim(data, 'rpt'); end + if avgoverchan, data = avgoverdim(data, 'chan'); end + if avgoverfreq, data = avgoverdim(data, 'freq'); end + if avgovertime, data = avgoverdim(data, 'time'); end end diff --git a/external/fieldtrip/private/senslabel.m b/external/fieldtrip/private/senslabel.m index 81db081..f75cc93 100644 --- a/external/fieldtrip/private/senslabel.m +++ b/external/fieldtrip/private/senslabel.m @@ -6,6 +6,7 @@ % label = senslabel(type) % % The input type can be any of the following +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -40,6 +41,12 @@ % Copyright (C) 2008, Vladimir Litvak % % $Log: senslabel.m,v $ +% Revision 1.4 2009/07/29 07:07:59 roboos +% use caching of input and output arguments to speed up the handling of multiple calls with the same input argument +% +% Revision 1.3 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.2 2009/05/07 13:34:09 roboos % added ctf64 % @@ -59,6 +66,21 @@ % moved definition of channel label sets to seperate function % +% these are for remembering the type on subsequent calls with the same input arguments +persistent previous_argin previous_argout + +if nargin<1 + % ensure that all input arguments are defined + type = []; +end + +current_argin = {type}; +if isequal(current_argin, previous_argin) + % don't do the type detection again, but return the previous values from cache + label = previous_argout{1}; + return +end + % prevent defining all possible labels if not needed isbiosemi = ~isempty(regexp(type, '^biosemi', 'once')); isbti = ~isempty(regexp(type, '^bti', 'once')); @@ -69,1836 +91,1912 @@ isneuromag = ~isempty(regexp(type, '^neuromag', 'once')); if isbti - btiref = { - 'MRxA' - 'MRyA' - 'MRzA' - 'MLxA' - 'MLyA' - 'MLzA' - 'MCxA' - 'MCyA' - 'MCzA' - 'MRxaA' - 'MRyaA' - 'MRzaA' - 'MLxaA' - 'MLyaA' - 'MLzaA' - 'MCxaA' - 'MCyaA' - 'MCzaA' - 'GxxA' - 'GyxA' - 'GzxA' - 'GyyA' - 'GzyA' - }; + btiref = { + 'MRxA' + 'MRyA' + 'MRzA' + 'MLxA' + 'MLyA' + 'MLzA' + 'MCxA' + 'MCyA' + 'MCzA' + 'MRxaA' + 'MRyaA' + 'MRzaA' + 'MLxaA' + 'MLyaA' + 'MLzaA' + 'MCxaA' + 'MCyaA' + 'MCzaA' + 'GxxA' + 'GyxA' + 'GzxA' + 'GyyA' + 'GzyA' + }; - bti148 = cell(148,1); - for i=1:148 - bti148{i,1} = sprintf('A%d', i); - end + bti148 = cell(148,1); + for i=1:148 + bti148{i,1} = sprintf('A%d', i); + end - bti148_planar = cell(148,1); - for i=1:148 - bti148_planar{i,1} = sprintf('A%d_dH', i); - bti148_planar{i,2} = sprintf('A%d_dV', i); - end + bti148_planar = cell(148,1); + for i=1:148 + bti148_planar{i,1} = sprintf('A%d_dH', i); + bti148_planar{i,2} = sprintf('A%d_dV', i); + end - bti248 = cell(248,1); - for i=1:248 - bti248{i,1} = sprintf('A%d', i); - end + bti248 = cell(248,1); + for i=1:248 + bti248{i,1} = sprintf('A%d', i); + end - bti248_planar = cell(248,2); - for i=1:248 - bti248_planar{i,1} = sprintf('A%d_dH', i); - bti248_planar{i,2} = sprintf('A%d_dV', i); - end + bti248_planar = cell(248,2); + for i=1:248 + bti248_planar{i,1} = sprintf('A%d_dH', i); + bti248_planar{i,2} = sprintf('A%d_dV', i); + end end % if isbti if isctf - ctfref = { - 'BG1' - 'BG2' - 'BG3' - 'BP1' - 'BP2' - 'BP3' - 'BR1' - 'BR2' - 'BR3' - 'G11' - 'G12' - 'G13' - 'G22' - 'G23' - 'P11' - 'P12' - 'P13' - 'P22' - 'P23' - 'Q11' - 'Q12' - 'Q13' - 'Q22' - 'Q23' - 'R11' - 'R12' - 'R13' - 'R22' - 'R23' - }; + ctfref = { + 'BG1' + 'BG2' + 'BG3' + 'BP1' + 'BP2' + 'BP3' + 'BR1' + 'BR2' + 'BR3' + 'G11' + 'G12' + 'G13' + 'G22' + 'G23' + 'P11' + 'P12' + 'P13' + 'P22' + 'P23' + 'Q11' + 'Q12' + 'Q13' + 'Q22' + 'Q23' + 'R11' + 'R12' + 'R13' + 'R22' + 'R23' + }; - ctfheadloc = { - 'HLC0011' - 'HLC0012' - 'HLC0013' - 'HLC0021' - 'HLC0022' - 'HLC0023' - 'HLC0031' - 'HLC0032' - 'HLC0033' - 'HLC0018' - 'HLC0028' - 'HLC0038' - 'HLC0014' - 'HLC0015' - 'HLC0016' - 'HLC0017' - 'HLC0024' - 'HLC0025' - 'HLC0026' - 'HLC0027' - 'HLC0034' - 'HLC0035' - 'HLC0036' - 'HLC0037' - }; + ctfheadloc = { + 'HLC0011' + 'HLC0012' + 'HLC0013' + 'HLC0021' + 'HLC0022' + 'HLC0023' + 'HLC0031' + 'HLC0032' + 'HLC0033' + 'HLC0018' + 'HLC0028' + 'HLC0038' + 'HLC0014' + 'HLC0015' + 'HLC0016' + 'HLC0017' + 'HLC0024' + 'HLC0025' + 'HLC0026' + 'HLC0027' + 'HLC0034' + 'HLC0035' + 'HLC0036' + 'HLC0037' + }; - ctf64 = { - 'SL11' - 'SL12' - 'SL13' - 'SL14' - 'SL15' - 'SL16' - 'SL17' - 'SL18' - 'SL19' - 'SL21' - 'SL22' - 'SL23' - 'SL24' - 'SL25' - 'SL26' - 'SL27' - 'SL28' - 'SL29' - 'SL31' - 'SL32' - 'SL33' - 'SL34' - 'SL35' - 'SL41' - 'SL42' - 'SL43' - 'SL44' - 'SL45' - 'SL46' - 'SL47' - 'SL51' - 'SL52' - 'SR11' - 'SR12' - 'SR13' - 'SR14' - 'SR15' - 'SR16' - 'SR17' - 'SR18' - 'SR19' - 'SR21' - 'SR22' - 'SR23' - 'SR24' - 'SR25' - 'SR26' - 'SR27' - 'SR28' - 'SR29' - 'SR31' - 'SR32' - 'SR33' - 'SR34' - 'SR35' - 'SR41' - 'SR42' - 'SR43' - 'SR44' - 'SR45' - 'SR46' - 'SR47' - 'SR51' - 'SR52' - }; + ctf64 = { + 'SL11' + 'SL12' + 'SL13' + 'SL14' + 'SL15' + 'SL16' + 'SL17' + 'SL18' + 'SL19' + 'SL21' + 'SL22' + 'SL23' + 'SL24' + 'SL25' + 'SL26' + 'SL27' + 'SL28' + 'SL29' + 'SL31' + 'SL32' + 'SL33' + 'SL34' + 'SL35' + 'SL41' + 'SL42' + 'SL43' + 'SL44' + 'SL45' + 'SL46' + 'SL47' + 'SL51' + 'SL52' + 'SR11' + 'SR12' + 'SR13' + 'SR14' + 'SR15' + 'SR16' + 'SR17' + 'SR18' + 'SR19' + 'SR21' + 'SR22' + 'SR23' + 'SR24' + 'SR25' + 'SR26' + 'SR27' + 'SR28' + 'SR29' + 'SR31' + 'SR32' + 'SR33' + 'SR34' + 'SR35' + 'SR41' + 'SR42' + 'SR43' + 'SR44' + 'SR45' + 'SR46' + 'SR47' + 'SR51' + 'SR52' + }; - ctf151 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC31' - 'MLC32' - 'MLC33' - 'MLC41' - 'MLC42' - 'MLC43' - 'MLF11' - 'MLF12' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF51' - 'MLF52' - 'MLO11' - 'MLO12' - 'MLO21' - 'MLO22' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLP11' - 'MLP12' - 'MLP13' - 'MLP21' - 'MLP22' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC31' - 'MRC32' - 'MRC33' - 'MRC41' - 'MRC42' - 'MRC43' - 'MRF11' - 'MRF12' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF51' - 'MRF52' - 'MRO11' - 'MRO12' - 'MRO21' - 'MRO22' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRP11' - 'MRP12' - 'MRP13' - 'MRP21' - 'MRP22' - 'MRP31' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MZC01' - 'MZC02' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZP01' - 'MZP02' - }; + ctf151 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC31' + 'MLC32' + 'MLC33' + 'MLC41' + 'MLC42' + 'MLC43' + 'MLF11' + 'MLF12' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF51' + 'MLF52' + 'MLO11' + 'MLO12' + 'MLO21' + 'MLO22' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLP11' + 'MLP12' + 'MLP13' + 'MLP21' + 'MLP22' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC31' + 'MRC32' + 'MRC33' + 'MRC41' + 'MRC42' + 'MRC43' + 'MRF11' + 'MRF12' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF51' + 'MRF52' + 'MRO11' + 'MRO12' + 'MRO21' + 'MRO22' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRP11' + 'MRP12' + 'MRP13' + 'MRP21' + 'MRP22' + 'MRP31' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MZC01' + 'MZC02' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZP01' + 'MZP02' + }; - ctf151_planar = cell(151, 2); - for i=1:151 - ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); - ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); - end + ctf151_planar = cell(151, 2); + for i=1:151 + ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); + ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); + end - ctf275 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC16' - 'MLC17' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC25' - 'MLC31' - 'MLC32' - 'MLC41' - 'MLC42' - 'MLC51' - 'MLC52' - 'MLC53' - 'MLC54' - 'MLC55' - 'MLC61' - 'MLC62' - 'MLC63' - 'MLF11' - 'MLF12' - 'MLF13' - 'MLF14' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF24' - 'MLF25' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF35' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF46' - 'MLF51' - 'MLF52' - 'MLF53' - 'MLF54' - 'MLF55' - 'MLF56' - 'MLF61' - 'MLF62' - 'MLF63' - 'MLF64' - 'MLF65' - 'MLF66' - 'MLF67' - 'MLO11' - 'MLO12' - 'MLO13' - 'MLO14' - 'MLO21' - 'MLO22' - 'MLO23' - 'MLO24' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO34' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLO44' - 'MLO51' - 'MLO52' - 'MLO53' - 'MLP11' - 'MLP12' - 'MLP21' - 'MLP22' - 'MLP23' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLP35' - 'MLP41' - 'MLP42' - 'MLP43' - 'MLP44' - 'MLP45' - 'MLP51' - 'MLP52' - 'MLP53' - 'MLP54' - 'MLP55' - 'MLP56' - 'MLP57' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT27' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT36' - 'MLT37' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MLT45' - 'MLT46' - 'MLT47' - 'MLT51' - 'MLT52' - 'MLT53' - 'MLT54' - 'MLT55' - 'MLT56' - 'MLT57' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC16' - 'MRC17' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC25' - 'MRC31' - 'MRC32' - 'MRC41' - 'MRC42' - 'MRC51' - 'MRC52' - 'MRC53' - 'MRC54' - 'MRC55' - 'MRC61' - 'MRC62' - 'MRC63' - 'MRF11' - 'MRF12' - 'MRF13' - 'MRF14' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF24' - 'MRF25' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF35' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF46' - 'MRF51' - 'MRF52' - 'MRF53' - 'MRF54' - 'MRF55' - 'MRF56' - 'MRF61' - 'MRF62' - 'MRF63' - 'MRF64' - 'MRF65' - 'MRF66' - 'MRF67' - 'MRO11' - 'MRO12' - 'MRO13' - 'MRO14' - 'MRO21' - 'MRO22' - 'MRO23' - 'MRO24' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO34' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRO44' - 'MRO51' - 'MRO52' - 'MRO53' - 'MRP11' - 'MRP12' - 'MRP21' - 'MRP22' - 'MRP23' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRP35' - 'MRP41' - 'MRP42' - 'MRP43' - 'MRP44' - 'MRP45' - 'MRP51' - 'MRP52' - 'MRP53' - 'MRP54' - 'MRP55' - 'MRP56' - 'MRP57' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT27' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT36' - 'MRT37' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MRT45' - 'MRT46' - 'MRT47' - 'MRT51' - 'MRT52' - 'MRT53' - 'MRT54' - 'MRT55' - 'MRT56' - 'MRT57' - 'MZC01' - 'MZC02' - 'MZC03' - 'MZC04' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZO03' - 'MZP01' - }; + ctf275 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC16' + 'MLC17' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC25' + 'MLC31' + 'MLC32' + 'MLC41' + 'MLC42' + 'MLC51' + 'MLC52' + 'MLC53' + 'MLC54' + 'MLC55' + 'MLC61' + 'MLC62' + 'MLC63' + 'MLF11' + 'MLF12' + 'MLF13' + 'MLF14' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF24' + 'MLF25' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF35' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF46' + 'MLF51' + 'MLF52' + 'MLF53' + 'MLF54' + 'MLF55' + 'MLF56' + 'MLF61' + 'MLF62' + 'MLF63' + 'MLF64' + 'MLF65' + 'MLF66' + 'MLF67' + 'MLO11' + 'MLO12' + 'MLO13' + 'MLO14' + 'MLO21' + 'MLO22' + 'MLO23' + 'MLO24' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO34' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLO44' + 'MLO51' + 'MLO52' + 'MLO53' + 'MLP11' + 'MLP12' + 'MLP21' + 'MLP22' + 'MLP23' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLP35' + 'MLP41' + 'MLP42' + 'MLP43' + 'MLP44' + 'MLP45' + 'MLP51' + 'MLP52' + 'MLP53' + 'MLP54' + 'MLP55' + 'MLP56' + 'MLP57' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT27' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT36' + 'MLT37' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MLT45' + 'MLT46' + 'MLT47' + 'MLT51' + 'MLT52' + 'MLT53' + 'MLT54' + 'MLT55' + 'MLT56' + 'MLT57' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC16' + 'MRC17' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC25' + 'MRC31' + 'MRC32' + 'MRC41' + 'MRC42' + 'MRC51' + 'MRC52' + 'MRC53' + 'MRC54' + 'MRC55' + 'MRC61' + 'MRC62' + 'MRC63' + 'MRF11' + 'MRF12' + 'MRF13' + 'MRF14' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF24' + 'MRF25' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF35' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF46' + 'MRF51' + 'MRF52' + 'MRF53' + 'MRF54' + 'MRF55' + 'MRF56' + 'MRF61' + 'MRF62' + 'MRF63' + 'MRF64' + 'MRF65' + 'MRF66' + 'MRF67' + 'MRO11' + 'MRO12' + 'MRO13' + 'MRO14' + 'MRO21' + 'MRO22' + 'MRO23' + 'MRO24' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO34' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRO44' + 'MRO51' + 'MRO52' + 'MRO53' + 'MRP11' + 'MRP12' + 'MRP21' + 'MRP22' + 'MRP23' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRP35' + 'MRP41' + 'MRP42' + 'MRP43' + 'MRP44' + 'MRP45' + 'MRP51' + 'MRP52' + 'MRP53' + 'MRP54' + 'MRP55' + 'MRP56' + 'MRP57' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT27' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT36' + 'MRT37' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MRT45' + 'MRT46' + 'MRT47' + 'MRT51' + 'MRT52' + 'MRT53' + 'MRT54' + 'MRT55' + 'MRT56' + 'MRT57' + 'MZC01' + 'MZC02' + 'MZC03' + 'MZC04' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZO03' + 'MZP01' + }; - % f.ck, apparently one channel is missing - ctf275_planar = cell(274,2); - for i=1:274 - ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); - ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); - end + % f.ck, apparently one channel is missing + ctf275_planar = cell(274,2); + for i=1:274 + ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); + ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); + end end % if issctf if isneuromag - neuromag122 = { - 'MEG 001' 'MEG 002' - 'MEG 003' 'MEG 004' - 'MEG 005' 'MEG 006' - 'MEG 007' 'MEG 008' - 'MEG 009' 'MEG 010' - 'MEG 011' 'MEG 012' - 'MEG 013' 'MEG 014' - 'MEG 015' 'MEG 016' - 'MEG 017' 'MEG 018' - 'MEG 019' 'MEG 020' - 'MEG 021' 'MEG 022' - 'MEG 023' 'MEG 024' - 'MEG 025' 'MEG 026' - 'MEG 027' 'MEG 028' - 'MEG 029' 'MEG 030' - 'MEG 031' 'MEG 032' - 'MEG 033' 'MEG 034' - 'MEG 035' 'MEG 036' - 'MEG 037' 'MEG 038' - 'MEG 039' 'MEG 040' - 'MEG 041' 'MEG 042' - 'MEG 043' 'MEG 044' - 'MEG 045' 'MEG 046' - 'MEG 047' 'MEG 048' - 'MEG 049' 'MEG 050' - 'MEG 051' 'MEG 052' - 'MEG 053' 'MEG 054' - 'MEG 055' 'MEG 056' - 'MEG 057' 'MEG 058' - 'MEG 059' 'MEG 060' - 'MEG 061' 'MEG 062' - 'MEG 063' 'MEG 064' - 'MEG 065' 'MEG 066' - 'MEG 067' 'MEG 068' - 'MEG 069' 'MEG 070' - 'MEG 071' 'MEG 072' - 'MEG 073' 'MEG 074' - 'MEG 075' 'MEG 076' - 'MEG 077' 'MEG 078' - 'MEG 079' 'MEG 080' - 'MEG 081' 'MEG 082' - 'MEG 083' 'MEG 084' - 'MEG 085' 'MEG 086' - 'MEG 087' 'MEG 088' - 'MEG 089' 'MEG 090' - 'MEG 091' 'MEG 092' - 'MEG 093' 'MEG 094' - 'MEG 095' 'MEG 096' - 'MEG 097' 'MEG 098' - 'MEG 099' 'MEG 100' - 'MEG 101' 'MEG 102' - 'MEG 103' 'MEG 104' - 'MEG 105' 'MEG 106' - 'MEG 107' 'MEG 108' - 'MEG 109' 'MEG 110' - 'MEG 111' 'MEG 112' - 'MEG 113' 'MEG 114' - 'MEG 115' 'MEG 116' - 'MEG 117' 'MEG 118' - 'MEG 119' 'MEG 120' - 'MEG 121' 'MEG 122' - }; + neuromag122 = { + 'MEG 001' 'MEG 002' + 'MEG 003' 'MEG 004' + 'MEG 005' 'MEG 006' + 'MEG 007' 'MEG 008' + 'MEG 009' 'MEG 010' + 'MEG 011' 'MEG 012' + 'MEG 013' 'MEG 014' + 'MEG 015' 'MEG 016' + 'MEG 017' 'MEG 018' + 'MEG 019' 'MEG 020' + 'MEG 021' 'MEG 022' + 'MEG 023' 'MEG 024' + 'MEG 025' 'MEG 026' + 'MEG 027' 'MEG 028' + 'MEG 029' 'MEG 030' + 'MEG 031' 'MEG 032' + 'MEG 033' 'MEG 034' + 'MEG 035' 'MEG 036' + 'MEG 037' 'MEG 038' + 'MEG 039' 'MEG 040' + 'MEG 041' 'MEG 042' + 'MEG 043' 'MEG 044' + 'MEG 045' 'MEG 046' + 'MEG 047' 'MEG 048' + 'MEG 049' 'MEG 050' + 'MEG 051' 'MEG 052' + 'MEG 053' 'MEG 054' + 'MEG 055' 'MEG 056' + 'MEG 057' 'MEG 058' + 'MEG 059' 'MEG 060' + 'MEG 061' 'MEG 062' + 'MEG 063' 'MEG 064' + 'MEG 065' 'MEG 066' + 'MEG 067' 'MEG 068' + 'MEG 069' 'MEG 070' + 'MEG 071' 'MEG 072' + 'MEG 073' 'MEG 074' + 'MEG 075' 'MEG 076' + 'MEG 077' 'MEG 078' + 'MEG 079' 'MEG 080' + 'MEG 081' 'MEG 082' + 'MEG 083' 'MEG 084' + 'MEG 085' 'MEG 086' + 'MEG 087' 'MEG 088' + 'MEG 089' 'MEG 090' + 'MEG 091' 'MEG 092' + 'MEG 093' 'MEG 094' + 'MEG 095' 'MEG 096' + 'MEG 097' 'MEG 098' + 'MEG 099' 'MEG 100' + 'MEG 101' 'MEG 102' + 'MEG 103' 'MEG 104' + 'MEG 105' 'MEG 106' + 'MEG 107' 'MEG 108' + 'MEG 109' 'MEG 110' + 'MEG 111' 'MEG 112' + 'MEG 113' 'MEG 114' + 'MEG 115' 'MEG 116' + 'MEG 117' 'MEG 118' + 'MEG 119' 'MEG 120' + 'MEG 121' 'MEG 122' + }; - % this is an alternative set of labels without a space in them - neuromag122alt = { - 'MEG001' 'MEG002' - 'MEG003' 'MEG004' - 'MEG005' 'MEG006' - 'MEG007' 'MEG008' - 'MEG009' 'MEG010' - 'MEG011' 'MEG012' - 'MEG013' 'MEG014' - 'MEG015' 'MEG016' - 'MEG017' 'MEG018' - 'MEG019' 'MEG020' - 'MEG021' 'MEG022' - 'MEG023' 'MEG024' - 'MEG025' 'MEG026' - 'MEG027' 'MEG028' - 'MEG029' 'MEG030' - 'MEG031' 'MEG032' - 'MEG033' 'MEG034' - 'MEG035' 'MEG036' - 'MEG037' 'MEG038' - 'MEG039' 'MEG040' - 'MEG041' 'MEG042' - 'MEG043' 'MEG044' - 'MEG045' 'MEG046' - 'MEG047' 'MEG048' - 'MEG049' 'MEG050' - 'MEG051' 'MEG052' - 'MEG053' 'MEG054' - 'MEG055' 'MEG056' - 'MEG057' 'MEG058' - 'MEG059' 'MEG060' - 'MEG061' 'MEG062' - 'MEG063' 'MEG064' - 'MEG065' 'MEG066' - 'MEG067' 'MEG068' - 'MEG069' 'MEG070' - 'MEG071' 'MEG072' - 'MEG073' 'MEG074' - 'MEG075' 'MEG076' - 'MEG077' 'MEG078' - 'MEG079' 'MEG080' - 'MEG081' 'MEG082' - 'MEG083' 'MEG084' - 'MEG085' 'MEG086' - 'MEG087' 'MEG088' - 'MEG089' 'MEG090' - 'MEG091' 'MEG092' - 'MEG093' 'MEG094' - 'MEG095' 'MEG096' - 'MEG097' 'MEG098' - 'MEG099' 'MEG100' - 'MEG101' 'MEG102' - 'MEG103' 'MEG104' - 'MEG105' 'MEG106' - 'MEG107' 'MEG108' - 'MEG109' 'MEG110' - 'MEG111' 'MEG112' - 'MEG113' 'MEG114' - 'MEG115' 'MEG116' - 'MEG117' 'MEG118' - 'MEG119' 'MEG120' - 'MEG121' 'MEG122' - }; + % this is an alternative set of labels without a space in them + neuromag122alt = { + 'MEG001' 'MEG002' + 'MEG003' 'MEG004' + 'MEG005' 'MEG006' + 'MEG007' 'MEG008' + 'MEG009' 'MEG010' + 'MEG011' 'MEG012' + 'MEG013' 'MEG014' + 'MEG015' 'MEG016' + 'MEG017' 'MEG018' + 'MEG019' 'MEG020' + 'MEG021' 'MEG022' + 'MEG023' 'MEG024' + 'MEG025' 'MEG026' + 'MEG027' 'MEG028' + 'MEG029' 'MEG030' + 'MEG031' 'MEG032' + 'MEG033' 'MEG034' + 'MEG035' 'MEG036' + 'MEG037' 'MEG038' + 'MEG039' 'MEG040' + 'MEG041' 'MEG042' + 'MEG043' 'MEG044' + 'MEG045' 'MEG046' + 'MEG047' 'MEG048' + 'MEG049' 'MEG050' + 'MEG051' 'MEG052' + 'MEG053' 'MEG054' + 'MEG055' 'MEG056' + 'MEG057' 'MEG058' + 'MEG059' 'MEG060' + 'MEG061' 'MEG062' + 'MEG063' 'MEG064' + 'MEG065' 'MEG066' + 'MEG067' 'MEG068' + 'MEG069' 'MEG070' + 'MEG071' 'MEG072' + 'MEG073' 'MEG074' + 'MEG075' 'MEG076' + 'MEG077' 'MEG078' + 'MEG079' 'MEG080' + 'MEG081' 'MEG082' + 'MEG083' 'MEG084' + 'MEG085' 'MEG086' + 'MEG087' 'MEG088' + 'MEG089' 'MEG090' + 'MEG091' 'MEG092' + 'MEG093' 'MEG094' + 'MEG095' 'MEG096' + 'MEG097' 'MEG098' + 'MEG099' 'MEG100' + 'MEG101' 'MEG102' + 'MEG103' 'MEG104' + 'MEG105' 'MEG106' + 'MEG107' 'MEG108' + 'MEG109' 'MEG110' + 'MEG111' 'MEG112' + 'MEG113' 'MEG114' + 'MEG115' 'MEG116' + 'MEG117' 'MEG118' + 'MEG119' 'MEG120' + 'MEG121' 'MEG122' + }; - neuromag306 = { - 'MEG 0113' 'MEG 0112' 'MEG 0111' - 'MEG 0122' 'MEG 0123' 'MEG 0121' - 'MEG 0132' 'MEG 0133' 'MEG 0131' - 'MEG 0143' 'MEG 0142' 'MEG 0141' - 'MEG 0213' 'MEG 0212' 'MEG 0211' - 'MEG 0222' 'MEG 0223' 'MEG 0221' - 'MEG 0232' 'MEG 0233' 'MEG 0231' - 'MEG 0243' 'MEG 0242' 'MEG 0241' - 'MEG 0313' 'MEG 0312' 'MEG 0311' - 'MEG 0322' 'MEG 0323' 'MEG 0321' - 'MEG 0333' 'MEG 0332' 'MEG 0331' - 'MEG 0343' 'MEG 0342' 'MEG 0341' - 'MEG 0413' 'MEG 0412' 'MEG 0411' - 'MEG 0422' 'MEG 0423' 'MEG 0421' - 'MEG 0432' 'MEG 0433' 'MEG 0431' - 'MEG 0443' 'MEG 0442' 'MEG 0441' - 'MEG 0513' 'MEG 0512' 'MEG 0511' - 'MEG 0523' 'MEG 0522' 'MEG 0521' - 'MEG 0532' 'MEG 0533' 'MEG 0531' - 'MEG 0542' 'MEG 0543' 'MEG 0541' - 'MEG 0613' 'MEG 0612' 'MEG 0611' - 'MEG 0622' 'MEG 0623' 'MEG 0621' - 'MEG 0633' 'MEG 0632' 'MEG 0631' - 'MEG 0642' 'MEG 0643' 'MEG 0641' - 'MEG 0713' 'MEG 0712' 'MEG 0711' - 'MEG 0723' 'MEG 0722' 'MEG 0721' - 'MEG 0733' 'MEG 0732' 'MEG 0731' - 'MEG 0743' 'MEG 0742' 'MEG 0741' - 'MEG 0813' 'MEG 0812' 'MEG 0811' - 'MEG 0822' 'MEG 0823' 'MEG 0821' - 'MEG 0913' 'MEG 0912' 'MEG 0911' - 'MEG 0923' 'MEG 0922' 'MEG 0921' - 'MEG 0932' 'MEG 0933' 'MEG 0931' - 'MEG 0942' 'MEG 0943' 'MEG 0941' - 'MEG 1013' 'MEG 1012' 'MEG 1011' - 'MEG 1023' 'MEG 1022' 'MEG 1021' - 'MEG 1032' 'MEG 1033' 'MEG 1031' - 'MEG 1043' 'MEG 1042' 'MEG 1041' - 'MEG 1112' 'MEG 1113' 'MEG 1111' - 'MEG 1123' 'MEG 1122' 'MEG 1121' - 'MEG 1133' 'MEG 1132' 'MEG 1131' - 'MEG 1142' 'MEG 1143' 'MEG 1141' - 'MEG 1213' 'MEG 1212' 'MEG 1211' - 'MEG 1223' 'MEG 1222' 'MEG 1221' - 'MEG 1232' 'MEG 1233' 'MEG 1231' - 'MEG 1243' 'MEG 1242' 'MEG 1241' - 'MEG 1312' 'MEG 1313' 'MEG 1311' - 'MEG 1323' 'MEG 1322' 'MEG 1321' - 'MEG 1333' 'MEG 1332' 'MEG 1331' - 'MEG 1342' 'MEG 1343' 'MEG 1341' - 'MEG 1412' 'MEG 1413' 'MEG 1411' - 'MEG 1423' 'MEG 1422' 'MEG 1421' - 'MEG 1433' 'MEG 1432' 'MEG 1431' - 'MEG 1442' 'MEG 1443' 'MEG 1441' - 'MEG 1512' 'MEG 1513' 'MEG 1511' - 'MEG 1522' 'MEG 1523' 'MEG 1521' - 'MEG 1533' 'MEG 1532' 'MEG 1531' - 'MEG 1543' 'MEG 1542' 'MEG 1541' - 'MEG 1613' 'MEG 1612' 'MEG 1611' - 'MEG 1622' 'MEG 1623' 'MEG 1621' - 'MEG 1632' 'MEG 1633' 'MEG 1631' - 'MEG 1643' 'MEG 1642' 'MEG 1641' - 'MEG 1713' 'MEG 1712' 'MEG 1711' - 'MEG 1722' 'MEG 1723' 'MEG 1721' - 'MEG 1732' 'MEG 1733' 'MEG 1731' - 'MEG 1743' 'MEG 1742' 'MEG 1741' - 'MEG 1813' 'MEG 1812' 'MEG 1811' - 'MEG 1822' 'MEG 1823' 'MEG 1821' - 'MEG 1832' 'MEG 1833' 'MEG 1831' - 'MEG 1843' 'MEG 1842' 'MEG 1841' - 'MEG 1912' 'MEG 1913' 'MEG 1911' - 'MEG 1923' 'MEG 1922' 'MEG 1921' - 'MEG 1932' 'MEG 1933' 'MEG 1931' - 'MEG 1943' 'MEG 1942' 'MEG 1941' - 'MEG 2013' 'MEG 2012' 'MEG 2011' - 'MEG 2023' 'MEG 2022' 'MEG 2021' - 'MEG 2032' 'MEG 2033' 'MEG 2031' - 'MEG 2042' 'MEG 2043' 'MEG 2041' - 'MEG 2113' 'MEG 2112' 'MEG 2111' - 'MEG 2122' 'MEG 2123' 'MEG 2121' - 'MEG 2133' 'MEG 2132' 'MEG 2131' - 'MEG 2143' 'MEG 2142' 'MEG 2141' - 'MEG 2212' 'MEG 2213' 'MEG 2211' - 'MEG 2223' 'MEG 2222' 'MEG 2221' - 'MEG 2233' 'MEG 2232' 'MEG 2231' - 'MEG 2242' 'MEG 2243' 'MEG 2241' - 'MEG 2312' 'MEG 2313' 'MEG 2311' - 'MEG 2323' 'MEG 2322' 'MEG 2321' - 'MEG 2332' 'MEG 2333' 'MEG 2331' - 'MEG 2343' 'MEG 2342' 'MEG 2341' - 'MEG 2412' 'MEG 2413' 'MEG 2411' - 'MEG 2423' 'MEG 2422' 'MEG 2421' - 'MEG 2433' 'MEG 2432' 'MEG 2431' - 'MEG 2442' 'MEG 2443' 'MEG 2441' - 'MEG 2512' 'MEG 2513' 'MEG 2511' - 'MEG 2522' 'MEG 2523' 'MEG 2521' - 'MEG 2533' 'MEG 2532' 'MEG 2531' - 'MEG 2543' 'MEG 2542' 'MEG 2541' - 'MEG 2612' 'MEG 2613' 'MEG 2611' - 'MEG 2623' 'MEG 2622' 'MEG 2621' - 'MEG 2633' 'MEG 2632' 'MEG 2631' - 'MEG 2642' 'MEG 2643' 'MEG 2641' - }; + neuromag306 = { + 'MEG 0113' 'MEG 0112' 'MEG 0111' + 'MEG 0122' 'MEG 0123' 'MEG 0121' + 'MEG 0132' 'MEG 0133' 'MEG 0131' + 'MEG 0143' 'MEG 0142' 'MEG 0141' + 'MEG 0213' 'MEG 0212' 'MEG 0211' + 'MEG 0222' 'MEG 0223' 'MEG 0221' + 'MEG 0232' 'MEG 0233' 'MEG 0231' + 'MEG 0243' 'MEG 0242' 'MEG 0241' + 'MEG 0313' 'MEG 0312' 'MEG 0311' + 'MEG 0322' 'MEG 0323' 'MEG 0321' + 'MEG 0333' 'MEG 0332' 'MEG 0331' + 'MEG 0343' 'MEG 0342' 'MEG 0341' + 'MEG 0413' 'MEG 0412' 'MEG 0411' + 'MEG 0422' 'MEG 0423' 'MEG 0421' + 'MEG 0432' 'MEG 0433' 'MEG 0431' + 'MEG 0443' 'MEG 0442' 'MEG 0441' + 'MEG 0513' 'MEG 0512' 'MEG 0511' + 'MEG 0523' 'MEG 0522' 'MEG 0521' + 'MEG 0532' 'MEG 0533' 'MEG 0531' + 'MEG 0542' 'MEG 0543' 'MEG 0541' + 'MEG 0613' 'MEG 0612' 'MEG 0611' + 'MEG 0622' 'MEG 0623' 'MEG 0621' + 'MEG 0633' 'MEG 0632' 'MEG 0631' + 'MEG 0642' 'MEG 0643' 'MEG 0641' + 'MEG 0713' 'MEG 0712' 'MEG 0711' + 'MEG 0723' 'MEG 0722' 'MEG 0721' + 'MEG 0733' 'MEG 0732' 'MEG 0731' + 'MEG 0743' 'MEG 0742' 'MEG 0741' + 'MEG 0813' 'MEG 0812' 'MEG 0811' + 'MEG 0822' 'MEG 0823' 'MEG 0821' + 'MEG 0913' 'MEG 0912' 'MEG 0911' + 'MEG 0923' 'MEG 0922' 'MEG 0921' + 'MEG 0932' 'MEG 0933' 'MEG 0931' + 'MEG 0942' 'MEG 0943' 'MEG 0941' + 'MEG 1013' 'MEG 1012' 'MEG 1011' + 'MEG 1023' 'MEG 1022' 'MEG 1021' + 'MEG 1032' 'MEG 1033' 'MEG 1031' + 'MEG 1043' 'MEG 1042' 'MEG 1041' + 'MEG 1112' 'MEG 1113' 'MEG 1111' + 'MEG 1123' 'MEG 1122' 'MEG 1121' + 'MEG 1133' 'MEG 1132' 'MEG 1131' + 'MEG 1142' 'MEG 1143' 'MEG 1141' + 'MEG 1213' 'MEG 1212' 'MEG 1211' + 'MEG 1223' 'MEG 1222' 'MEG 1221' + 'MEG 1232' 'MEG 1233' 'MEG 1231' + 'MEG 1243' 'MEG 1242' 'MEG 1241' + 'MEG 1312' 'MEG 1313' 'MEG 1311' + 'MEG 1323' 'MEG 1322' 'MEG 1321' + 'MEG 1333' 'MEG 1332' 'MEG 1331' + 'MEG 1342' 'MEG 1343' 'MEG 1341' + 'MEG 1412' 'MEG 1413' 'MEG 1411' + 'MEG 1423' 'MEG 1422' 'MEG 1421' + 'MEG 1433' 'MEG 1432' 'MEG 1431' + 'MEG 1442' 'MEG 1443' 'MEG 1441' + 'MEG 1512' 'MEG 1513' 'MEG 1511' + 'MEG 1522' 'MEG 1523' 'MEG 1521' + 'MEG 1533' 'MEG 1532' 'MEG 1531' + 'MEG 1543' 'MEG 1542' 'MEG 1541' + 'MEG 1613' 'MEG 1612' 'MEG 1611' + 'MEG 1622' 'MEG 1623' 'MEG 1621' + 'MEG 1632' 'MEG 1633' 'MEG 1631' + 'MEG 1643' 'MEG 1642' 'MEG 1641' + 'MEG 1713' 'MEG 1712' 'MEG 1711' + 'MEG 1722' 'MEG 1723' 'MEG 1721' + 'MEG 1732' 'MEG 1733' 'MEG 1731' + 'MEG 1743' 'MEG 1742' 'MEG 1741' + 'MEG 1813' 'MEG 1812' 'MEG 1811' + 'MEG 1822' 'MEG 1823' 'MEG 1821' + 'MEG 1832' 'MEG 1833' 'MEG 1831' + 'MEG 1843' 'MEG 1842' 'MEG 1841' + 'MEG 1912' 'MEG 1913' 'MEG 1911' + 'MEG 1923' 'MEG 1922' 'MEG 1921' + 'MEG 1932' 'MEG 1933' 'MEG 1931' + 'MEG 1943' 'MEG 1942' 'MEG 1941' + 'MEG 2013' 'MEG 2012' 'MEG 2011' + 'MEG 2023' 'MEG 2022' 'MEG 2021' + 'MEG 2032' 'MEG 2033' 'MEG 2031' + 'MEG 2042' 'MEG 2043' 'MEG 2041' + 'MEG 2113' 'MEG 2112' 'MEG 2111' + 'MEG 2122' 'MEG 2123' 'MEG 2121' + 'MEG 2133' 'MEG 2132' 'MEG 2131' + 'MEG 2143' 'MEG 2142' 'MEG 2141' + 'MEG 2212' 'MEG 2213' 'MEG 2211' + 'MEG 2223' 'MEG 2222' 'MEG 2221' + 'MEG 2233' 'MEG 2232' 'MEG 2231' + 'MEG 2242' 'MEG 2243' 'MEG 2241' + 'MEG 2312' 'MEG 2313' 'MEG 2311' + 'MEG 2323' 'MEG 2322' 'MEG 2321' + 'MEG 2332' 'MEG 2333' 'MEG 2331' + 'MEG 2343' 'MEG 2342' 'MEG 2341' + 'MEG 2412' 'MEG 2413' 'MEG 2411' + 'MEG 2423' 'MEG 2422' 'MEG 2421' + 'MEG 2433' 'MEG 2432' 'MEG 2431' + 'MEG 2442' 'MEG 2443' 'MEG 2441' + 'MEG 2512' 'MEG 2513' 'MEG 2511' + 'MEG 2522' 'MEG 2523' 'MEG 2521' + 'MEG 2533' 'MEG 2532' 'MEG 2531' + 'MEG 2543' 'MEG 2542' 'MEG 2541' + 'MEG 2612' 'MEG 2613' 'MEG 2611' + 'MEG 2623' 'MEG 2622' 'MEG 2621' + 'MEG 2633' 'MEG 2632' 'MEG 2631' + 'MEG 2642' 'MEG 2643' 'MEG 2641' + }; - % this is an alternative set of labels without a space in them - neuromag306alt = { - 'MEG0113' 'MEG0112' 'MEG0111' - 'MEG0122' 'MEG0123' 'MEG0121' - 'MEG0132' 'MEG0133' 'MEG0131' - 'MEG0143' 'MEG0142' 'MEG0141' - 'MEG0213' 'MEG0212' 'MEG0211' - 'MEG0222' 'MEG0223' 'MEG0221' - 'MEG0232' 'MEG0233' 'MEG0231' - 'MEG0243' 'MEG0242' 'MEG0241' - 'MEG0313' 'MEG0312' 'MEG0311' - 'MEG0322' 'MEG0323' 'MEG0321' - 'MEG0333' 'MEG0332' 'MEG0331' - 'MEG0343' 'MEG0342' 'MEG0341' - 'MEG0413' 'MEG0412' 'MEG0411' - 'MEG0422' 'MEG0423' 'MEG0421' - 'MEG0432' 'MEG0433' 'MEG0431' - 'MEG0443' 'MEG0442' 'MEG0441' - 'MEG0513' 'MEG0512' 'MEG0511' - 'MEG0523' 'MEG0522' 'MEG0521' - 'MEG0532' 'MEG0533' 'MEG0531' - 'MEG0542' 'MEG0543' 'MEG0541' - 'MEG0613' 'MEG0612' 'MEG0611' - 'MEG0622' 'MEG0623' 'MEG0621' - 'MEG0633' 'MEG0632' 'MEG0631' - 'MEG0642' 'MEG0643' 'MEG0641' - 'MEG0713' 'MEG0712' 'MEG0711' - 'MEG0723' 'MEG0722' 'MEG0721' - 'MEG0733' 'MEG0732' 'MEG0731' - 'MEG0743' 'MEG0742' 'MEG0741' - 'MEG0813' 'MEG0812' 'MEG0811' - 'MEG0822' 'MEG0823' 'MEG0821' - 'MEG0913' 'MEG0912' 'MEG0911' - 'MEG0923' 'MEG0922' 'MEG0921' - 'MEG0932' 'MEG0933' 'MEG0931' - 'MEG0942' 'MEG0943' 'MEG0941' - 'MEG1013' 'MEG1012' 'MEG1011' - 'MEG1023' 'MEG1022' 'MEG1021' - 'MEG1032' 'MEG1033' 'MEG1031' - 'MEG1043' 'MEG1042' 'MEG1041' - 'MEG1112' 'MEG1113' 'MEG1111' - 'MEG1123' 'MEG1122' 'MEG1121' - 'MEG1133' 'MEG1132' 'MEG1131' - 'MEG1142' 'MEG1143' 'MEG1141' - 'MEG1213' 'MEG1212' 'MEG1211' - 'MEG1223' 'MEG1222' 'MEG1221' - 'MEG1232' 'MEG1233' 'MEG1231' - 'MEG1243' 'MEG1242' 'MEG1241' - 'MEG1312' 'MEG1313' 'MEG1311' - 'MEG1323' 'MEG1322' 'MEG1321' - 'MEG1333' 'MEG1332' 'MEG1331' - 'MEG1342' 'MEG1343' 'MEG1341' - 'MEG1412' 'MEG1413' 'MEG1411' - 'MEG1423' 'MEG1422' 'MEG1421' - 'MEG1433' 'MEG1432' 'MEG1431' - 'MEG1442' 'MEG1443' 'MEG1441' - 'MEG1512' 'MEG1513' 'MEG1511' - 'MEG1522' 'MEG1523' 'MEG1521' - 'MEG1533' 'MEG1532' 'MEG1531' - 'MEG1543' 'MEG1542' 'MEG1541' - 'MEG1613' 'MEG1612' 'MEG1611' - 'MEG1622' 'MEG1623' 'MEG1621' - 'MEG1632' 'MEG1633' 'MEG1631' - 'MEG1643' 'MEG1642' 'MEG1641' - 'MEG1713' 'MEG1712' 'MEG1711' - 'MEG1722' 'MEG1723' 'MEG1721' - 'MEG1732' 'MEG1733' 'MEG1731' - 'MEG1743' 'MEG1742' 'MEG1741' - 'MEG1813' 'MEG1812' 'MEG1811' - 'MEG1822' 'MEG1823' 'MEG1821' - 'MEG1832' 'MEG1833' 'MEG1831' - 'MEG1843' 'MEG1842' 'MEG1841' - 'MEG1912' 'MEG1913' 'MEG1911' - 'MEG1923' 'MEG1922' 'MEG1921' - 'MEG1932' 'MEG1933' 'MEG1931' - 'MEG1943' 'MEG1942' 'MEG1941' - 'MEG2013' 'MEG2012' 'MEG2011' - 'MEG2023' 'MEG2022' 'MEG2021' - 'MEG2032' 'MEG2033' 'MEG2031' - 'MEG2042' 'MEG2043' 'MEG2041' - 'MEG2113' 'MEG2112' 'MEG2111' - 'MEG2122' 'MEG2123' 'MEG2121' - 'MEG2133' 'MEG2132' 'MEG2131' - 'MEG2143' 'MEG2142' 'MEG2141' - 'MEG2212' 'MEG2213' 'MEG2211' - 'MEG2223' 'MEG2222' 'MEG2221' - 'MEG2233' 'MEG2232' 'MEG2231' - 'MEG2242' 'MEG2243' 'MEG2241' - 'MEG2312' 'MEG2313' 'MEG2311' - 'MEG2323' 'MEG2322' 'MEG2321' - 'MEG2332' 'MEG2333' 'MEG2331' - 'MEG2343' 'MEG2342' 'MEG2341' - 'MEG2412' 'MEG2413' 'MEG2411' - 'MEG2423' 'MEG2422' 'MEG2421' - 'MEG2433' 'MEG2432' 'MEG2431' - 'MEG2442' 'MEG2443' 'MEG2441' - 'MEG2512' 'MEG2513' 'MEG2511' - 'MEG2522' 'MEG2523' 'MEG2521' - 'MEG2533' 'MEG2532' 'MEG2531' - 'MEG2543' 'MEG2542' 'MEG2541' - 'MEG2612' 'MEG2613' 'MEG2611' - 'MEG2623' 'MEG2622' 'MEG2621' - 'MEG2633' 'MEG2632' 'MEG2631' - 'MEG2642' 'MEG2643' 'MEG2641' - }; + % this is an alternative set of labels without a space in them + neuromag306alt = { + 'MEG0113' 'MEG0112' 'MEG0111' + 'MEG0122' 'MEG0123' 'MEG0121' + 'MEG0132' 'MEG0133' 'MEG0131' + 'MEG0143' 'MEG0142' 'MEG0141' + 'MEG0213' 'MEG0212' 'MEG0211' + 'MEG0222' 'MEG0223' 'MEG0221' + 'MEG0232' 'MEG0233' 'MEG0231' + 'MEG0243' 'MEG0242' 'MEG0241' + 'MEG0313' 'MEG0312' 'MEG0311' + 'MEG0322' 'MEG0323' 'MEG0321' + 'MEG0333' 'MEG0332' 'MEG0331' + 'MEG0343' 'MEG0342' 'MEG0341' + 'MEG0413' 'MEG0412' 'MEG0411' + 'MEG0422' 'MEG0423' 'MEG0421' + 'MEG0432' 'MEG0433' 'MEG0431' + 'MEG0443' 'MEG0442' 'MEG0441' + 'MEG0513' 'MEG0512' 'MEG0511' + 'MEG0523' 'MEG0522' 'MEG0521' + 'MEG0532' 'MEG0533' 'MEG0531' + 'MEG0542' 'MEG0543' 'MEG0541' + 'MEG0613' 'MEG0612' 'MEG0611' + 'MEG0622' 'MEG0623' 'MEG0621' + 'MEG0633' 'MEG0632' 'MEG0631' + 'MEG0642' 'MEG0643' 'MEG0641' + 'MEG0713' 'MEG0712' 'MEG0711' + 'MEG0723' 'MEG0722' 'MEG0721' + 'MEG0733' 'MEG0732' 'MEG0731' + 'MEG0743' 'MEG0742' 'MEG0741' + 'MEG0813' 'MEG0812' 'MEG0811' + 'MEG0822' 'MEG0823' 'MEG0821' + 'MEG0913' 'MEG0912' 'MEG0911' + 'MEG0923' 'MEG0922' 'MEG0921' + 'MEG0932' 'MEG0933' 'MEG0931' + 'MEG0942' 'MEG0943' 'MEG0941' + 'MEG1013' 'MEG1012' 'MEG1011' + 'MEG1023' 'MEG1022' 'MEG1021' + 'MEG1032' 'MEG1033' 'MEG1031' + 'MEG1043' 'MEG1042' 'MEG1041' + 'MEG1112' 'MEG1113' 'MEG1111' + 'MEG1123' 'MEG1122' 'MEG1121' + 'MEG1133' 'MEG1132' 'MEG1131' + 'MEG1142' 'MEG1143' 'MEG1141' + 'MEG1213' 'MEG1212' 'MEG1211' + 'MEG1223' 'MEG1222' 'MEG1221' + 'MEG1232' 'MEG1233' 'MEG1231' + 'MEG1243' 'MEG1242' 'MEG1241' + 'MEG1312' 'MEG1313' 'MEG1311' + 'MEG1323' 'MEG1322' 'MEG1321' + 'MEG1333' 'MEG1332' 'MEG1331' + 'MEG1342' 'MEG1343' 'MEG1341' + 'MEG1412' 'MEG1413' 'MEG1411' + 'MEG1423' 'MEG1422' 'MEG1421' + 'MEG1433' 'MEG1432' 'MEG1431' + 'MEG1442' 'MEG1443' 'MEG1441' + 'MEG1512' 'MEG1513' 'MEG1511' + 'MEG1522' 'MEG1523' 'MEG1521' + 'MEG1533' 'MEG1532' 'MEG1531' + 'MEG1543' 'MEG1542' 'MEG1541' + 'MEG1613' 'MEG1612' 'MEG1611' + 'MEG1622' 'MEG1623' 'MEG1621' + 'MEG1632' 'MEG1633' 'MEG1631' + 'MEG1643' 'MEG1642' 'MEG1641' + 'MEG1713' 'MEG1712' 'MEG1711' + 'MEG1722' 'MEG1723' 'MEG1721' + 'MEG1732' 'MEG1733' 'MEG1731' + 'MEG1743' 'MEG1742' 'MEG1741' + 'MEG1813' 'MEG1812' 'MEG1811' + 'MEG1822' 'MEG1823' 'MEG1821' + 'MEG1832' 'MEG1833' 'MEG1831' + 'MEG1843' 'MEG1842' 'MEG1841' + 'MEG1912' 'MEG1913' 'MEG1911' + 'MEG1923' 'MEG1922' 'MEG1921' + 'MEG1932' 'MEG1933' 'MEG1931' + 'MEG1943' 'MEG1942' 'MEG1941' + 'MEG2013' 'MEG2012' 'MEG2011' + 'MEG2023' 'MEG2022' 'MEG2021' + 'MEG2032' 'MEG2033' 'MEG2031' + 'MEG2042' 'MEG2043' 'MEG2041' + 'MEG2113' 'MEG2112' 'MEG2111' + 'MEG2122' 'MEG2123' 'MEG2121' + 'MEG2133' 'MEG2132' 'MEG2131' + 'MEG2143' 'MEG2142' 'MEG2141' + 'MEG2212' 'MEG2213' 'MEG2211' + 'MEG2223' 'MEG2222' 'MEG2221' + 'MEG2233' 'MEG2232' 'MEG2231' + 'MEG2242' 'MEG2243' 'MEG2241' + 'MEG2312' 'MEG2313' 'MEG2311' + 'MEG2323' 'MEG2322' 'MEG2321' + 'MEG2332' 'MEG2333' 'MEG2331' + 'MEG2343' 'MEG2342' 'MEG2341' + 'MEG2412' 'MEG2413' 'MEG2411' + 'MEG2423' 'MEG2422' 'MEG2421' + 'MEG2433' 'MEG2432' 'MEG2431' + 'MEG2442' 'MEG2443' 'MEG2441' + 'MEG2512' 'MEG2513' 'MEG2511' + 'MEG2522' 'MEG2523' 'MEG2521' + 'MEG2533' 'MEG2532' 'MEG2531' + 'MEG2543' 'MEG2542' 'MEG2541' + 'MEG2612' 'MEG2613' 'MEG2611' + 'MEG2623' 'MEG2622' 'MEG2621' + 'MEG2633' 'MEG2632' 'MEG2631' + 'MEG2642' 'MEG2643' 'MEG2641' + }; end % if isneuromag if iseeg || isext - eeg1020 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'F7' - 'F3' - 'Fz' - 'F4' - 'F8' - 'T7' - 'C3' - 'Cz' - 'C4' - 'T8' - 'P7' - 'P3' - 'Pz' - 'P4' - 'P8' - 'O1' - 'Oz' - 'O2'}; + eeg1020 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'F7' + 'F3' + 'Fz' + 'F4' + 'F8' + 'T7' + 'C3' + 'Cz' + 'C4' + 'T8' + 'P7' + 'P3' + 'Pz' + 'P4' + 'P8' + 'O1' + 'Oz' + 'O2'}; - eeg1010 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - }; + eeg1010 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + }; - eeg1005 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - 'AFp9h' - 'AFp7h' - 'AFp5h' - 'AFp3h' - 'AFp1h' - 'AFp2h' - 'AFp4h' - 'AFp6h' - 'AFp8h' - 'AFp10h' - 'AFF9h' - 'AFF7h' - 'AFF5h' - 'AFF3h' - 'AFF1h' - 'AFF2h' - 'AFF4h' - 'AFF6h' - 'AFF8h' - 'AFF10h' - 'FFT9h' - 'FFT7h' - 'FFC5h' - 'FFC3h' - 'FFC1h' - 'FFC2h' - 'FFC4h' - 'FFC6h' - 'FFT8h' - 'FFT10h' - 'FTT9h' - 'FTT7h' - 'FCC5h' - 'FCC3h' - 'FCC1h' - 'FCC2h' - 'FCC4h' - 'FCC6h' - 'FTT8h' - 'FTT10h' - 'TTP9h' - 'TTP7h' - 'CCP5h' - 'CCP3h' - 'CCP1h' - 'CCP2h' - 'CCP4h' - 'CCP6h' - 'TTP8h' - 'TTP10h' - 'TPP9h' - 'TPP7h' - 'CPP5h' - 'CPP3h' - 'CPP1h' - 'CPP2h' - 'CPP4h' - 'CPP6h' - 'TPP8h' - 'TPP10h' - 'PPO9h' - 'PPO7h' - 'PPO5h' - 'PPO3h' - 'PPO1h' - 'PPO2h' - 'PPO4h' - 'PPO6h' - 'PPO8h' - 'PPO10h' - 'POO9h' - 'POO7h' - 'POO5h' - 'POO3h' - 'POO1h' - 'POO2h' - 'POO4h' - 'POO6h' - 'POO8h' - 'POO10h' - 'OI1h' - 'OI2h' - 'Fp1h' - 'Fp2h' - 'AF9h' - 'AF7h' - 'AF5h' - 'AF3h' - 'AF1h' - 'AF2h' - 'AF4h' - 'AF6h' - 'AF8h' - 'AF10h' - 'F9h' - 'F7h' - 'F5h' - 'F3h' - 'F1h' - 'F2h' - 'F4h' - 'F6h' - 'F8h' - 'F10h' - 'FT9h' - 'FT7h' - 'FC5h' - 'FC3h' - 'FC1h' - 'FC2h' - 'FC4h' - 'FC6h' - 'FT8h' - 'FT10h' - 'T9h' - 'T7h' - 'C5h' - 'C3h' - 'C1h' - 'C2h' - 'C4h' - 'C6h' - 'T8h' - 'T10h' - 'TP9h' - 'TP7h' - 'CP5h' - 'CP3h' - 'CP1h' - 'CP2h' - 'CP4h' - 'CP6h' - 'TP8h' - 'TP10h' - 'P9h' - 'P7h' - 'P5h' - 'P3h' - 'P1h' - 'P2h' - 'P4h' - 'P6h' - 'P8h' - 'P10h' - 'PO9h' - 'PO7h' - 'PO5h' - 'PO3h' - 'PO1h' - 'PO2h' - 'PO4h' - 'PO6h' - 'PO8h' - 'PO10h' - 'O1h' - 'O2h' - 'I1h' - 'I2h' - 'AFp9' - 'AFp7' - 'AFp5' - 'AFp3' - 'AFp1' - 'AFpz' - 'AFp2' - 'AFp4' - 'AFp6' - 'AFp8' - 'AFp10' - 'AFF9' - 'AFF7' - 'AFF5' - 'AFF3' - 'AFF1' - 'AFFz' - 'AFF2' - 'AFF4' - 'AFF6' - 'AFF8' - 'AFF10' - 'FFT9' - 'FFT7' - 'FFC5' - 'FFC3' - 'FFC1' - 'FFCz' - 'FFC2' - 'FFC4' - 'FFC6' - 'FFT8' - 'FFT10' - 'FTT9' - 'FTT7' - 'FCC5' - 'FCC3' - 'FCC1' - 'FCCz' - 'FCC2' - 'FCC4' - 'FCC6' - 'FTT8' - 'FTT10' - 'TTP9' - 'TTP7' - 'CCP5' - 'CCP3' - 'CCP1' - 'CCPz' - 'CCP2' - 'CCP4' - 'CCP6' - 'TTP8' - 'TTP10' - 'TPP9' - 'TPP7' - 'CPP5' - 'CPP3' - 'CPP1' - 'CPPz' - 'CPP2' - 'CPP4' - 'CPP6' - 'TPP8' - 'TPP10' - 'PPO9' - 'PPO7' - 'PPO5' - 'PPO3' - 'PPO1' - 'PPOz' - 'PPO2' - 'PPO4' - 'PPO6' - 'PPO8' - 'PPO10' - 'POO9' - 'POO7' - 'POO5' - 'POO3' - 'POO1' - 'POOz' - 'POO2' - 'POO4' - 'POO6' - 'POO8' - 'POO10' - 'OI1' - 'OIz' - 'OI2' - }; + eeg1005 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + 'AFp9h' + 'AFp7h' + 'AFp5h' + 'AFp3h' + 'AFp1h' + 'AFp2h' + 'AFp4h' + 'AFp6h' + 'AFp8h' + 'AFp10h' + 'AFF9h' + 'AFF7h' + 'AFF5h' + 'AFF3h' + 'AFF1h' + 'AFF2h' + 'AFF4h' + 'AFF6h' + 'AFF8h' + 'AFF10h' + 'FFT9h' + 'FFT7h' + 'FFC5h' + 'FFC3h' + 'FFC1h' + 'FFC2h' + 'FFC4h' + 'FFC6h' + 'FFT8h' + 'FFT10h' + 'FTT9h' + 'FTT7h' + 'FCC5h' + 'FCC3h' + 'FCC1h' + 'FCC2h' + 'FCC4h' + 'FCC6h' + 'FTT8h' + 'FTT10h' + 'TTP9h' + 'TTP7h' + 'CCP5h' + 'CCP3h' + 'CCP1h' + 'CCP2h' + 'CCP4h' + 'CCP6h' + 'TTP8h' + 'TTP10h' + 'TPP9h' + 'TPP7h' + 'CPP5h' + 'CPP3h' + 'CPP1h' + 'CPP2h' + 'CPP4h' + 'CPP6h' + 'TPP8h' + 'TPP10h' + 'PPO9h' + 'PPO7h' + 'PPO5h' + 'PPO3h' + 'PPO1h' + 'PPO2h' + 'PPO4h' + 'PPO6h' + 'PPO8h' + 'PPO10h' + 'POO9h' + 'POO7h' + 'POO5h' + 'POO3h' + 'POO1h' + 'POO2h' + 'POO4h' + 'POO6h' + 'POO8h' + 'POO10h' + 'OI1h' + 'OI2h' + 'Fp1h' + 'Fp2h' + 'AF9h' + 'AF7h' + 'AF5h' + 'AF3h' + 'AF1h' + 'AF2h' + 'AF4h' + 'AF6h' + 'AF8h' + 'AF10h' + 'F9h' + 'F7h' + 'F5h' + 'F3h' + 'F1h' + 'F2h' + 'F4h' + 'F6h' + 'F8h' + 'F10h' + 'FT9h' + 'FT7h' + 'FC5h' + 'FC3h' + 'FC1h' + 'FC2h' + 'FC4h' + 'FC6h' + 'FT8h' + 'FT10h' + 'T9h' + 'T7h' + 'C5h' + 'C3h' + 'C1h' + 'C2h' + 'C4h' + 'C6h' + 'T8h' + 'T10h' + 'TP9h' + 'TP7h' + 'CP5h' + 'CP3h' + 'CP1h' + 'CP2h' + 'CP4h' + 'CP6h' + 'TP8h' + 'TP10h' + 'P9h' + 'P7h' + 'P5h' + 'P3h' + 'P1h' + 'P2h' + 'P4h' + 'P6h' + 'P8h' + 'P10h' + 'PO9h' + 'PO7h' + 'PO5h' + 'PO3h' + 'PO1h' + 'PO2h' + 'PO4h' + 'PO6h' + 'PO8h' + 'PO10h' + 'O1h' + 'O2h' + 'I1h' + 'I2h' + 'AFp9' + 'AFp7' + 'AFp5' + 'AFp3' + 'AFp1' + 'AFpz' + 'AFp2' + 'AFp4' + 'AFp6' + 'AFp8' + 'AFp10' + 'AFF9' + 'AFF7' + 'AFF5' + 'AFF3' + 'AFF1' + 'AFFz' + 'AFF2' + 'AFF4' + 'AFF6' + 'AFF8' + 'AFF10' + 'FFT9' + 'FFT7' + 'FFC5' + 'FFC3' + 'FFC1' + 'FFCz' + 'FFC2' + 'FFC4' + 'FFC6' + 'FFT8' + 'FFT10' + 'FTT9' + 'FTT7' + 'FCC5' + 'FCC3' + 'FCC1' + 'FCCz' + 'FCC2' + 'FCC4' + 'FCC6' + 'FTT8' + 'FTT10' + 'TTP9' + 'TTP7' + 'CCP5' + 'CCP3' + 'CCP1' + 'CCPz' + 'CCP2' + 'CCP4' + 'CCP6' + 'TTP8' + 'TTP10' + 'TPP9' + 'TPP7' + 'CPP5' + 'CPP3' + 'CPP1' + 'CPPz' + 'CPP2' + 'CPP4' + 'CPP6' + 'TPP8' + 'TPP10' + 'PPO9' + 'PPO7' + 'PPO5' + 'PPO3' + 'PPO1' + 'PPOz' + 'PPO2' + 'PPO4' + 'PPO6' + 'PPO8' + 'PPO10' + 'POO9' + 'POO7' + 'POO5' + 'POO3' + 'POO1' + 'POOz' + 'POO2' + 'POO4' + 'POO6' + 'POO8' + 'POO10' + 'OI1' + 'OIz' + 'OI2' + }; - % Add also alternative labels that are used in some systems - ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); + % Add also alternative labels that are used in some systems + ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); - % This is to account for all variants of case in 1020 systems - ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); + % This is to account for all variants of case in 1020 systems + ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); end % if iseeg || isext if isbiosemi - biosemi128 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - }; + biosemi64 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + }; + + biosemi128 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + }; + + biosemi256 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + 'E1' + 'E2' + 'E3' + 'E4' + 'E5' + 'E6' + 'E7' + 'E8' + 'E9' + 'E10' + 'E11' + 'E12' + 'E13' + 'E14' + 'E15' + 'E16' + 'E17' + 'E18' + 'E19' + 'E20' + 'E21' + 'E22' + 'E23' + 'E24' + 'E25' + 'E26' + 'E27' + 'E28' + 'E29' + 'E30' + 'E31' + 'E32' + 'F1' + 'F2' + 'F3' + 'F4' + 'F5' + 'F6' + 'F7' + 'F8' + 'F9' + 'F10' + 'F11' + 'F12' + 'F13' + 'F14' + 'F15' + 'F16' + 'F17' + 'F18' + 'F19' + 'F20' + 'F21' + 'F22' + 'F23' + 'F24' + 'F25' + 'F26' + 'F27' + 'F28' + 'F29' + 'F30' + 'F31' + 'F32' + 'G1' + 'G2' + 'G3' + 'G4' + 'G5' + 'G6' + 'G7' + 'G8' + 'G9' + 'G10' + 'G11' + 'G12' + 'G13' + 'G14' + 'G15' + 'G16' + 'G17' + 'G18' + 'G19' + 'G20' + 'G21' + 'G22' + 'G23' + 'G24' + 'G25' + 'G26' + 'G27' + 'G28' + 'G29' + 'G30' + 'G31' + 'G32' + 'H1' + 'H2' + 'H3' + 'H4' + 'H5' + 'H6' + 'H7' + 'H8' + 'H9' + 'H10' + 'H11' + 'H12' + 'H13' + 'H14' + 'H15' + 'H16' + 'H17' + 'H18' + 'H19' + 'H20' + 'H21' + 'H22' + 'H23' + 'H24' + 'H25' + 'H26' + 'H27' + 'H28' + 'H29' + 'H30' + 'H31' + 'H32' + }; - biosemi256 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - 'E1' - 'E2' - 'E3' - 'E4' - 'E5' - 'E6' - 'E7' - 'E8' - 'E9' - 'E10' - 'E11' - 'E12' - 'E13' - 'E14' - 'E15' - 'E16' - 'E17' - 'E18' - 'E19' - 'E20' - 'E21' - 'E22' - 'E23' - 'E24' - 'E25' - 'E26' - 'E27' - 'E28' - 'E29' - 'E30' - 'E31' - 'E32' - 'F1' - 'F2' - 'F3' - 'F4' - 'F5' - 'F6' - 'F7' - 'F8' - 'F9' - 'F10' - 'F11' - 'F12' - 'F13' - 'F14' - 'F15' - 'F16' - 'F17' - 'F18' - 'F19' - 'F20' - 'F21' - 'F22' - 'F23' - 'F24' - 'F25' - 'F26' - 'F27' - 'F28' - 'F29' - 'F30' - 'F31' - 'F32' - 'G1' - 'G2' - 'G3' - 'G4' - 'G5' - 'G6' - 'G7' - 'G8' - 'G9' - 'G10' - 'G11' - 'G12' - 'G13' - 'G14' - 'G15' - 'G16' - 'G17' - 'G18' - 'G19' - 'G20' - 'G21' - 'G22' - 'G23' - 'G24' - 'G25' - 'G26' - 'G27' - 'G28' - 'G29' - 'G30' - 'G31' - 'G32' - 'H1' - 'H2' - 'H3' - 'H4' - 'H5' - 'H6' - 'H7' - 'H8' - 'H9' - 'H10' - 'H11' - 'H12' - 'H13' - 'H14' - 'H15' - 'H16' - 'H17' - 'H18' - 'H19' - 'H20' - 'H21' - 'H22' - 'H23' - 'H24' - 'H25' - 'H26' - 'H27' - 'H28' - 'H29' - 'H30' - 'H31' - 'H32' - }; end % if isbiosemi if isegi - egi256 = cell(256, 1); - for i = 1:256 - egi256{i} = sprintf('e%d', i); - end + egi256 = cell(256, 1); + for i = 1:256 + egi256{i} = sprintf('e%d', i); + end - % the others are subsets - egi32 = egi256(1:32); - egi64 = egi256(1:64); - egi128 = egi256(1:128); + % the others are subsets + egi32 = egi256(1:32); + egi64 = egi256(1:64); + egi128 = egi256(1:128); end % if isegi % search for the requested definition of channel labels if exist(type, 'var') - label = eval(type); - label = label(:); + label = eval(type); + label = label(:); else - error('the requested sensor type is not supported'); + error('the requested sensor type is not supported'); +end + +% remember the current input and output arguments, so that they can be +% reused on a subsequent call in case the same input argument is given +current_argout = {label}; +if isempty(previous_argin) + previous_argin = current_argin; + previous_argout = current_argout; end diff --git a/external/fieldtrip/private/senstype.m b/external/fieldtrip/private/senstype.m index a00eaba..df3a355 100644 --- a/external/fieldtrip/private/senstype.m +++ b/external/fieldtrip/private/senstype.m @@ -12,6 +12,7 @@ % The output type can be any of the following % 'electrode' % 'magnetometer' +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -58,6 +59,21 @@ % Copyright (C) 2007-2008, Robert Oostenveld % % $Log: senstype.m,v $ +% Revision 1.19 2009/07/29 08:04:38 roboos +% cleaned up the code, no functional change +% +% Revision 1.18 2009/07/28 11:16:23 roboos +% removed keyboard statement, thanks to Jurrian +% +% Revision 1.17 2009/07/28 10:17:41 roboos +% make distinction between only label, label+pnt and label+pnt+ori +% +% Revision 1.16 2009/07/27 16:04:51 roboos +% improved distinction between eeg and meg, fixes problem with biosemi-eeg being detected as "ctf" due to reference channel match +% +% Revision 1.15 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.14 2009/05/07 13:34:09 roboos % added ctf64 % @@ -138,14 +154,20 @@ % preferably the structure specifies its own type type = sens.type; +elseif issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') + % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex + type = 'plexon'; + else % start with unknown, then try to determine the proper type by looking at the labels type = 'unknown'; - if isfield(sens, 'label') + if isfield(sens, 'label') && isfield(sens, 'pnt') && isfield(sens, 'ori') % probably this is MEG, determine the type of magnetometer/gradiometer system % note that the order here is important: first check whether it matches a 275 channel system, then a 151 channel system, since the 151 channels are a subset of the 275 - if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) || (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels type = 'ctf275'; elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) type = 'ctf151'; @@ -177,12 +199,18 @@ type = 'ctf'; % it might be 151 or 275 channels elseif isfield(sens, 'pnt') && isfield(sens, 'ori') && numel(sens.label)==numel(sens.pnt) type = 'magnetometer'; - elseif isfield(sens, 'pnt') && isfield(sens, 'ori') + else type = 'meg'; - elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + end + + elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % probably this is EEG + if (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) type = 'biosemi256'; elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) type = 'egi256'; elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) @@ -193,26 +221,72 @@ type = 'egi32'; elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing type = 'ext1020'; - elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') % looks like EEG + else type = 'electrode'; end - end + elseif isfield(sens, 'label') && ~isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % look only at the channel labels + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) + type = 'ctf151'; + elseif (mean(ismember(senslabel('ctf64'), sens.label)) > 0.8) + type = 'ctf64'; + elseif (mean(ismember(senslabel('ctf275_planar'), sens.label)) > 0.8) + type = 'ctf275_planar'; + elseif (mean(ismember(senslabel('ctf151_planar'), sens.label)) > 0.8) + type = 'ctf151_planar'; + elseif (mean(ismember(senslabel('bti248'), sens.label)) > 0.8) + type = 'bti248'; + elseif (mean(ismember(senslabel('bti148'), sens.label)) > 0.8) + type = 'bti148'; + elseif (mean(ismember(senslabel('bti248_planar'), sens.label)) > 0.8) + type = 'bti248_planar'; + elseif (mean(ismember(senslabel('bti148_planar'), sens.label)) > 0.8) + type = 'bti148_planar'; + elseif (mean(ismember(senslabel('neuromag306'), sens.label)) > 0.8) + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag306alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag122'), sens.label)) > 0.8) + type = 'neuromag122'; + elseif (mean(ismember(senslabel('neuromag122alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag122'; + elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + type = 'biosemi256'; + elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) + type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; + elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) + type = 'egi256'; + elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) + type = 'egi128'; + elseif (mean(ismember(senslabel('egi64'), sens.label)) > 0.8) + type = 'egi64'; + elseif (mean(ismember(senslabel('egi32'), sens.label)) > 0.8) + type = 'egi32'; + elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing + type = 'ext1020'; + elseif any(ismember(senslabel('btiref'), sens.label)) + type = 'bti'; % it might be 148 or 248 channels + elseif any(ismember(senslabel('ctfref'), sens.label)) + type = 'ctf'; % it might be 151 or 275 channels + end + + end % look at label, ori and/or pnt end % if isfield(sens, 'type') -% use an alternative approach if it is still unknown -if strcmp(type, 'unknown') && issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') - % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex - type = 'plexon'; -end - if ~isempty(desired) % return a boolean flag switch desired case 'eeg' - type = any(strcmp(type, {'eeg' 'electrode' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); + type = any(strcmp(type, {'eeg' 'electrode' 'biosemi64' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); case 'biosemi' - type = any(strcmp(type, {'biosemi128' 'biosemi256'})); + type = any(strcmp(type, {'biosemi64' 'biosemi128' 'biosemi256'})); case 'egi' type = any(strcmp(type, {'egi64' 'egi128' 'egi256'})); case 'meg' @@ -233,8 +307,8 @@ type = any(strcmp(type, {'neuromag122' 'neuromag306' 'ctf151_planar' 'ctf275_planar' 'bti148_planar' 'bti248_planar' 'yokogawa160_planar'})); otherwise type = any(strcmp(type, desired)); - end -end + end % switch desired +end % detemine the correspondence to the desired type % remember the current input and output arguments, so that they can be % reused on a subsequent call in case the same input argument is given @@ -244,4 +318,4 @@ previous_argout = current_argout; end -return % voltype main() +return % senstype main() diff --git a/external/fieldtrip/private/singleplotER.m b/external/fieldtrip/private/singleplotER.m index 440a576..fd94614 100644 --- a/external/fieldtrip/private/singleplotER.m +++ b/external/fieldtrip/private/singleplotER.m @@ -22,7 +22,7 @@ % cfg.ylim = 'maxmin' or [ymin ymax] (default = 'maxmin') % cfg.channel = Nx1 cell-array with selection of channels (default = 'all'), % see CHANNELSELECTION for details -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.baseline = 'yes','no' or [time1 time2] (default = 'no'), see TIMELOCKBASELINE or FREQBASELINE % cfg.baselinetype = 'absolute' or 'relative' (default = 'absolute') % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') @@ -54,6 +54,18 @@ % Copyright (C) 2003-2006, Ole Jensen % % $Log: singleplotER.m,v $ +% Revision 1.41 2009/07/14 13:51:31 roboos +% some small changes related to the new interactive data selection +% +% Revision 1.40 2009/07/14 13:21:09 roboos +% changed the interactive plotting: instead of using plotSelection it now uses the selection function from the new plotting module (select_range and select_channel) and uses a local subfunction to update the cfg and call the next figure +% +% Revision 1.39 2009/07/13 13:25:52 crimic +% inserted new plotting tool functions +% +% Revision 1.38 2009/06/17 13:44:52 roboos +% cleaned up help +% % Revision 1.37 2009/05/12 18:21:37 roboos % added handling of cfg.cohrefchannel='gui' for manual/interactive selection % @@ -288,12 +300,13 @@ cfg.layout = lay; plot_lay(cfg.layout, 'box', false); title('Select the reference channel by clicking on it...'); - info = []; + % add the channel information to the figure + info = guidata(h); info.x = lay.pos(:,1); info.y = lay.pos(:,2); info.label = lay.label; guidata(h, info); - set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_cohrefchannel, cfg, varargin{:}}}); + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_singleplotER, cfg, varargin{:}}}); return end @@ -369,17 +382,17 @@ chansel = match_str(varargin{k-1}.label, cfg.channel); end - % cfg.maskparameter only possible for single channel - if length(chansel) > 1 && ~isempty(cfg.maskparameter) - warning('no masking possible for average over multiple channels') - masking = 0; - elseif length(chansel) == 1 && ~isempty(cfg.maskparameter) - masking = 1; - end - % Average across selected channels: P = squeeze(mean(P(chansel,:), 1)); + % select mask + if ~isempty(cfg.maskparameter) %&& masking + M = varargin{1}.(cfg.maskparameter); % mask always from only first dataset + M = squeeze(mean(M(chansel,:), 1)); + else + M = []; + end + % Update ymin and ymax for the current data set: if strcmp(cfg.ylim, 'maxmin') ind_xmin = nearest(varargin{k-1}.(cfg.xparam), xmin); @@ -392,96 +405,27 @@ end style = GRAPHCOLOR(k); - plot(varargin{k-1}.(cfg.xparam), P, style); -end - -% select mask -if ~isempty(cfg.maskparameter) && masking - M = varargin{1}.(cfg.maskparameter); % mask always from only first dataset - mask = squeeze(M(chansel,:)); -end - -% Add mask box -if ~isempty(cfg.maskparameter) && masking - % determine how many boxes - foundbeg = 0; - foundend = 0; - beg = []; - eind = []; - for i = 1:length(mask) - if ~foundbeg && mask(i) == 1 - beg(length(beg)+1) = i; - foundbeg = 1; - foundend = 0; - elseif ~foundbeg && mask(i) == 0 - %next - elseif ~foundend && mask(i) == 1 - %next - elseif ~foundend && mask(i) == 0 - eind(length(eind)+1) = i-1; - foundend = 1; - foundbeg = 0; - end - end - if length(eind) == length(beg)-1 - eind(length(eind)+1) = length(mask); - end - numbox = length(beg); - for i = 1:numbox - xmaskmin = varargin{1}.(cfg.xparam)(beg(i)); - xmaskmax = varargin{1}.(cfg.xparam)(eind(i)); - hs = patch([xmaskmin xmaskmax xmaskmax xmaskmin xmaskmin],[ymin ymin ymax ymax ymin], [.6 .6 .6]); - set(hs, 'EdgeColor', 'none'); - end + plot_vector(varargin{k-1}.(cfg.xparam), P, 'style', style, 'highlight', M); end % Set xlim and ylim: xlim([xmin xmax]); ylim([ymin ymax]); -% Make the figure interactive: +% Make the figure interactive if strcmp(cfg.interactive, 'yes') - userData.hFigure = gcf; - userData.hAxes = gca; - for i=1:1 % no multiple selection regions - userData.hSelection{i} = plot(0,0); - set(userData.hSelection{i}, 'XData', mean([xmin xmax])); - set(userData.hSelection{i}, 'YData', mean([ymin ymax])); - set(userData.hSelection{i}, 'Color', [0 0 0]); - set(userData.hSelection{i}, 'EraseMode', 'xor'); - set(userData.hSelection{i}, 'LineStyle', '--'); - set(userData.hSelection{i}, 'LineWidth', 1.5); - set(userData.hSelection{i}, 'Visible', 'on'); - userData.range{i} = []; - end - userData.iSelection = 0; - userData.plotType = 'singleplot'; - userData.selecting = 0; - userData.selectionType = ''; - userData.selectAxes = 'x'; - userData.lastClick = []; - userData.cfg = cfg; - userData.data = varargin; - userData.chanX = []; - userData.chanY = []; - userData.chanLabels = []; - tag = sprintf('%.5f', 10000 * rand(1)); - set(gcf, 'Renderer', cfg.renderer); - set(gcf, 'Tag', tag); - set(gcf, 'UserData', userData); - set(gcf, 'WindowButtonMotionFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 0);']); - set(gcf, 'WindowButtonDownFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 1);']); - set(gcf, 'WindowButtonUpFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 2);']); + set(gcf, 'WindowButtonUpFcn', {@select_range, 'multiple', false, 'yrange', false, 'callback', {@select_topoplotER, cfg, varargin{:}}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_range, 'multiple', false, 'yrange', false, 'callback', {@select_topoplotER, cfg, varargin{:}}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_range, 'multiple', false, 'yrange', false, 'callback', {@select_topoplotER, cfg, varargin{:}}, 'event', 'WindowButtonMotionFcn'}); end % Create title text containing channel name(s) and channel number(s): if length(chansel) == 1 - t=[char(cfg.channel) ' / ' num2str(chansel) ]; + t = [char(cfg.channel) ' / ' num2str(chansel) ]; else - t=sprintf('mean(%0s)', join(',',cfg.channel)); + t = sprintf('mean(%0s)', join(',', cfg.channel)); end - -h=title(t,'fontsize', cfg.fontsize); +h = title(t,'fontsize', cfg.fontsize); % get the output cfg cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); @@ -490,7 +434,7 @@ % SUBFUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function t = join(separator,cells) -if length(cells)==0 +if isempty(cells) t = ''; return; end @@ -501,23 +445,25 @@ end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function l = cellstrmatch(str,strlist) -l = []; -for k=1:length(strlist) - if strcmp(char(str),char(strlist(k))) - l = [l k]; - end -end - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -% this function is called by select_channel +% SUBFUNCTION which is called by select_channel in case cfg.cohrefchannel='gui' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function select_cohrefchannel(label, cfg, varargin) -fprintf('selected "%s" as reference channel\n', label); +function select_singleplotER(label, cfg, varargin) cfg.cohrefchannel = label; -figure +fprintf('selected cfg.cohrefchannel = ''%s''\n', cfg.cohrefchannel); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); singleplotER(cfg, varargin{:}); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting a time range +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_topoplotER(range, cfg, varargin) +cfg.comment = 'auto'; +cfg.yparam = []; +cfg.xlim = range(1:2); +fprintf('selected cfg.xlim = [%f %f]\n', cfg.xlim(1), cfg.xlim(2)); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); +topoplotER(cfg, varargin{:}); diff --git a/external/fieldtrip/private/singleplotTFR.m b/external/fieldtrip/private/singleplotTFR.m index c3a6479..d8ac05b 100644 --- a/external/fieldtrip/private/singleplotTFR.m +++ b/external/fieldtrip/private/singleplotTFR.m @@ -7,13 +7,13 @@ % singleplotTFR(cfg,data) % % The data can be a time-frequency representation of power that was -% computed using the FREQANALYSIS function. +% computed using the FREQANALYSIS function. % % The configuration can have the following parameters: % cfg.xparam = field to be plotted on x-axis, e.g. 'time' (default depends on data.dimord) % cfg.yparam = field to be plotted on y-axis, e.g. 'freq' (default depends on data.dimord) % cfg.zparam = field to be plotted on y-axis, e.g. 'powspcrtrm' (default depends on data.dimord) -% cfg.maskparameter = field in the data to be used for opacity masking of data +% cfg.maskparameter = field in the data to be used for opacity masking of data % (not possible for mean over multiple channels) % cfg.xlim = 'maxmin' or [xmin xmax] (default = 'maxmin') % cfg.ylim = 'maxmin' or [ymin ymax] (default = 'maxmin') @@ -23,15 +23,15 @@ % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') % cfg.channel = Nx1 cell-array with selection of channels (default = 'all'), % see CHANNELSELECTION for details -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.fontsize = font size of title (default = 8) % cfg.colormap = any sized colormap, see COLORMAP % cfg.colorbar = 'yes', 'no' (default = 'yes') % cfg.interactive = Interactive plot 'yes' or 'no' (default = 'no') % In a interactive plot you can select areas and produce a new -% interactive plot when a selected area is clicked. Multiple areas +% interactive plot when a selected area is clicked. Multiple areas % can be selected by holding down the SHIFT key. -% cfg.renderer = 'painters', 'zbuffer',' opengl' or 'none' (default = 'opengl') +% cfg.renderer = 'painters', 'zbuffer',' opengl' or 'none' (default = []) % cfg.masknans = 'yes' or 'no' (default = 'yes') % % See also: @@ -44,6 +44,15 @@ % Copyright (C) 2005-2006, F.C. Donders Centre % % $Log: singleplotTFR.m,v $ +% Revision 1.37 2009/07/14 13:52:16 roboos +% changed the interactive plotting: instead of using plotSelection it now uses the selection function from the new plotting module (select_range and select_channel) and uses a local subfunction to update the cfg and call the next figure +% +% Revision 1.36 2009/07/14 13:27:25 roboos +% consistent handling of cfg.renderer, default is to let matlab decide +% +% Revision 1.35 2009/06/17 13:44:52 roboos +% cleaned up help +% % Revision 1.34 2009/05/12 18:47:23 roboos % added general suppoprt for cfg.cohrefchannel and % added handling of cfg.cohrefchannel='gui' for manual/interactive selection @@ -144,7 +153,7 @@ % % Revision 1.5 2006/03/14 08:09:22 roboos % added copyrigth and cvs log statement -% +% fieldtripdefs @@ -165,7 +174,7 @@ if ~isfield(cfg,'fontsize'), cfg.fontsize = 8; end if ~isfield(cfg,'colorbar'), cfg.colorbar = 'yes'; end if ~isfield(cfg,'interactive'), cfg.interactive = 'no'; end -if ~isfield(cfg,'renderer'), cfg.renderer = 'opengl'; end +if ~isfield(cfg,'renderer'), cfg.renderer = []; end if ~isfield(cfg,'masknans'), cfg.masknans = 'yes'; end if ~isfield(cfg,'maskparameter'), cfg.maskparameter = []; end @@ -209,39 +218,40 @@ cfg = checkconfig(cfg, 'renamed', {'channelname', 'channel'}); end - % Check for unconverted coherence spectrum data - if (strcmp(cfg.zparam,'cohspctrm')) && (isfield(data, 'labelcmb')) - % A reference channel is required: - if ~isfield(cfg,'cohrefchannel'), - error('no reference channel specified'); - end - - if strcmp(cfg.cohrefchannel, 'gui') - % Open a single figure with the channel layout, the user can click on a reference channel - h = clf; - lay = prepare_layout(cfg, data) - cfg.layout = lay; - plot_lay(lay, 'box', false); - title('Select the reference channel by clicking on it...'); - info = []; - info.x = lay.pos(:,1); - info.y = lay.pos(:,2); - info.label = lay.label; - guidata(h, info); - set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_cohrefchannel, cfg, data}}); - return - end - - % Convert 2-dimensional channel matrix to a single dimension: - sel1 = strmatch(cfg.cohrefchannel, data.labelcmb(:,2)); - sel2 = strmatch(cfg.cohrefchannel, data.labelcmb(:,1)); - fprintf('selected %d channels for coherence\n', length(sel1)+length(sel2)); - data.cohspctrm = data.cohspctrm([sel1;sel2],:,:); - data.label = [data.labelcmb(sel1,1);data.labelcmb(sel2,2)]; - data.labelcmb = data.labelcmb([sel1;sel2],:); - data = rmfield(data, 'labelcmb'); +% Check for unconverted coherence spectrum data +if (strcmp(cfg.zparam,'cohspctrm')) && (isfield(data, 'labelcmb')) + % A reference channel is required: + if ~isfield(cfg,'cohrefchannel'), + error('no reference channel specified'); end + if strcmp(cfg.cohrefchannel, 'gui') + % Open a single figure with the channel layout, the user can click on a reference channel + h = clf; + lay = prepare_layout(cfg, data); + cfg.layout = lay; + plot_lay(lay, 'box', false); + title('Select the reference channel by clicking on it...'); + % add the channel information to the figure + info = guidata(h); + info.x = lay.pos(:,1); + info.y = lay.pos(:,2); + info.label = lay.label; + guidata(h, info); + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_singleplotTFR, cfg, data}}); + return + end + + % Convert 2-dimensional channel matrix to a single dimension: + sel1 = strmatch(cfg.cohrefchannel, data.labelcmb(:,2)); + sel2 = strmatch(cfg.cohrefchannel, data.labelcmb(:,1)); + fprintf('selected %d channels for coherence\n', length(sel1)+length(sel2)); + data.cohspctrm = data.cohspctrm([sel1;sel2],:,:); + data.label = [data.labelcmb(sel1,1);data.labelcmb(sel2,2)]; + data.labelcmb = data.labelcmb([sel1;sel2],:); + data = rmfield(data, 'labelcmb'); +end + cfg.channel = channelselection(cfg.channel, data.label); if isempty(cfg.channel) error('no channels selected'); @@ -360,72 +370,36 @@ end; if isequal(cfg.colorbar,'yes') -colorbar; + colorbar; end % Make the figure interactive: if strcmp(cfg.interactive, 'yes') - userData.hFigure = gcf; - userData.hAxes = gca; - for i=1:1 % no multiple selection regions - userData.hSelection{i} = plot(mean([xmin xmax]),mean([ymin ymax])); - set(userData.hSelection{i}, 'XData', mean([xmin xmax])); - set(userData.hSelection{i}, 'YData', mean([ymin ymax])); - set(userData.hSelection{i}, 'Color', [0 0 0]); - set(userData.hSelection{i}, 'EraseMode', 'xor'); - set(userData.hSelection{i}, 'LineStyle', '--'); - set(userData.hSelection{i}, 'LineWidth', 1.5); - set(userData.hSelection{i}, 'Visible', 'on'); - userData.range{i} = []; - end - userData.iSelection = 0; - userData.plotType = 'singleplot'; - userData.selecting = 0; - userData.selectionType = ''; - userData.selectAxes = 'xy'; - userData.lastClick = []; - userData.cfg = cfg; - userData.data = data; - userData.chanX = []; - userData.chanY = []; - userData.chanLabels = []; - tag = sprintf('%.5f', 10000 * rand(1)); - set(gcf, 'Renderer', cfg.renderer); - set(gcf, 'Tag', tag); - set(gcf, 'UserData', userData); - set(gcf, 'WindowButtonMotionFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 0);']); - set(gcf, 'WindowButtonDownFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 1);']); - set(gcf, 'WindowButtonUpFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 2);']); + set(gcf, 'WindowButtonUpFcn', {@select_range, 'multiple', false, 'callback', {@select_topoplotTFR, cfg, data}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_range, 'multiple', false, 'callback', {@select_topoplotTFR, cfg, data}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_range, 'multiple', false, 'callback', {@select_topoplotTFR, cfg, data}, 'event', 'WindowButtonMotionFcn'}); end +% Create title text containing channel name(s) and channel number(s): if length(chansel) == 1 - title([char(cfg.channel) ' / ' num2str(chansel)]) + t = [char(cfg.channel) ' / ' num2str(chansel) ]; else - title(sprintf('mean(%0s)', join(',',cfg.channel))); + t = sprintf('mean(%0s)', join(',', cfg.channel)); end +h = title(t,'fontsize', cfg.fontsize); axis tight; hold off; % get the output cfg -cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); +cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function l = cellstrmatch(str,strlist) -l = []; -for k=1:length(strlist) - if strcmp(char(str),char(strlist(k))) - l = [l k]; - end -end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SUBFUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function t = join(separator,cells) -if length(cells)==0 +if isempty(cells) t = ''; return; end @@ -436,12 +410,26 @@ end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -% this function is called by select_channel +% SUBFUNCTION which is called by select_channel in case cfg.cohrefchannel='gui' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function select_cohrefchannel(label, cfg, varargin) -fprintf('selected "%s" as reference channel\n', label); +function select_singleplotTFR(label, cfg, varargin) cfg.cohrefchannel = label; -figure +fprintf('selected cfg.cohrefchannel = ''%s''\n', cfg.cohrefchannel); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); singleplotTFR(cfg, varargin{:}); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting a time range +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_topoplotTFR(range, cfg, varargin) +cfg.comment = 'auto'; +cfg.xlim = range(1:2); +cfg.ylim = range(3:4); +fprintf('selected cfg.xlim = [%f %f]\n', cfg.xlim(1), cfg.xlim(2)); +fprintf('selected cfg.ylim = [%f %f]\n', cfg.ylim(1), cfg.ylim(2)); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); +topoplotER(cfg, varargin{:}); diff --git a/external/fieldtrip/private/sourceanalysis.m b/external/fieldtrip/private/sourceanalysis.m index 9d10d5c..8a1572f 100644 --- a/external/fieldtrip/private/sourceanalysis.m +++ b/external/fieldtrip/private/sourceanalysis.m @@ -22,7 +22,7 @@ % 'loreta' minimum norm estimation with smoothness constraint % 'rv' scan residual variance with single dipole % 'music' multiple signal classification -% 'mvlap' multivariate Laplace source localization +% 'mvl' multivariate Laplace source localization % The DICS and PCC methods are for frequency domain data, all other methods % are for time domain data. % @@ -167,6 +167,9 @@ % Copyright (c) 2003-2008, Robert Oostenveld, F.C. Donders Centre % % $Log: sourceanalysis.m,v $ +% Revision 1.140 2009/06/04 13:37:28 marvger +% changed mvlap name to mvl to make it consistent with literature +% % Revision 1.139 2009/05/20 16:53:30 marvger % added support for mvlap method (tentative) % @@ -916,7 +919,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % do time domain source reconstruction %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -elseif istimelock && any(strcmp(cfg.method, {'lcmv', 'sam', 'mne', 'loreta', 'rv', 'music', 'pcc', 'mvlap'})) +elseif istimelock && any(strcmp(cfg.method, {'lcmv', 'sam', 'mne', 'loreta', 'rv', 'music', 'pcc', 'mvl'})) % determine the size of the data Nsamples = size(data.avg,2); @@ -1156,7 +1159,7 @@ dip(i) = music(grid, sens, vol, squeeze(avg(i,:,:)), optarg{:}); end end - elseif strcmp(cfg.method, 'mvlap') + elseif strcmp(cfg.method, 'mvl') for i=1:Nrepetitions fprintf('estimating current density distribution for repetition %d\n', i); fns = fieldnames(cfg); @@ -1167,7 +1170,7 @@ optarg{n+1} = cfg.(fns{c}); n=n+2; end - dip(i) = mvlapestimate(grid, sens, vol, squeeze(avg(i,:,:)), optarg{:}); + dip(i) = mvlestimate(grid, sens, vol, squeeze(avg(i,:,:)), optarg{:}); end else error(sprintf('method ''%s'' is unsupported for source reconstruction in the time domain', cfg.method)); @@ -1311,7 +1314,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: sourceanalysis.m,v 1.139 2009/05/20 16:53:30 marvger Exp $'; +cfg.version.id = '$Id: sourceanalysis.m,v 1.140 2009/06/04 13:37:28 marvger Exp $'; % remember the configuration details of the input data if nargin==2 try, cfg.previous = data.cfg; end diff --git a/external/fieldtrip/private/sourceinterpolate.m b/external/fieldtrip/private/sourceinterpolate.m index 364c37a..b14baaa 100644 --- a/external/fieldtrip/private/sourceinterpolate.m +++ b/external/fieldtrip/private/sourceinterpolate.m @@ -33,6 +33,9 @@ % Copyright (C) 2003-2007, Robert Oostenveld % % $Log: sourceinterpolate.m,v $ +% Revision 1.53 2009/07/09 16:08:22 vlalit +% replaced read_fcdc_mri with read_mri to avoid warning +% % Revision 1.52 2009/03/11 11:30:45 roboos % use autodetection of source and MRI units % @@ -192,7 +195,7 @@ if ischar(anatomical) % read the anatomical MRI data from file fprintf('reading MRI from file\n'); - anatomical = read_fcdc_mri(anatomical); + anatomical = read_mri(anatomical); end % check if the input data is valid for this function and ensure that the structures correctly describes a volume @@ -329,7 +332,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: sourceinterpolate.m,v 1.52 2009/03/11 11:30:45 roboos Exp $'; +cfg.version.id = '$Id: sourceinterpolate.m,v 1.53 2009/07/09 16:08:22 vlalit Exp $'; % remember the configuration details of the input data cfg.previous = []; try, cfg.previous{1} = functional.cfg; end diff --git a/external/fieldtrip/private/sourceplot.m b/external/fieldtrip/private/sourceplot.m index dbb6391..0ce2179 100644 --- a/external/fieldtrip/private/sourceplot.m +++ b/external/fieldtrip/private/sourceplot.m @@ -105,7 +105,7 @@ % cfg.distmat = precomputed distance matrix (default = []) % cfg.camlight = 'yes' or 'no' (default = 'yes') % cfg.renderer = 'painters', 'zbuffer',' opengl' or 'none' (default = 'opengl') -% When using opacity the OpenGL renderer is required. +% When using opacity the OpenGL renderer is required. % TODO have to be built in: % cfg.marker = [Nx3] array defining N marker positions to display (orig: from sliceinterp) @@ -121,6 +121,29 @@ % Copyright (C) 2007-2008, Robert Oostenveld, Ingrid Nieuwenhuis % % $Log: sourceplot.m,v $ +% Revision 1.75 2009/08/30 14:58:42 crimic +% typo corrected +% +% Revision 1.74 2009/08/24 09:15:07 jansch +% included (experimental and undocumented) possibility to use image, rather than +% imagesc for the plotting, allowing for coding different aspects of the data in +% rgb-space +% +% Revision 1.73 2009/07/14 07:27:30 roboos +% replaced read_fcdc_mri with read_mri to avoid warning +% +% Revision 1.72 2009/07/08 08:10:29 roboos +% also detect int8 and int16 anatomical MRI and convert to double +% +% Revision 1.71 2009/06/17 14:05:25 roboos +% use ischar instead of isstr +% +% Revision 1.70 2009/06/17 14:03:41 roboos +% consistent handling of ginput in case figure is closed +% +% Revision 1.69 2009/05/29 14:12:32 ingnie +% only do intelligent masking (meaning opacity=0.5 when anatomy present) if not method = surface +% % Revision 1.68 2009/05/14 12:03:59 jansch % some changes to experimentally plot 4D and 5D volumes, undocumented % @@ -225,14 +248,14 @@ %%% checkdata see below!!! %%% % set the common defaults -if ~isfield(cfg, 'method'), cfg.method = 'ortho'; end +if ~isfield(cfg, 'method'), cfg.method = 'ortho'; end if ~isfield(cfg, 'anaparameter'), if isfield(data, 'anatomy'), cfg.anaparameter = 'anatomy'; else cfg.anaparameter = []; end -end +end % all methods if ~isfield(cfg, 'funparameter'), cfg.funparameter = []; end @@ -241,16 +264,16 @@ if ~isfield(cfg, 'title'), cfg.title = ''; end if ~isfield(cfg, 'atlas'), cfg.atlas = []; end if ~isfield(cfg, 'marker'), cfg.marker = []; end %TODO implement marker -if ~isfield(cfg, 'markersize'), cfg.markersize = 5; end +if ~isfield(cfg, 'markersize'), cfg.markersize = 5; end if ~isfield(cfg, 'markercolor'), cfg.markercolor = [1,1,1]; end % set the common defaults for the functional data -if ~isfield(cfg, 'funcolormap'), cfg.funcolormap = 'auto'; end -if ~isfield(cfg, 'funcolorlim'), cfg.funcolorlim = 'auto'; end; +if ~isfield(cfg, 'funcolormap'), cfg.funcolormap = 'auto'; end +if ~isfield(cfg, 'funcolorlim'), cfg.funcolorlim = 'auto'; end; % set the common defaults for the statistical data -if ~isfield(cfg, 'opacitymap'), cfg.opacitymap = 'auto'; end; -if ~isfield(cfg, 'opacitylim'), cfg.opacitylim = 'auto'; end; +if ~isfield(cfg, 'opacitymap'), cfg.opacitymap = 'auto'; end; +if ~isfield(cfg, 'opacitylim'), cfg.opacitylim = 'auto'; end; if ~isfield(cfg, 'roi'), cfg.roi = []; end; % set the defaults per method @@ -264,7 +287,7 @@ if ~isfield(cfg, 'queryrange'); cfg.queryrange = 3; end if ~isfield(cfg, 'inputcoord'); cfg.inputcoord = []; end if isfield(cfg, 'TTlookup'), - error('TTlookup is old; now specify cfg.atlas, see help!'); + error('TTlookup is old; now specify cfg.atlas, see help!'); end % slice if ~isfield(cfg, 'nslices'); cfg.nslices = 20; end @@ -290,11 +313,11 @@ end %%%%%%% -if isstr(data) +if ischar(data) % read the anatomical MRI data from file filename = data; fprintf('reading MRI from file\n'); - data = read_fcdc_mri(filename); + data = read_mri(filename); end % check if the input data is valid for this function @@ -334,19 +357,17 @@ hasroi = 1; tmpcfg.roi = cfg.roi; tmpcfg.atlas = cfg.atlas; - tmpcfg.inputcoord = cfg.inputcoord; + tmpcfg.inputcoord = cfg.inputcoord; roi = volumelookup(tmpcfg,data); end end - + %%% anaparameter if isequal(cfg.anaparameter,'anatomy') if isfield(data, 'anatomy') hasana = 1; - mri8 = isa(data.anatomy, 'uint8'); - mri16 = isa(data.anatomy, 'uint16'); % convert integers to single precision float if neccessary - if mri8 || mri16 + if isa(data.anatomy, 'uint8') || isa(data.anatomy, 'uint16') || isa(data.anatomy, 'int8') || isa(data.anatomy, 'int16') fprintf('converting anatomy to double\n'); ana = double(data.anatomy); else @@ -379,12 +400,31 @@ end % handle fun -if hasfun +if hasfun && issubfield(data, 'dimord') && strcmp(data.dimord(end-2:end),'rgb') + % treat functional data as rgb values + if any(fun(:)>1 | fun(:)<0) + %scale + tmpdim = size(fun); + nvox = prod(tmpdim(1:end-1)); + tmpfun = reshape(fun,[nvox tmpdim(end)]); + m1 = max(tmpfun,[],1); + m2 = min(tmpfun,[],1); + tmpfun = (tmpfun-m2(ones(nvox,1),:))./(m1(ones(nvox,1),:)-m2(ones(nvox,1),:)); + fun = reshape(tmpfun, tmpdim); + end + qi = 1; + hasfreq = 0; + hastime = 0; + + doimage = 1; + fcolmin = 0; + fcolmax = 1; +elseif hasfun % determine scaling min and max (fcolmin fcolmax) and funcolormap funmin = min(fun(:)); funmax = max(fun(:)); % smart lims: make from auto other string - if isequal(cfg.funcolorlim,'auto') + if isequal(cfg.funcolorlim,'auto') if sign(funmin)>-1 && sign(funmax)>-1 cfg.funcolorlim = 'zeromax'; elseif sign(funmin)<1 && sign(funmax)<1 @@ -415,7 +455,7 @@ fcolmin = cfg.funcolorlim(1); fcolmax = cfg.funcolorlim(2); % smart colormap - if isequal(cfg.funcolormap,'auto') + if isequal(cfg.funcolormap,'auto') if sign(fcolmin) == -1 && sign(fcolmax) == 1 cfg.funcolormap = 'jet'; else @@ -433,7 +473,7 @@ fprintf('taking absolute value of complex data\n'); fun = abs(fun); end - + %what if fun is 4D? if ndims(fun)>3, if isfield(data, 'time') && isfield(data, 'freq'), @@ -458,10 +498,14 @@ hasfreq = 0; hastime = 0; end + + doimage = 0; else qi = 1; hasfreq = 0; hastime = 0; + + doimage = 0; end % handle fun %%% maskparameter @@ -521,7 +565,7 @@ if isequal(cfg.opacitymap,'auto'), cfg.opacitymap = 'vdown'; end; otherwise error('incorrect specification of cfg.opacitylim'); - end + end % switch opacitylim else % limits are numeric opacmin = cfg.opacitylim(1); @@ -537,10 +581,10 @@ end end % handling opacitylim and opacitymap clear mskmin mskmax; -end +end -% prevent outside fun from being plotted -if hasfun && isfield(data,'inside') && ~hasmsk +% prevent outside fun from being plotted in slice and orthoplot +if hasfun && isfield(data,'inside') && ~hasmsk && ~isequal(cfg.method,'surface') hasmsk = 1; msk = zeros(dim); cfg.opacitymap = 'rampup'; @@ -579,7 +623,7 @@ %%% determine what has to be plotted, depends on method if isequal(cfg.method,'ortho') - if ~isstr(cfg.location) + if ~ischar(cfg.location) if strcmp(cfg.locationcoordinates, 'head') % convert the headcoordinates location into voxel coordinates loc = inv(data.transform) * [cfg.location(:); 1]; @@ -611,29 +655,29 @@ end % determine the initial intersection of the cursor (xi yi zi) - if isstr(loc) && strcmp(loc, 'min') + if ischar(loc) && strcmp(loc, 'min') if isempty(cfg.funparameter) error('cfg.location is min, but no functional parameter specified'); end [minval, minindx] = min(fun(:)); [xi, yi, zi] = ind2sub(dim, minindx); - elseif isstr(loc) && strcmp(loc, 'max') + elseif ischar(loc) && strcmp(loc, 'max') if isempty(cfg.funparameter) error('cfg.location is max, but no functional parameter specified'); end [maxval, maxindx] = max(fun(:)); [xi, yi, zi] = ind2sub(dim, maxindx); - elseif isstr(loc) && strcmp(loc, 'center') + elseif ischar(loc) && strcmp(loc, 'center') xi = round(dim(1)/2); yi = round(dim(2)/2); zi = round(dim(3)/2); - elseif ~isstr(loc) + elseif ~ischar(loc) % using nearest instead of round ensures that the position remains within the volume xi = nearest(1:dim(1), loc(1)); yi = nearest(1:dim(2), loc(2)); zi = nearest(1:dim(3), loc(3)); end - + %% do the actual plotting %% nas = []; lpa = []; @@ -658,7 +702,7 @@ if hasfun && ~hasatlas val = fun(xi, yi, zi, qi); if ~hasfreq && ~hastime, - fprintf('voxel %d, indices [%d %d %d], location [%.1f %.1f %.1f], value %f\n', sub2ind(dim, xi, yi, zi), ijk(1:3), xyz(1:3), val); + fprintf('voxel %d, indices [%d %d %d], location [%.1f %.1f %.1f], value %f\n', sub2ind(dim, xi, yi, zi), ijk(1:3), xyz(1:3), val); elseif hastime && hasfreq, val = fun(xi, yi, zi, qi(1), qi(2)); fprintf('voxel %d, indices [%d %d %d %d %d], %s coordinates [%.1f %.1f %.1f %.1f %.1f], value %f\n', [sub2ind(dim(1:3), xi, yi, zi), ijk(1:3)', qi], cfg.inputcoord, [xyz(1:3)' data.freq(qi(1)) data.time(qi(2))], val); @@ -677,7 +721,7 @@ end if hasatlas - % determine the anatomical label of the current position + % determine the anatomical label of the current position lab = atlas_lookup(atlas, (xyz(1:3)), 'inputcoord', cfg.inputcoord, 'queryrange', cfg.queryrange); if isempty(lab) fprintf([f,' labels: not found\n']); @@ -690,7 +734,7 @@ fprintf('\n'); end end - + % make vols and scales, containes volumes to be plotted (fun, ana, msk) vols = {}; if hasana; vols{1} = ana; scales{1} = []; end; % needed when only plotting ana @@ -701,22 +745,22 @@ % this seems to be a problem that people often have error('no anatomy is present and no functional data is selected, please check your cfg.funparameter'); end - + h1 = subplot(2,2,1); - [vols2D] = handle_ortho(vols, [xi yi zi qi], 2, dim); - plot2D(vols2D, scales); + [vols2D] = handle_ortho(vols, [xi yi zi qi], 2, dim, doimage); + plot2D(vols2D, scales, doimage); xlabel('i'); ylabel('k'); axis(cfg.axis); if strcmp(cfg.crosshair, 'yes'), crosshair([xi zi]); end - + h2 = subplot(2,2,2); - [vols2D] = handle_ortho(vols, [xi yi zi qi], 1, dim); - plot2D(vols2D, scales); + [vols2D] = handle_ortho(vols, [xi yi zi qi], 1, dim, doimage); + plot2D(vols2D, scales, doimage); xlabel('j'); ylabel('k'); axis(cfg.axis); if strcmp(cfg.crosshair, 'yes'), crosshair([yi zi]); end h3 = subplot(2,2,3); - [vols2D] = handle_ortho(vols, [xi yi zi qi], 3, dim); - plot2D(vols2D, scales); + [vols2D] = handle_ortho(vols, [xi yi zi qi], 3, dim, doimage); + plot2D(vols2D, scales, doimage); xlabel('i'); ylabel('j'); axis(cfg.axis); if strcmp(cfg.crosshair, 'yes'), crosshair([xi yi]); end @@ -730,7 +774,7 @@ caxis([-1 1].*max(abs(caxis))); colorbar; %caxis([fcolmin fcolmax]); - %set(gca, 'Visible', 'off'); + %set(gca, 'Visible', 'off'); elseif hasfreq && hasfun, subplot(2,2,4); plot(data.freq, squeeze(vols{2}(xi,yi,zi,:))); xlabel('freq'); @@ -756,66 +800,76 @@ set(gcf, 'renderer', cfg.renderer); % ensure that this is done in interactive mode drawnow; - + if interactive_flag - try, [d1, d2, key] = ginput(1); catch, key='q'; end + try + [d1, d2, key] = ginput(1); + catch + % this happens if the figure is closed + key='q'; + end + if isempty(key) % this happens if you press the apple key - % do nothing - elseif key=='q' - break; - elseif key=='l' - lpa = [xi yi zi]; - elseif key=='r' - rpa = [xi yi zi]; - elseif key=='n' - nas = [xi yi zi]; - elseif key=='i' || key=='j' || key=='k' || key=='m' - % update the view to a new position - if l1=='i' && l2=='k' && key=='i', zi = zi+1; - elseif l1=='i' && l2=='k' && key=='j', xi = xi-1; - elseif l1=='i' && l2=='k' && key=='k', xi = xi+1; - elseif l1=='i' && l2=='k' && key=='m', zi = zi-1; - elseif l1=='i' && l2=='j' && key=='i', yi = yi+1; - elseif l1=='i' && l2=='j' && key=='j', xi = xi-1; - elseif l1=='i' && l2=='j' && key=='k', xi = xi+1; - elseif l1=='i' && l2=='j' && key=='m', yi = yi-1; - elseif l1=='j' && l2=='k' && key=='i', zi = zi+1; - elseif l1=='j' && l2=='k' && key=='j', yi = yi-1; - elseif l1=='j' && l2=='k' && key=='k', yi = yi+1; - elseif l1=='j' && l2=='k' && key=='m', zi = zi-1; - end; - else - % update the view to a new position - l1 = get(get(gca, 'xlabel'), 'string'); - l2 = get(get(gca, 'ylabel'), 'string'); - switch l1, - case 'i' - xi = d1; - case 'j' - yi = d1; - case 'k' - zi = d1; - case 'freq' - qi = nearest(data.freq,d1); - case 'time' - qi = nearest(data.time,d1); - end - switch l2, - case 'i' - xi = d2; - case 'j' - yi = d2; - case 'k' - zi = d2; - case 'freq' - qi = [nearest(data.freq,d2) qi(1)]; - end + key = ''; end + switch key + case '' + % do nothing + case 'q' + break; + case 'l' + lpa = [xi yi zi]; + case 'r' + rpa = [xi yi zi]; + case 'n' + nas = [xi yi zi]; + case {'i' 'j''k' 'm'} + % update the view to a new position + if l1=='i' && l2=='k' && key=='i', zi = zi+1; + elseif l1=='i' && l2=='k' && key=='j', xi = xi-1; + elseif l1=='i' && l2=='k' && key=='k', xi = xi+1; + elseif l1=='i' && l2=='k' && key=='m', zi = zi-1; + elseif l1=='i' && l2=='j' && key=='i', yi = yi+1; + elseif l1=='i' && l2=='j' && key=='j', xi = xi-1; + elseif l1=='i' && l2=='j' && key=='k', xi = xi+1; + elseif l1=='i' && l2=='j' && key=='m', yi = yi-1; + elseif l1=='j' && l2=='k' && key=='i', zi = zi+1; + elseif l1=='j' && l2=='k' && key=='j', yi = yi-1; + elseif l1=='j' && l2=='k' && key=='k', yi = yi+1; + elseif l1=='j' && l2=='k' && key=='m', zi = zi-1; + end; + otherwise + % update the view to a new position + l1 = get(get(gca, 'xlabel'), 'string'); + l2 = get(get(gca, 'ylabel'), 'string'); + switch l1, + case 'i' + xi = d1; + case 'j' + yi = d1; + case 'k' + zi = d1; + case 'freq' + qi = nearest(data.freq,d1); + case 'time' + qi = nearest(data.time,d1); + end + switch l2, + case 'i' + xi = d2; + case 'j' + yi = d2; + case 'k' + zi = d2; + case 'freq' + qi = [nearest(data.freq,d2) qi(1)]; + end + end % switch key end % if interactive_flag if ~isempty(nas), fprintf('nas = [%f %f %f]\n', nas); cfg.fiducial.nas = nas; else fprintf('nas = undefined\n'); end if ~isempty(lpa), fprintf('lpa = [%f %f %f]\n', lpa); cfg.fiducial.lpa = lpa; else fprintf('lpa = undefined\n'); end - if ~isempty(rpa), fprintf('rpa = [%f %f %f]\n', rpa); cfg.fiducial.rpa = rpa; else fprintf('rpa = undefined\n'); end + if ~isempty(rpa), fprintf('rpa = [%f %f %f]\n', rpa); cfg.fiducial.rpa = rpa; else fprintf('rpa = undefined\n'); end end % while interactive_flag elseif isequal(cfg.method,'glassbrain') @@ -830,14 +884,14 @@ tmpcfg.maskparameter = 'inside'; tmpcfg.axis = cfg.axis; tmpcfg.renderer = cfg.renderer; - if hasfun, + if hasfun, fun = getsubfield(data, cfg.funparameter); fun(1,:,:) = max(fun, [], 1); fun(:,1,:) = max(fun, [], 2); fun(:,:,1) = max(fun, [], 3); data = setsubfield(data, cfg.funparameter, fun); end - + if hasana, ana = getsubfield(data, 'anatomy'); %ana(1,:,:) = max(ana, [], 1); @@ -845,7 +899,7 @@ %ana(:,:,1) = max(ana, [], 3); data = setsubfield(data, 'anatomy', ana); end - + if hasmsk, msk = getsubfield(data, 'inside'); msk(1,:,:) = squeeze(fun(1,:,:))>0 & imfill(abs(squeeze(ana(1,:,:))-1))>0; @@ -855,7 +909,7 @@ end sourceplot(tmpcfg, data); - + elseif isequal(cfg.method,'surface') % read the triangulated cortical surface from file @@ -883,7 +937,7 @@ fprintf('%d voxels in functional data\n', prod(dim)); fprintf('%d vertices in cortical surface\n', size(surf.pnt,1)); - if hasfun + if hasfun [interpmat, cfg.distmat] = interp_gridded(data.transform, fun, surf.pnt, 'projmethod', cfg.projmethod, 'distmat', cfg.distmat, 'sphereradius', cfg.sphereradius, 'inside', data.inside); % interpolate the functional data val = interpmat * fun(data.inside(:)); @@ -953,7 +1007,7 @@ elseif isequal(cfg.method,'slice') % white BG => mskana - + %% TODO: HERE THE FUNCTION THAT MAKES TO SLICE DIMENSION ALWAYS THE THIRD %% DIMENSION, AND ALSO KEEP TRANSFORMATION MATRIX UP TO DATE % zoiets @@ -961,7 +1015,7 @@ %if hasfun; fun = shiftdim(fun,cfg.slicedim-1); end; %if hasmsk; msk = shiftdim(msk,cfg.slicedim-1); end; %%%%% select slices - if ~isstr(cfg.slicerange) + if ~ischar(cfg.slicerange) ind_fslice = cfg.slicerange(1); ind_lslice = cfg.slicerange(2); elseif isequal(cfg.slicerange, 'auto') @@ -992,7 +1046,7 @@ % update the dimensions of the volume if hasana; dim=size(ana); else dim=size(fun); end; - + %%%%% make "quilts", that contain all slices on 2D patched sheet % Number of patches along sides of Quilt (M and N) % Size (in voxels) of side of patches of Quilt (m and n) @@ -1032,10 +1086,8 @@ if hasana; vols2D{1} = quilt_ana; scales{1} = []; end; % needed when only plotting ana if hasfun; vols2D{2} = quilt_fun; scales{2} = [fcolmin fcolmax]; end; if hasmsk; vols2D{3} = quilt_msk; scales{3} = [opacmin opacmax]; end; - - plot2D(vols2D, scales); + plot2D(vols2D, scales, doimage); axis off - if strcmp(cfg.colorbar, 'yes'), if hasfun % use a normal Matlab coorbar @@ -1052,13 +1104,13 @@ set(gcf, 'renderer', cfg.renderer); % get the output cfg -cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); +cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % handle_ortho makes an overlay of 3D anatomical, functional and probability % volumes. The three volumes must be scaled between 0 and 1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function [vols2D] = handle_ortho(vols, indx, slicedir, dim); +function [vols2D] = handle_ortho(vols, indx, slicedir, dim, doimage) % put 2Dvolumes in fun, ana and msk if length(vols)>=1 && isempty(vols{1}); hasana=0; else ana=vols{1}; hasana=1; end; @@ -1094,8 +1146,18 @@ % cut out the slice of interest if hasana; ana = squeeze(ana(xi,yi,zi)); end; -if hasfun; fun = squeeze(fun(xi,yi,zi,qi(1),qi(2))); end; -if hasmsk; msk = squeeze(msk(xi,yi,zi)); end; +if hasfun; + if doimage + fun = squeeze(fun(xi,yi,zi,:)); + else + fun = squeeze(fun(xi,yi,zi,qi(1),qi(2))); + end +end +if hasmsk && length(size(msk))>3 + msk = squeeze(msk(xi,yi,zi,qi(1),qi(2))); +elseif hasmsk + msk = squeeze(msk(xi,yi,zi)); +end; %put fun, ana and msk in vols2D if hasana; vols2D{1} = ana; end; @@ -1105,7 +1167,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % plot2D plots a two dimensional plot, used in ortho and slice %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function plot2D(vols2D, scales); +function plot2D(vols2D, scales, doimage); cla; % put 2D volumes in fun, ana and msk hasana = length(vols2D)>0 && ~isempty(vols2D{1}); @@ -1114,7 +1176,8 @@ % the transpose is needed for displaying the matrix using the Matlab image() function if hasana; ana = vols2D{1}'; end; -if hasfun; fun = vols2D{2}'; end; +if hasfun && ~doimage; fun = vols2D{2}'; end; +if hasfun && doimage; fun = permute(vols2D{2},[2 1 3]); end; if hasmsk; msk = vols2D{3}'; end; @@ -1132,16 +1195,22 @@ hold on if hasfun - hf = imagesc(fun); - caxis(scales{2}); - % apply the opacity mask to the functional data - if hasmsk - % set the opacity - set(hf, 'AlphaData', msk) - set(hf, 'AlphaDataMapping', 'scaled') - alim(scales{3}); - elseif hasana - set(hf, 'AlphaData', 0.5) + + if doimage + hf = image(fun); + else + hf = imagesc(fun); + caxis(scales{2}); + % apply the opacity mask to the functional data + if hasmsk + % set the opacity + set(hf, 'AlphaData', msk) + set(hf, 'AlphaDataMapping', 'scaled') + alim(scales{3}); + elseif hasana + set(hf, 'AlphaData', 0.5) + end + end end diff --git a/external/fieldtrip/private/splint_gh.mexmaci b/external/fieldtrip/private/splint_gh.mexmaci index 10660afd36bf7a66fa9f864244fabedba5be32a3..4f4ccb9685ada693b3f328bbe0139ab16ab889f3 100755 GIT binary patch delta 45 zcmaEm{2+OQ3bVkn6W5b8M6}u$v0rO;`ggl|vk9}j9=9<=ytAH#p0S0c(d0P8CIGd= B5XS%j delta 45 zcmaEm{2+OQ3bVkQ_ix-c?N2=RyCL+f$D{!J%_hw9dfcWA@y>b{dd3!(CX?d~n*i@# B5<>t0 diff --git a/external/fieldtrip/private/standardise.m b/external/fieldtrip/private/standardise.m index 7c1654d..335f71a 100644 --- a/external/fieldtrip/private/standardise.m +++ b/external/fieldtrip/private/standardise.m @@ -1,4 +1,4 @@ -function x = standardise(x,dim) +function [x,mx,sx] = standardise(x,dim) % X = STANDARDISE(X, DIM) computes the zscore of a matrix along dimension dim % has extended functionality as compared to the stats-toolbox's zscore function @@ -6,10 +6,16 @@ % Copyright (C) 2009, Jan-Mathijs Schoffelen % % $Log: standardise.m,v $ +% Revision 1.2 2009/06/16 15:44:29 jansch +% added automatic dim detection (first non singular dimension) for nargin==1. +% added mean and std to output +% % Revision 1.1 2009/05/19 15:59:11 jansch % first commitment into cvs % +if nargin == 1, dim = find(size(x)>1,1,'first'); end + n = size(x,dim); mx = mean(x,dim); %sx = std(x,0,dim); diff --git a/external/fieldtrip/private/statistics_montecarlo.m b/external/fieldtrip/private/statistics_montecarlo.m index 3448633..0647590 100644 --- a/external/fieldtrip/private/statistics_montecarlo.m +++ b/external/fieldtrip/private/statistics_montecarlo.m @@ -81,6 +81,9 @@ % Copyright (C) 2005-2007, Robert Oostenveld % % $Log: statistics_montecarlo.m,v $ +% Revision 1.31 2009/08/06 08:31:31 roboos +% renamed some internal variables +% % Revision 1.30 2009/04/23 07:48:23 roboos % added cfg.randomseed option, default is yes % @@ -381,8 +384,8 @@ % compare each data element with the maximum statistic prb_pos = prb_pos + (statobsmin(statrand(:))); - ref_pos(i) = max(statrand(:)); - ref_neg(i) = min(statrand(:)); + posdistribution(i) = max(statrand(:)); + negdistribution(i) = min(statrand(:)); else % compare each data element with its own statistic prb_pos = prb_pos + (statobs %d)\n',k, nref*nchan, i, j); + + if widthparam(i,j)>0 + xbeg = lay.pos(refindx(i),1); + ybeg = lay.pos(refindx(i),2); + xend = lay.pos(chanindx(j),1); + yend = lay.pos(chanindx(j),2); + x = [xbeg xend]'; + y = [ybeg yend]'; + % h = line(x, y); + h = patch(x, y, 1); + + if ~isempty(widthparam) + set(h, 'LineWidth', widthparam(i,j)); + end + + if ~isempty(alphaparam) + set(h, 'EdgeAlpha', alphaparam(i,j)); + end + + if ~isempty(colorparam) + set(h, 'EdgeColor', rgb(colorparam(i,j),:)); + end + + end + end +end +progress('close'); + +% also plot the position of the electrodes +plot(lay.pos(:,1), lay.pos(:,2), 'k.'); + +% also plot the outline, i.e. head shape or sulci +if isfield(lay, 'outline') + fprintf('solid lines indicate the outline, e.g. head shape or sulci\n'); + for i=1:length(lay.outline) + if ~isempty(lay.outline{i}) + X = lay.outline{i}(:,1); + Y = lay.outline{i}(:,2); + h = line(X, Y); + set(h, 'color', 'k'); + set(h, 'linewidth', 1.5); + set(h, 'linestyle', '-'); + end + end +end + +% also plot the mask, i.e. global outline for masking the topoplot +if isfield(lay, 'mask') + fprintf('dashed lines indicate the mask for topograpic interpolation\n'); + for i=1:length(lay.mask) + if ~isempty(lay.mask{i}) + X = lay.mask{i}(:,1); + Y = lay.mask{i}(:,2); + % the polygon representing the mask should be closed + X(end+1) = X(1); + Y(end+1) = Y(1); + h = line(X, Y); + set(h, 'color', 'k'); + set(h, 'linewidth', 1.5); + set(h, 'linestyle', '-'); + end + end +end + +% get the output cfg +cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); + +if nargout<1 + clear cfg +end diff --git a/external/fieldtrip/private/topoplotER.m b/external/fieldtrip/private/topoplotER.m index 3fc7b86..98fdd8d 100644 --- a/external/fieldtrip/private/topoplotER.m +++ b/external/fieldtrip/private/topoplotER.m @@ -14,7 +14,7 @@ % 'avg', 'powspctrm' or 'cohspctrm' (default depends on data.dimord) % cfg.xlim = 'maxmin' or [xmin xmax] (default = 'maxmin') % cfg.zlim = 'maxmin', 'absmax' or [zmin zmax] (default = 'maxmin') -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.baseline = 'yes','no' or [time1 time2] (default = 'no'), see TIMELOCKBASELINE or FREQBASELINE % cfg.baselinetype = 'absolute' or 'relative' (default = 'absolute') % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') @@ -71,6 +71,18 @@ % Copyright (C) 2005-2006, F.C. Donders Centre % % $Log: topoplotER.m,v $ +% Revision 1.58 2009/07/14 13:51:32 roboos +% some small changes related to the new interactive data selection +% +% Revision 1.57 2009/07/14 13:21:09 roboos +% changed the interactive plotting: instead of using plotSelection it now uses the selection function from the new plotting module (select_range and select_channel) and uses a local subfunction to update the cfg and call the next figure +% +% Revision 1.56 2009/06/17 14:05:25 roboos +% use ischar instead of isstr +% +% Revision 1.55 2009/06/17 13:44:52 roboos +% cleaned up help +% % Revision 1.54 2009/05/12 18:58:49 roboos % added handling of cfg.cohrefchannel='gui' for manual/interactive selection % @@ -186,6 +198,7 @@ fieldtripdefs cfg = checkconfig(cfg, 'trackconfig', 'on'); +cfg = checkconfig(cfg, 'unused', {'cohtargetchannel'}); cla @@ -299,9 +312,6 @@ if ~isfield(cfg, 'zparam'), cfg.zparam='topo'; end end -% Old style coherence plotting with cohtargetchannel is no longer supported: -cfg = checkconfig(cfg, 'unused', {'cohtargetchannel'}); - % Read or create the layout that will be used for plotting: lay = prepare_layout(cfg, data); cfg.layout = lay; @@ -332,12 +342,13 @@ h = clf; plot_lay(lay, 'box', false); title('Select the reference channel by clicking on it...'); - info = []; + % add the channel information to the figure + info = guidata(gcf); info.x = lay.pos(:,1); info.y = lay.pos(:,2); info.label = lay.label; guidata(h, info); - set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_cohrefchannel, cfg, data}}); + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'callback', {@select_topoplotER, cfg, data}}); return end @@ -460,7 +471,7 @@ comment = sprintf('%0s=[%.3g %.3g]', cfg.xparam, cfg.xlim(1), cfg.xlim(2)); end cfg.comment = comment; -elseif ~isstr(cfg.comment) +elseif ~ischar(cfg.comment) error('cfg.comment must be string'); end @@ -470,39 +481,26 @@ % The remainder of the code is meant to make the figure interactive hold on; +% Make the figure interactive if strcmp(cfg.interactive, 'yes') - userData.hFigure = gcf; - userData.hAxes = gca; - for i=1:10 - userData.hSelection{i} = plot(0,0); - set(userData.hSelection{i}, ... - 'XData', [0], ... - 'YData', [0], ... - 'Color', [0 0 0], ... - 'EraseMode', 'xor', ... - 'LineStyle', '--', ... - 'LineWidth', 1.5, ... - 'Visible', 'on'); - userData.range{i} = []; + % add the channel information to the figure + info = guidata(gcf); + info.x = lay.pos(:,1); + info.y = lay.pos(:,2); + info.label = lay.label; + guidata(gcf, info); + + if any(strcmp(data.dimord, {'chan_time', 'chan_freq', 'subj_chan_time', 'rpt_chan_time'})) + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotER, cfg, varargin{:}}, 'event', 'WindowButtonMotionFcn'}); + elseif any(strcmp(data.dimord, {'chan_freq_time', 'subj_chan_freq_time', 'rpt_chan_freq_time', 'rpttap_chan_freq_time'})) + set(gcf, 'WindowButtonUpFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, varargin{:}}, 'event', 'WindowButtonUpFcn'}); + set(gcf, 'WindowButtonDownFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, varargin{:}}, 'event', 'WindowButtonDownFcn'}); + set(gcf, 'WindowButtonMotionFcn', {@select_channel, 'multiple', true, 'callback', {@select_singleplotTFR, cfg, varargin{:}}, 'event', 'WindowButtonMotionFcn'}); + else + error('unsupported dimord "%" for interactive plotting', data.dimord); end - userData.iSelection = 0; - userData.plotType = 'topoplot'; - userData.selecting = 0; - userData.selectionType = ''; - userData.selectAxes = 'z'; - userData.lastClick = []; - userData.cfg = cfg; - userData.data = data; - userData.chanX = chanX; - userData.chanY = chanY; - userData.chanLabels = chanLabels; - tag = sprintf('%.5f', 10000 * rand(1)); - set(gcf, 'Renderer', cfg.renderer); - set(gcf, 'Tag', tag); - set(gcf, 'UserData', userData); - set(gcf, 'WindowButtonMotionFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 0);']); - set(gcf, 'WindowButtonDownFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 1);']); - set(gcf, 'WindowButtonUpFcn', ['plotSelection(get(findobj(''Tag'', ''' tag '''), ''UserData''), 2);']); end axis off; @@ -512,12 +510,49 @@ cfg = checkconfig(cfg, 'trackconfig', 'off', 'checksize', 'yes'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SUBFUNCTION -% this function is called by select_channel +% SUBFUNCTION which is called after selecting channels in case of cfg.cohrefchannel='gui' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function select_cohrefchannel(label, cfg, varargin) -fprintf('selected "%s" as reference channel\n', label); +function select_topoplotER(label, cfg, varargin) cfg.cohrefchannel = label; -figure +fprintf('selected cfg.cohrefchannel = ''%s''\n', cfg.cohrefchannel); +p = get(gcf, 'Position'); +f = figure; +set(f, 'Position', p); topoplotER(cfg, varargin{:}); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting channels in case of cfg.interactive='yes' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_singleplotER(label, cfg, varargin) +if ~isempty(label) + cfg.xlim = 'maxmin'; + cfg.channel = label; + fprintf('selected cfg.channel = {'); + for i=1:(length(cfg.channel)-1) + fprintf('''%s'', ', cfg.channel{i}); + end + fprintf('''%s''}\n', cfg.channel{end}); + p = get(gcf, 'Position'); + f = figure; + set(f, 'Position', p); + singleplotER(cfg, varargin{:}); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTION which is called after selecting channels in case of cfg.interactive='yes' +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function select_singleplotTFR(label, cfg, varargin) +if ~isempty(label) + cfg.xlim = 'maxmin'; + cfg.ylim = 'maxmin'; + cfg.channel = label; + fprintf('selected cfg.channel = {'); + for i=1:(length(cfg.channel)-1) + fprintf('''%s'', ', cfg.channel{i}); + end + fprintf('''%s''}\n', cfg.channel{end}); + p = get(gcf, 'Position'); + f = figure; + set(f, 'Position', p); + singleplotTFR(cfg, varargin{:}); +end diff --git a/external/fieldtrip/private/topoplotTFR.m b/external/fieldtrip/private/topoplotTFR.m index 4f5bd06..f24d692 100644 --- a/external/fieldtrip/private/topoplotTFR.m +++ b/external/fieldtrip/private/topoplotTFR.m @@ -18,7 +18,7 @@ % cfg.xlim = 'maxmin' or [xmin xmax] (default = 'maxmin') % cfg.ylim = 'maxmin' or [ymin ymax] (default = 'maxmin') % cfg.zlim = 'maxmin', 'absmax' or [zmin zmax] (default = 'maxmin') -% cfg.cohrefchannel = Name of reference-channel, only for visualizing coherence +% cfg.cohrefchannel = name of reference channel for visualising coherence, can be 'gui' % cfg.baseline = 'yes','no' or [time1 time2] (default = 'no'), see FREQBASELINE % cfg.baselinetype = 'absolute' or 'relative' (default = 'absolute') % cfg.trials = 'all' or a selection given as a 1xN vector (default = 'all') @@ -57,6 +57,9 @@ % Copyright (C) 2005-2006, F.C. Donders Centre % % $Log: topoplotTFR.m,v $ +% Revision 1.21 2009/06/17 13:44:52 roboos +% cleaned up help +% % Revision 1.20 2008/12/16 15:31:42 sashae % plot functions can now give cfg as output % added checkconfig to start and end of function, configtracking possible diff --git a/external/fieldtrip/private/trialfun_twoclass_classification.m b/external/fieldtrip/private/trialfun_twoclass_classification.m new file mode 100644 index 0000000..2e877ee --- /dev/null +++ b/external/fieldtrip/private/trialfun_twoclass_classification.m @@ -0,0 +1,79 @@ +function [trl] = trialfun_Subject01(cfg) + +% This trial function can be used to train and test a real-time +% classifier in offline and online mode. It selects pieces of data +% in the two classes based on two trigger values. The first N occurences +% in each class are marked as training items. All subsequent occurrences +% are marked as test items. +% +% This function can be used in conjunction with rt_classification and uses the options +% cfg.trialdef.numtrain = numberof training items, e.g. 20 +% cfg.trialdef.eventvalue1 = trigger value for the 1st class +% cfg.trialdef.eventvalue2 = trigger value for the 2nd class +% cfg.trialdef.eventtype = string, e.g. 'trigger' +% cfg.trialdef.prestim = latency in seconds, e.g. 0.3 +% cfg.trialdef.poststim = latency in seconds, e.g. 0.7 + +% $Log: trialfun_twoclass_classification.m,v $ +% Revision 1.2 2009/06/04 15:36:21 roboos +% some small fixes +% +% Revision 1.1 2009/06/04 14:17:43 roboos +% first version, not yet tested +% + +% these are used to count the number of training items in each class +persistent numtrain1 +persistent numtrain2 + +if isempty(numtrain1) + numtrain1 = 0; +end +if isempty(numtrain2) + numtrain2 = 0; +end + +if isfield(cfg, 'hdr') + hdr = cfg.hdr; +else + hdr = read_header(cfg.headerfile); +end + +if isfield(cfg, 'event') + event = cfg.event; +else + event = read_event(cfg.headerfile); +end + +baseline = round(cfg.trialdef.prestim*hdr.Fs); +duration = round(cfg.trialdef.prestim*hdr.Fs + cfg.trialdef.poststim*hdr.Fs); + +% make a subset of the interesting events +sel = strcmp(cfg.trialdef.eventtype, {event.type}); +event = event(sel); +num = length(event); +trl = zeros(num,5); + +for i=1:num + % determine the location of this trial in the data stream + begsample = event(i).sample - baseline; + endsample = begsample + duration - 1; + offset = baseline; + % determine the class and wether this trial is eligeable for training + if event(i).value==cfg.trialdef.eventvalue1 + class = 1; + train = (numtrain1 < cfg.trialdef.numtrain); % boolean + numtrain1 = numtrain1 + train; % increment the counter + elseif event(i).value==cfg.trialdef.eventvalue2 + class = 2; + train = (numtrain2 < cfg.trialdef.numtrain); % boolean + numtrain2 = numtrain2 + train; % increment the counter + else + % the class is unknown and therefore irrelevant + class = nan; + train = false; + end + % remember this trial, the class and whether it should be used for training + trl(i,:) = [begsample endsample offset class train]; +end + diff --git a/external/fieldtrip/private/uilayout.m b/external/fieldtrip/private/uilayout.m new file mode 100644 index 0000000..934ef32 --- /dev/null +++ b/external/fieldtrip/private/uilayout.m @@ -0,0 +1,163 @@ +function uilayout(h, varargin) + +% UILAYOUT is a helper function to facilitate the layout of multiple +% usercontrol elements + +% Copyright (C) 2009, Robert Oostenveld +% +% $Log: uilayout.m,v $ +% Revision 1.3 2009/08/04 12:42:34 ingnie +% fixed typo +% +% Revision 1.2 2009/08/04 12:29:29 ingnie +% fixed small typo +% +% Revision 1.1 2009/08/04 11:57:47 roboos +% implemented helper function for consistent setting of uicontrol details and for consistent and/or automatic layouting +% + +% these are used to make a selection of uicontrol elements +tag = keyval('tag', varargin{:}); +style = keyval('style', varargin{:}); + +% determine all children +if ~isempty(tag) && ~isempty(style) + c = findall(h, 'tag', tag, 'style', style); +elseif ~isempty(tag) + c = findall(h, 'tag', tag); +elseif ~isempty(style) + c = findall(h, 'style', style); +else + c = findall(h); +end +c = flipud(c); +% fprintf('selected %d elements\n', numel(c)); + +% these are the normal features of an uicontrol +BackgroundColor = keyval('BackgroundColor', varargin{:}); +CallBack = keyval('CallBack', varargin{:}); +Clipping = keyval('Clipping', varargin{:}); +Enable = keyval('Enable', varargin{:}); +FontAngle = keyval('FontAngle', varargin{:}); +FontName = keyval('FontName', varargin{:}); +FontSize = keyval('FontSize', varargin{:}); +FontUnits = keyval('FontUnits', varargin{:}); +FontWeight = keyval('FontWeight', varargin{:}); +ForegroundColor = keyval('ForegroundColor', varargin{:}); +HorizontalAlignment = keyval('HorizontalAlignment', varargin{:}); +Max = keyval('Max', varargin{:}); +Min = keyval('Min', varargin{:}); +Position = keyval('Position', varargin{:}); +Selected = keyval('Selected', varargin{:}); +String = keyval('String', varargin{:}); +Units = keyval('Units', varargin{:}); +Value = keyval('Value', varargin{:}); +Visible = keyval('Visible', varargin{:}); +Tag = keyval('retag', varargin{:}); % this is to change the tag on the selected items +Style = keyval('restyle', varargin{:}); % this is to change the style on the selected items + +feature = { + 'BackgroundColor' + 'CallBack' + 'Clipping' + 'Enable' + 'FontAngle' + 'FontName' + 'FontSize' + 'FontUnits' + 'FontWeight' + 'ForegroundColor' + 'HorizontalAlignment' + 'Max' + 'Min' + 'Position' + 'Selected' + 'String' + 'Units' + 'Value' + 'Visible' + 'Tag' + 'Style' + }; + +for i=1:length(feature) + val = eval(feature{i}); + if ~isempty(val) + % fprintf('setting %s\n', feature{i}); + for j=1:length(c) + set(c(j), feature{i}, val) + end + end +end + +% these are special features to help with the positioning of the elements +hpos = keyval('hpos', varargin{:}); +vpos = keyval('vpos', varargin{:}); +width = keyval('width', varargin{:}); +height = keyval('height', varargin{:}); + +if isempty(hpos) && isempty(vpos) && isempty(width) && isempty(height) + % re-positioning of the elements is not needed + return +end + +pos = zeros(length(c), 4); +for i=1:length(c) + pos(i,:) = get(c(i), 'position'); +end + +if ~isempty(width) + pos(:,3) = width; +end +width = pos(:,3); + +if ~isempty(height) + pos(:,4) = height; +end +height = pos(:,4); + +if ~isempty(hpos) + if isequal(hpos, 'auto') + scale = (1 - 0.01 - 0.01*length(c)) / sum(width); + if scale>0 && scale<1 + % fprintf('adjusting width with %f\n', scale); + width = width*scale; + pos(:,3) = width; + end + hpos = cumsum([0.01; width+0.01]); + hpos = hpos(1:end-1); + elseif isequal(hpos, 'align') + hpos = pos(1,2); % the position of the first element + elseif isequal(hpos, 'distribute') + minpos = min(pos(:,1)); + maxpos = max(pos(:,1)); + hpos = linspace(minpos, maxpos, length(c)); + end + pos(:,1) = hpos; + pos(:,3) = width; +end % hpos + +if ~isempty(vpos) + if isequal(vpos, 'auto') + scale = (1 - 0.01 - 0.01*length(c)) / sum(height); + if scale>0 && scale<1 + % fprintf('adjusting height with %f\n', scale); + height = height*scale; + pos(:,4) = height; + end + vpos = cumsum([0.01; width]); + vpos = vpos(1:end-1); + elseif isequal(vpos, 'align') + vpos = pos(1,2); % the position of the first element + elseif isequal(vpos, 'distribute') + minpos = min(pos(:,2)); + maxpos = max(pos(:,2)); + vpos = linspace(minpos, maxpos, length(c)); + end + pos(:,2) = vpos; +end % vpos + +% assign the new/automatic position to each of the elements +for i=1:length(c) + set(c(i), 'position', pos(i,:)); +end diff --git a/external/fieldtrip/private/volumelookup.m b/external/fieldtrip/private/volumelookup.m index 98e87e8..543ce9e 100755 --- a/external/fieldtrip/private/volumelookup.m +++ b/external/fieldtrip/private/volumelookup.m @@ -27,7 +27,7 @@ % cfg.box = Nx3 vector, size of each box in cm/mm dep on unit of input % cfg.round2nearestvoxel = 'yes' or 'no' (default = 'no'), voxel closest to point of interest is calculated % and box/sphere is centered around coordinates of that voxel -% configuration options for labels to a mask: +% configuration options for labels from a mask: % cfg.inputcoord = 'mni' or 'tal', coordinate system of the mri/source/stat % cfg.atlas = string, filename of atlas to use, either the AFNI % brik file that is available from http://afni.nimh.nih.gov/afni/doc/misc/ttatlas_tlrc, @@ -42,6 +42,8 @@ % for j = 1:length(sel) % found_areas{j,1} = [num2str(labels.count(ind(j))) ': ' labels.name{ind(j)}]; % end +% in found_areas you can then see how many times which labels are found +% NB in the AFNI brick one location can have 2 labels! % % Dependent on the input coordinates and the coordinates of the atlas, the % input MRI is transformed betweem MNI and Talairach-Tournoux coordinates @@ -50,6 +52,9 @@ % Copyright (C) 2008, Robert Oostenveld, Ingrid Nieuwenhuis % % $Log: volumelookup.m,v $ +% Revision 1.5 2009/08/03 15:20:19 ingnie +% updated help +% % Revision 1.4 2009/01/29 13:54:57 ingnie % changed help % diff --git a/external/fieldtrip/private/volumenormalise.m b/external/fieldtrip/private/volumenormalise.m index b52a92e..3ed4ae7 100644 --- a/external/fieldtrip/private/volumenormalise.m +++ b/external/fieldtrip/private/volumenormalise.m @@ -38,6 +38,9 @@ % Copyright (C) 2004-2006, Jan-Mathijs Schoffelen % % $Log: volumenormalise.m,v $ +% Revision 1.21 2009/07/14 07:27:30 roboos +% replaced read_fcdc_mri with read_mri to avoid warning +% % Revision 1.20 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -137,7 +140,7 @@ if ischar(interp), fprintf('reading source MRI from file\n'); filename = interp; - interp = read_fcdc_mri(filename); + interp = read_mri(filename); if filetype(filename, 'ctf_mri') % based on the filetype assume that the coordinates correspond with CTF convention source_coordinates = 'ctf'; @@ -312,7 +315,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: volumenormalise.m,v 1.20 2009/01/20 13:01:31 sashae Exp $'; +cfg.version.id = '$Id: volumenormalise.m,v 1.21 2009/07/14 07:27:30 roboos Exp $'; % remember the configuration details of the input data try, cfg.previous = interp.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/volumerealign.m b/external/fieldtrip/private/volumerealign.m index b748a52..b77bf78 100644 --- a/external/fieldtrip/private/volumerealign.m +++ b/external/fieldtrip/private/volumerealign.m @@ -17,6 +17,8 @@ % an MRI). % % The configuration can contain the following options +% cfg.clim = [min max], scaling of the anatomy color (default +% is to adjust to the minimum and maximum) % cfg.method = different methods for aligning the electrodes % 'realignfiducial' realign the volume to the fiducials % 'interactive' manually using graphical user interface @@ -34,11 +36,25 @@ % - the Y-axis goes approximately towards LPA, orthogonal to X and in the plane spanned by the fiducials % - the Z-axis goes approximately towards the vertex, orthogonal to X and Y % -% See also READ_FCDC_MRI, ELECTRODEREALIGN +% +% See also READ_MRI, ELECTRODEREALIGN -% Copyright (C) 2006, Robert Oostenveld +% Copyright (C) 2006-2009, Robert Oostenveld % % $Log: volumerealign.m,v $ +% Revision 1.12 2009/07/31 13:43:36 jansch +% now really fixed a bug (unlike last time) +% +% Revision 1.11 2009/07/30 14:22:00 jansch +% fixed bug in input arguments for volplot +% +% Revision 1.10 2009/07/29 13:53:49 roboos +% added cfg.clim for color scaling, thanks to Hanneke +% +% Revision 2 2009/07/29 13:00:00 hanvdij +% Added colorscaling option in the volplot function at the end of this +% script. +% % Revision 1.9 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -79,6 +95,7 @@ % set the defaults if ~isfield(cfg, 'fiducial'), cfg.fiducial = []; end if ~isfield(cfg, 'parameter'), cfg.parameter = 'anatomy'; end +if ~isfield(cfg, 'clim'), cfg.clim = []; end if ~isfield(cfg, 'method') if ~isempty(cfg.fiducial) @@ -116,7 +133,7 @@ xc = round(xc); yc = round(yc); zc = round(zc); - volplot(x, y, z, dat, [xc yc zc]); + volplot(x, y, z, dat, [xc yc zc], cfg.clim); drawnow; try, [d1, d2, key] = ginput(1); catch, key='q'; end if key=='q' @@ -170,7 +187,11 @@ mri.transform = vox2head; else warning('removing old transformation matrix'); - mri.transform = vox2head; + scale = eye(4); + %FIXME check whether the following is ever necessary + %origvox2head = mri.transform; + %scale(1:3,1:3) = diag(sqrt(sum(origvox2head(1:3,1:3).^2,2))); + mri.transform = scale*vox2head; end % get the output cfg @@ -185,7 +206,7 @@ [st, i] = dbstack; cfg.version.name = st(i); end -cfg.version.id = '$Id: volumerealign.m,v 1.9 2009/01/20 13:01:31 sashae Exp $'; +cfg.version.id = '$Id: volumerealign.m,v 1.12 2009/07/31 13:43:36 jansch Exp $'; % remember the configuration mri.cfg = cfg; @@ -193,12 +214,19 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % helper function to show three orthogonal slices %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function volplot(x, y, z, dat, c); +function volplot(x, y, z, dat, c, cscale); xi = c(1); yi = c(2); zi = c(3); -cmin = min(dat(:)); -cmax = max(dat(:)); + +% manual color scaling of anatomy data is usefull in case of some pixel noise +if nargin<6 || isempty(cscale) + cmin = min(dat(:)); + cmax = max(dat(:)); +else + cmin = cscale(1); + cmax = cscale(2); +end h1 = subplot(2,2,1); h2 = subplot(2,2,2); diff --git a/external/fieldtrip/private/volumesegment.m b/external/fieldtrip/private/volumesegment.m index 45d715a..406c5a2 100644 --- a/external/fieldtrip/private/volumesegment.m +++ b/external/fieldtrip/private/volumesegment.m @@ -54,6 +54,9 @@ % cfg.segment = 'yes' or 'no' % $Log: volumesegment.m,v $ +% Revision 1.14 2009/07/14 07:27:30 roboos +% replaced read_fcdc_mri with read_mri to avoid warning +% % Revision 1.13 2009/01/20 13:01:31 sashae % changed configtracking such that it is only enabled when BOTH explicitly allowed at start % of the fieldtrip function AND requested by the user @@ -176,7 +179,7 @@ % read the anatomical MRI data from file filename = mri; fprintf('reading MRI from file\n'); - mri = read_fcdc_mri(filename); + mri = read_mri(filename); if filetype(filename, 'ctf_mri') && isempty(cfg.coordinates) % based on the filetype assume that the coordinates correspond with CTF convention cfg.coordinates = 'ctf'; @@ -333,7 +336,7 @@ [st, i] = dbstack; cfg.version.name = st(i).name; end -cfg.version.id = '$Id: volumesegment.m,v 1.13 2009/01/20 13:01:31 sashae Exp $'; +cfg.version.id = '$Id: volumesegment.m,v 1.14 2009/07/14 07:27:30 roboos Exp $'; % remember the configuration details of the input data try, cfg.previous = mri.cfg; end % remember the exact configuration details in the output diff --git a/external/fieldtrip/private/write_data.m b/external/fieldtrip/private/write_data.m index abbaf7e..7b2f15b 100644 --- a/external/fieldtrip/private/write_data.m +++ b/external/fieldtrip/private/write_data.m @@ -24,12 +24,16 @@ function write_data(filename, dat, varargin) % fcdc_buffer % plexon_nex % neuralynx_ncs +% neuralynx_sdma % % See also READ_HEADER, READ_DATA, READ_EVEN, WRITE_EVENT % Copyright (C) 2007-2008, Robert Oostenveld % % $Log: write_data.m,v $ +% Revision 1.23 2009/06/17 10:15:43 roboos +% added support for neuralynx_sdma, only for 32 bit integer data +% % Revision 1.22 2009/05/19 18:29:48 roboos % give instructive error if the fieldtrip buffer mex file is not on the path % @@ -126,7 +130,7 @@ function write_data(filename, dat, varargin) case 'disp' % display it on screen, this is only for debugging disp('new data arived'); - + case 'fcdc_global' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % store it in a global variable, this is only for debugging @@ -139,21 +143,21 @@ function write_data(filename, dat, varargin) else data_queue = cat(2, data_queue, dat); end - + case 'fcdc_buffer' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % network transparent buffer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - + if ~isempty(chanindx) % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels hdr.label = hdr.label(chanindx); hdr.nChans = length(chanindx); end - + [host, port] = filetype_check_uri(filename); - + type = { 'char' 'uint8' @@ -167,7 +171,7 @@ function write_data(filename, dat, varargin) 'single' 'double' }; - + wordsize = { 1 % 'char' 1 % 'uint8' @@ -181,7 +185,7 @@ function write_data(filename, dat, varargin) 4 % 'single' 8 % 'double' }; - + % this should only be done the first time if ~append && ~isempty(hdr) % reformat the header into a buffer-compatible format @@ -190,25 +194,25 @@ function write_data(filename, dat, varargin) packet.nsamples = 0; packet.nevents = 0; packet.data_type = find(strcmp(type, class(dat))) - 1; % zero-offset - + % try to put_hdr and initialize if necessary try % try writing the packet buffer('put_hdr', packet, host, port); - + catch if ~isempty(strfind(lasterr, 'Buffer size N must be an integer-valued scalar double.')) % this happens if the MATLAB75/toolbox/signal/signal/buffer % function is used instead of the fieldtrip buffer error('the FieldTrip buffer mex file was not found on your path, it should be in fieldtrip/fileio/private'); - + elseif ~isempty(strfind(lasterr, 'failed to create socket')) && (strcmp(host, 'localhost') || strcmp(host, '127.0.0.1')) - + % start a local instance of the TCP server warning('starting fieldtrip buffer on %s:%d', host, port); buffer('tcpserver', 'init', host, port); pause(1); - + % rewrite the packet until success success = false; while ~success @@ -222,11 +226,11 @@ function write_data(filename, dat, varargin) end end end % if strfind... - + end % try - + end % writing header - + if ~isempty(dat) max_nsamples = 32556; if size(dat,2)>max_nsamples @@ -257,7 +261,7 @@ function write_data(filename, dat, varargin) buffer('put_dat', packet, host, port); end % if data larger than chuncksize end - + case 'brainvision_eeg' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % combination of *.eeg and *.vhdr file @@ -265,7 +269,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -277,7 +281,7 @@ function write_data(filename, dat, varargin) % hdr.nChans % hdr.Fs write_brainvision_eeg(filename, hdr, dat); - + case 'fcdc_matbin' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % multiplexed data in a *.bin file (ieee-le, 64 bit floating point values), @@ -286,7 +290,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + [path, file, ext] = fileparts(filename); headerfile = fullfile(path, [file '.mat']); datafile = fullfile(path, [file '.bin']); @@ -302,7 +306,7 @@ function write_data(filename, dat, varargin) [fid,message] = fopen(datafile,'wb','ieee-le'); fwrite(fid, dat, 'double'); fclose(fid); - + case 'fcdc_mysql' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % write to a MySQL server listening somewhere else on the network @@ -329,7 +333,7 @@ function write_data(filename, dat, varargin) end db_insert('fieldtrip.header', s); end - + elseif isempty(hdr) && ~isempty(dat) dim = size(dat); if numel(dim)==2 @@ -356,11 +360,11 @@ function write_data(filename, dat, varargin) db_insert('fieldtrip.data', s); end end - + else error('you should specify either the header or the data when writing to a MySQL database'); end - + case 'matlab' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % plain matlab file @@ -385,7 +389,104 @@ function write_data(filename, dat, varargin) % file does not yet exist, which is not a problem end save(filename, 'dat', 'hdr'); - + + case 'neuralynx_sdma' + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % The first version of this file format contained in the first 8 bytes the + % channel label as string. Subsequently it contained 32 bit integer values. + % + % The second version of this file format starts with 8 bytes describing (as + % a space-padded string) the data type. The channel label is contained in + % the filename as dataset.chanlabel.bin. + % + % The third version of this file format starts with 7 bytes describing (as + % a zero-padded string) the data type, followed by the 8th byte which + % describes the downscaling for the 8 and 16 bit integer representations. + % The downscaling itself is represented as uint8 and should be interpreted as + % the number of bits to shift. The channel label is contained in the + % filename as dataset.chanlabel.bin. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + statuschannel = { + 'stx' + 'pid' + 'siz' + 'tsh' + 'tsl' + 'cpu' + 'ttl' + 'x01' + 'x02' + 'x03' + 'x04' + 'x05' + 'x06' + 'x07' + 'x08' + 'x09' + 'x10' + 'crc' + }; + + dirname = filename; + clear filename + [path, file] = fileparts(dirname); + for i=1:hdr.nChans + downscale(i) = 0; + if ~isempty(strmatch(hdr.label{i}, statuschannel)) + format{i} = 'uint32'; + else + format{i} = 'int32'; + end + filename{i} = fullfile(dirname, [file '.' hdr.label{i} '.bin']); + end + + if ~isdir(dirname) + mkdir(dirname); + end + + % open and write to the output files, one for each selected channel + fid = zeros(hdr.nChans,1); + for j=1:hdr.nChans + + if append==false + fid(j) = fopen(filename{j}, 'wb', 'ieee-le'); % open the file + magic = format{j}; % this used to be the channel name + magic((end+1):8) = 0; % pad with zeros + magic(8) = downscale(j); % number of bits to shift + fwrite(fid(j), magic(1:8)); % write the 8-byte file header + else + fid(j) = fopen(filename{j}, 'ab', 'ieee-le'); % open the file for appending + end % if append + + % convert the data into the correct class + buf = dat(j,:); + if ~strcmp(class(buf), format{j}) + switch format{j} + case 'int16' + buf = int16(buf); + case 'int32' + buf = int32(buf); + case 'single' + buf = single(buf); + case 'double' + buf = double(buf); + case 'uint32' + buf = uint32(buf); + otherwise + error('unsupported format conversion'); + end + end + + % apply the scaling, this corresponds to bit shifting + buf = buf ./ (2^downscale(j)); + + % write the segment of data to the output file + fwrite(fid(j), buf, format{j}, 'ieee-le'); + + fclose(fid(j)); + end % for each channel + case 'riff_wave' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This writes data Y to a Windows WAVE file specified by the file name @@ -396,7 +497,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -407,7 +508,7 @@ function write_data(filename, dat, varargin) error('this format only supports single channel continuous data'); end wavwrite(dat, hdr.Fs, nbits, filename); - + case 'plexon_nex' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % single or mulitple channel Plexon NEX file @@ -415,8 +516,8 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - - [path, file, ext] = fileparts(filename); + + [path, file] = fileparts(filename); filename = fullfile(path, [file, '.nex']); if nchans~=1 error('only supported for single-channel data'); @@ -435,15 +536,15 @@ function write_data(filename, dat, varargin) end nex.var.indx = 0; nex.var.dat = dat; - + write_plexon_nex(filename, nex); - + if 0 % the following code snippet can be used for testing nex2 = []; [nex2.var, nex2.hdr] = read_plexon_nex(filename, 'channel', 1); end - + case 'neuralynx_ncs' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % single channel Neuralynx NCS file @@ -451,14 +552,14 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans>1 error('only supported for single-channel data'); end - + [path, file, ext] = fileparts(filename); filename = fullfile(path, [file, '.ncs']); - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -472,35 +573,35 @@ function write_data(filename, dat, varargin) else error('cannot determine channel label'); end - + FSAMPLE = hdr.Fs; RECORDNSMP = 512; RECORDSIZE = 1044; - + % cut the downsampled LFP data into record-size pieces nrecords = ceil(nsamples/RECORDNSMP); fprintf('construct ncs with %d records\n', nrecords); - + % construct a ncs structure with all header details and the data in it ncs = []; ncs.NumValidSamp = ones(1,nrecords) * RECORDNSMP; % except for the last block ncs.ChanNumber = ones(1,nrecords) * ADCHANNEL; ncs.SampFreq = ones(1,nrecords) * FSAMPLE; ncs.TimeStamp = zeros(1,nrecords,'uint64'); - + if rem(nsamples, RECORDNSMP)>0 % the data length is not an integer number of records, pad the last record with zeros dat = cat(2, dat, zeros(nchans, nrecords*RECORDNSMP-nsamples)); ncs.NumValidSamp(end) = rem(nsamples, RECORDNSMP); end - + ncs.dat = reshape(dat, RECORDNSMP, nrecords); - + for i=1:nrecords % timestamps should be 64 bit unsigned integers ncs.TimeStamp(i) = uint64(hdr.FirstTimeStamp) + uint64((i-1)*RECORDNSMP*hdr.TimeStampPerSample); end - + % add the elements that will go into the ascii header ncs.hdr.CheetahRev = '4.23.0'; ncs.hdr.NLX_Base_Class_Type = 'CscAcqEnt'; @@ -508,16 +609,16 @@ function write_data(filename, dat, varargin) ncs.hdr.RecordSize = RECORDSIZE; ncs.hdr.ADChannel = ADCHANNEL; ncs.hdr.SamplingFrequency = FSAMPLE; - + % write it to a file fprintf('writing to %s\n', filename); write_neuralynx_ncs(filename, ncs); - + if 0 % the following code snippet can be used for testing ncs2 = read_neuralynx_ncs(filename, 1, inf); end - + otherwise error('unsupported data format'); end % switch dataformat diff --git a/external/fileio/private/apply_montage.m b/external/fileio/private/apply_montage.m index e7a0f07..ccf0716 100644 --- a/external/fileio/private/apply_montage.m +++ b/external/fileio/private/apply_montage.m @@ -7,7 +7,11 @@ % forward computation and source reconstruction of the data. % % Use as -% [sens] = apply_montage(sens, montage, ...) +% [sens] = apply_montage(sens, montage, ...) +% [data] = apply_montage(data, montage, ...) +% [montage] = apply_montage(montage1, montage2, ...) +% where the input is a FieldTrip sensor definition as obtained from READ_SENS +% or a FieldTrip raw data structure as obtained from PREPROCESSING. % % A montage is specified as a structure with the fields % montage.tra = MxN matrix @@ -18,11 +22,35 @@ % 'keepunused' string, 'yes' or 'no' (default = 'no') % 'inverse' string, 'yes' or 'no' (default = 'no') % +% If the first input is a montage, then the second input montage will be +% applied to the first. In effect the resulting montage will first do +% montage1, then montage2. +% % See also READ_SENS, TRANSFORM_SENS % Copyright (C) 2008, Robert Oostenveld % % $Log: apply_montage.m,v $ +% Revision 1.19 2009/07/02 16:14:15 roboos +% allow to apply one montage on another one +% +% Revision 1.18 2009/07/02 09:18:41 vlalit +% Fixing a bug in building an inverse montage (confusion between 'montage' and 'tra') +% +% Revision 1.17 2009/07/01 09:21:37 roboos +% changed handling of rank-reduced montage for inversion, give warning +% removed the modification by vladimir for the sequential application of montages +% +% Revision 1.16 2009/06/27 13:24:54 vlalit +% Additional fixes to make custom balancing work. +% +% Revision 1.15 2009/06/26 17:39:17 vlalit +% Added the possiblity to handle custom montages applied to MEG sensors (for removing +% spatial confounds). Hopefully there won't be major side effects. +% +% Revision 1.14 2009/06/17 10:13:05 roboos +% improved documentation +% % Revision 1.13 2009/03/26 11:07:40 roboos % start with an explicit check on the channel number % @@ -70,6 +98,12 @@ keepunused = keyval('keepunused', varargin{:}); if isempty(keepunused), keepunused = 'no'; end inverse = keyval('inverse', varargin{:}); if isempty(inverse), inverse = 'no'; end +% check the consistency of the input sensor array or data +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % the input data structure is also a montage, i.e. apply the montages sequentially + sens.label = sens.labelnew; +end + % check the consistency of the montage if size(montage.tra,1)~=length(montage.labelnew) error('the number of channels in the montage is inconsistent'); @@ -79,9 +113,15 @@ if strcmp(inverse, 'yes') % apply the inverse montage, i.e. undo a previously applied montage - tmp.labelnew = montage.labelorg; - tmp.labelorg = montage.labelnew; - tmp.tra = inv(montage.tra); + tmp.labelnew = montage.labelorg; % swap around + tmp.labelorg = montage.labelnew; % swap around + tmp.tra = full(montage.tra); + if rank(tmp.tra) < length(tmp.tra) + warning('the linear projection for the montage is not full-rank, the resulting data will have reduced dimensionality'); + tmp.tra = pinv(tmp.tra); + else + tmp.tra = inv(tmp.tra); + end montage = tmp; end @@ -150,10 +190,17 @@ montage.tra = sparse(montage.tra(:,selmont)); montage.labelorg = montage.labelorg(selmont); -if isfield(sens, 'tra') +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % apply the montage on top of the other montage + sens = rmfield(sens, 'label'); + sens.tra = montage.tra * sens.tra; + sens.labelnew = montage.labelnew; + +elseif isfield(sens, 'tra') % apply the montage to the sensor array sens.tra = montage.tra * sens.tra; sens.label = montage.labelnew; + elseif isfield(sens, 'trial') % apply the montage to the data that was preprocessed using fieldtrip Ntrials = numel(sens.trial); @@ -177,5 +224,3 @@ function y = indx2logical(x, n) y = false(1,n); y(x) = true; - - diff --git a/external/fileio/private/ctf2grad.m b/external/fileio/private/ctf2grad.m index 1910b30..7a8138d 100644 --- a/external/fileio/private/ctf2grad.m +++ b/external/fileio/private/ctf2grad.m @@ -14,6 +14,9 @@ % Copyright (C) 2004, Robert Oostenveld % % $Log: ctf2grad.m,v $ +% Revision 1.4 2009/08/05 08:36:57 roboos +% preallocate the memory that will hold the coil positions, orientations and weights -> significant speedup +% % Revision 1.3 2009/03/23 21:16:03 roboos % don't give error if balancing fails, but only warning and remove the balancing information % @@ -100,6 +103,16 @@ selREF = selREF(:)'; numMEG = length(selMEG); numREF = length(selREF); + + % determine the number of channels and coils + coilcount = 0; + coilcount = coilcount + sum([hdr.res4.senres(selREF).numCoils]); + coilcount = coilcount + sum([hdr.res4.senres(selMEG).numCoils]); + chancount = numMEG + numREF; + % preallocate the memory + grad.pnt = zeros(coilcount, 3); % this will hold the position of each coil + grad.ori = zeros(coilcount, 3); % this will hold the orientation of each coil + grad.tra = zeros(chancount, coilcount); % this describes how each coil contributes to each channel % combine the bottom and top coil of each MEG channel for i=1:numMEG @@ -123,6 +136,10 @@ grad.tra(i,i ) = 1; grad.tra(i,i+numMEG) = 1; end + + % the MEG channels always have 2 coils, the reference channels vary in the number of coils + chancount = 1*numMEG; + coilcount = 2*numMEG; % combine the coils of each reference channel for i=1:numREF @@ -136,12 +153,14 @@ ori = hdr.res4.senres(n).ori'; end % determine the number of coils for this channel - numcoils = sum(sum(pos.^2, 2)~=0); + numcoils = hdr.res4.senres(n).numCoils; % add the coils of this channel to the gradiometer array + chancount = chancount+1; for j=1:numcoils - grad.pnt(end+1, :) = pos(j,:); - grad.ori(end+1, :) = ori(j,:) .* -sign(hdr.res4.senres(n).properGain); - grad.tra(i+numMEG, end+1) = 1; + coilcount = coilcount+1; + grad.pnt(coilcount, :) = pos(j,:); + grad.ori(coilcount, :) = ori(j,:) .* -sign(hdr.res4.senres(n).properGain); + grad.tra(chancount, coilcount) = 1; end end @@ -260,9 +279,9 @@ numcoils = sum(sum(pos.^2, 2)~=0); % add the coils of this channel to the gradiometer array for j=1:numcoils - grad.pnt(end+1, :) = pos(j,:); - grad.ori(end+1, :) = ori(j,:) .* -sign(hdr.gainV(n)); - grad.tra(i+numMEG, end+1) = 1; + grad.pnt(numMEG+i, :) = pos(j,:); + grad.ori(numMEG+i, :) = ori(j,:) .* -sign(hdr.gainV(n)); + grad.tra(numMEG+i, 2*numMEG+i) = 1; end end diff --git a/external/fileio/private/filetype.m b/external/fileio/private/filetype.m index b454bfd..25515ab 100644 --- a/external/fileio/private/filetype.m +++ b/external/fileio/private/filetype.m @@ -54,6 +54,9 @@ % Copyright (C) 2003-2007 Robert Oostenveld % % $Log: filetype.m,v $ +% Revision 1.98 2009/07/07 10:38:38 roboos +% added header check for dicom +% % Revision 1.97 2009/05/06 15:42:06 roboos % also remember/check previous directory and don't do filetype caching in case type=unknown % @@ -903,7 +906,7 @@ type = 'layout'; manufacturer = 'Ole Jensen'; content = 'layout of channels for plotting'; -elseif filetype_check_extension(filename, '.dcm') || filetype_check_extension(filename, '.ima') +elseif filetype_check_extension(filename, '.dcm') || filetype_check_extension(filename, '.ima') || filetype_check_header(filename, 'DICM', 128) type = 'dicom'; manufacturer = 'Dicom'; content = 'image data'; diff --git a/external/fileio/private/hastoolbox.m b/external/fileio/private/hastoolbox.m index 8289f0d..79640d3 100644 --- a/external/fileio/private/hastoolbox.m +++ b/external/fileio/private/hastoolbox.m @@ -10,6 +10,9 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: hastoolbox.m,v $ +% Revision 1.36 2009/09/08 14:34:01 roboos +% also detect 64 bit windows version (thanks to arno) +% % Revision 1.35 2009/04/21 09:54:15 roboos % added prtools % @@ -318,7 +321,7 @@ % for windows computers in the F.C. Donders Centre prefix = 'h:\common\matlab'; - if ~status && strcmp(computer, 'PCWIN') + if ~status && (strcmp(computer, 'PCWIN') || strcmp(computer, 'PCWIN64')) status = myaddpath(fullfile(prefix, lower(toolbox)), silent); end diff --git a/external/fileio/private/issubfield.m b/external/fileio/private/issubfield.m index f494642..60d94f4 100644 --- a/external/fileio/private/issubfield.m +++ b/external/fileio/private/issubfield.m @@ -1,4 +1,4 @@ -function [r] = issubfield(s, f); +function [r] = issubfield(s, f) % ISSUBFIELD tests for the presence of a field in a structure just like the standard % Matlab ISFIELD function, except that you can also specify nested fields @@ -17,6 +17,9 @@ % Copyright (C) 2005, Robert Oostenveld % % $Log: issubfield.m,v $ +% Revision 1.2 2009/07/30 20:11:44 ingnie +% made output boolian +% % Revision 1.1 2008/11/13 09:55:36 roboos % moved from fieldtrip/private, fileio or from roboos/misc to new location at fieldtrip/public % @@ -26,7 +29,7 @@ try getsubfield(s, f); % if this works, then the subfield must be present - r = 1; + r = true; catch - r = 0; % apparently the subfield is not present + r = false; % apparently the subfield is not present end \ No newline at end of file diff --git a/external/fileio/private/keyval.m b/external/fileio/private/keyval.m index b9fefe7..106cf02 100644 --- a/external/fileio/private/keyval.m +++ b/external/fileio/private/keyval.m @@ -11,6 +11,12 @@ % Copyright (C) 2005-2007, Robert Oostenveld % % $Log: keyval.m,v $ +% Revision 1.5 2009/08/04 11:58:28 roboos +% perform a case-insensitive string comparison for keys +% +% Revision 1.4 2009/07/14 16:11:02 roboos +% speed up the input checks +% % Revision 1.3 2009/05/14 19:24:02 roboos % removed ; at end of function declaration % @@ -35,22 +41,20 @@ error('optional input arguments should come in key-value pairs, i.e. there should be an even number'); end -for i=1:2:length(varargin) - if ~ischar(varargin{i}) - % the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values - error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); - end -end - +% the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values keys = varargin(1:2:end); vals = varargin(2:2:end); -hit = find(strcmp(key, keys)); +if ~all(cellfun(@ischar, keys)) + error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); +end + +hit = find(strcmpi(key, keys)); if isempty(hit) % the requested key was not found val = []; elseif length(hit)==1 - % the requested key was found + % the requested key was found val = vals{hit}; else error('multiple input arguments with the same name'); diff --git a/external/fileio/private/read_24bit.c b/external/fileio/private/read_24bit.c index 95c8998..fdb3b16 100644 --- a/external/fileio/private/read_24bit.c +++ b/external/fileio/private/read_24bit.c @@ -19,6 +19,9 @@ * * * $Log: read_24bit.c,v $ + * Revision 1.4 2009/06/08 16:33:08 roboos + * include sys/types.h for all platforms, not only WIN32/64, since also required for OSX 10.4 + * * Revision 1.3 2009/03/30 07:23:03 roboos * changed ifdef syntax * @@ -59,11 +62,11 @@ #define _LARGEFILE_SOURCE #include +#include #include "mex.h" #include "matrix.h" #if defined(_WIN32) || defined(_WIN64) -#include #define int32_t INT32_T #define int64_t INT64_T #define fseeko fseek diff --git a/external/fileio/private/read_combined_ds.m b/external/fileio/private/read_combined_ds.m new file mode 100644 index 0000000..96d9c1c --- /dev/null +++ b/external/fileio/private/read_combined_ds.m @@ -0,0 +1,147 @@ +function [dat] = read_combined_ds(dirname, hdr, begsample, endsample, chanindx) + +% READ_COMBINED_DS +% +% Use as +% hdr = read_combined_ds(dirname) +% dat = read_combined_ds(dirname, hdr, begsample, endsample, chanindx) + +% Copyright (C) 2008, Robert Oostenveld +% +% $Log: read_combined_ds.m,v $ +% Revision 1.1 2009/01/14 09:24:45 roboos +% moved even more files from fileio to fileio/privtae, see previous log entry +% +% Revision 1.1 2008/07/01 16:23:02 roboos +% added read_combined_data (new implementation) +% + +needhdr = nargin==1 || isempty(hdr); +needdat = nargin>1; + +supported = { + 'plexon_nex' + 'neuralynx_bin' + 'neuralynx_ncs' + 'fcdc_matbin' + }; + +if needhdr + + ls = dir(dirname); % get the list of filenames + ls = ls(~cell2mat({ls.isdir})); % remove the subdirs + + nfiles = length(ls); + fname = cell(nfiles,1); + ftype = cell(nfiles,1); + sel = false(nfiles,1); + + for i=1:nfiles + fname{i} = fullfile(dirname, ls(i).name); + ftype{i} = filetype(fname{i}); + sel(i) = any(strcmp(ftype{i}, supported)); + [p, f, x] = fileparts(fname{i}); + if filetype_check_extension(fname{i}, '.mat') + % select only the *.bin and not the *.mat of each pair + sel(i) = false; + end + end + + if ~any(sel) + error('no supported files were found'); + end + + fname = fname(sel); + ftype = ftype(sel); + nfiles = length(fname); + + clear filehdr + for i=1:nfiles + filehdr(i) = read_header(fname{i}, 'headerformat', ftype{i}); + end + + if any([filehdr.nChans]~=1) + error('more than one channel per file not supported'); + else + hdr.nChans = sum([filehdr.nChans]); + end + + if length(unique([filehdr.label]))~=nfiles + error('not all channels have a unique name'); + else + hdr.label = [filehdr.label]'; + end + + if any(diff([filehdr.Fs])) + error('different sampling frequenties per file not supported'); + else + hdr.Fs = filehdr(1).Fs; + end + + if any(diff([filehdr.nSamples])) + error('different nSamples per file not supported'); + else + hdr.nSamples = filehdr(1).nSamples; + end + + if any(diff([filehdr.nSamplesPre])) + error('different nSamplesPre per file not supported'); + else + hdr.nSamplesPre = filehdr(1).nSamplesPre; + end + + if any(diff([filehdr.nTrials])) + error('different nTrials per file not supported'); + else + hdr.nTrials = filehdr(1).nTrials; + end + + if isfield(filehdr, 'TimeStampPerSample') && any(diff([filehdr.TimeStampPerSample])) + error('different TimeStampPerSample per file not supported'); + else + hdr.TimeStampPerSample = filehdr(1).TimeStampPerSample; + end + + if isfield(filehdr, 'FirstTimeStamp') && any(diff([filehdr.FirstTimeStamp])) + error('different FirstTimeStamp per file not supported'); + else + hdr.FirstTimeStamp = filehdr(1).FirstTimeStamp; + end + + % remember the original header details + hdr.orig.header = filehdr; + hdr.orig.fname = fname; + hdr.orig.ftype = ftype; +end + +if needdat + filehdr = hdr.orig.header; + fname = hdr.orig.fname; + ftype = hdr.orig.ftype; + + if nargin<3 + begsample=1; + end + if nargin<4 + endsample = hdr.nSamples*hdr.nTrials; + end + if nargin<5 + chanindx = 1:hdr.nChans; + end + + nsamples = endsample-begsample+1; + nchans = length(chanindx); + dat = zeros(nchans, nsamples); + + for i=1:nchans + thischan = chanindx(i); + tmp = read_data(fname{thischan}, 'header', filehdr(thischan), 'dataformat', ftype{thischan}, 'begsample', begsample, 'endsample', endsample); + dat(i,:) = tmp; + end +end + +if ~needdat + % return the header + dat = hdr; +end + diff --git a/external/fileio/private/read_eeglabdata.m b/external/fileio/private/read_eeglabdata.m index 730adbf..4c2f13e 100644 --- a/external/fileio/private/read_eeglabdata.m +++ b/external/fileio/private/read_eeglabdata.m @@ -36,6 +36,10 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabdata.m,v $ +% Revision 1.3 2009/07/01 15:35:19 vlalit +% Try several different ways of looking for the data file +% before giving up (fix suggested by Jakob Scherer) +% % Revision 1.2 2009/02/27 12:03:09 vlalit % Arno's fix for a bug reported by Antanas Spokas % @@ -72,7 +76,20 @@ if strcmpi(header.orig.data(end-2:end), 'set'), header.ori = load('-mat', filename); else - fid = fopen(header.orig.data); + + % assuming that the data file is in the current directory + fid = fopen(header.orig.data); + + % assuming the .dat and .set files are located in the same directory + if fid == -1 + pathstr = fileparts(filename); + fid = fopen(fullfile(pathstr, header.orig.data)); + end + + if fid == -1 + fid = fopen(fullfile(header.orig.filepath, header.orig.data)); % + end + if fid == -1, error('Cannot not find data file'); end; % only read the desired trials diff --git a/external/fileio/private/read_eeglabevent.m b/external/fileio/private/read_eeglabevent.m index 1c438b7..28c0f6a 100644 --- a/external/fileio/private/read_eeglabevent.m +++ b/external/fileio/private/read_eeglabevent.m @@ -33,6 +33,12 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabevent.m,v $ +% Revision 1.4 2009/08/29 05:11:31 josdie +% After consultation with Arno, changed so that value (when present) and type fields in EEGlab .set files are treated as being reversed from value and type fields in FieldTrip files. +% +% Revision 1.3 2009/08/09 01:45:24 josdie +% Changed event value to equal EEGlab's event value rather than type. +% % Revision 1.2 2009/02/02 20:45:34 josdie % FieldTrip's .value field now set to EEGlab's .type field. FieldTrip's .type field set to 'trigger'. FieldTrip's .duration field set to 0 rather than empty. % @@ -64,8 +70,14 @@ event = []; oldevent = header.orig.event; for index = 1:length(oldevent) - event(index).value = num2str( oldevent(index).type ); - event(index).type = 'trigger'; + event(index).value = num2str( oldevent(index).type ); + if isfield(oldevent,'code') + event(index).type = oldevent(index).code; + elseif isfield(oldevent,'value') + event(index).type = oldevent(index).value; + else + event(index).type = 'trigger'; + end; if header.nTrials > 1 event(index).sample = oldevent(index).latency-header.nSamplesPre; event(index).offset = header.nSamplesPre; diff --git a/external/fileio/private/read_eeglabheader.m b/external/fileio/private/read_eeglabheader.m index 65845cd..5ab7e60 100644 --- a/external/fileio/private/read_eeglabheader.m +++ b/external/fileio/private/read_eeglabheader.m @@ -30,6 +30,18 @@ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA % $Log: read_eeglabheader.m,v $ +% Revision 1.6 2009/08/08 04:07:02 josdie +% Bug in Joe's brain fixed. Change to header.nSamplesPre calculation changed back. +% +% Revision 1.5 2009/08/08 03:17:26 josdie +% Fixed bug that was causing hdr.label to have as many labels as there are time points rather than matching the number of channels. +% +% Revision 1.4 2009/08/08 03:05:29 josdie +% Fixed bug in calculation of header.nSamplesPre. +% +% Revision 1.3 2009/07/01 16:08:21 vlalit +% Fixing a bug in converting channel locations to elec struct (reproted by Jakib Scherer) +% % Revision 1.2 2009/01/23 15:35:46 roboos % create default channel names if EEG.chanlocs.labels is missing % @@ -70,18 +82,20 @@ header.label = { EEG.chanlocs.labels }'; catch warning('creating default channel names'); - for i=1:header.nSamples + for i=1:header.nChans header.label{i} = sprintf('chan%03d', i); end end -for ind = 1:length( EEG.chanlocs ) - header.elec.label{ind} = EEG.chanlocs(ind).labels; - if ~isempty(EEG.chanlocs(ind).X) - % this channel has a position - header.elec.pnt(ind,1) = EEG.chanlocs(ind).X; - header.elec.pnt(ind,2) = EEG.chanlocs(ind).Y; - header.elec.pnt(ind,3) = EEG.chanlocs(ind).Z; - end; +ind = 1; +for i = 1:length( EEG.chanlocs ) + if ~isempty(EEG.chanlocs(i).X) + header.elec.label{ind, 1} = EEG.chanlocs(i).labels; + % this channel has a position + header.elec.pnt(ind,1) = EEG.chanlocs(i).X; + header.elec.pnt(ind,2) = EEG.chanlocs(i).Y; + header.elec.pnt(ind,3) = EEG.chanlocs(i).Z; + ind = ind+1; + end; end; % remove data diff --git a/external/fileio/private/read_event.m b/external/fileio/private/read_event.m index 4e1748b..bb88b15 100644 --- a/external/fileio/private/read_event.m +++ b/external/fileio/private/read_event.m @@ -59,6 +59,19 @@ % Copyright (C) 2004-2008, Robert Oostenveld % % $Log: read_event.m,v $ +% Revision 1.103 2009/08/21 12:03:42 vlalit +% Fixed a bug with handling of 16 and 32-bit Neuroscan cnt variants. +% +% Revision 1.102 2009/08/09 03:34:55 josdie +% Modified egi_egia so that combined subject average files have the cell names start with a four character subject code (e.g., S001) so that other software can decode the subject number more reliably. +% +% Revision 1.101 2009/07/28 11:22:54 roboos +% improved detection of binary trigger channels for neuromag +% +% Revision 1.100 2009/06/09 13:54:30 marvger +% removed warning for empty events; interferes with continuous pooling in +% realtime applications +% % Revision 1.99 2009/05/22 09:02:29 marvger % changed tcp handling % @@ -897,7 +910,7 @@ event(eventCount).sample = (eventCount-1)*hdr.nSamples + 1; event(eventCount).offset = -hdr.nSamplesPre; event(eventCount).duration = hdr.nSamples; - event(eventCount).value = ['S' num2str(subject) cnames{cell}]; + event(eventCount).value = ['S' sprintf('%03d',subject) cnames{cell}]; end end @@ -1221,9 +1234,13 @@ end if iscontinuous - binary = {'STI 014', 'STI 015', 'STI 016'}; - binaryindx = match_str(hdr.label, binary); analogindx = strmatch('STI', hdr.label); + binaryindx = find(strcmp(chantype(hdr), 'trigger')); + if isempty(binaryindx) + % use a predefined set of channel names + binary = {'STI 014', 'STI 015', 'STI 016'}; + binaryindx = match_str(hdr.label, binary); + end if ~isempty(binaryindx) % add triggers based on the binary trigger channel, this is based on @@ -1518,10 +1535,10 @@ event(end ).offset = -hdr.nSamplesPre; event(end ).value = []; - case 'ns_cnt' + case {'ns_cnt', 'ns_cnt16', 'ns_cnt32'} % read the header, the original header includes the event table if isempty(hdr) - hdr = read_header(filename); + hdr = read_header(filename, 'headerformat', eventformat); end % translate the event table into known FieldTrip event types for i=1:hdr.orig.nevent @@ -1618,8 +1635,8 @@ % this has the side effect that events without a sample number are discarded [dum, indx] = sort([event.sample]); event = event(indx); -else - warning(sprintf('no events found in %s', filename)); +% else +% warning(sprintf('no events found in %s', filename)); end % apply the optional filters diff --git a/external/fileio/private/read_header.m b/external/fileio/private/read_header.m index 7b72f3e..37afb3b 100644 --- a/external/fileio/private/read_header.m +++ b/external/fileio/private/read_header.m @@ -55,6 +55,18 @@ % Copyright (C) 2003-2008, Robert Oostenveld, F.C. Donders Centre % % $Log: read_header.m,v $ +% Revision 1.98 2009/08/05 00:26:38 josdie +% Workaround for defect in number of subjects field in EGIS average files generated by NetStation. +% +% Revision 1.97 2009/07/19 19:49:21 josdie +% Deleted egi_egis changing a zero hdr.nSamplesPre to a one. +% +% Revision 1.96 2009/07/09 10:00:45 roboos +% no leading spaces for fake channel names in fcdc_buffer +% +% Revision 1.95 2009/06/17 13:43:20 roboos +% don't include LastTimeStamp in output +% % Revision 1.94 2009/04/20 17:19:01 vlalit % Changed the MNE reader not to set hdr.elec when there are no EEG channels. % @@ -841,7 +853,8 @@ for i = 1:hdr.nChans hdr.label{i} = ['e' num2str(i)]; end; - hdr.nTrials = fhdr(11)*fhdr(18); %number of trials is numSubjects * numCells + %since NetStation does not properly set the fhdr(11) field, use the number of subjects from the chdr instead + hdr.nTrials = chdr(1,2)*fhdr(18); %number of trials is numSubjects * numCells hdr.nSamplesPre = ceil(fhdr(14)/(1000/hdr.Fs)); if any(chdr(:,3)-chdr(1,3)) @@ -878,10 +891,6 @@ % actually allocated to the age of the subject, although NetStation % does not use it when generating an EGIS session file. - if hdr.nSamplesPre == 0 - hdr.nSamplesPre = 1; %If baseline was left as zero, then change to "1" to avoid possible issues with software expecting a non-zero baseline. - end; - if any(chdr(:,3)-chdr(1,3)) error('Number of samples not the same for all cells.'); end; @@ -945,7 +954,7 @@ hdr.nTrials = 1; % since continuous warning('creating fake channel names'); for i=1:hdr.nChans - hdr.label{i} = sprintf('%3d', i); + hdr.label{i} = sprintf('%d', i); end % this should be a column vector hdr.label = hdr.label(:); @@ -1006,7 +1015,6 @@ LastTimeStamp = ncs.hdr.LastTimeStamp; % this is the first timestamp of the last block, i.e. not the timestamp of the last sample hdr.TimeStampPerSample = double(LastTimeStamp - FirstTimeStamp) ./ ((ncs.NRecords-1)*512); hdr.FirstTimeStamp = FirstTimeStamp; - hdr.LastTimeStamp = LastTimeStamp + uint64((512-1)*hdr.TimeStampPerSample); case 'neuralynx_nse' nse = read_neuralynx_nse(filename, 1, 0); @@ -1018,7 +1026,7 @@ hdr.nSamples = 32; % there are 32 samples in each waveform hdr.nSamplesPre = 0; hdr.orig = nse.hdr; - % FIXME add hdr.FirstTimeStamp and hdr.LastTimeStamp + % FIXME add hdr.FirstTimeStamp and hdr.TimeStampPerSample case {'neuralynx_ttl', 'neuralynx_tsl', 'neuralynx_tsh'} % these are hardcoded, they contain an 8-byte header and int32 values for a single channel @@ -1361,7 +1369,6 @@ % the timestamps indicate the beginning of each block, hence the timestamp of the last block corresponds with the end of the previous block hdr.TimeStampPerSample = double(ts(end)-ts(1))/sum(num(1:(end-1))); hdr.FirstTimeStamp = ts(1); % the timestamp of the first continuous sample - hdr.LastTimeStamp = ts(end) + uint64(hdr.TimeStampPerSample * num(end)); % the timestamp of the last sample (not the beginning of the last block) % also make the spike channels visible for i=1:length(orig.ChannelHeader) diff --git a/external/fileio/private/read_mri.m b/external/fileio/private/read_mri.m index eabfeaa..ecf08de 100644 --- a/external/fileio/private/read_mri.m +++ b/external/fileio/private/read_mri.m @@ -16,6 +16,22 @@ % Copyright (C) 2004-2009, Robert Oostenveld % % $Log: read_mri.m,v $ +% Revision 1.11 2009/07/16 12:57:12 roboos +% fixed fprintf feedback for dicom reader +% +% Revision 1.10 2009/07/09 15:07:59 roboos +% use another coordinate transformation matrix for fif MRI +% +% Revision 1.9 2009/07/08 08:08:45 roboos +% also support mne toolbox fiff_read_mri function +% +% Revision 1.8 2009/07/07 10:40:37 roboos +% Improved handling of sequence of files, also when the files don't have nice names. +% Use SeriesNumber from the DICOM header to figure out which slices go together. +% +% Revision 1.7 2009/07/02 15:04:09 roboos +% construct transformation matrix for dicom files +% % Revision 1.6 2009/03/11 15:02:18 vlalit % Use either SPM5 or SPM8 to read *.nii files. % @@ -185,43 +201,102 @@ transform(2,4) = -dim(2) - transform(2,4); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -elseif filetype(filename, 'neuromag_fif') - % use the neuromag functions to read the Neuromag MRI - % FIXME this needs to be checked to ensure consistency with the FieldTrip definition of volume data +elseif filetype(filename, 'neuromag_fif') && hastoolbox('mne') + % use the mne functions to read the Neuromag MRI + hdr = fiff_read_mri(filename); + img = cat(3, hdr.slices.data); + hdr.slices = rmfield(hdr.slices, 'data'); % remove the image data to save memory + % hmm, which transformation matrix should I use? + if issubfield(hdr.voxel_trans, 'trans') + transform = hdr.voxel_trans.trans; + elseif issubfield(hdr.trans, 'trans') + transform = hdr.trans.trans; + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +elseif filetype(filename, 'neuromag_fif') && hastoolbox('meg_pd') + % use the meg_pd functions to read the Neuromag MRI [img,coords] = loadmri(filename); dev = loadtrans(filename,'MRI','HEAD'); - transform = dev*coords; + transform = dev*coords; hdr.coords = coords; - hdr.dev = dev; + hdr.dev = dev; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +elseif filetype(filename, 'neuromag_fif') + error('reading MRI data from a fif file requires either the MNE toolbox or the meg_pd toolbox to be installed'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% elseif filetype(filename, 'dicom') % this uses the Image processing toolbox - % the DICOM file probably represents a stack of slices + % the DICOM file probably represents a stack of slices, possibly even multiple volumes + orig = dicominfo(filename); + dim(1) = orig.Rows; + dim(2) = orig.Columns; + [p, f] = fileparts(filename); + + % this works for the Siemens scanners at the FCDC tok = tokenize(f, '.'); for i=5:length(tok) - tok{i} = '*'; % this works for the Siemens scanners at the FCDC + tok{i} = '*'; end filename = sprintf('%s.', tok{:}); % reconstruct the filename with wildcards and '.' between the segments filename = filename(1:end-1); % remove the last '.' dirlist = dir(fullfile(p, filename)); dirlist = {dirlist.name}; + + if length(dirlist)==1 + % try something else to get a list of all the slices + dirlist = dir(fullfile(p, '*')); + dirlist = {dirlist(~[dirlist.isdir]).name}; + end + + keep = false(1, length(dirlist)); for i=1:length(dirlist) filename = char(fullfile(p, dirlist{i})); - fprintf('reading ''%s''\n', filename); - info = dicominfo(filename); - img(:,:,i) = dicomread(info); - hdr(i) = info; - if i==1 - % this pre-allocates enough space for the other slices - img(1,1,length(dirlist)) = 0; + if ~filetype(filename, 'dicom') + keep(i) = false; + fprintf('skipping ''%s'' because of incorrect filetype\n', filename); + end + % read the header information + info = dicominfo(filename); + if info.SeriesNumber~=orig.SeriesNumber + keep(i) = false; + fprintf('skipping ''%s'' because of different SeriesNumber\n', filename); + else + keep(i) = true; + hdr(i) = info; end end + % remove the files that were skipped + hdr = hdr(keep); + dirlist = dirlist(keep); + + % pre-allocate enough space for the subsequent slices + dim(3) = length(dirlist); + img = zeros(dim(1), dim(2), dim(3)); + for i=1:length(dirlist) + filename = char(fullfile(p, dirlist{i})); + fprintf('reading image data from ''%s''\n', filename); + img(:,:,i) = dicomread(hdr(i)); + end + % reorder the slices [z, indx] = sort(cell2mat({hdr.SliceLocation})); hdr = hdr(indx); img = img(:,:,indx); + + try + % construct a homgenous transformation matrix that performs the scaling from voxels to mm + dx = hdr(1).PixelSpacing(1); + dy = hdr(1).PixelSpacing(2); + dz = hdr(2).SliceLocation - hdr(1).SliceLocation; + transform = eye(4); + transform(1,1) = dx; + transform(2,2) = dy; + transform(3,3) = dz; + end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% else diff --git a/external/fileio/private/read_plexon_ddt.m b/external/fileio/private/read_plexon_ddt.m new file mode 100644 index 0000000..e625acb --- /dev/null +++ b/external/fileio/private/read_plexon_ddt.m @@ -0,0 +1,138 @@ +function [dat] = read_plexon_ddt(filename, begsample, endsample) + +% READ_PLEXON_DDT reads header or data from a Plexon *.ddt file, +% which is a Plexon continuous data file optimized for continuous +% (streaming) recording where every channel is continuously recorded +% without gaps and the recording includes any dead time between spikes. +% +% Use as +% [hdr] = read_plexon_ddt(filename) +% [dat] = read_plexon_ddt(filename, begsample, endsample) +% +% samples start counting at 1 +% returned values are in mV + +% Copyright (C) 2005-2007, Robert Oostenveld +% +% $Log: read_plexon_ddt.m,v $ +% Revision 1.1 2009/01/14 09:24:45 roboos +% moved even more files from fileio to fileio/privtae, see previous log entry +% +% Revision 1.3 2007/01/03 16:57:58 roboos +% improved documentation +% +% Revision 1.2 2005/09/08 16:52:51 roboos +% added support for subformat versions 101, 102 and 103 +% +% Revision 1.1 2005/09/06 12:40:39 roboos +% renamed plextor into plexon (i.e. it had an incorrect company name) +% +% Revision 1.1 2005/09/02 16:36:04 roboos +% new implementation, only for version 100 +% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Version 100: Samples are assumed to be 12 bits. All channels have the same NIDAQ gain, and preamp +% gain is not saved. +% int Version; // =100 +% int DataOffset; // Offset into the file where the data starts +% double Freq; // Digitization frequency +% int NChannels; // Number of channels +% int Year; // Time/date when the data was acquired +% int Month; +% int Day; +% int Hour; +% int Minute; +% int Second; +% int Gain; // NIDAQ gain (the same gain for all channels +% char Comment[128]; // User-supplied comment +% unsigned char Padding[256]; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +dat = []; +fid = fopen(filename, 'rb', 'ieee-le'); + +Version = fread(fid, 1, 'int' ); +dat.Version = Version; + +% this is common for all subformats +dat.DataOffset = fread(fid, 1, 'int' ); +dat.Freq = fread(fid, 1, 'double' ); +dat.NChannels = fread(fid, 1, 'int' ); +dat.Year = fread(fid, 1, 'int' ); +dat.Month = fread(fid, 1, 'int' ); +dat.Day = fread(fid, 1, 'int' ); +dat.Hour = fread(fid, 1, 'int' ); +dat.Minute = fread(fid, 1, 'int' ); +dat.Second = fread(fid, 1, 'int' ); +dat.Gain = fread(fid, 1, 'int' ); +dat.Comment = char(fread(fid, 128, 'char')'); + +if Version==100 + % the remainder of the header contains bytes for padding + dat.Padding = fread(fid, 256, 'char' ); +elseif Version==101 + % Version 101: A field was added to indicate bits-per-sample (12 or 16). All channels have the same NIDAQ + % gain, and preamp gain is not saved. + dat.BitsPerSample = fread(fid, 1, 'char'); + dat.Padding = fread(fid, 255, 'char'); +elseif Version==102 + % Version 102: A byte array of per-channel NIDAQ gains was added. The Gain field now indicates the + % preamp gain, a value of 1 usually indicating that no preamp gain was specified in the application that + % recorded the DDT. + dat.BitsPerSample = fread(fid, 1, 'char'); + dat.ChannelGain = fread(fid, 64, 'char'); + dat.Padding = fread(fid, 191, 'char'); +elseif Version==103 + % Version 103: A field was added to specify ADC maximal input voltage. The value is integer number in + % millivolts. + dat.BitsPerSample = fread(fid, 1, 'char'); + dat.ChannelGain = fread(fid, 64, 'char'); + dat.MaxMagnitudeMV = fread(fid, 1, 'short'); + dat.Padding = fread(fid, 189, 'char'); +else + error('unsupported version of ddt file'); +end + +% determine the number of samples by looking at the length of the datafile +offset = ftell(fid); +fseek(fid, 0, 'eof'); +dat.NSamples = (ftell(fid) - offset) / (2 * dat.NChannels); + +if nargin==1 + % do not read any data, only return the header + fclose(fid); + return +end + +% A DDT file contains a file header followed by an array of A/D samples stored as 16-bit integers regardless +% of whether values are 12 or 16-bits. The samples are multiplexed. + +% read the desired samples of the data +offset = dat.DataOffset + (begsample-1)*dat.NChannels; +nsampl = endsample - begsample + 1; +fseek(fid, offset, 'bof'); +dat.data = fread(fid, [dat.NChannels nsampl], 'int16'); + +fclose(fid); + +% apply the calibration to obtain the signal in physical units +if Version==100 + PreAmpGain = 1000; + dat.data = dat.data * 5000 / (2048 * dat.Gain * PreAmpGain); +elseif Version==101 + PreAmpGain = 1000; + dat.data = dat.data * 5000 / (0.5 * (2^dat.BitsPerSample) * dat.Gain * PreAmpGain); +elseif Version==102 + for i=1:dat.NChannels + dat.data(i,:) = dat.data(i,:) * 5000 ./ (0.5 * (2^dat.BitsPerSample) * dat.ChannelGain(i)); + end +elseif Version==103 + % I am not sure whether the calibration like this is correct, since the + % Plexon documentation does not explicitely specify how to do it for the + % 104 file format. I presume that it is identical to the 103 format. + for i=1:dat.NChannels + dat.data(i,:) = dat.data(i,:) * 5000 ./ (0.5 * (2^dat.BitsPerSample) * dat.ChannelGain(i)); + end +end + diff --git a/external/fileio/private/read_plexon_ds.m b/external/fileio/private/read_plexon_ds.m new file mode 100644 index 0000000..a1162c1 --- /dev/null +++ b/external/fileio/private/read_plexon_ds.m @@ -0,0 +1,155 @@ +function [dat] = read_plexon_ds(dirname, hdr, begsample, endsample, chanindx) + +% READ_PLEXON_DS reads multiple single-channel Plexon files that are +% all contained in a single directory. Each file is treated as a single +% channel of a combined multi-channel dataset. +% +% Use as +% hdr = read_plexon_ds(dirname) +% dat = read_plexon_ds(dirname, hdr, begsample, endsample, chanindx) +% +% See also READ_PLEXON_NEX, READ_PLEXON_PLX, READ_PLEXON_DDT + +% Copyright (C) 2007, Robert Oostenveld +% +% $Log: read_plexon_ds.m,v $ +% Revision 1.1 2009/01/14 09:24:45 roboos +% moved even more files from fileio to fileio/privtae, see previous log entry +% +% Revision 1.1 2007/03/21 16:58:51 roboos +% first implementation only for continuous plexon_nex, based on the skeleton from read_neuralynx_ds +% + +needhdr = (nargin==1); +needdat = (nargin>=2); + +if needhdr + % get the list of filenames + ls = dir(dirname); + ls = ls(~cell2mat({ls.isdir})); + fname = {}; + for i=1:length(ls) + fname{i} = fullfile(dirname, ls(i).name); + end + + ftype = zeros(length(fname), 1); + for i=1:length(fname) + if filetype(fname{i}, 'plexon_nex') + ftype(i) = 1; + elseif filetype(fname{i}, 'plexon_plx') + ftype(i) = 2; + elseif filetype(fname{i}, 'plexon_ddt') + ftype(i) = 3; + end + end + + % only remember the filenames that are relevant + fname = fname(ftype>0); + ftype = ftype(ftype>0); + + if length(fname)==0 + error('the directory contains no supported files'); + elseif any(ftype~=1) + error('only nex files are supported in a plexon dataset directory'); + end + + for i=1:length(fname) + % this will only work if all files within a dataset return a similar header structure + switch ftype(i) + case 1 + orig(i) = read_plexon_nex(fname{i}); + case 'plexon_plx' + error('plx files are not supported in plexon dataset directory'); + case 'plexon_ddt' + error('ddt files are not supported in plexon dataset directory'); + otherwise + error('unsupported file in plexon dataset directory'); + end + end + + for i=1:length(fname) + if length(orig(i).VarHeader)>1 + error('multiple channels in a single NEX file not supported'); + else + % combine the information from the different files in a single header + label{i} = deblank(orig(i).VarHeader.Name); + Type(i) = orig(i).VarHeader.Type; + WFrequency(i) = orig(i).VarHeader.WFrequency; % of the waveform + ADBitVolts(i) = orig(i).VarHeader.ADtoMV; + NPointsWave(i) = orig(i).VarHeader.NPointsWave; + Beg(i) = orig(i).FileHeader.Beg; + End(i) = orig(i).FileHeader.End; + Frequency(i) = orig(i).FileHeader.Frequency; % of the timestamps + end + end + + if any(Type~=5) + error('not all channels contain continuous data'); + end + + if any(WFrequency~=WFrequency(1)) + warning('not all channels have the same sampling rate'); + end + + if any(Frequency~=Frequency(1)) + warning('not all channels have the same timestamp rate'); + end + + if any(Beg~=Beg(1)) + warning('not all channels start at the same time'); + end + + if any(End~=End(1)) + warning('not all channels end at the same time'); + end + + if any(NPointsWave~=NPointsWave(1)) + warning('not all channels have the same number of samples'); + end + + % construct the header that applies to all channels combined + hdr.label = label; + hdr.nChans = length(label); + hdr.nSamples = NPointsWave(1); + hdr.nSamplesPre = 0; % it is continuous + hdr.nTrials = 1; % it is continuous + hdr.Fs = WFrequency(1); + hdr.FirstTimeStamp = Beg(1); + hdr.LastTimeStamp = End(1); % FIXME this is often not correct + hdr.TimeStampPerSample = Frequency(1)/WFrequency(1); + hdr.filename = fname; + + % remember the original header details + hdr.orig = orig(:); + + % return the header + dat = hdr; + +else + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % read the data of the selected channels (i.e. files) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + if nargin<5 + % select all channels + chanindx = 1:length(hdr.label); + end + nchan = length(chanindx); + nsample = endsample-begsample+1; + dat = zeros(nchan, nsample); + + for i=1:nchan + thischan = chanindx(i); + thisfile = hdr.filename{thischan}; + switch filetype(thisfile) + case 'plexon_nex' + buf = read_plexon_nex(thisfile, 'header', hdr.orig(thischan), 'channel', 1); % always read the first and only channel + dat(i,:) = buf.dat(begsample:endsample); + case 'plexon_plx' + error('plx files are not supported in plexon dataset directory'); + case 'plexon_ddt' + error('ddt files are not supported in plexon dataset directory'); + otherwise + error('unsupported file in plexon dataset directory'); + end + end +end diff --git a/external/fileio/private/read_plexon_plx.m b/external/fileio/private/read_plexon_plx.m new file mode 100644 index 0000000..7ca346e --- /dev/null +++ b/external/fileio/private/read_plexon_plx.m @@ -0,0 +1,431 @@ +function [varargout] = read_plexon_plx(filename, varargin) + +% READ_PLEXON_PLX reads header or data from a Plexon *.plx file, which +% is a file containing action-potential (spike) timestamps and waveforms +% (spike channels), event timestamps (event channels), and continuous +% variable data (continuous A/D channels). +% +% Use as +% [hdr] = read_plexon_plx(filename) +% [dat] = read_plexon_plx(filename, ...) +% [dat1, dat2, dat3, hdr] = read_plexon_plx(filename, ...) +% +% Optional input arguments should be specified in key-value pairs +% 'header' = structure with header information +% 'memmap' = 0 or 1 +% 'feedback' = 0 or 1 +% 'ChannelIndex' = number, or list of numbers (that will result in multiple outputs) +% 'SlowChannelIndex' = number, or list of numbers (that will result in multiple outputs) + +% Copyright (C) 2007, Robert Oostenveld +% +% $Log: read_plexon_plx.m,v $ +% Revision 1.1 2009/01/14 09:24:45 roboos +% moved even more files from fileio to fileio/privtae, see previous log entry +% +% Revision 1.8 2008/09/30 08:01:04 roboos +% replaced all fread(char=>char) into uint8=>char to ensure that the +% chars are read as 8 bits and not as extended 16 bit characters. The +% 16 bit handling causes problems on some internationalized OS/Matlab +% combinations. +% +% the help of fread specifies "If the precision is 'char' or 'char*1', MATLAB +% reads characters using the encoding scheme associated with the file. +% See FOPEN for more information". +% +% Revision 1.7 2007/03/26 12:32:13 roboos +% changed some documentation, whitespace and comments +% output in multiple output arguments instead of a single cell-array (for consistency with nex reader) +% +% Revision 1.6 2007/03/19 17:11:54 roboos +% made the datablock header reader the same for regular and memmapped files +% fixed the timestamps for memmapped files +% +% Revision 1.5 2007/03/18 22:05:28 roboos +% avoid one call to double() +% fixed bug in variable name (mixed up spike and slow channel, only in feedback) +% also deal with spike channels that do not contain any data +% +% Revision 1.4 2007/03/14 16:10:54 roboos +% do re-allocation in larger chuncks +% +% Revision 1.3 2007/01/09 09:44:10 roboos +% use multiple output arguments, made feedback optional, represent values in DataBlockHeader as int16 if possible (save some memory) +% +% Revision 1.2 2007/01/04 12:08:43 roboos +% implemented memory mapped reading of block header info, implented direct reading of data, timestamps as uint16 and uint32 +% +% Revision 1.1 2007/01/03 16:58:15 roboos +% new implementation +% + +% parse the optional input arguments +hdr = keyval('header', varargin); +memmap = keyval('memmap', varargin); +feedback = keyval('feedback', varargin); +ChannelIndex = keyval('ChannelIndex', varargin); +SlowChannelIndex = keyval('SlowChannelIndex', varargin); +EventIndex = keyval('EventIndex', varargin); % not yet used + +% set the defaults +if isempty(memmap) + memmap=0; +end +if isempty(feedback) + feedback=1; +end + +needhdr = isempty(hdr); + +% start with empty return values +varargout = {}; + +% the datafile is little endian, hence it may be neccessary to swap bytes in +% the memory mapped data stream depending on the CPU type of this computer +if littleendian + swapFcn = @(x) x; +else + swapFcn = @(x) swapbytes(x); +end + +% read header info from file, use Matlabs for automatic byte-ordering +fid = fopen(filename, 'r', 'ieee-le'); +fseek(fid, 0, 'eof'); +siz = ftell(fid); +fseek(fid, 0, 'bof'); + +if needhdr + if feedback, fprintf('reading header from %s\n', filename); end + % a PLX file consists of a file header, channel headers, and data blocks + hdr = PL_FileHeader(fid); + for i=1:hdr.NumDSPChannels + hdr.ChannelHeader(i) = PL_ChannelHeader(fid); + end + for i=1:hdr.NumEventChannels + hdr.EventHeader(i) = PL_EventHeader(fid); + end + for i=1:hdr.NumSlowChannels + hdr.SlowChannelHeader(i) = PL_SlowChannelHeader(fid); + end + hdr.DataOffset = ftell(fid); + + if memmap + % open the file as meory mapped object, note that byte swapping may be needed + mm = memmapfile(filename, 'offset', hdr.DataOffset, 'format', 'int16'); + end + + dum = struct(... + 'Type', [],... + 'UpperByteOf5ByteTimestamp', [],... + 'TimeStamp', [],... + 'Channel', [],... + 'Unit', [],... + 'NumberOfWaveforms', [],... + 'NumberOfWordsInWaveform', [] ... + ); + + % read the header of each data block and remember its data offset in bytes + Nblocks = 0; + offset = hdr.DataOffset; % only used when reading from memmapped file + hdr.DataBlockOffset = []; + hdr.DataBlockHeader = dum; + while offset=length(hdr.DataBlockOffset); + % allocate another 1000 elements, this prevents continuous reallocation + hdr.DataBlockOffset(Nblocks+10000) = 0; + hdr.DataBlockHeader(Nblocks+10000) = dum; + if feedback, fprintf('reading DataBlockHeader %4.1f%%\n', 100*(offset-hdr.DataOffset)/(siz-hdr.DataOffset)); end + end + Nblocks = Nblocks+1; + if memmap + % get the header information from the memory mapped file + hdr.DataBlockOffset(Nblocks) = offset; + hdr.DataBlockHeader(Nblocks) = PL_DataBlockHeader(mm, offset-hdr.DataOffset, swapFcn); + % skip the header (16 bytes) and the data (int16 words) + offset = offset + 16 + 2 * double(hdr.DataBlockHeader(Nblocks).NumberOfWordsInWaveform * hdr.DataBlockHeader(Nblocks).NumberOfWaveforms); + else + % read the header information from the file the traditional way + hdr.DataBlockOffset(Nblocks) = offset; + hdr.DataBlockHeader(Nblocks) = PL_DataBlockHeader(fid, [], swapFcn); + fseek(fid, 2 * double(hdr.DataBlockHeader(Nblocks).NumberOfWordsInWaveform * hdr.DataBlockHeader(Nblocks).NumberOfWaveforms), 'cof'); % data consists of short integers + offset = ftell(fid); + end % if memmap + end + % this prints the final 100% + if feedback, fprintf('reading DataBlockHeader %4.1f%%\n', 100*(offset-hdr.DataOffset)/(siz-hdr.DataOffset)); end + % remove the allocated space that was not needed + hdr.DataBlockOffset = hdr.DataBlockOffset(1:Nblocks); + hdr.DataBlockHeader = hdr.DataBlockHeader(1:Nblocks); + +end % if needhdr + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% read the spike channel data +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if ~isempty(ChannelIndex) + if feedback, fprintf('reading spike data from %s\n', filename); end + + if memmap + % open the file as meory mapped object, note that byte swapping may be needed + mm = memmapfile(filename, 'offset', hdr.DataOffset, 'format', 'int16'); + end + + type = [hdr.DataBlockHeader.Type]; + chan = [hdr.DataBlockHeader.Channel]; + ts = [hdr.DataBlockHeader.TimeStamp]; + + for i=1:length(ChannelIndex) + % determine the data blocks with continuous data belonging to this channel + sel = (type==1 & chan==hdr.ChannelHeader(ChannelIndex(i)).Channel); + sel = find(sel); + + if isempty(sel) + warning(sprintf('spike channel %d contains no data', ChannelIndex(i))); + varargin{end+1} = []; + continue; + end + + % the number of samples can potentially be different in each block + num = double([hdr.DataBlockHeader(sel).NumberOfWordsInWaveform]) .* double([hdr.DataBlockHeader(sel).NumberOfWaveforms]); + + % check whether the number of samples per block makes sense + if any(num~=num(1)) + error('spike channel blocks with diffent number of samples'); + end + + % allocate memory to hold the data + buf = zeros(num(1), length(sel), 'int16'); + + if memmap + % get the header information from the memory mapped file + datbeg = double(hdr.DataBlockOffset(sel) - hdr.DataOffset)/2 + 8 + 1; % expressed in 2-byte words, minus the file header, skip the 16 byte block header + datend = datbeg + num - 1; + for j=1:length(sel) + buf(:,j) = mm.Data(datbeg(j):datend(j)); + end + % optionally swap the bytes to correct for the endianness + buf = swapFcn(buf); + else + % read the data from the file in the traditional way + offset = double(hdr.DataBlockOffset(sel)) + 16; % expressed in bytes, skip the 16 byte block header + for j=1:length(sel) + fseek(fid, offset(j), 'bof'); + buf(:,j) = fread(fid, num(j), 'int16'); + end + end % if memmap + + % remember the data for this channel + varargout{i} = buf; + + end %for ChannelIndex +end % if ChannelIndex + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% read the continuous channel data +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if ~isempty(SlowChannelIndex) + if feedback, fprintf('reading continuous data from %s\n', filename); end + dat = {}; + + if memmap + % open the file as meory mapped object, note that byte swapping may be needed + mm = memmapfile(filename, 'offset', hdr.DataOffset, 'format', 'int16'); + end + + type = [hdr.DataBlockHeader.Type]; + chan = [hdr.DataBlockHeader.Channel]; + ts = [hdr.DataBlockHeader.TimeStamp]; + + for i=1:length(SlowChannelIndex) + % determine the data blocks with continuous data belonging to this channel + sel = (type==5 & chan==hdr.SlowChannelHeader(SlowChannelIndex(i)).Channel); + sel = find(sel); + + if isempty(sel) + error(sprintf('Continuous channel %d contains no data', SlowChannelIndex(i))); + % warning(sprintf('Continuous channel %d contains no data', SlowChannelIndex(i))); + % varargin{end+1} = []; + % continue; + end + + % the number of samples can be different in each block + num = double([hdr.DataBlockHeader(sel).NumberOfWordsInWaveform]) .* double([hdr.DataBlockHeader(sel).NumberOfWaveforms]); + cumnum = cumsum([0 num]); + + % allocate memory to hold the data + buf = zeros(1, cumnum(end), 'int16'); + if memmap + % get the header information from the memory mapped file + datbeg = double(hdr.DataBlockOffset(sel) - hdr.DataOffset)/2 + 8 + 1; % expressed in 2-byte words, minus the file header, skip the 16 byte block header + datend = datbeg + num - 1; + for j=1:length(sel) + bufbeg = cumnum(j)+1; + bufend = cumnum(j+1); + % copy the data from the memory mapped file into the continuous buffer + buf(bufbeg:bufend) = mm.Data(datbeg(j):datend(j)); + end + % optionally swap the bytes to correct for the endianness + buf = swapFcn(buf); + else + % read the data from the file in the traditional way + offset = double(hdr.DataBlockOffset(sel)) + 16; % expressed in bytes, skip the 16 byte block header + for j=1:length(sel) + bufbeg = cumnum(j)+1; + bufend = cumnum(j+1); + % copy the data from the file into the continuous buffer + fseek(fid, offset(j), 'bof'); + buf(bufbeg:bufend) = fread(fid, num(j), 'int16'); + end + end % if memmap + + % remember the data for this channel + varargout{i} = buf; + + end %for SlowChannelIndex +end % if SlowChannelIndex + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% read the event channel data +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if ~isempty(EventIndex) + type = [hdr.DataBlockHeader.Type]; + chan = [hdr.DataBlockHeader.Channel]; + ts = [hdr.DataBlockHeader.TimeStamp]; + + for i=1:length(EventIndex) + % determine the data blocks with continuous data belonging to this channel + sel = (type==0 & chan==hdr.EventHeader(EventIndex(i)).Channel); + sel = find(sel); + + if isempty(sel) + warning(sprintf('event channel %d contains no data', EventIndex(i))); + varargin{end+1} = []; + continue; + end + + % this still has to be implemented + keyboard + + end % for EventIndex +end % if EventIndex + +fclose(fid); + +% always return the header as last +varargout{end+1} = hdr; +return + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SUBFUNCTIONS for reading the different header elements +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function hdr = PL_FileHeader(fid) +hdr.MagicNumber = fread(fid, 1, 'uint32=>uint32'); % = 0x58454c50; +hdr.Version = fread(fid, 1, 'int32' ); % Version of the data format; determines which data items are valid +hdr.Comment = fread(fid, [1 128], 'uint8=>char' ); % User-supplied comment +hdr.ADFrequency = fread(fid, 1, 'int32' ); % Timestamp frequency in hertz +hdr.NumDSPChannels = fread(fid, 1, 'int32' ); % Number of DSP channel headers in the file +hdr.NumEventChannels = fread(fid, 1, 'int32' ); % Number of Event channel headers in the file +hdr.NumSlowChannels = fread(fid, 1, 'int32' ); % Number of A/D channel headers in the file +hdr.NumPointsWave = fread(fid, 1, 'int32' ); % Number of data points in waveform +hdr.NumPointsPreThr = fread(fid, 1, 'int32' ); % Number of data points before crossing the threshold +hdr.Year = fread(fid, 1, 'int32' ); % Time/date when the data was acquired +hdr.Month = fread(fid, 1, 'int32' ); +hdr.Day = fread(fid, 1, 'int32' ); +hdr.Hour = fread(fid, 1, 'int32' ); +hdr.Minute = fread(fid, 1, 'int32' ); +hdr.Second = fread(fid, 1, 'int32' ); +hdr.FastRead = fread(fid, 1, 'int32' ); % reserved +hdr.WaveformFreq = fread(fid, 1, 'int32' ); % waveform sampling rate; ADFrequency above is timestamp freq +hdr.LastTimestamp = fread(fid, 1, 'double'); % duration of the experimental session, in ticks +% The following 6 items are only valid if Version >= 103 +hdr.Trodalness = fread(fid, 1, 'char' ); % 1 for single, 2 for stereotrode, 4 for tetrode +hdr.DataTrodalness = fread(fid, 1, 'char' ); % trodalness of the data representation +hdr.BitsPerSpikeSample = fread(fid, 1, 'char' ); % ADC resolution for spike waveforms in bits (usually 12) +hdr.BitsPerSlowSample = fread(fid, 1, 'char' ); % ADC resolution for slow-channel data in bits (usually 12) +hdr.SpikeMaxMagnitudeMV = fread(fid, 1, 'uint16'); % the zero-to-peak voltage in mV for spike waveform adc values (usually 3000) +hdr.SlowMaxMagnitudeMV = fread(fid, 1, 'uint16'); % the zero-to-peak voltage in mV for slow-channel waveform adc values (usually 5000); Only valid if Version >= 105 (usually either 1000 or 500) +% The following item is only valid if Version >= 105 +hdr.SpikePreAmpGain = fread(fid, 1, 'uint16'); % so that this part of the header is 256 bytes +hdr.Padding = fread(fid, 46, 'char' ); % so that this part of the header is 256 bytes +% Counters for the number of timestamps and waveforms in each channel and unit. +% Note that these only record the counts for the first 4 units in each channel. +% channel numbers are 1-based - array entry at [0] is unused +hdr.TSCounts = fread(fid, [5 130], 'int32' ); % number of timestamps[channel][unit] +hdr.WFCounts = fread(fid, [5 130], 'int32' ); % number of waveforms[channel][unit] +% Starting at index 300, the next array also records the number of samples for the +% continuous channels. Note that since EVCounts has only 512 entries, continuous +% channels above channel 211 do not have sample counts. +hdr.EVCounts = fread(fid, 512, 'int32' ); % number of timestamps[event_number] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function hdr = PL_ChannelHeader(fid) +hdr.Name = fread(fid, [1 32], 'uint8=>char' ); % Name given to the DSP channel +hdr.SIGName = fread(fid, [1 32], 'uint8=>char' ); % Name given to the corresponding SIG channel +hdr.Channel = fread(fid, 1, 'int32' ); % DSP channel number, 1-based +hdr.WFRate = fread(fid, 1, 'int32' ); % When MAP is doing waveform rate limiting, this is limit w/f per sec divided by 10 +hdr.SIG = fread(fid, 1, 'int32' ); % SIG channel associated with this DSP channel 1 - based +hdr.Ref = fread(fid, 1, 'int32' ); % SIG channel used as a Reference signal, 1- based +hdr.Gain = fread(fid, 1, 'int32' ); % actual gain divided by SpikePreAmpGain. For pre version 105, actual gain divided by 1000. +hdr.Filter = fread(fid, 1, 'int32' ); % 0 or 1 +hdr.Threshold = fread(fid, 1, 'int32' ); % Threshold for spike detection in a/d values +hdr.Method = fread(fid, 1, 'int32' ); % Method used for sorting units, 1 - boxes, 2 - templates +hdr.NUnits = fread(fid, 1, 'int32' ); % number of sorted units +hdr.Template = fread(fid, [64 5], 'int16' ); % Templates used for template sorting, in a/d values +hdr.Fit = fread(fid, 5, 'int32' ); % Template fit +hdr.SortWidth = fread(fid, 1, 'int32' ); % how many points to use in template sorting (template only) +hdr.Boxes = reshape(fread(fid, 4*2*5, 'int16' ), [4 2 5]); % the boxes used in boxes sorting +hdr.SortBeg = fread(fid, 1, 'int32' ); % beginning of the sorting window to use in template sorting (width defined by SortWidth) +hdr.Comment = fread(fid, [1 128], 'uint8=>char' ); +hdr.Padding = fread(fid, 11, 'int32' ); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function hdr = PL_EventHeader(fid) +hdr.Name = fread(fid, [1 32], 'uint8=>char' ); % name given to this event +hdr.Channel = fread(fid, 1, 'int32' ); % event number, 1-based +hdr.Comment = fread(fid, [1 128], 'uint8=>char' ); +hdr.Padding = fread(fid, 33, 'int32' ); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function hdr = PL_SlowChannelHeader(fid) +hdr.Name = fread(fid, [1 32], 'uint8=>char' ); % name given to this channel +hdr.Channel = fread(fid, 1, 'int32' ); % channel number, 0-based +hdr.ADFreq = fread(fid, 1, 'int32' ); % digitization frequency +hdr.Gain = fread(fid, 1, 'int32' ); % gain at the adc card +hdr.Enabled = fread(fid, 1, 'int32' ); % whether this channel is enabled for taking data, 0 or 1 +hdr.PreAmpGain = fread(fid, 1, 'int32' ); % gain at the preamp +% As of Version 104, this indicates the spike channel (PL_ChannelHeader.Channel) of +% a spike channel corresponding to this continuous data channel. +% <=0 means no associated spike channel. +hdr.SpikeChannel = fread(fid, 1, 'int32' ); +hdr.Comment = fread(fid, [1 128], 'uint8=>char' ); +hdr.Padding = fread(fid, 28, 'int32' ); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function hdr = PL_DataBlockHeader(fid, offset, swapFcn) +% % this is the conventional code, it has been replaced by code that works +% % with both regular and memmapped files +% hdr.Type = fread(fid, 1, 'int16=>int16' ); % Data type; 1=spike, 4=Event, 5=continuous +% hdr.UpperByteOf5ByteTimestamp = fread(fid, 1, 'uint16=>uint16' ); % Upper 8 bits of the 40 bit timestamp +% hdr.TimeStamp = fread(fid, 1, 'uint32=>uint32' ); % Lower 32 bits of the 40 bit timestamp +% hdr.Channel = fread(fid, 1, 'int16=>int16' ); % Channel number +% hdr.Unit = fread(fid, 1, 'int16=>int16' ); % Sorted unit number; 0=unsorted +% hdr.NumberOfWaveforms = fread(fid, 1, 'int16=>int16' ); % Number of waveforms in the data to folow, usually 0 or 1 +% hdr.NumberOfWordsInWaveform = fread(fid, 1, 'int16=>int16' ); % Number of samples per waveform in the data to follow +if isa(fid, 'memmapfile') + mm = fid; + datbeg = offset/2 + 1; % the offset is in bytes (minus the file header), the memory mapped file is indexed in int16 words + datend = offset/2 + 8; + buf = mm.Data(datbeg:datend); +else + buf = fread(fid, 8, 'int16=>int16'); +end +hdr.Type = swapFcn(buf(1)); +hdr.UpperByteOf5ByteTimestamp = swapFcn(uint16(buf(2))); +hdr.TimeStamp = swapFcn(typecast(buf([3 4]), 'uint32')); +hdr.Channel = swapFcn(buf(5)); +hdr.Unit = swapFcn(buf(6)); +hdr.NumberOfWaveforms = swapFcn(buf(7)); +hdr.NumberOfWordsInWaveform = swapFcn(buf(8)); diff --git a/external/fileio/private/read_sbin_events.m b/external/fileio/private/read_sbin_events.m index 1d3c278..69c4de2 100644 --- a/external/fileio/private/read_sbin_events.m +++ b/external/fileio/private/read_sbin_events.m @@ -17,6 +17,9 @@ % % $Log: read_sbin_events.m,v $ +% Revision 1.4 2009/09/04 02:44:49 josdie +% Fixed crash for segmented files due to typo in last revision. +% % Revision 1.3 2009/04/29 10:55:16 jansch % incorporated handling of unsegmented files % @@ -120,7 +123,7 @@ nsmp = 1; else %data are organized in segments - nsmp = Nsamples; + nsmp = NSamples; end eventData = zeros(NEvent,NSegments*NSamples); diff --git a/external/fileio/private/read_sens.m b/external/fileio/private/read_sens.m index c21a80e..e30027b 100644 --- a/external/fileio/private/read_sens.m +++ b/external/fileio/private/read_sens.m @@ -32,6 +32,13 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: read_sens.m,v $ +% Revision 1.14 2009/07/02 10:34:21 vlalit +% Added eeglab_set to the list of formats where electrode locations can be found in +% the header. +% +% Revision 1.13 2009/06/03 09:52:15 roboos +% added zebris_sfp +% % Revision 1.12 2009/02/02 16:10:15 vlalit % Provide the 'headertype' argument to the internal read_header call. % @@ -171,7 +178,7 @@ % This is for EEG formats where electrode positions can be stored with the data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'spmeeg_mat'} + case {'spmeeg_mat', 'eeglab_set'} % check the availability of the required low-level toolbox % this is required because the read_sens function is also on itself included in the forwinv toolbox hastoolbox('fileio'); @@ -218,6 +225,13 @@ else error('no electrodes or gradiometers found in Matlab file'); end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % these are created by a Zebris tracker, at CRC in Liege at least. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + case 'zebris_sfp' + [sens.fid, sens.pnt, sens.fid_label, sens.label] = read_zebris(filename, 0); otherwise error('unknown fileformat for electrodes or gradiometers'); diff --git a/external/fileio/private/senslabel.m b/external/fileio/private/senslabel.m index 81db081..f75cc93 100644 --- a/external/fileio/private/senslabel.m +++ b/external/fileio/private/senslabel.m @@ -6,6 +6,7 @@ % label = senslabel(type) % % The input type can be any of the following +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -40,6 +41,12 @@ % Copyright (C) 2008, Vladimir Litvak % % $Log: senslabel.m,v $ +% Revision 1.4 2009/07/29 07:07:59 roboos +% use caching of input and output arguments to speed up the handling of multiple calls with the same input argument +% +% Revision 1.3 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.2 2009/05/07 13:34:09 roboos % added ctf64 % @@ -59,6 +66,21 @@ % moved definition of channel label sets to seperate function % +% these are for remembering the type on subsequent calls with the same input arguments +persistent previous_argin previous_argout + +if nargin<1 + % ensure that all input arguments are defined + type = []; +end + +current_argin = {type}; +if isequal(current_argin, previous_argin) + % don't do the type detection again, but return the previous values from cache + label = previous_argout{1}; + return +end + % prevent defining all possible labels if not needed isbiosemi = ~isempty(regexp(type, '^biosemi', 'once')); isbti = ~isempty(regexp(type, '^bti', 'once')); @@ -69,1836 +91,1912 @@ isneuromag = ~isempty(regexp(type, '^neuromag', 'once')); if isbti - btiref = { - 'MRxA' - 'MRyA' - 'MRzA' - 'MLxA' - 'MLyA' - 'MLzA' - 'MCxA' - 'MCyA' - 'MCzA' - 'MRxaA' - 'MRyaA' - 'MRzaA' - 'MLxaA' - 'MLyaA' - 'MLzaA' - 'MCxaA' - 'MCyaA' - 'MCzaA' - 'GxxA' - 'GyxA' - 'GzxA' - 'GyyA' - 'GzyA' - }; + btiref = { + 'MRxA' + 'MRyA' + 'MRzA' + 'MLxA' + 'MLyA' + 'MLzA' + 'MCxA' + 'MCyA' + 'MCzA' + 'MRxaA' + 'MRyaA' + 'MRzaA' + 'MLxaA' + 'MLyaA' + 'MLzaA' + 'MCxaA' + 'MCyaA' + 'MCzaA' + 'GxxA' + 'GyxA' + 'GzxA' + 'GyyA' + 'GzyA' + }; - bti148 = cell(148,1); - for i=1:148 - bti148{i,1} = sprintf('A%d', i); - end + bti148 = cell(148,1); + for i=1:148 + bti148{i,1} = sprintf('A%d', i); + end - bti148_planar = cell(148,1); - for i=1:148 - bti148_planar{i,1} = sprintf('A%d_dH', i); - bti148_planar{i,2} = sprintf('A%d_dV', i); - end + bti148_planar = cell(148,1); + for i=1:148 + bti148_planar{i,1} = sprintf('A%d_dH', i); + bti148_planar{i,2} = sprintf('A%d_dV', i); + end - bti248 = cell(248,1); - for i=1:248 - bti248{i,1} = sprintf('A%d', i); - end + bti248 = cell(248,1); + for i=1:248 + bti248{i,1} = sprintf('A%d', i); + end - bti248_planar = cell(248,2); - for i=1:248 - bti248_planar{i,1} = sprintf('A%d_dH', i); - bti248_planar{i,2} = sprintf('A%d_dV', i); - end + bti248_planar = cell(248,2); + for i=1:248 + bti248_planar{i,1} = sprintf('A%d_dH', i); + bti248_planar{i,2} = sprintf('A%d_dV', i); + end end % if isbti if isctf - ctfref = { - 'BG1' - 'BG2' - 'BG3' - 'BP1' - 'BP2' - 'BP3' - 'BR1' - 'BR2' - 'BR3' - 'G11' - 'G12' - 'G13' - 'G22' - 'G23' - 'P11' - 'P12' - 'P13' - 'P22' - 'P23' - 'Q11' - 'Q12' - 'Q13' - 'Q22' - 'Q23' - 'R11' - 'R12' - 'R13' - 'R22' - 'R23' - }; + ctfref = { + 'BG1' + 'BG2' + 'BG3' + 'BP1' + 'BP2' + 'BP3' + 'BR1' + 'BR2' + 'BR3' + 'G11' + 'G12' + 'G13' + 'G22' + 'G23' + 'P11' + 'P12' + 'P13' + 'P22' + 'P23' + 'Q11' + 'Q12' + 'Q13' + 'Q22' + 'Q23' + 'R11' + 'R12' + 'R13' + 'R22' + 'R23' + }; - ctfheadloc = { - 'HLC0011' - 'HLC0012' - 'HLC0013' - 'HLC0021' - 'HLC0022' - 'HLC0023' - 'HLC0031' - 'HLC0032' - 'HLC0033' - 'HLC0018' - 'HLC0028' - 'HLC0038' - 'HLC0014' - 'HLC0015' - 'HLC0016' - 'HLC0017' - 'HLC0024' - 'HLC0025' - 'HLC0026' - 'HLC0027' - 'HLC0034' - 'HLC0035' - 'HLC0036' - 'HLC0037' - }; + ctfheadloc = { + 'HLC0011' + 'HLC0012' + 'HLC0013' + 'HLC0021' + 'HLC0022' + 'HLC0023' + 'HLC0031' + 'HLC0032' + 'HLC0033' + 'HLC0018' + 'HLC0028' + 'HLC0038' + 'HLC0014' + 'HLC0015' + 'HLC0016' + 'HLC0017' + 'HLC0024' + 'HLC0025' + 'HLC0026' + 'HLC0027' + 'HLC0034' + 'HLC0035' + 'HLC0036' + 'HLC0037' + }; - ctf64 = { - 'SL11' - 'SL12' - 'SL13' - 'SL14' - 'SL15' - 'SL16' - 'SL17' - 'SL18' - 'SL19' - 'SL21' - 'SL22' - 'SL23' - 'SL24' - 'SL25' - 'SL26' - 'SL27' - 'SL28' - 'SL29' - 'SL31' - 'SL32' - 'SL33' - 'SL34' - 'SL35' - 'SL41' - 'SL42' - 'SL43' - 'SL44' - 'SL45' - 'SL46' - 'SL47' - 'SL51' - 'SL52' - 'SR11' - 'SR12' - 'SR13' - 'SR14' - 'SR15' - 'SR16' - 'SR17' - 'SR18' - 'SR19' - 'SR21' - 'SR22' - 'SR23' - 'SR24' - 'SR25' - 'SR26' - 'SR27' - 'SR28' - 'SR29' - 'SR31' - 'SR32' - 'SR33' - 'SR34' - 'SR35' - 'SR41' - 'SR42' - 'SR43' - 'SR44' - 'SR45' - 'SR46' - 'SR47' - 'SR51' - 'SR52' - }; + ctf64 = { + 'SL11' + 'SL12' + 'SL13' + 'SL14' + 'SL15' + 'SL16' + 'SL17' + 'SL18' + 'SL19' + 'SL21' + 'SL22' + 'SL23' + 'SL24' + 'SL25' + 'SL26' + 'SL27' + 'SL28' + 'SL29' + 'SL31' + 'SL32' + 'SL33' + 'SL34' + 'SL35' + 'SL41' + 'SL42' + 'SL43' + 'SL44' + 'SL45' + 'SL46' + 'SL47' + 'SL51' + 'SL52' + 'SR11' + 'SR12' + 'SR13' + 'SR14' + 'SR15' + 'SR16' + 'SR17' + 'SR18' + 'SR19' + 'SR21' + 'SR22' + 'SR23' + 'SR24' + 'SR25' + 'SR26' + 'SR27' + 'SR28' + 'SR29' + 'SR31' + 'SR32' + 'SR33' + 'SR34' + 'SR35' + 'SR41' + 'SR42' + 'SR43' + 'SR44' + 'SR45' + 'SR46' + 'SR47' + 'SR51' + 'SR52' + }; - ctf151 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC31' - 'MLC32' - 'MLC33' - 'MLC41' - 'MLC42' - 'MLC43' - 'MLF11' - 'MLF12' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF51' - 'MLF52' - 'MLO11' - 'MLO12' - 'MLO21' - 'MLO22' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLP11' - 'MLP12' - 'MLP13' - 'MLP21' - 'MLP22' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC31' - 'MRC32' - 'MRC33' - 'MRC41' - 'MRC42' - 'MRC43' - 'MRF11' - 'MRF12' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF51' - 'MRF52' - 'MRO11' - 'MRO12' - 'MRO21' - 'MRO22' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRP11' - 'MRP12' - 'MRP13' - 'MRP21' - 'MRP22' - 'MRP31' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MZC01' - 'MZC02' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZP01' - 'MZP02' - }; + ctf151 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC31' + 'MLC32' + 'MLC33' + 'MLC41' + 'MLC42' + 'MLC43' + 'MLF11' + 'MLF12' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF51' + 'MLF52' + 'MLO11' + 'MLO12' + 'MLO21' + 'MLO22' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLP11' + 'MLP12' + 'MLP13' + 'MLP21' + 'MLP22' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC31' + 'MRC32' + 'MRC33' + 'MRC41' + 'MRC42' + 'MRC43' + 'MRF11' + 'MRF12' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF51' + 'MRF52' + 'MRO11' + 'MRO12' + 'MRO21' + 'MRO22' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRP11' + 'MRP12' + 'MRP13' + 'MRP21' + 'MRP22' + 'MRP31' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MZC01' + 'MZC02' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZP01' + 'MZP02' + }; - ctf151_planar = cell(151, 2); - for i=1:151 - ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); - ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); - end + ctf151_planar = cell(151, 2); + for i=1:151 + ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); + ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); + end - ctf275 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC16' - 'MLC17' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC25' - 'MLC31' - 'MLC32' - 'MLC41' - 'MLC42' - 'MLC51' - 'MLC52' - 'MLC53' - 'MLC54' - 'MLC55' - 'MLC61' - 'MLC62' - 'MLC63' - 'MLF11' - 'MLF12' - 'MLF13' - 'MLF14' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF24' - 'MLF25' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF35' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF46' - 'MLF51' - 'MLF52' - 'MLF53' - 'MLF54' - 'MLF55' - 'MLF56' - 'MLF61' - 'MLF62' - 'MLF63' - 'MLF64' - 'MLF65' - 'MLF66' - 'MLF67' - 'MLO11' - 'MLO12' - 'MLO13' - 'MLO14' - 'MLO21' - 'MLO22' - 'MLO23' - 'MLO24' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO34' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLO44' - 'MLO51' - 'MLO52' - 'MLO53' - 'MLP11' - 'MLP12' - 'MLP21' - 'MLP22' - 'MLP23' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLP35' - 'MLP41' - 'MLP42' - 'MLP43' - 'MLP44' - 'MLP45' - 'MLP51' - 'MLP52' - 'MLP53' - 'MLP54' - 'MLP55' - 'MLP56' - 'MLP57' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT27' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT36' - 'MLT37' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MLT45' - 'MLT46' - 'MLT47' - 'MLT51' - 'MLT52' - 'MLT53' - 'MLT54' - 'MLT55' - 'MLT56' - 'MLT57' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC16' - 'MRC17' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC25' - 'MRC31' - 'MRC32' - 'MRC41' - 'MRC42' - 'MRC51' - 'MRC52' - 'MRC53' - 'MRC54' - 'MRC55' - 'MRC61' - 'MRC62' - 'MRC63' - 'MRF11' - 'MRF12' - 'MRF13' - 'MRF14' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF24' - 'MRF25' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF35' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF46' - 'MRF51' - 'MRF52' - 'MRF53' - 'MRF54' - 'MRF55' - 'MRF56' - 'MRF61' - 'MRF62' - 'MRF63' - 'MRF64' - 'MRF65' - 'MRF66' - 'MRF67' - 'MRO11' - 'MRO12' - 'MRO13' - 'MRO14' - 'MRO21' - 'MRO22' - 'MRO23' - 'MRO24' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO34' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRO44' - 'MRO51' - 'MRO52' - 'MRO53' - 'MRP11' - 'MRP12' - 'MRP21' - 'MRP22' - 'MRP23' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRP35' - 'MRP41' - 'MRP42' - 'MRP43' - 'MRP44' - 'MRP45' - 'MRP51' - 'MRP52' - 'MRP53' - 'MRP54' - 'MRP55' - 'MRP56' - 'MRP57' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT27' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT36' - 'MRT37' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MRT45' - 'MRT46' - 'MRT47' - 'MRT51' - 'MRT52' - 'MRT53' - 'MRT54' - 'MRT55' - 'MRT56' - 'MRT57' - 'MZC01' - 'MZC02' - 'MZC03' - 'MZC04' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZO03' - 'MZP01' - }; + ctf275 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC16' + 'MLC17' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC25' + 'MLC31' + 'MLC32' + 'MLC41' + 'MLC42' + 'MLC51' + 'MLC52' + 'MLC53' + 'MLC54' + 'MLC55' + 'MLC61' + 'MLC62' + 'MLC63' + 'MLF11' + 'MLF12' + 'MLF13' + 'MLF14' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF24' + 'MLF25' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF35' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF46' + 'MLF51' + 'MLF52' + 'MLF53' + 'MLF54' + 'MLF55' + 'MLF56' + 'MLF61' + 'MLF62' + 'MLF63' + 'MLF64' + 'MLF65' + 'MLF66' + 'MLF67' + 'MLO11' + 'MLO12' + 'MLO13' + 'MLO14' + 'MLO21' + 'MLO22' + 'MLO23' + 'MLO24' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO34' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLO44' + 'MLO51' + 'MLO52' + 'MLO53' + 'MLP11' + 'MLP12' + 'MLP21' + 'MLP22' + 'MLP23' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLP35' + 'MLP41' + 'MLP42' + 'MLP43' + 'MLP44' + 'MLP45' + 'MLP51' + 'MLP52' + 'MLP53' + 'MLP54' + 'MLP55' + 'MLP56' + 'MLP57' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT27' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT36' + 'MLT37' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MLT45' + 'MLT46' + 'MLT47' + 'MLT51' + 'MLT52' + 'MLT53' + 'MLT54' + 'MLT55' + 'MLT56' + 'MLT57' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC16' + 'MRC17' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC25' + 'MRC31' + 'MRC32' + 'MRC41' + 'MRC42' + 'MRC51' + 'MRC52' + 'MRC53' + 'MRC54' + 'MRC55' + 'MRC61' + 'MRC62' + 'MRC63' + 'MRF11' + 'MRF12' + 'MRF13' + 'MRF14' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF24' + 'MRF25' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF35' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF46' + 'MRF51' + 'MRF52' + 'MRF53' + 'MRF54' + 'MRF55' + 'MRF56' + 'MRF61' + 'MRF62' + 'MRF63' + 'MRF64' + 'MRF65' + 'MRF66' + 'MRF67' + 'MRO11' + 'MRO12' + 'MRO13' + 'MRO14' + 'MRO21' + 'MRO22' + 'MRO23' + 'MRO24' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO34' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRO44' + 'MRO51' + 'MRO52' + 'MRO53' + 'MRP11' + 'MRP12' + 'MRP21' + 'MRP22' + 'MRP23' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRP35' + 'MRP41' + 'MRP42' + 'MRP43' + 'MRP44' + 'MRP45' + 'MRP51' + 'MRP52' + 'MRP53' + 'MRP54' + 'MRP55' + 'MRP56' + 'MRP57' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT27' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT36' + 'MRT37' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MRT45' + 'MRT46' + 'MRT47' + 'MRT51' + 'MRT52' + 'MRT53' + 'MRT54' + 'MRT55' + 'MRT56' + 'MRT57' + 'MZC01' + 'MZC02' + 'MZC03' + 'MZC04' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZO03' + 'MZP01' + }; - % f.ck, apparently one channel is missing - ctf275_planar = cell(274,2); - for i=1:274 - ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); - ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); - end + % f.ck, apparently one channel is missing + ctf275_planar = cell(274,2); + for i=1:274 + ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); + ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); + end end % if issctf if isneuromag - neuromag122 = { - 'MEG 001' 'MEG 002' - 'MEG 003' 'MEG 004' - 'MEG 005' 'MEG 006' - 'MEG 007' 'MEG 008' - 'MEG 009' 'MEG 010' - 'MEG 011' 'MEG 012' - 'MEG 013' 'MEG 014' - 'MEG 015' 'MEG 016' - 'MEG 017' 'MEG 018' - 'MEG 019' 'MEG 020' - 'MEG 021' 'MEG 022' - 'MEG 023' 'MEG 024' - 'MEG 025' 'MEG 026' - 'MEG 027' 'MEG 028' - 'MEG 029' 'MEG 030' - 'MEG 031' 'MEG 032' - 'MEG 033' 'MEG 034' - 'MEG 035' 'MEG 036' - 'MEG 037' 'MEG 038' - 'MEG 039' 'MEG 040' - 'MEG 041' 'MEG 042' - 'MEG 043' 'MEG 044' - 'MEG 045' 'MEG 046' - 'MEG 047' 'MEG 048' - 'MEG 049' 'MEG 050' - 'MEG 051' 'MEG 052' - 'MEG 053' 'MEG 054' - 'MEG 055' 'MEG 056' - 'MEG 057' 'MEG 058' - 'MEG 059' 'MEG 060' - 'MEG 061' 'MEG 062' - 'MEG 063' 'MEG 064' - 'MEG 065' 'MEG 066' - 'MEG 067' 'MEG 068' - 'MEG 069' 'MEG 070' - 'MEG 071' 'MEG 072' - 'MEG 073' 'MEG 074' - 'MEG 075' 'MEG 076' - 'MEG 077' 'MEG 078' - 'MEG 079' 'MEG 080' - 'MEG 081' 'MEG 082' - 'MEG 083' 'MEG 084' - 'MEG 085' 'MEG 086' - 'MEG 087' 'MEG 088' - 'MEG 089' 'MEG 090' - 'MEG 091' 'MEG 092' - 'MEG 093' 'MEG 094' - 'MEG 095' 'MEG 096' - 'MEG 097' 'MEG 098' - 'MEG 099' 'MEG 100' - 'MEG 101' 'MEG 102' - 'MEG 103' 'MEG 104' - 'MEG 105' 'MEG 106' - 'MEG 107' 'MEG 108' - 'MEG 109' 'MEG 110' - 'MEG 111' 'MEG 112' - 'MEG 113' 'MEG 114' - 'MEG 115' 'MEG 116' - 'MEG 117' 'MEG 118' - 'MEG 119' 'MEG 120' - 'MEG 121' 'MEG 122' - }; + neuromag122 = { + 'MEG 001' 'MEG 002' + 'MEG 003' 'MEG 004' + 'MEG 005' 'MEG 006' + 'MEG 007' 'MEG 008' + 'MEG 009' 'MEG 010' + 'MEG 011' 'MEG 012' + 'MEG 013' 'MEG 014' + 'MEG 015' 'MEG 016' + 'MEG 017' 'MEG 018' + 'MEG 019' 'MEG 020' + 'MEG 021' 'MEG 022' + 'MEG 023' 'MEG 024' + 'MEG 025' 'MEG 026' + 'MEG 027' 'MEG 028' + 'MEG 029' 'MEG 030' + 'MEG 031' 'MEG 032' + 'MEG 033' 'MEG 034' + 'MEG 035' 'MEG 036' + 'MEG 037' 'MEG 038' + 'MEG 039' 'MEG 040' + 'MEG 041' 'MEG 042' + 'MEG 043' 'MEG 044' + 'MEG 045' 'MEG 046' + 'MEG 047' 'MEG 048' + 'MEG 049' 'MEG 050' + 'MEG 051' 'MEG 052' + 'MEG 053' 'MEG 054' + 'MEG 055' 'MEG 056' + 'MEG 057' 'MEG 058' + 'MEG 059' 'MEG 060' + 'MEG 061' 'MEG 062' + 'MEG 063' 'MEG 064' + 'MEG 065' 'MEG 066' + 'MEG 067' 'MEG 068' + 'MEG 069' 'MEG 070' + 'MEG 071' 'MEG 072' + 'MEG 073' 'MEG 074' + 'MEG 075' 'MEG 076' + 'MEG 077' 'MEG 078' + 'MEG 079' 'MEG 080' + 'MEG 081' 'MEG 082' + 'MEG 083' 'MEG 084' + 'MEG 085' 'MEG 086' + 'MEG 087' 'MEG 088' + 'MEG 089' 'MEG 090' + 'MEG 091' 'MEG 092' + 'MEG 093' 'MEG 094' + 'MEG 095' 'MEG 096' + 'MEG 097' 'MEG 098' + 'MEG 099' 'MEG 100' + 'MEG 101' 'MEG 102' + 'MEG 103' 'MEG 104' + 'MEG 105' 'MEG 106' + 'MEG 107' 'MEG 108' + 'MEG 109' 'MEG 110' + 'MEG 111' 'MEG 112' + 'MEG 113' 'MEG 114' + 'MEG 115' 'MEG 116' + 'MEG 117' 'MEG 118' + 'MEG 119' 'MEG 120' + 'MEG 121' 'MEG 122' + }; - % this is an alternative set of labels without a space in them - neuromag122alt = { - 'MEG001' 'MEG002' - 'MEG003' 'MEG004' - 'MEG005' 'MEG006' - 'MEG007' 'MEG008' - 'MEG009' 'MEG010' - 'MEG011' 'MEG012' - 'MEG013' 'MEG014' - 'MEG015' 'MEG016' - 'MEG017' 'MEG018' - 'MEG019' 'MEG020' - 'MEG021' 'MEG022' - 'MEG023' 'MEG024' - 'MEG025' 'MEG026' - 'MEG027' 'MEG028' - 'MEG029' 'MEG030' - 'MEG031' 'MEG032' - 'MEG033' 'MEG034' - 'MEG035' 'MEG036' - 'MEG037' 'MEG038' - 'MEG039' 'MEG040' - 'MEG041' 'MEG042' - 'MEG043' 'MEG044' - 'MEG045' 'MEG046' - 'MEG047' 'MEG048' - 'MEG049' 'MEG050' - 'MEG051' 'MEG052' - 'MEG053' 'MEG054' - 'MEG055' 'MEG056' - 'MEG057' 'MEG058' - 'MEG059' 'MEG060' - 'MEG061' 'MEG062' - 'MEG063' 'MEG064' - 'MEG065' 'MEG066' - 'MEG067' 'MEG068' - 'MEG069' 'MEG070' - 'MEG071' 'MEG072' - 'MEG073' 'MEG074' - 'MEG075' 'MEG076' - 'MEG077' 'MEG078' - 'MEG079' 'MEG080' - 'MEG081' 'MEG082' - 'MEG083' 'MEG084' - 'MEG085' 'MEG086' - 'MEG087' 'MEG088' - 'MEG089' 'MEG090' - 'MEG091' 'MEG092' - 'MEG093' 'MEG094' - 'MEG095' 'MEG096' - 'MEG097' 'MEG098' - 'MEG099' 'MEG100' - 'MEG101' 'MEG102' - 'MEG103' 'MEG104' - 'MEG105' 'MEG106' - 'MEG107' 'MEG108' - 'MEG109' 'MEG110' - 'MEG111' 'MEG112' - 'MEG113' 'MEG114' - 'MEG115' 'MEG116' - 'MEG117' 'MEG118' - 'MEG119' 'MEG120' - 'MEG121' 'MEG122' - }; + % this is an alternative set of labels without a space in them + neuromag122alt = { + 'MEG001' 'MEG002' + 'MEG003' 'MEG004' + 'MEG005' 'MEG006' + 'MEG007' 'MEG008' + 'MEG009' 'MEG010' + 'MEG011' 'MEG012' + 'MEG013' 'MEG014' + 'MEG015' 'MEG016' + 'MEG017' 'MEG018' + 'MEG019' 'MEG020' + 'MEG021' 'MEG022' + 'MEG023' 'MEG024' + 'MEG025' 'MEG026' + 'MEG027' 'MEG028' + 'MEG029' 'MEG030' + 'MEG031' 'MEG032' + 'MEG033' 'MEG034' + 'MEG035' 'MEG036' + 'MEG037' 'MEG038' + 'MEG039' 'MEG040' + 'MEG041' 'MEG042' + 'MEG043' 'MEG044' + 'MEG045' 'MEG046' + 'MEG047' 'MEG048' + 'MEG049' 'MEG050' + 'MEG051' 'MEG052' + 'MEG053' 'MEG054' + 'MEG055' 'MEG056' + 'MEG057' 'MEG058' + 'MEG059' 'MEG060' + 'MEG061' 'MEG062' + 'MEG063' 'MEG064' + 'MEG065' 'MEG066' + 'MEG067' 'MEG068' + 'MEG069' 'MEG070' + 'MEG071' 'MEG072' + 'MEG073' 'MEG074' + 'MEG075' 'MEG076' + 'MEG077' 'MEG078' + 'MEG079' 'MEG080' + 'MEG081' 'MEG082' + 'MEG083' 'MEG084' + 'MEG085' 'MEG086' + 'MEG087' 'MEG088' + 'MEG089' 'MEG090' + 'MEG091' 'MEG092' + 'MEG093' 'MEG094' + 'MEG095' 'MEG096' + 'MEG097' 'MEG098' + 'MEG099' 'MEG100' + 'MEG101' 'MEG102' + 'MEG103' 'MEG104' + 'MEG105' 'MEG106' + 'MEG107' 'MEG108' + 'MEG109' 'MEG110' + 'MEG111' 'MEG112' + 'MEG113' 'MEG114' + 'MEG115' 'MEG116' + 'MEG117' 'MEG118' + 'MEG119' 'MEG120' + 'MEG121' 'MEG122' + }; - neuromag306 = { - 'MEG 0113' 'MEG 0112' 'MEG 0111' - 'MEG 0122' 'MEG 0123' 'MEG 0121' - 'MEG 0132' 'MEG 0133' 'MEG 0131' - 'MEG 0143' 'MEG 0142' 'MEG 0141' - 'MEG 0213' 'MEG 0212' 'MEG 0211' - 'MEG 0222' 'MEG 0223' 'MEG 0221' - 'MEG 0232' 'MEG 0233' 'MEG 0231' - 'MEG 0243' 'MEG 0242' 'MEG 0241' - 'MEG 0313' 'MEG 0312' 'MEG 0311' - 'MEG 0322' 'MEG 0323' 'MEG 0321' - 'MEG 0333' 'MEG 0332' 'MEG 0331' - 'MEG 0343' 'MEG 0342' 'MEG 0341' - 'MEG 0413' 'MEG 0412' 'MEG 0411' - 'MEG 0422' 'MEG 0423' 'MEG 0421' - 'MEG 0432' 'MEG 0433' 'MEG 0431' - 'MEG 0443' 'MEG 0442' 'MEG 0441' - 'MEG 0513' 'MEG 0512' 'MEG 0511' - 'MEG 0523' 'MEG 0522' 'MEG 0521' - 'MEG 0532' 'MEG 0533' 'MEG 0531' - 'MEG 0542' 'MEG 0543' 'MEG 0541' - 'MEG 0613' 'MEG 0612' 'MEG 0611' - 'MEG 0622' 'MEG 0623' 'MEG 0621' - 'MEG 0633' 'MEG 0632' 'MEG 0631' - 'MEG 0642' 'MEG 0643' 'MEG 0641' - 'MEG 0713' 'MEG 0712' 'MEG 0711' - 'MEG 0723' 'MEG 0722' 'MEG 0721' - 'MEG 0733' 'MEG 0732' 'MEG 0731' - 'MEG 0743' 'MEG 0742' 'MEG 0741' - 'MEG 0813' 'MEG 0812' 'MEG 0811' - 'MEG 0822' 'MEG 0823' 'MEG 0821' - 'MEG 0913' 'MEG 0912' 'MEG 0911' - 'MEG 0923' 'MEG 0922' 'MEG 0921' - 'MEG 0932' 'MEG 0933' 'MEG 0931' - 'MEG 0942' 'MEG 0943' 'MEG 0941' - 'MEG 1013' 'MEG 1012' 'MEG 1011' - 'MEG 1023' 'MEG 1022' 'MEG 1021' - 'MEG 1032' 'MEG 1033' 'MEG 1031' - 'MEG 1043' 'MEG 1042' 'MEG 1041' - 'MEG 1112' 'MEG 1113' 'MEG 1111' - 'MEG 1123' 'MEG 1122' 'MEG 1121' - 'MEG 1133' 'MEG 1132' 'MEG 1131' - 'MEG 1142' 'MEG 1143' 'MEG 1141' - 'MEG 1213' 'MEG 1212' 'MEG 1211' - 'MEG 1223' 'MEG 1222' 'MEG 1221' - 'MEG 1232' 'MEG 1233' 'MEG 1231' - 'MEG 1243' 'MEG 1242' 'MEG 1241' - 'MEG 1312' 'MEG 1313' 'MEG 1311' - 'MEG 1323' 'MEG 1322' 'MEG 1321' - 'MEG 1333' 'MEG 1332' 'MEG 1331' - 'MEG 1342' 'MEG 1343' 'MEG 1341' - 'MEG 1412' 'MEG 1413' 'MEG 1411' - 'MEG 1423' 'MEG 1422' 'MEG 1421' - 'MEG 1433' 'MEG 1432' 'MEG 1431' - 'MEG 1442' 'MEG 1443' 'MEG 1441' - 'MEG 1512' 'MEG 1513' 'MEG 1511' - 'MEG 1522' 'MEG 1523' 'MEG 1521' - 'MEG 1533' 'MEG 1532' 'MEG 1531' - 'MEG 1543' 'MEG 1542' 'MEG 1541' - 'MEG 1613' 'MEG 1612' 'MEG 1611' - 'MEG 1622' 'MEG 1623' 'MEG 1621' - 'MEG 1632' 'MEG 1633' 'MEG 1631' - 'MEG 1643' 'MEG 1642' 'MEG 1641' - 'MEG 1713' 'MEG 1712' 'MEG 1711' - 'MEG 1722' 'MEG 1723' 'MEG 1721' - 'MEG 1732' 'MEG 1733' 'MEG 1731' - 'MEG 1743' 'MEG 1742' 'MEG 1741' - 'MEG 1813' 'MEG 1812' 'MEG 1811' - 'MEG 1822' 'MEG 1823' 'MEG 1821' - 'MEG 1832' 'MEG 1833' 'MEG 1831' - 'MEG 1843' 'MEG 1842' 'MEG 1841' - 'MEG 1912' 'MEG 1913' 'MEG 1911' - 'MEG 1923' 'MEG 1922' 'MEG 1921' - 'MEG 1932' 'MEG 1933' 'MEG 1931' - 'MEG 1943' 'MEG 1942' 'MEG 1941' - 'MEG 2013' 'MEG 2012' 'MEG 2011' - 'MEG 2023' 'MEG 2022' 'MEG 2021' - 'MEG 2032' 'MEG 2033' 'MEG 2031' - 'MEG 2042' 'MEG 2043' 'MEG 2041' - 'MEG 2113' 'MEG 2112' 'MEG 2111' - 'MEG 2122' 'MEG 2123' 'MEG 2121' - 'MEG 2133' 'MEG 2132' 'MEG 2131' - 'MEG 2143' 'MEG 2142' 'MEG 2141' - 'MEG 2212' 'MEG 2213' 'MEG 2211' - 'MEG 2223' 'MEG 2222' 'MEG 2221' - 'MEG 2233' 'MEG 2232' 'MEG 2231' - 'MEG 2242' 'MEG 2243' 'MEG 2241' - 'MEG 2312' 'MEG 2313' 'MEG 2311' - 'MEG 2323' 'MEG 2322' 'MEG 2321' - 'MEG 2332' 'MEG 2333' 'MEG 2331' - 'MEG 2343' 'MEG 2342' 'MEG 2341' - 'MEG 2412' 'MEG 2413' 'MEG 2411' - 'MEG 2423' 'MEG 2422' 'MEG 2421' - 'MEG 2433' 'MEG 2432' 'MEG 2431' - 'MEG 2442' 'MEG 2443' 'MEG 2441' - 'MEG 2512' 'MEG 2513' 'MEG 2511' - 'MEG 2522' 'MEG 2523' 'MEG 2521' - 'MEG 2533' 'MEG 2532' 'MEG 2531' - 'MEG 2543' 'MEG 2542' 'MEG 2541' - 'MEG 2612' 'MEG 2613' 'MEG 2611' - 'MEG 2623' 'MEG 2622' 'MEG 2621' - 'MEG 2633' 'MEG 2632' 'MEG 2631' - 'MEG 2642' 'MEG 2643' 'MEG 2641' - }; + neuromag306 = { + 'MEG 0113' 'MEG 0112' 'MEG 0111' + 'MEG 0122' 'MEG 0123' 'MEG 0121' + 'MEG 0132' 'MEG 0133' 'MEG 0131' + 'MEG 0143' 'MEG 0142' 'MEG 0141' + 'MEG 0213' 'MEG 0212' 'MEG 0211' + 'MEG 0222' 'MEG 0223' 'MEG 0221' + 'MEG 0232' 'MEG 0233' 'MEG 0231' + 'MEG 0243' 'MEG 0242' 'MEG 0241' + 'MEG 0313' 'MEG 0312' 'MEG 0311' + 'MEG 0322' 'MEG 0323' 'MEG 0321' + 'MEG 0333' 'MEG 0332' 'MEG 0331' + 'MEG 0343' 'MEG 0342' 'MEG 0341' + 'MEG 0413' 'MEG 0412' 'MEG 0411' + 'MEG 0422' 'MEG 0423' 'MEG 0421' + 'MEG 0432' 'MEG 0433' 'MEG 0431' + 'MEG 0443' 'MEG 0442' 'MEG 0441' + 'MEG 0513' 'MEG 0512' 'MEG 0511' + 'MEG 0523' 'MEG 0522' 'MEG 0521' + 'MEG 0532' 'MEG 0533' 'MEG 0531' + 'MEG 0542' 'MEG 0543' 'MEG 0541' + 'MEG 0613' 'MEG 0612' 'MEG 0611' + 'MEG 0622' 'MEG 0623' 'MEG 0621' + 'MEG 0633' 'MEG 0632' 'MEG 0631' + 'MEG 0642' 'MEG 0643' 'MEG 0641' + 'MEG 0713' 'MEG 0712' 'MEG 0711' + 'MEG 0723' 'MEG 0722' 'MEG 0721' + 'MEG 0733' 'MEG 0732' 'MEG 0731' + 'MEG 0743' 'MEG 0742' 'MEG 0741' + 'MEG 0813' 'MEG 0812' 'MEG 0811' + 'MEG 0822' 'MEG 0823' 'MEG 0821' + 'MEG 0913' 'MEG 0912' 'MEG 0911' + 'MEG 0923' 'MEG 0922' 'MEG 0921' + 'MEG 0932' 'MEG 0933' 'MEG 0931' + 'MEG 0942' 'MEG 0943' 'MEG 0941' + 'MEG 1013' 'MEG 1012' 'MEG 1011' + 'MEG 1023' 'MEG 1022' 'MEG 1021' + 'MEG 1032' 'MEG 1033' 'MEG 1031' + 'MEG 1043' 'MEG 1042' 'MEG 1041' + 'MEG 1112' 'MEG 1113' 'MEG 1111' + 'MEG 1123' 'MEG 1122' 'MEG 1121' + 'MEG 1133' 'MEG 1132' 'MEG 1131' + 'MEG 1142' 'MEG 1143' 'MEG 1141' + 'MEG 1213' 'MEG 1212' 'MEG 1211' + 'MEG 1223' 'MEG 1222' 'MEG 1221' + 'MEG 1232' 'MEG 1233' 'MEG 1231' + 'MEG 1243' 'MEG 1242' 'MEG 1241' + 'MEG 1312' 'MEG 1313' 'MEG 1311' + 'MEG 1323' 'MEG 1322' 'MEG 1321' + 'MEG 1333' 'MEG 1332' 'MEG 1331' + 'MEG 1342' 'MEG 1343' 'MEG 1341' + 'MEG 1412' 'MEG 1413' 'MEG 1411' + 'MEG 1423' 'MEG 1422' 'MEG 1421' + 'MEG 1433' 'MEG 1432' 'MEG 1431' + 'MEG 1442' 'MEG 1443' 'MEG 1441' + 'MEG 1512' 'MEG 1513' 'MEG 1511' + 'MEG 1522' 'MEG 1523' 'MEG 1521' + 'MEG 1533' 'MEG 1532' 'MEG 1531' + 'MEG 1543' 'MEG 1542' 'MEG 1541' + 'MEG 1613' 'MEG 1612' 'MEG 1611' + 'MEG 1622' 'MEG 1623' 'MEG 1621' + 'MEG 1632' 'MEG 1633' 'MEG 1631' + 'MEG 1643' 'MEG 1642' 'MEG 1641' + 'MEG 1713' 'MEG 1712' 'MEG 1711' + 'MEG 1722' 'MEG 1723' 'MEG 1721' + 'MEG 1732' 'MEG 1733' 'MEG 1731' + 'MEG 1743' 'MEG 1742' 'MEG 1741' + 'MEG 1813' 'MEG 1812' 'MEG 1811' + 'MEG 1822' 'MEG 1823' 'MEG 1821' + 'MEG 1832' 'MEG 1833' 'MEG 1831' + 'MEG 1843' 'MEG 1842' 'MEG 1841' + 'MEG 1912' 'MEG 1913' 'MEG 1911' + 'MEG 1923' 'MEG 1922' 'MEG 1921' + 'MEG 1932' 'MEG 1933' 'MEG 1931' + 'MEG 1943' 'MEG 1942' 'MEG 1941' + 'MEG 2013' 'MEG 2012' 'MEG 2011' + 'MEG 2023' 'MEG 2022' 'MEG 2021' + 'MEG 2032' 'MEG 2033' 'MEG 2031' + 'MEG 2042' 'MEG 2043' 'MEG 2041' + 'MEG 2113' 'MEG 2112' 'MEG 2111' + 'MEG 2122' 'MEG 2123' 'MEG 2121' + 'MEG 2133' 'MEG 2132' 'MEG 2131' + 'MEG 2143' 'MEG 2142' 'MEG 2141' + 'MEG 2212' 'MEG 2213' 'MEG 2211' + 'MEG 2223' 'MEG 2222' 'MEG 2221' + 'MEG 2233' 'MEG 2232' 'MEG 2231' + 'MEG 2242' 'MEG 2243' 'MEG 2241' + 'MEG 2312' 'MEG 2313' 'MEG 2311' + 'MEG 2323' 'MEG 2322' 'MEG 2321' + 'MEG 2332' 'MEG 2333' 'MEG 2331' + 'MEG 2343' 'MEG 2342' 'MEG 2341' + 'MEG 2412' 'MEG 2413' 'MEG 2411' + 'MEG 2423' 'MEG 2422' 'MEG 2421' + 'MEG 2433' 'MEG 2432' 'MEG 2431' + 'MEG 2442' 'MEG 2443' 'MEG 2441' + 'MEG 2512' 'MEG 2513' 'MEG 2511' + 'MEG 2522' 'MEG 2523' 'MEG 2521' + 'MEG 2533' 'MEG 2532' 'MEG 2531' + 'MEG 2543' 'MEG 2542' 'MEG 2541' + 'MEG 2612' 'MEG 2613' 'MEG 2611' + 'MEG 2623' 'MEG 2622' 'MEG 2621' + 'MEG 2633' 'MEG 2632' 'MEG 2631' + 'MEG 2642' 'MEG 2643' 'MEG 2641' + }; - % this is an alternative set of labels without a space in them - neuromag306alt = { - 'MEG0113' 'MEG0112' 'MEG0111' - 'MEG0122' 'MEG0123' 'MEG0121' - 'MEG0132' 'MEG0133' 'MEG0131' - 'MEG0143' 'MEG0142' 'MEG0141' - 'MEG0213' 'MEG0212' 'MEG0211' - 'MEG0222' 'MEG0223' 'MEG0221' - 'MEG0232' 'MEG0233' 'MEG0231' - 'MEG0243' 'MEG0242' 'MEG0241' - 'MEG0313' 'MEG0312' 'MEG0311' - 'MEG0322' 'MEG0323' 'MEG0321' - 'MEG0333' 'MEG0332' 'MEG0331' - 'MEG0343' 'MEG0342' 'MEG0341' - 'MEG0413' 'MEG0412' 'MEG0411' - 'MEG0422' 'MEG0423' 'MEG0421' - 'MEG0432' 'MEG0433' 'MEG0431' - 'MEG0443' 'MEG0442' 'MEG0441' - 'MEG0513' 'MEG0512' 'MEG0511' - 'MEG0523' 'MEG0522' 'MEG0521' - 'MEG0532' 'MEG0533' 'MEG0531' - 'MEG0542' 'MEG0543' 'MEG0541' - 'MEG0613' 'MEG0612' 'MEG0611' - 'MEG0622' 'MEG0623' 'MEG0621' - 'MEG0633' 'MEG0632' 'MEG0631' - 'MEG0642' 'MEG0643' 'MEG0641' - 'MEG0713' 'MEG0712' 'MEG0711' - 'MEG0723' 'MEG0722' 'MEG0721' - 'MEG0733' 'MEG0732' 'MEG0731' - 'MEG0743' 'MEG0742' 'MEG0741' - 'MEG0813' 'MEG0812' 'MEG0811' - 'MEG0822' 'MEG0823' 'MEG0821' - 'MEG0913' 'MEG0912' 'MEG0911' - 'MEG0923' 'MEG0922' 'MEG0921' - 'MEG0932' 'MEG0933' 'MEG0931' - 'MEG0942' 'MEG0943' 'MEG0941' - 'MEG1013' 'MEG1012' 'MEG1011' - 'MEG1023' 'MEG1022' 'MEG1021' - 'MEG1032' 'MEG1033' 'MEG1031' - 'MEG1043' 'MEG1042' 'MEG1041' - 'MEG1112' 'MEG1113' 'MEG1111' - 'MEG1123' 'MEG1122' 'MEG1121' - 'MEG1133' 'MEG1132' 'MEG1131' - 'MEG1142' 'MEG1143' 'MEG1141' - 'MEG1213' 'MEG1212' 'MEG1211' - 'MEG1223' 'MEG1222' 'MEG1221' - 'MEG1232' 'MEG1233' 'MEG1231' - 'MEG1243' 'MEG1242' 'MEG1241' - 'MEG1312' 'MEG1313' 'MEG1311' - 'MEG1323' 'MEG1322' 'MEG1321' - 'MEG1333' 'MEG1332' 'MEG1331' - 'MEG1342' 'MEG1343' 'MEG1341' - 'MEG1412' 'MEG1413' 'MEG1411' - 'MEG1423' 'MEG1422' 'MEG1421' - 'MEG1433' 'MEG1432' 'MEG1431' - 'MEG1442' 'MEG1443' 'MEG1441' - 'MEG1512' 'MEG1513' 'MEG1511' - 'MEG1522' 'MEG1523' 'MEG1521' - 'MEG1533' 'MEG1532' 'MEG1531' - 'MEG1543' 'MEG1542' 'MEG1541' - 'MEG1613' 'MEG1612' 'MEG1611' - 'MEG1622' 'MEG1623' 'MEG1621' - 'MEG1632' 'MEG1633' 'MEG1631' - 'MEG1643' 'MEG1642' 'MEG1641' - 'MEG1713' 'MEG1712' 'MEG1711' - 'MEG1722' 'MEG1723' 'MEG1721' - 'MEG1732' 'MEG1733' 'MEG1731' - 'MEG1743' 'MEG1742' 'MEG1741' - 'MEG1813' 'MEG1812' 'MEG1811' - 'MEG1822' 'MEG1823' 'MEG1821' - 'MEG1832' 'MEG1833' 'MEG1831' - 'MEG1843' 'MEG1842' 'MEG1841' - 'MEG1912' 'MEG1913' 'MEG1911' - 'MEG1923' 'MEG1922' 'MEG1921' - 'MEG1932' 'MEG1933' 'MEG1931' - 'MEG1943' 'MEG1942' 'MEG1941' - 'MEG2013' 'MEG2012' 'MEG2011' - 'MEG2023' 'MEG2022' 'MEG2021' - 'MEG2032' 'MEG2033' 'MEG2031' - 'MEG2042' 'MEG2043' 'MEG2041' - 'MEG2113' 'MEG2112' 'MEG2111' - 'MEG2122' 'MEG2123' 'MEG2121' - 'MEG2133' 'MEG2132' 'MEG2131' - 'MEG2143' 'MEG2142' 'MEG2141' - 'MEG2212' 'MEG2213' 'MEG2211' - 'MEG2223' 'MEG2222' 'MEG2221' - 'MEG2233' 'MEG2232' 'MEG2231' - 'MEG2242' 'MEG2243' 'MEG2241' - 'MEG2312' 'MEG2313' 'MEG2311' - 'MEG2323' 'MEG2322' 'MEG2321' - 'MEG2332' 'MEG2333' 'MEG2331' - 'MEG2343' 'MEG2342' 'MEG2341' - 'MEG2412' 'MEG2413' 'MEG2411' - 'MEG2423' 'MEG2422' 'MEG2421' - 'MEG2433' 'MEG2432' 'MEG2431' - 'MEG2442' 'MEG2443' 'MEG2441' - 'MEG2512' 'MEG2513' 'MEG2511' - 'MEG2522' 'MEG2523' 'MEG2521' - 'MEG2533' 'MEG2532' 'MEG2531' - 'MEG2543' 'MEG2542' 'MEG2541' - 'MEG2612' 'MEG2613' 'MEG2611' - 'MEG2623' 'MEG2622' 'MEG2621' - 'MEG2633' 'MEG2632' 'MEG2631' - 'MEG2642' 'MEG2643' 'MEG2641' - }; + % this is an alternative set of labels without a space in them + neuromag306alt = { + 'MEG0113' 'MEG0112' 'MEG0111' + 'MEG0122' 'MEG0123' 'MEG0121' + 'MEG0132' 'MEG0133' 'MEG0131' + 'MEG0143' 'MEG0142' 'MEG0141' + 'MEG0213' 'MEG0212' 'MEG0211' + 'MEG0222' 'MEG0223' 'MEG0221' + 'MEG0232' 'MEG0233' 'MEG0231' + 'MEG0243' 'MEG0242' 'MEG0241' + 'MEG0313' 'MEG0312' 'MEG0311' + 'MEG0322' 'MEG0323' 'MEG0321' + 'MEG0333' 'MEG0332' 'MEG0331' + 'MEG0343' 'MEG0342' 'MEG0341' + 'MEG0413' 'MEG0412' 'MEG0411' + 'MEG0422' 'MEG0423' 'MEG0421' + 'MEG0432' 'MEG0433' 'MEG0431' + 'MEG0443' 'MEG0442' 'MEG0441' + 'MEG0513' 'MEG0512' 'MEG0511' + 'MEG0523' 'MEG0522' 'MEG0521' + 'MEG0532' 'MEG0533' 'MEG0531' + 'MEG0542' 'MEG0543' 'MEG0541' + 'MEG0613' 'MEG0612' 'MEG0611' + 'MEG0622' 'MEG0623' 'MEG0621' + 'MEG0633' 'MEG0632' 'MEG0631' + 'MEG0642' 'MEG0643' 'MEG0641' + 'MEG0713' 'MEG0712' 'MEG0711' + 'MEG0723' 'MEG0722' 'MEG0721' + 'MEG0733' 'MEG0732' 'MEG0731' + 'MEG0743' 'MEG0742' 'MEG0741' + 'MEG0813' 'MEG0812' 'MEG0811' + 'MEG0822' 'MEG0823' 'MEG0821' + 'MEG0913' 'MEG0912' 'MEG0911' + 'MEG0923' 'MEG0922' 'MEG0921' + 'MEG0932' 'MEG0933' 'MEG0931' + 'MEG0942' 'MEG0943' 'MEG0941' + 'MEG1013' 'MEG1012' 'MEG1011' + 'MEG1023' 'MEG1022' 'MEG1021' + 'MEG1032' 'MEG1033' 'MEG1031' + 'MEG1043' 'MEG1042' 'MEG1041' + 'MEG1112' 'MEG1113' 'MEG1111' + 'MEG1123' 'MEG1122' 'MEG1121' + 'MEG1133' 'MEG1132' 'MEG1131' + 'MEG1142' 'MEG1143' 'MEG1141' + 'MEG1213' 'MEG1212' 'MEG1211' + 'MEG1223' 'MEG1222' 'MEG1221' + 'MEG1232' 'MEG1233' 'MEG1231' + 'MEG1243' 'MEG1242' 'MEG1241' + 'MEG1312' 'MEG1313' 'MEG1311' + 'MEG1323' 'MEG1322' 'MEG1321' + 'MEG1333' 'MEG1332' 'MEG1331' + 'MEG1342' 'MEG1343' 'MEG1341' + 'MEG1412' 'MEG1413' 'MEG1411' + 'MEG1423' 'MEG1422' 'MEG1421' + 'MEG1433' 'MEG1432' 'MEG1431' + 'MEG1442' 'MEG1443' 'MEG1441' + 'MEG1512' 'MEG1513' 'MEG1511' + 'MEG1522' 'MEG1523' 'MEG1521' + 'MEG1533' 'MEG1532' 'MEG1531' + 'MEG1543' 'MEG1542' 'MEG1541' + 'MEG1613' 'MEG1612' 'MEG1611' + 'MEG1622' 'MEG1623' 'MEG1621' + 'MEG1632' 'MEG1633' 'MEG1631' + 'MEG1643' 'MEG1642' 'MEG1641' + 'MEG1713' 'MEG1712' 'MEG1711' + 'MEG1722' 'MEG1723' 'MEG1721' + 'MEG1732' 'MEG1733' 'MEG1731' + 'MEG1743' 'MEG1742' 'MEG1741' + 'MEG1813' 'MEG1812' 'MEG1811' + 'MEG1822' 'MEG1823' 'MEG1821' + 'MEG1832' 'MEG1833' 'MEG1831' + 'MEG1843' 'MEG1842' 'MEG1841' + 'MEG1912' 'MEG1913' 'MEG1911' + 'MEG1923' 'MEG1922' 'MEG1921' + 'MEG1932' 'MEG1933' 'MEG1931' + 'MEG1943' 'MEG1942' 'MEG1941' + 'MEG2013' 'MEG2012' 'MEG2011' + 'MEG2023' 'MEG2022' 'MEG2021' + 'MEG2032' 'MEG2033' 'MEG2031' + 'MEG2042' 'MEG2043' 'MEG2041' + 'MEG2113' 'MEG2112' 'MEG2111' + 'MEG2122' 'MEG2123' 'MEG2121' + 'MEG2133' 'MEG2132' 'MEG2131' + 'MEG2143' 'MEG2142' 'MEG2141' + 'MEG2212' 'MEG2213' 'MEG2211' + 'MEG2223' 'MEG2222' 'MEG2221' + 'MEG2233' 'MEG2232' 'MEG2231' + 'MEG2242' 'MEG2243' 'MEG2241' + 'MEG2312' 'MEG2313' 'MEG2311' + 'MEG2323' 'MEG2322' 'MEG2321' + 'MEG2332' 'MEG2333' 'MEG2331' + 'MEG2343' 'MEG2342' 'MEG2341' + 'MEG2412' 'MEG2413' 'MEG2411' + 'MEG2423' 'MEG2422' 'MEG2421' + 'MEG2433' 'MEG2432' 'MEG2431' + 'MEG2442' 'MEG2443' 'MEG2441' + 'MEG2512' 'MEG2513' 'MEG2511' + 'MEG2522' 'MEG2523' 'MEG2521' + 'MEG2533' 'MEG2532' 'MEG2531' + 'MEG2543' 'MEG2542' 'MEG2541' + 'MEG2612' 'MEG2613' 'MEG2611' + 'MEG2623' 'MEG2622' 'MEG2621' + 'MEG2633' 'MEG2632' 'MEG2631' + 'MEG2642' 'MEG2643' 'MEG2641' + }; end % if isneuromag if iseeg || isext - eeg1020 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'F7' - 'F3' - 'Fz' - 'F4' - 'F8' - 'T7' - 'C3' - 'Cz' - 'C4' - 'T8' - 'P7' - 'P3' - 'Pz' - 'P4' - 'P8' - 'O1' - 'Oz' - 'O2'}; + eeg1020 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'F7' + 'F3' + 'Fz' + 'F4' + 'F8' + 'T7' + 'C3' + 'Cz' + 'C4' + 'T8' + 'P7' + 'P3' + 'Pz' + 'P4' + 'P8' + 'O1' + 'Oz' + 'O2'}; - eeg1010 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - }; + eeg1010 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + }; - eeg1005 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - 'AFp9h' - 'AFp7h' - 'AFp5h' - 'AFp3h' - 'AFp1h' - 'AFp2h' - 'AFp4h' - 'AFp6h' - 'AFp8h' - 'AFp10h' - 'AFF9h' - 'AFF7h' - 'AFF5h' - 'AFF3h' - 'AFF1h' - 'AFF2h' - 'AFF4h' - 'AFF6h' - 'AFF8h' - 'AFF10h' - 'FFT9h' - 'FFT7h' - 'FFC5h' - 'FFC3h' - 'FFC1h' - 'FFC2h' - 'FFC4h' - 'FFC6h' - 'FFT8h' - 'FFT10h' - 'FTT9h' - 'FTT7h' - 'FCC5h' - 'FCC3h' - 'FCC1h' - 'FCC2h' - 'FCC4h' - 'FCC6h' - 'FTT8h' - 'FTT10h' - 'TTP9h' - 'TTP7h' - 'CCP5h' - 'CCP3h' - 'CCP1h' - 'CCP2h' - 'CCP4h' - 'CCP6h' - 'TTP8h' - 'TTP10h' - 'TPP9h' - 'TPP7h' - 'CPP5h' - 'CPP3h' - 'CPP1h' - 'CPP2h' - 'CPP4h' - 'CPP6h' - 'TPP8h' - 'TPP10h' - 'PPO9h' - 'PPO7h' - 'PPO5h' - 'PPO3h' - 'PPO1h' - 'PPO2h' - 'PPO4h' - 'PPO6h' - 'PPO8h' - 'PPO10h' - 'POO9h' - 'POO7h' - 'POO5h' - 'POO3h' - 'POO1h' - 'POO2h' - 'POO4h' - 'POO6h' - 'POO8h' - 'POO10h' - 'OI1h' - 'OI2h' - 'Fp1h' - 'Fp2h' - 'AF9h' - 'AF7h' - 'AF5h' - 'AF3h' - 'AF1h' - 'AF2h' - 'AF4h' - 'AF6h' - 'AF8h' - 'AF10h' - 'F9h' - 'F7h' - 'F5h' - 'F3h' - 'F1h' - 'F2h' - 'F4h' - 'F6h' - 'F8h' - 'F10h' - 'FT9h' - 'FT7h' - 'FC5h' - 'FC3h' - 'FC1h' - 'FC2h' - 'FC4h' - 'FC6h' - 'FT8h' - 'FT10h' - 'T9h' - 'T7h' - 'C5h' - 'C3h' - 'C1h' - 'C2h' - 'C4h' - 'C6h' - 'T8h' - 'T10h' - 'TP9h' - 'TP7h' - 'CP5h' - 'CP3h' - 'CP1h' - 'CP2h' - 'CP4h' - 'CP6h' - 'TP8h' - 'TP10h' - 'P9h' - 'P7h' - 'P5h' - 'P3h' - 'P1h' - 'P2h' - 'P4h' - 'P6h' - 'P8h' - 'P10h' - 'PO9h' - 'PO7h' - 'PO5h' - 'PO3h' - 'PO1h' - 'PO2h' - 'PO4h' - 'PO6h' - 'PO8h' - 'PO10h' - 'O1h' - 'O2h' - 'I1h' - 'I2h' - 'AFp9' - 'AFp7' - 'AFp5' - 'AFp3' - 'AFp1' - 'AFpz' - 'AFp2' - 'AFp4' - 'AFp6' - 'AFp8' - 'AFp10' - 'AFF9' - 'AFF7' - 'AFF5' - 'AFF3' - 'AFF1' - 'AFFz' - 'AFF2' - 'AFF4' - 'AFF6' - 'AFF8' - 'AFF10' - 'FFT9' - 'FFT7' - 'FFC5' - 'FFC3' - 'FFC1' - 'FFCz' - 'FFC2' - 'FFC4' - 'FFC6' - 'FFT8' - 'FFT10' - 'FTT9' - 'FTT7' - 'FCC5' - 'FCC3' - 'FCC1' - 'FCCz' - 'FCC2' - 'FCC4' - 'FCC6' - 'FTT8' - 'FTT10' - 'TTP9' - 'TTP7' - 'CCP5' - 'CCP3' - 'CCP1' - 'CCPz' - 'CCP2' - 'CCP4' - 'CCP6' - 'TTP8' - 'TTP10' - 'TPP9' - 'TPP7' - 'CPP5' - 'CPP3' - 'CPP1' - 'CPPz' - 'CPP2' - 'CPP4' - 'CPP6' - 'TPP8' - 'TPP10' - 'PPO9' - 'PPO7' - 'PPO5' - 'PPO3' - 'PPO1' - 'PPOz' - 'PPO2' - 'PPO4' - 'PPO6' - 'PPO8' - 'PPO10' - 'POO9' - 'POO7' - 'POO5' - 'POO3' - 'POO1' - 'POOz' - 'POO2' - 'POO4' - 'POO6' - 'POO8' - 'POO10' - 'OI1' - 'OIz' - 'OI2' - }; + eeg1005 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + 'AFp9h' + 'AFp7h' + 'AFp5h' + 'AFp3h' + 'AFp1h' + 'AFp2h' + 'AFp4h' + 'AFp6h' + 'AFp8h' + 'AFp10h' + 'AFF9h' + 'AFF7h' + 'AFF5h' + 'AFF3h' + 'AFF1h' + 'AFF2h' + 'AFF4h' + 'AFF6h' + 'AFF8h' + 'AFF10h' + 'FFT9h' + 'FFT7h' + 'FFC5h' + 'FFC3h' + 'FFC1h' + 'FFC2h' + 'FFC4h' + 'FFC6h' + 'FFT8h' + 'FFT10h' + 'FTT9h' + 'FTT7h' + 'FCC5h' + 'FCC3h' + 'FCC1h' + 'FCC2h' + 'FCC4h' + 'FCC6h' + 'FTT8h' + 'FTT10h' + 'TTP9h' + 'TTP7h' + 'CCP5h' + 'CCP3h' + 'CCP1h' + 'CCP2h' + 'CCP4h' + 'CCP6h' + 'TTP8h' + 'TTP10h' + 'TPP9h' + 'TPP7h' + 'CPP5h' + 'CPP3h' + 'CPP1h' + 'CPP2h' + 'CPP4h' + 'CPP6h' + 'TPP8h' + 'TPP10h' + 'PPO9h' + 'PPO7h' + 'PPO5h' + 'PPO3h' + 'PPO1h' + 'PPO2h' + 'PPO4h' + 'PPO6h' + 'PPO8h' + 'PPO10h' + 'POO9h' + 'POO7h' + 'POO5h' + 'POO3h' + 'POO1h' + 'POO2h' + 'POO4h' + 'POO6h' + 'POO8h' + 'POO10h' + 'OI1h' + 'OI2h' + 'Fp1h' + 'Fp2h' + 'AF9h' + 'AF7h' + 'AF5h' + 'AF3h' + 'AF1h' + 'AF2h' + 'AF4h' + 'AF6h' + 'AF8h' + 'AF10h' + 'F9h' + 'F7h' + 'F5h' + 'F3h' + 'F1h' + 'F2h' + 'F4h' + 'F6h' + 'F8h' + 'F10h' + 'FT9h' + 'FT7h' + 'FC5h' + 'FC3h' + 'FC1h' + 'FC2h' + 'FC4h' + 'FC6h' + 'FT8h' + 'FT10h' + 'T9h' + 'T7h' + 'C5h' + 'C3h' + 'C1h' + 'C2h' + 'C4h' + 'C6h' + 'T8h' + 'T10h' + 'TP9h' + 'TP7h' + 'CP5h' + 'CP3h' + 'CP1h' + 'CP2h' + 'CP4h' + 'CP6h' + 'TP8h' + 'TP10h' + 'P9h' + 'P7h' + 'P5h' + 'P3h' + 'P1h' + 'P2h' + 'P4h' + 'P6h' + 'P8h' + 'P10h' + 'PO9h' + 'PO7h' + 'PO5h' + 'PO3h' + 'PO1h' + 'PO2h' + 'PO4h' + 'PO6h' + 'PO8h' + 'PO10h' + 'O1h' + 'O2h' + 'I1h' + 'I2h' + 'AFp9' + 'AFp7' + 'AFp5' + 'AFp3' + 'AFp1' + 'AFpz' + 'AFp2' + 'AFp4' + 'AFp6' + 'AFp8' + 'AFp10' + 'AFF9' + 'AFF7' + 'AFF5' + 'AFF3' + 'AFF1' + 'AFFz' + 'AFF2' + 'AFF4' + 'AFF6' + 'AFF8' + 'AFF10' + 'FFT9' + 'FFT7' + 'FFC5' + 'FFC3' + 'FFC1' + 'FFCz' + 'FFC2' + 'FFC4' + 'FFC6' + 'FFT8' + 'FFT10' + 'FTT9' + 'FTT7' + 'FCC5' + 'FCC3' + 'FCC1' + 'FCCz' + 'FCC2' + 'FCC4' + 'FCC6' + 'FTT8' + 'FTT10' + 'TTP9' + 'TTP7' + 'CCP5' + 'CCP3' + 'CCP1' + 'CCPz' + 'CCP2' + 'CCP4' + 'CCP6' + 'TTP8' + 'TTP10' + 'TPP9' + 'TPP7' + 'CPP5' + 'CPP3' + 'CPP1' + 'CPPz' + 'CPP2' + 'CPP4' + 'CPP6' + 'TPP8' + 'TPP10' + 'PPO9' + 'PPO7' + 'PPO5' + 'PPO3' + 'PPO1' + 'PPOz' + 'PPO2' + 'PPO4' + 'PPO6' + 'PPO8' + 'PPO10' + 'POO9' + 'POO7' + 'POO5' + 'POO3' + 'POO1' + 'POOz' + 'POO2' + 'POO4' + 'POO6' + 'POO8' + 'POO10' + 'OI1' + 'OIz' + 'OI2' + }; - % Add also alternative labels that are used in some systems - ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); + % Add also alternative labels that are used in some systems + ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); - % This is to account for all variants of case in 1020 systems - ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); + % This is to account for all variants of case in 1020 systems + ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); end % if iseeg || isext if isbiosemi - biosemi128 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - }; + biosemi64 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + }; + + biosemi128 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + }; + + biosemi256 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + 'E1' + 'E2' + 'E3' + 'E4' + 'E5' + 'E6' + 'E7' + 'E8' + 'E9' + 'E10' + 'E11' + 'E12' + 'E13' + 'E14' + 'E15' + 'E16' + 'E17' + 'E18' + 'E19' + 'E20' + 'E21' + 'E22' + 'E23' + 'E24' + 'E25' + 'E26' + 'E27' + 'E28' + 'E29' + 'E30' + 'E31' + 'E32' + 'F1' + 'F2' + 'F3' + 'F4' + 'F5' + 'F6' + 'F7' + 'F8' + 'F9' + 'F10' + 'F11' + 'F12' + 'F13' + 'F14' + 'F15' + 'F16' + 'F17' + 'F18' + 'F19' + 'F20' + 'F21' + 'F22' + 'F23' + 'F24' + 'F25' + 'F26' + 'F27' + 'F28' + 'F29' + 'F30' + 'F31' + 'F32' + 'G1' + 'G2' + 'G3' + 'G4' + 'G5' + 'G6' + 'G7' + 'G8' + 'G9' + 'G10' + 'G11' + 'G12' + 'G13' + 'G14' + 'G15' + 'G16' + 'G17' + 'G18' + 'G19' + 'G20' + 'G21' + 'G22' + 'G23' + 'G24' + 'G25' + 'G26' + 'G27' + 'G28' + 'G29' + 'G30' + 'G31' + 'G32' + 'H1' + 'H2' + 'H3' + 'H4' + 'H5' + 'H6' + 'H7' + 'H8' + 'H9' + 'H10' + 'H11' + 'H12' + 'H13' + 'H14' + 'H15' + 'H16' + 'H17' + 'H18' + 'H19' + 'H20' + 'H21' + 'H22' + 'H23' + 'H24' + 'H25' + 'H26' + 'H27' + 'H28' + 'H29' + 'H30' + 'H31' + 'H32' + }; - biosemi256 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - 'E1' - 'E2' - 'E3' - 'E4' - 'E5' - 'E6' - 'E7' - 'E8' - 'E9' - 'E10' - 'E11' - 'E12' - 'E13' - 'E14' - 'E15' - 'E16' - 'E17' - 'E18' - 'E19' - 'E20' - 'E21' - 'E22' - 'E23' - 'E24' - 'E25' - 'E26' - 'E27' - 'E28' - 'E29' - 'E30' - 'E31' - 'E32' - 'F1' - 'F2' - 'F3' - 'F4' - 'F5' - 'F6' - 'F7' - 'F8' - 'F9' - 'F10' - 'F11' - 'F12' - 'F13' - 'F14' - 'F15' - 'F16' - 'F17' - 'F18' - 'F19' - 'F20' - 'F21' - 'F22' - 'F23' - 'F24' - 'F25' - 'F26' - 'F27' - 'F28' - 'F29' - 'F30' - 'F31' - 'F32' - 'G1' - 'G2' - 'G3' - 'G4' - 'G5' - 'G6' - 'G7' - 'G8' - 'G9' - 'G10' - 'G11' - 'G12' - 'G13' - 'G14' - 'G15' - 'G16' - 'G17' - 'G18' - 'G19' - 'G20' - 'G21' - 'G22' - 'G23' - 'G24' - 'G25' - 'G26' - 'G27' - 'G28' - 'G29' - 'G30' - 'G31' - 'G32' - 'H1' - 'H2' - 'H3' - 'H4' - 'H5' - 'H6' - 'H7' - 'H8' - 'H9' - 'H10' - 'H11' - 'H12' - 'H13' - 'H14' - 'H15' - 'H16' - 'H17' - 'H18' - 'H19' - 'H20' - 'H21' - 'H22' - 'H23' - 'H24' - 'H25' - 'H26' - 'H27' - 'H28' - 'H29' - 'H30' - 'H31' - 'H32' - }; end % if isbiosemi if isegi - egi256 = cell(256, 1); - for i = 1:256 - egi256{i} = sprintf('e%d', i); - end + egi256 = cell(256, 1); + for i = 1:256 + egi256{i} = sprintf('e%d', i); + end - % the others are subsets - egi32 = egi256(1:32); - egi64 = egi256(1:64); - egi128 = egi256(1:128); + % the others are subsets + egi32 = egi256(1:32); + egi64 = egi256(1:64); + egi128 = egi256(1:128); end % if isegi % search for the requested definition of channel labels if exist(type, 'var') - label = eval(type); - label = label(:); + label = eval(type); + label = label(:); else - error('the requested sensor type is not supported'); + error('the requested sensor type is not supported'); +end + +% remember the current input and output arguments, so that they can be +% reused on a subsequent call in case the same input argument is given +current_argout = {label}; +if isempty(previous_argin) + previous_argin = current_argin; + previous_argout = current_argout; end diff --git a/external/fileio/private/senstype.m b/external/fileio/private/senstype.m index a00eaba..df3a355 100644 --- a/external/fileio/private/senstype.m +++ b/external/fileio/private/senstype.m @@ -12,6 +12,7 @@ % The output type can be any of the following % 'electrode' % 'magnetometer' +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -58,6 +59,21 @@ % Copyright (C) 2007-2008, Robert Oostenveld % % $Log: senstype.m,v $ +% Revision 1.19 2009/07/29 08:04:38 roboos +% cleaned up the code, no functional change +% +% Revision 1.18 2009/07/28 11:16:23 roboos +% removed keyboard statement, thanks to Jurrian +% +% Revision 1.17 2009/07/28 10:17:41 roboos +% make distinction between only label, label+pnt and label+pnt+ori +% +% Revision 1.16 2009/07/27 16:04:51 roboos +% improved distinction between eeg and meg, fixes problem with biosemi-eeg being detected as "ctf" due to reference channel match +% +% Revision 1.15 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.14 2009/05/07 13:34:09 roboos % added ctf64 % @@ -138,14 +154,20 @@ % preferably the structure specifies its own type type = sens.type; +elseif issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') + % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex + type = 'plexon'; + else % start with unknown, then try to determine the proper type by looking at the labels type = 'unknown'; - if isfield(sens, 'label') + if isfield(sens, 'label') && isfield(sens, 'pnt') && isfield(sens, 'ori') % probably this is MEG, determine the type of magnetometer/gradiometer system % note that the order here is important: first check whether it matches a 275 channel system, then a 151 channel system, since the 151 channels are a subset of the 275 - if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) || (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels type = 'ctf275'; elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) type = 'ctf151'; @@ -177,12 +199,18 @@ type = 'ctf'; % it might be 151 or 275 channels elseif isfield(sens, 'pnt') && isfield(sens, 'ori') && numel(sens.label)==numel(sens.pnt) type = 'magnetometer'; - elseif isfield(sens, 'pnt') && isfield(sens, 'ori') + else type = 'meg'; - elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + end + + elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % probably this is EEG + if (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) type = 'biosemi256'; elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) type = 'egi256'; elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) @@ -193,26 +221,72 @@ type = 'egi32'; elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing type = 'ext1020'; - elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') % looks like EEG + else type = 'electrode'; end - end + elseif isfield(sens, 'label') && ~isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % look only at the channel labels + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) + type = 'ctf151'; + elseif (mean(ismember(senslabel('ctf64'), sens.label)) > 0.8) + type = 'ctf64'; + elseif (mean(ismember(senslabel('ctf275_planar'), sens.label)) > 0.8) + type = 'ctf275_planar'; + elseif (mean(ismember(senslabel('ctf151_planar'), sens.label)) > 0.8) + type = 'ctf151_planar'; + elseif (mean(ismember(senslabel('bti248'), sens.label)) > 0.8) + type = 'bti248'; + elseif (mean(ismember(senslabel('bti148'), sens.label)) > 0.8) + type = 'bti148'; + elseif (mean(ismember(senslabel('bti248_planar'), sens.label)) > 0.8) + type = 'bti248_planar'; + elseif (mean(ismember(senslabel('bti148_planar'), sens.label)) > 0.8) + type = 'bti148_planar'; + elseif (mean(ismember(senslabel('neuromag306'), sens.label)) > 0.8) + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag306alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag122'), sens.label)) > 0.8) + type = 'neuromag122'; + elseif (mean(ismember(senslabel('neuromag122alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag122'; + elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + type = 'biosemi256'; + elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) + type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; + elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) + type = 'egi256'; + elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) + type = 'egi128'; + elseif (mean(ismember(senslabel('egi64'), sens.label)) > 0.8) + type = 'egi64'; + elseif (mean(ismember(senslabel('egi32'), sens.label)) > 0.8) + type = 'egi32'; + elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing + type = 'ext1020'; + elseif any(ismember(senslabel('btiref'), sens.label)) + type = 'bti'; % it might be 148 or 248 channels + elseif any(ismember(senslabel('ctfref'), sens.label)) + type = 'ctf'; % it might be 151 or 275 channels + end + + end % look at label, ori and/or pnt end % if isfield(sens, 'type') -% use an alternative approach if it is still unknown -if strcmp(type, 'unknown') && issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') - % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex - type = 'plexon'; -end - if ~isempty(desired) % return a boolean flag switch desired case 'eeg' - type = any(strcmp(type, {'eeg' 'electrode' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); + type = any(strcmp(type, {'eeg' 'electrode' 'biosemi64' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); case 'biosemi' - type = any(strcmp(type, {'biosemi128' 'biosemi256'})); + type = any(strcmp(type, {'biosemi64' 'biosemi128' 'biosemi256'})); case 'egi' type = any(strcmp(type, {'egi64' 'egi128' 'egi256'})); case 'meg' @@ -233,8 +307,8 @@ type = any(strcmp(type, {'neuromag122' 'neuromag306' 'ctf151_planar' 'ctf275_planar' 'bti148_planar' 'bti248_planar' 'yokogawa160_planar'})); otherwise type = any(strcmp(type, desired)); - end -end + end % switch desired +end % detemine the correspondence to the desired type % remember the current input and output arguments, so that they can be % reused on a subsequent call in case the same input argument is given @@ -244,4 +318,4 @@ previous_argout = current_argout; end -return % voltype main() +return % senstype main() diff --git a/external/fileio/private/write_data.m b/external/fileio/private/write_data.m index abbaf7e..7b2f15b 100644 --- a/external/fileio/private/write_data.m +++ b/external/fileio/private/write_data.m @@ -24,12 +24,16 @@ function write_data(filename, dat, varargin) % fcdc_buffer % plexon_nex % neuralynx_ncs +% neuralynx_sdma % % See also READ_HEADER, READ_DATA, READ_EVEN, WRITE_EVENT % Copyright (C) 2007-2008, Robert Oostenveld % % $Log: write_data.m,v $ +% Revision 1.23 2009/06/17 10:15:43 roboos +% added support for neuralynx_sdma, only for 32 bit integer data +% % Revision 1.22 2009/05/19 18:29:48 roboos % give instructive error if the fieldtrip buffer mex file is not on the path % @@ -126,7 +130,7 @@ function write_data(filename, dat, varargin) case 'disp' % display it on screen, this is only for debugging disp('new data arived'); - + case 'fcdc_global' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % store it in a global variable, this is only for debugging @@ -139,21 +143,21 @@ function write_data(filename, dat, varargin) else data_queue = cat(2, data_queue, dat); end - + case 'fcdc_buffer' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % network transparent buffer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - + if ~isempty(chanindx) % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels hdr.label = hdr.label(chanindx); hdr.nChans = length(chanindx); end - + [host, port] = filetype_check_uri(filename); - + type = { 'char' 'uint8' @@ -167,7 +171,7 @@ function write_data(filename, dat, varargin) 'single' 'double' }; - + wordsize = { 1 % 'char' 1 % 'uint8' @@ -181,7 +185,7 @@ function write_data(filename, dat, varargin) 4 % 'single' 8 % 'double' }; - + % this should only be done the first time if ~append && ~isempty(hdr) % reformat the header into a buffer-compatible format @@ -190,25 +194,25 @@ function write_data(filename, dat, varargin) packet.nsamples = 0; packet.nevents = 0; packet.data_type = find(strcmp(type, class(dat))) - 1; % zero-offset - + % try to put_hdr and initialize if necessary try % try writing the packet buffer('put_hdr', packet, host, port); - + catch if ~isempty(strfind(lasterr, 'Buffer size N must be an integer-valued scalar double.')) % this happens if the MATLAB75/toolbox/signal/signal/buffer % function is used instead of the fieldtrip buffer error('the FieldTrip buffer mex file was not found on your path, it should be in fieldtrip/fileio/private'); - + elseif ~isempty(strfind(lasterr, 'failed to create socket')) && (strcmp(host, 'localhost') || strcmp(host, '127.0.0.1')) - + % start a local instance of the TCP server warning('starting fieldtrip buffer on %s:%d', host, port); buffer('tcpserver', 'init', host, port); pause(1); - + % rewrite the packet until success success = false; while ~success @@ -222,11 +226,11 @@ function write_data(filename, dat, varargin) end end end % if strfind... - + end % try - + end % writing header - + if ~isempty(dat) max_nsamples = 32556; if size(dat,2)>max_nsamples @@ -257,7 +261,7 @@ function write_data(filename, dat, varargin) buffer('put_dat', packet, host, port); end % if data larger than chuncksize end - + case 'brainvision_eeg' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % combination of *.eeg and *.vhdr file @@ -265,7 +269,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -277,7 +281,7 @@ function write_data(filename, dat, varargin) % hdr.nChans % hdr.Fs write_brainvision_eeg(filename, hdr, dat); - + case 'fcdc_matbin' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % multiplexed data in a *.bin file (ieee-le, 64 bit floating point values), @@ -286,7 +290,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + [path, file, ext] = fileparts(filename); headerfile = fullfile(path, [file '.mat']); datafile = fullfile(path, [file '.bin']); @@ -302,7 +306,7 @@ function write_data(filename, dat, varargin) [fid,message] = fopen(datafile,'wb','ieee-le'); fwrite(fid, dat, 'double'); fclose(fid); - + case 'fcdc_mysql' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % write to a MySQL server listening somewhere else on the network @@ -329,7 +333,7 @@ function write_data(filename, dat, varargin) end db_insert('fieldtrip.header', s); end - + elseif isempty(hdr) && ~isempty(dat) dim = size(dat); if numel(dim)==2 @@ -356,11 +360,11 @@ function write_data(filename, dat, varargin) db_insert('fieldtrip.data', s); end end - + else error('you should specify either the header or the data when writing to a MySQL database'); end - + case 'matlab' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % plain matlab file @@ -385,7 +389,104 @@ function write_data(filename, dat, varargin) % file does not yet exist, which is not a problem end save(filename, 'dat', 'hdr'); - + + case 'neuralynx_sdma' + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % The first version of this file format contained in the first 8 bytes the + % channel label as string. Subsequently it contained 32 bit integer values. + % + % The second version of this file format starts with 8 bytes describing (as + % a space-padded string) the data type. The channel label is contained in + % the filename as dataset.chanlabel.bin. + % + % The third version of this file format starts with 7 bytes describing (as + % a zero-padded string) the data type, followed by the 8th byte which + % describes the downscaling for the 8 and 16 bit integer representations. + % The downscaling itself is represented as uint8 and should be interpreted as + % the number of bits to shift. The channel label is contained in the + % filename as dataset.chanlabel.bin. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + statuschannel = { + 'stx' + 'pid' + 'siz' + 'tsh' + 'tsl' + 'cpu' + 'ttl' + 'x01' + 'x02' + 'x03' + 'x04' + 'x05' + 'x06' + 'x07' + 'x08' + 'x09' + 'x10' + 'crc' + }; + + dirname = filename; + clear filename + [path, file] = fileparts(dirname); + for i=1:hdr.nChans + downscale(i) = 0; + if ~isempty(strmatch(hdr.label{i}, statuschannel)) + format{i} = 'uint32'; + else + format{i} = 'int32'; + end + filename{i} = fullfile(dirname, [file '.' hdr.label{i} '.bin']); + end + + if ~isdir(dirname) + mkdir(dirname); + end + + % open and write to the output files, one for each selected channel + fid = zeros(hdr.nChans,1); + for j=1:hdr.nChans + + if append==false + fid(j) = fopen(filename{j}, 'wb', 'ieee-le'); % open the file + magic = format{j}; % this used to be the channel name + magic((end+1):8) = 0; % pad with zeros + magic(8) = downscale(j); % number of bits to shift + fwrite(fid(j), magic(1:8)); % write the 8-byte file header + else + fid(j) = fopen(filename{j}, 'ab', 'ieee-le'); % open the file for appending + end % if append + + % convert the data into the correct class + buf = dat(j,:); + if ~strcmp(class(buf), format{j}) + switch format{j} + case 'int16' + buf = int16(buf); + case 'int32' + buf = int32(buf); + case 'single' + buf = single(buf); + case 'double' + buf = double(buf); + case 'uint32' + buf = uint32(buf); + otherwise + error('unsupported format conversion'); + end + end + + % apply the scaling, this corresponds to bit shifting + buf = buf ./ (2^downscale(j)); + + % write the segment of data to the output file + fwrite(fid(j), buf, format{j}, 'ieee-le'); + + fclose(fid(j)); + end % for each channel + case 'riff_wave' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This writes data Y to a Windows WAVE file specified by the file name @@ -396,7 +497,7 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -407,7 +508,7 @@ function write_data(filename, dat, varargin) error('this format only supports single channel continuous data'); end wavwrite(dat, hdr.Fs, nbits, filename); - + case 'plexon_nex' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % single or mulitple channel Plexon NEX file @@ -415,8 +516,8 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - - [path, file, ext] = fileparts(filename); + + [path, file] = fileparts(filename); filename = fullfile(path, [file, '.nex']); if nchans~=1 error('only supported for single-channel data'); @@ -435,15 +536,15 @@ function write_data(filename, dat, varargin) end nex.var.indx = 0; nex.var.dat = dat; - + write_plexon_nex(filename, nex); - + if 0 % the following code snippet can be used for testing nex2 = []; [nex2.var, nex2.hdr] = read_plexon_nex(filename, 'channel', 1); end - + case 'neuralynx_ncs' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % single channel Neuralynx NCS file @@ -451,14 +552,14 @@ function write_data(filename, dat, varargin) if append error('appending data is not yet supported for this data format'); end - + if nchans>1 error('only supported for single-channel data'); end - + [path, file, ext] = fileparts(filename); filename = fullfile(path, [file, '.ncs']); - + if nchans~=hdr.nChans && length(chanindx)==nchans % assume that the header corresponds to the original multichannel % file and that the data represents a subset of channels @@ -472,35 +573,35 @@ function write_data(filename, dat, varargin) else error('cannot determine channel label'); end - + FSAMPLE = hdr.Fs; RECORDNSMP = 512; RECORDSIZE = 1044; - + % cut the downsampled LFP data into record-size pieces nrecords = ceil(nsamples/RECORDNSMP); fprintf('construct ncs with %d records\n', nrecords); - + % construct a ncs structure with all header details and the data in it ncs = []; ncs.NumValidSamp = ones(1,nrecords) * RECORDNSMP; % except for the last block ncs.ChanNumber = ones(1,nrecords) * ADCHANNEL; ncs.SampFreq = ones(1,nrecords) * FSAMPLE; ncs.TimeStamp = zeros(1,nrecords,'uint64'); - + if rem(nsamples, RECORDNSMP)>0 % the data length is not an integer number of records, pad the last record with zeros dat = cat(2, dat, zeros(nchans, nrecords*RECORDNSMP-nsamples)); ncs.NumValidSamp(end) = rem(nsamples, RECORDNSMP); end - + ncs.dat = reshape(dat, RECORDNSMP, nrecords); - + for i=1:nrecords % timestamps should be 64 bit unsigned integers ncs.TimeStamp(i) = uint64(hdr.FirstTimeStamp) + uint64((i-1)*RECORDNSMP*hdr.TimeStampPerSample); end - + % add the elements that will go into the ascii header ncs.hdr.CheetahRev = '4.23.0'; ncs.hdr.NLX_Base_Class_Type = 'CscAcqEnt'; @@ -508,16 +609,16 @@ function write_data(filename, dat, varargin) ncs.hdr.RecordSize = RECORDSIZE; ncs.hdr.ADChannel = ADCHANNEL; ncs.hdr.SamplingFrequency = FSAMPLE; - + % write it to a file fprintf('writing to %s\n', filename); write_neuralynx_ncs(filename, ncs); - + if 0 % the following code snippet can be used for testing ncs2 = read_neuralynx_ncs(filename, 1, inf); end - + otherwise error('unsupported data format'); end % switch dataformat diff --git a/external/fileio/private/write_plexon_nex.m b/external/fileio/private/write_plexon_nex.m new file mode 100644 index 0000000..d0bd72b --- /dev/null +++ b/external/fileio/private/write_plexon_nex.m @@ -0,0 +1,225 @@ +function write_plexon_nex(filename, nex) + +% WRITE_PLEXON_NEX writes a Plexon *.nex file, which is a file +% containing action-potential (spike) timestamps and waveforms (spike +% channels), event timestamps (event channels), and continuous variable +% data (continuous A/D channels). +% +% Use as +% write_plexon_nex(filename, nex); +% +% The data structure should contain +% nex.hdr.FileHeader.Frequency = TimeStampFreq +% nex.hdr.VarHeader.Type = type, 5 for continuous +% nex.hdr.VarHeader.Name = label, padded to length 64 +% nex.hdr.VarHeader.WFrequency = sampling rate of continuous channel +% nex.var.dat = data +% nex.var.ts = timestamps +% +% See also READ_PLEXON_NEX, READ_PLEXON_PLX, READ_PLEXON_DDT + +% Copyright (C) 2007, Robert Oostenveld +% +% $Log: write_plexon_nex.m,v $ +% Revision 1.1 2009/01/14 09:24:45 roboos +% moved even more files from fileio to fileio/privtae, see previous log entry +% +% Revision 1.7 2009/01/08 13:03:09 roboos +% fixed bug in scaling of data, causing it to be clipped (thanks to Conrado) +% fixed bug in seperate scaling of data, the old code was not incorrect, but suboptimal +% +% Revision 1.6 2008/12/15 14:48:22 roboos +% read and write the data in uV/microvolt instead of in mV/milivolt +% +% Revision 1.5 2008/02/04 14:59:00 roboos +% do not rescale the input data if it is int16 already +% +% Revision 1.4 2007/10/08 13:00:24 roboos +% fixed small bug in including cvs identifier as comment in file header +% +% Revision 1.3 2007/03/21 13:01:37 roboos +% reimplemented the calibration and conversion into int16 values +% fixed a bug in the padding of the channel name to 64 chars +% +% Revision 1.2 2007/03/19 17:10:38 roboos +% implemented writing spike waveform data +% +% Revision 1.1 2007/02/21 09:50:51 roboos +% initial implementation +% + +% get the optional arguments, these are all required +% FirstTimeStamp = keyval('FirstTimeStamp', varargin); +% TimeStampFreq = keyval('TimeStampFreq', varargin); + +hdr = nex.hdr; + +UVtoMV = 1/1000; + +switch hdr.VarHeader.Type + case 5 + dat = nex.var.dat; % this is in microVolt + buf = zeros(size(dat), 'int16'); + nchans = size(dat,1); + nsamples = size(dat,2); + nwaves = 1; % only one continuous datasegment is supported + if length(hdr.VarHeader)~=nchans + error('incorrect number of channels'); + end + % convert the data from floating point into int16 values + % each channel gets its own optimal calibration factor + for varlop=1:nchans + ADMaxValue = double(intmax('int16')); + ADMaxUV = max(abs(dat(varlop,:))); % this is in microVolt + ADMaxMV = ADMaxUV/1000; % this is in miliVolt + if isa(dat, 'int16') + % do not rescale data that is already 16 bit + MVtoAD = 1; + elseif ADMaxMV==0 + % do not rescale the data if the data is zero + MVtoAD = 1; + elseif ADMaxMV>0 + % rescale the data so that it fits into the 16 bits with as little loss as possible + MVtoAD = ADMaxValue / ADMaxMV; + end + buf(varlop,:) = int16(double(dat) * UVtoMV * MVtoAD); + % remember the calibration value, it should be stored in the variable header + ADtoMV(varlop) = 1/MVtoAD; + end + dat = buf; + clear buf; + + case 3 + dat = nex.var.dat; % this is in microVolt + nchans = 1; % only one channel is supported + nsamples = size(dat,1); + nwaves = size(dat,2); + if length(hdr.VarHeader)~=nchans + error('incorrect number of channels'); + end + % convert the data from floating point into int16 values + ADMaxValue = double(intmax('int16')); + ADMaxUV = max(abs(dat(:))); % this is in microVolt + ADMaxMV = ADMaxUV/1000; % this is in miliVolt + if isa(dat, 'int16') + % do not rescale data that is already 16 bit + MVtoAD = 1; + elseif ADMaxMV==0 + % do not rescale the data if the data is zero + MVtoAD = 1; + elseif ADMaxMV>0 + % rescale the data so that it fits into the 16 bits with as little loss as possible + MVtoAD = ADMaxValue / ADMaxMV; + end + dat = int16(double(dat) * UVtoMV * MVtoAD); + % remember the calibration value, it should be stored in the variable header + ADtoMV = 1/MVtoAD; + + otherwise + error('unsupported data type') +end % switch type + +% determine the first and last timestamp +ts = nex.var.ts; +ts_beg = min(ts); +ts_end = 0; % FIXME + +fid = fopen(filename, 'wb', 'ieee-le'); + +% write the file header +write_NexFileHeader; + +% write the variable headers +for varlop=1:nchans + write_NexVarHeader; +end + +% write the variable data +for varlop=1:nchans + write_NexVarData; +end + +fclose(fid); +return + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% nested function for writing the details +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function write_NexFileHeader + % prepare the two char buffers + buf1 = padstr('$Id: write_plexon_nex.m,v 1.1 2009/01/14 09:24:45 roboos Exp $', 256); + buf2 = char(zeros(1, 256)); + % write the stuff to the file + fwrite(fid, 'NEX1' , 'char'); % NexFileHeader = string NEX1 + fwrite(fid, 100 , 'int32'); % Version = version + fwrite(fid, buf1 , 'char'); % Comment = comment, 256 bytes + fwrite(fid, hdr.FileHeader.Frequency, 'double'); % Frequency = timestamped freq. - tics per second + fwrite(fid, ts_beg, 'int32'); % Beg = usually 0, minimum of all the timestamps in the file + fwrite(fid, ts_end, 'int32'); % End = maximum timestamp + 1 + fwrite(fid, nchans, 'int32'); % NumVars = number of variables in the first batch + fwrite(fid, 0 , 'int32'); % NextFileHeader = position of the next file header in the file, not implemented yet + fwrite(fid, buf2 , 'char'); % Padding = future expansion + end % of the nested function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% nested function for writing the details +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function write_NexVarHeader + filheadersize = 544; + varheadersize = 208; + offset = filheadersize + nchans*varheadersize + (varlop-1)*nsamples; + calib = ADtoMV(varlop); + % prepare the two char buffers + buf1 = padstr(hdr.VarHeader(varlop).Name, 64); + buf2 = char(zeros(1, 68)); + % write the continuous variable to the file + fwrite(fid, hdr.VarHeader.Type, 'int32'); % Type = 0 - neuron, 1 event, 2- interval, 3 - waveform, 4 - pop. vector, 5 - continuously recorded + fwrite(fid, 100, 'int32'); % Version = 100 + fwrite(fid, buf1, 'char'); % Name = variable name, 1x64 char + fwrite(fid, offset, 'int32'); % DataOffset = where the data array for this variable is located in the file + fwrite(fid, nwaves, 'int32'); % Count = number of events, intervals, waveforms or weights + fwrite(fid, 0, 'int32'); % WireNumber = neuron only, not used now + fwrite(fid, 0, 'int32'); % UnitNumber = neuron only, not used now + fwrite(fid, 0, 'int32'); % Gain = neuron only, not used now + fwrite(fid, 0, 'int32'); % Filter = neuron only, not used now + fwrite(fid, 0, 'double'); % XPos = neuron only, electrode position in (0,100) range, used in 3D + fwrite(fid, 0, 'double'); % YPos = neuron only, electrode position in (0,100) range, used in 3D + fwrite(fid, hdr.VarHeader.WFrequency, 'double'); % WFrequency = waveform and continuous vars only, w/f sampling frequency + fwrite(fid, calib, 'double'); % ADtoMV = waveform continuous vars only, coeff. to convert from A/D values to Millivolts + fwrite(fid, nsamples, 'int32'); % NPointsWave = waveform only, number of points in each wave + fwrite(fid, 0, 'int32'); % NMarkers = how many values are associated with each marker + fwrite(fid, 0, 'int32'); % MarkerLength = how many characters are in each marker value + fwrite(fid, buf2, 'char'); % Padding, 1x68 char + end % of the nested function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% nested function for writing the details +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + function write_NexVarData + switch hdr.VarHeader.Type + case 5 + % this code only supports one continuous segment + index = 0; + fwrite(fid, ts , 'int32'); % timestamps, one for each continuous segment + fwrite(fid, index , 'int32'); % where to cut the segments, zero offset + fwrite(fid, dat(varlop,:) , 'int16'); % data + case 3 + fwrite(fid, ts , 'int32'); % timestamps, one for each spike + fwrite(fid, dat , 'int16'); % waveforms, one for each spike + otherwise + error('unsupported data type'); + end % switch + end % of the nested function + +end % of the primary function + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% subfunction for zero padding a char array to fixed length +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function str = padstr(str, num); +if length(str)>num + str = str(1:num); +else + str((end+1):num) = 0; +end +end % of the padstr subfunction diff --git a/external/forwinv/private/apply_montage.m b/external/forwinv/private/apply_montage.m index e7a0f07..ccf0716 100644 --- a/external/forwinv/private/apply_montage.m +++ b/external/forwinv/private/apply_montage.m @@ -7,7 +7,11 @@ % forward computation and source reconstruction of the data. % % Use as -% [sens] = apply_montage(sens, montage, ...) +% [sens] = apply_montage(sens, montage, ...) +% [data] = apply_montage(data, montage, ...) +% [montage] = apply_montage(montage1, montage2, ...) +% where the input is a FieldTrip sensor definition as obtained from READ_SENS +% or a FieldTrip raw data structure as obtained from PREPROCESSING. % % A montage is specified as a structure with the fields % montage.tra = MxN matrix @@ -18,11 +22,35 @@ % 'keepunused' string, 'yes' or 'no' (default = 'no') % 'inverse' string, 'yes' or 'no' (default = 'no') % +% If the first input is a montage, then the second input montage will be +% applied to the first. In effect the resulting montage will first do +% montage1, then montage2. +% % See also READ_SENS, TRANSFORM_SENS % Copyright (C) 2008, Robert Oostenveld % % $Log: apply_montage.m,v $ +% Revision 1.19 2009/07/02 16:14:15 roboos +% allow to apply one montage on another one +% +% Revision 1.18 2009/07/02 09:18:41 vlalit +% Fixing a bug in building an inverse montage (confusion between 'montage' and 'tra') +% +% Revision 1.17 2009/07/01 09:21:37 roboos +% changed handling of rank-reduced montage for inversion, give warning +% removed the modification by vladimir for the sequential application of montages +% +% Revision 1.16 2009/06/27 13:24:54 vlalit +% Additional fixes to make custom balancing work. +% +% Revision 1.15 2009/06/26 17:39:17 vlalit +% Added the possiblity to handle custom montages applied to MEG sensors (for removing +% spatial confounds). Hopefully there won't be major side effects. +% +% Revision 1.14 2009/06/17 10:13:05 roboos +% improved documentation +% % Revision 1.13 2009/03/26 11:07:40 roboos % start with an explicit check on the channel number % @@ -70,6 +98,12 @@ keepunused = keyval('keepunused', varargin{:}); if isempty(keepunused), keepunused = 'no'; end inverse = keyval('inverse', varargin{:}); if isempty(inverse), inverse = 'no'; end +% check the consistency of the input sensor array or data +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % the input data structure is also a montage, i.e. apply the montages sequentially + sens.label = sens.labelnew; +end + % check the consistency of the montage if size(montage.tra,1)~=length(montage.labelnew) error('the number of channels in the montage is inconsistent'); @@ -79,9 +113,15 @@ if strcmp(inverse, 'yes') % apply the inverse montage, i.e. undo a previously applied montage - tmp.labelnew = montage.labelorg; - tmp.labelorg = montage.labelnew; - tmp.tra = inv(montage.tra); + tmp.labelnew = montage.labelorg; % swap around + tmp.labelorg = montage.labelnew; % swap around + tmp.tra = full(montage.tra); + if rank(tmp.tra) < length(tmp.tra) + warning('the linear projection for the montage is not full-rank, the resulting data will have reduced dimensionality'); + tmp.tra = pinv(tmp.tra); + else + tmp.tra = inv(tmp.tra); + end montage = tmp; end @@ -150,10 +190,17 @@ montage.tra = sparse(montage.tra(:,selmont)); montage.labelorg = montage.labelorg(selmont); -if isfield(sens, 'tra') +if isfield(sens, 'labelorg') && isfield(sens, 'labelnew') + % apply the montage on top of the other montage + sens = rmfield(sens, 'label'); + sens.tra = montage.tra * sens.tra; + sens.labelnew = montage.labelnew; + +elseif isfield(sens, 'tra') % apply the montage to the sensor array sens.tra = montage.tra * sens.tra; sens.label = montage.labelnew; + elseif isfield(sens, 'trial') % apply the montage to the data that was preprocessed using fieldtrip Ntrials = numel(sens.trial); @@ -177,5 +224,3 @@ function y = indx2logical(x, n) y = false(1,n); y(x) = true; - - diff --git a/external/forwinv/private/beamformer_dics.m b/external/forwinv/private/beamformer_dics.m index fe84b22..3cf9393 100644 --- a/external/forwinv/private/beamformer_dics.m +++ b/external/forwinv/private/beamformer_dics.m @@ -47,6 +47,9 @@ % Copyright (C) 2003-2008, Robert Oostenveld % % $Log: beamformer_dics.m,v $ +% Revision 1.15 2009/06/17 13:40:37 roboos +% small change in the order of the code for subspace projection +% % Revision 1.14 2009/05/14 19:25:12 roboos % added a FIXME comment % @@ -263,6 +266,13 @@ % compute the leadfield lf = compute_leadfield(dip.pos(i,:), grad, vol, 'reducerank', reducerank, 'normalize', normalize, 'normalizeparam', normalizeparam); end + if isfield(dip, 'subspace') + % do subspace projection of the forward model + lf = dip.subspace{i} * lf; + % the cross-spectral density becomes voxel dependent due to the projection + Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; + invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); + end if fixedori % compute the leadfield for the optimal dipole orientation % subsequently the leadfield for only that dipole orientation will be used for the final filter computation @@ -272,13 +282,6 @@ lf = lf * eta; dipout.ori{i} = eta; end - if isfield(dip, 'subspace') - % do subspace projection of the forward model - lf = dip.subspace{i} * lf; - % the cross-spectral density becomes voxel dependent due to the projection - Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; - invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); - end if isfield(dip, 'filter') % use the provided filter filt = dip.filter{i}; @@ -327,6 +330,13 @@ % compute the leadfield lf = compute_leadfield(dip.pos(i,:), grad, vol, 'reducerank', reducerank, 'normalize', normalize); end + if isfield(dip, 'subspace') + % do subspace projection of the forward model + lf = dip.subspace{i} * lf; + % the cross-spectral density becomes voxel dependent due to the projection + Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; + invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); + end if fixedori % compute the leadfield for the optimal dipole orientation % subsequently the leadfield for only that dipole orientation will be used for the final filter computation @@ -336,14 +346,6 @@ lf = lf * eta; dipout.ori{i} = eta; end - if isfield(dip, 'subspace') - % do subspace projection of the forward model - lf = dip.subspace{i} * lf; - % the cross-spectral density becomes voxel dependent due to the projection - Cr = dip.subspace{i} * Cr_pre_subspace; - Cf = dip.subspace{i} * Cf_pre_subspace * dip.subspace{i}'; - invCf = pinv(dip.subspace{i} * (Cf_pre_subspace + lambda * eye(size(Cf))) * dip.subspace{i}'); - end if isfield(dip, 'filter') % use the provided filter filt = dip.filter{i}; @@ -358,6 +360,7 @@ end csd = filt*Cr; % Gross eqn. 6 if powlambda1 + % FIXME this should use the dipole orientation with maximum power coh = lambda1(csd)^2 / (pow * Pr); % Gross eqn. 9 elseif powtrace coh = norm(csd)^2 / (pow * Pr); @@ -504,7 +507,7 @@ % standard Matlab function, except that the default tolerance is twice as % high. % Copyright 1984-2004 The MathWorks, Inc. -% $Revision: 1.14 $ $Date: 2009/05/14 19:25:12 $ +% $Revision: 1.15 $ $Date: 2009/06/17 13:40:37 $ % default tolerance increased by factor 2 (Robert Oostenveld, 7 Feb 2004) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function X = pinv(A,varargin) diff --git a/external/forwinv/private/dipole_fit.m b/external/forwinv/private/dipole_fit.m index e68a5a5..04137f1 100644 --- a/external/forwinv/private/dipole_fit.m +++ b/external/forwinv/private/dipole_fit.m @@ -28,6 +28,9 @@ % Copyright (C) 2003-2008, Robert Oostenveld % % $Log: dipole_fit.m,v $ +% Revision 1.15 2009/07/02 15:38:06 roboos +% use fixdipole for consistent dipole structure representation +% % Revision 1.14 2009/03/13 07:24:52 roboos % changed handling of optimization function (fminunc/fminsearch), now uses hastoolbox which is also able to check the availablity of a license for the optimimization toolbox % @@ -169,38 +172,15 @@ dat = avgref(dat); end -% check the input dipole position specification, should be Nx3 -[m, n] = size(dip.pos); -if n==3 - % this is ok -elseif m==3 - % it is possible to translate it into a Nx3 unambiguously - warning('input dipole positions should be specified as Nx3 matrix'); - dip.pos = dip.pos'; -else - error('input dipole positions should be specified as Nx3 matrix'); -end - -if isfield(dip, 'mom') - % check the input dipole moment specification, should be 3xN - [m, n] = size(dip.mom); - if m==3 - % this is ok - elseif n==3 - % it is possible to translate it into a 3xN unambiguously - warning('input dipole moments should be specified as 3xN matrix'); - dip.mom = dip.mom'; - else - error('input dipole moments should be specified as 3xN matrix'); - end -end +% ensure correct dipole position and moment specification +dip = fixdipole(dip); % reformat the position parameters in case of multiple dipoles, this % should result in the matrix changing from [x1 y1 z1; x2 y2 z2] to % [x1 y1 z1 x2 y2 z2] for the constraints to work -param = dip.pos'; -param = param(:)'; numdip = size(dip.pos, 1); +param = dip.pos'; +param = param(:)'; % add the orientation to the nonlinear parameters if isfield(constr, 'fixedori') && constr.fixedori @@ -271,9 +251,12 @@ dipout.mom = ori; % dipole orientation as vector dipout.ampl = mom; % dipole strength else - dipout.mom = mom; % dipole moment, which represents both the orientation and strength as vector + dipout.mom = mom; % dipole moment as vector or matrix, which represents both the orientation and strength as vector end +% ensure correct dipole position and moment specification +dipout = fixdipole(dipout); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DIPFIT_ERROR computes the error between measured and model data % and can be used for non-linear fitting of dipole position diff --git a/external/forwinv/private/fixdipole.m b/external/forwinv/private/fixdipole.m new file mode 100644 index 0000000..8a9de8c --- /dev/null +++ b/external/forwinv/private/fixdipole.m @@ -0,0 +1,39 @@ +function dip = fixdipole(dip) + +% FIXDIPOLE ensures that the dipole position and moment are +% consistently represented throughout FieldTrip functions. + +% Copyright (C) 2009, Robert Oostenveld +% +% $Log: fixdipole.m,v $ +% Revision 1.1 2009/07/02 15:35:55 roboos +% helper function for consistent dipole representation +% + +[m, n] = size(dip.pos); + +if n==3 + % the input representation is Nx3, which is what we want +elseif m==3 + % it is possible to translate it into a Nx3 unambiguously + warning('input dipole positions should be specified as Nx3 matrix'); + dip.pos = dip.pos'; +elseif m==1 + % it is possible to translate it into a Nx3 unambiguously + warning('input dipole positions should be specified as Nx3 matrix'); + dip.pos = reshape(dip.pos, 3, n/3)'; +else + % it is not clear how to convert to a Nx3 matrix + error('input dipole positions should be specified as Nx3 matrix'); +end + +if isfield(dip, 'mom') + ndip = size(dip.pos,1); + if numel(dip.mom)==ndip*3 + ntime = 1; + else + ntime = numel(dip.mom)/(ndip*3); + end + dip.mom = reshape(dip.mom, ndip*3, ntime); +end + diff --git a/external/forwinv/private/hastoolbox.m b/external/forwinv/private/hastoolbox.m index 8289f0d..79640d3 100644 --- a/external/forwinv/private/hastoolbox.m +++ b/external/forwinv/private/hastoolbox.m @@ -10,6 +10,9 @@ % Copyright (C) 2005-2008, Robert Oostenveld % % $Log: hastoolbox.m,v $ +% Revision 1.36 2009/09/08 14:34:01 roboos +% also detect 64 bit windows version (thanks to arno) +% % Revision 1.35 2009/04/21 09:54:15 roboos % added prtools % @@ -318,7 +321,7 @@ % for windows computers in the F.C. Donders Centre prefix = 'h:\common\matlab'; - if ~status && strcmp(computer, 'PCWIN') + if ~status && (strcmp(computer, 'PCWIN') || strcmp(computer, 'PCWIN64')) status = myaddpath(fullfile(prefix, lower(toolbox)), silent); end diff --git a/external/forwinv/private/issubfield.m b/external/forwinv/private/issubfield.m index f494642..60d94f4 100644 --- a/external/forwinv/private/issubfield.m +++ b/external/forwinv/private/issubfield.m @@ -1,4 +1,4 @@ -function [r] = issubfield(s, f); +function [r] = issubfield(s, f) % ISSUBFIELD tests for the presence of a field in a structure just like the standard % Matlab ISFIELD function, except that you can also specify nested fields @@ -17,6 +17,9 @@ % Copyright (C) 2005, Robert Oostenveld % % $Log: issubfield.m,v $ +% Revision 1.2 2009/07/30 20:11:44 ingnie +% made output boolian +% % Revision 1.1 2008/11/13 09:55:36 roboos % moved from fieldtrip/private, fileio or from roboos/misc to new location at fieldtrip/public % @@ -26,7 +29,7 @@ try getsubfield(s, f); % if this works, then the subfield must be present - r = 1; + r = true; catch - r = 0; % apparently the subfield is not present + r = false; % apparently the subfield is not present end \ No newline at end of file diff --git a/external/forwinv/private/keyval.m b/external/forwinv/private/keyval.m index b9fefe7..106cf02 100644 --- a/external/forwinv/private/keyval.m +++ b/external/forwinv/private/keyval.m @@ -11,6 +11,12 @@ % Copyright (C) 2005-2007, Robert Oostenveld % % $Log: keyval.m,v $ +% Revision 1.5 2009/08/04 11:58:28 roboos +% perform a case-insensitive string comparison for keys +% +% Revision 1.4 2009/07/14 16:11:02 roboos +% speed up the input checks +% % Revision 1.3 2009/05/14 19:24:02 roboos % removed ; at end of function declaration % @@ -35,22 +41,20 @@ error('optional input arguments should come in key-value pairs, i.e. there should be an even number'); end -for i=1:2:length(varargin) - if ~ischar(varargin{i}) - % the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values - error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); - end -end - +% the 1st, 3rd, etc. contain the keys, the 2nd, 4th, etc. contain the values keys = varargin(1:2:end); vals = varargin(2:2:end); -hit = find(strcmp(key, keys)); +if ~all(cellfun(@ischar, keys)) + error('optional input arguments should come in key-value pairs, the optional input argument %d is invalid (should be a string)', i); +end + +hit = find(strcmpi(key, keys)); if isempty(hit) % the requested key was not found val = []; elseif length(hit)==1 - % the requested key was found + % the requested key was found val = vals{hit}; else error('multiple input arguments with the same name'); diff --git a/external/forwinv/private/meg_leadfield1.m b/external/forwinv/private/meg_leadfield1.m index 447fcb0..c3ef0af 100644 --- a/external/forwinv/private/meg_leadfield1.m +++ b/external/forwinv/private/meg_leadfield1.m @@ -5,7 +5,7 @@ % [lf] = meg_leadfield1(R, pos, ori) % % with input arguments -% R position dipole +% R position dipole % pos position magnetometers % ori orientation magnetometers % @@ -21,6 +21,9 @@ % Copyright (C) 2002-2008, Robert Oostenveld % % $Log: meg_leadfield1.m,v $ +% Revision 1.3 2009/06/17 13:38:06 roboos +% cleaned up documentation +% % Revision 1.2 2009/03/12 11:05:04 roboos % implemented auto-compilation of the mex file in case it is missing % diff --git a/external/forwinv/private/prepare_vol_sens.m b/external/forwinv/private/prepare_vol_sens.m index fef176e..6a47ff5 100644 --- a/external/forwinv/private/prepare_vol_sens.m +++ b/external/forwinv/private/prepare_vol_sens.m @@ -40,6 +40,9 @@ % Copyright (C) 2004-2009, Robert Oostenveld % % $Log: prepare_vol_sens.m,v $ +% Revision 1.19 2009/05/29 11:50:34 vlalit +% Fixed a bug with wrong kind of brackets +% % Revision 1.18 2009/05/25 11:50:40 roboos % consistent handling of multiple spheres in case of ctf localspheres.hdm and fieldtrip prepare_localspheres, also in case of synthetic gradients. % @@ -228,7 +231,7 @@ warning('using the global fitted single sphere for %d channels that do not have a local sphere', length(missing)); end for i=1:length(missing) - vol.label(end+1) = missing{i}; + vol.label(end+1) = missing(i); vol.r(end+1,:) = singlesphere.r; vol.o(end+1,:) = singlesphere.o; end diff --git a/external/forwinv/private/senslabel.m b/external/forwinv/private/senslabel.m index 81db081..f75cc93 100644 --- a/external/forwinv/private/senslabel.m +++ b/external/forwinv/private/senslabel.m @@ -6,6 +6,7 @@ % label = senslabel(type) % % The input type can be any of the following +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -40,6 +41,12 @@ % Copyright (C) 2008, Vladimir Litvak % % $Log: senslabel.m,v $ +% Revision 1.4 2009/07/29 07:07:59 roboos +% use caching of input and output arguments to speed up the handling of multiple calls with the same input argument +% +% Revision 1.3 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.2 2009/05/07 13:34:09 roboos % added ctf64 % @@ -59,6 +66,21 @@ % moved definition of channel label sets to seperate function % +% these are for remembering the type on subsequent calls with the same input arguments +persistent previous_argin previous_argout + +if nargin<1 + % ensure that all input arguments are defined + type = []; +end + +current_argin = {type}; +if isequal(current_argin, previous_argin) + % don't do the type detection again, but return the previous values from cache + label = previous_argout{1}; + return +end + % prevent defining all possible labels if not needed isbiosemi = ~isempty(regexp(type, '^biosemi', 'once')); isbti = ~isempty(regexp(type, '^bti', 'once')); @@ -69,1836 +91,1912 @@ isneuromag = ~isempty(regexp(type, '^neuromag', 'once')); if isbti - btiref = { - 'MRxA' - 'MRyA' - 'MRzA' - 'MLxA' - 'MLyA' - 'MLzA' - 'MCxA' - 'MCyA' - 'MCzA' - 'MRxaA' - 'MRyaA' - 'MRzaA' - 'MLxaA' - 'MLyaA' - 'MLzaA' - 'MCxaA' - 'MCyaA' - 'MCzaA' - 'GxxA' - 'GyxA' - 'GzxA' - 'GyyA' - 'GzyA' - }; + btiref = { + 'MRxA' + 'MRyA' + 'MRzA' + 'MLxA' + 'MLyA' + 'MLzA' + 'MCxA' + 'MCyA' + 'MCzA' + 'MRxaA' + 'MRyaA' + 'MRzaA' + 'MLxaA' + 'MLyaA' + 'MLzaA' + 'MCxaA' + 'MCyaA' + 'MCzaA' + 'GxxA' + 'GyxA' + 'GzxA' + 'GyyA' + 'GzyA' + }; - bti148 = cell(148,1); - for i=1:148 - bti148{i,1} = sprintf('A%d', i); - end + bti148 = cell(148,1); + for i=1:148 + bti148{i,1} = sprintf('A%d', i); + end - bti148_planar = cell(148,1); - for i=1:148 - bti148_planar{i,1} = sprintf('A%d_dH', i); - bti148_planar{i,2} = sprintf('A%d_dV', i); - end + bti148_planar = cell(148,1); + for i=1:148 + bti148_planar{i,1} = sprintf('A%d_dH', i); + bti148_planar{i,2} = sprintf('A%d_dV', i); + end - bti248 = cell(248,1); - for i=1:248 - bti248{i,1} = sprintf('A%d', i); - end + bti248 = cell(248,1); + for i=1:248 + bti248{i,1} = sprintf('A%d', i); + end - bti248_planar = cell(248,2); - for i=1:248 - bti248_planar{i,1} = sprintf('A%d_dH', i); - bti248_planar{i,2} = sprintf('A%d_dV', i); - end + bti248_planar = cell(248,2); + for i=1:248 + bti248_planar{i,1} = sprintf('A%d_dH', i); + bti248_planar{i,2} = sprintf('A%d_dV', i); + end end % if isbti if isctf - ctfref = { - 'BG1' - 'BG2' - 'BG3' - 'BP1' - 'BP2' - 'BP3' - 'BR1' - 'BR2' - 'BR3' - 'G11' - 'G12' - 'G13' - 'G22' - 'G23' - 'P11' - 'P12' - 'P13' - 'P22' - 'P23' - 'Q11' - 'Q12' - 'Q13' - 'Q22' - 'Q23' - 'R11' - 'R12' - 'R13' - 'R22' - 'R23' - }; + ctfref = { + 'BG1' + 'BG2' + 'BG3' + 'BP1' + 'BP2' + 'BP3' + 'BR1' + 'BR2' + 'BR3' + 'G11' + 'G12' + 'G13' + 'G22' + 'G23' + 'P11' + 'P12' + 'P13' + 'P22' + 'P23' + 'Q11' + 'Q12' + 'Q13' + 'Q22' + 'Q23' + 'R11' + 'R12' + 'R13' + 'R22' + 'R23' + }; - ctfheadloc = { - 'HLC0011' - 'HLC0012' - 'HLC0013' - 'HLC0021' - 'HLC0022' - 'HLC0023' - 'HLC0031' - 'HLC0032' - 'HLC0033' - 'HLC0018' - 'HLC0028' - 'HLC0038' - 'HLC0014' - 'HLC0015' - 'HLC0016' - 'HLC0017' - 'HLC0024' - 'HLC0025' - 'HLC0026' - 'HLC0027' - 'HLC0034' - 'HLC0035' - 'HLC0036' - 'HLC0037' - }; + ctfheadloc = { + 'HLC0011' + 'HLC0012' + 'HLC0013' + 'HLC0021' + 'HLC0022' + 'HLC0023' + 'HLC0031' + 'HLC0032' + 'HLC0033' + 'HLC0018' + 'HLC0028' + 'HLC0038' + 'HLC0014' + 'HLC0015' + 'HLC0016' + 'HLC0017' + 'HLC0024' + 'HLC0025' + 'HLC0026' + 'HLC0027' + 'HLC0034' + 'HLC0035' + 'HLC0036' + 'HLC0037' + }; - ctf64 = { - 'SL11' - 'SL12' - 'SL13' - 'SL14' - 'SL15' - 'SL16' - 'SL17' - 'SL18' - 'SL19' - 'SL21' - 'SL22' - 'SL23' - 'SL24' - 'SL25' - 'SL26' - 'SL27' - 'SL28' - 'SL29' - 'SL31' - 'SL32' - 'SL33' - 'SL34' - 'SL35' - 'SL41' - 'SL42' - 'SL43' - 'SL44' - 'SL45' - 'SL46' - 'SL47' - 'SL51' - 'SL52' - 'SR11' - 'SR12' - 'SR13' - 'SR14' - 'SR15' - 'SR16' - 'SR17' - 'SR18' - 'SR19' - 'SR21' - 'SR22' - 'SR23' - 'SR24' - 'SR25' - 'SR26' - 'SR27' - 'SR28' - 'SR29' - 'SR31' - 'SR32' - 'SR33' - 'SR34' - 'SR35' - 'SR41' - 'SR42' - 'SR43' - 'SR44' - 'SR45' - 'SR46' - 'SR47' - 'SR51' - 'SR52' - }; + ctf64 = { + 'SL11' + 'SL12' + 'SL13' + 'SL14' + 'SL15' + 'SL16' + 'SL17' + 'SL18' + 'SL19' + 'SL21' + 'SL22' + 'SL23' + 'SL24' + 'SL25' + 'SL26' + 'SL27' + 'SL28' + 'SL29' + 'SL31' + 'SL32' + 'SL33' + 'SL34' + 'SL35' + 'SL41' + 'SL42' + 'SL43' + 'SL44' + 'SL45' + 'SL46' + 'SL47' + 'SL51' + 'SL52' + 'SR11' + 'SR12' + 'SR13' + 'SR14' + 'SR15' + 'SR16' + 'SR17' + 'SR18' + 'SR19' + 'SR21' + 'SR22' + 'SR23' + 'SR24' + 'SR25' + 'SR26' + 'SR27' + 'SR28' + 'SR29' + 'SR31' + 'SR32' + 'SR33' + 'SR34' + 'SR35' + 'SR41' + 'SR42' + 'SR43' + 'SR44' + 'SR45' + 'SR46' + 'SR47' + 'SR51' + 'SR52' + }; - ctf151 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC31' - 'MLC32' - 'MLC33' - 'MLC41' - 'MLC42' - 'MLC43' - 'MLF11' - 'MLF12' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF51' - 'MLF52' - 'MLO11' - 'MLO12' - 'MLO21' - 'MLO22' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLP11' - 'MLP12' - 'MLP13' - 'MLP21' - 'MLP22' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC31' - 'MRC32' - 'MRC33' - 'MRC41' - 'MRC42' - 'MRC43' - 'MRF11' - 'MRF12' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF51' - 'MRF52' - 'MRO11' - 'MRO12' - 'MRO21' - 'MRO22' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRP11' - 'MRP12' - 'MRP13' - 'MRP21' - 'MRP22' - 'MRP31' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MZC01' - 'MZC02' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZP01' - 'MZP02' - }; + ctf151 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC31' + 'MLC32' + 'MLC33' + 'MLC41' + 'MLC42' + 'MLC43' + 'MLF11' + 'MLF12' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF51' + 'MLF52' + 'MLO11' + 'MLO12' + 'MLO21' + 'MLO22' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLP11' + 'MLP12' + 'MLP13' + 'MLP21' + 'MLP22' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC31' + 'MRC32' + 'MRC33' + 'MRC41' + 'MRC42' + 'MRC43' + 'MRF11' + 'MRF12' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF51' + 'MRF52' + 'MRO11' + 'MRO12' + 'MRO21' + 'MRO22' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRP11' + 'MRP12' + 'MRP13' + 'MRP21' + 'MRP22' + 'MRP31' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MZC01' + 'MZC02' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZP01' + 'MZP02' + }; - ctf151_planar = cell(151, 2); - for i=1:151 - ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); - ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); - end + ctf151_planar = cell(151, 2); + for i=1:151 + ctf151_planar{i,1} = sprintf('%s_dH', ctf151{i}); + ctf151_planar{i,2} = sprintf('%s_dV', ctf151{i}); + end - ctf275 = { - 'MLC11' - 'MLC12' - 'MLC13' - 'MLC14' - 'MLC15' - 'MLC16' - 'MLC17' - 'MLC21' - 'MLC22' - 'MLC23' - 'MLC24' - 'MLC25' - 'MLC31' - 'MLC32' - 'MLC41' - 'MLC42' - 'MLC51' - 'MLC52' - 'MLC53' - 'MLC54' - 'MLC55' - 'MLC61' - 'MLC62' - 'MLC63' - 'MLF11' - 'MLF12' - 'MLF13' - 'MLF14' - 'MLF21' - 'MLF22' - 'MLF23' - 'MLF24' - 'MLF25' - 'MLF31' - 'MLF32' - 'MLF33' - 'MLF34' - 'MLF35' - 'MLF41' - 'MLF42' - 'MLF43' - 'MLF44' - 'MLF45' - 'MLF46' - 'MLF51' - 'MLF52' - 'MLF53' - 'MLF54' - 'MLF55' - 'MLF56' - 'MLF61' - 'MLF62' - 'MLF63' - 'MLF64' - 'MLF65' - 'MLF66' - 'MLF67' - 'MLO11' - 'MLO12' - 'MLO13' - 'MLO14' - 'MLO21' - 'MLO22' - 'MLO23' - 'MLO24' - 'MLO31' - 'MLO32' - 'MLO33' - 'MLO34' - 'MLO41' - 'MLO42' - 'MLO43' - 'MLO44' - 'MLO51' - 'MLO52' - 'MLO53' - 'MLP11' - 'MLP12' - 'MLP21' - 'MLP22' - 'MLP23' - 'MLP31' - 'MLP32' - 'MLP33' - 'MLP34' - 'MLP35' - 'MLP41' - 'MLP42' - 'MLP43' - 'MLP44' - 'MLP45' - 'MLP51' - 'MLP52' - 'MLP53' - 'MLP54' - 'MLP55' - 'MLP56' - 'MLP57' - 'MLT11' - 'MLT12' - 'MLT13' - 'MLT14' - 'MLT15' - 'MLT16' - 'MLT21' - 'MLT22' - 'MLT23' - 'MLT24' - 'MLT25' - 'MLT26' - 'MLT27' - 'MLT31' - 'MLT32' - 'MLT33' - 'MLT34' - 'MLT35' - 'MLT36' - 'MLT37' - 'MLT41' - 'MLT42' - 'MLT43' - 'MLT44' - 'MLT45' - 'MLT46' - 'MLT47' - 'MLT51' - 'MLT52' - 'MLT53' - 'MLT54' - 'MLT55' - 'MLT56' - 'MLT57' - 'MRC11' - 'MRC12' - 'MRC13' - 'MRC14' - 'MRC15' - 'MRC16' - 'MRC17' - 'MRC21' - 'MRC22' - 'MRC23' - 'MRC24' - 'MRC25' - 'MRC31' - 'MRC32' - 'MRC41' - 'MRC42' - 'MRC51' - 'MRC52' - 'MRC53' - 'MRC54' - 'MRC55' - 'MRC61' - 'MRC62' - 'MRC63' - 'MRF11' - 'MRF12' - 'MRF13' - 'MRF14' - 'MRF21' - 'MRF22' - 'MRF23' - 'MRF24' - 'MRF25' - 'MRF31' - 'MRF32' - 'MRF33' - 'MRF34' - 'MRF35' - 'MRF41' - 'MRF42' - 'MRF43' - 'MRF44' - 'MRF45' - 'MRF46' - 'MRF51' - 'MRF52' - 'MRF53' - 'MRF54' - 'MRF55' - 'MRF56' - 'MRF61' - 'MRF62' - 'MRF63' - 'MRF64' - 'MRF65' - 'MRF66' - 'MRF67' - 'MRO11' - 'MRO12' - 'MRO13' - 'MRO14' - 'MRO21' - 'MRO22' - 'MRO23' - 'MRO24' - 'MRO31' - 'MRO32' - 'MRO33' - 'MRO34' - 'MRO41' - 'MRO42' - 'MRO43' - 'MRO44' - 'MRO51' - 'MRO52' - 'MRO53' - 'MRP11' - 'MRP12' - 'MRP21' - 'MRP22' - 'MRP23' - 'MRP32' - 'MRP33' - 'MRP34' - 'MRP35' - 'MRP41' - 'MRP42' - 'MRP43' - 'MRP44' - 'MRP45' - 'MRP51' - 'MRP52' - 'MRP53' - 'MRP54' - 'MRP55' - 'MRP56' - 'MRP57' - 'MRT11' - 'MRT12' - 'MRT13' - 'MRT14' - 'MRT15' - 'MRT16' - 'MRT21' - 'MRT22' - 'MRT23' - 'MRT24' - 'MRT25' - 'MRT26' - 'MRT27' - 'MRT31' - 'MRT32' - 'MRT33' - 'MRT34' - 'MRT35' - 'MRT36' - 'MRT37' - 'MRT41' - 'MRT42' - 'MRT43' - 'MRT44' - 'MRT45' - 'MRT46' - 'MRT47' - 'MRT51' - 'MRT52' - 'MRT53' - 'MRT54' - 'MRT55' - 'MRT56' - 'MRT57' - 'MZC01' - 'MZC02' - 'MZC03' - 'MZC04' - 'MZF01' - 'MZF02' - 'MZF03' - 'MZO01' - 'MZO02' - 'MZO03' - 'MZP01' - }; + ctf275 = { + 'MLC11' + 'MLC12' + 'MLC13' + 'MLC14' + 'MLC15' + 'MLC16' + 'MLC17' + 'MLC21' + 'MLC22' + 'MLC23' + 'MLC24' + 'MLC25' + 'MLC31' + 'MLC32' + 'MLC41' + 'MLC42' + 'MLC51' + 'MLC52' + 'MLC53' + 'MLC54' + 'MLC55' + 'MLC61' + 'MLC62' + 'MLC63' + 'MLF11' + 'MLF12' + 'MLF13' + 'MLF14' + 'MLF21' + 'MLF22' + 'MLF23' + 'MLF24' + 'MLF25' + 'MLF31' + 'MLF32' + 'MLF33' + 'MLF34' + 'MLF35' + 'MLF41' + 'MLF42' + 'MLF43' + 'MLF44' + 'MLF45' + 'MLF46' + 'MLF51' + 'MLF52' + 'MLF53' + 'MLF54' + 'MLF55' + 'MLF56' + 'MLF61' + 'MLF62' + 'MLF63' + 'MLF64' + 'MLF65' + 'MLF66' + 'MLF67' + 'MLO11' + 'MLO12' + 'MLO13' + 'MLO14' + 'MLO21' + 'MLO22' + 'MLO23' + 'MLO24' + 'MLO31' + 'MLO32' + 'MLO33' + 'MLO34' + 'MLO41' + 'MLO42' + 'MLO43' + 'MLO44' + 'MLO51' + 'MLO52' + 'MLO53' + 'MLP11' + 'MLP12' + 'MLP21' + 'MLP22' + 'MLP23' + 'MLP31' + 'MLP32' + 'MLP33' + 'MLP34' + 'MLP35' + 'MLP41' + 'MLP42' + 'MLP43' + 'MLP44' + 'MLP45' + 'MLP51' + 'MLP52' + 'MLP53' + 'MLP54' + 'MLP55' + 'MLP56' + 'MLP57' + 'MLT11' + 'MLT12' + 'MLT13' + 'MLT14' + 'MLT15' + 'MLT16' + 'MLT21' + 'MLT22' + 'MLT23' + 'MLT24' + 'MLT25' + 'MLT26' + 'MLT27' + 'MLT31' + 'MLT32' + 'MLT33' + 'MLT34' + 'MLT35' + 'MLT36' + 'MLT37' + 'MLT41' + 'MLT42' + 'MLT43' + 'MLT44' + 'MLT45' + 'MLT46' + 'MLT47' + 'MLT51' + 'MLT52' + 'MLT53' + 'MLT54' + 'MLT55' + 'MLT56' + 'MLT57' + 'MRC11' + 'MRC12' + 'MRC13' + 'MRC14' + 'MRC15' + 'MRC16' + 'MRC17' + 'MRC21' + 'MRC22' + 'MRC23' + 'MRC24' + 'MRC25' + 'MRC31' + 'MRC32' + 'MRC41' + 'MRC42' + 'MRC51' + 'MRC52' + 'MRC53' + 'MRC54' + 'MRC55' + 'MRC61' + 'MRC62' + 'MRC63' + 'MRF11' + 'MRF12' + 'MRF13' + 'MRF14' + 'MRF21' + 'MRF22' + 'MRF23' + 'MRF24' + 'MRF25' + 'MRF31' + 'MRF32' + 'MRF33' + 'MRF34' + 'MRF35' + 'MRF41' + 'MRF42' + 'MRF43' + 'MRF44' + 'MRF45' + 'MRF46' + 'MRF51' + 'MRF52' + 'MRF53' + 'MRF54' + 'MRF55' + 'MRF56' + 'MRF61' + 'MRF62' + 'MRF63' + 'MRF64' + 'MRF65' + 'MRF66' + 'MRF67' + 'MRO11' + 'MRO12' + 'MRO13' + 'MRO14' + 'MRO21' + 'MRO22' + 'MRO23' + 'MRO24' + 'MRO31' + 'MRO32' + 'MRO33' + 'MRO34' + 'MRO41' + 'MRO42' + 'MRO43' + 'MRO44' + 'MRO51' + 'MRO52' + 'MRO53' + 'MRP11' + 'MRP12' + 'MRP21' + 'MRP22' + 'MRP23' + 'MRP32' + 'MRP33' + 'MRP34' + 'MRP35' + 'MRP41' + 'MRP42' + 'MRP43' + 'MRP44' + 'MRP45' + 'MRP51' + 'MRP52' + 'MRP53' + 'MRP54' + 'MRP55' + 'MRP56' + 'MRP57' + 'MRT11' + 'MRT12' + 'MRT13' + 'MRT14' + 'MRT15' + 'MRT16' + 'MRT21' + 'MRT22' + 'MRT23' + 'MRT24' + 'MRT25' + 'MRT26' + 'MRT27' + 'MRT31' + 'MRT32' + 'MRT33' + 'MRT34' + 'MRT35' + 'MRT36' + 'MRT37' + 'MRT41' + 'MRT42' + 'MRT43' + 'MRT44' + 'MRT45' + 'MRT46' + 'MRT47' + 'MRT51' + 'MRT52' + 'MRT53' + 'MRT54' + 'MRT55' + 'MRT56' + 'MRT57' + 'MZC01' + 'MZC02' + 'MZC03' + 'MZC04' + 'MZF01' + 'MZF02' + 'MZF03' + 'MZO01' + 'MZO02' + 'MZO03' + 'MZP01' + }; - % f.ck, apparently one channel is missing - ctf275_planar = cell(274,2); - for i=1:274 - ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); - ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); - end + % f.ck, apparently one channel is missing + ctf275_planar = cell(274,2); + for i=1:274 + ctf275_planar{i,1} = sprintf('%s_dH', ctf275{i}); + ctf275_planar{i,2} = sprintf('%s_dV', ctf275{i}); + end end % if issctf if isneuromag - neuromag122 = { - 'MEG 001' 'MEG 002' - 'MEG 003' 'MEG 004' - 'MEG 005' 'MEG 006' - 'MEG 007' 'MEG 008' - 'MEG 009' 'MEG 010' - 'MEG 011' 'MEG 012' - 'MEG 013' 'MEG 014' - 'MEG 015' 'MEG 016' - 'MEG 017' 'MEG 018' - 'MEG 019' 'MEG 020' - 'MEG 021' 'MEG 022' - 'MEG 023' 'MEG 024' - 'MEG 025' 'MEG 026' - 'MEG 027' 'MEG 028' - 'MEG 029' 'MEG 030' - 'MEG 031' 'MEG 032' - 'MEG 033' 'MEG 034' - 'MEG 035' 'MEG 036' - 'MEG 037' 'MEG 038' - 'MEG 039' 'MEG 040' - 'MEG 041' 'MEG 042' - 'MEG 043' 'MEG 044' - 'MEG 045' 'MEG 046' - 'MEG 047' 'MEG 048' - 'MEG 049' 'MEG 050' - 'MEG 051' 'MEG 052' - 'MEG 053' 'MEG 054' - 'MEG 055' 'MEG 056' - 'MEG 057' 'MEG 058' - 'MEG 059' 'MEG 060' - 'MEG 061' 'MEG 062' - 'MEG 063' 'MEG 064' - 'MEG 065' 'MEG 066' - 'MEG 067' 'MEG 068' - 'MEG 069' 'MEG 070' - 'MEG 071' 'MEG 072' - 'MEG 073' 'MEG 074' - 'MEG 075' 'MEG 076' - 'MEG 077' 'MEG 078' - 'MEG 079' 'MEG 080' - 'MEG 081' 'MEG 082' - 'MEG 083' 'MEG 084' - 'MEG 085' 'MEG 086' - 'MEG 087' 'MEG 088' - 'MEG 089' 'MEG 090' - 'MEG 091' 'MEG 092' - 'MEG 093' 'MEG 094' - 'MEG 095' 'MEG 096' - 'MEG 097' 'MEG 098' - 'MEG 099' 'MEG 100' - 'MEG 101' 'MEG 102' - 'MEG 103' 'MEG 104' - 'MEG 105' 'MEG 106' - 'MEG 107' 'MEG 108' - 'MEG 109' 'MEG 110' - 'MEG 111' 'MEG 112' - 'MEG 113' 'MEG 114' - 'MEG 115' 'MEG 116' - 'MEG 117' 'MEG 118' - 'MEG 119' 'MEG 120' - 'MEG 121' 'MEG 122' - }; + neuromag122 = { + 'MEG 001' 'MEG 002' + 'MEG 003' 'MEG 004' + 'MEG 005' 'MEG 006' + 'MEG 007' 'MEG 008' + 'MEG 009' 'MEG 010' + 'MEG 011' 'MEG 012' + 'MEG 013' 'MEG 014' + 'MEG 015' 'MEG 016' + 'MEG 017' 'MEG 018' + 'MEG 019' 'MEG 020' + 'MEG 021' 'MEG 022' + 'MEG 023' 'MEG 024' + 'MEG 025' 'MEG 026' + 'MEG 027' 'MEG 028' + 'MEG 029' 'MEG 030' + 'MEG 031' 'MEG 032' + 'MEG 033' 'MEG 034' + 'MEG 035' 'MEG 036' + 'MEG 037' 'MEG 038' + 'MEG 039' 'MEG 040' + 'MEG 041' 'MEG 042' + 'MEG 043' 'MEG 044' + 'MEG 045' 'MEG 046' + 'MEG 047' 'MEG 048' + 'MEG 049' 'MEG 050' + 'MEG 051' 'MEG 052' + 'MEG 053' 'MEG 054' + 'MEG 055' 'MEG 056' + 'MEG 057' 'MEG 058' + 'MEG 059' 'MEG 060' + 'MEG 061' 'MEG 062' + 'MEG 063' 'MEG 064' + 'MEG 065' 'MEG 066' + 'MEG 067' 'MEG 068' + 'MEG 069' 'MEG 070' + 'MEG 071' 'MEG 072' + 'MEG 073' 'MEG 074' + 'MEG 075' 'MEG 076' + 'MEG 077' 'MEG 078' + 'MEG 079' 'MEG 080' + 'MEG 081' 'MEG 082' + 'MEG 083' 'MEG 084' + 'MEG 085' 'MEG 086' + 'MEG 087' 'MEG 088' + 'MEG 089' 'MEG 090' + 'MEG 091' 'MEG 092' + 'MEG 093' 'MEG 094' + 'MEG 095' 'MEG 096' + 'MEG 097' 'MEG 098' + 'MEG 099' 'MEG 100' + 'MEG 101' 'MEG 102' + 'MEG 103' 'MEG 104' + 'MEG 105' 'MEG 106' + 'MEG 107' 'MEG 108' + 'MEG 109' 'MEG 110' + 'MEG 111' 'MEG 112' + 'MEG 113' 'MEG 114' + 'MEG 115' 'MEG 116' + 'MEG 117' 'MEG 118' + 'MEG 119' 'MEG 120' + 'MEG 121' 'MEG 122' + }; - % this is an alternative set of labels without a space in them - neuromag122alt = { - 'MEG001' 'MEG002' - 'MEG003' 'MEG004' - 'MEG005' 'MEG006' - 'MEG007' 'MEG008' - 'MEG009' 'MEG010' - 'MEG011' 'MEG012' - 'MEG013' 'MEG014' - 'MEG015' 'MEG016' - 'MEG017' 'MEG018' - 'MEG019' 'MEG020' - 'MEG021' 'MEG022' - 'MEG023' 'MEG024' - 'MEG025' 'MEG026' - 'MEG027' 'MEG028' - 'MEG029' 'MEG030' - 'MEG031' 'MEG032' - 'MEG033' 'MEG034' - 'MEG035' 'MEG036' - 'MEG037' 'MEG038' - 'MEG039' 'MEG040' - 'MEG041' 'MEG042' - 'MEG043' 'MEG044' - 'MEG045' 'MEG046' - 'MEG047' 'MEG048' - 'MEG049' 'MEG050' - 'MEG051' 'MEG052' - 'MEG053' 'MEG054' - 'MEG055' 'MEG056' - 'MEG057' 'MEG058' - 'MEG059' 'MEG060' - 'MEG061' 'MEG062' - 'MEG063' 'MEG064' - 'MEG065' 'MEG066' - 'MEG067' 'MEG068' - 'MEG069' 'MEG070' - 'MEG071' 'MEG072' - 'MEG073' 'MEG074' - 'MEG075' 'MEG076' - 'MEG077' 'MEG078' - 'MEG079' 'MEG080' - 'MEG081' 'MEG082' - 'MEG083' 'MEG084' - 'MEG085' 'MEG086' - 'MEG087' 'MEG088' - 'MEG089' 'MEG090' - 'MEG091' 'MEG092' - 'MEG093' 'MEG094' - 'MEG095' 'MEG096' - 'MEG097' 'MEG098' - 'MEG099' 'MEG100' - 'MEG101' 'MEG102' - 'MEG103' 'MEG104' - 'MEG105' 'MEG106' - 'MEG107' 'MEG108' - 'MEG109' 'MEG110' - 'MEG111' 'MEG112' - 'MEG113' 'MEG114' - 'MEG115' 'MEG116' - 'MEG117' 'MEG118' - 'MEG119' 'MEG120' - 'MEG121' 'MEG122' - }; + % this is an alternative set of labels without a space in them + neuromag122alt = { + 'MEG001' 'MEG002' + 'MEG003' 'MEG004' + 'MEG005' 'MEG006' + 'MEG007' 'MEG008' + 'MEG009' 'MEG010' + 'MEG011' 'MEG012' + 'MEG013' 'MEG014' + 'MEG015' 'MEG016' + 'MEG017' 'MEG018' + 'MEG019' 'MEG020' + 'MEG021' 'MEG022' + 'MEG023' 'MEG024' + 'MEG025' 'MEG026' + 'MEG027' 'MEG028' + 'MEG029' 'MEG030' + 'MEG031' 'MEG032' + 'MEG033' 'MEG034' + 'MEG035' 'MEG036' + 'MEG037' 'MEG038' + 'MEG039' 'MEG040' + 'MEG041' 'MEG042' + 'MEG043' 'MEG044' + 'MEG045' 'MEG046' + 'MEG047' 'MEG048' + 'MEG049' 'MEG050' + 'MEG051' 'MEG052' + 'MEG053' 'MEG054' + 'MEG055' 'MEG056' + 'MEG057' 'MEG058' + 'MEG059' 'MEG060' + 'MEG061' 'MEG062' + 'MEG063' 'MEG064' + 'MEG065' 'MEG066' + 'MEG067' 'MEG068' + 'MEG069' 'MEG070' + 'MEG071' 'MEG072' + 'MEG073' 'MEG074' + 'MEG075' 'MEG076' + 'MEG077' 'MEG078' + 'MEG079' 'MEG080' + 'MEG081' 'MEG082' + 'MEG083' 'MEG084' + 'MEG085' 'MEG086' + 'MEG087' 'MEG088' + 'MEG089' 'MEG090' + 'MEG091' 'MEG092' + 'MEG093' 'MEG094' + 'MEG095' 'MEG096' + 'MEG097' 'MEG098' + 'MEG099' 'MEG100' + 'MEG101' 'MEG102' + 'MEG103' 'MEG104' + 'MEG105' 'MEG106' + 'MEG107' 'MEG108' + 'MEG109' 'MEG110' + 'MEG111' 'MEG112' + 'MEG113' 'MEG114' + 'MEG115' 'MEG116' + 'MEG117' 'MEG118' + 'MEG119' 'MEG120' + 'MEG121' 'MEG122' + }; - neuromag306 = { - 'MEG 0113' 'MEG 0112' 'MEG 0111' - 'MEG 0122' 'MEG 0123' 'MEG 0121' - 'MEG 0132' 'MEG 0133' 'MEG 0131' - 'MEG 0143' 'MEG 0142' 'MEG 0141' - 'MEG 0213' 'MEG 0212' 'MEG 0211' - 'MEG 0222' 'MEG 0223' 'MEG 0221' - 'MEG 0232' 'MEG 0233' 'MEG 0231' - 'MEG 0243' 'MEG 0242' 'MEG 0241' - 'MEG 0313' 'MEG 0312' 'MEG 0311' - 'MEG 0322' 'MEG 0323' 'MEG 0321' - 'MEG 0333' 'MEG 0332' 'MEG 0331' - 'MEG 0343' 'MEG 0342' 'MEG 0341' - 'MEG 0413' 'MEG 0412' 'MEG 0411' - 'MEG 0422' 'MEG 0423' 'MEG 0421' - 'MEG 0432' 'MEG 0433' 'MEG 0431' - 'MEG 0443' 'MEG 0442' 'MEG 0441' - 'MEG 0513' 'MEG 0512' 'MEG 0511' - 'MEG 0523' 'MEG 0522' 'MEG 0521' - 'MEG 0532' 'MEG 0533' 'MEG 0531' - 'MEG 0542' 'MEG 0543' 'MEG 0541' - 'MEG 0613' 'MEG 0612' 'MEG 0611' - 'MEG 0622' 'MEG 0623' 'MEG 0621' - 'MEG 0633' 'MEG 0632' 'MEG 0631' - 'MEG 0642' 'MEG 0643' 'MEG 0641' - 'MEG 0713' 'MEG 0712' 'MEG 0711' - 'MEG 0723' 'MEG 0722' 'MEG 0721' - 'MEG 0733' 'MEG 0732' 'MEG 0731' - 'MEG 0743' 'MEG 0742' 'MEG 0741' - 'MEG 0813' 'MEG 0812' 'MEG 0811' - 'MEG 0822' 'MEG 0823' 'MEG 0821' - 'MEG 0913' 'MEG 0912' 'MEG 0911' - 'MEG 0923' 'MEG 0922' 'MEG 0921' - 'MEG 0932' 'MEG 0933' 'MEG 0931' - 'MEG 0942' 'MEG 0943' 'MEG 0941' - 'MEG 1013' 'MEG 1012' 'MEG 1011' - 'MEG 1023' 'MEG 1022' 'MEG 1021' - 'MEG 1032' 'MEG 1033' 'MEG 1031' - 'MEG 1043' 'MEG 1042' 'MEG 1041' - 'MEG 1112' 'MEG 1113' 'MEG 1111' - 'MEG 1123' 'MEG 1122' 'MEG 1121' - 'MEG 1133' 'MEG 1132' 'MEG 1131' - 'MEG 1142' 'MEG 1143' 'MEG 1141' - 'MEG 1213' 'MEG 1212' 'MEG 1211' - 'MEG 1223' 'MEG 1222' 'MEG 1221' - 'MEG 1232' 'MEG 1233' 'MEG 1231' - 'MEG 1243' 'MEG 1242' 'MEG 1241' - 'MEG 1312' 'MEG 1313' 'MEG 1311' - 'MEG 1323' 'MEG 1322' 'MEG 1321' - 'MEG 1333' 'MEG 1332' 'MEG 1331' - 'MEG 1342' 'MEG 1343' 'MEG 1341' - 'MEG 1412' 'MEG 1413' 'MEG 1411' - 'MEG 1423' 'MEG 1422' 'MEG 1421' - 'MEG 1433' 'MEG 1432' 'MEG 1431' - 'MEG 1442' 'MEG 1443' 'MEG 1441' - 'MEG 1512' 'MEG 1513' 'MEG 1511' - 'MEG 1522' 'MEG 1523' 'MEG 1521' - 'MEG 1533' 'MEG 1532' 'MEG 1531' - 'MEG 1543' 'MEG 1542' 'MEG 1541' - 'MEG 1613' 'MEG 1612' 'MEG 1611' - 'MEG 1622' 'MEG 1623' 'MEG 1621' - 'MEG 1632' 'MEG 1633' 'MEG 1631' - 'MEG 1643' 'MEG 1642' 'MEG 1641' - 'MEG 1713' 'MEG 1712' 'MEG 1711' - 'MEG 1722' 'MEG 1723' 'MEG 1721' - 'MEG 1732' 'MEG 1733' 'MEG 1731' - 'MEG 1743' 'MEG 1742' 'MEG 1741' - 'MEG 1813' 'MEG 1812' 'MEG 1811' - 'MEG 1822' 'MEG 1823' 'MEG 1821' - 'MEG 1832' 'MEG 1833' 'MEG 1831' - 'MEG 1843' 'MEG 1842' 'MEG 1841' - 'MEG 1912' 'MEG 1913' 'MEG 1911' - 'MEG 1923' 'MEG 1922' 'MEG 1921' - 'MEG 1932' 'MEG 1933' 'MEG 1931' - 'MEG 1943' 'MEG 1942' 'MEG 1941' - 'MEG 2013' 'MEG 2012' 'MEG 2011' - 'MEG 2023' 'MEG 2022' 'MEG 2021' - 'MEG 2032' 'MEG 2033' 'MEG 2031' - 'MEG 2042' 'MEG 2043' 'MEG 2041' - 'MEG 2113' 'MEG 2112' 'MEG 2111' - 'MEG 2122' 'MEG 2123' 'MEG 2121' - 'MEG 2133' 'MEG 2132' 'MEG 2131' - 'MEG 2143' 'MEG 2142' 'MEG 2141' - 'MEG 2212' 'MEG 2213' 'MEG 2211' - 'MEG 2223' 'MEG 2222' 'MEG 2221' - 'MEG 2233' 'MEG 2232' 'MEG 2231' - 'MEG 2242' 'MEG 2243' 'MEG 2241' - 'MEG 2312' 'MEG 2313' 'MEG 2311' - 'MEG 2323' 'MEG 2322' 'MEG 2321' - 'MEG 2332' 'MEG 2333' 'MEG 2331' - 'MEG 2343' 'MEG 2342' 'MEG 2341' - 'MEG 2412' 'MEG 2413' 'MEG 2411' - 'MEG 2423' 'MEG 2422' 'MEG 2421' - 'MEG 2433' 'MEG 2432' 'MEG 2431' - 'MEG 2442' 'MEG 2443' 'MEG 2441' - 'MEG 2512' 'MEG 2513' 'MEG 2511' - 'MEG 2522' 'MEG 2523' 'MEG 2521' - 'MEG 2533' 'MEG 2532' 'MEG 2531' - 'MEG 2543' 'MEG 2542' 'MEG 2541' - 'MEG 2612' 'MEG 2613' 'MEG 2611' - 'MEG 2623' 'MEG 2622' 'MEG 2621' - 'MEG 2633' 'MEG 2632' 'MEG 2631' - 'MEG 2642' 'MEG 2643' 'MEG 2641' - }; + neuromag306 = { + 'MEG 0113' 'MEG 0112' 'MEG 0111' + 'MEG 0122' 'MEG 0123' 'MEG 0121' + 'MEG 0132' 'MEG 0133' 'MEG 0131' + 'MEG 0143' 'MEG 0142' 'MEG 0141' + 'MEG 0213' 'MEG 0212' 'MEG 0211' + 'MEG 0222' 'MEG 0223' 'MEG 0221' + 'MEG 0232' 'MEG 0233' 'MEG 0231' + 'MEG 0243' 'MEG 0242' 'MEG 0241' + 'MEG 0313' 'MEG 0312' 'MEG 0311' + 'MEG 0322' 'MEG 0323' 'MEG 0321' + 'MEG 0333' 'MEG 0332' 'MEG 0331' + 'MEG 0343' 'MEG 0342' 'MEG 0341' + 'MEG 0413' 'MEG 0412' 'MEG 0411' + 'MEG 0422' 'MEG 0423' 'MEG 0421' + 'MEG 0432' 'MEG 0433' 'MEG 0431' + 'MEG 0443' 'MEG 0442' 'MEG 0441' + 'MEG 0513' 'MEG 0512' 'MEG 0511' + 'MEG 0523' 'MEG 0522' 'MEG 0521' + 'MEG 0532' 'MEG 0533' 'MEG 0531' + 'MEG 0542' 'MEG 0543' 'MEG 0541' + 'MEG 0613' 'MEG 0612' 'MEG 0611' + 'MEG 0622' 'MEG 0623' 'MEG 0621' + 'MEG 0633' 'MEG 0632' 'MEG 0631' + 'MEG 0642' 'MEG 0643' 'MEG 0641' + 'MEG 0713' 'MEG 0712' 'MEG 0711' + 'MEG 0723' 'MEG 0722' 'MEG 0721' + 'MEG 0733' 'MEG 0732' 'MEG 0731' + 'MEG 0743' 'MEG 0742' 'MEG 0741' + 'MEG 0813' 'MEG 0812' 'MEG 0811' + 'MEG 0822' 'MEG 0823' 'MEG 0821' + 'MEG 0913' 'MEG 0912' 'MEG 0911' + 'MEG 0923' 'MEG 0922' 'MEG 0921' + 'MEG 0932' 'MEG 0933' 'MEG 0931' + 'MEG 0942' 'MEG 0943' 'MEG 0941' + 'MEG 1013' 'MEG 1012' 'MEG 1011' + 'MEG 1023' 'MEG 1022' 'MEG 1021' + 'MEG 1032' 'MEG 1033' 'MEG 1031' + 'MEG 1043' 'MEG 1042' 'MEG 1041' + 'MEG 1112' 'MEG 1113' 'MEG 1111' + 'MEG 1123' 'MEG 1122' 'MEG 1121' + 'MEG 1133' 'MEG 1132' 'MEG 1131' + 'MEG 1142' 'MEG 1143' 'MEG 1141' + 'MEG 1213' 'MEG 1212' 'MEG 1211' + 'MEG 1223' 'MEG 1222' 'MEG 1221' + 'MEG 1232' 'MEG 1233' 'MEG 1231' + 'MEG 1243' 'MEG 1242' 'MEG 1241' + 'MEG 1312' 'MEG 1313' 'MEG 1311' + 'MEG 1323' 'MEG 1322' 'MEG 1321' + 'MEG 1333' 'MEG 1332' 'MEG 1331' + 'MEG 1342' 'MEG 1343' 'MEG 1341' + 'MEG 1412' 'MEG 1413' 'MEG 1411' + 'MEG 1423' 'MEG 1422' 'MEG 1421' + 'MEG 1433' 'MEG 1432' 'MEG 1431' + 'MEG 1442' 'MEG 1443' 'MEG 1441' + 'MEG 1512' 'MEG 1513' 'MEG 1511' + 'MEG 1522' 'MEG 1523' 'MEG 1521' + 'MEG 1533' 'MEG 1532' 'MEG 1531' + 'MEG 1543' 'MEG 1542' 'MEG 1541' + 'MEG 1613' 'MEG 1612' 'MEG 1611' + 'MEG 1622' 'MEG 1623' 'MEG 1621' + 'MEG 1632' 'MEG 1633' 'MEG 1631' + 'MEG 1643' 'MEG 1642' 'MEG 1641' + 'MEG 1713' 'MEG 1712' 'MEG 1711' + 'MEG 1722' 'MEG 1723' 'MEG 1721' + 'MEG 1732' 'MEG 1733' 'MEG 1731' + 'MEG 1743' 'MEG 1742' 'MEG 1741' + 'MEG 1813' 'MEG 1812' 'MEG 1811' + 'MEG 1822' 'MEG 1823' 'MEG 1821' + 'MEG 1832' 'MEG 1833' 'MEG 1831' + 'MEG 1843' 'MEG 1842' 'MEG 1841' + 'MEG 1912' 'MEG 1913' 'MEG 1911' + 'MEG 1923' 'MEG 1922' 'MEG 1921' + 'MEG 1932' 'MEG 1933' 'MEG 1931' + 'MEG 1943' 'MEG 1942' 'MEG 1941' + 'MEG 2013' 'MEG 2012' 'MEG 2011' + 'MEG 2023' 'MEG 2022' 'MEG 2021' + 'MEG 2032' 'MEG 2033' 'MEG 2031' + 'MEG 2042' 'MEG 2043' 'MEG 2041' + 'MEG 2113' 'MEG 2112' 'MEG 2111' + 'MEG 2122' 'MEG 2123' 'MEG 2121' + 'MEG 2133' 'MEG 2132' 'MEG 2131' + 'MEG 2143' 'MEG 2142' 'MEG 2141' + 'MEG 2212' 'MEG 2213' 'MEG 2211' + 'MEG 2223' 'MEG 2222' 'MEG 2221' + 'MEG 2233' 'MEG 2232' 'MEG 2231' + 'MEG 2242' 'MEG 2243' 'MEG 2241' + 'MEG 2312' 'MEG 2313' 'MEG 2311' + 'MEG 2323' 'MEG 2322' 'MEG 2321' + 'MEG 2332' 'MEG 2333' 'MEG 2331' + 'MEG 2343' 'MEG 2342' 'MEG 2341' + 'MEG 2412' 'MEG 2413' 'MEG 2411' + 'MEG 2423' 'MEG 2422' 'MEG 2421' + 'MEG 2433' 'MEG 2432' 'MEG 2431' + 'MEG 2442' 'MEG 2443' 'MEG 2441' + 'MEG 2512' 'MEG 2513' 'MEG 2511' + 'MEG 2522' 'MEG 2523' 'MEG 2521' + 'MEG 2533' 'MEG 2532' 'MEG 2531' + 'MEG 2543' 'MEG 2542' 'MEG 2541' + 'MEG 2612' 'MEG 2613' 'MEG 2611' + 'MEG 2623' 'MEG 2622' 'MEG 2621' + 'MEG 2633' 'MEG 2632' 'MEG 2631' + 'MEG 2642' 'MEG 2643' 'MEG 2641' + }; - % this is an alternative set of labels without a space in them - neuromag306alt = { - 'MEG0113' 'MEG0112' 'MEG0111' - 'MEG0122' 'MEG0123' 'MEG0121' - 'MEG0132' 'MEG0133' 'MEG0131' - 'MEG0143' 'MEG0142' 'MEG0141' - 'MEG0213' 'MEG0212' 'MEG0211' - 'MEG0222' 'MEG0223' 'MEG0221' - 'MEG0232' 'MEG0233' 'MEG0231' - 'MEG0243' 'MEG0242' 'MEG0241' - 'MEG0313' 'MEG0312' 'MEG0311' - 'MEG0322' 'MEG0323' 'MEG0321' - 'MEG0333' 'MEG0332' 'MEG0331' - 'MEG0343' 'MEG0342' 'MEG0341' - 'MEG0413' 'MEG0412' 'MEG0411' - 'MEG0422' 'MEG0423' 'MEG0421' - 'MEG0432' 'MEG0433' 'MEG0431' - 'MEG0443' 'MEG0442' 'MEG0441' - 'MEG0513' 'MEG0512' 'MEG0511' - 'MEG0523' 'MEG0522' 'MEG0521' - 'MEG0532' 'MEG0533' 'MEG0531' - 'MEG0542' 'MEG0543' 'MEG0541' - 'MEG0613' 'MEG0612' 'MEG0611' - 'MEG0622' 'MEG0623' 'MEG0621' - 'MEG0633' 'MEG0632' 'MEG0631' - 'MEG0642' 'MEG0643' 'MEG0641' - 'MEG0713' 'MEG0712' 'MEG0711' - 'MEG0723' 'MEG0722' 'MEG0721' - 'MEG0733' 'MEG0732' 'MEG0731' - 'MEG0743' 'MEG0742' 'MEG0741' - 'MEG0813' 'MEG0812' 'MEG0811' - 'MEG0822' 'MEG0823' 'MEG0821' - 'MEG0913' 'MEG0912' 'MEG0911' - 'MEG0923' 'MEG0922' 'MEG0921' - 'MEG0932' 'MEG0933' 'MEG0931' - 'MEG0942' 'MEG0943' 'MEG0941' - 'MEG1013' 'MEG1012' 'MEG1011' - 'MEG1023' 'MEG1022' 'MEG1021' - 'MEG1032' 'MEG1033' 'MEG1031' - 'MEG1043' 'MEG1042' 'MEG1041' - 'MEG1112' 'MEG1113' 'MEG1111' - 'MEG1123' 'MEG1122' 'MEG1121' - 'MEG1133' 'MEG1132' 'MEG1131' - 'MEG1142' 'MEG1143' 'MEG1141' - 'MEG1213' 'MEG1212' 'MEG1211' - 'MEG1223' 'MEG1222' 'MEG1221' - 'MEG1232' 'MEG1233' 'MEG1231' - 'MEG1243' 'MEG1242' 'MEG1241' - 'MEG1312' 'MEG1313' 'MEG1311' - 'MEG1323' 'MEG1322' 'MEG1321' - 'MEG1333' 'MEG1332' 'MEG1331' - 'MEG1342' 'MEG1343' 'MEG1341' - 'MEG1412' 'MEG1413' 'MEG1411' - 'MEG1423' 'MEG1422' 'MEG1421' - 'MEG1433' 'MEG1432' 'MEG1431' - 'MEG1442' 'MEG1443' 'MEG1441' - 'MEG1512' 'MEG1513' 'MEG1511' - 'MEG1522' 'MEG1523' 'MEG1521' - 'MEG1533' 'MEG1532' 'MEG1531' - 'MEG1543' 'MEG1542' 'MEG1541' - 'MEG1613' 'MEG1612' 'MEG1611' - 'MEG1622' 'MEG1623' 'MEG1621' - 'MEG1632' 'MEG1633' 'MEG1631' - 'MEG1643' 'MEG1642' 'MEG1641' - 'MEG1713' 'MEG1712' 'MEG1711' - 'MEG1722' 'MEG1723' 'MEG1721' - 'MEG1732' 'MEG1733' 'MEG1731' - 'MEG1743' 'MEG1742' 'MEG1741' - 'MEG1813' 'MEG1812' 'MEG1811' - 'MEG1822' 'MEG1823' 'MEG1821' - 'MEG1832' 'MEG1833' 'MEG1831' - 'MEG1843' 'MEG1842' 'MEG1841' - 'MEG1912' 'MEG1913' 'MEG1911' - 'MEG1923' 'MEG1922' 'MEG1921' - 'MEG1932' 'MEG1933' 'MEG1931' - 'MEG1943' 'MEG1942' 'MEG1941' - 'MEG2013' 'MEG2012' 'MEG2011' - 'MEG2023' 'MEG2022' 'MEG2021' - 'MEG2032' 'MEG2033' 'MEG2031' - 'MEG2042' 'MEG2043' 'MEG2041' - 'MEG2113' 'MEG2112' 'MEG2111' - 'MEG2122' 'MEG2123' 'MEG2121' - 'MEG2133' 'MEG2132' 'MEG2131' - 'MEG2143' 'MEG2142' 'MEG2141' - 'MEG2212' 'MEG2213' 'MEG2211' - 'MEG2223' 'MEG2222' 'MEG2221' - 'MEG2233' 'MEG2232' 'MEG2231' - 'MEG2242' 'MEG2243' 'MEG2241' - 'MEG2312' 'MEG2313' 'MEG2311' - 'MEG2323' 'MEG2322' 'MEG2321' - 'MEG2332' 'MEG2333' 'MEG2331' - 'MEG2343' 'MEG2342' 'MEG2341' - 'MEG2412' 'MEG2413' 'MEG2411' - 'MEG2423' 'MEG2422' 'MEG2421' - 'MEG2433' 'MEG2432' 'MEG2431' - 'MEG2442' 'MEG2443' 'MEG2441' - 'MEG2512' 'MEG2513' 'MEG2511' - 'MEG2522' 'MEG2523' 'MEG2521' - 'MEG2533' 'MEG2532' 'MEG2531' - 'MEG2543' 'MEG2542' 'MEG2541' - 'MEG2612' 'MEG2613' 'MEG2611' - 'MEG2623' 'MEG2622' 'MEG2621' - 'MEG2633' 'MEG2632' 'MEG2631' - 'MEG2642' 'MEG2643' 'MEG2641' - }; + % this is an alternative set of labels without a space in them + neuromag306alt = { + 'MEG0113' 'MEG0112' 'MEG0111' + 'MEG0122' 'MEG0123' 'MEG0121' + 'MEG0132' 'MEG0133' 'MEG0131' + 'MEG0143' 'MEG0142' 'MEG0141' + 'MEG0213' 'MEG0212' 'MEG0211' + 'MEG0222' 'MEG0223' 'MEG0221' + 'MEG0232' 'MEG0233' 'MEG0231' + 'MEG0243' 'MEG0242' 'MEG0241' + 'MEG0313' 'MEG0312' 'MEG0311' + 'MEG0322' 'MEG0323' 'MEG0321' + 'MEG0333' 'MEG0332' 'MEG0331' + 'MEG0343' 'MEG0342' 'MEG0341' + 'MEG0413' 'MEG0412' 'MEG0411' + 'MEG0422' 'MEG0423' 'MEG0421' + 'MEG0432' 'MEG0433' 'MEG0431' + 'MEG0443' 'MEG0442' 'MEG0441' + 'MEG0513' 'MEG0512' 'MEG0511' + 'MEG0523' 'MEG0522' 'MEG0521' + 'MEG0532' 'MEG0533' 'MEG0531' + 'MEG0542' 'MEG0543' 'MEG0541' + 'MEG0613' 'MEG0612' 'MEG0611' + 'MEG0622' 'MEG0623' 'MEG0621' + 'MEG0633' 'MEG0632' 'MEG0631' + 'MEG0642' 'MEG0643' 'MEG0641' + 'MEG0713' 'MEG0712' 'MEG0711' + 'MEG0723' 'MEG0722' 'MEG0721' + 'MEG0733' 'MEG0732' 'MEG0731' + 'MEG0743' 'MEG0742' 'MEG0741' + 'MEG0813' 'MEG0812' 'MEG0811' + 'MEG0822' 'MEG0823' 'MEG0821' + 'MEG0913' 'MEG0912' 'MEG0911' + 'MEG0923' 'MEG0922' 'MEG0921' + 'MEG0932' 'MEG0933' 'MEG0931' + 'MEG0942' 'MEG0943' 'MEG0941' + 'MEG1013' 'MEG1012' 'MEG1011' + 'MEG1023' 'MEG1022' 'MEG1021' + 'MEG1032' 'MEG1033' 'MEG1031' + 'MEG1043' 'MEG1042' 'MEG1041' + 'MEG1112' 'MEG1113' 'MEG1111' + 'MEG1123' 'MEG1122' 'MEG1121' + 'MEG1133' 'MEG1132' 'MEG1131' + 'MEG1142' 'MEG1143' 'MEG1141' + 'MEG1213' 'MEG1212' 'MEG1211' + 'MEG1223' 'MEG1222' 'MEG1221' + 'MEG1232' 'MEG1233' 'MEG1231' + 'MEG1243' 'MEG1242' 'MEG1241' + 'MEG1312' 'MEG1313' 'MEG1311' + 'MEG1323' 'MEG1322' 'MEG1321' + 'MEG1333' 'MEG1332' 'MEG1331' + 'MEG1342' 'MEG1343' 'MEG1341' + 'MEG1412' 'MEG1413' 'MEG1411' + 'MEG1423' 'MEG1422' 'MEG1421' + 'MEG1433' 'MEG1432' 'MEG1431' + 'MEG1442' 'MEG1443' 'MEG1441' + 'MEG1512' 'MEG1513' 'MEG1511' + 'MEG1522' 'MEG1523' 'MEG1521' + 'MEG1533' 'MEG1532' 'MEG1531' + 'MEG1543' 'MEG1542' 'MEG1541' + 'MEG1613' 'MEG1612' 'MEG1611' + 'MEG1622' 'MEG1623' 'MEG1621' + 'MEG1632' 'MEG1633' 'MEG1631' + 'MEG1643' 'MEG1642' 'MEG1641' + 'MEG1713' 'MEG1712' 'MEG1711' + 'MEG1722' 'MEG1723' 'MEG1721' + 'MEG1732' 'MEG1733' 'MEG1731' + 'MEG1743' 'MEG1742' 'MEG1741' + 'MEG1813' 'MEG1812' 'MEG1811' + 'MEG1822' 'MEG1823' 'MEG1821' + 'MEG1832' 'MEG1833' 'MEG1831' + 'MEG1843' 'MEG1842' 'MEG1841' + 'MEG1912' 'MEG1913' 'MEG1911' + 'MEG1923' 'MEG1922' 'MEG1921' + 'MEG1932' 'MEG1933' 'MEG1931' + 'MEG1943' 'MEG1942' 'MEG1941' + 'MEG2013' 'MEG2012' 'MEG2011' + 'MEG2023' 'MEG2022' 'MEG2021' + 'MEG2032' 'MEG2033' 'MEG2031' + 'MEG2042' 'MEG2043' 'MEG2041' + 'MEG2113' 'MEG2112' 'MEG2111' + 'MEG2122' 'MEG2123' 'MEG2121' + 'MEG2133' 'MEG2132' 'MEG2131' + 'MEG2143' 'MEG2142' 'MEG2141' + 'MEG2212' 'MEG2213' 'MEG2211' + 'MEG2223' 'MEG2222' 'MEG2221' + 'MEG2233' 'MEG2232' 'MEG2231' + 'MEG2242' 'MEG2243' 'MEG2241' + 'MEG2312' 'MEG2313' 'MEG2311' + 'MEG2323' 'MEG2322' 'MEG2321' + 'MEG2332' 'MEG2333' 'MEG2331' + 'MEG2343' 'MEG2342' 'MEG2341' + 'MEG2412' 'MEG2413' 'MEG2411' + 'MEG2423' 'MEG2422' 'MEG2421' + 'MEG2433' 'MEG2432' 'MEG2431' + 'MEG2442' 'MEG2443' 'MEG2441' + 'MEG2512' 'MEG2513' 'MEG2511' + 'MEG2522' 'MEG2523' 'MEG2521' + 'MEG2533' 'MEG2532' 'MEG2531' + 'MEG2543' 'MEG2542' 'MEG2541' + 'MEG2612' 'MEG2613' 'MEG2611' + 'MEG2623' 'MEG2622' 'MEG2621' + 'MEG2633' 'MEG2632' 'MEG2631' + 'MEG2642' 'MEG2643' 'MEG2641' + }; end % if isneuromag if iseeg || isext - eeg1020 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'F7' - 'F3' - 'Fz' - 'F4' - 'F8' - 'T7' - 'C3' - 'Cz' - 'C4' - 'T8' - 'P7' - 'P3' - 'Pz' - 'P4' - 'P8' - 'O1' - 'Oz' - 'O2'}; + eeg1020 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'F7' + 'F3' + 'Fz' + 'F4' + 'F8' + 'T7' + 'C3' + 'Cz' + 'C4' + 'T8' + 'P7' + 'P3' + 'Pz' + 'P4' + 'P8' + 'O1' + 'Oz' + 'O2'}; - eeg1010 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - }; + eeg1010 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + }; - eeg1005 = { - 'Fp1' - 'Fpz' - 'Fp2' - 'AF9' - 'AF7' - 'AF5' - 'AF3' - 'AF1' - 'AFz' - 'AF2' - 'AF4' - 'AF6' - 'AF8' - 'AF10' - 'F9' - 'F7' - 'F5' - 'F3' - 'F1' - 'Fz' - 'F2' - 'F4' - 'F6' - 'F8' - 'F10' - 'FT9' - 'FT7' - 'FC5' - 'FC3' - 'FC1' - 'FCz' - 'FC2' - 'FC4' - 'FC6' - 'FT8' - 'FT10' - 'T9' - 'T7' - 'C5' - 'C3' - 'C1' - 'Cz' - 'C2' - 'C4' - 'C6' - 'T8' - 'T10' - 'TP9' - 'TP7' - 'CP5' - 'CP3' - 'CP1' - 'CPz' - 'CP2' - 'CP4' - 'CP6' - 'TP8' - 'TP10' - 'P9' - 'P7' - 'P5' - 'P3' - 'P1' - 'Pz' - 'P2' - 'P4' - 'P6' - 'P8' - 'P10' - 'PO9' - 'PO7' - 'PO5' - 'PO3' - 'PO1' - 'POz' - 'PO2' - 'PO4' - 'PO6' - 'PO8' - 'PO10' - 'O1' - 'Oz' - 'O2' - 'I1' - 'Iz' - 'I2' - 'AFp9h' - 'AFp7h' - 'AFp5h' - 'AFp3h' - 'AFp1h' - 'AFp2h' - 'AFp4h' - 'AFp6h' - 'AFp8h' - 'AFp10h' - 'AFF9h' - 'AFF7h' - 'AFF5h' - 'AFF3h' - 'AFF1h' - 'AFF2h' - 'AFF4h' - 'AFF6h' - 'AFF8h' - 'AFF10h' - 'FFT9h' - 'FFT7h' - 'FFC5h' - 'FFC3h' - 'FFC1h' - 'FFC2h' - 'FFC4h' - 'FFC6h' - 'FFT8h' - 'FFT10h' - 'FTT9h' - 'FTT7h' - 'FCC5h' - 'FCC3h' - 'FCC1h' - 'FCC2h' - 'FCC4h' - 'FCC6h' - 'FTT8h' - 'FTT10h' - 'TTP9h' - 'TTP7h' - 'CCP5h' - 'CCP3h' - 'CCP1h' - 'CCP2h' - 'CCP4h' - 'CCP6h' - 'TTP8h' - 'TTP10h' - 'TPP9h' - 'TPP7h' - 'CPP5h' - 'CPP3h' - 'CPP1h' - 'CPP2h' - 'CPP4h' - 'CPP6h' - 'TPP8h' - 'TPP10h' - 'PPO9h' - 'PPO7h' - 'PPO5h' - 'PPO3h' - 'PPO1h' - 'PPO2h' - 'PPO4h' - 'PPO6h' - 'PPO8h' - 'PPO10h' - 'POO9h' - 'POO7h' - 'POO5h' - 'POO3h' - 'POO1h' - 'POO2h' - 'POO4h' - 'POO6h' - 'POO8h' - 'POO10h' - 'OI1h' - 'OI2h' - 'Fp1h' - 'Fp2h' - 'AF9h' - 'AF7h' - 'AF5h' - 'AF3h' - 'AF1h' - 'AF2h' - 'AF4h' - 'AF6h' - 'AF8h' - 'AF10h' - 'F9h' - 'F7h' - 'F5h' - 'F3h' - 'F1h' - 'F2h' - 'F4h' - 'F6h' - 'F8h' - 'F10h' - 'FT9h' - 'FT7h' - 'FC5h' - 'FC3h' - 'FC1h' - 'FC2h' - 'FC4h' - 'FC6h' - 'FT8h' - 'FT10h' - 'T9h' - 'T7h' - 'C5h' - 'C3h' - 'C1h' - 'C2h' - 'C4h' - 'C6h' - 'T8h' - 'T10h' - 'TP9h' - 'TP7h' - 'CP5h' - 'CP3h' - 'CP1h' - 'CP2h' - 'CP4h' - 'CP6h' - 'TP8h' - 'TP10h' - 'P9h' - 'P7h' - 'P5h' - 'P3h' - 'P1h' - 'P2h' - 'P4h' - 'P6h' - 'P8h' - 'P10h' - 'PO9h' - 'PO7h' - 'PO5h' - 'PO3h' - 'PO1h' - 'PO2h' - 'PO4h' - 'PO6h' - 'PO8h' - 'PO10h' - 'O1h' - 'O2h' - 'I1h' - 'I2h' - 'AFp9' - 'AFp7' - 'AFp5' - 'AFp3' - 'AFp1' - 'AFpz' - 'AFp2' - 'AFp4' - 'AFp6' - 'AFp8' - 'AFp10' - 'AFF9' - 'AFF7' - 'AFF5' - 'AFF3' - 'AFF1' - 'AFFz' - 'AFF2' - 'AFF4' - 'AFF6' - 'AFF8' - 'AFF10' - 'FFT9' - 'FFT7' - 'FFC5' - 'FFC3' - 'FFC1' - 'FFCz' - 'FFC2' - 'FFC4' - 'FFC6' - 'FFT8' - 'FFT10' - 'FTT9' - 'FTT7' - 'FCC5' - 'FCC3' - 'FCC1' - 'FCCz' - 'FCC2' - 'FCC4' - 'FCC6' - 'FTT8' - 'FTT10' - 'TTP9' - 'TTP7' - 'CCP5' - 'CCP3' - 'CCP1' - 'CCPz' - 'CCP2' - 'CCP4' - 'CCP6' - 'TTP8' - 'TTP10' - 'TPP9' - 'TPP7' - 'CPP5' - 'CPP3' - 'CPP1' - 'CPPz' - 'CPP2' - 'CPP4' - 'CPP6' - 'TPP8' - 'TPP10' - 'PPO9' - 'PPO7' - 'PPO5' - 'PPO3' - 'PPO1' - 'PPOz' - 'PPO2' - 'PPO4' - 'PPO6' - 'PPO8' - 'PPO10' - 'POO9' - 'POO7' - 'POO5' - 'POO3' - 'POO1' - 'POOz' - 'POO2' - 'POO4' - 'POO6' - 'POO8' - 'POO10' - 'OI1' - 'OIz' - 'OI2' - }; + eeg1005 = { + 'Fp1' + 'Fpz' + 'Fp2' + 'AF9' + 'AF7' + 'AF5' + 'AF3' + 'AF1' + 'AFz' + 'AF2' + 'AF4' + 'AF6' + 'AF8' + 'AF10' + 'F9' + 'F7' + 'F5' + 'F3' + 'F1' + 'Fz' + 'F2' + 'F4' + 'F6' + 'F8' + 'F10' + 'FT9' + 'FT7' + 'FC5' + 'FC3' + 'FC1' + 'FCz' + 'FC2' + 'FC4' + 'FC6' + 'FT8' + 'FT10' + 'T9' + 'T7' + 'C5' + 'C3' + 'C1' + 'Cz' + 'C2' + 'C4' + 'C6' + 'T8' + 'T10' + 'TP9' + 'TP7' + 'CP5' + 'CP3' + 'CP1' + 'CPz' + 'CP2' + 'CP4' + 'CP6' + 'TP8' + 'TP10' + 'P9' + 'P7' + 'P5' + 'P3' + 'P1' + 'Pz' + 'P2' + 'P4' + 'P6' + 'P8' + 'P10' + 'PO9' + 'PO7' + 'PO5' + 'PO3' + 'PO1' + 'POz' + 'PO2' + 'PO4' + 'PO6' + 'PO8' + 'PO10' + 'O1' + 'Oz' + 'O2' + 'I1' + 'Iz' + 'I2' + 'AFp9h' + 'AFp7h' + 'AFp5h' + 'AFp3h' + 'AFp1h' + 'AFp2h' + 'AFp4h' + 'AFp6h' + 'AFp8h' + 'AFp10h' + 'AFF9h' + 'AFF7h' + 'AFF5h' + 'AFF3h' + 'AFF1h' + 'AFF2h' + 'AFF4h' + 'AFF6h' + 'AFF8h' + 'AFF10h' + 'FFT9h' + 'FFT7h' + 'FFC5h' + 'FFC3h' + 'FFC1h' + 'FFC2h' + 'FFC4h' + 'FFC6h' + 'FFT8h' + 'FFT10h' + 'FTT9h' + 'FTT7h' + 'FCC5h' + 'FCC3h' + 'FCC1h' + 'FCC2h' + 'FCC4h' + 'FCC6h' + 'FTT8h' + 'FTT10h' + 'TTP9h' + 'TTP7h' + 'CCP5h' + 'CCP3h' + 'CCP1h' + 'CCP2h' + 'CCP4h' + 'CCP6h' + 'TTP8h' + 'TTP10h' + 'TPP9h' + 'TPP7h' + 'CPP5h' + 'CPP3h' + 'CPP1h' + 'CPP2h' + 'CPP4h' + 'CPP6h' + 'TPP8h' + 'TPP10h' + 'PPO9h' + 'PPO7h' + 'PPO5h' + 'PPO3h' + 'PPO1h' + 'PPO2h' + 'PPO4h' + 'PPO6h' + 'PPO8h' + 'PPO10h' + 'POO9h' + 'POO7h' + 'POO5h' + 'POO3h' + 'POO1h' + 'POO2h' + 'POO4h' + 'POO6h' + 'POO8h' + 'POO10h' + 'OI1h' + 'OI2h' + 'Fp1h' + 'Fp2h' + 'AF9h' + 'AF7h' + 'AF5h' + 'AF3h' + 'AF1h' + 'AF2h' + 'AF4h' + 'AF6h' + 'AF8h' + 'AF10h' + 'F9h' + 'F7h' + 'F5h' + 'F3h' + 'F1h' + 'F2h' + 'F4h' + 'F6h' + 'F8h' + 'F10h' + 'FT9h' + 'FT7h' + 'FC5h' + 'FC3h' + 'FC1h' + 'FC2h' + 'FC4h' + 'FC6h' + 'FT8h' + 'FT10h' + 'T9h' + 'T7h' + 'C5h' + 'C3h' + 'C1h' + 'C2h' + 'C4h' + 'C6h' + 'T8h' + 'T10h' + 'TP9h' + 'TP7h' + 'CP5h' + 'CP3h' + 'CP1h' + 'CP2h' + 'CP4h' + 'CP6h' + 'TP8h' + 'TP10h' + 'P9h' + 'P7h' + 'P5h' + 'P3h' + 'P1h' + 'P2h' + 'P4h' + 'P6h' + 'P8h' + 'P10h' + 'PO9h' + 'PO7h' + 'PO5h' + 'PO3h' + 'PO1h' + 'PO2h' + 'PO4h' + 'PO6h' + 'PO8h' + 'PO10h' + 'O1h' + 'O2h' + 'I1h' + 'I2h' + 'AFp9' + 'AFp7' + 'AFp5' + 'AFp3' + 'AFp1' + 'AFpz' + 'AFp2' + 'AFp4' + 'AFp6' + 'AFp8' + 'AFp10' + 'AFF9' + 'AFF7' + 'AFF5' + 'AFF3' + 'AFF1' + 'AFFz' + 'AFF2' + 'AFF4' + 'AFF6' + 'AFF8' + 'AFF10' + 'FFT9' + 'FFT7' + 'FFC5' + 'FFC3' + 'FFC1' + 'FFCz' + 'FFC2' + 'FFC4' + 'FFC6' + 'FFT8' + 'FFT10' + 'FTT9' + 'FTT7' + 'FCC5' + 'FCC3' + 'FCC1' + 'FCCz' + 'FCC2' + 'FCC4' + 'FCC6' + 'FTT8' + 'FTT10' + 'TTP9' + 'TTP7' + 'CCP5' + 'CCP3' + 'CCP1' + 'CCPz' + 'CCP2' + 'CCP4' + 'CCP6' + 'TTP8' + 'TTP10' + 'TPP9' + 'TPP7' + 'CPP5' + 'CPP3' + 'CPP1' + 'CPPz' + 'CPP2' + 'CPP4' + 'CPP6' + 'TPP8' + 'TPP10' + 'PPO9' + 'PPO7' + 'PPO5' + 'PPO3' + 'PPO1' + 'PPOz' + 'PPO2' + 'PPO4' + 'PPO6' + 'PPO8' + 'PPO10' + 'POO9' + 'POO7' + 'POO5' + 'POO3' + 'POO1' + 'POOz' + 'POO2' + 'POO4' + 'POO6' + 'POO8' + 'POO10' + 'OI1' + 'OIz' + 'OI2' + }; - % Add also alternative labels that are used in some systems - ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); + % Add also alternative labels that are used in some systems + ext1020 = cat(1, eeg1005, {'A1' 'A2' 'M1' 'M2' 'T3' 'T4' 'T5' 'T6'}'); - % This is to account for all variants of case in 1020 systems - ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); + % This is to account for all variants of case in 1020 systems + ext1020 = unique(cat(1, ext1020, upper(ext1020), lower(ext1020))); end % if iseeg || isext if isbiosemi - biosemi128 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - }; + biosemi64 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + }; + + biosemi128 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + }; + + biosemi256 = { + 'A1' + 'A2' + 'A3' + 'A4' + 'A5' + 'A6' + 'A7' + 'A8' + 'A9' + 'A10' + 'A11' + 'A12' + 'A13' + 'A14' + 'A15' + 'A16' + 'A17' + 'A18' + 'A19' + 'A20' + 'A21' + 'A22' + 'A23' + 'A24' + 'A25' + 'A26' + 'A27' + 'A28' + 'A29' + 'A30' + 'A31' + 'A32' + 'B1' + 'B2' + 'B3' + 'B4' + 'B5' + 'B6' + 'B7' + 'B8' + 'B9' + 'B10' + 'B11' + 'B12' + 'B13' + 'B14' + 'B15' + 'B16' + 'B17' + 'B18' + 'B19' + 'B20' + 'B21' + 'B22' + 'B23' + 'B24' + 'B25' + 'B26' + 'B27' + 'B28' + 'B29' + 'B30' + 'B31' + 'B32' + 'C1' + 'C2' + 'C3' + 'C4' + 'C5' + 'C6' + 'C7' + 'C8' + 'C9' + 'C10' + 'C11' + 'C12' + 'C13' + 'C14' + 'C15' + 'C16' + 'C17' + 'C18' + 'C19' + 'C20' + 'C21' + 'C22' + 'C23' + 'C24' + 'C25' + 'C26' + 'C27' + 'C28' + 'C29' + 'C30' + 'C31' + 'C32' + 'D1' + 'D2' + 'D3' + 'D4' + 'D5' + 'D6' + 'D7' + 'D8' + 'D9' + 'D10' + 'D11' + 'D12' + 'D13' + 'D14' + 'D15' + 'D16' + 'D17' + 'D18' + 'D19' + 'D20' + 'D21' + 'D22' + 'D23' + 'D24' + 'D25' + 'D26' + 'D27' + 'D28' + 'D29' + 'D30' + 'D31' + 'D32' + 'E1' + 'E2' + 'E3' + 'E4' + 'E5' + 'E6' + 'E7' + 'E8' + 'E9' + 'E10' + 'E11' + 'E12' + 'E13' + 'E14' + 'E15' + 'E16' + 'E17' + 'E18' + 'E19' + 'E20' + 'E21' + 'E22' + 'E23' + 'E24' + 'E25' + 'E26' + 'E27' + 'E28' + 'E29' + 'E30' + 'E31' + 'E32' + 'F1' + 'F2' + 'F3' + 'F4' + 'F5' + 'F6' + 'F7' + 'F8' + 'F9' + 'F10' + 'F11' + 'F12' + 'F13' + 'F14' + 'F15' + 'F16' + 'F17' + 'F18' + 'F19' + 'F20' + 'F21' + 'F22' + 'F23' + 'F24' + 'F25' + 'F26' + 'F27' + 'F28' + 'F29' + 'F30' + 'F31' + 'F32' + 'G1' + 'G2' + 'G3' + 'G4' + 'G5' + 'G6' + 'G7' + 'G8' + 'G9' + 'G10' + 'G11' + 'G12' + 'G13' + 'G14' + 'G15' + 'G16' + 'G17' + 'G18' + 'G19' + 'G20' + 'G21' + 'G22' + 'G23' + 'G24' + 'G25' + 'G26' + 'G27' + 'G28' + 'G29' + 'G30' + 'G31' + 'G32' + 'H1' + 'H2' + 'H3' + 'H4' + 'H5' + 'H6' + 'H7' + 'H8' + 'H9' + 'H10' + 'H11' + 'H12' + 'H13' + 'H14' + 'H15' + 'H16' + 'H17' + 'H18' + 'H19' + 'H20' + 'H21' + 'H22' + 'H23' + 'H24' + 'H25' + 'H26' + 'H27' + 'H28' + 'H29' + 'H30' + 'H31' + 'H32' + }; - biosemi256 = { - 'A1' - 'A2' - 'A3' - 'A4' - 'A5' - 'A6' - 'A7' - 'A8' - 'A9' - 'A10' - 'A11' - 'A12' - 'A13' - 'A14' - 'A15' - 'A16' - 'A17' - 'A18' - 'A19' - 'A20' - 'A21' - 'A22' - 'A23' - 'A24' - 'A25' - 'A26' - 'A27' - 'A28' - 'A29' - 'A30' - 'A31' - 'A32' - 'B1' - 'B2' - 'B3' - 'B4' - 'B5' - 'B6' - 'B7' - 'B8' - 'B9' - 'B10' - 'B11' - 'B12' - 'B13' - 'B14' - 'B15' - 'B16' - 'B17' - 'B18' - 'B19' - 'B20' - 'B21' - 'B22' - 'B23' - 'B24' - 'B25' - 'B26' - 'B27' - 'B28' - 'B29' - 'B30' - 'B31' - 'B32' - 'C1' - 'C2' - 'C3' - 'C4' - 'C5' - 'C6' - 'C7' - 'C8' - 'C9' - 'C10' - 'C11' - 'C12' - 'C13' - 'C14' - 'C15' - 'C16' - 'C17' - 'C18' - 'C19' - 'C20' - 'C21' - 'C22' - 'C23' - 'C24' - 'C25' - 'C26' - 'C27' - 'C28' - 'C29' - 'C30' - 'C31' - 'C32' - 'D1' - 'D2' - 'D3' - 'D4' - 'D5' - 'D6' - 'D7' - 'D8' - 'D9' - 'D10' - 'D11' - 'D12' - 'D13' - 'D14' - 'D15' - 'D16' - 'D17' - 'D18' - 'D19' - 'D20' - 'D21' - 'D22' - 'D23' - 'D24' - 'D25' - 'D26' - 'D27' - 'D28' - 'D29' - 'D30' - 'D31' - 'D32' - 'E1' - 'E2' - 'E3' - 'E4' - 'E5' - 'E6' - 'E7' - 'E8' - 'E9' - 'E10' - 'E11' - 'E12' - 'E13' - 'E14' - 'E15' - 'E16' - 'E17' - 'E18' - 'E19' - 'E20' - 'E21' - 'E22' - 'E23' - 'E24' - 'E25' - 'E26' - 'E27' - 'E28' - 'E29' - 'E30' - 'E31' - 'E32' - 'F1' - 'F2' - 'F3' - 'F4' - 'F5' - 'F6' - 'F7' - 'F8' - 'F9' - 'F10' - 'F11' - 'F12' - 'F13' - 'F14' - 'F15' - 'F16' - 'F17' - 'F18' - 'F19' - 'F20' - 'F21' - 'F22' - 'F23' - 'F24' - 'F25' - 'F26' - 'F27' - 'F28' - 'F29' - 'F30' - 'F31' - 'F32' - 'G1' - 'G2' - 'G3' - 'G4' - 'G5' - 'G6' - 'G7' - 'G8' - 'G9' - 'G10' - 'G11' - 'G12' - 'G13' - 'G14' - 'G15' - 'G16' - 'G17' - 'G18' - 'G19' - 'G20' - 'G21' - 'G22' - 'G23' - 'G24' - 'G25' - 'G26' - 'G27' - 'G28' - 'G29' - 'G30' - 'G31' - 'G32' - 'H1' - 'H2' - 'H3' - 'H4' - 'H5' - 'H6' - 'H7' - 'H8' - 'H9' - 'H10' - 'H11' - 'H12' - 'H13' - 'H14' - 'H15' - 'H16' - 'H17' - 'H18' - 'H19' - 'H20' - 'H21' - 'H22' - 'H23' - 'H24' - 'H25' - 'H26' - 'H27' - 'H28' - 'H29' - 'H30' - 'H31' - 'H32' - }; end % if isbiosemi if isegi - egi256 = cell(256, 1); - for i = 1:256 - egi256{i} = sprintf('e%d', i); - end + egi256 = cell(256, 1); + for i = 1:256 + egi256{i} = sprintf('e%d', i); + end - % the others are subsets - egi32 = egi256(1:32); - egi64 = egi256(1:64); - egi128 = egi256(1:128); + % the others are subsets + egi32 = egi256(1:32); + egi64 = egi256(1:64); + egi128 = egi256(1:128); end % if isegi % search for the requested definition of channel labels if exist(type, 'var') - label = eval(type); - label = label(:); + label = eval(type); + label = label(:); else - error('the requested sensor type is not supported'); + error('the requested sensor type is not supported'); +end + +% remember the current input and output arguments, so that they can be +% reused on a subsequent call in case the same input argument is given +current_argout = {label}; +if isempty(previous_argin) + previous_argin = current_argin; + previous_argout = current_argout; end diff --git a/external/forwinv/private/senstype.m b/external/forwinv/private/senstype.m index a00eaba..df3a355 100644 --- a/external/forwinv/private/senstype.m +++ b/external/forwinv/private/senstype.m @@ -12,6 +12,7 @@ % The output type can be any of the following % 'electrode' % 'magnetometer' +% 'biosemi64' % 'biosemi128' % 'biosemi256' % 'bti148' @@ -58,6 +59,21 @@ % Copyright (C) 2007-2008, Robert Oostenveld % % $Log: senstype.m,v $ +% Revision 1.19 2009/07/29 08:04:38 roboos +% cleaned up the code, no functional change +% +% Revision 1.18 2009/07/28 11:16:23 roboos +% removed keyboard statement, thanks to Jurrian +% +% Revision 1.17 2009/07/28 10:17:41 roboos +% make distinction between only label, label+pnt and label+pnt+ori +% +% Revision 1.16 2009/07/27 16:04:51 roboos +% improved distinction between eeg and meg, fixes problem with biosemi-eeg being detected as "ctf" due to reference channel match +% +% Revision 1.15 2009/06/19 16:51:50 vlalit +% Added biosemi64 system of Diane Whitmer, I don't know how generic it is. +% % Revision 1.14 2009/05/07 13:34:09 roboos % added ctf64 % @@ -138,14 +154,20 @@ % preferably the structure specifies its own type type = sens.type; +elseif issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') + % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex + type = 'plexon'; + else % start with unknown, then try to determine the proper type by looking at the labels type = 'unknown'; - if isfield(sens, 'label') + if isfield(sens, 'label') && isfield(sens, 'pnt') && isfield(sens, 'ori') % probably this is MEG, determine the type of magnetometer/gradiometer system % note that the order here is important: first check whether it matches a 275 channel system, then a 151 channel system, since the 151 channels are a subset of the 275 - if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) || (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels type = 'ctf275'; elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) type = 'ctf151'; @@ -177,12 +199,18 @@ type = 'ctf'; % it might be 151 or 275 channels elseif isfield(sens, 'pnt') && isfield(sens, 'ori') && numel(sens.label)==numel(sens.pnt) type = 'magnetometer'; - elseif isfield(sens, 'pnt') && isfield(sens, 'ori') + else type = 'meg'; - elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + end + + elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % probably this is EEG + if (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) type = 'biosemi256'; elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) type = 'egi256'; elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) @@ -193,26 +221,72 @@ type = 'egi32'; elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing type = 'ext1020'; - elseif isfield(sens, 'label') && isfield(sens, 'pnt') && ~isfield(sens, 'ori') % looks like EEG + else type = 'electrode'; end - end + elseif isfield(sens, 'label') && ~isfield(sens, 'pnt') && ~isfield(sens, 'ori') + % look only at the channel labels + if (mean(ismember(senslabel('ctf275'), sens.label)) > 0.8) + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctfheadloc'), sens.label)) > 0.8) % look at the head localization channels + type = 'ctf275'; + elseif (mean(ismember(senslabel('ctf151'), sens.label)) > 0.8) + type = 'ctf151'; + elseif (mean(ismember(senslabel('ctf64'), sens.label)) > 0.8) + type = 'ctf64'; + elseif (mean(ismember(senslabel('ctf275_planar'), sens.label)) > 0.8) + type = 'ctf275_planar'; + elseif (mean(ismember(senslabel('ctf151_planar'), sens.label)) > 0.8) + type = 'ctf151_planar'; + elseif (mean(ismember(senslabel('bti248'), sens.label)) > 0.8) + type = 'bti248'; + elseif (mean(ismember(senslabel('bti148'), sens.label)) > 0.8) + type = 'bti148'; + elseif (mean(ismember(senslabel('bti248_planar'), sens.label)) > 0.8) + type = 'bti248_planar'; + elseif (mean(ismember(senslabel('bti148_planar'), sens.label)) > 0.8) + type = 'bti148_planar'; + elseif (mean(ismember(senslabel('neuromag306'), sens.label)) > 0.8) + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag306alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag306'; + elseif (mean(ismember(senslabel('neuromag122'), sens.label)) > 0.8) + type = 'neuromag122'; + elseif (mean(ismember(senslabel('neuromag122alt'),sens.label)) > 0.8) % an alternative set without spaces in the name + type = 'neuromag122'; + elseif (mean(ismember(senslabel('biosemi256'), sens.label)) > 0.8) + type = 'biosemi256'; + elseif (mean(ismember(senslabel('biosemi128'), sens.label)) > 0.8) + type = 'biosemi128'; + elseif (mean(ismember(senslabel('biosemi64'), sens.label)) > 0.8) + type = 'biosemi64'; + elseif (mean(ismember(senslabel('egi256'), sens.label)) > 0.8) + type = 'egi256'; + elseif (mean(ismember(senslabel('egi128'), sens.label)) > 0.8) + type = 'egi128'; + elseif (mean(ismember(senslabel('egi64'), sens.label)) > 0.8) + type = 'egi64'; + elseif (mean(ismember(senslabel('egi32'), sens.label)) > 0.8) + type = 'egi32'; + elseif (sum(ismember(sens.label, senslabel('eeg1005'))) > 10) % Otherwise it's not even worth recognizing + type = 'ext1020'; + elseif any(ismember(senslabel('btiref'), sens.label)) + type = 'bti'; % it might be 148 or 248 channels + elseif any(ismember(senslabel('ctfref'), sens.label)) + type = 'ctf'; % it might be 151 or 275 channels + end + + end % look at label, ori and/or pnt end % if isfield(sens, 'type') -% use an alternative approach if it is still unknown -if strcmp(type, 'unknown') && issubfield(sens, 'orig.FileHeader') && issubfield(sens, 'orig.VarHeader') - % this is a complete header that was read from a Plexon *.nex file using read_plexon_nex - type = 'plexon'; -end - if ~isempty(desired) % return a boolean flag switch desired case 'eeg' - type = any(strcmp(type, {'eeg' 'electrode' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); + type = any(strcmp(type, {'eeg' 'electrode' 'biosemi64' 'biosemi128' 'biosemi256' 'egi32' 'egi64' 'egi128' 'egi256' 'ext1020'})); case 'biosemi' - type = any(strcmp(type, {'biosemi128' 'biosemi256'})); + type = any(strcmp(type, {'biosemi64' 'biosemi128' 'biosemi256'})); case 'egi' type = any(strcmp(type, {'egi64' 'egi128' 'egi256'})); case 'meg' @@ -233,8 +307,8 @@ type = any(strcmp(type, {'neuromag122' 'neuromag306' 'ctf151_planar' 'ctf275_planar' 'bti148_planar' 'bti248_planar' 'yokogawa160_planar'})); otherwise type = any(strcmp(type, desired)); - end -end + end % switch desired +end % detemine the correspondence to the desired type % remember the current input and output arguments, so that they can be % reused on a subsequent call in case the same input argument is given @@ -244,4 +318,4 @@ previous_argout = current_argout; end -return % voltype main() +return % senstype main() diff --git a/man/batch/batch.tex b/man/batch/batch.tex index c2f059e..8a00f68 100644 --- a/man/batch/batch.tex +++ b/man/batch/batch.tex @@ -450,6 +450,32 @@ \subsection{Command line interface} interface using \verb|spm_jobman|, which combines ``low-level'' callbacks to \verb|cfg_util|. +\subsubsection{SPM startup in command line mode} +\label{sec:batch_interface_spm_startup} + +During normal startup, SPM performs important initialisation +steps. Without initialisation, SPM and its batch system will not +function properly. Consequently, an initialisation sequence needs to +be run before any batch job can be submitted. + +MATLAB has several command line options to start without its GUI +(\verb|-nodesktop|) or even without any graphics output to a screen +(\verb|-nodisplay|). See MATLAB documentation for details. + +To run SPM in \verb|-nodisplay| mode, the file \verb|spm_defaults.m| +has to be modified. The line \verb|defaults.cmdline = 0;| must be +changed to \verb|defaults.cmdline = true;|. In command line mode, SPM +will not open any figure window except the ``Graphics'' window. + +Within MATLAB, the following commands are sufficient to set up SPM +\begin{enumerate} +\item \verb|spm('defaults', MODALITY)| where \verb|MODALITY| has to be + replaced by the desired modality (e.g. \verb|'fmri'|) +\item \verb|spm_jobman('initcfg')| +\end{enumerate} +After executing these commands, any SPM functions and batch jobs +can be run in the same MATLAB session. + \subsubsection{Complete and run a pre-specified job} \label{sec:batch_interface_cmd_cfg_serial} diff --git a/man/biblio/methods_group.bib b/man/biblio/methods_group.bib index 77d67be..dd96259 100644 --- a/man/biblio/methods_group.bib +++ b/man/biblio/methods_group.bib @@ -305,7 +305,7 @@ @Article{kiebel_spm_eeg2 @Article{kiebel_eeg3, author = sjk # and # {C. Tallon-Baudry} # and # karl, - title = {Parametric analysis of osciallatory activity as measured with {EEG/MEG}}, + title = {Parametric analysis of oscillatory activity as measured with {EEG/MEG}}, journal = hbm, year = {2005}, volume = {26}, @@ -1566,7 +1566,7 @@ @Article{multivarEEG year = {1996}, volume = {3}, pages = {167--174}, - keyword = {connectivity, EEG, MEG}, + keyword = {connectivity, multivariate, EEG, MEG}, pdf = {/spm/doc/papers/karl_multivariate.pdf} } @@ -1577,7 +1577,8 @@ @Article{friston96b year = {1996}, volume = {4}, pages = {140--151}, - keyword = {connectivity, PET} + keyword = {connectivity, multivariate, PET}, + pdf = {/spm/doc/papers/karl_multivariate_pet.pdf} } @Article{cog1, @@ -1655,14 +1656,14 @@ @Article{friston95c url = {/spm/doc/papers/SPM_3/welcome.html} } -@Article{friston95d, +@Article{friston95a, author = karl # and # cf # and # rsjf # and # rt, title = {Characterizing Dynamic Brain Responses with f{MRI}: A multivariate Approach}, journal = ni, year = {1995}, volume = {2}, pages = {166--172}, - keyword = {connectivity,fMRI}, + keyword = {connectivity,dynamical,multivariate,fMRI}, pdf = {/spm/doc/papers/karl_dyn_multivariate.pdf} } @@ -1689,16 +1690,6 @@ @Article{worsley95 pdf = {/spm/doc/papers/kjw_revisited_again.pdf} } -@Article{friston95a, - author = karl # and # cf # and # rsjf # and # rt, - title = {Characterizing dynamic brain responses with f{MRI}}, - journal = ni, - year = {1995}, - volume = {2}, - pages = {166--172}, - keyword = {fMRI,dynamical} -} - @Article{effcon_v1v2, author = karl # and # {L.G. Ungerleider} # and # pj # and # rt, title = {Characterizing modulatory interactions between {V1} and {V2} in human cortex with f{MRI}}, @@ -1900,7 +1891,7 @@ @InProceedings{ rnah_multivar pages = {468}, year = {2000}, volume = {11}, - keyword = {fMRI, event-related}, + keyword = {fMRI, event-related, multivariate}, pdf = {/spm/doc/papers/rnah_multivar.pdf} } @@ -2570,9 +2561,9 @@ @Article{vl_group title = {Electromagnetic source reconstruction for group studies}, journal = ni, year = 2008, - volume = {}, - number = {}, - pages = {}, + volume = {42}, + number = {4}, + pages = {1490--1498}, doi = {10.1016/j.neuroimage.2008.06.022}, keyword = {EEG,MEG} } @@ -2946,12 +2937,38 @@ @Article{klein_evaluation @Article{john_computanat, author = john, - title = {Computational anatomy with the SPM software }, + title = {Computational anatomy with the SPM software}, journal = {Magnetic Resonance Imaging}, year = 2009, volume = {}, number = {}, pages = {}, - doi = {10.1016/j.mri.2009.01.006 }, + doi = {10.1016/j.mri.2009.01.006}, keyword = {}, } + +@Article{rnah_fusion, + author = rnah # and # {E. Mouchlianitis} # and # karl, + title = {MEG and EEG data fusion: Simultaneous localisation of face-evoked responses}, + journal = ni, + year = 2009, + volume = {}, + number = {}, + pages = {}, + doi = {10.1016/j.neuroimage.2009.04.063}, + keyword = {EEG, MEG}, + pdf = {/spm/doc/papers/HensonEtAl_Neuroimage_09_MEEG_fusion.pdf} +} + +@Article{rnah_forward, + author = rnah # and # jm # and # cp # and # karl, + title = {Selecting forward models for MEG source-reconstruction using model-evidence }, + journal = ni, + year = 2009, + volume = {46}, + number = {1}, + pages = {168--176}, + doi = {10.1016/j.neuroimage.2009.01.062}, + keyword = {MEG}, + pdf = {/spm/doc/papers/HensonEtAl_Neuroimage_09_MEG_Forward_Models.pdf} +} diff --git a/man/example_scripts/faces_eeg_montage.m b/man/example_scripts/faces_eeg_montage.m new file mode 100644 index 0000000..232db18 --- /dev/null +++ b/man/example_scripts/faces_eeg_montage.m @@ -0,0 +1,19 @@ +D = spm_eeg_load('dspm8_faces_run1.mat'); + +montage.labelorg = D.chanlabels; + +montage.labelnew = [montage.labelorg(1:128), 'HEOG', 'VEOG']; + +tra = eye(D.nchannels); +tra(129:end, :) = []; +tra = detrend(tra, 'constant'); + +% VEOG +tra(129, [131 132]) = [1 -1]; + +% VEOG +tra(130, [135 136]) = [1 -1]; + +montage.tra = tra; + +save faces_eeg_montage.mat montage diff --git a/man/example_scripts/montage_subject1.m b/man/example_scripts/montage_subject1.m index e858613..7d8276f 100644 --- a/man/example_scripts/montage_subject1.m +++ b/man/example_scripts/montage_subject1.m @@ -2,10 +2,13 @@ montage.labelorg = D.chanlabels; -montage.labelnew = [montage.labelorg(1:128), 'HEOG', 'VEOG']; +montage.labelnew = [montage.labelorg(1:128), 'HEOG', 'VEOG']'; tra = eye(D.nchannels); -tra(131:end, :) = []; +tra(129:end, :) = []; + +% Create the average reference montage +tra = detrend(tra, 'constant'); % HEOG tra(129, 129) = 0; diff --git a/man/manual.pdf b/man/manual.pdf index 9684aac4ce7ba2ae0bc8b838766b70e76ea209d8..839629f0bac62a470b29a82f5dccc38723e6f32f 100644 GIT binary patch delta 2896727 zcmb4rcOci__kXV!viIIEvK3yo$jWL^_RQXUukgxV5iXt*AuB1nWfUnT5}|j6Qj*e8 zgd+93&lk<_=bzs{Ip^GS&pr1(&pr2X&-3}}TU9>k`t%BElcXc8ah$q3m7Bk7fU`Fh9*2~@Y;Ra_u$w>Z;T7!W5*iR3CH`9r zVD!0=VN!Nl5_u_E(B#O$WEv0_?Be!I*~={iJa!Z&>Zr;~$^AWuto+YG{^=HlvlDZ5 za}Nmia|-ne@V65OyPP(Sz=7n!5ho51V8sRMoVY=E2nDm8l)~SJ(&Ihbrgn^wCJ;-vQ z0%1-H;FFCoxbMV_Q2;Ye5@5G0S78N)7RWm@0zX$OaL8E$RJaN;{4+mAaKl*^EV*(a z)5RDnS6u;G#fWNC8NOl)Qe9JKuV8E4konra0G!pG_5;uiAP6WcC~P*-56 zej8B+JKc5yVGndl^hi?$X8WIQxo)x`)I%6CJcFSEl^)E1%v}oH_TVHgpP4%YSo5F) z{_gC6&65j#7|1(5ZVJ%oP5}%(sdMM(K%}P_lEu$Wk>^2ym6ZWh9$eswC-J!feGdjE zSsCS@4x4#}goMF>k@Av79IOABrz{>^fFmMaTyPCIv5;MdR_499fs7{~;Pa*eR-OVt z%Ud|liav<1C1ep44 z&hM%h1IYBD0;66W;G7RSKPo`)O%Fqc-&+un_=*E>Z+f8WO9c|WxqvO?`-rU%y@f!V zuQ&{}r@kEEQ6M`Y_2U9ffwUmnhY`lmaUVY5<0p#8{}Z^fioc%TK0hZ9H(Wp<8vnna zA2`M;jA&lQkb#}P^e{ZseE9*hKhZQ3UP|fjxhR5Kc0Lg8FAgSr88J%Wy)Qe6XA?jO zS1^=7%8wF?l>Ov@Pyn$%(zK93M)yY!kX4oe6=578K0pl2`Z0p`04l&3zzhP}i3@=^ zw8L=T<4=iE2KxRAzzMf$=6gGg#Cj-J0eHB}@&m<@vJNQv?oSDZ0*NMIQw5m-(i8$C z#VCLRD<=c20>r`IAPMAYCo~!o#0+i*aKhz#t}2A&gmIH0gf1wj4J7Ka2a15jATfmR z8Z_${NC6~*sll;8R4jmQKNeZm!@|h%ov*k;X`F3hH0l zFz@UM6Q#2y8<|!L49M7&rd~^MRJo&6UcD=KjM~c_00l^4SkPTh6iJ$_z$>_0oIiOW7 z1fGVmV3ib!W}NwjfI>J67KQ~(uIQp}-`o)=!s%fQl)+IFBZ)Hu^Wlt8@-18hyoeMA z`Vq{4D~bxZM(_ZYDB{jSqz5qMzaNtdXo=Xh85L4W{~Sf~GQakOX_&J&JcItoXY#~ZXVEo6h52nG=L?V8GM5>eDp3L6e9?ZMKi(> z%ZuIt5@LiA#}N!Ecp6O)+GD7|YBVc&vMHnjsz)i|8tNXE01C03=rKhGvX0UNzgQ|z zb5t1g2yHIZwH)8y3k46SjiaLAWh^{5p2HKRd=l;oqZmrS6GsjHOX3GAaWE&w(;^yE zFtT0a;5Le31LxyJk!dLS6{qqrVzg3lFvu9gg^~B46Ub@**!S{^z&{oTObDWg!*T){ zXpf}<83ZaY9LoYTPEfoEa{bvKdkm`c#_qk<@KM7IBNI;#b{?aLv7&a252z%FOZ=U{Lk{}ZE8uso@Vg@3K zJYY3R7>Qj?AP4@?zH~AbNJ``Y2a<)6jyLdp9Z00aqSz&q2b@V3LG0$C>_IX!P)K3{ z z$_NPQRG=zV0x+lufyGo}o^id>C|9PrYP`FXM|yLEL{U2nZ#8hQIV1ZJ((QfTe=vW8k#xwWiVr5 zmbA~{278Zl0fuBcL}o34l#+MG%t+w_z4>ZIR&>xcj>^;jYf20*^CUQH-)FWIs-ih0p{I{MT7<3OEX+ z;R}Ww_#UT(*(3b85ZIf|g=l_-@f4iR3LYP4g~@`kPyjGwF=FI$pR!{WQ51_qV%9K} zzY?jUJn+vF0A?qMU8!IQ#GT*(gIT`$YuoZPEgSr1^9;qdb$OBxp;*}0Za~z zTS_b)@P^HMa;QLZHaGCj;Q}9Xsgc9q-~{@!=|L%Mc#+KuQLX^MonV3!mpdTc~n3@X9w7wNA#8g z9M54y6U6=F{NT(_*>nygcmfsIb2veQ%BCW6kOm76uUr&)7~~2AXCRI&&|tTNl3Yqq z45$D{9u4ToKt%&%{z(OH2l#n1ofbyg;IEbK}BO(EBIzpfUVSy;M7lHd0w(%CB_a1za5Fjbu z^eViF0jL&JfgC8aDc*W2ogDC~JT0PxkN362s8{iMK zXDIkmEMLe4r*r%yB~U#@1$2v9f%PeIq#PAapQPkb`ZKAAx&{BvEJ{kCqEZOK@nT8A z&SHAT-`5|*0RK=3p}~(+!pLDxEIpipbO{HUZeW0mC$KA#1!KjGpsa+7QY$#r&D{yY z3UC2RB~GDPL+unV3P<4ML@nd~d7Qt`7z3{m^hyluOCc=(3iJH^Qw->V_WYC>=qMEi zQYCcYLn$@TFX0DVr@6qf5n5+kKS85=xHg6JwBF70?G2tC#80pLGd?+H4O6& z_3{gFb@Ii*8N2Or3lH#dbHxR_g#^N!;1+`W(`qx50CIQ-mhu;DP=-g7!#+;HQNcr; zED|UJpZMK!Dz0CT=de?-ldG49AI{0&6{q7A>IBYK2qWd9Sk|3CpTDyFubG&J28X$X zh6O`+3{Cd^Id+c_7ut({=if({vivWQr>m=vbA2(HL}*0Nw!iU$vV!c->!&;PfoKv)Rqg`g6^y{Ql8Q^;Eff|?JaDF=PB2bf{~Qj@ zg_>uW*nVHyP^X;yoqVH0yh6Zwr3@LYR!HH2Oce+7R;>TgpO_`tpufa%3k|>p2D=3Y2f&&GiDl7j24u)>QaKARx$OxhH z`+LtRtNeOShv5)T!ES)BRz@0CRQY@Hes9j78ym(q>L$EMgZNsRy=Wi2%wL^Ue%~>4 zBLjT{f`3ldP#S%to74RL=v2U`d|@%7oxjUwD!(rw+D;)}E;wD2!y(|%Ss6{D^52hH z<#**nP6uat*f0cEy-eNwLjr zj*eciYyh1X6@`}(alP$(!X|4->b<@Xf`-8Vm@_|HkB#Xh(xX%!Uy zxuU83PEP2<*?j)LmT+qqg6TRL80-rF1iQ-bBA}M5cUVX$8k-&-aOS@7y6x{01(eUp zz^b1D@Hxjt{`15rJSQWJ+WLDFsL1_V47mJmzFz)r;8QXy_pbEcIEE*8I^n%@j!qC;hX>FyOKfPfT z5z-`jga0Qye`hLL9b#ntVF(StKaIq*3fXQN`6p}@e?j zjHa5vfQUbjZ51^6aS~4v`G2#H%5Q)`Ovyh(@vjhu_X*-7)l&R77L|U*!2gZKUn&02 ziE32~8$ciajmzH&6{h}BnDo3{;5>dg11I=Dtbq|TL3Oxl|3uCosO0wv?ByTo<`GOR zaQ`(mSXLn}jLg3|P~~?zHgO{^?O(NB6L^1snG^p6G5>IS~d4UBs{~cAbGV+8$lajkd!LzG>i} zSt^3zY8g}^o^>;Z;7tERq7T%F?7vf01o<^PpqIIJTqtOQj>!INLp z=nDt96X06?gVbRAuUrVz=O#uB3;dN_U_ZD=&_({|)fZ|w<{W$s@Grarz!ic=`(I0l z$Ac&5cAz7}!&+ML@55U5kJoeNpw>OWD65m@NMHF}%+Tr|sqJ>lFYKU7+Xh zSBJ9j-5e*WEmQ^1&vPKP%J9t-?JY}ktdcU)9BU&%2s1MbnNVctdTTjtFl5G{zOVdp zpK0Bt>f@%8{S|L8xj3*R@327=-;Z@E3QuqE2h8!aA0{rZhieT}3wpNVek^S?Ih=oJ zCLj`6w?AV=^k(%99@c!P3-V9+M;sn6jT+4!u)pi;(Oxp@D{uIH^}Exj^|((iT9|ZP zh8U}rtPmkA{(!(p#Szkua<21Kl*cO1UVh#7CI5lc|(ye{Gp|kLyMp)-AK!usYps+5gi+6z3Q~&=@u4GN)bbA(r{3b zp%nqH2d0CfTr57~F5Ocv6~YHXWlXPZ>v-?X(xcrUHSB)=RNwInS#=L-SxodJjPRzn zCO7V{@$mj=nwn-he*brejz<1h)D-)Ko*e#Iz5fwUo4Ef)FS~bI-p^idT#PkyuDjJK;1GOE?!OXSKs9yD zAhnw+Mae>fqjWBk;`(*Qz7S(sj!R!JUND_6jUTH#bd~ZUA?aE0`?ozE2MVyKC0-wh z<*b?QoLU|)4kGP1oac2P;Sox_BzxD1a#W}>q}oY}{#tk`CGYm054KAt5z@~ETP{$N zoRK?xyF*=}q<8)<(=G+JTju54NKM2SzWCOAd2KD@P#E34zH&|;K6+Y3a<$Wzz12rH zLb)0oB5(X4lV40_LOyw5nc>?RBz}rr03(Z3-1B6He`GwlrFmuX@(S=aYeFThq1%#W!5H%GH{dOH3x(^XN-bVs?_=kXTR9^zw zj_%Ctcy8L=&^UT=H^E8k;Z>krdHfcqj4~+bLYrjeP)_bACy#Q7@lh{+R}{D2^Y*ss}|aTf(NK%4>cTm!>JMsyZw zzC+K91d3tcD+h84b~2&|NX1_4PK3${4ltAk@sD1cI^n>O)Je*dRo?d9W^8Y)m8V4- zum>O4$S$ph%vvV;wMQ9+B`O(ohCZLHuM80~_Hj3U+snIaB4Vb4pZuUL&aRrZwU3_7 zneW_#XoKZl&a<`!NaIim!X@O+_qp+35teML1R!G*Wa#?>z0!fY#J6p6TP zQ5cXA<>tAKJ(9EdarTK^{UuK(XNG(I$~J8Y6z7hdYjTLue@|1bB&aeuC)Incx7#fN zaR|o?Rc?DZhodh3p^Fu6cu(<6DXZ%9?o%P(uWwIKUm{S9+BRNdc5|Zqa1$YT(HNczVqI!% zIV)X4@#G*z+Ej*5k(_0+!`wZJ@g$?UyRY4;rPs_${5Nv#C>=drlR`(D@Xbl5q%MF)uD|n>r4rM-Zs;E8}^U#ykb>vcqv+5M9 z$8lyy{i~8TJD~IBGd6<_&QIhbkU*YYq}zb!9L@8y}IOEuLkH88MUX{ zP%=LhhQA$SdXzmtNaqW8XtwyUPR&M>NO5LRCKJqfcS618b zw2;Vq2Nw5T@i%J}3sU$`IU|uj(WbrCH)tcz#b$jl_8jo8_4T@^kY=lIt>Tamq7wHKGX>;1V-m+1!i z!a9U$IJ%>@NQzYNn^AeZBi0CNQx~ zp3Pt&pYXOHcxkMhj*NC~dpPe-C%2j!TIo8@tjc<48(I6?{mpOmZ>@|eraXA+Gi5r_ z*A$0DU6U-*@v1)})k!x`<#mz@@9gE1X?37K_yB*3AFq`l&EYGDw{d{2oj@- z*^kKNz>>91$00;a3!|~gee5tn`iY!7h8i62G)BC&F?wJ}mo-AQ7o!0_UV|?)yG)V# zpUjbKX2?MuVv8N}UI*&tT{lP4b)lrYn*vC6n<5f=M8*~wK#7k%6u`OX5aO#(WNZ)` zgDu_M8^*{518704*9I}#2Z=kq*2uy>*z9=I7RlKUC74?_2>t*hDj+e65?X!cNWeiz zO!nCz42F=1xowR!8NwOmaKi#M&mC*T(1KSkRvvU4_F}%#ze*mSw{)SK_{fZ1f!96&l$m+V$?x7BnD7IbI1{K zHN&Xq-J<}nhHQ{hdyFnfzHfo-F^5M}EGK*egd4U+6y-21NZ=5>XY~x*Am7Ab+lP|^ z+fk7Ma2>HkzMDajR0T#U?}0U9y(gXp1m41f(+{kWv(j6P>Zmm$uNKdOIKF^(o{U;C z<5kdLfb~k8ni`e#=3$8`!fqaxOg~Gb|1<(*48C7i0nKBad@%BUo$^XBlvFlDNm}ps z84JX()RvRN(O0?@X4>MUKRq~ zHcg!vcFGfG6ni!nS1x-UQ~d8(c=+e2@Xv3?9{7&Br+KyN(`q}LR0U-pq}b`VQXV_r z|FZG%LYWc%TqnJp>yx6hpejJ+T6;;U-B3-x>Iu!b;In-3Y=alyO|P9_vEEM58zU{L zBN@2aJ!F(@=xf8g_Xx#EW3|9|1)tuKiOxKO%X#T8%9hUrKz{Y0eSv>4k6YuKAj3f5 z``vAg+vf`XjcA-F`kBe5k7$fbJxw`y+m+g8*;CV%&8P5iTSx}-DLCOuoDzPll7`7h zXO&ORelC|r=VhdSBIozRgZ8OXgvKvfJk z`pCQtr}Cbf@%t3ESmyhP+t-Ghh9Q%+L)z`m;;kGrCp4d84X!D@P*i(zyKpDz;zjwS zQ*0L>Y$Fx4d8w9?bvEuDS&K*jb|)cBjwPM`)tmYWQ(jxLm?%ZDR)ruWyceE*}|ddB)oB-X*cv*%`~=CRsoFD)sI?>DF1ZF^30^4|dgyn>xt< zcXRudADFf87V#EQan>RN(J##h%xDWqmu(tSCl?N1ede}v^vsXGGyE!dF8w#RG2~f~ zaSzKEWzNh0a){eJOPtT<;`j&G8I z%NT|M}FBhM%o|b>QHD$vit_dJ27o{luE&R5nWL`!cdc{Y$BKX<{a-t5QBPnkPp$ z+z9q5B}&gq4Ez%g;`mB>+O&+qr}x-aw3$#STZoSyndUTo7IaIHB(6QJG}YblP)bjJ z1hYS*dtA8AY4N%-jhxk7-}09%v=hfvUtgq9J;84B5))H$qA@)*Ng~3PfDL2RG4k1Y zmvTN}-A8r&p$Y4ef^#oq77Md7DEnM;Rs{zLBV2Ch?^?@=(#*tAeg&{wtE^HJ`6TTza8beqvmHMYCEgZ z97- zE1wgpt&}S!A7Pq0BDPsQ#)xTn4`?dPcm`Iw?II{Kk{yYY>XVQg^V`Lq@H}wMLwb;Z zEZN>Y)g|N#$SX!ILHl&V)Io`^dimba zGk(|4UW!+^S;P9D_`KOUcelE={ySB>t*v+Nm9vjp@Y=wvCA1v?r_Ar(uZ->788)KBtm&|69Go+hFWn6m|jvCJs$Kp44sm`P-1 z6%fXGwq5N17iyqcAAgzR2qp~!zna~;=0RffiU)};1R_g(9|F;Z?B)dxB@_|S6pT3L z2(r@wg%@cUdeA*(iX^(gGtla(EwaNEqmGIxz*oq1xy}cd%`wN8fe92#spdOgvQ^@SRjR7 zP<)IIOAXRqS|GCCkjps%m4s$(ko(?Hsdv^E3G#u2%PSj%*%zMSD99n1Ge<7^LTTxo zEn?{hi9N4vk*|I~yFYzxgB1EhWfbMay)j3W1E3DaybbaMB`(j~A~AuGuzYKS@CHF* z<*hYxJqUJanx_B-?`#m;V05S+IO+GM$Og(d-lPCS@6D02kS)gRgE^uViqS=~-ofRd zSujCfKn_$c*dmExs3#EMAj9wBYz}@jK{&&=MBwE|8>HnIm-Gq3sfaC;LW}0eYshSZ zqw9;-NKz!^aA9x&hb2pdFA6F`JcML_g5M*Nd^Sbep#%v$0NYDHTO$_Ho9#et*$Vme zlXzFb7u#EFzgXU?SY6>${bU3mXQkN(t(Uj(Y~h?{a*20-qY;iJ~EWRAUwj7NI$Lq zeIrI&lZU!CMNNeH(ar1`T+G7whJB0D)#6AHq2Gw;HySl*Fv@Ag?zXl!Vi0WYE|Yn6 zKj*gSKxV(k+?Scu*$MiATb~zZ7aEPeJnTr1Q>qBOu$UE3h`XI@d4#9uP(a=h!$Hs* z(ZuF#`{Vt?A0M36dr!--JDFO3iEp*4Hf3Kovax&CKA#jB^Qzf>U#t6s&4kjtbG!$| z=?)5Y4()LhIr*^Mx%Htp5}kP}JJZrlUnk=gBc?;v>C`(C7(5iiNbVmkCKtR38X|7@ zN-?E9xu0Y-1Q%w|ED~Kt>xBCjO zPpbq+u$FZl+^12Qr8S>b;e0Yl(#z^=z9HlAbHTaHR0_2p%^h5y^x2|Yw>hQnoj#Sm zO|XoPjiIpnxqxR5=dF}tQ%CI7HysM?vDt42L(Vw3-n3?MB2)x#Xjhz>e4=V~tdYz& zpsk&iQ;SXgP6EDFSxJEL;iym0JG16b+I?#gFJ8V~jNlaCl|$h#WO!b+e30D;N0)&p zU~ON#G;FdvSFpd~xcqT(%h6djoWL!r1ZB6cU%k5Vi^&U4KRyV9+z+60CDTBw=>)h6hd@~_W zQ6h6`=OgNrlizu>m)M4{V51w(?A&F>`$qO;?WdZ1*C^&H16Qe$wwaS6S9hLQkm1#g z9zIa#-?6b~apv18e6rGop#lE;RNo!0J?O*CvtYQl7jL`rsHB%LTeo!Lc!nkQ$+=zb z@$vNnmM_N^#6PzSs-4s>X+umFxGiW8t?iDgLb3K@*yl~%W=NJAi z_VvN8)1mj+_L;tl+1WsFbI;k+IG)XG!1?}r@|(NYLTmA53j$L@XD40#Qz&cPNN{Bj zXI(i8E&%c1{UPH0UtW+sEqfC3;EI^4WILuP`J?QUE)}ki2){vM15<6-jRx7enYlxf zx*k0Tj5>cDpyOh)(!J54yr;4Cj?g^|r}K*s*@PKgUY+TxX`PHp{!EzQe`}?CPR6S7 z#<%*Z>}CCGjVljylYeMG9Xn8cp|(0`K-u>mk1GAxc4LK+p($y4De~84{Q>*q0`!B;jINv!z5gMi6NBoT*$*uTk2K+zKn0vFT@H+pBOz-@URrn$5QB!Hn`? zh`FBNQO9J5Zr2s9&ktT@?pe_?HNQ@`{IQ8fgCTVOtH51qrNU>Q%Upet|4823H)Xd< zWyxJ*_RzR0qrAjc!l_3x;LiDB{0hT8vFVu_tAKME+GSGd)v2)&PRT|B%C zL7yl39*9JKyD4g3X86vvsx@(Dq=#Skfq#8X|LH!@{Dy~4HNhQL(HeszOJr z<>=JrTqRzwbh2k$I_D@w-JUqa&eY>L(R{6%XR)oH%w=>%K;edJF)nA?QmAd^09Hru zH9t7PRzFtq`hwPSw^Xh_Um+ojHg-|5Av=oIUm&D@BwkG?m2G*Q!v27LV#l|Jy+_Ys z?73Y(@wuwZkZ`}`r+dfN@MwB%UoTfeox@~u-Ie4wGTCiym|bgPMI2Rgr>-1+dqw5o z(SnO*Cw4H5lCx3j(r;|vKEBBDP^4jTbU?(gAl|lZ>!}X2N+3PXY`lcqLVZ|&p`zlz) zE&j`EdY<1-pSphfg65z_QR-LAJ(B8Gh{|;HSkI77v_FYSK;o=|tK@%PF;0Vo@ge%F zVOO5G-LO)A@K)NQfY`#P zcioXIEBkJEZ)fsz-e7%sDZ2_6IcVzNL?6u+IxJsiarfMlW~J=!(a*21e+iHJEL}YC z{={Y}iS-hOSW04%!xM|~f7Qkhh2FJp&WisYlCzZZpjrGq1+yUCQ$&0 z3^QV^kTnFV`7uHN3yYu{#AXO3GsYUhpM+}V%ot~+52Z9&Fm{MzG1Tp5!IC1gEO2(~ zD0`F@c12FXt`G+z>}+rZ<&rI~1?3)>K&^x97)vCq6!oKr9C^(Sdo!Gd@;DCIyB?)D zIU%KAhWdtLx{I99@tI$&ITv(^P!9E$xZq5270?m{iwOLn*c|DpfO07wD0e;s`=dw> z8Rmf@mDUF2d0!hzoJUq=<$P?90;($43DmG9?7v>4GfUF-jPAv}hqZLymBYKyI-G zx^Ptlx&>O%xj>A^V1^+@>_p*O%C%wikR?%Q-r_QbjufqXA<`V8@YTMY3}Woa!X^0| zs{Qr4Y7@8pta0Hti(L3x%r1-~5qO&g_!IAPXqAbdiPY3i-y6;gKJ)%DyX z&Ifi6sRYZi0qe+?WBnq@G+MIT#Ij^HG{&d4Ic(ea>3OcMzfMwoN4f3gbN&kFl5Kn0 z{HN?U#=4>-Ds8uO?sKbG^<=z}TfVDWOwj6b`^H1W;L?xR-@koG8L3_`s=6aXm-)r^ z>5s*_qZ@Tc2@4-OZ_K_RjeB9C=$o8*|FX}e-N&ht3X-U^I24`46LK}%rgBU4ug@yl zTDL4$@4#ms?${v{cZ=SC@U6zpySKUar`$2fvvygR&AU$e z(J*ocQ_=SUms98NxPLmE6kBv_Chp3?BP`vlCl>i4oz?6Jq_;lXZu{_Ae6KXd+WqaJ ziPuzDztb|lpO|&M+N#4uYtF%maeKtRFS%{_V}Gu^TKV@+tKq2(nxEI!R;H$w-?s}( z9KV@s@qJy7+q;g=g-`~>M5_-7NELODY&1p$R#?jyxqiTUW32>7RAsonAAR61A04XU zyHfP1_K8d2UBjw-eYdTQ`FJ?5@zvZUt2>bS!?!o_k#RuY6NZzwgl@V;?zh+@Y&ZFp z-0mn#&)C;m?bd)UQK?Yg&ISG#pN3yy9%ya1KV20Pb4&KcU~HuiVdUPOD6jaGVTH(u z*HWqGwa#ty4NO5?&h;6#{0^goMsnm*S<#C3j}&}*_CrbMv4?8YN#0f8U7a$*%Chf1 zemr9y*_E1P7-nX1V{$fN;cY)IW@SdOfikFHTGR4+5wGvF>B^;PTg-Ke@8rWX?|e*L zgH}54k-sd79ZqU}#P3013;dw|C}*@>TQg`A^4ZU1IYk)Ud;c5GWR&FFp0c5ym!p8eIkB96`GmCG~rWQ}hR z^nNch*|u}HIQi^>`lBKaJ;lerw{_X%R@>Mmv??oSI(ClQ>IobUzbIIL&J%O1i2d<- z%Y!Z3?|YJ+#=kv%lKcEs1A^v+$)kP>eYWGp@%Q@nQj>IeG`b9HJj z;|q+bdMV=Z$|4u+qnBstC+B+!KfYZ}W|V7Rei>kBOT$?6+qN>c! z&R8<9B%vQuq{F-B$52nX?I;MRUt;iMNE~dEat<9o^{t4NjmpnhM8NjZQ|5cTo2{O_ZV*Rt%HA{%e*JH9_r$gN&)hN|Np z>CE;P@%2ljK09rsii-(6Ws6G&-dP}YpD(5t2I@!9eaJ0=3;=pyD{lL?DvEu zKT-{eRo z&J)ys-DjvIMT;x6#)+0iqT}s^_ubre@!NV#_?wi^v;?jAoRMS042xof{b}xJ%l*aa zjJvXQKGyFGW2)q0I_>hI#aQFV$%gwHjn#Z<_jO~sRGcbTSQH1o8IK=}RBSUmkI~?2 zxYXK5E4Ld@Id13}n@`U9+Qe|fgm8X$^YB6L9!8b)eSzw3?&GfW(~oMBn#-EhZm;gl zT6;}K<1)@BW1@{=3KGW^8_FVDNvSf`fU6lrtex^l(0mBaVBK-;;zYwjC9CD~D41dB6f zJ7{?I_eh>>nL3y9HI+Llce~CfIw#Wi$G1D1%<7Bx*y%CDb=M(7wz;~4H364VXqIkl(92iKWZtQA1`$)vmI<7fycr1LHKYO-J~w zB6gA3e;zIKdw=jY*SW*{kAG7S(c3W=tu$7&9&D4?9zFiCg0xWo#6I;*{r+cJ0RjpH zQTEU#@haP{ANBU8@2@;Net zH)_Hha+Wv_;>eHpZ_AdSj$Am&RnGII`5qU6WTN2m693X3imByZ_i_BlY_I!H9>w(_ zo)f2+gy?Vg=LIPrDVzx6qYJ;W+~&lRwEq^FT7S)w+r^MdwIUb(ySnuy4gZC#(SJO} z%oKYt7Ge94T|4T_v^weZAoWQO3n^`?C}V0_=*;-O%ZoT&i|p+wK_od6Q8I;UZc3+H$4zae)i35-FQ-bx}`p? zHGBCsabv(E;#3!N@n~mpn8XjK_G`@V`M!TnsHfy>KX>jwjm8ekA0*<`XZz4!R>I#< zxH%zf9`J)?{Iksq7n__SvGVuVg-Z@X#t4T0T~U{lQNC>1fC+~cbvcEt7x!`sTQBbA zw#taGY3s$koWj;6Oin?i@G%AluU>cBAkMv~03rD5Wr&&48afi72!S!UvIU3XwaXHb zzY1Y;y%JO#yNccg(5sW7GE@s}hb-~N^+6eP2x08lWGRs(6?l_t>44pMc0&V3ov?v; zWxKi?BJu^4ML!cj%vCY)WqB9My2A^`M^$)Vz+WSdO@U;p!NvzaIpIC9XUO%fww^t3 z0H$s@fVDat;C%O%d_^5<8TLSVt_Jk?eGim(cT*#Znivx#`v#QX(}Z%VUP$?CLF#@l z)Icw24BBu)J~yGf38iRmLF({csB!+*md4^FkDJ!^MNJ!v;!O7((UJ z`;hv08s2Kw4B>hz4MP?f!M+bsO5qSxe)R-W4-Y{DF%ysqJd82N$RWl!?4HeQ6tywN z94n`Q7~`>fk!oYO-bZTT{YyQXVzYRTXq#ZnV2|c7>>lDJYQhAr2bWxHcvwD zw=P#^h{+W6nHUV`%%DU5(?2g)T1^bFJ}-vh#KNfWp;l+J{_9%xPjQ^s_P;+XkW<9T z$`OC?fqp$G2g~Skiko!@$iaScN(j7;?ZnE*zF6c)Z^${w+z%V z*Q#MJ@87j!fUmaiK>yvBGW``Key6x-_LK0bURR$A-7$d8qA66W$jsfQFt&bab(i17 z6RLG28fd4}VlsCRN1ORD8O}Q(9_tyLL3Q=h^79Rr>xL zQ&vy2jx<|DRf;Y=YF#G0(EN6hHqPxVJ*eE%t9?x))K5%3N1!EkS+1Fa(~2(XRg$p4 zjB&6+6N9#UK25pDtK$w2j_t9T_~I@=e`@b1xrwJkBr6-{{}twRcgtbg{)-RbX4_^G z8Zs7}yvBGa^ReKI%OnN|`&z{ez0bNVj*LtUR)~;T-r3fMV4BDaa|k^Fasrt2XePag z>lv%JAE}kA6gc;|7cL3jp;q7Kevgia-=DJTRBzM|hDd7vyLs)|%}!eJd(L-e?`R71 zT{<9fdMt0(Q{AIrk*4+%^L-v&L;GSu!n zs}p!~k^h07*ngt_Z5NuZNM&Eh*1wYIePFh*J8r`@OP`#|W+*}4SnDjI=kb+oev}j5 zLKdZ(I#f3)2Qri`aVf@%nRRA^>$Buq&a2tx3KHi>Wt(;c81S^PJUYVqi2eg}G&9+5 zyHUZ)=8Q2>i5Jun4E1J-`RaQeSmKTn)YQ)<2fkQ0;qLq(Fgca{k==y5@j`mLIfcgP z)gix|aXTB|_kJgPrnHhwQGAXJ@C8E_J#i3g2cz$CYPh4_ck&W!vE#zL2#qEKsUi}srCE( zSCX;Q32XVRYKESjif`tvnxC{^d6J~jGBMLwKR2`Uguf><@;QAXJF^*fxj3l}m=UbU+!G3q1zp9i+-OW@x_I4G+mVx|dJ2jr|tqSlf$@cVF zX-@F`;vF0~amt1FB<1|zLC5}sLyca9zVo#>j~AP~Xx#q$f@ za{)mc8i(X<+d>C57RCI}PiWCo%hKhv24{a5Nh<4-pO|~|SY6>jdU;f1-%7SFk0XIr z-NA9&u$=o!=hs2|ug4z9y{c<4Y~Xtx%G*Z$C9G29)T7H<`BcXntZ}T<9bD5TP4!~T z*==S?e&)(j2CoT@zsr&FsFy#bxb17olS53W({6* z3t}5C)9_jT_^fUDex@(K@2IK&QnuJjm$S%;nKw^=@Gr#bZdS;9sj3YTk=Q+Lb8R=T%%xn)FW6i zXE4FY7Dhvk^8o~C0es=opnHuHDT#)NP9DLuVWkknK$u*APe35O!0{Bw{kq{VJkzZn@BS&(C5ST0128cPeh#;6bmJ$BOn-#YkCOhKXuf18Ez!ip1YVI^FVVQO9SiV(YV8arku^JAj|(+RJg9>Be4|M3C%Qwrg_ zsyF{dXl{#+&lb8nl+MS^Sm=4uOc z_2px@Un5=5&f}3Z)Qous^ZEjuEjimui%fpV*5#G&rC46auzg?k8je5E-jcamx8vl; z-tyivufIx}-Sr^6qPBaOQ!ci`Sj~O!*q036NU@@iyNiyEG%J#1Z;NF6igbOLqTNaM z>8MM0nWKjEx#ie>LKLZ`)`X27kzSJ9Le=)<&tcQQf`&)$k~qj-U6k$*METq>fSueM>WyYv9* z9FCw}Ob;Gy#Jq~LF?)0P`i1k49JM(CNy~KH7bycH`D+oa-n;AN)q7P44}DJE)Zr7h zB&gTd>2-Bz56dR<`%u3erFuxWm($~R!LAij^{1q2+l`M+b{m;{T7He`iJteEd5ItY zxOW?;sF6`_9zT2UgwqpEch)M_68h@&?ye8xZt$0W#gAQ8-WlaJS0bdUU#i|X_FwJ} zmYhm#`*8KmRJhUrA4@N7+9F}4h1~kFi=v&y9*I#!G5*0rc5i(bj>K3lXj^QXQm7>z zxV_r9zidX^E7Rv}iABPoYIo(jH2Cik5cyJ+hmr+MpI zXS?q+jW6bWaS2Fx@hCFoQ5jNuiHlLJIrO@$Hk3-rLyGJz#nC0>2dpPY-rGe#eH*;(vMjZO+5$Y247V z6Jut*EtM`x+852edp@mHJJ0gXJJ*i-8;V0SRt_(Jzxb_S;gy7g(*Dj%FN6=d)wTT1 zqkeOz-T$`mM@{=r;-(1h+t{#^C;NTMJvV#8?><(Fmz9>S!9~5jU)8_O_A|5k96fHI z-{kj6n_Mr3pX3anrB18PaP{d;D`i-KiV;BP11g;juhx@Y>|)q|)4X1$-#l8OueI#-_Qwg5iAA^WTZ)CSv<2B}t zm{h!yNH;sgod_=@{gbBm# zk$7%YzZdpby*L3g9!=W2?QDo5HD8hk85j)qJhE4-&eQql z!Nao#tn52?x!0m0^&9uRN||%8bmu2a-)+n0ZoAwPuF>IJ{||+ERqKziu78;sKl$vs zfV-pK>c48}Qetkqd+FGZVatZU+rK$-XyM2*|0N%NcFo>Eq8!rUuoX$kfoXbn=J*Fg zB>V?Qhd=reHFubU|7G!s1pH&KG}!ShiKLB%6SeUY2y1N%g%C-VEC%{kWm^YE^P1ats3mi$LlwlL~DmGM>AH*mcoXHf~yq zjxQQ1JJvQ4qYNiv)4;~K3qVFfCL{sIFzq*Y?=WrhsNPJM#2B-Cnn_T=LqusDDW-*x zUcDZ80ZwO~M>lj!cET2`gA8B+!%{#1TVGNS{J63U?_gI7#q;jMRNLWag4< zJwlu4X0i0hW3=UpWkPo$dP7>2yA+|yV!6njM_7$4XGWqMvoP^w4kk{6Lby^$1#2o0 zQqjt7#WKD-iiYy5__^gHbV+Cw8dhXJC8@%D^wK(Z;Jwm=$)B1TB?(Gjb=vV z7?)}T*i$ZQg3#hXsNvww1Me#qq4JD`Cxn`Nlqm{PupCbOj?5h4z$9Wi}*aenDUNtcPtL}w!07v;taO3pF!6m*N)i>~fkZK*NXxodq zzI>pwM%Na@M8b<1nM>^)ZMBfI26hg_cXpFR}K!s2; zs1LReYJvz!-B)bJ5*v0PS17<{gwsJFLFEpC)K&;(mymKPi%;8y{YE=5%7GksE!@!! zWGIth%Fr>fQaCJOo;I6HKG|Y;P%sf{cnL5isaR+$go5FvRMcuhcM+*GK=xU#9o{N{ zG-Lv7EvyY+h+$$Mg3dk2awmy~Y!2ye&ki&bh)XbJ?UV~WXQaB$AJOL)q`;+$$>p@c52;l8K<8nN90Ylzc? zkMDwj?h@=4z8vQPpV8Xft5JHyZ9Uenmm|9;wy8U^@>hs3t`BR3HAdHt~;>AN{7TaM+yN~10e6cR}ykUTcEJE`5oLg{K!mpz$r zE*L>3Vk`|0+W-d(pGTUvu(~S8ICV1wY5s?0ko%`W%E5-Awf(3{@E}y^6bf@#^IDk0Go;1BgTn#)fVmIiPFA zc7&jzianRO3E2ir)dOk`bT;nF*bF)OY8Gz)kNE!ojuUfb)A%qNC5z(o;H3L9 z&Z2KWxMS|?4N4up3ekmvH~p_~EbniA#dTEZ&RV{tQWAVW!e`ZZXZ3vlz*X{!N0FxG zPAiKa{d&}mwLV{M{h=*}&$c85EMK2sG%#?(#}#UJ9n`C$+UwgszB>DD%FLBMqq7Ed zuk761@Ub!};LN9~MUR4ao*vS2F|_oVLi?uq;!no1A2oH(LnnM1lf5tHe!O?nIPY@X zo92G$ub#C#PM!|gn9!JYezN;O!_LQ2W~9E_vofmp61@(4#!Ni*W3vnudi}@zjqLTXA+6(^4*aZTW4kPES=RZoM@VvQqK?}HwYZoCoh-%) zcqvsbo2>bo$w&2m1y5(clYhLB+o8*4^F$BfceR^4+7;+jq`$~0zmhSmBiCkJL?%otlGHJq=O|E#<3n&ME$b#Ip(zx3%uR*h~W&+O98gl_5|iaV6;8+PX% zuSV1Jv7jY~#nIg&w3|kUJ_Yd3F6%A!`oIa&HDZE$4 z99dRtwojbBt!LSb{1Th-C;ju|E>Ae|eV1KC;I_+4CM9VvD2Z=3aIcG*R4BIzykItj8;PazLt^U^W^S-(B+4F|kU2%P(?z75t&GeBD z3tLtllq#;xpC|3}ruVJCgZo4sUFCmx>!{s}l1z`7fY`7X}CWxxPIn>mg(-gIjx~-BL{YRcdX2-d&~AG zmTt@Jv(|B2yDLUnR9xvZv|w-HzEZuzr9IBXcUOe>*qwPlEZpt*vRzLO1zc~QaL6Vz z_}R7ZXQBpn`L<8uaHrj>qx;;hzyElqDCKdd`8&GxyJm6r%vwe2mm{N3S9M*J@1A=* zbrENA>fd^EaqO(D+DYj)YsN-pcy!*nGS2Ge42_wG*qgfQbPrk+u#FpUIQ8QEPAwrj zrTON&uT)n~T%}0ev%zlGj-tKiJ-==4G1NJ+YpuPPL(jWft7rAP|NeFS{DvNRcWzI+ zFUuQK9nmXt?eLCWro3u0Y_a`RG$tp0UdF+~X#33pW#K79a-vGB8ZUJ89vwX_!t9UY zb>jZ!{R`K98S}?6G`{b)Q9G{t1Z|Y)1t`dY887>cx>z(`ylK|dCqeUG-TM80%ZG_Z zow^QwwDrcVsN5F?12=VI0=qMHF^7$X6`_o-_}@V{7~TqZb_a6Woqb9H6QT{1 ziSfN<>K}-iI$Z-{q~Lqi_KPxg3%|6XJ&H=&{?vx{#QZk2Csu~n<8hTMfPPq%ja9Ay zvC0)drVL$M9$9K*#U)pSZ2-{(wgg3!)OzK?qLad$NvmRYVNg;RTl6?t#O}ob%#%}- zo-YJO1LmZtilQk2S^0jx7OAzh(kJ@jwmvx$+|2`XnJ8wbVoAcEZ1iFzcYvz0DcDuqoa zfoVf+I$$|DR#*ay7fE~vj%<=uss>{B8JVvS7L8!e+C}J zdR>vRdzvu7NGUH7LVv_Eq~b0G>}@!RxyQ=U0@I`+Kmsw!%Sq8fA}430P=0#P3;7;r zWkj?+DB=XrmP=ssQA<$(Xi7~~If=TArnZOC*=`REje=O@gTU&;JAtGG0Fz>XZ6T@H zG{`A8ZKeU)-!xx?cumGS1@*wB#ZV?W)`k)Ta#)^XC=-y)G%FFgI~l9~5{ zSBhFe1&DxY_{0x(GxS!Me2<6t)O^^zxPVVWiq|o63P~w6<+b7U>?yirV*-?5s}JNM zVk~01UFbxB385`wV%ODLDLrW-ULN2J1rIF;3Z`%Y#wZW=I8>GbO({uqa&{uw<w}_X}YZ!&6xj z>qI`BWEm0j>6nsU7q%f8gMuNsMi&L9fR8+ite{CK(hc0nb7uyu9E8_t4C1~oZ0MlLR-(mGrj~hn>vzrnLXez}_ zg<`-O;^zb?pHRxOC29U`qo=w@@gOzNvDbu92T|TEOw#rYI$aJ~kdXfA)RY%+_*i2~ zP?O^W zsOkmd0Ky26z9pdQiG2bLkFij&j|+q}ayw1eB$kz+cS1ucGf|^sifu+a#s=om?MFW$ z|I+Hy=g{?s&^8ckf_0!p-o#i#8ij=q2&s!nb|aye5S&(<3<)m{WBcY6v9zeRis`A; zCJ;(#h{%C>4oIUED_i0?P}$BHXDXj^d&=SRfykora5Wej8IghukVE-E<=e5NQ9zeM zdZ-w^nFlc6oobpp*_~=-N=6J)_Q<6gN#VTe&0_3)r29Yuq|ZF8Zi}iR)Jlr9Hq|Qd zg;W%jnoS+SWVHKODJ{lejF1)(Gpk&g)+r83BKplt2K(eTVB4v+bOwuk7kEhLmZ z6)OSnog6C;2ZE$V&cBxh5|ffLl*{|ZPd6Y}^t=r^{$CTMn8bGag|`Ucs`14VV%%ti zy!KI}rvvJy*6#nXC4cy+)DhR89qn_!aq_y5>d7|uQ$zjin%FT@ZaB5hbF97?S)e{? z-7HqwT?3w(+{5GB#yykLq%CRRem1^%-FU(ATcE8!XYQ7fhW;j@&-shk+Q+5qW^YQ- z)>N$gJ3Dbn-9@d$Om_N`GyVSN50%FEGLP?Nqo{GN^-WCLxw5?9_Kl^pTSpjb-n$sQ z=*8$oYqc!2le?eS4CtTU>a^~We(jbMBesT}&KCaZ>ioAdT{|`3b<2erlX%THjKX#{ zEMUKiKfK~h%l=iqMqZ*oR^)MOkF*7LK~=3KKa0Bix9+i=5Swbdbgj+nV=P&{sqxb} zy>>?Rj1()xr*xj$1#1txs=GVpLQTKkRku&yT>RL=M!30F|4)M6uec!FQ}$ze3U2i? zGHnfC?_fEv)a6RU-Lm29-d*gfW9R)n{L_~VX-SObr0YvwT7?o(+2z6ZBg4jLug_Z4 zSli@mtfe39x9FZ`QhWqz-|+#D*Hem!K&kA`o3uNJ)-JJnv{{n^TF z*oQ4wH+@Zt+&gLDc%Hk%pkE`!E3Ui7hWFOC?NL0#z{`=a8+_TNKdPBz%LJp36^u;h(-_`0CaUvHY% z1@v?Inl`oS^%5_<;hg>&>}vG5__y0q!=cMYuGx8EnAr65jXlD@7A-Hc zCPj|Up3Qxb;gAy>6F%16eA@0+J?Ey@_vpV*xAV!$i!(ny8L_?fuzHZm!CbvXwe7wy zI=cE^%WH*u*qhOw1){F{?8ozZ9QNAnEx5UJKQ}k|1Ik_!+hjY~8W~X;CSM%bESGZiH7mQ@dcFB|IN)``!FGCMMvgCv&rDeVi~X&bA2?Xw_*K|Rg=kmT z8+E6%rn-d8eD}VWt>HS??&JD2Ec~>9|Hxt1Js1A6X&r>(1ryIqZLk_@7$Mr&*S~Vp zk1f|U27WTNN;Wut{fN);f_1*XE^d4^A>pp{tBi9tJHbx$Yy1kY#d|xRegDJ1ZgOLO zctuD|oTYPk%jqFc_jRA2-7&Fv`RM5{&fKX~7$;mG?RDFbJ0vJ={qbXo*Zaoq)!7t( z{+2YOoll1^lKiE=rW`7@x7zOhI`5C(xsN?72bqRn{5f@@zWri%f$xLDtK|2H_JSKL zMof*^UEA*I?^jNrzCC?V#JzHJ|0lQV_?MesevPW#d*MuWg!%mu>EnvKupVtNaUE~} zs_PB*h-h^uwb$L$>b5LlJ+8Fgk#S>xT;^`p!2#_(SRqG~&ECFRR(DS!7>5`t3gwAi zA&aR#WJYa6;Nt)A%8F6+8Kqto_=NtKTNY?Ug`-ulT&RNOz_Ln+4V$;^A1crdtEKH1 z)l+SC?SQgWPpK*ziQ6g~^}^rU0{h^fYkM9jTiFquKW+a|bq&9f@)xmcK(LGP3wfQu zo&p+zxhP>E%oteO%7)6U5&Da&GnI=Ops%fs%Ec^JxtPT&7qb`+KV?6FS8e}L^~~H> zK;H!%%=}3vhWo3nk*aIv8Uoq~h+O$6nM!b~vXXQuINIP^+|xNE`vFT}pyDN{i%Kjd zAI7j;84n9?a5N!XrD#@yE6eoZ)RxM@@dN0?hqNq$C0;dKr@gng>MBjtn_?-fyqLrl zQ@CrX^8(M%T9s0`uYmwZO<{08iLGIASz=PrWbR2yJXkth>L;SEHyF=+cqph#Tqq+S zW8rGlyu#v;J&fr#I9-$2Zf6Nh;1HlZ4TZCOP%dza6U7A37`P^mY`+4uI(!UFy?J6| z0Go#_J!9(TrJz+pnE|+aQTm7au4_Mo%?P>5GQe0qjx#c4I_JRaOI@TevEcUxLm>yi zX1J7BSK*z~8;_pf-(V}vF%Do2bqxz)8A^dyAUY}RE9IIuL~ zOTw@r6o$-z$w>})0QGHFv(_V8+SW#7;W)M-{3SAD>LsRbOVu2Or2L#&S7wTBH%@Az zM1!?1sgA}I8y?FzjMEKIP;!Tc3IN>7mF7RV6?#o2m-LEft9x z;p>%~c3Ou6W=n`#r2_b{crfq9u-j42i3=pDy42E`)WkrN)B-jW3t%#XjG-QEIZ%O^ z@(U8izV>=Zxd&gUAT5B&g&NUvWz>&MbF0J&aRxBjKP1gjHa3D1F>nN= zih$A?N;H!2h-F9ACt^(^ePG!`R=}5ZNu(Gs=tLTe!Dz?m7HG!~LzV#>F44L;R-g$q zherV zlMGE{BZ&B&7S%Tym_?LUW3Y}0=vx`ILHjkJ7i*f5--)0F!GutKlj2aL5KMyV9U@8) zDQO>ib@bXNXuEz|TU-DG7qLq~&`GE#9bl>rm|jcMAU&R9aXqI4Ibsl|lm^3kf!m-y ze84SSph?Ly+VTNyd1tz^S1z}Oc4q#2Z=qI3d~j|c#W zLQ5QvBI-3}=uTy?*3Z$a*-VObE!n`B;D9hO>bDl6R5*3M^K%o=IOF|rH2}>h3t~Q*d8VVRA;5>SEB7_0V1_fI*M1uT! zfgv}m+L;2&V;w*@VCzsnJk(c75zuQt$)=YWMphELJMpz-TNqLHiXK7`1Ws!>2UQ~= zzOT^GZ8jP{Mnew38a4rn>4E-5LmUJ0Hg_f+u786Gc|V7qDxTO2)Je+(onTL(QVRqk z0Lem(L)mU5`89m6II8-vf@oBOyp4(z;*&~8ETv9t0dw~#x$_mO^LiqB{i|+{vkC=6 zI8+BIItQx@38M-O=sp_uLN6xelA76QeAO8s7NiCje5(}QQl%7AqKc9w;1{Wg%NJ;n z$hVkaZwxv&_&HE7b=Ff&#A5Je5H-~goDPUA(PJx}^|;a$+Gd$*sB|*ZdL*Wl{-*x- zwnGA3xjWWGNgJVh>2FAfG zKHat;bVyjZl@snEH6kaPShy;j*zwq2D2c+MN=bRAwzG&2ijSv^-lC01G-D(di!hQ_ z%Yg1A!4WG8b>>lWt?fWUG!eR|QmW%^3mPhF(e7?a@+k$Lxm*w)R z+T{I#g-dg#xqi79mF4pPqD!it^x$sWfP9=92tk;^77)b`9J48(=rJqH{n!vdj}0b5jD9U) zgh2W={xHBd!C3o@?T~hv;rAPbZKk;OE z8JrqoIx9+IBUX=6u*@fkaefT`Lgx>{sy#bMkD*wUlP9gtDAwF(sUG?L1xmALHCtIc zP)wd&GBVBcV_ULhBu7iztUD#2+RRPlHPUmTE$3HNI#6k~;s2PH%A7|qg{-N4ap^KK z8fWFI=!duhT12o!q_=a-(Y@mfG9=R%g@l~V51wFlRy$$RDdV1AlITvK=H|{Z^cTzsTRBjaQQjOJQ`-IN zkBCjqWRvr;KMH5XX{#S2o1N11N7sfotSK}0|C1+FM3!~jUAEcT-0Sn>m(PaBr**L& z=zB{|k;xKn3YeU^c&EN{B0 zzv251>)(ZDlbUt*Hmu-~<|~8eJiC_kXVm?|_~BXUtEQUEwso!6F1T~HDa_{b;Qmd-;S>Ac4Mf=mk)o>`c|)%uvju^j>jtqTq zAUwOyw)f=2=WckcEgfetWzxr%f;IL{j`zhTUMElTZ3l#(zr4mXpfXcbY#MvHw_<3} z&wKrzrsrLL-!ydUAe#{%O4j-PdiXKWP-1R+%;@c^*U6%FzOydRKU(6nKc`bbZl~6L zH^$lRn4?`h@M+j#(&XNm(RXA?#rGZG)Tm4l_bdt=s^{brjd z`%ga9a5R1L;pC0y5Ap8otUnfGuW!yRweP;H%Ai-UOPt@cv-LK9i6+G}LMO?`7~205 zN4+0e*{^o-%?I;2%?oD4t;>^lut}J1v-frQ&0lFQeeZ{^w(zW-`Lb{D%Q)YWAJ=xz z*lTt+;m$yX)7vAg+v4)9IY0NU@9h%*YjT&Mll_Z^U%2Gr{nE_7<$>>;;V%1&Z*;WY zb|tU<&J@e=R~|cit(2WE+PfliV7H=foq{y$nn!r$PCRrlgyS%9>3z=mZGVlQy*VdQ zZ+Y)fq3G+g;1_GF=lGf@>#L)~d9w13uI+m_B>zkWp#HittS)0*JSVNI=cQs%9@p(es&%HwBWEy z_Z6ly1G~DcSRT5QyjpVD@S=3+8X0%Cd$@V82j=;qVbSYcgY1Kb94=TQe33rnZ~R=B z!2GyvDesbI+`e>Yc!w!(_bGPnw7s=5w0QEA0f9k!op*m5rfv6bMCVQE+dnN@>R&gr z>EsLTh1Vv1vx#_fy{@VBOV?dr4!r5KVBg!o*Jnaz*nP>48`abM-u3(6Dt#(%g=)>Z zaW^{II$*d%6RVIIh&_*?O&eh`8YH9vCLplP}%1F zW6y6}qC4(DXv)pvuU<7@TAMpf>2tF8=sLX-tBz-y?cX-+!MteO>xZ56r;l#EnVGWG zdheQ3yTfsxh}neCmMgN?NVdMpF$m6(SZ^A)LN8ijIeSv6`I3u&dab{$nftS64}BkL z`s{)Sx0m&bT77FqhwO%1PCutdRkk~v{_y^fyI+&P7x_x@k_hfPQt-nj3wsC;fg^U<;|k2s$k zBW`A7JvZK-6p*ZlJF()y<0-!eY&t9I_xxd}m`&=Xd5@3ZnmT8Bb(Ej+jyXTZ#9NOj z7@fCrGO6_G_t@~%fJ|1b`_rTK$pw?QrsvBJ8U~k2dp{NB&K);t^QPNPc@s*Wtv%%? ztUGwMhuND?Q(o>oc`f|eZ7@NFyHZS{Ykd{j4Dh}&+f0PRnt(c zs%a=;E_@wmtANY2t!rv+GS5p?Q6myn)QChCHG(*ERhu@N1tIIIU)op}i7ILY!31r8 zf>o&OSrs)x{ol+lr2QdwFAPEzEFyt%tZb?Z7LlleMIT@xto^ik_|1eg?g`n0nO84Ss61lg%Ykv0b9g!WytS=jzFVN(JJ@x zJ2Q?Hj1V0&W4mL%w+m)P$A#}8ae~~6s(7*#89kVj37{(^->%vV4oISN%hlKus6i(6y zz+xyL;J~#j2bfny?MNtISK9FOigu$F+N2Rr(V?Jx2Lh%MlTI-ia5s&&rBN$V9>Wvh zs&QSS_^BMW@e@`c%yPhZ>aPUV1UM-HFa&v-3Q%}4qJ#J} z6vSCM>P^~gW8$%uBIPWWIS1Zoij-l{%K_lvbOshy4x#n$d`;5g4PWRzRcjNVKsh53 z%3GniNKUfXBUGkdhiyjo?Z9AYGz58Uj_eFEfE@@^h7A$Y&>HG7rc9lCu3NU28dyw{ zzlCj0u0^v1MpRWn(6ueQm`@BlTXkh_Y|UMstxc@;*m|^jq(4r-G&6ua%EmB}1;B&Y za$u22&RupF<_S`whh{0;Fd7;Zp?m<)j>c>=P!9-(GD%F(Hoah;^ly&`PSFQwJOmAt zF~L%R3V_0ju|kwh5|EDtU@%LJ*czm{J=>Tq;gg)#tRRHcAYK6=2O|MR0y2sCc(O&r z$Ot7(v-On?`EOXgOyJ{XVp@1Ou_%oML4)?X%aY!HE8M&5`n;&ndc7?RcLYR2TKcB(QW zf|Lhh4hn#7rgKpr8K5$79?*(!Ahgp_PAv9#Q z@pAhSMBte*dxoV?Pdz3`4>TMk#-x?uj6f71PMX~PM3*$7De*ZD{ip0O&PcSPf&e2g zrxXoc7NsEQFqW8O7$uuHK^#ZS60MKX)>oU%+xQ%C5)!(I z2sIPoLCW$nX@sDSE!lSDD{bA0dO;X!37!e+fT9GX4Av9)A|{SVIhd`6INUY-K%CRI zlqnKX2Mg2$bRKANDsekw>=@gQI2kB;P4dgpJ-xjOmoGu9L)v#z=kqBkTqP*j@C%9G@xHee8!|$Cy+-3*GRV=uMwTFO!c(!-*HBW9ZjaB zn>%fdQvw=J`6CIB$(zgVwqA$)%9*T7EX$z>%(9kOgL}q0QVtNgPy$GY@<>YIpGJ?t`UeJq);4-C&JIeV|7ZFws#5O&Cav!37Tpi4UgH<55)5fy2i2iSumIe+$ zbcy^F33*`4Hsio9fbsS3(K;}`nCm&;Uc$&WxDHnqbNK&=*-=A;AIaI)9XE!`QS3yk zE4_>&89_VXk$8s$dZXUO&dHZJM7*@Ro|2J2{P3Y`Y5w)Bg8NRfe^VX%*&EDC+c}3_ z5IMGT*45Mv$uqczFYensbJ~Z*gbz>F9(-oI_P zeoFh{lKEwy(Wji14>~SAkhJb_)a%j5>^=t$sXsO6T|ejZg|CkFaM0e^q}Ho0x8d_P z@4UwqX>(0(iJf9+Za(Z#zRw`dTc_%*_H}i2|K`_{CpTu_ZL-ZM9gwo|^AeAqW4cdC z+B&-DSQF=Giu;GcO0H~=^|w@?w817LyqOf5MU8q|8|@HV@Ax)TeN4P}m#4b|E&SpK z+h5I2y0o~cbMXW1*>75>%;~xO%aZ=j4}H2Wx)gNg_bj7py-RJn4A`sJ_t%hZQrAb9 zweDMa7YsX{b>YgV>GsEy?T-Cu9XdTfA!-%3qJ!%~$FGHw^Cu1})M~%GbQ&;o@~7yn zYM(RBPrp=CZ)$h3;KJLU>vH zKJnCVr*Y;Zx54{$zNcCylhABMF>x+(;S6v~ESspd|M76UA2&Xo&}e+kf(PbI zPDlFo_dhy%l-IOAT?dc*HS~<_iVJJ5@y1-3lM{0+uXg#DH-p)IGrtA5*MEE8;KCZw zlCZwhr*9b?!K*&+D$MEpss3)2_qM}3Ew&H2rTAglZq$D3jGhLlymsNCf9`~!A+;ro z~HvTU+rCtqo~!`k0--d2{+>i16^?^G-=?Z2};%kjdn?Pk3C zx~b={Z1A)Fyw2XhCni_4$6;u`)54sAKCUM(2zCwJFqjB!mdvv3wK?&3)$~)cJMTB$ zSth^ui=!A-VR>#C|=uS)C9#+!`FbQmB!{wUVCQeRIm!RPwG^mWI5r?d#SInCfS$fgP%2h7_zM|Kg%7w@Jh`)1HbKZbGtExlN9#)`TCwN zgFao24SG~j{po7y_)B5G#qD}W`|oe4oV6f*^oTs4smrs66s*}2e?cpMkD@r>Nb$JE zY#Xy#(1Y2{O)g$NvsM|TF5fzR!ZxSi#jKMZJ8*lFLbHvu;N|x%RDS zUJIwO+Yz$?IUf93!5W1*v)@0m5ep-8qxNcfoR>Wdp2pT*H|%{#=#WNU%T>|!)Wltv zua=ydpxeAE@UI|d*oi;-9c~zv{!v`XddPd;ao38eiIZ&3==#~aSJ%e|zm^*BUi|iVy!p?+fA8*TSu=T0_4F-QI`1gzR(CY$*!*u7 zmXrGZ^^;s%UtWz4d)&FIamcfVFWm5g-JPRrBQif87W^IZ&|-qy(!D`1(tmEBKE)$v zp|>J_ws%_L0OR^E8X>vgv(9e}(O)s;?wS5|gF4Jte>cfMH}&G{fe(jlPZJMnzxu|= z&~-*pRa%qBEnC0D>V|KJ8@=-)HkmvuzGgegS>Gc^Jtu9^U0?BnyPaDc|EuzMv96obYl}+q2G*F3&%Nf{)2mN=w%*O|ua*o^ zOPerq;X&@sb{Vd|cdHB9on!Bm=;yd_lR8pVp+? z7=OOJ;_qdbyB$p$-`c%P5}4f6?K#t&-=jlonC6RnHRp4REK*$aVyaL14Az^vf9K0L zC+A{%3XdCh~#BP-l*EBdRFm%QsgqI$?BwkM4|(jm2C7+e5)FmNA;S+d*}8}!J}G}v(CYyQct0-i>?J52(j zucf4w;2+vWJNMBBZSu1QIq$_pr`^w_u&qf)-#N z5t_l+xk$wLNZUr$pY^=qA6JI<-#`2yUs`-(*mJLQ`G=P zkfu)ydyr7B8dAE@P@e}0Y(h(Vn;$b+rka2fZ;2sKDHAUR{Mnu+p?^han9mKgX4o!> zmGW0@Xp5Hhz&d?I#REFE-)P#PYH9*F#ALX&K_>uLQm&2KCrrO6e83^|Znkwx{pOTq zXoF5-DqcPXt3owOA{g9ahqPs6VWAL1L-j4Y`SWNccVh&MZ*dljQ5rGlN z?=k^DG;D-s79u_iC=*Q~R^%v9GDICpB+B(`FeUeB+t7DRsuTsrv?Ku>@-zwxDK?EP zeh1nVp?zI!y}fn+En-k2VImGhG&F`L62T`Aod@}Xq!b388ZgfZRL>D!B{(`2BSll$ zC@IFrvxshD7%3_hbLJtT>LC>P2GY_M0ISog1vHF`ik}9lP(}>{rU6d~+hfuYp@lK` z*mk+28)dYtj~tP7lr};d4yC1}N}xwGk-U+K&Z9kv2xrSM7` zNkSDc#|KIk-q^+&QNmhA7od$w5MlwSzXTW(T_?_iZ{@41Er*6XA+mrHt`bNGwMj5o zh6`721LI0FQ*!G)Wj1(-OQf+^jDr8O6;OTIU7F{}7IAQd{kK$%U$O$tm`Wlv*9dQu zg7QYXB1j8noz1a$2=4js2M^#uQ(9Ss(hn*H#UhfAci1ARCg3_*{GQzjK|%;@g3Oti zz&72a#U1!eASO?jd4Y_+fV|gAwQOUsF%K@75E)HVf<_^(5i0?WQtm!3w%LCTNf~V- zz*11kjQ*E?`H&PyC1%VP&|S!A?47?#-ijjtxhJF4Ac!%rW_SjNw(6MG*9M!$C@n#v zizRvVhVoH3XOK;YbwFGf-I>gK(BwU;dlq!s{C^boAKhc(P?+N29I!}CttgsYiWkzw z;WPXMsB32Pr|7ET2BtnN8Qf~%;Hi>Br)cF6x+qFg4LX&}|G^=v;fJGK9hdqAWVAX9 zs-@5m1{fz$fZ3JI@n>hQ%^|N_DFvfUDCC>b{3Idu+`y@U@Gj<<2ZL~6Jj;!iGLrt6 zY-xbE7ju&oT@@)z0zUi;v~(1W@@0y7Fs=w~E$BA0mZjQimNY<&DWhr1gr%Y_&Jj!> z*O=ot%BIzky!iM+Y3pFlV~k)R(E=ni#E&7!Asp;%a9iM5+M?j@@UfG=bJV(%4~1|U zz?;LP)rsIbpy^zEtd0!2E+9z)HZ3Ne=rPojiI(Eh4<$659?(+kJw7ImjY&_k+^$>O zqDLoku=SLr77h{k%0!@D;e7(BML(+trhs(cr@la&l%v83?Hw*CFj~yF5^>H#I8A6U zCm)m;oMsHcHcW&s-HU%Y(mogl&OuB=%yu( z#25pQN&y6wP@v>gOLl0GdlK+u7hTcwKYk7>WwELP4?ZwRNBy4<)Z60$>akKrMIjmx zwg@GRY1}2`ETg<}uHjA{GDZ#}R$vQ>(C}q_YPCSW=uysRimkYkYkaWA%@0zHkX_06 zRR5jQ!ngW1f~si^dGgx@FZBxcZU6sWfCVQh4C1ilSk#bm!^01ItLc*scMP@Jd_i6; zyQ^Yd^|XS%MvK19)6JWhezx9X*hO-D#_qDw z6}{Xqd04Sbu6?Nc{LN=Y%7i!HufDkS=F9V2R`WMZwAPR%Y}eDW^N6|o#Cm0pjmM3< zKN>fdmTnv~YCwF?h#jq`=bBD!4E{5*hOPN(cT!+rvtruQ2ZuU;|FU81o3(4c5u^4C zjmBE@Gg+0%S9Cm0vX?|F}8QT!wsvE_9huRi#y-Domp@< zEirJ{vkoS~H~E%x6z#{EnlGL?%71kDuG75(cOT1qmmicLT|IbR$IEe=T7qu{>-T(} z8FqXn|My#;8}obCP3?TR*-&HB+XpwUR#G(%7rHH_hcH~A24FTbIadZd*X96t$H8uo9h;}dUlmtzp#2M#f&}nT1N|e zkZo5Z3NH06zI?S^*6TBA9exh(;rpYZ-NTx&v1wSMSTKnqsPVjwG zwK#O#qWdS#{IWDJA9v#Ar}!RyjXE`bS3E4-+cTgLI_Db<_qms^5qrW;#jy=>8 z#(GyBe!1?6*9Py+)_)9k9=p&k^4ak*l?}bp21HNqP;j6$+dsY24BbIhXUUq)0~}Vi zUY_H1SG``ge^1x&OL0@i9}!j^GMH8Rsx_l^uxrAzibpf`&F^Zt-Lks5WX;OWc`L7{ zXuKV$=-%C@|9x^HV4m-Fp0-Ww@`{HWu5}vHZ=X0KcGV@Z{dkz={&+0q_DpVF^`;xsB!{;f54th+(P(~;ZdLEg&AW0B z-HSF2HKqDP&#oF@ z_vBVI`s6=uI(017vOZF+SbXG0SnpAt%jU%C4tr?wE2?_%LD#t}{7cj-?tVU|yWVhL zYR%0vhF$wq9GF!gT>qo;{`z|@o$q}OT=#SK$$3vgU;Vn>i=$bWC{_GOi{02`(%Y?x zr+SvxHjcFIVRK@2ej~AXzU4#OPyHTFeeO4>-2OZK*{v0w4(v_+Jo9rews~@Xx zBI&`Nrfh+f7!OW2C!v+>_U2OL3;@UeCwvDi$a$&d<}HP@iuvQeYK>EedK>O-1Hgch z%3o;7MCMOYWt<6_B2vo%;8aD2&@gP}-&N5eCgI!;1O!7%k08Xi&2eTb{4dK-N-Dl1 zAVETF9RNPl*lC)kj+x+-o}R;U*M_;KG@H70Q?n#l{%mF94wu>h)Q$l{mQnagjQ|<* znasWRgG(0EZyDnyr)fT1WJdGomlAa!=;sfV13s>dpAcW(C<7omJ+Ye7%|fe?@TfD4 zhCIOQ11AS2JX#UsWm_wJ{NcaEx0XT?DUcs6T7rB8CURmkZMjH_{wPf5!t2X; z0%0D&us{q4z>CtXQKuFzF_WncVBAJr%vnf%jWAMV2rfcsJ+ebobGNg_C@W;>mBM5o zG-^mtZz_#KK;VoY64_I6?$Eg)gZ7$y7KIlhDCzcPdyB(eqMkgXz@zqjJR%umx#Y zh?v%i;iE%_PdMd;IRQ&^DJG`t4?7ysX~5F3duY53;2Z=+`GgVPFhbK_u`G?HP-Zj& z+5ncuGAN-O$(f1j0M@>0hNSF)8KN~NQ94Ok2Cpr>OoT`f#&qTx&~dtpRAx766slP> z!6IDrE5jiGl*^O=p{N>VAgG~E_Zb7|h_M^?8Lbk)1Yp3@rD-k#s4OkVNb$6kCWkPa zfdW_Z!y7w|afC;nVOand%4ysUrc5g%GH_g=M57=OC~}?UqdG8*$`I5;6QE!ULL^WQ z*vNn$O8Bf?830%=lM6^wLr_?gdXup>I9I4`D#RXD7S?oB=9yjcg&jMqkD9V%ALdpO z$nM6*fB8kG|L1#MDehq$b1|GV?&oiHcd*#Hs=8gAhsS%%vl{K3CvGg|bdwCw4{=+|O0W?g;PVRe`63S^nL?RUEEYqc5FdH#(Gt>$wbURRWF z=QW&K8gy%5yGbRndl$^s=qC2~`ZzOm)H?Ts(B#p%9>Lv5-+r`fpZCSlO%|yi4$s)e z)2t3X7-@TT^v$!olb7#06t{MUf73mS9Z!TCPt7^w^()BccWU?%mio2>SJ;E*UY*mY zq-EmTgZ-Pj53hWxZ!G06QWDpQrUP+}Fb`#p!~c**p~swmq_Mjn0E3CwoUTM3z^0c1 z8+*+$C82XrUdh_hngf5eh#WX$Xl6<&(0{EU^FO3803|CX^oO#oxSFCxn%(CNAkO`< zp7T238$y?ZB*to+qSv$}qkmrc#V6HR*>4%U8+p?YkJn6OTeGFe#IXqA9CHm~4`s17 zl8m10dPQ84WbVGu{g>HsOW*qJy1C0BKG)#ws-i-VlGg`y`*LRYjpj~v(DzC*jVs!D zJ$C<&-uKE^_Xru*fjxSA;^dO}A(479-);AFtPSu}OEQjmWL>X&vUy@`?E*9Xv`Y^? zuRLn!5+1(wSn@g7FP`r=tent%JoU%9Z~ebyJ*ZoP+zLFQe|C~E!t>w!% zSqY_8JALy5-HBimN|_1_d)FH08@aRW!-8n}2zIm^I_d@89#c>Mttg zjP@Na*E*N6q3Y=>4TPp_DPFce@TAA<&6jRGns1f2XzZBBc0I=K8JK)6Y0=^@U*At& z@M7fC@@PYWV`Q+)6|W`HM!ezXJ9lcN9$OfAqvhO?Iu?7u=;c}g9RK9chi9#Pq&;}t zfS#JtGskXh?BXSGiFn(6lP2qZt6{?6dzl?}=Pi6uulq;8DxostxVC$aV)`-dkqgg0 zP07BwJUJxiY)9wcdtL8%e$KjfKO|)Pr4LcR&rt;_We6^mj(RNyV~ekFn-hG)o-_0H~Dw+ zKI=AdL+_#i>SIk>CRJ(~3{CNGf3#7dd%$t^k<3KRo?F}>2Vc}X{@oGTlXQm&NqgvHXK*|@MA{KtIj8R=U*4`caIpG zwNx>8VQg0Y_l1>Dnr^&Zm4ENI7ij#iMRz%{A#XW8}ovmR<|9k2nrnte?m~-}z&L^y?kNoY;PggdZ*Z z7WVsQFJM1kP_t-Q;FvLMqSMnZJg^C2X%c&)IVR5Pw7;^C@V-j5mY#}BU5 z7-F`xpWPg@JqZso@_&|Z@1+^8?Q#76sX6mqo$8<4ru#kRU9}zM%=YTIO=jpn;<2Z8 z;961ilmY8Eca!veZt$S%wo#sG*-vdfcklW<>*B{39_QD7@(y*F>UXqj&98gUq~S&P zg1%1GzvvMs7ff!EDbAXlw~N=9W#QAsx_F^&--ysX7VW$zwz5t+rq4g8)$x$z>+7ez zzkGLGZ8mM*zJZ4_hBhv_nti&YZu(cfbDQOrc`IwU|BJJ?4ydAA--cmty1N^ZZjq2q zF$kqgy1RSRAV?!4h=hcQQi_y_bSSNapaRk{fm{eX4aa`+;QF4 zZBt6;{?xf=!0O2f{5QkrKyTqg=U=WaJHI4L@Z;kPRGz3@bI-rU+kx>074Ue;ZAEcE z;vgolbG~H%v;sk!9qT=Dqg^hpeb2jq%iNdd%F(v=@(Xz?#m>4Q=3now8GT|NCDc&a zIsH7LbZe*oQG)4KXG7nb@AP{^`W1ffHT!Au<2FL&oDR{4Hx5a9CaB+$ACz$SO)4+c zq&%T;X^YrY8k_h=);Pu4d%MDi^;ym%j~l4T9G$`{>ZsdK5NnZ8dSTOP%p1NTn};~g z9j~-L&Spp`7%_DwF-sGmn%~9xF|w(qZ0qeIi#1@sGKZsd^D@4b8$W649_cUsThtW> zv19_mi}zK3-)K=#{?$yAm|#>TnAVtQmmMX z_0>HWW{yIuEUHXXC2K`xy`sVsKBnSYO}KEEu$!+#jOwc&!kfcEK5faqPL8IP7D%qrsNMgZvYu%z7^fT? zY>Ur$9~=Hw^Y>lsuGOx^jz37Om3?#ZmUD2{K=fuO2dT?&gM#=3o9SC6wQ1{ z934H_OC2Jxu0>?cQ8q6nu;ES9bl?|9Ct{FuWy2b^WNwnNUsXdhlYEySblf09*{OJa zQ*j6Vfrjhr)up4EiKVJQ-It;=+W}(cEpf9|B+9{Fg*vpc#E!`bK(wnKbPG4mZ= zFt`MB-@+{mJZG=Rh0_Tnji)Bgf7B&n<>@|Je4g#md~@P}Hz&@CHILBQgpT+KY7ut8 zCX}6o;R>~^8Von9*VIe?G6@fIS6P_M-CAC5CNZ-Q;Y#^dFfSSOLregc7k|}Za{JiL zHFjYtex%tK5lbt^w65*p6lEjz*;PtL>A0UkzZsh31$e>?)~t^ z4_3k57Eommmbvx<_a@g=*VBrrI1+{Kn$fI5@jGpAMGhK@r>TW|ln-vCqr?st5Sp^n zrN`)I)4vskmzMLx2i~^yYR`lpPW3&!3rJ83@Cmb|Gv2Tb_aerxh{33Mtg2 z4NFC(sL|4ad0?X5P7J6$KLvnf|3-<#Bmfy5?B3tU090ZS#PdheB^5oRH~ITH28UF5 zphqTWq8=!dLJcM$OPVNjRzCbk`RcuYw|o4fT=DO6dMTjy+q?(6bTOaP6mY(l83BO~ zU?Tr_#^b+aN#ObfPjf+Owz;TH4t+3%Jw;^qC57;3YbHdAQBt#;D}NHsy3u+`oj;pd zi413J&-B-;*L`=n$DXWaTl_wrd`QZbL>+1}bx3u`tSPu^H!&Xv_0zN6=EXEKiAXG` z$sSJZPg6I4X3sKqrWz|AebB)jsElHhTWKg+Bz5FmgqSAvd&&)MLsd(*!b^D|T zPrHgw?t~W|>({aR-x9YV9X^ZxRF+p-oHBOTj((1%(N>S|9QMUdQIfm(l$~oK`_91X zJ-Mt+4kYh$oX6kC1G#m=_}N6y0U!VLtcsq2LH>DCkN}nrFEnd@c2LQ+wA|2~0}!nF z#(@bRnK2LU#FWBoC#uy0p6c8A3>AjpJOHlYQe>8jEuek#4=|plOJ+3kcrA5 zUn|&K+>RZUYUTiVSB(J0`RWp9{qDHr;9Wk)u>8GQXPII6G5)On!WpcNB!`D^Y+%H2 zfGmb&{OrijloaUD32cp1Cn-MBe^*gH`XlcZcq5<E7GJ$PrT1ga69sj%P}tYsMnjSsyAA4NB0GsbPz#hB{Mg5nI0j{VY&e5(ROvbK1x5$$J8<`n z7FNuL!Al`ANj#}us&0q*)H=6Cy(VgM^KMLLd_i#|7J6g-1yS4FK}N~4MtSAxnDqcl zF{;8X8%GPHYDCMAw-r-pM?x>AX&%M0%vc2-T(@i_q?42BPh_~?xvU`XmObp{i#_?0 zMl@r~prCq^;I>UmL_wrF4d(iAR*Re5&7-LKsm`eS%LX!UC$5h4*i}~?XBL~0w_SUe zkhZUv-1xZSbFL%8lkUSreUTvp9skgXt!RX?kD=3Zm2L7Lj7OG9-yI#xZAfjw+t`Ij zUv_4|qT8y<{i19*&~n-o@=3Toj^GDE@aBDDIljV&Yi}FZpk6$@`e%gFok_MB1%1C0aFmJJn7;!s+Ai@5xz z6q_2fL>*WHS(<7qlMvN%xNgf9IQb$gCj$Xp3To71D?tb?%@X<^`Tmw38^H&0Ipy~v ze>PqXJ=mSQErtouM|eUN0s*vyuhLFgsThuI?IbKXFE{WFRsT%yt#~3zKf)a?8MOdNL!CroI#QZ@lCLJ9z zOH{fxU2Rr~h>lyrcNYlC-K@k&(4D?v#w;TBUg`!~`rcHvph5-x#>!$x_l$CSUtXOO zrtG9EX=HD2?&A@3@y=^o!Ue5L-){yx%v>$K93y8u5A|%`*GJorc?w(mR!vXm=5t$g z-|kI*qQr)%llo1rA#C(qE~n3MDy;yHO7_>4HG{Yvjak zPsGWt5G1wclyJ}|jXi_+Ww{Y}`l(?Jgl<%PckV+t%^$q2(Zc4o>hL(xL%@7|v}L|N z*?`rPFuyCHV-Pc0DStiv6ZIVn7hWwU%|L`J30D0oOmx1%&hUg~gJ$M+pH{Ee4$y)?*wt^`8u2T~> zZxTeP)|wD^1X)Cn`E2$&Df3bP4 zuIZ=sRA5_;&I=u*j{5#!p1>wWmpOk>xxQp9g)eErIKN`)<^v2C z8(%XZGMCssvaGvz5!;WM$#{`d{1TM4em{9nQ)rfrZ`{lXb~Qk`csFBjEe8^%`#9X^ zH0t@~`4~mHq*gUBCWPS7axFioQ#Y1U{4mB85HxL@S^F!gH7{Bb*G8oX^W_Fqo{P~> z572=o>gJ3txeBjE2Ask$Gx?;;ii^~;6D2#zPC49tDYXyAa2_$MF{YlP6i()8o_~if zMf@=xlAi}7|NS)pl*$mCpXkpgoBzT|1kL-xkttG71K>BHTsN2z^db76G`A8JPc%RQKj2^o5UAyy&a0=r(|0_dTj zRAEhs24#4|bf7|H^@jxu(fr^|U85f0+*ja@2-{U~6nuRF^2@=BjcLy}B1(HWS@`G_8FHq@?3&2Z$ zFe+rltdo?Q=N}*3|Fe867z5`8m=UCv4@&AX;fC`3VP>c|YTyB|a4aO+&~Pk(Fq{@c3mupZ;Fx|LcI@E5QUnD_hAIs@Yo$TsChh)6v}>uP6)|Z zQUbvZN$>POl@P$Ej~YP3D*+shXNcgxPDtnvGb1ud0+K;5&`TuOu8gH)0CeMS~d#0ic`tp=QM{6m;F z7|9H$<3s*t2q4CEaK;nknCI4ifcBIDKYXMtONwOg{~w2P-aC~Jl%PK&>7jp@4gOJv zAQ*^EJoD-P^QZG?)-VKABEfM?GH6Q%P6ClV0@aFtRqrCJ^Yj0_B{C@W5%_(9T^N+I z`(OK0fLm4&c;%2=_ZLYK6eu4GLXllgx$m%?F`3@hyQ~+NIK%T*ipHqqSYyQtJo_yc##0TQRdaKl@}%jE%}f z4OV0kPNR=`K8Amc+eW-Y{JQ2WjXT#g>hjdF!;01Ms>I}Sg{ig6a)+mtLx^Enc;d)! za^+3YbTdAO+Hu9htM{!Yp0)btZ#AthAHyBB%>=%(5R#)iS9tlfuH-FDI^_1jn8oy1 z-@g5z<!MbDN`5&nT!xs6Gof`#_cecF zuRv^bJ&D$}&l#T|R4b)aWXeqB)Hud*+-r7P64N%vFRiIG`l1tlDfvd&&AV53Z}0E# zUdC>nYQbk33?Z>n-4H#gyK-ssX()LXkF%>6F3d?Q4?e*d4MHV0P`949F_JfNS}Rlw zR9{7G;rB)|c3;j8_VIbiYk-^gZq3jnS=DX2i`dpHg8Sys)cX|t;43 zY;P@LeDU((Db=sC^b;Fv{8~Ca?lLWu!ol(O2E_p>2B$*wP#9TwCEgG6@uMON1MhOUtcP+glDN8gTDpEDst+}_ zy36?}MQ+8#_9rE4QFuE6WeasU9^$8qLv73hkm^Mw9?P%6dw$(kg3Q5m&so>|MAl*U z`W{05t`p>(`Jkvjh}w{6IwngJdzW77>^;2wYH(GM#aL95VXPQNqdhHO$6!wq7jM`rXFoY{)L=r_N{X)oBgL1@ zHB5fLDOy`l*0N(@x{Rw=?A>5w?uZG+X2EC?50)^9sEXdrc}*CKA9i@s-fbT4zn5DsL^mwQfSAK^i^iueOflu@d)6E+-C*{0`l}MU8~(ql#!#entT|RXuya1qPp5vpujt6} z)!?lH>tOgRt((h9kDp~!pz(){g{X`Q?lrD+Z4CsR=;53U?A%IueX9#a$*zGeWa_$d zg47HA5;ixQEa8!i(4|Lm>)W4aw>^^(_hzqXA)MuK7d(icV~=7p$gL9&TnZJHHe?e_GuN0|8-Lw@uSFZ3Q7)o1YX3C* z`ou$63rweX`O}vi^*EJ>vlA>g@23uB7M@sL3#9E@ikk{lPvlT_x5py(LLq#1E%sIA zEm?a+qx1Mx9o^!E*w@nHBWI6j!G*o7pdcB4_b)B z>|&qN5r|HD&kMN9Q@+qhS;!rc_BZDcJ8peYk7zxb;D{Nq;0;;%^eVM)&+1v&xRj2? zbX|PG&Tn#-<7n+)e%fwNCNly|Vzwos##%k*a*6|Wuv!XDYnxdQ8fVlUCG=LArYB{e zTLis?VMdqW&xa^;rQF}!k*&VXr!M{|qDC;TvL|WgsBq#@r#bPCYXaN8j_tq$JRD#1 zHe&>~EYB^ioDj_XNGiYJGT*#;slGE{Gm?&_p#AGZEg91H z(`hbCUn}R<**AmQdD+^OeKpYG?=_O$oAbK7J~o#>ApgGBG6=MxO|$!6pIvJ{(`nS@ z)yaEr;|T7RS7xspCO%wlN@QoSEy&#wobyoLD=xiNW6*P~+VJCxVsb!zR0&aG)lU?% z2n5+2W?Q!uioItf!&`jMNP%Z~&6bYnMlxz7ZJDGIu}W4g@z^ltEh9;ro!f1FLh#`H zACv=k$(SzHnKmzVXvOhevBH?U$9}*?J)UrgC4J*o>kX2K5A&hVw)DefO^&hq9kZD( zTi;oiR2RKTlu6pg`KGojEc_6S_=W9dc6oLLHjMb|_;kyJNP6C_RTaL<%$nvK@lF*z z)@oSn&xKv1xf8SZ_nMkFLM+qF{V;@!;63P{Vq}=WNN+913jup$Md54hd`+ z7D*;4)K1iO0$QnH;?5XMql{LDRd!g1k8o9U_gc?D9A>rLx9dy-9n^_aqI?WxCWuWSBI>Td0pF5rKx& z_o7-D|5Gm3Od-sO!L?xQv*hm^Y)95A4}KCcwZr!uH4YXPQq=>h-GXUSOl=abIa8Dd z1XCU1rhY=(+HCFmvMWFkB(Cvv*oiu8Rq*y~HpAZZ)-f(Y94G6wjMu5*o9bKN zggeCxPv6x_{E|WByXD}3@COf1cPr@71|Z2pB|-s{bR7`|G8yTA$oK&5Lr%mi{9k4K z3-T&trW&MtYWz=2H&E^L;gXO~0n8kd6bL<2zqlaELYNicTKbn9jH*k>4f!5m5~3?I z83ICBP$z?afK*~Y7|LWxC=+-opOQx8rG0~Er@tmuaSO@q2{qlsO((U2r3=Nc4< zCHqsjP^ADO?oZ2^fgh+_e`rpPAp#668mNqs_TNge`PsS=K*^G>0yHB0-GO zbQMew+*)Y=g+k`@2B_^owHml+pr{6_avK>I0N5cl>{rOD2|1{q87qJ~W&j=ksh;U! zSkPJx><+2eRirxjx7O5b^e?UK%vbhbdJAfiXLaT~`;T5SXtoxqkAa|-|8ixJ+OO`c z_kS8X!0{m0HLE*&t>mOrMz z0x5hx8W3>*n^X48DRbc@0hIawU3UXpTJe;W9C}v|i$iP``Q~!pIQM{=sfqm`94d`&#-Wc@V8yI&A~0*A?iHwRBIf%TYLfK%PNJem(>;v|iTP$f z-*~ykox(~UBEqM5`hZJ`s|lxNfHZ&ut+-}LWFzDAaYB^>{;m}+Ecsn1igBqWx{~@Q zvf4Zz!yEZyZ^PYDimvpos1xuC1V1eD=-S7dzcMtSitAqO5s!8_?c6$rXCt)NKF5qH zF`Ohr`T(KX)q&EZOHy4%dBZE~vm61v8`yjXxkBZiR zl|uQ8GF0-k@dx@K{w?)4G&eK?ho%a<`e{-Fa}J&_0wot%!dqQ~a6CN`HJ0ER} zU3zGuve0%-FXDqTDWX!9gVkp+*ZbCKEGO5H(GE5}L)y|9cb?&Wmk&GX3D-W=K$%ir z?4uT;f*7sd44l}e{8{E1OiC-jbT#l#A`@Ro$^z^0Q`GA|N zITF0kM1A|aVUrKD)B)$yN|9xhYiQ!eSSIfKTPN0y#A+ujB(G zbh3Fgw%jS@**AxnAfFDr`O*vCqol)D!N7>u5H|#!8qgp#IJB4PohN;NA3k6;!&DGP zwHYNkP;>rv!xGMc^?scTYP0m6N7p10xQR2$T6HN-!*qzKx723n!IO+^3qsyu)Zlsf z&A9Py3*lP=9NO%t5MR~ixDn=S8LOFnXOCUNhZxT)&g_~nG2rEP$7Kc zd3j{kY{vg^$eza}{EfR6SHJ?eTi_F|A!~-|prZCc4lS@z)GbJ%75opBft*@_GqWE` zYJ~-%Rzd`AuquF|Zf%3{BJ3M5wNH-Qwmvqmu}yhAKV=BzS|{UU-}(6_Xzcr9+Z}E9 zxt1QvQq8MBW)dtG4mF>iXsrf6UK}fA%1n-#{V{2T^GY{Zh#!-^lVoL9j{$qbC$0HG zfwQ{_rSj!Se|%!zRT@O-hlslA7MJ0t1I80MRF9dSW?EQp_&neAp}K`|r9@Z2k(W24 zHFy&_wD-1Dvm!=w)w{mxa+190p7TR;YR=dPpJVW#)-IZ0y&rOp^EJEm+$9rlM5I-D z%#H{vS9+CS;lIbXvVm5fDkWwgQ98YIfA}lZ&Z5wIin&LYz)d&C=dJ5++J>fAy|w77 z$8V|y(7Jo{Zr$N}eywNuBjSzY?ft!lB0C3hVLE6%KF@*1O@#E;%kOvg>NEYWOe-7m z#EMJPP{Sr|j8}e-fp z@1W*ai#P4yxs`Cu*DY5}i!+6OZvN<8i*;~%-(H2CULFmVC3w1A0;Z07jnWcpoL|fK zfkAJ0FuaRg_02JglwN%FD%VqK)aow~p$u?QH|x+(&U~z(&79>H#^$o){2`5+|m&z6=YpRxjOgvcmXW#Qr<8x@`HC37POgu7l`xBhMawBT8;@qi58O zy-Ql`H!9m-$iLN&QCR#{EdGX@X>(Mi)V_&_UPvIBP;N4&;@)qpI7(+qSMI@8BCqGw zdsmcu*lx@>i?Q&1tu5(ufB8~4SbWKLfe7$AH|=75u;ibI0+6nu#PDoI}O zU?BP1&gGa39t^Py9t<%M9`UE^557q3f(JwFf(Jtkgr%I1xuC&7<_G-Ka(-p7{sj+) z7>Er0(|2*{3my!y3myz)2=)1x3my!y3myzH5YO*A(CxW}KCiz{CQ7$L)I&br9O z{}AB*B`iZpeFkLbIH;y^3N+|<7fb^x0Yb-l?D!cTD!Cg7S2$dtjbR>yy8=KI4s_)M z><$nn%rrp=uqy^7;2-<|(}RftM8zkV0%ZRYW{9jzBP%#P$Onfn8$v;ds~@Iw)`v!^00B?6 zA(%Ox!3>BG-2q*O)xcT9Sy(di#?z(YXb|=wOcyx?+?OI$G3+0WP#dzz7uf{Z z^3Izqhk^5_2H6D2V*!(gKO6%>8v(AiLwTT)oGq0zf_zXwT{i?aNqQ8FcTfW3Z-0V` zLf=6Z*=H6^s|X>+z~yblv5xdA0pLG_ zYC$(#Tma-Aro*B@c7f=L|2M!GWOx_cSg8$gc@&Ssl2A!%#3x{P;fSUz-)Rrj4O(?U zOVw0U+iCZsJneUv`_U9)RTz@Kjs48bq+PRoi24FuKRwjo?K=_oD+|eny||T?dnKU? z0(bKz1mHaR^i|84AN#O)_I#dXxxIZl!m<_}`i;{y3p%p+Bp|GA&w$Ppwq^9)$7zlC zEv1GVe3qP4;_(<=g9{O&*?_{1GtJlkI5zk*2de2~tr-dDx{rs2$%!A_DLV%*6Ed%c zot}RCprT!s9~r{$)}w_NsLt;l-|9)ZaGGd5Q!&>5#a*`&=I=8fo+^CFWP?$KyrBHE zLPlN8pzLGB6siu3?W65NYWUTkJs){+z6UiM4wSwOMsZtK&E|=_fgt}GYx&%pUos%` zVg8W~`eQPbP*<_L3R!z7aaS`#@2v~P@VwN_-Na*#jJ6};lE;NBFwo{JjH9M&zPtC> zN~jfODdSmQGNuf`|Drvvt(~d#VCP%=5MkuFpUcqIR_G_YS2@22pQsSR|6UR22IpW~ z-B-UY=WKwsy)ov|x``M-SSbli0Xk)c{%f@Q3T+Hbf$`UwzCUmu57+)_D9O3cv-$f8 zuZs27q4^$}X!*udO^P60BeNuTjGBm-F)vb#802?#UAXY+DMx0h=#rTR==LP@4ZdzA z^d3xj;~95nGH04)ht7r=COs!Z-w69<4bU!PAsXdWyP2IPMp%ef_GE*#T@=midk=r} zTXr{%!&I8v5Z`HOa;=&6zhcn5JUqg1GHL#yT)eE=bIGX*aa$$5GJvc&Dc`ctr6!j{ zu}E93qlwXbVXdSoEWaq1m(L>irGkFbe4_)1YQsG;|(`LPOZNdk}mX#|x zOn*l|xS9N7J(*c8tA}AG%2OuaywhzU`pNfR7M9*m9U&1CM1ks~XdmA*RWaRfCUQ@+ zTjUYJWwuPauW_x*API$*;v_g$rYxa54|6Ja(@sN!v@#RR5>em158KiFf%d`2eOl)Aj3e%p`mQbcqGtP31f{m|w6~T*pa$mO%2tj51vQYw+$5 zgNn~5UspB7lyAja7T^Vt@Q?@AiAj`*quv)m*|kr&VI*wZP-Jf6-=t6JiB~+4cH7lm z{}O9+n1Te>2Za$t_TrIbZak~JE`ic>_v{ouj>~b%^QhBl>a)_DeV+y;O&|BdUtQ%4 zW5mCY#}e>dF{@CnX!?aAyrAgrn;E&-W80kk;cOfX>!dh4%RKaPeUqxn;-RLQ*Gf)O%$>oRTz7^QC}QdP4i zs}(w6F%qZDDC$)b_bv1FJ6%@m0 z8sVkMn9!Cpel3nDpO@sM`ZzH-=aq(r1f(+T`&(^D2r61^9gP-d5l+o zYEwX!P{wIri^R7sqx_>}_D;jadzHzew#X zL2YOqHo?ZgEn?`}m348maHpG(gDLUjUn6ajpuTyXzJaTR;$&brf56094jNC zvv4^MSAQSH$w+j}U#3UvrfjL9+y;q11CGhXGY&nQZFH^pB3Z^-HT3WmOhfTZuI4Sh z?uy;bE!x%=I_-he^VEHO)yIz~u}o!e=^2bK%)->+kI0p!2#OwHCpWe)(_to;Nzu6N z-@sjVdOwayJDF|MOeyK>!O)K!)2>H6LNCyYo~V{~!mdr-C2Nj?Pulrznb~&Up_T2& z;C&BZN=s7xl_4+F$06~AmnnoU19!ikPhAFK>qk~Pz|xF!Taz97Zb6Ij)dSMgqwnt!`P0u+|R} zhOs0gEi<3zZ8h3`Asyqd_f584c}sq`n+sQ(2|nsZ?3l!ccRdd7?Tcy2UC^r>oqHsk zF$hcFiAlQtFn;y*GW$IxwIf{jreC6Li^vc#4mr`PHUWr9LRO`5)T2fpgHR`nftgEC;6b^(5ZyZ&Q0m zLys|Mc&F0y8`fS)hR59>dpW_f$87(T@n!0=72-3An>N|$!gHLxrIP%wG8+qYI5+K{ zU@mrfqG}KR`dEgk+i~8YuFD+DO5g9B@!^ZB z^Df(Q8}uFbm=mw2+S94|Q#+SF?=$>Bcko7EPn+y+Giq+)r%#j*vJS{?PY#St?Ztx8 zr+sY^&KblCT)5k+y8fDJuT>LJTO>5eVDaJyEB3-gb)2N?JLZY;j`!K99n$CcJK>fI z(4*~C=7=@S>X$`K@?q%yRvc`Fk%KSxqlJu1-nGeEX@?x%33D4MG4>jF7fBkeSTxm4 zKTWXB?oeU=5V$BF^@_zWf!R~Y!Rkuy;|FAUh`o=$?|1hfuQix3b>y+%gN5!k*Wvd* zI`H#|B&&#Ejif()E%bi=``E8<^{I#w%cfh`ovF>+G!s1P#g}H~mxAmPo*IfK-McYE znP}v2^8>B!>SQg)rQ!p8EYYbNM%&|c^2UrHC-NVM%nQPhGHzg+5!JS1+g_LQssL@J zQVN11<+^Ln7meNcD77I|+!a>6wf#c*>Ss~h2KrZ^`|T{!ABtWL+55hkx<}^0yU)a^ z+BQlY5tvBSe!~6QR_k;6+qBYyXZhGchoQ8!b6>bk$kczwMIemO+t%A!Y%Q5rTkl1; z-97f7^JI599jdCY##}VzG_t-K9aKrU^kzmK@!C~8QX{3r*Rxs7O@B%btCR7KWr%)P z2IJ8tgK+70p92IR5yz~<@Q8jPck*yqVWiL{hDSF-v`lb2)tPL)`>*RUnLTMqj9)~T z+`WUAG{OCXJ9?%+((~?H!=n_TmS^~A{d&FJ*bIs5QoSeEy4nfLLMQp18jYLSbsN~H zQ;5?5ibxH|#l~mu6wKWPOBS4~ycVJ`>O;sLPbAsrQQd1TVO6IvDjTw&wHk(Xe>a1dZNv=J*e6JJryzUwK61OpAs0FZr$xLt`%js5p3Q4s*U~T zm=V+VS3RX#|zc^@+JOyVez4#xh5NKHeix%oT0EtY`u$rl>FbiPyILk)?u!mgGl{J_J88VaV z-wq3~hT8@O7qq4b40X31v2gxtbh@BD7B9r1iG>f9GaF(;^6LPxcd2G%9kxt}2IKL6 zefBueq6SbA6Icz&;UJ+N#OwrOvO!)C5Z-|_!%T~Wl0pTVz#4hRX>Gz^0Hoqq;) z{3AvOIc1Yjk1`D&k81lS0sa#MZBIpI?cBl%uC6JE#R?b`|8vg-k$c8}wjAjh{O_O6 z8!++gX>Vh}fu;;XFd_&^)4AYOP~4vevrs}1fRzPYFV$GUQ$v3jm>ohx0XB653ydN# z#5%`9f~jU0iew-w1DpeS9Z(^KoUq}X$ckG!FDdi_RN#Op5Mt(`BZZd1xU(8zC=EHp zg#%|htA#!S)RtB_a7yGfImiD)#=yVBnah;i)i~c~yNPerS6`Mky?$LjgM}<4YxDQ9cRp>P?Un9Xme6k~ zN5}G4Ci}B5(1B1n?K)B>BVo zNAJzM(P7FUj>PU2*wHln3VM5p*w}993R?>##(ezPA#5`6Ys=C8;pm!+%XiBBU$1TH z`E+mQs_8zfozrgn-9xb?fvc;E7sqldUu5m*KHu?%U3eUihDs%r9@28%plbUPA%l7e znb+}kCf5BA)k9seHMSCy3)EoLXUl5MTWM(Ps zCfusEXn8Z1)Q*{cG?=nWXu9p8WlAqRx3!M2%D80Ta~fCf2GUstpnOkZF;)ASB~TSC zR_snt49As==CfzUeJPf0&;PSk?&^tjgHeffKUMyCdXg)#3(1Zyr^Zbj1BWF0kNeq* zsvk1^tlCtm*j8CaNyIi{8`2T>2wBu5dxpin0eW2d_c@fZxU1$9qdmr*?6keJG)@T? z*V2!C({8hIn=_j)i)+5W^Ts{|KK_om@rj`6bo{g{ZvDyp`l4HyNdn1wR-s8fC*bO?^}O7U8)@)qd?fR_xL(1c2r+65cifE(dpl% znDQ#*%3L#jsU(z$cED<&Tp%}Q=MbNXkZrgU5{pf66+=KcJ)lElUJ|E(&D-j^-jeHD zxILlg9?Cr0GDjdIHW__E*p2mgOZCfEdR>(I)p)^!q;HGlY`&P@y!2QQ@p$u*@oeDAKVr}nxMrDn%)Tk8tF}z1G zs~_4Vt6rY@y|ZU`sgnPm17qGT2Rey&?+GdsUty1|%Q3|V*aWoPr}3k$gjLd1Ej~Tsq79%1I#P#qZCV{2Y<~d%M!6HZ59YDsmk) zE#E3vy~ijmSs1=*N$0a)!m~=nvKTmr`G0~d%KF9^mhuVxDRPkvVGq&J#bRGiw!4d z)(={ENF9KGwoc`b*q}h68@AyA}y;F0)~XvJfVtuhe-o z@^m78xGa=tDbv!HG~|}GePYKf9nU;fDG))bOpG~{uU#hf^zG8t#lBz-tf-}xKEY^Y zTE!l;(uH%wzV+e-jrsLSJ6I^^L6LUVTT5b*^TPW3K^)OvZAM+BdhTA4n$HcSZm_`g zh?x4-(VqT}>OuE)>{CGfb)Em|PnzChhXYEt@ld_n_l!ebC)K(IoyfM@5;iGCE>mZ& zJZi5e8L_%Dbs}~7VHsx*WR|5-_LlWk8z=o6hVtv5HV~aP9ex!nG)Z}ipQ><|w$0gK+1g*Ic)R418dYT;t?cW7V=y_aO~ITruAA9in6&C~1GUW#Omn|zu4ss6^NQA&|Z z8op!t(%n)qc4^0t^}~%3v#)QKfAo>hB+5xmVM*A-QolY{N z6uFPq{dL3ntm%Y#0$gc4w-}>L@fIbP)e?kNr3aShvNA2(h4MDutsY#_s3q%W3s;fM z;bt^en72_(fixf5wj&1QO6Z-Y;Sn6|o-KvElD_r!BQ=j(eJl2*uEvYmY|AN`IkegY z?7SWbzbif}QkAP&(5Qp|#CJWYYxq$Zt?re=LTq81AYXPgl+Vl{bIzs9-FjKc4Y&F~ zu?8!T3c{ziJ&aE2+Jytm#iblj5Ott&?yM0yF(-=Y2b`T+}9 z_<*zRc1WPQtmDf!f}Ww(P)%_jsBONYdFQsZ(|b^eLXq+lS6KNk)c6(^vQI1m!Aw}R+>mB z-}zX6XgNUi=V!H6Kg33B%$0ZCQq1^M!b36#bqpBzGJ|T9OH7x@ALfY`MzyJ^Q|rA8 zxVt^OC8?=f&ldyxCGgRz*fj3cdAvoP$tsUL_Y3Cqb>?jhMOkzwmR{=O5ITR`pUBiEJn=R#sp|< z43{w>uha(y4EyP0H^ROS@*Ft1c#dlIg$eF@bc=PiFxy61O%NuuT8*udHgU>q-j+g% zalrI={`Pr&iY9Am9gnwMRj5BIJjWfM;^oT#ORnEkn7Bjqr9NSp^DIT*dz?Ha!XD<_ zLi>rqiq#{y5(7(hMhwp9e<;qQn??j*M9q`hJDMu{q0*6%#q zG3HIAt6$ss_VdX4qr!qlH9IfcdTADYze69% zM8Avwm%tN{rX3l0LIFhFGe6ru15ZF72r5B(8_(iF&QMBM$>HYEvLTQo&q6aaQfX*K&7<3jI@|zsac~O?_B0__tDBzbb8hj|=To>gx6#pK$^^bM|%72e>{#Tg{Dy4)| z!N46M13dmO;^?G>}0(%x4dJR>onuD3d}eEdQPq`Hyld3!ECVLEd2YBn1xhUnr>aQ1O2u z6aF2x4iguKLi<3Rkq#@o6V;=J;SyXF4J{*|SL*zMsV%{YohfGL`7-}j%)ne9B3`cl z`VO4aK>m$K1R2;xh|dCq2q6hhxEZ8o^#{`>4pkueslIT+fgcaB1Ctm6oFW&T1nktn z0>BbVb0PHzz;kTR1;2(IL0k#K!0Lg{0!B39O4I&d94$;7aL?HQBw52jATQ+44JSmj zT{2cyeZf)~K}`9h?DMZl*%y3m!{Plio5Tzu0>w{?tJMd-@YSNcLP@SM#1xdc`AF8f z){bDF?^(6YKC49Hh()0G_r8-PcFy4|JukmxUhXJx=w6r+2=3^`Dd(RVCQ9z}GI)XW zUj0O0Q3}=bCo9JV?9_E+12vXL0^lOY2DiZ zKk1R{)c2Dxc(f<1J`u>Fe{6{VQCu)Qchh%@3E_w|Wti%smY|&+9V9D?b!VB88qW?cIsB3o{+vZK(>>Y;n1~ z6pLD8sxp-GU^js%>-9{c-DR_)rCWuurMDJn1p5|g@FQ^>c{F>7sOx6LQ=~C=Tg1)K z*jHK*i4o-7o9qlW6qCE=gH`RpWf(ctUmgiBve&K{O3Eel51TLv+>YySeG=g4->~a# z_)Vjx;n&Xe3C{O#4(!L|4P<#Khtq3UF`w-ymA~-KUtF~RCFU$^ydgkJH@rY#l+2!w zMeO&X>C;G+)asc2-CTi!dv~~b6W)!sGA*;OjwAe3KLrE#z#Y-8r_W2=wfDpNc(Y>4 zHjZPlB3N-PS}QlmXO?0-#;#$hvbBFt>S#8cG2-MN)V=+-o#V;j-Nb}dCemdNS7ua66n67?3vb*fdRkQYVbd4sk>_g&R zyx@IA5ePDPK=U&6cUJsb#hb5kS4MGdZu|BPh)20cnf;iNvZ*grGyZ~M7#&CU8J)d) zPftgbubBUO#$`_4Sg&K8kXxfKL(0D%${sx~4@iD>uco9pzk^+F>RDdA<4*K*1+Oc0 zH3tuZKGM^uYpO&qNRtVpNrH2qp zW_v5WPuRnIp=ZUzJCt(}hBZ2vwNg&>BeHBG=-q#G52`N8zICj&W{U8z;Qshu+ud5P31H?OiPzj%@Qrdl7hF-ZQ9~JbI>hb_B5UJQ z7;{1t(q9o}$ZT<9a#Q*C`NhQRZ(d94m*W;A@&s!W6$ED-m&Erp%w5f>b{RayYS~f! z^RwPOTQeFk3q8u6|B2@E$z5BW;un>~j6c@34HnH4=@uyCPd@ssrNZ*S-A$$1#hp!qjMtJO3vx;^O&4a)fv zLa6N7sir8nzQ4+)z>>e>rJq4ORedTpHWNR?MnBc@b8#jwfVuE6#<=!GgwrP*x z2t%XOoG-!uI<%;8Ic*yO|4yay>+FL9{##di0c+3MC*=%~{6B1cB4>6h#2KO(bX|mi zBYAQE;EKcn-|e~055z$KDf|Kdh@a&S1c9#NXV~(y!XH=>GTZ9;;0q|X_yv?(`~u1? z4v1RM#|U0vxy3t8hcG2X54`KNue#QMdsVV+#hIWlBE7{q!K)I_*GPqcn)%K8sp+5QFQ0 ziJLxvFtWlOaQI`2gFz||;PbqJK_?6qi^KIHW3bo-G6oA$k$~%iDFar7O3=InTpRLM zK!yMyCx>2x8-Ol=DOZA+CC|zrxs4Lk49ZZtBUssa5C$+!QlRSX1gZo>po%ID)<}y0 zOP&S(K9Yu;k%|8YZd_dC+_)$TLT~}i=$Ucx9EQ{F4}?Mys1i$u0?GxwaF7xRLcI(= zVO=sv!yu>;6VP%3vnhb&J7WF+jCVid$D9|!{lmgjC<{+O?W?&W2Y-r=R*>j@>EiuM z?lU-l{{WHFnQ``u@u$<<0C!7(X)NokkUI1btz}2DqpgGJdGS4vq!ARRyn% z-lhMKv$qbb;%nPLflX|>ySp2ty9JRHkOl#f?q(CxNGh9_4kbkzl#rHCq`N`7LFx?P zFW>ik-}%lTT-SP@wPwxCnwibLp1J{@zY1W&z8k0Y5M&6Y=S9W)vmOu$_U%jkPb5Gc z4hO(XA}G7^9ca20p_x)t9`q28xu0B^$WcuW;Q*(m!@r7EDr z6}k)a`_D5%U#a|cioU3mZ?>6RkHY*pDOA}&qjd6v#yxO>rYYg z%kdsMzu1>99sfziZAOaKT{nQ?d~%JgR!`r4f_B_GYhAArmA-wo;cO@m5(Ez)E5!{e z#Cd!m$>p-*4IAq+&Q zpl*ijY_4I!?PntFbY6!olsLV3JI^P@WMO5v9)YYEO*$~B1!d=-6~3*QZ{z3+&zZZ) zoZ~7u&o+ihuPGQsx8QPf%n4?}E1S>0Qbkbs`Ke}kM&34FnT||nxhWJwuYp@lG-e^1 zH4%Yraxu+bPeuFH!g1v;VJj~lEW~-Xw%6~v?2w+Q&~{sQBmDX$6fLJxwrlOj@9`m-op zP}WhhwM?1nx#qe@_o~Kpy(>bHy1psA3qnO`kU!Mekf{{&v?BQyUuub)8E6(0zEa=r zC;Y2x7f$zp`zHz24$Beq{xD>VYH>WEa&nM7Y@b_seQ_O=d)1bVJEbH!OM?Tb8M&s) z0FDl~3e)h7X~x>@3m?X2BxQyVpDp&#aZx;r3~}hvLO60~E7gXvAfj&6fOVlVPwSH8 zd$m&7LX+A4#U?AEndUp(*_mm8lhXBeSkZp`*!SuQs_TNl@;phc%NB@IJj!Q9#$^hL z78;%gt5IGSRm)bpy#X@RZYAqFgMgoszJai*^sW3$j;>}@`Cb$XH$O<-o?q3Wi?jM= zRHzB9K5l>98j3&qnT=DkQa-75g@tn0s{%^Lo};5yTkAN;x+vIy_yKKS%C{m*gyM4A zSxLxd9`DIOUrz^X2Td8Iwxt2dRCL3e->BnBx4U{vYd|j<>UfS1+R@DW%ET_Hiu~4| z9^Okfvq9D=np}*?WXdAxbF{g+?590Hv9YDo+AS_FgX&8UGhS=C!EI|rRF4(Q1T#TPK2Hu_d(#>=sdNApZ) z`Da~jL2dqoM>dJ$ zE`w=Y37mf`F?DJYow|^I`**31mu^!};Kgntk)M-HC>Dw@q;#mtVXg6E`AGv1C(Qx+hrr=QU<42 zR8Wocb0meL>4UFIpr-f~XPZudk1{oUXr7bU>-iF71^||htpWW0-5SN z2{B^@aZ#{CLVU1UvDw-<;b*&9$D{)*TS-^qHFDHN8&}wjw;=kiO^2la@$G|Bpt zusANGG?o1^;;v+MMJVZqu~^Q%OIzZ;!~AC$$Y18^H2ur+(?#Oqi>92{vP9%MIAu7x z)T0M$G1+KTEvQo;6 zf&ou8hwM`~eLg%hilBexNWi%dV^##-(nqZpF01Pw(}tNr46M&9;QQq{+7Y~{y&U4+ zFn#jzQuaIwk0?BQPk_dDF6NTQ-7;fbJ+&3_@HkN`tqt;PUoK*|M)Ma|j*s_Ej@9zc znK68mb`QOT2%*#YoQNAoVbTT6FqPo13o(hM>-DW0si%dA=9nA?EQJW6vm++z8e96O-I2u?)cQ(5D7KVL_<& zKYP^h34uaRKo2nEEl~R>WVt)|hrunNxl0Q8FTJ>icfjRtBw&)eH9G=rJZS9S^k4tf z<3dr4Kuq^zaG~->x28rQ$Krpg&Hvx>5nB^6*`S760Cb(%^+1BI8iB+hVkb5GlPOzI zwqEB>{uupAW`dKzC4=)cAbRQQc#2a^i><4tm0{>PAIa5OL-zSIft1IyhD|dDP4#+@ zMyrl#3{@UXDJ3jd(PXeeH`r3j8PZ-H=)WE;gxFr6uQDhrMC(f?oCoWV4c%A! z_>^hU&2;o!c?~&pJ|X<%Q>B^u@Wgz3Em06wie}AdH+nbyC)!@;1WlBR$RnL^gqKz} zXKb|FUMr_w3AOkojNdSry<7vbo!@=))Gf^5a`ze8S4^`nCyymP9^r#@+GI{h@^6R# zw8I@;2P-ZW2blu2@ZKjs0Ft&NJ3YXnt!-k+@PBwBBb0QS8<-ozP<(f`LRmV zhk*@m*Dv_`Ix?@>9_D%tzAq%4s2a8kzHr>7m5mEz?PW#};ZOf4E0G$*59j~wJYuoN zYW4exTZfFcPao|8J4QEL>k8Jh}$4FNpifrmkC@ znaZ*EgU37H#fhX67*Od$EyuwsP#~2F8i^~q7qU!4_L|$A)Xvbl)8p$Pb&GkN6!+90 z)ZbADNmWAflrX-)JvT1E%wFi7PJGSS9M5*4?3dHos%;KY7 zNrvB`#9Mnfx^RfSCF!l`mTs$Q)XBZh__-jRH_#N`6i{W$Kq5!ti=UJNs`r;&L2aR8 zCoo=!WrTz#uWg7Ig~#+nuB-N9v!!sS1BD1(tsZ73aZO|(ggdpugMyY$HS|O^iOgD3 z_51BzafSV~11CKq%!c3Jq0?fHhc=9D@~tv9RQLP!GZ;jaFcDU}Td zne_1>)fx@)1q|{bt#8ZX(kxmJ$}op*(ANnkheXA)mQLDe$amF;l0;%^J=w2C9!R## ztBfH~&>D9n#2{0^;f!8Nnc8jkT-(2Ff9o5=>Td`Ii=%BvWYMUQ&8}iiAh)u zVyqx)smD#5irz!9fYz?fe)?EA1ePau?(88rD){n`@RJ~BKSgY)sHf=+j+3IEUo2c- zMW@UNT?(+egKb7~8b@%w^GDCnA~s(hHVn z@Lgw@$+9pZp1e5KAyO?`5_D->TnVtRNHko;;XathNJ$G#*rr77A0_MgD8{sCwx+yJ z5+RgN==tdgaeUItXE6=;^wW;*v)*8YMK3IL$6rCu=es!`yVJA@*+m~6wkJO@QQhS#jnPSgm^MUg<8BD5`p1T*oh-oMFXk>vh`_$vE6Q4$JDEiRFivKT2ygI3Sem>U>f85A=(B;~F%|zQD;C zc7Jes7Tw^YUKmPNo~infM^5DF35-+=SjCJ=S@eW7yu}J`kN1hjkTaO+*Y#RcTk?t@ zsY~SuK0Oz^Vp_G*_MK1Bzt9{=)0J(E$Z z(}^ko4t-IEowN>tE${JyQ@(IW2ss7H+lBhCU*sVwD!4N&acb&^^(Ug8p0#c2@yB@^xSA(kYigeV)>MPg;T(ZXg^n{B8?3>ucBm7^CH(~}B= zsb=0y^=T@4erc#(Q$;vCQDFx*k>k`)(Rcf2!`7CG!aFN3addq(8SS$YZ8z5Bd`li zfi8HV1B^P|7_@*nabXM>7mf=cRR2l9uKZt(UVr3d3jM)NF7!uErqCZbnYRqtxA+j? zhP^K`$jb$F?t?QctpVsL z2H2aRF#|e?P_CySR;b1ckijj6`X*t+4b2L}LxlnW6A60w0;CH9P6m~F2`2(=zE#E9 zfVA&a3%4p-Tfj<|riF@gr>e9EICdugCjCzACf5EvAg~dj-(;`@5#j@r{>z$ndzuAJ zJRl?y=!deP0_ov@s`BgrL*=cM-42*77jFk_q5K|jr{eiVN(l8aLA}c#2L|#&vu}eU zP3=JhP!dyA%-iDDx5rD}#yq~Y2aacY_LnyM3E=phyB#~L37EMu`Y`^l^-u1gWCM~P zU|=JXL4m55kuul5a{$r7!g@mo9YHz}pgOi&L{s=$SO)o5^MH3u{u^0hqq{^yUvwPP z-$rjxDCD;vO}ko-@b|qR9c_5#$l3d?EVkm!hO)vTo&O+pp7VTjRfARcKw24Zhe?cy z@-P(02--ZI!Z@YCUWy3M|HdCIRCD&qmnm51(~|W2##W4);@Cy))NVq`(YK*<5UHot zzE}a4{tpQ^2fHYO{WQrR5ultmjGx(3N}5Vs6POwgnBGjDT&*u^P4Tlff5;~%P~T~^ z&HBEL9f6zD)Kqu$itJrF?WK>{N%Khc;k$Vx6Ucfhe16W4D{Oln>~gy0w@2U}9Um>B zu#;MeFq&d=YzWU(<&TVQ{$E41c#z>`ZN$7~VuSRci!eEYiw2w4kV)?gJiIEkPoftS9 zR841lV|}@CHwTzBbl`NKfy(th_``SmX6pQold#-xew1; zM=#0URkO$5B)$txn67quCxAf#X+<-KC3at0Lkjps32QCtIVQ4MG9K;5Er)7CH;y6D zNq?i!LWJkp_r!F)T(Ew%ZJd;k7w;NzYtcOvF)xTxAfP=U6=ws)ltrFZ1QVR87=teg zFXiJZ-K2_8 zG_S{xg5J>0omZjKW6@LO#IPhLEj0{SSu3L$B4gO@Nl5S$hFfapH)aYBctw(gjaObU zDq~|QS1m-fw5lF9Hj>h<{QC~1C9nx-8D*{dYT3M3x)@@Ft_sz~b0vs&rV|z1>X|v) z{5Dw5bdTmLDZTnC0$d6{L73-1SrlNXCY#8dyGxyNj#clbQ0-KKG*u`|J*1>Vo6P6QsMcAAL6z4EQidnl0<;uGrk0Y5N>4wuYGfK zMyShj%V^KT*FFM>hcWbpCj>}h5*B!EEVO&L7Qt9KiZ&5@O#o|I4P-Rf25qiIf&hZC zghd=`1bbXfS`5VRS__cs=mdUne6b$!JaZ;*M9-t?BQG{fVMs=@skyzLZknByio~E> zn|P*dZ_2U8JD*X`y)Z?SA@WU_eZBd^==T0kj3~0J{>M#CkZ-~IuxuFeXDWD`NR1;h z!^hLIC9zk`K_oA0LT!zaqUhx>`y=IIt;tKhs^%qS`p=Pg2<9 zc_THc4u{-3EMy%w{pS3G{#CWTW1YTt+e;(k+Q5e2|qtSsyDD^;NjDH zG`5r4i#9{9L#2Fuyn}Np(USTl3`gM6E{%!i3PVsI9MR{d>X*|HQFWok@EXDDb~(*z z&t{Xa&VoJKGS&|>htcK@pVkGSVQ3Z6t4UQ-!a@a4Al!KTVHAdS@Ll|lBD1HqRtB7w z8veU_Y6VqruP{tFwmR^Cq%5K|)Z$8+a5luvg*w{Tk2_l1?WZE|M1_Y^%S{gxReEe&d`Ku7m zqRtXySM&R^27MQL6(gc?KVma1v(u2{Hxwuan=wg&{QAF|$Ev>>dt^oLL^4beM^Bkvq}`Th2Q1pM_6fR3jzi=7 zmjBK}WjknSt)w&{>pO~3Nu1ZfHySGC;_%ORosE9jMz84QN*P?pi*PZxv zv1&qHgSpNXa7d>YthryaG4*5>?qZ;E?=J)z_nv5=@dtGJU7wkk z>vw%-pmFcx1{(LCXrS@O%)d!*p&~A*$jX5Jk7<81-U6CGroCsp1)v%4eccS8@yE2k zgR%h4AJYOMY*_%=&XO_UU%cZ0n)U)|K?$D#=)=AWjv8v>4SE5s2Y?F{<0Bvjr~wtS zv3&qP@B=eI=idMT$~&KR<*m-`R`&@ER582Lsr!QT0IbQOTe}X%mJ_;<3d{?sN7Jb z5Rl%j<}S_+$Ut&}M(_mU-{N0ps6;5p9BRh@hd3V!xX*znar@Z*W{3n1{*x&a=Z@Fr zzjOxR;t@kjAgFg~IKUjYOh^Q`=LLv0N&Zh|;@`mHv%zrzUiy4ae5h+UC>D0V7Cr*B zg$~bN1J%0y8u0JvEeUzK`0w7Lzgv<49TfWpj)U?)UFQG+>K|VKp8!C33WP}lgtl3* zqR?3=NdNXyE5!l9BN=1>K=8Z3i+|iF5C?)s$bttjV*Y!1fKxUB*-1hvcS!uV)YAGK z9_o_<VwM3na-D@xR|wuOEav>g zb^6=*+q8>0?Mw728l<(`ciR{Do+9jTMKggn69}^53EN5s0e|qdTj>ZN@Bv~cbZO|6 z2RaTAG;;U>fdzPH|6NY;_G7sH456jo=)`xlQJDX#NeGQ^_a%l0ewYE4S6XjMXhjtQ z9u$oT1M}YOKUszF65t>+{)o^43t#+=>+TBipbmrp2f^*XAvl0LIsPT^e+byQb0Bfu zUpaJ3+>Zom#HmLQ1+JJYjJOs7_(QBEu0WkFllv{|7#p6GaRfCDIG z5{U&WN{n$={1do$$#rc)Xj%yH4c%@&asIQq8I*dHjp+U+q~38dLe(}%(10I#Ac)2a z*wNZfAyq;cFmaxpp0V zz45%2;tGY^*-Z}>ebg!FvK6&4X$nMfmx;dy=@QUo3d6g*UmG!zeK{CG*8sw0m z%Xxh8I;c7ViYPqrNz;@(=yimVq$zobj0we?bP&1iUx;7*Ax zf4(OPlPc?H=8g}1zjS7;@&ym~qUj>2O<01O>BE_YR%Y&^U)&oXax%52F z+)C6a(5noyK18s{N~IOmKtgy&j(PLOfue&qZ56LiU^)R@+i}|F`^sLUVTh|J;SxO zfDciAJ&89}{YK12?`E0FD9Rb1*WPJiDUiavS&q5OwlSj9yrl1mW>z0 zDrd7M!0`rqm*J#uJuJ(9tlTS-CJVmV*Q7nvE$S$hks0TCl@Qjm<6;8V%CoUYVv{$q zJ*OXzb?lyW**z(oD7j`#s~-2Y_VJnWcpod$eGvNU^NWH8Z=oqp2_vy8f``y+Sah@D zQAG-(vYu3sO~387=#93`$m~O6n>kiKRBxJ(&=)2tb{0=vtw%X(Z^9oDI}=~5cGu)A%st!-B$T^8=4|?ixTda) z_k&5TWL>V_IythyOY{k{dZ4ueN)cTvirhBrMvz4Ck9Pa%rp|=ai*^hY0y{;3MjG3P z!{uWII*Ql&NyQ`9r+49x!x7~}nLU7gtWQ0CuD6vJY_txi#mHH1g zBD%tEbP1!I1ou<~$EMjob?|hbGL?wx-(ogur>yIo>Z}p1+w@Ml)XHVz-Q1=kFaE+5 zNBi(+kl;*%|H^BrBQAGe!=*$5`UXhjJo7e}BM6x{6k~5?6&Ah_`vG?bSRR(6i%=u# ztZhNcm)abLk&maIIWHyu)7G$iv)VA=)Y2DvjSXX{ZMTwl;XU2*1zTBHuY2a*wOBMC z9`UCa%!IBJi&V_i&lm~Isrk!&?oFV4Pj zs-J{N^zxkiXqb)UaOquK?J!0{BCki^5NCVoDR%?@5m*EK>5Z?clN>ZALK&CeyeTlu*IE+o2~P)d(4cpcuixj&Wc-ge zo#GR^c^03i%(B{0mcL*R;EB`Ps0L=7bmZqy~qI8`LD#9hZ^HS$i0ymbeFSs@j+xc1sjR$f09|Z#~Rw-A3xoW#v>2 z8`PAE=7TNQD#&XOzCYO`(EDMD`#iC35)Jc=D|Xd5&(I2H0mS%6M!E7v8ddEOwm|)k}wYMdO7WwrbFMX*+@Z|P2TyY+C@@@@`lmRBUDMS?%ab{5JfPPCQ_i3Z_^W; z)zLte*(dDecpPMS?})!xV=Sw&H>1<)Fi68JXMlT!wAbc;VB;chYIqM9e`nZ$WhS3^ za3D|mSjN!%I%B?o0;UAH4Q||Eder1QoO^Z0PFlcbuAQxtX=c5BA`KoL8&e478Ud1H zI+aVOic)6(8Rh8iA%uQv42>*Kp03S0q5l>86o@X@rCZfEGsa!0gYTq_HilzGNUUzn zHTl<%#-EW$kI@5y7!|M4Q6+i!0+^yQ!`|da(n<9<5>Iv8SHn1oz|gV69~8PA$uR)8XwhE=2HgalLE)cX<2d|^uOPdM!(O>AhqW3)@AR+j97qn$9`tmWzVdW( zfQ_$twKqXn!6&UN*tdy5e6Gj>(eDO~mwvxEZTme9q`1RlT>qIH>^DK<*H) z0AL2VMZC^kaO}Vi^fy@lD=Pp{2|)K>0v4O(FmyEN03%>nkVJz;hO)0AsY5G6fxR6M z_z4TNc?}8scFzfLy8^b3H6-Rg1?u&`3C8P4On>&I|Gj7O?*h@r--c;#Al>b}sV4!; z$Sql{{J&8Dz3m042MhrJ-{Dn&z;!F#8+ibU=T^Em$pF${+fz6ISHpJb0HN7GkrH9W zYIA=geMX0uXDwa6U#UVe40M3;2ln1hg?C@4^`ATRBp(vaKQ{}zVdx~cRsMmczz!h6 zg~p9zkYN9-Ec|^R9#rofiSc$Z?gqX&zh9<1VfY-02%1C>>|59cvH!pAv*Eaa@}zb^ zEWFh(q$*gUTG9(7I}~_*B$?5>8v)9SVk5v&->tn79^jr7xJ{}2Ym;M2ia`m*mIZj- zBoV=P5ARO!|GUuicfs)&z?OWC2&TWg16jbhC4>aNd$xB6x+8&!ZhO>B@cy^V!8VH>&`AzMcZHC7N6=((qY}jbF6G9{k zUbZY99cZ9YNYY(te;P*3MaS3{+$O`iGFE5|BgJu~3)OJf5Y8?vEVODUyx64J@gA7n zPp2#wJr|!bxH?9XaC%)EX^tZO6ukKld z^v{|u<_l7xWjuS+>7;m~u)qSQWkjJFBHt%odh=QLSMO=dhmhSMCob1kNg_z{XZED{ z$eFa7s{EbqWhaF-`wbtZtuo0@%r)^=#?`i)wuZUt%eFi%dVBZ+A1hqUX4JCdg0c|( zQ#h*)r1ve#3WEs_S8iM4!x^8ZS1Bc1a)-7+AE$EGs1gqoR z`(TN1e<>;Ae*so z;n|t#vlcSz{pQ^nH>Q|(C%r049V{xgfK~$vtaK2VWKP$}DGg+@qXFCUNgswFWfc_b z`bN*w?_Kp2cW%i-TAk3eo-xsKhrQ2B_#ruJ8~;O^@(_W_Vv!8D2kpf3=c4-PyT%i{ z=Y3O*D$R8hTRb|GCmFG?^n-|sIq+7-Sx z5ODlqK%|gCOwiNskV*N3VQql`3NdNu_@Du$dG3;n%78TWDtbTtY+J>PEl=9ZS4+zY zi8Qfn%yFCBU~kn#ydl8uaG>b*l_Plkt8Tb;Fe~>KvAWJ-Q8j?~XQ_K}OZ!)&{Q9K9cxu3+R zBhJzd43c1`r;W!kpPP_@X6UG{ra zJJO7WdJIu?Z0?lu3rNAci_@>Ib;rYWt-2wk!Lo~_xfvve)$1=pe-Ur;>~-?M>kiB5 z^U{YAoH)J_T$h#BamE%bYE2JSilD}!FQ;~s#AWn;Wt%+mYC^wPP<=4I?foOx$fts) zsP6QeEmxU(A}$hE4?#Ar?MA%l_CKW-Hy4VGz@#6MEEDNl0u>>7Xv?x&=z}Mva?cb3 zW3Uj53DPH0uEOMS>adiuHFj!tJu!CYuO*XOpARAnNMh{Io&-?LcoMv1ni-*QLqmnh zN+-rw=Ey#ebCjC@iO7rj5GCcv9=la;T-pJ(ohw8W?Qp;(F!HWEYH9ER{foveE&* zuy*TF4hkuZXL3l@6!o@&ZqFWd!v{N&5~S>sz=xm8HRt<)Jq0F_1lX)#_{b)o8lZ)c z9Sh)%al!n6i1El(!p+&oH8z<@ETGD#q<*dse5gO!YrrPfi23a7h1ZW)9OyTGU_p`? z>{wL#M^MTzr2&(suR|^ltgMC)2!kb&Vc>f|N3+ilRWA4}|FFiwD%yi_*m4gH6%*Vl z;-Iq9@`eB#-r)QB7nqi1gpl}=L2wKnY3Shiz?goe9BOOP$1~8- z6N;ER=?UokaM0#Ek2ar5+R5j1GFuc^?#XRdVTe{&2|OgBQ{@>W<$7k;5>!XAmGQ54ZOa*4iP45DnA zFoz9%f(8j&&t`-(6nfkqkyQ2QeUHzJP!rN71u6A6-$AirijH|21KN1DU#Dhc-d|GX z`K(X}3YJwrU-xjHU?JZlmikho*NUqW)_b%)juSUTj7wGQ&8H-`>eRRi7oeV^O&&)NS%buj617Y+%(+Zb9B-}@ zVx!SO#xLKGVbCQFUNSmz3{eP1pA2hnUuNK6?b&F435l#ht(1YpUXe4SL^#3(o%v9!c61-}6+GoeXa(5gKel_5h@z;2%|p^n)%*uxCPr>NL4LzD)`V@zkF zSmI0f+t&`**{de9#LuK2TODT35l6UseUDTHMF&&Jb*j2)Imylqrnm}Yj|%%EPSg{2 zCZ$Q!>3JVK@$yV#s!mL;--hY${F<|dS>BdO1=+064|1{*)~ht{{G5-(6n3ilrb-f3 zJIngK`EmmX?cANkzbDumVR%}BxmOhNYQZV~@Jo1Qg~232jAHV8n1Qe|+)yC_Lvhwb z`8vNgh;YD~g}G`kVqKTTs&cPWA19gpn>|0ibL$Wah4%I+9!&bsT&6)sc{_y_(W=#Mze|Ud|{%}|SW=#OP?)}PtrF%fJAgJ(A z4++2_&XIjzzaI&Tf)Cb&3X20CS#(NLL1-R6SQqMbD;iwfr87oQ8FnOV5M8JW1au6#1q~!ARH5eZ(YqmrN>(rVY zhH{XCP4Iz*zFmyJ`$M<^HUJ_<7HB^y7#jri-%7a9p>Ygi+&hNre~pc2RU&{k+|Fuf zf``I+zgN3oa!&dGm6ZF|+X^M@1pqy{DvXi(acr4(>sLf3QHWdjDcf^Z+l0 zs!AXV6e}7Fjewi$&a?lIT?KHR0Gkav6>!0K&+;E{$8W+5pzpz*=N0OA`=-s|0~y74 zMKKYW!Ddjs9^fAC3T57985b~v&7oSo82He|2LKth5(^j$ju-IUKLElU?OAU3T)%}9 z7BCSs@%KO+=;p2X{ZEmF6%51&^xaQ`1AWf=w<8N!fuU-D_O0BCCX>HCPrqlUV*`}Q zx0jZY0{Wj~AMf_af2{jG$=7WaNH%Ek_#dm=$p&tLh(C^7VMzi?uQ9$SKK$;&S;f=4 z7&$iW*5z+*0_8zri6! zukqseA2<$^6I3WNG$NT!5>p74lTkI$OOq4J z*v(z*??+9x;~NVq2?A{qb+mPTsi};V+ZE=&W-dHbr2G3ILk17{*cAp;#PA~Xe0Gmi zLRS255{kDzeccRCtg4Qpvz1z)bB&os_DzdHhkO(a+)A8g^SvSdV%uocNT{+Ni=Ix| z@l8o9=)@X1@Jnwwp*FT^AxfZN=d+U$ZoL(#t@w*GvrY5z-h)^WcN_ zB6EHOE7;yrg@GQl*Q&E2twiZu6v4O~Wa)$$N6RhD1lJD)^@LDzmG_mx*4OcF-kSa@ zL5GmBDJx1kuZ)GUl*uWPBfn8u7SvvIdMK@9Ok7wFiAcJ)v)iUhTcO#97-9w5VyQRQ&+ixpeHOBz3GkE=+4f`pVsoc-2%z?JYR3Q^oM4^)|xPcd0M7QtWkFD)|soYsW<;j->KZi*&P-Nc)@kqYk(WVGV`tkvikZcynuo>)6R13Dy4gy&vqEn}7NUi1 z?*kG!IjcgsdHr!pB=ZLu$NP#($_*7{7MH+YU;Y)2>xu~HI4?NEFQCVcx@noM9yRIh z+VhV?*&k=?7&SLGo3eBWuKLEmnn!GPh4gTVBXfUIH(L#wq;C*c7n2iHYXpVjwz;KO ze2^5?u6g}X-C3_?PEWm8Z0EJ_km3a2hxg-fbXGTXE3A?ANsJlRUo8bS2U8x6Wtu@+ zEnhXz)FhO_Jb(Lbbf?=>+vCzsgn2Sn@V#F*&O>)m-hw)>jfG(u&cb&sg}C9CSK*Ms zlVgbhGv*@CscQ6R**nC9<%IacC#SjA0&i1}Rs~%hi6*LGgm^fr@|JnhwH8htMpf#@ zV0K?CX`h)Z@1H;W<+>4QUQAMJyk$vZg2TkZTvdnuli*m^;rSNoO4q71VBtNEPL%x@Hw6}3eOIf8Lr zN8wU**>(OR9q|rbMSfd5UA*|K;Ay}cJf!Kjuw!54^C(><_TZyZoZ#MJ5ZEAS=vNRb zH=ZOHz1wT1=ez3ON+p(Hcdj$zSCC#%cKZ+}9I2$Pm;^L+5VxopC2oD;?-KZG1-0-VTC-HY&gN9SG9X&oIP$_N~KsH`QbK57tmiy z9>dR|-KMFWx$#odm-#y+Hxy$-;fd>{r1D#@?2qYhMV}CTYWk`ivWrM@DH|@SNd}OglR9InQv%Vi@zU?2%MvE~X2lC%|r(@X%34#SB z9=VC*U)n5uIu0^2o-Hf)|NPJdvMHz-RMMSG*BAUzO&xo!)e>@iSnj0OPDiE)-z>GK zSaL!2ilrq<@Oe<<`R$K+?3uQ9h^{BrRE2JtzY<{xu2@f*;($#u)m%8Gik>ZE&s7^8#@YGo?L6_ z&?2Zi#l@HR)rYsN25K9$SLPnS+mnvT8{+$d z^>BmbX-AJvo?_~ICJtQ=6~&|;GGx?|U+;sN zZ4yc%owYLw;wN}J*aSaQW%+)5pOa&tEf?Vky+NPWo~L@_eIxTxO(-0q9D{;i?u)CY z8iF7GUFEg8{=@4mx3ouNV+W09_>13__4;9PHxhMdPC}Vn7tz$B%BqSDR!q5SzMi$~ z5Ss44SR9`#(}c*Wf`j7c9ULyZ%GH}>i9Rn_)jC*ecrp3$AGlv4uyx665JbLwZKrR< zl9$-J)Yo_;oqmImoba^d9#B=D*wYa3a^DAD{u4(*B>_@E@Egw;+t$OLOiG? zpv2?l=DCfH`vGv)_1-MEJE)4*wcTmJ^(6P8!*|K{tJrb{vF2p*G}XG3U3mG^f%2d zx%3^Jzl&r2$9nMIlYliz-@*Ai=^oBQMK>_eZ&@9Axp{e@STbN{sFfBbK2W_ej@1tz z`b-9RwyXDwnA^@R*}(g39pFaQn}GLVP6l|OY&w{KYFk@40CHqmFg~!axGUcG?+dx@ z*Ovt|!QY)SOcpE*tT!*TauG-_8j}S=#nQC@n(a=DF9#+B-qgEVSO1)i2P!QGW`bI+ z0oa(FT;~55HbyhU1a=;r3P3)U9C!eZNwT(G9;}57?^9Z-bpOy`<49?M?I_>fzVM&V z3Mifk)Uf~SQ^_{NB)Q9G;^w=nWq-Q}|M7MLh1iD`SfHEcnD+@$+u}4haB{H5@nsifZ+j7DEtF^k@KGg@E?{r2wwyt`I$A0faS=_eZ8uRh}oAg~p1d}0xB z^Z%DU-yKmkJNX|!R)62~asNp*J^LI}iO5hjnZkKmALe=2z=jPwE&$r*}?F6rYZm68y-)F^x_8S1-$1D54D{-Ny zhIc=B{}G1xdm<&n`}6$g@8R8f!hvq+iXHH4awm4(iV@bB|LgAX|Fy`%j2G|-X2iX~ zwbn*pby$c->=RC>&LS6BvSe6%iXo5B*I-9~;jvy^qsz5SzyYo**5Ytf6p^<{&vmpg zAO2#%L8<->CF=?)>yQwJ9d3w+YhqNF_^D)CRVUV}#PO<2+sYOFXSstn38%%29Lf}| z^u`*~h8r9?I4rf@1}g*>Y}w&`TI6q`$FtJKNkI@^65N_?@25l+mcd?XRd$WJ{euw? z+pZCf7{)(!ye<2LKs>%;l;VRp{bTp>t9`;5Jx}=b2aiy9kNMD^)E*s+^rn5{=SOza ze|p*mT4vlEqKbGxP!CFXHpb5ZFDE)7bB;!4Y8@O5JXxZUrm|=ik4~QNJ&#)AOGdFu zu>PC_u@*d99rDIDhy)h+Rul zqS3-oHakrZeHfkVN#$J2!`J~b+u==evWVCj2x<+y-nx-Sw|`2;14IL+7ifq-6VlVT zj9jG)T@fAyb%pF9T>PBxe*VBcDs;_cb#@58J2ct*I7G)d9fxSRTrpsK)vQlWf-@y# zkH1J^Fw%9mW7k{63~3cU*c$@rL7aiF4ksxpwZ*J+YtG;oBNix>LTQ!6!5ZQB^TVC8 zgeYhdN(pRaJdZ?kK^Q)J7569zN47$zoi){@Y;rtcQwT|3xHLK2-;|sKlVrn2#w+$^m95cBRm8NS=2?g5N77HhZ*YnPCseV%H5k<| z7t)J;uNyl~vV8TamV>k)lmLsrDdh!mnJZ+9x1-BD#CXjDXH39~icA$H^!b{R^Bym!S$7d)nu_D98Ar5zE$@gGQyjZ^<0%HA@p zs;*rFrEAgM-QC?FprleF-5}k~qPtP1q<{z_-5?<#-KBsuNGYw9Ae;&4-mmZX?Q@;; zgX2vHx75AUXZzg(+F2QI z-(xW4=*K7MM`}9pAlVoT#Un$}ODgW~rIQ$#MqU#y1^AK;JVxa8T&wm$-~Zr@6sN8) zkLeh&`smkLnD~87157{)nTSLfLqg-*V7TwpWlO=C%t*2-x6A18%&YgDKaxtzrJKkx zMl{m=7#!9gP@;7fkEn-A@<-W|+w{snTX?V~U)mKZeQ<+{C+hK^nb9#YSvw8ss2>Yw z@-_z?KJyvMi^)EIK-&SGg6m4$NCkh~dWfkgqHTcT)!168W9l6NjkPAe2GfYcX@ z0Fb?@HD10)M1u35yPQljHvX-%5zzMq_kNizZ9;(68U;*N0hv&4KBr-Qw=3Uv68_m4 z`ez5t2HY8~y|J)TTc=$xH7E{m zP9c9dAtB&>5S9ke5{5J#KQ?e=ij9D;SFkFukd$Ufv)j{V!qy=fLu$MX)*u6a3nncf|h3 zJO1xm^@M;A1r|Od1N)pl>Oe#YxM-l)`c4HUf|NBv@^l<+7QG`OlM_K6yC4YNJ z-VXtl*vlm%av&h==J1Y!Luoj6K#7B(e=AYlZ)-W1qVW>*zdOBMIqdFEZvvh>2m9Y& z1kjj~ak79vw_6YUUx)W^SN&hVKp=RE3_sPmn+b(?g#T)nOT-Qfk-=Y_T!VT0N^L>;@m%@}Tyfj^zU zd(mqjeA~=C&72#)@EVjwoEt8J<{p$N;rs6T)U?I~M-d*|ezwh#+Mu$K(1kL7Nz5^#$e{3p5Frb*AM?VJatXRN zCb-0f!(IV4qV*3w`%`T->Qs-l#Vg?0yr3Q7$o%9VFM{R5OrjvIJnNEHn`9q4`q3oE96W)5ndm6ZYN|rEL2E@X zxQHnpa@FAwCsp3B-bb9h-9h$%pd-GgRJw5Cy|4fcNzF!Z;TI$=M%F#6gC)%Z%6bR~G3sfNx2>7ANS+ZNnXqz376rE#73c~qD<^qzK?&&$ z^UCV>D48{rKXf3jj%l@0WQ49rPLo;BC9`5W@GS?yz`UTrKOlm966he78DSig$}LIR zkdEMagUh6MP*F~z(Jj7)7KP9bZ_p94k=HZDC0mzv(t3%1W3C?NM+;xv@rBfu5+@E?8wB6~)jYGUiF7ft3g9`%t=I1RY z)wroE+cT6bDctPdr7Rs8M}0COGOuQeMK-&GST#aO=wv;P9qbzw$5N~xa>-DlH(@Yt zZeuCeE;5fB&s#c_jK2&1pd5zclVGZ2lIta~wQa3MWSQ1$;!?^|?$-~}b~}$0h~v4w zbzsX<95S5?X%Mb%hZ8r5dcPGZGi40yTnZoXkertOmXdgzj5_UAapY5>{-%JWycd*+{Y+@ZIoHIr25P0(C3&egVx|I7>x` z+H>=To^Y+|r#pIS^q+$iNA5>38HO*8Rd;UXxWvnBT;M~dz1a;NC5ROxgH`-X?jH&0 zYS1%&SzCn;qPnUJlpvxdsy5S&(HK8*9c8mckf-`FCbX1(;sF@l)gKy`-448Lq;$6Wo&rKP@;N#LG3 zX+9It?n}mKYebiIiM)bG$qx)-d}KlqCC^oy-keK2cYI}e!Da8a6;G+M|BX_pU9Wh4 zu{9y!r^$l{_XV7*Q!O3H7233-a6P?>jdF7*csW-wT$yrc=uuK5;Gh;KNVU%%qD`;5 z(F;)h3dm5u;%}WUr8X)<~M#jt2gkqoaqR@#X;yCD4(B~c<)5_9uKi^msvX_EOU3;DQ zbo&$cUdSE>17H3VB;$4DC8}?^UtN)3;~XI~sj+tuInt@2Mfu7jcp-|5ohe6M=J;Y6 z94;?&JXJdo?>J?`Smi30{LZaodp?k~QGwN)HlH?l2CIIQ>VS=DV{o1JLp{xhy&L5LVl9m@|Two$rx%v$6-3dJ?nM@EhgdWpY37-4uexZ zN}T{@Vynan20nw;0Z}mP$i#?bSoe=^zR5x8q~Xt{x#5$q?<+9`g6~ub4H*>B4a0kf zt@F1U0cHgR5pm-GQ6nTJsX-zM@PJ1HHOAl(U0z^-0aLC4EgWSe2Oqq{zlaXOi;`tg z*a6OPEX+H%2Z*)9L66D`1f+nfDhSODsto_e!{GsV(m3#eVtQ0CgZ6i4^LGcl8y-N< zfO_jXfV~HLRLmJrZ`_KY{sA)iN!;pYe^Q|TrXk@2=lFhW;b7J?4>hmQZ*cAZ$$?&B zyH5J?{t?EEy#%a9*VD2t<;Jp^;6QG2oBSho;J_o5kBp}gXAxk zl-dicgS4tg{&ak_P2zafLuX~I@-T}5J4aiAk1r9S!H2BQMuwG)FW>ANrrhV2Tet7> zn(3y3P`rbtWaHz1IA;ZLRTPOM=&jzV-#GL@E-kZ}*{o zGmY%>;_m1#jgXMU*0Lykk!AY7^DpjUjFT`gp;Mh!<8`0*_30WR zx)<4f5T2C2V9qt$-GjDvjRz4!Cx#ExOQ@16`n%bcMxMh;)0_{c!!?fYP&ZtBwc1C; zGTt13uzmjI|GHA+UhDI7vX?R2`h7S#)v~6d);=t9YyG&d2Yhsch0*l7PWcsTJY+6V z{V!3j9Hn3}agRpX?hgwAJ_eCl%Z{0Y_IveVf-g0bPx){(RaOKr4OsOupp7;hs)hxq zzsUOgR&=raB*v|RrH2^8cAE%=F-H5p+9y3F2k3FleQ6J(`<#$EJtIFQJsHbU#qiNg zo6yf8v__mfvgggR^`!0?Ba4WGul8Pn3=7JW8Rm8PwKYBPGqPtVN7@$@*X7p_9DtR` zmQg+HT`MEOymAycb0p6D0(DK6-6N!SsU^)|Aw@wA%ATQ*e}6tMON$s!@X^Yo+7 z;$j`bdt5?k>_BnWCVL9q&V+Q^vzE8^Ovv_H?{y9Nbyw0Xw;=qKs1UE5N!O9{m{cQPs7 zcIUa3PQ%+zMBC9BL~80%4$~c`x@*30ZaRysQZJj7bEPt+6Pkipg!kH??zP8=aVH)h zNMTtqS9&)d?LUu7p8Qoxpgi7o>2x{w69lwB%ebkNxM9lbI0I{YOct?l2<{kr|2o`m zwst>KP6FOre%^o5f86Z)9VVcM`!;R8ukO1d+IqJx#9H`(QTEkNg$O-}+A8)G6 zs5l6@0Wkn}{us<4+eHy*FoVSwpwBxO3lAhf66J%i0*bldfoF=SPXr|KLBM3E+w1Uw zdOipdAPRmMSdg&A{J)(1|2n&FPdVV`v_j;kzIoP%ezttzQN;t`aDl-CKYmCuT#i8l zrU2vwf*|Qm<@!e)!F2jJ2mKvv%-^!O;|wMTCvRa~{^>B_1q+65DJPn8vB-eMC{2)$ zj2C>RZ5arNronrQJ@ZeSAAF8mw&5^Y2o3@`&kv-_LRbLXd%<_HkDHO1n-P%C`!2c# ze&RM3!y*R(V==t9k<)+Qu@tPOvH|A_`FL-UZ2q3-2cFA;cT}nXLu~wjR0}o%uq_AH z;q=@MbdZ4&HAZ;|A%IwUd&MJp@aj;o4IIjXew1=?ZBUB<9|MfH5LM-+n(X1tD-mSu3Jb*Vy9XJ7 zN~Rcicm8T7BT$cO2qbMx))|9IFdDE6Ts-^SpRuFm9^W5qh%f5&^o-Sd8ptejtsa@u zzIf4e^gJ_eXg?9LJSMw7G(b93eSYCoJ3-8O)ZO9XUQ@O;@0m-@$11u(^>%U{`0u4` zo@p=&lol61>7Q*rw8!3aEeYvUm98jz1a%~hVE?qKN*o-BB={jfVv~sL$Gcay$<_nB zCTnyq9F3FdsT$K5iQKvwp{)ZBepWx{FIS7HH(8bm5?V}h`CkfFv+aDuPtOWlhplGb z(<_Ue&_bpW9uU=BVKf}?bJhBU$3ge$QNe!F0i=rk!2VZ|mkb$gQ&YOO7|B|{i7)hl zNsJ8kfCrrFVfu+V$rHxS%+UUosmkwL8&NQhC&6>qoEaJV-ftU6iybY><}Jr-Ik%A= zQ;=ZU(phzm%CT2Z%{I^y@?`XTdv;48xer%{5KX>(y>EsKvU?#?z39&g4^vob7rAe( z>z>ZCPW<(kiucLOZkgQu#vO4tr&?0z*S=$1mmZ;j*>tz)r;Kf>(;r8~SNy%NqshW} zxcpU9yqzc78}^#qh7Jy-oOUpLMo{PIu!z$SawTn^xImo56-wwrpNTlCV0O4wcPsFI z9=4jz^M@gz8+=^45$sn8XRPtiv1?>LJvoxl)SG8!bk@~(fbine6BAuNLp^I=Xv*{T z&dbcz=|z6B@DkWl?@wALa79C|ovuCSzHm1ee*O4=!t5T zIL|gK!1o-zqYHclBlOxYj|lh!;xeBuK1{Wi6-FfJx80J zZ`Gx!JCB)&2Oy$r_^cUTO=Pz;;v)cFioK z*CFuOSH>nE$~nnnZ(+x&+0Ma@hsDcYu#kHROQpivw~NaWm{xY`AAjh|kRetd3bIy9 zAExc}h9evku@uu&r6)&MO%H&wTb`|1tiyNG3fH@m=7jkxI@dX+BfL7ZrZ@KwO?K0y zqE>K5-bL$5$fjC!m<~BF`POi{(&#E_hqQkR8U|fS|Db;1l znn(H#d(dq-e|(|$lCXfpwN#S_;URY;-wXQnaC`^qs@7G4$E;cBT-vdAWD7aFjv zQodG*#G~-yo$qJjA2jYve^E0SHGWP;My_sFJZKV{c41NJhC7b3A5%+>10K@XxAvb$xIrjS^N- z2hlyg@v``8xkYQI!^&Y37cY$h6Az+l?Y|5&F=s zQs2A%#ps-DS(T?9n{y0{w8@rE%n3=G0M|&yCcFrNbw{l*q~-9L-cmcEwIPc*oYO$) z&mC)=!d*R7Zpm>9t6p4ERW=R51f(2{_WCr4JqMABT~km=9m`Uk80|EwSz)|`B@w;B zEaG8pb?D;S048)ypn3!WL5>4i-x<8vI4q>=lWSk;M#YpXGoq!Ra5q}_q*KiePTV7VeM?Sp&jqOipU~D3@Ktm33xqnw1_&u#hWk)w$Y9zsE7~YP z!aF+3Q64`3jwPs3#+_-7D_NK(7836}^d#4zE**5GUv!z8JpSrf#@LtNL^<#BT?Ypf zd8DlENzIAAacBKELc^;p*K04vN(Q?FsFKOAP5R28r;L?Q*vrKnKJ@1(p|$=|>q{^) zxPcI(f+Q0nD zQ@_Xk@R)AXi9>sKTL#W4X344<6W8DyX>FbhDUiGN zx}BNLAMn2?_dY{0F>dBM=ub0pYNDxVkVZe*<5+SEKb+F26M8|YD9wSD%uJXDuaj)n zK#2b{4VuWR)Mv2_&us1~p-1$Cy9?!>=rW$#@_VGU)rVd8zrILN+*Vi~6ykMctrP23 zhq0K-fnsB0=pashp_RL)Jk%X`Ixdf*~8rKWZpXHsIx#jy^%U*(-=G! zMa)~M&6&1HT`>-4GRmR_hZM92JJ%KEg&rMb;G}sj zEuLJq{p?{&(n8IvuOOb%JYqtRaH@w8I6LRVd7=&-D9f(7;$}pgrDJE}nO0?bK-9Ki z3O}pGVimTZy2|gTG;gg4!ajSM^vdYu@_`SM9@}hofIru($>`?+>Ek=2h*+FltU0#P zhSlF6t2%v_T;UK}W;s}fU)Qc8j~Y!3oiV?)R5w{|DER_YbZk$j)-B>;DxTJh{WRGUFNYf4`n=z0V(Ol!s}1bQ_g#6Vj!788J^1-5=QV=)5q zT3`fGyagN!yBYJlX??h9y=wtyVYR{8^P85mHmI17HiL?Jpf)&L-iAdX@_#`b{FQg} zxBmUVs0JJW-Fq;jheHPv3tc;YIR}L{M*kppNkuA-2|`;jfL@)=olO4voS5G?7+Uwz zvdPQM3p$w8TpW-5}I3O*QSaxcV@rW8t z$p4dPwxSXIlwh=wJ0WuMG}S=ek!TKoQJekOk~%83b%HX1R!es}6fpmz!edW@&)q4e z&DJvdA@1YJ^l5bQ;<5$QaNl0 zMQ*=J+{QXXkE*OUyWiNM)2B}Adr`O^EP%*KF5Mrk5U|KI@4nz%8?r#9vaismR(%*# zSJ6_4#IgH83yUkU#S+@3kJN&SYT~E>g9Hs@brho+6m@%My3{e17&4<>kioS29;7tQ zz@d01h%cgiU~Osvy+@x{sIdh8rbDl z^kG(q=DL#^1wR1Fy{l&8jdZT`0VZLTNw3g^zD3Ti?3E!#?>j#Uq?ee4yM;nKt(&1d zd3$x6*V@C9nCauvDv{;4&!@Vdg!^YO5hFyg=S$CGpY8W z37-)SaJ1XZB%YS*&<2mdKUb;>c}KuJQ{)ckQUjZrDr0-mGL?7#h;Q2 zUfr#JgNJ++`W>g|GBFiD{m4ed`*D;~=Mc}!Y^sV$>DT$ET#vgJR}Ue&qEoAZIVR;{ ziHZZ}Ri{^rXo?a(vlk7c*91o-je;9Bx=q-dzq)9jB)2J?LLb^GQWj}N*OwMpz7SKE zvRX*zKctV(QK3Rk`d)W{e=k_4n9rA;@w(q#o)hmI7Sy97xSl=@$=H>?k7g}QG%G<7 zO9c{nk&LN2juR}~#bH6%%VZ<%B(CGqCyC(@vWwVe-Ofxrd{;aeLPz~Wa%rh$b6j(lYGhVciSLK9>H}j@T`IS^a{P6f zG!8@3S(&i_<4{lP?#fJ#qL>5T`(5TKFZj@n;L+ccMAdM(?elpWQu-;>>Wy!X^JaV-{?q*@PrdBk8F}9C z^;=<-j`c>%%MPl>oeepVyH_SBS&tcIa^@zg0Y4r+6ZGVryz^5BE|wg@+-~QwCy%%3 z8FKLWOymwqs!2p6#Pgg;n&_xu0`T9@tEUsX!q1R~n)Dmf_Z~cyJhgwLRQmP)UY)`H z!ezR|X(;DU{vT7NN|a(Rir+;jCgGpRF_idSseuY#&cI&#E2Da?9lYTs@m+Ql3^ z*=E2gI49PW^E^B#w-d2ux74I4Bwjbg-`>D2TJh2>cIz#U;cFP-q!SyPv&oC@AxmOL z7g3sD%7;KFVO!e}$Lp&$MB@O$xZ+)WgAoWfGqfj3FR7$1ahch0@+$O!Po%(Ow}JR0 zC0=P#H>9Xs+pWd8B{5Xp2XnS+JXoRer{8@<`6dU_dX@`V|9i-z z;(pFtGL_p}7!-1P#$%6M^ju6nc(1)e44H?CcT0LjpLSF%CcT^=v>hH)>{orC+Q4fW z0)e@kf}}eT{mZb{mGv&VZc=#R60sOMQK!PXbPDerDMMtx+>75~cQ*gDY>m;)Y{L zv*$ifOMGN`iWMk>VUYFUh3~;Dk0kj=Lnj0L71kf*KZH*&O_?Oxjy6`*w`}#pnKEQ?X>nq(UI`=f4cIZVh)G6YVI7|biCzaC4mp^FksO&Nw#=3D+ z?bL?PueDbZW3pM^>SAwrGhf*M(BQ{)xy@v}P&@+XY0*t*_lE9fM1Q)36 z0~In#Gf?HT>;+Xm!DEWpMzBw0dGFc98aeTn?zHpd|W zqt0Ly0T=()E&R9RT<`{ynnMh99{;DLev^0e@e2GdoaenuwEv6F8%*O&faSX3uyFz& z41n|K$e6HUnpcC3Oyh1Z=P!|1(BQ1A6L5IP3H!*m<=fXag%<3lVbVC3lar8*}&rs zVL?LhJu~vZGi+p!z?Zv;@PJUs<2_)!MF_abuw?vi%kdizjgR*?6xz+3?SR3Wje8(U zItZxF3Os~D^nvCzP~cZ;VEy`-B0MH=9R}9UA3`Bd0G@OZBR(n!VhAi8Vcl|B-`wFQ zv>=V4O9n6oL$E-J-VWRkzLhT62J1nB!C$8T@$XbgUZFeOX1}$YH$z52qxpYHTKK0K z69B=+02WQ~k%4<55Kicv2#4Qs#1u*sWY$M1 z6-=k>c)V}pBY*O#aFJG;pM2zah$I8CIS4VahDxWV895p0yG2fsPvvK%tU-F^(0nDl zkpYuB)GKsl>{MpX7+(J;m-PmhAiy4Rw`|lw;!9`%?RMay%lR3U=BM59ZWmv9B`a$oc0bWxBgm0cFwmrCdeY_rwnzM#h-#aNb zRE(Z^4GKc`c6W%*nh_GXlGpCrAS<04i$BU?GC+B{DzhIE8e`V~s9nKd*)XJbmDTTURnJ5UpNhQHVtbTaU`9USB}B@aBAf8b zzw2k2Pok#``-AkTCKzcS-ceWH;vuA{j_QVZlr&8`Z$*NY_fU!`mQFZr(aai(zKw$B zjDp1pZS(ODZ7KC%^AtOnC=DGVd#sm=bFx@P;n7k*do4k2YY>6 zIbNNG6Daqjyah|e|q4n?#_+D*TO&`5 z#p9ye5)coENI_j@+u2ZG`$vbi@cUf-+}a6pUm>R?yPjI6)(HL(u~NuIN7`` zJ2sM%>cNiWqP#!3wNa13rB>%zyWWUINhIz~T*^f5nl<_%@(pv;BxlQBVULsGL9D{B zl9)mI>Ip8q2Ny^^p_Nuw4lvoH80>i+Ay3JfhSo(NHhS~$JscCSiNi^V={(6{-K(Th zE;H(1T$d zn6SI3Zb^6lsxXjhQ(8y<+D2B|=x1?YTA=WkK^=;hy;)C-i}ALEKd!v%Pyb2zb5vyq zH8Y&S=}uy%PaW_za9s|8j$H0n*_Z1_1FnxR1x<;&TDBH{B9~->U>ZQHMMn zE8rG^fqV0KVCU|nyrG8p*BXOFCxB@R4I!`)fpLrJd0U$aABk~`?s!|0DIJNy0)oNt z0=W*P1V9K93c<}yK~`Qun!iuOzkdU_;o`ePt`#i71F)kol3`~W@}n?h5TGG$idQ7U zu$v2+odx1(*E?{Vqnysyl`s$1$mn?hBz`wr>?|?p&d9_U`Uhj|h~-#_qXLU8p&kjm zac(Sz*juao8>}#xMiO-gFo<8wf>4{-H6t*MtxMVKVVE%2HnJ*e5!F{QYBOZe>+G8P zIcH5{u1!X<&(b6{#P*(WPC|F_x2S_S?>onCa_{u5N5B(DR?l+cu)iqf&p~5Qae+an z9**ky9M?R|m`8k$e2#__?H`8E-xdJ7H%v^d@yHSJi92cv70MKbe31?PeX4g>CH438 zemshKk$d{0N?6(Xr}Jn~OdM4~`88`*+w4R~*Cvol^f`|WSjO;P?jD0;WS@O9hiEss zl9UE|`z(G{!T3_iEZGg0&&LpodM{a8E7hm(Ri2qKtVkWXQe}f_5CF>_$m#jzFsdd+ zert%<${jV2^d9<;@+bVkv0T)eI+zN3-Urr2)T*K&GU4hC=EETy1HQ01=p5keWB}X=% zy`dHVfObvN90bigT2%#F=sVOT-#SRmtoP0*YVWfjvpgIOo83J6&?M<=tX3&3eg6zI z$7mH^FLZB#4vzXlB-|G1sA$|EyD6Wwv-y`mb##f&@>ce|`pFq}*9-AS3Pyv^>9y7I zQuA} zUQw~ZSEVc>nXHkILkAouXyPNGuc z$o(?EAFc&CBcbYMwy}C0za#fHkBas4BP-$ni_~TbzD+es29&Z5Lk+%Gi{)9T6)P?;?>Dc0W@KhX_ z1X!ij%EZ)6Q?X@xRaJat`jSuB4|*4oAMXsH7;#>fY1t{oG8x)=Pn_hJo5{zzO)l97 zR~;TobCmm<=0iWtTb)l>`7pV_Fox!Z)I)n~*w;UZqM(N-Jj0J9f6f~vB-blD!{h&x z9s|CQ#-a92+O)!w5W%QtK^Qj4rrQ+*9AlqlI}JAnuUo(L&+Uj5t3CA-^W9NB1Ya;BNPWTVT@dwBs_fmy$;F~ERjj-5w_YTRJ&rob7sD22z z8~jZ7YHj+-CAB?xez$L);bYrK-tESJ?}~R?G#^N+e!DAzjXRejKe#?>5Z% zn+>x<-w_FD|G-LhlglgLAee$791iH-?47qrR%Jw(Cg3KI9fdCrJRru@hvWTCmnlt* z2?5rKF>iT|V7tL-KN3u9z>5eQG-kr^u>l%VObeid7+V^cB?b5RCSq({;0q}x^=)Bu zIWaZ}y~K7Ote7Ih#06T3!J|Nn43h+$6ac_UIv^G70qLaR`1_krPLN@OS~N2@=FN?W z0c>(`mWbs~R~_u$rU8Q=r3VtpF^Pb$;AJX*@439xU>eTdVF4!W{I^s1RxW=Mg8x*t z{Z8}&#=%@;#2e!TgaHFHu7G(~Y%Cyt#2*=OqQI<#Bh7E1p~U=xgkZhQA9J@zuoyQ- zOF1?U!7T>Ezm7IA2kf6p2_i8z_3c75fD6(89L%S_S*Cw#9H356^&ULAM5M9rQmH`8 z64-3UWCLa;{v2-LC7=p|53crqei*0977ws!0R`D21nY z3v9pXZhQTa65rkEH8@JZ_aA5qe0+j{u@*i7ATxl856=HvkGz?`rELuuzy#CZZrv+? zNg14{VJF7}TEKZg5&YKMT>6`jZ4F?u0=Aa_7`X)%5FNZ(4To^t zz}E5L#rxJ@gB!-DQ0U>?toVTx))6m}q5JS?@rF4J)dR7*wmjcjFj^bl#d$nBe4$(Z z{g+kd?$MTol#@H@?BuR&Gr!I~f=^9SqF8b%;;T-CP2bloM(bza(0+yP=0t~j4F_KY zI0?Ru%Q@)vwI(ghnHwf#_IsTC)x)pt#mISmaKQc%uWucT$CRgd_AfK%=bIXuqF?nX zC-u#!K2zn=aR)XKST)#^>iUeZpDH%bel3j|$#ftkX}C{kBD;CtLW;h)-ea`xB)FNR zT=K=c-s9vcy3@qQ4?2aU(AiVoH#OpMLT0Cq6GV*|<1x8Yoy5c|W$zWvx&?cGNLZ;2 zQt0dq5wf=3EscvzW%07rfVJ6nQK$AJnV7vs$9(5H9N3g)up35X0_FPVHw~jah|x!r zcfe;TZ}eq69S@H%MImJS+)g!KBGKU0Lyjx|D&CY+R757aLz{@jALR~1+dsOxS|#KZ zAH~3HO49pu>bnHHfB0BMA(~DgY&<(^&+&o_aokc5DgVRdN0KNs(V+32Z3}^|e#B;1 zlJjmgzC+sc;kg$&a9+@dmL%-RSNZswZA^AD-32$8b)_(hk zyS8dC!un!P-_sIa-|M})u_spt)ax(2l?oekBuj%K zzi^JT3lSu!J5Zb;9sKo3cmfoquiJfS$I%)=={%fC#@WD$txpQw@=#Zagn{l}vlT&pC@n#Lh8Xh4h@WrVG(21V zC7?iH*oNSQB|bj4yo7^Vm%8g&1%-P4_;wgYvND5;~Z}NDrMYuz4lJ~ zVS-eMzTxvx5IVjNwhjd_@NvKDV}N^lU^$L+RF&80E~$h%f;?#9^qBjy$wP7q#pSYJ zOiFFBwAw9YFP@>8*Ze&V`po;rU4(>t2s0_ijP$cL&z_uTsCN-elkY2kRxxalgRxXP z>&wro;LUO3S~rzP!Rqcr^P~V~%s<%d>;q+#7S_`a*lm^Qa~f@2&VW$spfJI{**JOgvyr56{wEx? z5}F~A)C$5vay^c!dbNgzD+EeK08E%IaX!ipen=K{nQSD?W~Z)_c$Fy48XLAG5qrsy zdwqfYRGLl(UmHJlc+6gi^JSWmN$>MX%EHh+IoYcDX&rm!Y(1IcRo?sX1-~ZIHsWJT z(RX2))@bQFL*#{DvsML-i!U;qKYA5NtE!=gBiv2v5)-aJ7CI#o((a2=_E=#|&Ukbw zQ(VmwDyFu_^42_FoEpVLw|N{MhiKOyO|0tVqqB3_2hm6^N%~K(@KQC2O_MF0<7!Q! z>__)laM)!PU=2HU@m~psVqrgd=maYz`2YRGhs8!YB*)v5fFzVT_N)wzchoiI9oW7W}y;?N2mn~I2YJLzf=IIK#$Ff*}VCe)$} z@vTa19l8FP@wguTY*b&p6Vf5YHP)!p991#1#riAausR4&dy<3fLn&{wCn8$F6D9}$ z%usq)A?fr3x<^Z`e!J;c-tH?g#AKbXv3{bol_xh-*=HRHCj8hV`qo{G+phX?ZyB)s0f2k=H zsi#cFIcs^canPIQ@N90|2nLPfojhmxk_iOUxFyAcB|2goeF@k_r47wW>QMA@4XEU` z$&JmW3~AmzQJI|^b##$y8?@Y?VdbLPhOTxZZEH$es`17Yw4@QO7`&#7B_GM88llyRQPr-uwDU_qT{ z#3kBo{ePy~_MFL+Ck5+#G>Z+E(E5U?uNz2EQL8iJgv*|fD+$X!Y~qOA;W;|xsbGnQ zr0+UmWP~YF`<8t^F;BO>#nd!LT6Hz+B0jwA*^kEqXVuLVYSmX!KPz1~ta&W_oLgn) ztDjoX*vE;;4|ts0YZf|A>L+z^@Nq#E`!mAM)o~Aph$+{{aViiU!$(bnyE(kl{28v4 z8_B6)zTPLT#;*+{4mqd)hRrb`w)hq;uOdcMTNP`bl<)yTEA}`1XQ=RqdJM+lL?ZMD z+$^081%by^jPv_ZDnzIo{D#HA^wetvr8Cw6;Rh7M&Lle4PKg#JXF;1^JW=wYUEbde zR`FOnGI`1A@r`o0%0IB@l<3;i^k-o@Z2nwJFYykoEToUryx~*m?RM?D~AuPKZ&)VK!q>b5$0)s(qwDweRyRBXtTU#VyD=tnbO{g7bb>#ewK7qdjm5}vm5!6~?4-4*p)BGkKkON)o5h5FaQbB& zMt`})7!~nB;6#7?5S~!_SnnX()2=rbFx>g?No5CmLVem_OpL+{)$j8FqK}#*=1Y5o zGKx72vi;XP-c99^8q0{a2ET=p1EQE1g#tpmYNt4^ZVaX(_nBEYZe^cj0cSie!vt-9uH8v z8L&vW9jLr1-A$MU%@3lyKUN7yB=c?-v{Qs%{$m7|5yW3X|BT5D&j-$%?E4b{DxX29 zLqT8AxS$ww$Nawx$p2=S+_^LUnC-wViH=Pbcq6B7cVyu7Gv;%U1SozEa~BoCoM|xr zPJXKj!61cF95x1l;H}N`x7!&E>w=guynp2P4-zQ8-!WX!{guQJx zFs(qV>!Bx{H~`tiG{ock4`4D7G4O^TwQv&?7rYW|gMdRmAhpw%{~5po(6%sH?&;>G+3%=$Jd8+RJZP(p8LH@^?@t2kNudK4QG!LBzTeZ>U14q+D`flxZ28y_rlt8#^au$Om$NB@@P4SF~V-)~_8@wwQf z!25X+DCZ{n(onsFS#OPhSDXEp-75&l(BZIxae><~@!wOzK#LX@8^Brxez!0{LyiLe zbSgj>!SLV{Op5E8Fl2GuGNxkkMBx`pFmU)$PZeGj6+Hyq>3;Pzp8%Bmg(h%ga8JaxF{nw4wGlE_ zdU&G5C@#!~v21G77S{%ktm-3IWPNb6>(ZE5M7#QwGrwBfu5rHn^wqoVkwa)yf+odi zNqX^q=Jill4qX*}AsSd$4_Lm#_J$J>2A1AoKLjjWu?g}1e*Rnk6>tlPq%r_5$ReKz zGCYrnFu*eb%L+J$W1&J17}cIf_QX>As0f~gy)AJ<{qSBLg=l&3V1i( z-ol_)UGFI|5^Vw>-#bn9jtoJMSN-wP8X{!$y&9*{`*lm&$Axu$sr{;*O#`mUTP*{R zA2Ous9nt(UHPs2-RW#T8!eaf(m`N%*V<4t_`Atts)!XV6uu=g*2_{ z9>*=OtMxlli#(q|EeuqLHN18Ubw_GgBUv;mo><1ka%0&bJ`D|zR6>qqC30dUx^7(_ zd&VF>BB?9R=ANtq5K#qM_M?9deDIjDgtzIK1BhNFsAbQar+;s7=>~t_|54&E@x0Da zSoYT`yd||dlqCk1kD%-KIei!{UeH^UP{j*yO}_uwdJkpqQrx_^KhmXJJ0rg5e3I%Y z-PgGI3ho04Qa4b`d|J>O_3BqspR1ljE&=Ql+DVzBceqg6u`86JL=8?#MG~c9&-;d! zS^ehA5+!v?*W;h7_y)DjO|jV0G1ofYtvFkZJiAm-VtpCGGU@}p694LZ1Q(Jzhg11} zPUhi!s9E<}deX@^X?8E^X9%l)U1LF!*%AoU*6i02Z%%kCbw*bTX&+a78rE<+@pRg3 z_287>Tu9b>J(`|A8p6$l^8ax5)^SyKTiYnzuz*E(w{%K(mxPpbh;%8v=x&fjNrQ?= zcOxJmNJt~yNP~2EZcz8PpS|Dr{LcCQyXP3Q?-gUrd5vo<#(fcaCV+W#Y@Liqj-jpF zQ@>A~gM9$2`zCc)sNx5VorU<+RAT!1rxFjZJHr;pT72)%c^MC1bq#2W>g`Bup^A8H zjT)vYTHMd)&2~pNi%T4FzanF5Q%n+-9fH$h8u4I2t^OqIvM_hfBP(;$H{&up%Gkef zi&@RDUc0nU?A=V;_WjBs;%5wd(%Kg(DVwTJkRZd>WGz?b<28#^QZjVWamZB6D3ue1 z9QMi?qW13Xsl)|!IH)&aBE1L{PmR{!9r1P;j*pCL!Pg&eJn7AP-m=~EtK8;!xrVH{ zy?E7Ed+onqMc)>umt}r^+t$j&cz1E2)owGip%s23oAsjY5~I2_Uak391su#VCEUM# zvu#WhUv_RXbS6I&WV%RR(M~wnNo=C;wuWC41c8W0?C-pZd38Bp`RQt!ul`v(uj-!K zV;gs4o3zyp4%ehH(pNXA>aKMHN6o`60uCykiF3wVR4CaBe&}D@W;k$$r%xY0o@y8G z7G^# zCti?>+t~D3Dl{FtP4Rl^?c$yHOS_y@MeqG()yFb6hGudn=0{F$Gg0xatvOL-=*M1l z-Juk_kf&-lh22nuh|FW41_}NsdLCR;S#c6I&JQ)?q$~?`WBJfQ8F%YYRm^9+lD(Tc zqM`l%wy&W^u*2OMN>|`@-Kdbd!2W|-suBhAT6I-?YVL`{ltB`R95r=A-~fK>s|Gzx z&@0goX_ww+^9$1pbz10DOhw=7E2^4a!P{QpONy&*)tx*Wv|m;5QOf(~#0Jq(i*7#q z>g>*tpO;oR6KFXR?mxNkPQyZ%lP%)u&-MO+Iqyc^Tk`k0>BeT2v%zo~s;$z&3|*h< zAatLWqj}w{$rl7)OlP8y(_Sa1JrCL2nxCg@2H zHRh(V<`k8?M}q_Wy0iY;zygy72%a`EY(WE4d8a5H9PZ^k=ChEy4`+&gyR?XIT7T3z z7v`~u)QV+GCI_b_@?1d84e?w;gd8jz2+5|KH)Cv>pX{Qkp`a#{vG??_+v1+uhDaoP zpR&dKQM0sAVV%{uNk(G8hJHQH^;I#(HYVj}|4AylG2WzGO!-3O$gCIl9ln!r5lwsm zxA?@I`h-_b+V0+W-(dm8)+5yhDkJ^|rUROH1S$~(>E%A8v+&}T8uq`$V3)sP_(5(j zCyLEyr=}3P%RbN55e+G#X@37E^>ZjJ<{9>zypUhDOYFJ73_hRx&|Iw}o(_l<$>hQ4 znI0ZOF>`HF39>2*&QnX_hQ2(O7p{rW4Stcqr!WU2Dhwlb_p-WK-5piKz(yTpc4g{y zBiTC=Zfi8So8n>D{e&>P;&7UVGCdzsyGXvUGO|QFFvD?B&fP%~b%T#7?O1f^h=|ws zQDSFFH@9Y<{IH5Ut^s*nFyh>aB+rE67gizFH`Fq!m3|e}BaLx9eI4ENUKM&-1}fO@ z>=2aptB$mpq_9PgghR9i#1{Dm1x4pBtEQA|Z0}5FDm)i3hW46>GkMRE?YmXT`qI0Hj_3~a3hAnj@j0V#(_Ce{$rVxpQ5rAL{P3~n_#C)T4@w0 z3kir0-Sp)uCd0b*r#w{DKwRwr{L)P7pD>y*`tI%07s}3*1e=@)Z(Y;s?HRDW-}F4f z6AcuRG$hs{Wiz_HVIQnFo)xr&n0#L@t=u|her?G#q~bxHRhjv zZ@hRqCf9V`_UWTOMLDY(tP)HHlS!9Xkl@#~y3tyb4dZW*i0;~$a67n@S=cI=u(S?; z!4|A;C;v94fXs^z#?X2>;`y5li05xIAfCVI4W2*fjc3pn!9Xgg=_vs>l*A0A3$54y*e(G|OcZFn z8Au1}&nRv-iD#=Xps7$D(1 zL?J|m;#-4s;dlgpX8@|O28NHix54)B*&%>@LlIEwUf_BN+ZB!rx@QA2y00oZ1}6iJ ze-8AY)eBVpKk14%YysK#d)eP~MO@HfTVSdreSqvCT~S9cJSx=w1yE1#UWQd0fb_d_ z3_D4a(pM0=OxJpwt3{toXeDMd!o=n3@l!_Sb&E)OP3vW3mBW$6wFlpX8r_ z7+_fX%cJmM$39Sjz8wcHmqo&tm6c!8|2_xzoI-G|w6;GWb)&xaNI))RztuMWKDF8%5WV*XbF-3!F@uY!UX zhzLqQ0lb}MEr1I>-0OG6heFT2&hlS61aE+lq2Rul*9ADJQr>`e1tMICgn zr=A4#l4)=NPxO5eeE?X|y$kk#gFIH-0UBo~KSG9@`hdz|(dw~%L5~m+-lWn-{N9ey z2rU}GM+SVA9AGa1{`^2}91gmN@7}+A^}PQ@y~zvhkbz@`zMsPW&Bpyu#)I+&0!z~Q z0W66dDvnQx4}BE~Vu0u60`Nl5yV-){^S z0#KD;)8OC$wDQ0`^FI$}c<EggBr+TPKsAG?Sly?oKFz_IQv z`fhTc^zq>wM@?|%t*Z0M_PluZf?q@Yr_8zGspYGU?Mu1$)9Rlxc`^O)Ed|t@GZ#hi zFY?-riflJ-ea|lrw@;3T-$MKwhUI!!sLqoi9&ifVGR4jV%@Spo&gI`mH*`{Z?;dM& z_T4b`T@Jo2e)m!tMs`7y5I@d**b!hnxjsS1H%i+~Z$8{MWy^}7DHp3P{ye6+ds6H;jcA8U+rE{hs&|3o@XX3=;M?y_tcYV_ zvlFq9zwA6Q^ zo?cY(X)TsjMFQ6g?)9cAbuHR-Ys8uP>K(eoz!tUB7u`iOIzt@hjf> zQyccP82TXJ7dO&OsMT50s91t2AzqM-ZkWRol+(*hesJ^MBYelgXEfNV2`~iA$u# zxMYZX^Yl>yg6aBp?neSLI+sG6SUAx_I&BVDR}T4?Va^hz5=w>(;{2im$Ro25mu-!T znF{Fg7b58|L^RkYip5T#4NJzC?RSauP(Eh+feq2BEkAvytgpcXvt^_5jpN2uOQtVc z;!ROZo6S+usOp>8_8M_$iyCvv@N=3i`nRlco0#A0ntwr*#?FD6?U%BnioHqbi1)mS zA(=~*87i{w&V4l~@^&e{0P#i@64XJOT`H`|FI<75J3#Tb-tEvlI6wU|A%S9p zhM0%IYz8w7dHb!$0o1w}3Q65k&jxuEOn;eh{yt#ooFa)Rp%cm{o1-&~hojr9^FBSx zwG1G)r-QA?^?YZLKIt=xJ$(h%q{WtcgZjfWE~AWc_1fg*oHn$SXDarIxbii27c)LW zP9(S|y&>F+iWw)+eg;K~I;hMw)ayz65qG++jbS#v_V=y@Tcq?kb4YYSKsPx~L+}zR zKK)wK`ASA!4(tc8M^LabQbEm0c9HZ|-s8;)+y0Dpndzqa$BkA3F{~-?$e0t-NopPJ zH1g2E2W{i!)><@Syu`Apl|9>z&D6-SL%8u+0LEgy3PCm?I(Q zkL#sGndq{tmE83sT+6ZydZ|cKyrO8}jkdORwV$Xt3No;8UNDrD7FG}2*`m%nu`~^- zv{-2~F0zR1eqDst>ZkRJaf)Xz!?ArO)pCO1jMRxaSHQ0tVyW}<1`e7BE^#+EgG&;_ zj=RO7gQeS-IcltqCK{Br=x)B=qiymwV1Mq+&O^l*=sBg~mza!o_`O$jgk*xs?jUca zwUB}qxjyuDag_YQSl&K7?(gj zW>@4(300fMxhGjm*s5RY_z*9#a5QV6dUKP#T2n8CKfDc_bpJ4aJy%=jX79VYV$WH< zqqt-9Hk>W(b*`Zo%qM&TxwMUogs#~MZyT@CzG8)n8i=0L=z!FZ`OMFCMFUo5WntU^ zKjrBsQ)QjcYPo$d#=7|Ow)W4JCZ7Ldkg_`7_kOt&BpUB+NL{V5U~~8ed{H~oWFz*R zd?b&0S}l3~rw3wUzah2xUQU@aw}^g6h)Tp+YMu4Sh!)HR4QUPL2f7A-w*iOU9q2^EL9k$EJ%kk#eR}v^GQTuWv>4fkG zE(YiLiHwXxgOGEa65qZRIXJLb4siU~V6fE6O-JA^&D-$q=^8y&m_I^qK{5Q>;#tXK zQ=TrN$3YVrjOFcDAVIY7vNWTpTgzIt3g!)w&o(-cISr(odBuamH-^Ne6AV1HOLYR{x7Xxz< zS?)76O+Vd2M?lOI_JMBKyAA&{CR+2wBZ5`-0_Qhtw;v0BcAyvN`BoZ8hT`LnKB3o^ z3as$Vg4{F(+11k%(4c2ygw}ro&}po1I)j%=E`?=05OA4;e0n))$+7C$X=xrSOF4Q@ zZc=Duny%t%;SlyVC0Z0+e&)a8=hU6-Q9CHJ^kKQp$-H7xg_#GzJ1104AEqgFHeFh) zI|~~)B_zl^PwdXI>Qdai<1FlBeZJ13JkL`Jg7C=0u!1Xg?K-csV#pd z53b-^v_@&Ovnc7yvQX+2n~oGR!MuPLuiL76qQIZ?3S37@DAo(vcQ__zH^aS0HMKo^ z-g8O1bTu*IwXrpOoHS~h#z(eUo>oeY-#vpJ&jiC9sqc4ev24am#kUmo(pskd93jfH z15)0NzHUs!8Nw;ETAi6-aFpwTqjp47b=jE}k-Wz1IN>CUWcLnE zSHB#0g4pjb`9S%dUo+UI@Ud!_^sR2X-rihWVId;ev- zetinJ5(jtxViA7d=lth>d-8D5?Y+Z-5AD>Kpe6utrw`8hKTex~EL@MhfP{5_ycMXZ z0uIST7AIaPj;I$a6v+VRuX72MA99NjL6;Q&Yy_>=N-)_c(cK5gTKcUVK z1Aw8dd4RvMt^ha~xT0RT&=>bbbH%^K_jw=|z~6Z2XY*c_|3?Mn!^;P}yj%gmooHXzqzH^|0GU$(XXMUp{=P+(4@Pq)`0EV&eg53(cvHt zgNaGw==1d=eedm_x=p&ljtLsnkGyuTFnNRtzP#FF;?K(76ynH&aC3MZb)WLZ7rQpE zezvjnn?mK|aKF^}-q2zHUP|~(YDsR!tV7GBJkLa;fQG2&bq#X`w%+`wTHY^DrSkku z&6}AUzTcEJo3I6sTs^V;n9bu-?=rxGf5eaxE?1Wwen`(OPrMh)X;^;+6)GA*;)R&+GhtMjZw^=Zy;KKnHXa#h9S0ex zZ1{MS%_XyD!*7%5&J@2|>D0AY?&_Pe_#+6nGm{XfWWafN(`=`W;59v`uwBn$R;N=) zwyQSo%BmsNsB+eM`(0`lGq`2STaT1Z!t9MSS9-FZzMJUm8zIP;Ui0)c-gQ(&_Gvg+ z&^qUPO_=#mQg4_LQNZm0TMuU79lJ9Q9lIf@25S-?U-uE7!AjyLR~VWlE$R8YM)&jO zFrOf1m8gl@=0|KfMLMD1DHwGp@oWv9y}BvD65pm;OwB84;GQ68$v`y}$);_--IOJN zPUMWNrIz-=3#EhDf4iW!z;3pFGQ;t8amDa^p;lGEAZLj~_Kd7;)@C#!T%LemnOM|J z69MDnjy?r}yFtzeGoE zw?eA{DCt~cDXLGY^R_l*-QXyE)td;XA!@^_g+{JiBHtbYlaa(Z)oIDy-sg<{ER~Gr z**R5-TEpd{x`nN!yg#M#0g?q(a8AZFx&!`Cua!{ZWU=_4iD+j7oFBa5gg#S|ieV+z`RPe90|kvF3S`P7j#d;Atv~v4<`PrXUbjwI zfypQtUh%ERtj;6ue3j2g$8`!GQ+S4v5*hEaxGQo!>WeV7s{#*0KL&nGprGdo$)}R$ z9T>qx+!bxj9l?5JYN%XS(p|kuC4v_A+Mlb?%v&>27=aC6NH;7s5LWmjC7Pp?K+#5$ zB;_;?q6Ea?#j#LwKUShYm7*>I3a|F=X|AO8 zW{hUh;2rYe+WPdo_UGiAE$9nmFjooA&`Q_q90Uj&qGG!~IMONklOAGjJy!|x8#Gi^ za8cJGB7ss~Vf~Zc3dfg*?3H)Pec#p~3M3Zf+wE&&RII~J*ad?cZf+bs&sVVX>r&}w zRh5j_0^$p9$QUvsbxc$h*{}qn6xu>3du-cmqoVjYkq(h9#-oQ^44+4Y5@Vi|FE%N* zzcz%dm3`-4cDTeBVlQ!(&Nfvv-qckYsD}zTaUuSCt;mW;i7xw5SV}~%zt4+;5M?Nn zyN8PI=Od?;G75e)(rLSjaaJh9ghS(v`e7FSau7_$G69}bG^q%rF_BK0bL2Kv%>eqL zT71}Oq@Ksk=8M~sW%A&S%uFKTVAbBt+uLTdW+%*(5L3#l^0h+JbF|)eD>w1fHVemwG;gy-nAhuOA#E(eD@&~n zL3<`)1kcPU4{yG}N5{mUa!O)E_L9;q!rY4T+nnXTHd8A&-Ai!*bi9%IWr z(xdFST}mdWZ)!X1s4 zj)MJ@=jpn0z1^mg2e-BuYNY@r8g9H-`I3lC_QjivBOnKbLWhW?L!iyIBd?qT3!2FHY{I<+3(HXYS*8z&Z(|d`pSB0 ztZC6tk~Mp72gb#Jja%^J{P)QOwb0GJWLm?u$XC|-@&Rq_n2}enLyVMurHGddL2D3k z9AIn5ZBI+T!gU*jAYTJkLi!7NLALxIjyAduJ=xZ9*782mMlx-Hv!&uAM=@lwr4Z~z zdl!AT+?5yvi=X;L@N;0$A=3D(QnxY}t#Yl>mKAjvJx8t7s7k}#Qn1!QxNsiBuGln)Z<0C_ zjx)e$Yaz_9QZGyV;`^SA=((fXBLw_BtsH&05C-_DZqrw3)j?3V$q=J=;Aas}qdfX% zqWNyXU;G79LgQX;-NDdBgD=aj!TooFbUQ+@(~gJm32Z}a$jj6)CHqs? z)vUVr5^B{Qf}wNxI*GORR%JG~{$AmTRy2YMSO3id zjmI_2Joew6`M}z1ahi#&kf$AHzAXeSCJT)WJPO0`j88iK&LiH}gH$h*|Jr>_$XB z{v>Kry}EI~#AU!I`w(7yCCg*!RZ6MIC@>biUP5V>Aej;kSSf*V{^mT9-sxvm zJaH7od)VUVkK!+~X+JS}3lEjBGorv(A9W=vna(~=wzH|T-St^Cu@r7V*OJi2kjxJ` zzAz(df6L<Qxt(-Z$yUr zh1t5jyp6+JILy6|8RAisC3(*h+nZtbI8=!5Pc1)EZA~5fNCB6MKyL&AhFCP?#T$rX@p8!Go#knbk}l-xus0keP%l?r((uKj&D+z6 z`Ss^?WBkxKohM}!FF!zJSRz$h7Vu<=Z;zq1>;(sQMcO|v%U|V86-83CLFUSTogQvx ze&?QMR4ox4;1LY1W5QIsOz3MAs4qcba8h~wxlvbx*&+7^#ue>nC&``-4QPiyQIZ9V0+q_uN%HHQ)L(KH(}S)Pkv#vaCS1Bb4?~8SM?cqy`dpKgR{es;k_Sx;(?>TU)tOx z8v8OFO(7YoUk!Q!DdENciMDVH)#r1E7m(j{N&SMkpJQf7KI3qLa-8`kq5EmXrn7Cb zcefeN3RUzI@>`z%BqV=4e*A*4TUzFX64hR-Mg207Q||P4Yy3yeTV7C}xX!56X?Jz* z@aSG|VVt8}|95ZmE+h4dZQTh^lEVFHnIf1ry*)qA<1BH%fJF3#(z+7+S=uU6a}+{| z1>;^4iGPB%1=t=v$tj0<_8ZceLqEDPmk2C zr|CuG*o|$Imlbyl+G15)OuF^I^Y0zNz=5DH-vS@bX za*3{^kSw@!1hSL&9#SLq-3NPZs{ClUz4w)GEd3|$u*a|r@7$?cv=L{W;=|*RujJVe z8m4E;az+MS7S?n@XN?YZweRpA_jSh=hEfjB1tJq^>DlQcaLUh=CKmaRQM{;%;-CXx zqHQ7(JQ?VkF{rZpj`o5MEv0V3{FkwTcuyVDPs&{q1Z~L11)TSg{#oCp5xN_X;0|hE z`umtt1YT~`(9UN2mL7>;LvdfVdhIUSG}1j_cv`SbO_4;i!~%jIJvk$0fxY2eTjt0@ zPrc^4(Qt`qi^~@fb0;Bwj45c{duj_h?KE(Fmi9DNCa8dk@bT=%qFo%q^fx0Sc7?|; zInuSn)mA<*GnC3rH?1?+a%B;96kFG)2$d~Mc3m5WhOuDB5X>(L;q%*O2n}20yF-U- zL5z?MZUt#M8ah@WVC-b+HeUz8g6 z{7~to@4JP>O;AVF@1ThkR}^WpM;YZAXuCXl{}irLF@#uPVaBu^&HM=smXV7;5)P7d z*9NkZ^K9X=d;U`rKk0M1c}p8IZCl&AIt=4BK$!{tXRui|-FQ0R~PJccUpyBVe-<<6^Dv{(?>u=Q+ zWWNBXhNJ?6$Ue3On)8|Z$Yoaxzq;M$azK6M7M+NwBU~n z39H*Y0t-zRC?7xL&3(;-IXrf%(ka~CBD=y%v)pmywjXP|;p}(%t$Y0g2usudN(trM zj90-hh||k!vm{1YD{Jvm3LbsLx{~E5UrjY+9ev;mMlZO7K)EBMK0wv{0{ERIH!Ccz8||pS{GEh5GSU&1OYKcV@eWk=?!h2d<$ONGE}73X++#0 z&!!B)4^@{v82cvM7!(3_hXU>8Zqktq40KOna=D~}Qc~Gl3++~VjM~asV@P&uEMv%F zj1#olSx8!;vL*tIsYQha^dXv9g8CaA(zm<8xl-HfmBc%ac8!cGiSn+s3|EHokaScZ zdO;%BU6$5<$76M6)J}A|LP5>O4^ll^7~EPbEQ*8+>~$N!X_1U z6YNi91f#*OjIW!LUM%$Pb?Su?t|1RC6PpNBbtl)4Z3DAxBBm)DnYt zpA3jmM>-ht1Fa-v%~{UB*}(f^Vb>eHBYSl>@<=qiwKCAEit<~Wte)AgP0tqRKshCt za^h4O2jZIVl$OF^C2L3f2Tc%t#jA(Y} zqpHJ~zO*zrb&NL|3hYP=OOW9CtZSYHY2+#Ng0Z69Y}J*+dUmXNM$$2hs%iVEQXGQ56BZB2qSQwkcNQwAF=s~*%XrX9@fJOA} zn>;R*wgo6!SN_ZTd8lI!2*JD$lzjg~4}Y}(NtN(t^rhcz|C5g5kCw6(7*4nnumK+i zGH!i1Bz}0NBK1Rn=C(e7WgY~x_jTjy{y8<`wuh(E#z<=?-rE>aTu`h7Eg3!DdCiqaHc2FE_bbVhtXb=g3aCdw8H>yaX6IjqastB5B z3^1DU3OwM5kpI3;=TG3juM@d^MyRrl>4pyZ&Ug~8~R)OKOFJj_uLI=p(efm+T@2O@cj?N{rBhVK`Yh& zcVhS48zAPt6K(@q-LD;%h4KHpRs4UzTW~QLIqM&tOVeAVnq-BMa1E0)%_t zJx~C4|2~E*?Tqgz$m;eZ}LV?3(v^)fgsg#%#R<6!fIRX>@|zlOT(JfrYqMt~eb% z=9TeI;u3e}?T3WtPo3(YPQAL!*CVt|W3L;Iriz$SZ0M_UCcn5eH+*z=cIaPUJvbohAwia<8LTv z6zk&v17c~h0MzS52_lbX zEgD~a2IhAdYka<>1CMXbh&}Vge^f+?K6Jp(rLbVM-Yp$!^fG4jQ00} z7{$ZI;x*D7-X7(`a&W$tgeZdUi)Y0(J2}Do#tDgW397_ZO)HlJxc*Gxi_6>*NgjCd z^Ud_gLE`{LeKpCCZ1G$q)ZOrW4dS4f9dy>ncp=OvR9{IJ%>aT)??|d8^>=zwBX?}x zkK&`k#{vUvRSoNX;LoU_X;-gLj!NO)gwa@p3A(MUP;E2(GF7>;@Ow5fB|p|6vw_YJ zZc?${nX9Eg)M>&B^bX>L&De_bMAC-yUbP|j<7mKwjD51hMuXqASNe*JSt;KnQxlqg z@Lp{#n4C#1HPuR(Gq=LE;VvfaGaqK|C^`Bw_<}hu@FR^C%@=Vm;wL2X9P~fWv%c8x zHV_eG$|Ku_qI(jO1fGoJ*ywZdaVu=9qUGe=bc=gDs(`sA)HLE=rhsrf7pqYSQ zwFco%0NzSe8#+4+qKEj*Q=y+AUzF+ep3u@0JeHm0{GsZ$ItM3co}!@PveKHFhG*(U z#bGuaH={Dpm?J!PZqQKV@d-YFtOjevaA4K+lyn)ptwKYKXRwzklzM@M6%&y+vbiIR zFJy=*WT;t#)%j&N!H;(&fot94KR7qPgv8P0VijmE)fSLhc~3(4tCZiUk<&GZHZ}#u zB&cnuifataD4zylSH4O(+1_nPONfx7k`Q*kdiNgLhamg$vsww*s7&;0%pP(A@lkp) zz6u`Ax~CDaS$X2m=YM>rX_dxC(CDKYuZciAP~TMM>P+|~AKAF&k7{#3!2aHF{-S$Q?}n<71Lc6yg7cN<;uEZCm&<{ zi7i67_26*Dp$KOQ-?00r@q4*|s?g4piljC0dj^eT*el%BI|!n==U18)GmYzQV|gaW zMbvyfLj2@Vua3kA30Yp9Q`eJX_c`+q!1OQ3cg*M2TG zlwavpH9e+PWF`qow9&EYqYt1l!%UrX!`|$3_6BVY9|cM(Dlsdz?2Zc}PU~24$mCoI z>5xKMjp9kYn<07Bo^EKh9VPy$=j}MYy1b3Pzl@zQm5}~tM&4oL{>6M}-y>Nz+0ZbjYeo>`5b9>(WiMPEuB@~W+&RuP zEyMQ1P;*}V6pd@{@a;+a4VqUpZ96vyg>N12t$ znLq6xQtJS3?1FzHw#Zn9t%=AH<}EJgt34J3=%#8=v&QdA%Wo?hYw=%prAsJ8c6J9H zht~4@lsf!uR~JUdW1HFRbnT|I(#hs>P`D^B_w$BFqheJ4*LkP|bjJ%571}Zdwnh45 zh|Erdm7vHgAYAChG+=c05sx<9xW0w!trrKM-N`%)nBiI zj4)AOlCS?lgh3Ar{LL?`a0iS?p(cU^*co7e5AVNY?t$j_aUQmRtgC;IY~thk6Sc(m zCl@IX-$T5^6Dr{0H>@0Z_!H2?$Mq+UiI3}d&P_n|n<3yIk@|dG$y|5BP{=XJ7+QM2 z9ru|{lQ}zCprj{2G|lrLfGCdE@K3VS+7r+-sHO&-C{+C?(4b`&(0+Ulu+{DS1SLY5 z?<@Ofn+WUIO5l>0jV~HWI%Cx*`Ju;T1q1Y*2w6FlKV=IHu0Oh4?&} zmVaY<{*mMKH(9{%AhZ8DOuyKZCJ= z(2Jd#P;SV9)EXy z7kuD(2w(r@`R)a&$0>PR%c7ISi}_@TIdT^4?XxNF+3D-%v8^+h1+FdPJx7rSimzij zB%?LFuC4peJzh82QI4QtXB44N8>8;;ANe_d+;I?n6IB1Il~k?`)D+G4?1fIMV3osp zgQ$HFsb*{#!HY3%ky&tD<$S-J!I|a@*jo)W}Z1Z&Am6gHQ!56JG9X0O>6Xbf{b!+{~;x;BO;cILs|LhN7RfYo2!zgY< zET6u_`Y_0n%FwuO#fP;R zxqUw$+h&LCe){=1C8Q8hVdztAyrebkdGXtBekn%1?E ztjSLL1y$d=bt<2&A2H~l4J>L(fSqtB+j!166w`fg?!bOeusO*Od1{-G_8_DOFA&E( zJZ?{Z$ru4=qUnWhEBx&?xE0R5s z?sU;|UB>2B0m)G{D&^;~g=VwS-G~=CS4Y?z=c-fHvdp-+J76b6t5JBDm57bNiA2(h zz=llN$Dg`}sy;)GT)(jNsE)xbk7(XHAKJSUAFFY?1P9kg$=82-^|BW-5C&6=gw zd5$QeYJLUtJkGa^^Nev+JA#)~Wb&IcJp#?gIyxs=V_8alTGc{tRF!8Y8Yblm`~!g< zlfS%OUto1N94--xBYh=QrUwU^!C<0?e3))U%;|xMdTEBV#E7`q$hdJkNoeCs$RnN- zx3<3J6A(_K`$=u$o10+|$@r3N7fxm9%jh;3baN2tIXauT8&ZK*!z`vXw;%Zi{_0#b z?@^YDpG)>@&EV#RYLkE0E$U1qAIUXtS6j?h_WF}R2ZY??d|Q8vYT;}kyE5L`(OI@u4$kXC0c{U<)J#9_?& zYJ_69C?7BEqmtubIxgMuXa&+uv63Ys+fExA%f@09G^WP(a^i53M__3)TqsfO zFFvP$_rFCtIafWKB6BzhFSDYjX1q#fM0c^}QV-^LHt|N}z+4VW(yA8nk(3laI420m zEg2U%Y0lVQp^@&mh2-bLICM;{oXF;5>tgJa>nw*NyN;c|C6T5%BKw76LChVRZ4btb z9O#rj=VIG%p6yqtVb+D6|GayfuJPPTQi4N_$77Em9rM&=&<_gMHBPS@~9wA zrZbKdt;Jf?g!uzeN|SdgKaGf*er942KjKx}q=73y+K!Tq_JVv_bjmh-oPZx`Mq2}a z(JG2rCwEOYI__=jtiRYY^{#-4dpd03YxnAL<>XkSHLgNlq3r6U#)>}2T|^8Y*!(EHJAyjn zQ;3bebZVhCo{Dsi^8kfonZ;27HO9Kfg_q-Dviq7F z7-kYshK)KA&MHGDL3-*Ep;qj!UZSKQBTwm$hhBM{cW8=j<<;bp$F(sU5DbksxisaK zK|-iS?Ji+DTC0N@lj-H?ixh@;BvwmhCWr^Z$zc)X-&I0_XZl=tPw@~(-PHN3=7pYF zI$BxLPcfZfM@DNo3)gQ7MaM;jW*?fl=#>Z4TfEcg#Ee=_xVyZzA;;yaC}qhIgx&Y} z-0J32)pp1$`u!;AxK>z3C_ae>hp1u9f44Byc_z=!P<~-=AO(cxfN4{K&Y1p&Dm1TO zCijwOhIAWJ$@CF|E(M=?g3`nvjrtq&s3*A{W{$uX_hmk&E}_brg2L}6{B%|Sr15F}HJ>*F(}#fB zb9q_3ZCaT$TsQ<~F&t^^XCv<}TIl>*PlI?cJy0W$ARkj`C~Oz8w`(&1lKB&9859w- zH2cpkB0lY+S)Heb^JJqM^C;cza;rP_l2L-xszGr8R0L-@nVRyGMkoUL}^e9u2c| z3!Rp|3*y5ohNuv+6dT$0M&IW2r_|U+i?86^j(Z+MCY|dWSxJ?|09E5`IYGuxX}VYl zk16a)WsJi6JA9AkZDE2wuLfUPomG5f7woTkzM*|Y?6JZ5T}&1+B-h|9;}N>xv#BSC z5&}PU=^48<=$xUKF*GWOtg(V4GnG`c?*kZgQ#v4DLwkRD8!*p0UcB_~J-4WGYa8VI zVCfd8rEy zQ?8fRQ3MU|p`UAx-muxE4FxOpdkNThaSc|qurMm|H8PUDgza2nMQGBaHs!P*8EL)T z_u=h;q(tplt)X>Wy2U&7{2=>+j_o!)T0|t*RM}s>#b_M@uY=s|N%e(zX*lRj32$+^ zf<=61Xx!T~dt+M!A)(OCAy`iI7-BIBUY=5Gv%t^X;21iTX(i!u8l;9NkO2$966s!n z&ZYo(-$9y4|L3pKu#FYB&6i7KWor@MV-va}L!uhie!^2Ze*;4Lz|IHKRW>x}(~WfY z#ToRE&&_V>W33uO3~F!{DNwo4DbJ;lh(h4$1k0l}Y084?iFB2|Wj`McBe6W0lu@81 zRPy606M{4R@kJ-40c~Fx4c)CDL+Aqqy&S7l48N*+exP0euC6Qb544chsxd$BP|Ro3 zE)dtH@#JHfxC||YRUIrVvOz#h(j-+a97@1@v^?uNC ziqQ^F6`Gi|g+5KA5Gw;eiJ*n4dlr_4VXtz)mX8f7qv{y+a2k>#9C+I4YD?4Y!QB8ddKI$fYB(n$!llgol(^(%V-foj z3Zbu3-HIRk%`}=Zt?>3+Dx%nP%jx?SdtMi38B0ty+?E*6?Yvwe++wvl`u^dOkSYXX z2~tBkjr_nOa)EF6!fpd+z*94+`+%GV=hWe*c*)KK{T&JCLNc;3@hRCyGYsR~D+YlR z8&PR4%I!e09lxrlS*u6=CZUe9Bu>Y?ru#u-pT*1{MM05Xber~N+lnCI^ze6^uKz5i z-63mACefff(Kq-!F==Fs=FStCK|cx!4hv?Ige|T`=BFlas~ywNn5u-ZnNDrICzgcE zaoqq*c-pNzN>tZbs?&5N^ui6QQwq+MV;s-=x_DYQRo_(GkB+ZiXN4R5OJIsd0Qq{7 zmaM;)DfFGTifd*1{2D`08_)GQVJE9GsVZ+MOpoyEsC8LLVD+>L zzB+dgy!km5rdCj^sk?q@zq7G=c7*~jI|pv+&q+#pSu|;>cA;lx@?juzcj6R_3;u=;k%kQ#%QwyY?k$7-(afD20TA}tBtisDa+nc4ehw*P zAyJ$4B=1M#9DI2#N0z(kJnOnEUTeLdB7Ir=T~cW?zyUF?9I~z}F#eZvkS;f=k@wNa zy`9p~bR=oPVwc#@oztzjLb*Mm!;GlMd<&Z9GVCazc4iF=?{eQ~liCDdZ=05tcx_TV zIl%+=pE46WeL~Y0N?>upDwvGw!v1I~MEvw##YPIp7wQqPPENdcYAOpKHt`o|TH4c} zdxP=9op39IqKQX4hF|Z&Lk=uhw7;9&=_O=Z%9$MpNxfGuB-tdY{5tzs+&NulOu!3u zIktNrQFZm`P|bGQ=iUCmGT5~;$;50=b`J;Cfs2l=Ikm$jVvp;5M({>mM`=_ za2DIRuO_C)wpN?9tr$T(N^7}>=VQZK97fBu^`?|?r~)+fWlvp)4@3uIwZt}4L@~Ij z>*kdzQf3odCixWpElFRerxqBe<0(DKLFc9o$Kgi<|Cr6EO#b!+UFLOTCry!XGWw0N zaRgE(p~tZBIfxTy*nMb@=`I?q{DkcoA&eXpAo^&kQ4ex9zWAW=ea+-6AfATOaq*@^ zT&i$+^Mk|xL)u$Lx3RWenr3F^n3-Z`W@d(%nPNtnnMr15hS)JP#mvkUvtx`M)99Sj zZ+D;X>zP@z=8smXszg)uLlng3k&LgGonhwDaXU*hQu3&em-3!@ly{y z${TZI54pY7{+@5zzh4(0UhLM{g<=)o_OIh(Fl(FXl};qi6}u{%)~-oE9whRe96x?z z9=V8-KYiq$WKncXV9w>$E8n-U!1n{drokPp{-z%w%^JD}$Zk-D9Sa%cXZPP+0XW(J z_H|(9`iJNI8-4tZWI&*U?SC?m|Ka7r3Cd9WD~Zn#sP~4+pWaE235-NQ(*^dafiMLL zBAOBK7#);;^S_`&J0e;#@bfDOI*n;C$e1pXkGKw@zubI=w3e=q^a)!=_i zUHBI?_&1&U|A7#s*|2bdODJg501Kof?IZ(RwolJ@ZtXI~$)!FAC=0yAt1Z)Qrvmb7 zOAoJaM8lajwuM(5R}Z)WNVJ(96vOfs3KJ01j{1nXa^KZWpN^C8Jpd=2G)GyLo_;ku zQHeThNDfC1D`z7JJ-knYVFjOW|fDyF9#t|yH zNw!gw6;HCY+x2@IUfUbbjFobz1z7ob;nK+6kqdR;a|Nsr777Q}pub3uraBH9%ZZvj z9_;->UR)YpTJklrMR=m10D$c?<$L*x|I%mjYTm}DfhBel`;KTdsl1t(=;Z6asv9re zt`Wj6SkJgKcu#1E|AhY&L(0_W5qS=xP=j*|yiKnBPDhnhCo{}&X#Q`n}6)faA`uf<@?)!m#I({m(`lm(1od z?)w04 zakueZSv9PFOh5f-K*X*0?i(3YWAW1#XSi$|SdZq4kW)nCne58o6&u1@Fj{e2FX|qw ziPNLu2alnp9A#xnNJ_PyufNYgOX+drNE-Y;BNSecq~^=SIe@#_Nt?t|9$_LEDjd)myw^9h9 zLD0{$+Cz?D!~pbBxAAzQpG^wG=LMgtC=t>5w2fGr5Kc%0QxVW2SBS;m3w&7^-R@Gz zc~x3SjaWpOP8dgy26$Ze$+2U)GYM-4G4f2yE4sG-!_i08fUaucs$ zTR$l?sr%%hy3efTCDCxISnTh`AbU6|j*__x+34M%OAe@B1Zw5pO^!0`O-o+&@BcE_ z1v&kl@+;u3?qy2OHlnN`#DE{IK4@_lYmjLE%FIP7R#lLeND1KI8$TN3?ltUmwq&MQFFUWqkW?4NO+;je&$Hc7W{zLO-2eqy@8={@}Xwmd$K zzv9cG5n{h8cH6_9V(M|vf|-jk$HPQfANQP*C8&$4h!*f5!wO*yVy;P%U@jKNI)c`Ok`$N2cxIGU$mJRRU&6^-Wk*K4ilbb84K4>%o z{agPv_J9`tGd}$to$}Y3|KSJ)TKEhUVFisHHJ`DNfbqJJphQi5M^xY`HkuxAfCaRH zRfC%W7>t9a|JQ)Cw*bKpB)~;81YWa(h_JCaD4wrCR)7K6iu>0N94R+D0zhRvGy`BW zJC^p}DjU@Q;`I7=ZDT|b^yuy)OgNx6KAI392TW}Vp~yqT9`5}EmG&E?DPQjO-rX+< zRLRTgue@SSm8Cdmm}uM{@@Npc_vmMkj(kb&E6o!My(44kbW=>mGka}>RR#)!lLT{F z)S(si;@=IL3JYE|uS$55ni98F77ubHBn0!!|GcUNZ2eA9TO#apr$zmr)f(WLH!=e7 zm*-#Iv7o{S7RTR%_rFSEoS>*&B2bqt=Rb!TD9C~JkCulMc(Vke`64iI_&|JR(5K4H zghWFBZ)58}j<7#fKs$gEa$vtp5Tb=3!QZ#6e!$)xC2{>{1_GXpOM%1rPbTfZU!U{u zQXJL)c>RB!=D*FN|2nCh|BUB`zzZQPf|R!%7GOIqnh|JX6Ep+zJN{pD3qm)Wtu?kKeG@{pb4}-4lob23nV8e7x42k=m?C^ zqv2w6{_VH?uZjq0JDLa@{a?@3--d$^_`fSv{CjHgUrdkxWr+N*`3V~*DC`Mz^Vb(0 zRJdUOt8nq}GR8kfc|t-6EGl1}%z(zeHt2sBH9*HDFc%a1udg-8o0krV&4`8$c!lw1 zq1(uOxGcTk=}alV6LhAO8LW{Qr)+6XdA&QmGKQq&%yHMeC5J#R0O$BasPc{1zG!O3 zDWD5*cjez+IZ!1NJ@poVIjWmMLui)F8b3bu=6IJ-FuwhM_kMl7UH+rX%v8*bZGhZA z;LiqX@79jLpKo@V4I0hfhQ8T2VE5|kr)Tfx8`6o>r|W>1CoZ}Wz{ly;LOE(L0uSOl zZ0)D(?H&KFmxprxymQ5pbA9HkWksLtbQ1#2j6Z{Utmc}(Ub#MtdY-CoESbg4_na#~ z$Q%hEWPvxds*5;%-zs!?-?*Cn)raUOwQ=o|^+qzhHpjI!^&3e(L~2x!6EI34g;dNE z-yKiH59XtPjdg1c4k4DxBECRUw+^uHDCA{Dj|BVfLZsy#@6V>DXW;2qz;c=T{YA3^ zTYbfP;S(3FpLs{7BDxkeQ>LR022Lmya*U1()lR`z97{<_$~>RDZ3avZg%dVJ+q~zA zjV`#eV;x~4rd$uD%ijrN+WHHqGa@!=yZe3fJUhG&#VPkMnude9mR=MQjG|4fS>lCx0Ih?YwFyvnqW^Ucm zGqPhIEE)bJbu}%Lbq?Ne{rGV6q~hc)p5F^uql$Gv@x)+7Qu1b`!V6f+%e0>O7Rb|3 zvD$;H=1jwn^w59C_|n5)IPon!2d-@dm1cwOz4279Mj)vOk6#^zkDZPE-k4i>$=j}pl+cQ+oo$`HHpgt z@knI5MFd-;cGC#&kdu`HZD}~{Zp~zt4C1_#UEWDO0YTk|sWiX*lG$uw-T4yl9VU!I zJk_cv0>v6&?S`Xmo7w)Y)};=z>RY;zJ^^%8<8H7+=fs{Wq5g&3GGw51U~ry=z_XYE zPU$doVlJ%Plaia?k_wu#iIycG1@?E>tu!@mb2VKqm&G<_w%;SHB!ho`SV5-!367&5WZFv48rbgx%G{&h%SJU`5FgLzRSiMsFym zH2nSue{A$Fd`Hk8$P+!&KhISYgNjU&7t<4vx9lYlH$eMaYcrq8*08tYwESLD(%~#{x$4%ap4j+pQC4K-ZYQ#E8I@h+BgnJj% zSk#BiS=5ku%UHzbHM0plN88<%eneTn5MXUxOe*2`?Y%iUa(&2xZkTL~9s@nxdjsTj z&3UGN7}4=(j2)xK9v&))=AE1mT4#xK6xAMY5n$|9dWvOQj6lN)`BMI?>;%#ZTd`&W z7MH%Fb&g8>r5gveA|+e0QE$Y0-qZkqf+?8)IZV4?lD2C}<9LxfPgQG8$)pbr%#od{M zXgb{oTg@fd^MRNnQx^iv%i!|nM)#m-((4gVm2z$rRGn8d^T^G#2mSP8YK_<;%8Z_T ziu=^+1n;L#67O&GQK0bhk6cT!3f5n zaj7JFpN{dT_umSeVg{5Z?054A==MybP>6objN z%IQ*AD$dem^RA{RgS~ne zPF=~5$$EJS3ON@Xg0d9Y!+VUfW1Kdh&jwwg&?}{KR3F2Fk560&7}|i1E$f_#<%f{R z`H%xV50M^88ni;iLK1z-)B{}~0rzPlU>O{ZA&)Ctzbz5Bh}DKeGw?7Rajb1N^1D+; z_j)dMaEaum{ve%9(YexNw3FXH4E)(Ux+W+DDARb#?8f1H+1%(>SfW*mXd0ZZsmm?>J(dahIH? zR4we2oF;%Nn|wY`9JTM)5FbxV{fc(A?#H6~2@)A0irnz;kLPf)?1Q?`8#`a~zL+*3 z#w^8EuX2{0)^-M&M1DPGQ~y&HR70FAW$<-?=MSQGF3Z9<2v4tz+DZAw&98jDZ5aI_aEzjA_{29xeW~YCw(Z1Yo zfDgMk^QU4Pnj`9t!Wl3vDrFc5l&lk=f@~`YkFqS!t+x5RYlG_u*r6=~KQL(!V3F@w zME~Zj7yf5vvwJM!s+!QZ0=5LTsLzmsWv;zYBl_NCuM zGN$(~a0@3co$MlG%dw!o>eu)d$=EL`s~ib`3w^X#HfxV73}R(OdSn3xT$^N4kv;9w z{JKRyYxs9sNOP1{fc-9si6cGx1d^hye>y&dfs_CEsfRUAt+JZVl-SMqjwP+pR8V@J zyY?f${>jkTq;_MmgHlbe__{*-eZdz4e1cILWZxCoKmpeqYuON-^WSRiQVi`tUMZyP ztj@qNk=mn%iV=Q-kSE!j4hw73XGw&HM=je9Q-+5EZ3Q}ZfR-LF)xPgI-8GBcHVqHd z!gGZ{Klfo(4FXZW1cg7NEVxjdQG(=m-MyylsjEtlpFg?B-X0e;81xp}zrokx{mF$& zICL9%9}sZq*DVT%VD)savZ_Fz5#&J~j$+WniQ?JcAvqZTVIt;}fKo&(74?-$AnrlpaDBEiW3JhL z|6bm}8{#JJFj)ku61Ak{!F#B?S4IIy$cM%Pm{$AQuVQoDKP%ey+wLwfm3|w{W;{@2 zc2g=A4_QLj@mPtZ9;snFzJ5Kj%qQv{cwx;L4`1W*#47_VNlrJ?YZBJs_fMFa2rzmTe&;j`6W!@ z1sc2X_DqJho$`VEXl2WDA2pF%#@K4sZVhMncZ2kf^nsKu>Z`d=*!OcgVx9JO2Jq;I zQ0n)wS-$P*r|xMe85bh9YJhBsIA&4CO+L*`!WwxGR2Zj4r84sEC~S+0)yWs@hX`rQ32$nEsjUx)559du?7WXn%&7^nG6| zP*Fb^4`5pWPKo!nNw!fEcXyf2kNU2?R~8BawWC85USZRyzXwMwwD8RH12F^WL`f&8 z^MvE0`XKG!Hq~RjNL*(X{KXqfq$p%Qr&!vD&tRNq?2i6id3c+?viqu(VP@)Yki-)* zQsDC)63$zhKF9ZSjj=Wf<&Z9V`htGQo*(^@&HdIJAY1s}(7j7`oU$g_PyL94dBHTKLy1AHZzcA6Sbt>gvz+s+MNuHjVJAeCibYkT}7CTHfiH%$xYoYmS&6ao#pK>Kg zR={D1zujOi)Sa!9o4P_kKC{?$3&Y$!MMwP^sq%qX!rod`x5Fo_RVKAlx|N|mzRKCB z)7-caU`7-Y#7`y+0ihn>}LqCubZb4N2>#CmZxN02!kW#Cj^=TbI9m+hCCmd;9 zv;IaE?6td59gm2aKDX2n!~U9NG#j z!X@$e(A179_1|ur@4b;&LlRXBhc;O}@FE%|yE6vm3!)K`Ri9kVJMoHpHJI3qdd5uk zK2jCEvP>sOQBswDwNq$8}InS zL)>_9)0XCCkWB;a+XvQgnTJ{RPKo(OF4j{$i)Y)?6f#@~E6n>rgA4#;dpG1#H?T=G z(Q(OWw7=(^uuh09WGmBm4fYF6HN}c|_3ZhgXG9NCcp~(tpM*M!*&2l>6lhi9dY^Nz zIGqcVcL`Uc<3$60LEat^TgrkN4EKw3KDGi(5yo$y3kN3YM+jzK30Bo)F*ug?BJJhV zGMU@O7|l%VV3nH|+1&xzmzhd-YVe@n@P<+u6xm#_!x2X#TP&&X#&ugb`M3CxySAJP zJ3D-+6*5ThzWvs!OK~QFwSE?nkMGyL-ijMuiV^rfK9_afpeTQy3h7MPXgV(HB~tO2 z;-P!H`&7TK-9@kFtpAiCMs9L$UsolILqDsjTFCv#Hx-PYVKfJ5<(UlPJ$;rjy%a{G z>10x+Pyi=T9XDM-4jG?QLZIp@2=szko3g3t&}!X(fOOOdsOvnC`YUvJz8=plZB=ch4zWn5d`rnFiPW*hAQ|GYA_3e zVIQ5H+B;hTOsw3HO?IzX@zvFP+gLM8GF9_g3G}V-!BP%5b*?? z)>d;qN^Z&3Ry{Gw4xfRcFYpqB@z+_yx0@u5kCw7w-;y9j zDfOyuH4`&l4?==S{as=~@J7YMzWxAG2IqZKr^y-OQd`g8VA3Pk4{11rY4|9y>_a(3 z=H9-pVx6B>-!sW>#}OHRq{5|Uhr~{1$9S<#^_Tzv#Fui;+{JT4ZF2ky3zZZ*zVTHI z$x`ZvyJy8O;%Y-BT=+4-#VSzo3OGO5^9Xiix&%ZeuU?TNMJ6BNPiqJ*?*kf#j`JPZ zG-$Gsu=SwdzdL797G$uHCkF5~j}_2172Qr$)p&+tntWF{WAe?6aX0DxdFgd!v8$|# zQ5#7JxU$c{&cBc0GaM(JD^1~^`gqmgxF3HDZLpt2+HIjeJtaq0tOL$t4gwh(r&I#v zpMWM|$RZoOfrg_am1G=#o`8o5Y_(#=F4ZKIeitfPbSc@!H7;%8cOnOmS(qx^Gx8k) zwHeFeL7kr}RovJ0?{sK@o{VUs~%qo=a;H|Zm! z#pPBKx9|40)Pf>|ZbJRYPI6qQhuDEW9uo#*G|Ww`nOF7{KO3=P*b3Qv&LEGov^JRl zwKeI65YnW4zt9h*r0;QZLo5!3#Z>*^Fx7y;W!mrG)De1b)fX@_IzB9Bbg|l9HoSOH0!L z3i+PLm#zdu73Nqn`;GLL)z&Z-F!DeLM(T6?%AYSW#m`G4UW69J?{y9C=@GJzfQZmI zmp4~kX_KrOmhk>x--ZH-GHw(WeNNnPQ){WMQz+2=Iz}&t)ZcgL=8&FRCul!LXW>^jnok8e7A!O^TXc zt_wrIvwL~bj;tU2)Fv88KhEh69h-UD?jTFStDDPwk44C{7&%uq;DSO+Aj0S_iL>;5 z5Q-K~i-USG84O}r{Bt#>*UV42lxNq_03rfjxXclA4`1%LS1fPN9+s|%G{8$yOAh0M zD_f4Pb?^dx=7IFlEw@f`1-6{Dsp5~f6$CNMHwP80lHYKWb{)IF)|M^xvlqiJ&NQ9tHJ#_UjwkO< zX?uFsw~fgN-kqM#lr92nP}2VJg3=!+J?I}bRL^2X*T5-IDV_IW<#RaX+k%78(RaFk z%#By!t(;h3E3LHYv6rqCj;s;rUfuB6xyX`8KDRJE9c*RgA0HM+@pf960#%7KXl1A^ zNs{I_h&$ZARmkME(n7}1?^ykr7oac>mB?T3uN#!PW{@#HzE1=UTnnwn#UZ5Y_%wU_ zl=VuB)?G}swgwQ$-5!0RGK}`b=T(woNwhvAX~+WD9V)Z$c!xI;%yXh<$sO-k zAPOOpKVW1K`8j>J@NwVK@@oWN2-lnD+lwjqc<_5g5(V7pvxRoLWi|J~q9H-LHn>Vv zTVM|}843Q{v!a=7<%g3R%`b^3mO z#;-Vx8qp(w4sm>eCxg`Kq9-d0{Ze{S(^z*14f{fMIqrJx(U67Mwa!~tIq7C-j+i^& zN)DY1YKP9QHS!+OHM+-R;EBq(wZ+`fL`~6nxB0heb7GF(wz}@@dqL4Z0=JcdpGuA! zJ)>5y#NafNAk;&TFuCtZ`{7frGpsEj@)(X;5XtiaV*O15g@?>}!B<6DB1PpEj2HBo zNhFnx3z?ssJQ(Rob>1V%vREI-^}iYi+rL#d*Se}v56CoP%<|Y4ns0_E6MumW^0<)C z{=y>asTD7LTVInQw|-L~zLuW+F(7a8vNg53b^kiPWHKL>i}HQJ8%f|+RRNdzi83bz z)0lS@@YW8*?O;Sy`ub-BW9PdYH3~xZ`t-03ewK9uHDu^$DF7p^hj|T*nAT~{#p?Xc zOqwRyf>}Q22c++@JtNwq)g=Cb<`0^k2xMGkfPlx*$i8_q?rj>AvQcV?2U8zf%`7>i z)f8h6bWk!_5J#5(1BAJL^X-07QyRf3b{H%kH~%`*qL$s9t67le01%S|;EyjqTU-HaVc_ z0HjWqCjO~P6{VorZIoei7l*;8#Kpt(!^0U86%rI4Z+e(@F+S!%eLBVC|7<sBHh z@9pR;fF(d;Yv<(D8&`;hV}0)yyU)4(Ufa<)ady9oxADWiQjAU&P z*uYW(Cyx-WtajC!72?ILsDUzR#y5}&wn$ix4MaI~d5GoXu?b}UI5PO4l{J2^f)=(G zy_Rh^K2k*#nozZ4_YcXC8^MG{ z)P6fA*kZrw)AY#<-s(7hcBK;|U9=~jfs`I{||hz|Zt*u$=AuZxiJfr$|D5XweOG&LK?g(7iXNWMUUR zULr;>!LYq^6>!-Iv1l;zz;cIL0f|TpGvNJRxP?yM$;Q$k;yYM0Rjw*6ifg;?RT<9W zpwkZ_OIU=yplA)1eXiH?YjS;uLC|?nwo+EcYfeB*Qid&PtTYt3YWwJXsr~?$9Em>s zN6-}Y*JbmSlnpkh-T7~OqkkJEfg~lMc4ubT|A=v3G_Xj4$rOzAz+zQ23=k(sqF}@V zj;o^4{j&@*&QU|d2g?2RtlK^|2!HF6r2mU9=|5W7|0lug|4EhdzpnNnI6;O#Z3bAt zVKuZ=fP=@|%naad&mUukf8?2Z2H7P^==%NkpnT^0?-g#@WGL0H_MRVi{C0@;$?wIV)o4W2( z<723|rcKFjlLwXmAdrDAAyVCP!GT&e4-l%~`Y8%EP5D)a8fDu5_bRYlz4Wl~;D!Bk z(Ir`d`u9?$z5z-?(!;{I0?ER7gF(>*#%b>*tM)=m!jhklZI#4(h0BQu{!ClP*NWK! zL0q=CvylNYmSlu;T>Pq&@MrriS)A9^)oJ#Vw6KdnU3WauiSC{#i8`+?l+_!oQGguQ z1w)om-SMV&tF7mfAG`$9OW}5$;+ol}lZkniW&OhP<&e3>gvW`rYN>flUHAnYa~VJ? zEfw`LqHzn^edX4%In-mLV9>cM-Z^2D}`PGBUX;BPS4u`K^rWK-v ztg{@U`BPf1eZ+bf8J?k2c}lNjROTA%i&RU~mhvSHIvTI0XR4Egm7?=XozcD*Uz(fY zA>#JH^%roBz+q-t8xBB1oTC)Q)O zy%Co_RtuT&K~w+GYP;`QY8boyc*y*-uh_a)vZ~^DNtBgYSqT>czcU65SI*E%{+-2a z9=4wm;8I-JGpP-*^7|t3P30-y-10MAuY7Grc-BHygYn7Es7+haCyt8r^86!w1g%2| zp!gYIG<#9~+tp3COgmd5IRNP6E+=h041|q$5`6btvX{8EcNNqVYgLYmr*74YQ0b;_ zP5YclCpys>!El}P<67jL7h?NM5^mP4IucC>nMn7Q!2!YH>c{WS57R~mBCt*)}rvSu-#H$Y5-$ks81Ys@} z>aXor_U=_Xb%miDsGb~L`-aDq65o&;#RkG2kv;HI29aGw`}B!cYiI&&eGWp4;3`WaQUtuifo6p=Y~IVH z={KZ!Ll)|U?A5~`q4vIZG0`>Jvxn?Hwb!~A;y4TtrNP#U%m6TaDE?%-A07{s#}Wor zGC0*6H1#l_r?8f1dqZrj!>Q5MvaxctluD~Tzh2O-iG)#2{)o#&Tp2e?FB%zQR$P9OJQm)9+D}QKGy*kQ23`?Xj{l$quU$=|&ejZg`Fq%>Jo zC-x!P2@nne7z6m(xpZZ?OAW)|$%`SB*dcfYp=4%%&ig^yjT6MeW*c{LsY*^-BfFX5 zt;Nj3^$FVI219l4ZgRBMj|=)`xj3dEKr!~vFSQkfZTx=8!d0u=ULBT0vm*-$kKbT?&PwlG(uW)=6P(fb2AegEcT1uV*bq zo;O!iYTE%e`zbGmi^p8BZm8v^)cEpj`_IsAvI)B7iozm?Y(+x&eB-yL3&tL#O(S}~ zlRm$YmDcteR&%Kjs)MYEsIchql8cAaX)G=VV8w1j)MIJGm%vD)1WAMR=w8e_Ua^1t zmXlgd7KI`egp89GQSPDk{4p;NnI%D9TILhth;jw+Il1U;M~WpqbaH=yx;*UhfsgCc z4R6vPl>X#2UyD$Lm(SrEtw7~D>a^r%2df|r&25-<3Zc5)9-q=LyG94>`&5ZYUh&1M z9hE8$Cq{|5MjqX+tKJ1n!1i@NeI%YDxebBsh?|SwljLnWBu1d;*F46mM4rtw+Z5D5 zcWxhmE9TFu#N8^iSPDp~rik!Xgs3APDr(Bl`LX}d#QKC?2>gUQ5q)jZ!EG13m}??v z79tY=!RsRGl82F?=d8mS5n+}bXw1y`B|BD+D5k;}=auqNs}(2P55B<{MN@`ne-a9H zG3F>3Uo@)y1qv#|=qzgwqJYx;hIt_8S?Lo%S}O$?hGm+|MUN+BG@NXj6Mi(zaOHQh zN6PpsO34Palv$SfQeUxFvdm{(9ufR8b@pz!kWrMw@;pAZ7sY>} z<4VZ470m7o>Hg9!==}q2Z-tLTCM8Q%QQ9kc6*}3lfkWIGe9Yl>(RmYF^yK%)b57F- z5H-JW#M=-p9mYrD5JB8_0Y4wqm?9A}Elp5E4UdwBl!X@^)fA#Tzvq z>946&z{o~JN^li??EE%!Fnw;Wy-SQcDU@7m`r0o@rr7K6x8JE?JIEr69_)Q1T6Hz> zeY zNQsP_9#<3;sP^vTJLuO80jz{Om6q1?wNGpo$L6AFvTSP}$&_Vc$!$Yl1B0w&m4%8s z`d$=fBWul4CN5yU!!XV*SHaWR+Ou zIf5140)l^YK&2ki#Klp099DGUid3XLu7ENgBP6QUM}M>_oZT&SCeWrrG3D20f21vj znlc>BCaXTn$0?JAdH*Vi7&)8}H(T%LJloZPPNU8Gs7~#){H=E2j2k4A{~aLbZ<>nx zE%9_^XeCjEe62sMtQ;*_Qmnt8C>J%rm4YQyD%oT+pX&pMiUs?}1Tu5kF2fBzrZr)T zG8Pb|_(A;IK||ploOuIop*(A+UF%I7?^>hGM5xDFKJ@gFlF@anL-t~y#FIku6)#Mm z4mr zTrqUB;&$AH)!-oYD(|RK+eqA1Oq{`;7(CW&ZKU~kz*pA!!U(-?C@^e@ z7-dvQ#rRH6C>lTpp*8@h?RtUxOAd|8-|jJ&7~;^Y{{4k*}`{LDTTYt2*lK) z(>Yrct0Rk8)s@22Pida%^AQxYCA!BAOz2waX&n}|!`84U$ZS1vUfE~7jSHkRtdEQn zn}2TJQNsRc+z#U6u8sJ;KBF8kTVgkppYY+#?Y$>x>U)O=YuW&alrrhgY9r_h4Nv=` z7K477#wZNoX!nw5EK)0ARb{g-TRAePSz|~{yC;>QRT9-z*Rj)qOEM)QRBJAS-EIbW zlkg>E@SHujgUi3CEdELVm~;D53c9T(HrXY!fzuGqm;aI zetvT&aPj$?7y%9t4|Mxt_6RX$WtpNtC+*kKuMTEM#lAR=J*)@M`u$$~*l5s&xCYS( z&$ajKy>&NXEOR^&#}wIZq83el)E`AGM{ZdU^v3ZlfxKd|QG96+qpxFLR%Evm4Ab|Q zxrniJ=0FWgmGLi*!c9&%U&akL-i9TtTF&{S6wS{D7a263X>lgDXcf}MmI>eNr89$2Cnrg z?LDwZ3%Y8VGs(dvXGy^~M$7M(#cQxB_R*JL&m$4Z-@!z&H1f2R%j?|Xjj)H|GKITI z(VWxNZ+R#HJfmaGAi9_}+3zz2%ET@G zx)sOB_7G!7-O6gW7{mSfEZ~~NvIV&4IoTbUm>T^9@Q(0kUUz}$yA_SP?Os#^#V=ag zouq|yY_Ey9cju5YAb>-B3G`DE!sn{faNrgqG5(mPOLFq%qTRZApqg_-Qb@HD{nImrpJ7IC$rBT=7vcY=?eXyQj%@cgMbAvT>`@ot3pr^$sxft>O8YIlQ$*?MoE zxu1DI0M(*K2KFq!DkY8PEE=LO5v`{=N@y#0+%hI*cTCzQ8B#_Q1kaK=nOjAu3Io(j zokPdS`y&n7bRBC~JMRN#yf&EeQ5Jpm2mnbZ!NnVc(q}2L`ZPf7qio z51D1XT6`N4JlEv;{`)5VV^-bB_hzR(G48Nex~BY-^q&Y5f8tV}RIo>tk3Eud_YyXG zIzW;A!`522)(f{4zfyjVfBp3j98@RdZGZ0!KoHDhn8i!>(fu^Ft3cRJPPbqTTdl!6&>0-Oq(0E_E znwn#@#T21CcJ1H$PEvwnVcxgXvdr%j!l{<6z%m79j9;cuSQz8afET{Jmnv9JE4869ixc6-AKv|6705KL&9uQvZd%aFMdH{{w(P z%{`zlHa2$9TTMY_{Oc_@s-a;40TyWc0Ncii7?I`EfOKOt-q02n{i z=!E0Qx1~JJ&it3t&TFdjoJDpmh(GGiA@e4FB06*z*_c?wet0FLbg_n>nXPcwv#-p| zjV7q;AF@>)@02~oF5oJ15C2veKpmwFEmz30r%s=;?WJyri{q=w`v|l#1@W zXkZHbu@I6M4g2Y#R4X7cqnDcKJAigvu^V=L*#{r7E{Z1kJe$?U?EQF1F&V0(9DAhT1P>%SK5N7IZkCpsM&VRj*S7%t7t)Ssw5X;6;&y7qLnYvts#n* ziajOL4VFAY8e3?GNUIRy!6M&O%jq(Lm63j371WAX4ee&3e}!Qig-jj>XKD(+FR+06 zeejv-qP648GIaN}2R<6(r6lDkmq23h)Q}Njwl+UKFd^Hir$Pq~6HXTjV!q`(})p#NDX3-XJ z$u#F)s_w(d(p|3$ibFxeIT4q#N_CDM%ftE@S7cNu5WjunFH-MZHXHUD6uiH@lrY4b zr!=EAxcqz^BX45{xI9ma+VD31*srfKj07rVh)p_%2Uczo;X;%RDU0HkV6L0ZqerT~ zT9=XUZ25swl#`MlAlaiQqiv&9E~+blIE(3vKAyA`N&B>T;89*+w$Y4MC&avO2#{!T z5dEuUP$8)3kb#cZ0m+$TEfPVVF~vr`-k0p}O0*6!kog;c94Hva$7}DI|4Xnz)vx$FQ2Ih!5WAEur^I$0eS6n!W0euF)h!|H7jv z9xvOc^VobqXeq_P(ti1>Q(#8W4K4g&LYdA=BFa1Pg8Tl@$$);~8liZ3SEwU#4eUHD z&mOG?1sCGSpI8WDrPD$| zSH&e87KynvvjtkH0~n7!c>XU0u>^5UmICsfZXH;nLnm%ob=LAt%%3G1O&_wm1i-%Q zVc@X>{x8bjIx4Q^+Zx4P8h3Yh3j}uv?iSqLy>a&djk~)A5AF~k!8N!OBv`O~eNKMo zdpGCa``&o`wfA1Tt7_C>bkCY=tvS)ULMnheVs2iL6*8PZ$Z`j|`>;^8K6?)L`Q5~M z;yhKt3Pz2v%KDQmr(K!hbQGLUCU9S+!AWqPeD0UFmjk*`d7s_B>fjjmXH=P&w!B!5 zqQ!WOphc(W2%B?~7hoB=AXJ|N8dI{8-?)Y1lOb&1$(R_^Y0+cM#eZ6MF9ufUmuNz~ zGt9o$lb##6<@Y>rI%Z8+_izkT%-`P;*CA+pfl!?@t@9Bk%7EuEfJnxG-|go`07OEe z_-FIb5D19YoR%@@Wkz%(DUlCKJLU{A#D^8mMy^O5Cf|C3qPXrGChgzCX@1genea!_ zNw2ifN;Vyl_a+R9b}kH_cLqkVLt}^|lFOF~)S;B#jTAOzn%lsEx%8hT^ubXnvAFSM z%ihegHvE&}5dC)0i|b}Lq4=99P;)VaMOAMmZ7A49iTw!W{ox^em1UW}oDDnzE1o)o zs*_Bjm0^i7%LCpblb1{rh$4t7^CMrxe0LwZg=3Y1grL5oR>ccU{|fA>CpvDB&J7z5 z9Z;p9jBtkjq)Y`p^kAA&+I}LtJ9$1mF2T!hu5WEaK7sj6uA2%5Z*%2iFCIu$w;AFZO;F8$ z9{nZD%K6&+yXnkqw;2!s9gz?bSR|j&+mbC96H?q$g0x9xha6dqLw@v?HB4rIVR_Qr zKmE`=h2KBX7dh&(XKYn{&|*0Q$$~QiXeq`(#ItYMi4g7Q(td}n+^!RS!5-AKNM!Rd0T05N)Dn+pUGlJ@P zy1L-~_pgdJ-fK91-1v1WQ7rbaIb3pv;qW$t6YL*#gb2|hzBbzQDMzyI`>EBHyc)Wc zbRms>b($j8MDs)u<}Yk#80&2z3*vW}VZC5)Z9rU36|N(MvMq zT0&4_)~T%?P3(_yXXZ)8VCm&N?dV7gw>xgviK?T=uPrpNJXQnY??KS`5C}uA!O#l8 z=T+i_94$jGq(C07f4cV)FM}W(Q3zw>)AW0c%DD@Syg4D#Rf!*cY}aYa$$&*L8)H@x zEjhMDbCCe5LU z#8WBf;ZR7RZov3j$KAxS9c`zO0nA`ztQ1E2*U5qlerT8pkp+TVSvWga{Wnb_iu1So zoZmWtm`ac(o_xC7y29lgq~Bv>Sfixv+pvN@qksJP0s$9;gxz7%KU4a2BcF8SwwM@S zI@MI5b?N^LX_?d_oNS*{Lb*>nO_^xj- z*8>`Tx7&Duaq>nv4Wr3Uw>5CbC&q6|tJU)dW1^>+v>LBH zRxgleDs;Ln(Q62`<82mQgU?FvgQBKc+|{*ltei@;qr@$7G&cjgbQI&@lUTlAbEo-^MyC{UpEyeZ;}*}1IA{P-5-s?00h z+58&HY(%$DXi$~t=lB@=9dWpclt<4BOoi_+;Z0SUH`Qr~1Q2R$ zG>ew#lc`Ihd|z2`JpNm~%x)gJvX49AOZ4LdK9}n0Zmot@Lm@{qao@S12=qnX4PKq& zN^&i!>APXz@at+DPfCL&Y$G3R$5~+~_y*4(U!eFT*oQ3n&AeuWIPWFvcGENfJ94)( zQxg%cjsAHODzFU)N;$K<`6UPyJHR3IW0ROWkE0kaomun&iq+A??h=69L`_tojN<&f z$d6FV9}&rO6Yw;O6K{0}J>w>+3EkjOr0)}9W-N7dQega*G-Kh+s@ay{XO^Lmcc5BH z52=DkIL#gaCgDn3RlOK{NiN$U9o3^IuWel^%#yxJ5NC-{pLDxuLR-oH9gsa{&ZOeB zjj3w)pv8NCKhIunzhGUc!}!hVfm2&pat$@H`*mHRi|non7lmx?g!pFB)mu5L<{Q4N z(XuT?WDk<+V|O!|0M2{GTF}NUYqy{NveLBj3_Hc@KA9X@%KYW5BmyR zN(}^ba*wFMJH_QD9vD9i*(H$*PtlM9&f2(=grX zwkSy*{MapL@`)u26t}lTBkrzIyHwx>DAf|raTkOLKbiCBb~s;J?p1|c)|Il!B0DOn zvRfXxl2}u3#wCV(g-=-bD`wK>8%>zI4ObXlV4KI_tiIZy6d*ScbsCXg>;Te5cZrrscoA*9H%9 z?{Fu)j*8D&^UW{ZAMcHKenBt*apV54c#Q)R=*$Nd;crI76`2y3hwpz-ui*oUfuLFF zxp?^hE_3-qK8EjivkjR1`A4N6{B{A@$%<7AOxNU1>%oD@c`+D4blzaKx=|spVm{zK zHX~@z`|p+<3idx*a=_9u+1Nb%f63teK?{M0qympIs*Q~fFG;Qso{ax*Sr|~=Uz2>E z)I$UQZ}m8TXutfc0_Sh9q~9t>Y|?+|!u;97^Z(tn!wpjNvmyPhcF$)DUXvlJEdsc< z2apIkQ@-s70Kn+kee?LIscAct0&GregpG;)-(53!`2Uvb`5*V1|DO)0zdgLbvVecE zY5X5Jwgo{!xByttTpU;=(DSc#ybvP%ZCQW>vWW)-V)5|*rRDU;-h#Ga^qD|334fP9 zfv>SZ3JGAgP0tA%?e|{u|0BV}|F^NmUlKh3R6G5t{P(Zj{bT3B)(xC|y#MU=pFG|F zznw?_mq5?|Q$Yo03%BcW!TF~|z$oyLe@~aPeECfL*R*+~oGU5Mda5C!pgC)m?{k}K z|ANG=SrN(&uYRr+G+$3$D`UtNV->neQL+01i&x-4u*H(L!yuC;s#hPafwwjak0MiD zyRSY9pFwBDV%^(3RHy6|yf?S|!P#}riGHlTzrK?wc4aVf-_=#wbqlQfmTLfW1V{NC zvI!4XhPG`DDk4acd2N&1y->A+ruXH8 zWlD!vPXJ>Pu*PmDuCzu>X6VD`Ys&|0&Z33Y2| z$PsKYEM7R6gxOJw%kGKgcFMqY-=T?0vUV+EG@%ImV3xMAJj}iR*9ljvubEpmX+t{L z{avK8mqv!dPy3l6Bj&}tBPETzp1UU2DHho;S1afuG}+MZ1Dd8Etg;0Oeb+N|GEwAj z4_=yqP1jSU>pCh~%p2ZG2h3Re1bPAjoKVU=C3x!l^Jnlo42xMiQD?wGIZZcD{W1$h z^GzES#d;oj1e-`2ykc)bN>EGzAaax8P$z5Bk4 zjk>e0SP&Hya=>UMylfzIk%vWRUl+At?2@Buta3+lzvSQ|O1lH0#bZz7GcZ8!!&LQQ zRcGx+&M0#|czXF=R`Al;^WiM&$OvH=0fKGq{6+|+AB9=5 znZSBdKr|W?u||R1rt%Jt`|!rZ@b$7U7Tilld)Ph<-^sXe8+ z%O#-U7ZdzKqY}7TD#tqkbXly`7Z$@+Z3VBzfv&a!CpoyRvCG~L!MOz8snTcg)`Y+~ z>MQGG4>Ovg8v5&V)~|6R;blyrtky<6NS|1<+bLy}aAHE-3;`AIAN6epT4dF<7e}Zh}B6e0pnNZ#yPVAvIQ7achJ-`N1TZfD_elc9e5g7~Sd4h&y z4hopKrR+N3p{)|%Z>42}MaC3!{#8e4&gU8N$$ojvB<7{(tkk7jBo*3fW*brY#>XA{ zoyHZ zN$!2;tg*g4gTCth6{pMpz>J7Zpp<17$W#83)@=u@A@xDyO#`#B^MqO}I8C{eqQi%)HzxR%nLBQ0yOukcXm=z0b`%c~;cf_x4^_3!mXy=P5{=_az z_-6+F1p9f*vjeo9rVQl@B>IfeK59y)O(BI~pq;YIf><9;r&P=|#{1xH57CD2cAS#UowZ=t=dk<*on_b{)<;`YqKt%S#bz4Bwn#~r8-z&q?&!TK zFryW!RkTx$$An5%qu%`{gcGtM_CWxyh!s*!_svl0#pGLS4oudW2S#{S?Ls%483F{w z&+d!6R92c3Li~2NLIA9XpU#G{As=4JCa;sNrrXdX5B-Ast40M)Gp07^w-O;wg-B56 zCL<%q%+eC=+q)|7+OOV4odZhp5Z6~$fPf7ce@Rz+u1+LLgtrt7?A?48gH$UobtH46 zN^5kVi>Eo0@FhH@t@16Z$iF5S7Fjc(Amv|nMUNVvAfMS_kFj~r4d*337~)qh>?w-g z-G&*+v_cm$Z9@!Eyi4p9<#dueNR|naM8p=eL#CZ9{W1gbVy+pMno@WbWHY@Z1dQHP z6rEHtMTK71(*7*7^B62>DX6wCBNOV$3ZlGeR?9 zP1I9Zp&6RJ0eAeHK6lOLm^fAVlyZ;x6J{mmql!_%teFrj>0w6omegzIWBRbW#wSYs zkXSjBA=AlU(o*62pkOY_hMhLiZ=W+w3$fjT#4C@Jo`*0)!y}l?utU>!oPiMc>p!s3 zSD}**cX>-D)Tez04`BON-*+GuYQIm99kxxdLrnS-HhwhMP<419l~7SBAMya5NC8mt zlSiml`2~6VV_t^Rt%n*0CWmDjLs$i;W(o2eO9Qdi(09T06dHnNOv!^VD7Rni?8+KC z37vXVk7lT$PzLts!NL&X^#Gur&P1H?MQZ&Y7t&_UFhj|8!VFiBZ-5aMs_!6vk^0QtA0Ir2fdQ{1_-z~2AetUF*?D$D-irkUdLLu7=$l+fcQ;_@X!(q&OGZ~2PXgc z%uQ8jX&tc=iCGf^By2zR7NVc!*U{KAY1SCUtJHNk&Ezcs)b4i<>_-efBdQ(f>l!@V zZ%Y!@e8L9?gx;saT{*o1nJ0nv)X7qQ>y2dn4*IVmW4&STDx>aVUawgI53Ah13bc&L zqL8TG+^q6&}9dJ1FtaB8Wc1kA+M&=|D7!siv9>!rp7NmSqTy zUOaLMAwq#FlFDmR&AXvjuHI4X_+@{v-2hdE+F%$%9i_`I3RIy7*827^ET+GSVliiI z+Unp;p&US1C=}9XOe(ABUk$HEokk07E9-WbciQ#PjbnqF)dw|=+brP2Hb=bKxjy3Y zDN0~DlPyod-D@+kwwmIZJe~9Q#W?nTgb|N-B5hZk*?=z_2vh_lta!d6h1PLj>d^K* zqtrYZDR<5Y1Ggf&TNQmOn8$ra+%koYV=X>CS=!B0UAR41mzqYYNTiz{ z8c%$CaN?O&Q5ptF*q}#k1Ztg?5qksi6BTr`MKG-Bf%T>cAHY9ho8m3!>DhIA@(aXw zX9lEJBMzRt@g4_Kli6!?4X-Fs*lDGsNnJ(T&zB)97w2Qw!#}%Y9bPqzxMP!Vzmh?) z9Fobc$NOJWHSsIsfBtfo@k5+{%Eo^%>TTbbGy_$%$jNJwvD(~T9JdL_@QR0AnG|ys zh;)1(Kj6z9w~*YTy|mV;x(2X_DIIoRSjZdBKASVIy0U#e@kOC(d*B8lGCYX6v0FCy zYelBmz$0Kf>IgH=0uJ}kb(41PjZM~Qoj{;d2?)Uyqm$4fYzCml@w()h?ihq5*rYZR zr<|gJoI&O`!_rAqY3dpMLBWn5N8Sf4wlQjc5DPPqARkdnV-AM%6RG z)H1s3O*Zo7Xasi8OzjwDubFp+{Huzn>M6ZJgYjxtj9XE}rv!hTQI_Wdq~g0}B-Quo zi*MV;usE3YNh}Pn3>R*kE%D^qeiD#dN+oCwYkqpQQ5P>qBD#L2Tm&*su;hsy5sGpm2dSu0m?RdNJ+FU$z7T4 z7?fG5^rQZhmAk4`{eHUJtTjnW-vC>2SH!?coAt?HmIp0-^;fNl^kSaKpZBFB4s>Dp)-TyRZYO@o!X*9=pF*9@t;(gxj%A>I5ub4 zinn&`ex)7=%Jrw-~qmEow1Wp)#u3L)l~9}8udN2UlwIzMNy$R9W@ zB3D1)>&n?Wo-c6Z192s36%3D%2N^mtdDMZ1jmE;$bW6;mIi;7==tv6!hPZen#{&xj z6x0USLHu7!p)+oP^PgGv?Xd#@P(nT471ges`L8yQ0{@ia{D;O77ACiFGzXIbNL)Mu|GgAPtPz(9 zi}!Cal|KmsZ~zO0R{#JT5dQ6E@JCbtY)wdr3(_n2n@UOb_Gwl$t3^}#l;Dt@D^tT*6QgxtxIDDF4g1j4HJtNt!&tnBH}I^TAc9*+1J-f zH8@|3qUsY`3hagL=_KFJI2m?Jr|t|NNS)Qy^;A{&ypirdam1-H%71xzJln4}PkXc} zDPFiem#>^{^Tiom)fQ{&oYu}4!htz`UkCL6IdQ~Lp76qtWt;`RMa`{+^8YLZrrH2UJ)DAOiM*>NT1|xH8$lwx3G%o`=i%W0kmy zpO2m*m$uy28MIZKNbT>l_?wUT+7-5mpoEltz23sArkZ18>$luA*LSSqr2OH;ny~5 zy9UJZSa5CAXL160tXHCQkMigqdg~cp$!f9WDASOS(FgdSm!n63S{I)dwrkrq1Zwhz zjC8F!CVfVqiq=@p(x`h#G)v!}9mn%6S@q^J6u>ckL~@W+i%Gj4)TwQKYF6%rsV0U4 z8o>6*eOP$g_+5KM`^I4ZWOqeGC)}zloELaoJoZ)X&0=?@!G-zU@}mvrD?|23WqnJY zQ%sRAz;>&=kKrqX0_2MKlHgK`Z;_=w0JegkIZdyt1bdaReq&*jbJX)l(_?gqXc6)| zu|8;!>X`pBMxXX=!OMb7-tB2)n$5i|9M6{ub;)DfS4&MTVSg7PF-tz7R4c=g8#AE3 zh8L$3U3dMjpAifmgJG@9Wby*KT@Eo4OONi`#({HWw(H?ad&0ZX2BBH$wC;!>BzI{< z)iwjvlX?(-KFRZu(HJAgX1}bP0*bFT(pA&SCJ1~p|{S< zw_elVd=KK7fiWIaow>Ps!C}kAL+w`E5UTkwTg+s05i=YtLo3tgm2lNFDL;Q|XyAN#GT z)w_0(?k8bo+$?LVM1LcFcVQ{;F%wDQ3+wR@+`Q?11x#gs)B@I~=hw!D+WPpD(HQ|u zdVhFrR0-rF*ZkPW<#co*&UV63S$IDGEkMYXRsU%Ck?%sgh)(S7>p;E~pE-Ls`!OSD zB|7QpFJ}a}8~SK7z43?>0ygu3Wo?@qt23M6Z(%>)s#ip}nbgL#H-viQ`5EK0Xc0l4>+-P`9lY|Nu_g( zqqTl5O!ysBB32CuwPdh?p3$)1tL`W1feegNI=j^K_={+t{y)HRjZklbbs}YCc=_1NAgZUivabEPjkV zilt2P!P7^^gLb5Go}@Dob!>x`EFn!;V1WPzJRl(+WdI?}5EjDHOO?Cuny+*+* zgG+22vZmC6tyM&8Kk@BBp%b%lljtkJkL6~()({g7=+bG?l{4xKe8Vk2Ck}Ys=u(Bq z<$eb;rFVu2PK|L0os<+5HUF<^k@reIs6fvH^kGi_2Z4tE`%4)X z7)U}jpC8>!n0a%NoYyK&iGKd2L=(@s)Xz^gEL-D;&7q_H2!b#krS5`5-uCJ46#IeN z_8429>kbB9_Kc1n`kdd`2Fb#3RxCupJkIypO38IT_5FPuBe|z{2>W z)O>dtEH4;YKLb$2Z96i?Bza<34h1=0g%vu+f>*#&F zc^+&*6Mv-gc^v@z}SoHw$Kn4uxxkbAGk;+8_3C|1dE$Zi57;2<8IgdJSBHMTS_|#NZ7#V1vA z7k~-{A$_Y-MajA7UKKLHQC5M9C)9-z$S$?n+i)bN$v}MANj1IQ?(pW=aoG;@J%C9c zrCfd1N$R#0wlnkGG(nUuW^g5Xx})z-10_ZD5tJcyWeRi6!2M0{DHbAEFF__1@r6B8 zQk9yLA3kT^GQ`l$Dzdn6o6Q8mS!eP^ab%mGUMUJFIMX(2uOn7n=-^adf4dlneN@Q?Q+kksLM>m67$HB)9wwA1zFH(h!rX$HsfbO$ z_1cnTYstAdURxF;QA2Kz5pgZyMj4M)8H(SiCvD;QVMHwu_0ydR`*2e2w2G zP8d7A$0V!~F`==K)(S4TM&F1qqxB)d~rAHCMJQ-4trc#1BJ_^ z8Mk>th0OQl&9MksJ5$wCS)#JI=ug&)Nd zPLKH$6?uk1xcTlyhZRX?6;kQSRfw%&X|Rx?h3mI;Evch-+a(c|hlg@N_v4YIAF0{@ z_~pwN>spzM(A;PjV=wnJJ!R8?qn$Zo3@mooa^YX}A#oaWK~DMQK;vwq)HbubaVITN zl0ZMv;gCH~6hUkGHH!sL3=4{!k8+#?XAeVB?0Tp%bKynVhHJKy-tJn4)WP;QKaM+CWd&23XT4y!Ov4tGi%1pdi9)sU! zwvwf^zWIm$bXbz!eJiI>*nzM2c7kN=u`hB;e&o$N`h+x&uhS^u}7N1T`QT_iZm6HpXG#K9(GI%??7^wQ-Wj zh3V$JS=FE2AK)bnQqQ#)hcA1fEu)b!C7W(~k<^-xX=1s*IK)(b;3%_v)&IE^CHBz_ zQ{m!+)F2t+^2kJ&5O4f$3iK`#i2kScri^|_&FX9W+G8DKPkT3Cc27h=jL%JVp_1v8 zMDOrp1trO*y^$PH;^S;sr*;6}!Ix^E`;A$ek671&iagd3o0*(%h$&h^FCgnWSsuLZ zsPn#s$enQ%xNw!Cc@Up9^gXYL?A(0&e7gdK?7v~5`cG4Z0I2cre7wN_kdGJmS3dr~ z9OQV}|6B4L{PthTbC3GJELp%e9N_eOGx!FYM}QwRRu2&T`vR^3Aoy1p(hwR8q}2dm z`0Hj{1Kf>~+5o@@NxNYG{y;ww*fegw0c;vK2!8a}OO2k$SRl+s06q>c`(MQXf1KjL zQ;0MI7(fn@;Pcd9<~IL(`uNYJFgG|W%*+1U{tn!{@jtY3{Bvyk^GNrvL^B`Q(M8~Q z+WEJK3+NLv9yt^*I|y=E8ykw98x)MF#Q^+-Ki;$^d6`%5yicty6_fsDgky_YBV5H8 z4SSninNS4TeB63`a`*Ju!CZHSjbCM4D(e{h=io~K^ys?QuFvaU7WR4NMAGg6(U~-@ ze%BH!=;k*lwK;+fY+X&S{+2_2qvmv8W^>TJVgJ7O>HFbFBB|sbt|XSzUHRTkhQO}i zAHL160Z%VKK#chx;>4B1ok=nLx>mYPOPbvz_QUB)yx4la`FB~goS`t?Ub8n?2a}Oc zW4#{&PbzD*Tz4&&!K~MzdLR`zogLH4P+e%7{Ynu4+=uHpgvJry_+Fh?DwtvNtvKsYQ#%hxNYy6?W+OneDE zsye`x4jxs@K}0hRs|1O^F~LEL;E)@PO8| zjP77%zGTRA28)#|sc!;+ay=rJt9yfh-o15QPgVsjKHBLU0hpJb(eDE( zD);qqNCb-)$ws>xWf-oFLuLUlUPKq5DDMZF!>6YfD}+`xmlUMwcuGrX2bv+46Ve)j_n?u#eOsj$G$Dnh z6gY<9yOqqY5l508b*%jv(@8p)GAxFq<4eH%je;Ev^ZVO#F@6X>E?~N&dh6KG1`VRe zQi63AeL{}ymPkZIaHv+zau-C^Pp^3rnBso-Zuu+P)++?KL;{qhn*K9fOw6bxEApd= z3pC|Dy^JDph0K)QRHCPepB}kl6+{G1tEhEDH&H*42eeSvi$g7O2bi5bE7XbCi^bMd zEjz#51}I-4TUMZnp#Xy=MUKkYySZDQFTQ*Y!rXF@;pWUfYYU8bMtB%L_U2BJE!}$l zyd#gvluNvjN!7kHRmuuaj%M} zH2t#7WLOZAVq()qYLeayj~+r^&S1Th1b4>8+tc1fJQa5&)dSs>OOvHsGv%fY%MC2M z^);yYpP$Ipy6SR6*vN^OtTohspm=U>W_@RyiCRf=CuY6>K3Yfk17AunV zsq9USIulm&O!6bA31&gn*|QR2u#XVgAPCADbjk36V2Hqy+iD0j{W^oo2B--B5>l>? zdRf7mdY!TdJO+k{fAtutm2BNK_L-Xr-YPE>TrRR{bKbx;uOc+e?{4LNzdWP@=Pc<% zu6O3AT33gGdOlB@98*`TUAGQ%C$agqOIf4^8V)9HRbI+M5|ct@rC@T_bP_lZ5#c3i zH`@Qbg_>S&b~S-QPc~N*9;K;V@%D3ND!~)YCqIKeh067Nxw($HRQDJ>{%8+Huj158kRH7g*avio2w5QIu+cYO4Q6)fxnz^j4 z{)svAi!nOzIb{aI?Qn&otpgs;0L|zt**ej;$q>bP{F!+jqn!m?&YuIdUufQ0Zkc3i zs{a(o%K5gINjvjE&oPXW;`;GjYyLd=%t-&PNsC!eP(lsHI+I}g6!Jv!IafBJ->k$fl&55bg7)+`B;MSaa8!(Q;A{SiU~ z;TII$;$hTOCo;i^&m23#n|LdsojeqTsEs75nDUpt=1(J+cKXpY@CT-Yt~)5m9UsJ~ z4%Hb`H-H5MmrGA}^$tDVtsN{1u06d%l$rx%;=<@-$F6=}#>O)iH@OA7iEjJ`wR#iy ze27$spg@@YWQ_uaeXI49t5V5<^=BPQjE`R286M<5?o~u=+?^h`<(mHD^~|Y02=l1d zwjp*~`85#NDPevMV!nBjVXzIj=B+$CnUEwDAAx){0=sAc!Z><(Z2k1g@-i_mK~l?F zzkwpzLmr-psE$FU^N?a}mECMpa$X6kR{l%bP2JRhtl<9Y_nQsv{M$7JmWf=9DLW8t zHPME|`qe2H9gHf|aB&3Nm1IdC>T9A{wEf2o;{;KTY?0T>8isLq4i;72>DPsL3~7Q} zxj^T666GnGqn@Ki%GL`!2#XKoM+u+pyus?Fxt5QlX6@M_ligUIu-vh458%=c#F1JH zZqfsC@=@gdj#Mc}mNI(wzZ^5b&|YIhWo&WdnTOyu)FH+2PP9Qi9LBkZ7KDVo7dO6L zts7PGQ8h&R7LfOtpxP+cl)sq*}XdO(>2U`_I@0F+S`v=CAq2; z{Szxc2@n60Ha-0%@%T?O^;Oa{=JRS9TNGziwja$im5XO~4nENaP$88w^*X+5M?_B$ zm)01VKWFbBP7LO9e?qe!FL^K3Wi>G}&o4T;3q^biHj^{1EV|e{y4GO4WSaE(X8Q{< z`}_kCqNi2c?Kh8JSPVsl2ZkU2y*%$P;NV9H77zQ)p@XWTunA%QDoF&1l|x~Jw(4*R zF*yDW!G6ayx&Q>2ykLCtCq()k{O~*Y7i<4t@zd|%*WbZ^Q}n-s7~Ovl`)}m+JE-zI z_;2d{cQEmH@ZZe)@8EPd03W>Czjol?3&H`RegZ?nCc0e0$ioh~QhDX)dA6%zf7rM@!UFO4lX zy^1Xs0{%RmdoQvH`-(lMyiSc6j6xCccs27rpBH^n69AKNy|K?Ir)JgM@$13DZDzI} zJ-Z%VLBu2QwZ+H(`57x%;!vdfv7uv4$Ug9~Ma+mVkN9#oSDsc;JN=YVcB4<9>!MER z2w2A3xof7he`Tz25>Xj--NN?S6(=IuZFZwax9)j}0e|+Srr_i3xNY#KR*Q1j<#QhB zWTM2Z^YO2I%Hg%g__j@h3N*+TEUDp=`j$8n-ZZX8Tg;WkYhNJ(G}PYTrvK=>%*F%T zk(N;Rr*)(4PY2u(qb!|7U@C9gIdgoJoyLc#u zbz_503YWfPm%OOu9%6$0c%tQ$?YX{) z!omun#CuYhcw$)i5_;mC4-+7!eQtP%HiJ~nmaK>AUXQhP`SxKf88j-sFqO;A+Xv@! z+RCP=dKz641d-;@ZAk$pq13~sdYCh&pys)cj$A7$p4U9j7U&Lf4EanHb3EM|)-6gb zlnqN;#z{y4QqnwChhrbKiLJ2ujJbe08vDJ=MimVUZ(JAN;CvirCOH+ksU6)05Nx+O zKCGR5du&>Oe-|ehn~zGh;$7Ub=e%#<_lK8#Tona1Ph5s)>Cu{7&a$4eit{+zn%L@ENzr%k_GIH_~8yRrX9 zt02+eoy<| zbU5Tisi`C_vdIyI*!TqF?iqyf1e%R4*GvL61b-IE z42E}wp}2rK{mqvq_8++@tf$HEG((~~x5A-93Y;c=N9RE4o`M|_8WzFUz)O}07WJJF ziso}g=jbRo+5yYL4OQCEBr~25y#P@KBlEoW&hpTHOeP@nMDmZsPj#8*qqqkoo`G`*`C|!o(Yf!p(t&L}VwsH<~eqsE=px*RG;P8wZ zdLs#yydq)cf?Xk9Yjut>1C+4R7Zl+w;!L^}WK?R4Ge8O-RDm=Gf5&`XT_=;<+29P*7Qku+Y>5k?jSF-Im^Zxb4ek1OkId^GA3EdX7xxczGE+oVoj)g zhme9r_~>ALZjU-3O(UDjl4Jv8=PsACKO5)CIsGtqVu)Pz@j;(-2sr&#>$*2!dwhPY zoVIMvC#ht+8^4ghHJ7|ZB^}LJH;?Z{g$c5+2Eq(Eq5V|XbH5$08)^P{g zrp!ocis2@Cg?+l&UWT)9k1La-ltTQ8mk;IyW(Cr-XHomOSEPfbtzGtKIYYULN>%X=MXCA4h zv0oCnhKsqR7Bfv}@E zmvmV!2+woV{uq)noMC_;+0vu7I(C9L#q=7J%bfL*)ev|-;e2M|!b@T0#K=>hV=%!X z`6e3UJHZ|$^uFwN3Xg2(*6zb1B?Gpr53*WMb~}c(u2|PCgssJl{KH3Dew(Vz=5;f- zB!#q3XF=m}X_LN;c_1f7c5(GpzvU7?34y$)1nmb`?k}H}){t|B+n-OMX*r=_C!dc4 z-VebSRB;2BghO%>EYR8T2u&y1i^jzrhlBbmTTCIvXc$tNu=kvU&5)zD5DM! zpRQ4?87}l=11n~`PsI(W8j$jCXdzBc#oOXWoQNww;}5b{G803ga2n2?n7+8t)Zs-U(k}1y95ioN=h@m+J$s&OUG(u9 zH`ReLgiX&SP~z(%em9DEx2kv3v#+FRDgnIP;imPZV9-L!{XBDTHU5i`kNH%bRO
0bpJHh{8uuM^WS(742L-I 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 z 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
jc4tZd{+J!Kq?5=Z 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

JCBx0Mj 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

0@= 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

ZRSHJkF3yyFo$P8{JiQEo*}w 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%0D40~Mm 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

IpMTyPu> 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�QC5yur(k6r{IaFe;ae;0HL5$jBLrXHr=4u8hu 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�J&nJKDDMQemxlF##oN@fA{iC!<5|!%2w1J556L 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

JU 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�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