Back to the main page.
Bug 2800 - Wrong electrode projection in ft_prepare_vol_sens
Status | CLOSED FIXED |
Reported | 2015-01-06 13:30:00 +0100 |
Modified | 2015-07-15 13:31:26 +0200 |
Product: | FieldTrip |
Component: | forward |
Version: | unspecified |
Hardware: | PC |
Operating System: | Windows |
Importance: | P5 major |
Assigned to: | Jan-Mathijs Schoffelen |
URL: | |
Tags: | |
Depends on: | |
Blocks: | |
See also: |
Vladimir Litvak - 2015-01-06 13:30:41 +0100
Created attachment 688 Test script I noticed that after ft_prepare_vol_sens electrode locations are wrong and some are projected to the bottom of the head. This didn't happen before on the same example. Please check ASAP as this would completely distort the results. Test data at ftp://ftp.fil.ion.ucl.ac.uk/in/bug_test.mat Vladimir
Robert Oostenveld - 2015-01-07 17:03:00 +0100
*** Bug 2803 has been marked as a duplicate of this bug. ***
Jan-Mathijs Schoffelen - 2015-01-12 12:11:55 +0100
The call to project_elec on line 436 in prepare_vol_sens screws up the electrode positions (in other words the projection onto the skin fails).
Jan-Mathijs Schoffelen - 2015-01-12 12:19:13 +0100
Allow me to fix this ;-) (because it's likely my bad...)
Jan-Mathijs Schoffelen - 2015-01-12 12:59:06 +0100
I identified the culprit: ptriprojn (called on line 43 of project_elec) returns a signed distance. To get the index to the closest triangle on line 45, one should evaluate the abs(dist). I will change this...after today's FT meeting :-).
Jan-Mathijs Schoffelen - 2015-01-12 15:40:35 +0100
[jansch@mentat003 private]$ svn diff project_elec.m Index: project_elec.m =================================================================== --- project_elec.m (revision 10093) +++ project_elec.m (working copy) @@ -42,7 +42,7 @@ for i=1:Nelc [proj,dist] = ptriprojn(pnt(tri(:,1),:), pnt(tri(:,2),:), pnt(tri(:,3),:), elc(i,:), 1); - [mindist, minindx] = min(dist); + [mindist, minindx] = min(abs(dist)); [la, mu] = lmoutr(pnt(tri(minindx,1),:), pnt(tri(minindx,2),:), pnt(tri(minindx,3),:), proj(minindx,:)); smallest_dist = dist(minindx); smallest_tri = minindx; [jansch@mentat003 private]$ svn commit -m "bugfix - identify closest point using the abs of the distance" project_elec.m ../test/test_bug2800.m Sending private/project_elec.m Adding test/test_bug2800.m Transmitting file data .. Committed revision 10094. I traced the change back to an update of lmoutrn on Dec 15, 2014 r10043. @natalia: probably your results are not affected, unless you have re-computed them over the Christmas holidays :-) TODO: write an e-mail to the discussion list
Vladimir Litvak - 2015-01-12 15:44:01 +0100
Good that the bug was only there for a short time mostly overlapping with holidays. That was exactly the window for it to make it into our Aston workshop version but luckily we only showed MEG examples there ;-) Thanks for the excellent detective work! Vladimir
Luis - 2015-01-12 15:50:30 +0100
Wouldn't be better to change the output of ptriprojn inside the function. After all distances should always be positive, right?
Jan-Mathijs Schoffelen - 2015-01-12 15:56:36 +0100
@Luis, the signed distance is intentional, because it gives information (or is intended to do so :-) ) with respect to whether the point is closer to (or further away from) the origin, with respect to its projection on the triangulated surface.
Jan-Mathijs Schoffelen - 2015-01-12 15:57:05 +0100
Message sent to e-mail discussion list, changing status to resolved