Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive...

22
Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience

Transcript of Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive...

Page 1: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Effective Programming Tips for Cogent

Session 10, 27.3.2008

Christian Kaul

MATLAB for Cognitive Neuroscience

Page 2: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

A collection of useful things

• Effective programming– Why does Peter only need 30 lines to achieve the same

than I do with 300 lines?– Readability & Reusability

• A few exemplary pieces of code (to reuse)– Handling files– Peripheral devices with Cogent

Page 3: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Effective programming

Page 4: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Effective programming

• Why is it called a programming language?

– Matlab is a very powerful programming language with which you can achieve nearly everything you ever want on a PC.

• important to understand its grammar & using it• Important to constantly learn new vocabulary &

grammar• Important to use your language understandable

Page 5: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Effective programming - Modelling

• Do you know what you want? The Modelling step!• Modeling = drawing a flowchart listing the steps

we want to achieve. Defining a model first makes it easier to break up a task into discrete, simple pieces. We can then focus more easily on the smaller parts of a system and then understand the "big picture“. Hence, the reasons behind modeling can be summed up in two words:

– Readability

– Reusability

Page 6: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Effective programming - Modelling

• Readability brings clarity — ease of understanding. Understanding a system is the first step in either building or enhancing it. It makes it easy to document.

• Reusability After a system has been modeled to make it easy to understand, we tend to identify similarities or redundancy in the smaller steps involved.

Page 7: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

• avoiding lists:

– Many lists can be avoided.– Lists clutter your code and make it hard to read.– Therefore: – Consider the use of matrices & loops whenever(!) you

see a list. – If you really need a list have it in a separate

file/function, it’s likely you can then reuse it in another script.

Effective programming – the most important

Page 8: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

• sounding variables, – Call your variables names that tell you what they stand

for. – A script with variables i, j, a, f1, etc. becomes very hard

to understand. – Define & assign your variables ONLY at the beginning

of your script. – Never “hard code” numbers and values inside the main

body of your script.

Effective programming – the most important

Page 9: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

• loop structures, – Whenever you find a line of code inside a loop that

does not contain a variable used in that loop put it outside the loop immediately.

– This way any loop or nested loops remain small and readable.

– Use CTRL-i to automatically indent your script and your loops for better readability.

Effective programming – the most important

Page 10: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

• control variables, – To switch things on/off – To switch between conditions – control variables help you to keep your script flexible

and are a good tool to avoid hard-coding data in your code.

– Define control variables at the very beginning of your script

– Give them sounding name to increase readablity

Effective programming – the most important

Page 11: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

• commenting,– Comment your script WHILE you write it. – It will take you twice the time one day after, four times

the time one month later– Group your comments neatly away to a common indent,

this way you avoid “cluttering” your code and ensure readability.

– Have a short explanatory commented out section at the beginning of your script. Explain in simple terms what you code is doing there.

Effective programming – the most important

Page 12: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

handling files

Page 13: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

handling files

• Everybody knows the endless boredom of copying loads of files from one into the other directory for many subjects, runs, etc.

• Why not have it done automatically! – Example: sorting raw fMRI data– File: sort_raw_fMRI_data

Page 14: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

handling files• Saving data & results within your stimulus script

– outputPath = 'c:\home\ckaul\';– cd(outputPath);– subjectname= input('Please enter subject name: ','s');– subjectnum=input('Please enter subject run number: ');– subjectnamerun=[subjectname, int2str(subjectnum)];– filename=[subjectnamerun, 'AttentionChoice_behav_res']; % data file name (one per trial)– datafilename=[subjectnamerun, '_AttentionChoice_behav_data.mat']; % results file name (one per scipt execution)– if exist(filename,'file')– error('Results file already exists!');– end

– For trial = 1:NoOfTrials – % script main body here– Datafilename = [datafilename int2str(trial) ‘.mat’];– save(datafilename, 'data'); % save data(!) after EACH trial– End % trial– Clear data % clear data after saving, no memory-overflow

– % with all data at hand calculate behavioural results(!) at the end of your script – – For trial = 1:NoOfTrials– eval(['load ' datafilename]);– end

– final.result=[results.mean_p_hits results.mean_N_false_alarms results.mean_RTs];– eval(['save ' filename ' results data vectors final']);

Page 15: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

handling files

• Selecting many files with SPM-select– Many SPM functions require long long list of filenames as

input. This can be vary tedious to program.– The SPM-select function helps!

– for run = 1 : runs– % define epi files in the run– epiDir = [origDir '\s' int2str(subjNo) '\' dataFolder int2str(run)];– % select scans and assign to all_files– f = spm_select('List', epiDir, ['^' subjects{s0,4} '.*\.img$']);– % add folder name to filenames– fs = cellstr([repmat([epiDir '\'],size(f,1),1) f]); – % clear temporary variables for

next run– f = []; fs = [];– end

Page 16: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Peripheral devices

Page 17: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Peripheral devices

• Cogent has very easy-to-use functions that allow handling all kinds of peripheral devices on– Parallel ports– Serial ports– USB ports

Page 18: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Peripheral devices – examples

• VETcontrol.m

• Written by Elliot Freeman to • Control the eyetracker system in room 101.

• uses simple command strings to operate the

eyetracker.

Page 19: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Peripheral devices – examples

• fMRI Scanner environment, controlling the scanner with your stimulus script

• Additionally you might want to control the eyetracker within the scanner in the same script.

• Important Cogent-functions:– getslice, Waitslice, – get_current_slice, get_current_volume– waitserialbite– cgTracker

Page 20: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Peripheral devices – examples

• set_parallel_port.m• Download “startportb.m” und “outportb.m” at featherstobe • For more detailed information please email me or Christian Ruff.

• function set_parallel_port(action,pattern)% pattern is an 8-bit binary string, e.g. '01010101'

switch action    case 'initialise'        startportb(888); wait(20);        outportb(888, 0);    case 'set'        outportb(888, bin2dec(pattern)); % set pins        wait(10)        outportb(888, 0); % set pinsend

return;

Page 21: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.
Page 22: Effective Programming Tips for Cogent Session 10, 27.3.2008 Christian Kaul MATLAB for Cognitive Neuroscience.

Thank you…