<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Dear Mailing List,</div><div><br></div><div>I am currently trying to use the ft_dipolefitting function to localize the source of a visually evoked response, and to use the dipole time-course to test for effects in source space. Along the way, however, a few questions and problems arose, which I was not yet able to solve despite excessive trying, reading and googling. Some of the questions are technical, others are more general. Please note that I am new to fieldtrip and source localization, so please excuse the potentially stupid ones.</div><div><br></div><div>The general setup is that we have collected data using a CTF275 system, looking at visually evoked responses (we are showing drawings of faces). The data is cleaned already and we have a structural MRI scan for every subject, which we can use for individual headmodels (I use singleshell, and the models look perfectly fine). As every trial also contained a button-press I first fitted dipoles locked to this button-press as a sanity check. This worked nicely for all subjects. However, I am now looking into the visually evoked responses. This has given me a lot of trouble (see below).</div><div><br></div><div>Here is the code I use for the actual fit:</div><div><br></div><div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg=[];</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.numdipoles =2;</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.symmetry = 'y'; %I use this, as I expect bilateral visual activations</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.latency = [.1 .12];</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.vol = subvol_singleshell; %volume conduction model for the subject</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.model = 'regional';</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">[source] = ft_dipolefitting(cfg, ERF_all);</span></font></div></div><div><br></div><div><br></div><div>Question 1: Dipole Time Courses</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>To look at the individual time-courses of the dipoles I follow <a href="http://mailman.science.ru.nl/pipermail/fieldtrip/2011-April/003690.html">http://mailman.science.ru.nl/pipermail/fieldtrip/2011-April/003690.html</a> and <a href="http://mailman.science.ru.nl/pipermail/fieldtrip/2012-May/005215.html">http://mailman.science.ru.nl/pipermail/fieldtrip/2012-May/005215.html</a>. The returned dipole information in dip.pos is 2x3 (two dipoles, three dimensions), so I can easily pick the position of each of the two dipoles. The dip.mom, however has size 6x13. Is it correct that the first three values of source.dip.mom correspond to the first dipole, and 4:6 to the second dipole? That is, to show the two activations, can I do the following?</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">dip_select=1;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">dip = source.dip.pos(dip_select,:);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">[u,s,v] = svd(source.dip.mom((1:3)+(dip_select-1)*3,:));</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><span class="Apple-style-span" style="background-color: transparent; "><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">[vol, grad] = ft_prepare_vol_sens(</span><span class="Apple-style-span" style="background-color: transparent;">subvol_singleshell</span><span class="Apple-style-span" style="background-color: transparent; ">, ERF_all.grad, 'channel', ERF_all.label);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">L <span class="Apple-tab-span" style="white-space:pre">                        </span>= ft_compute_leadfield(dip, grad,vol,'reducerank',2); % leadfield</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">Li <span class="Apple-tab-span" style="white-space:pre">                        </span>= pinv(L); % pseudoinverse of L</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><span class="Apple-style-span" style="background-color: transparent; "><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">%check which orientation the dipole is in</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">orientation_vector = u(:,1)';</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">Qn <span class="Apple-tab-span" style="white-space:pre">                        </span>= double(orientation_vector/norm(orientation_vector)); % normed orientation vector</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">Qn <span class="Apple-tab-span" style="white-space:pre">                       </span>= repmat(Qn,length(Li),1)'; % make Qn the same size as Li</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">W <span class="Apple-tab-span" style="white-space:pre">            </span> <span class="Apple-tab-span" style="white-space:pre">   </span>= dot(Li,Qn)'; % weights for projection to source space</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-style-span" style="background-color: transparent; ">waveform <span class="Apple-tab-span" style="white-space:pre">    </span>        = dot(ERF_all.avg,repmat(W,1,size(ERF_all.avg,2))); % source waveform</span></div></div><div><br></div><div>Given this is correct, I noticed in the resulting waveforms that only one of the two dipoles shows a clear activation, whereas the other seems to cover mostly remaining noise. However, based on the perfectly symmetric topography of the activation and given this is a visual response (the M100), I would expect both hemispheres (and therefore both dipoles) to be activated. In fitting the dipole location and moment, is there some sort of regularization, which prefers one strong dipole over two equally active dipoles? Any ideas on this?</div><div><br></div><div><br></div><div>Question 2: ICA topographies as basis for the fit</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>Given I had quite some problems with the reliability of the fits when using the sensor data, I also tried fitting the dipoles to selected ICA components (namely the ones which explain most of the variance across sensors at a given time-point, the comp structure is given as is from ft_componentanalysis). This, however, lead to the following warning/error:</div><div><br></div><div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg=[];</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.numdipoles =1;</span></font></div><div><span class="Apple-style-span" style="font-family: Menlo; font-size: 11px; ">cfg.component = [17];</span></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.vol = subvol_singleshell;%volume conduction model</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">cfg.model = 'regional';</span></font></div><div><span class="Apple-style-span" style="font-family: Menlo; font-size: 11px; "><br></span></div><div><span class="Apple-style-span" style="font-family: Menlo; font-size: 11px; ">[source] = ft_dipolefitting(cfg, comp);</span></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">the input is component data with 271 components and 271 original channels</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">using headmodel specified in the configuration</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">using gradiometers specified in the data</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">computing surface normals</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">selected 0 channels</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">selected 1 topographies</span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="background-color: transparent; font-size: 11px;">Warning: not enough channels to perform a dipole fit </span></font></div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="font-size: 11px;"><br></span></font></div></div><div>I am sure this is a simple mistake, but could not yet successfully solve it. Could it have to do with the fact that the comp structure has a comp.topolabel the original sensor labels, and as comp.label the ICA labels ('runica001' ..)?</div><div><font class="Apple-style-span" face="Menlo"><span class="Apple-style-span" style="font-size: 11px;"><br></span></font></div><div><br></div><div>Question 3: Sensor Averaging</div><div><div><span class="Apple-tab-span" style="white-space:pre">   </span>Since all else failed, I wanted to use the average gradient position across subjects together with the MNI standard brain to find the dipoles based on the Grand Average activation. Here, I would like to use the ft_average_sens function. However, I have the problem that different subjects were recorded with slightly different numbers of sensors (some with 271 sensors, some with 273). Because of this, the ft_average_sens function throws an error. Is there a way to select a subset of sensors from the grad structure such that I only use the sensors which were present for all subjects?</div></div><div><br></div><div><br></div><div><div>Question 4: Stability of the Fit</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>The toughest and most general question at last: I noticed that the solutions I get from ft_dipolefitting are not very robust. For instance, I get vastly different dipole locations with only subtle changes in the selected time-points. Moreover, although subjects show a clear M100 in sensor space, the dipole locations for some of them are extremely far off (if not to say in the middle of nowhere). Are there certain methods, tricks or tutorials I can look into to get things more robust?</div><div><br></div></div><div><div><br></div></div><div>I am truly sorry to have so many questions, but any help is highly appreciated! I look very much forward to hearing from you</div><div><br></div><div>Tim</div><div><br></div><div><br></div></body></html>