<div dir="ltr">Dear Vitória and Cornelius,<br><br>this is a common problem, and maybe it would be good to clarify the strategies that can be used here. I hope this can help others in a similar situation, which I have found many times.<br>
<br>1) You are trying to convert voxel indexes to head (CTF) coordinates. In this case, there are two mistakes in the code:<br>1a) pos = warp_apply( pinv( sourceNAIInt.transform ), posInt, 'homogeneous' );<br>... should be done with sourceNAIInt, not mri. The transforms are different, in general; e.g. note the downsample=2.<br>
1b) use cfg.locationcoordinates = 'head', as commented by JM in a previous post. Or remove this line, since 'head' is the default.<br><br>2) But if you are working with the same subject/grid, there is no need for interpolation at all. Simply find the grid position with highest 'pow' and take its position.<br>
    [dummy,ind] = max(source.avg.pow);<br>    pos = source.pos(ind,:);<br><br>3) However, this is not possible when using different grids, e.g. in a grand average in MNI coordinates. Find the peak ('pos') in the interpolated volume, as in Cornelius' code, then find the index of the nearest grid position for a common (again, MNI) grid. This is also in JM's message.<br>
<br>dpos = source.pos - repmat( pos, size(source.pos,1), 1 );<br>[dummy,ind] = min(sum(dpos.^2,2));<br><br>4) What I have been using, and strongly recommend, is an MNI grid warped to the subject's anatomy, according to this procedure:<br>
<a href="http://fieldtrip.fcdonders.nl/example/create_single-subject_grids_in_individual_head_space_that_are_all_aligned_in_mni_space">http://fieldtrip.fcdonders.nl/example/create_single-subject_grids_in_individual_head_space_that_are_all_aligned_in_mni_space</a><br>
<br>This would give you both the benefits of working in MNI coordinates, and the ease of having a common grid across subjects (for instance, enabling solution #2). Still, some projects do call for one of the other options.<br>
<br>Just a couple of details:<br>- Pay utmost attention to coordinate systems and units. For instance, it is common to confuse unlabeled cm for mm, and either of these with voxels. Try to also label all structures as CTF or SPM (MNI).<br>
- Using pinv instead of inv is usually a good idea. Here, it is a not an issue, but matrix inversion in MATLAB can lead to a world of hurt to the unwary.<br><br>Best,<br>Erick<br><br></div><div class="gmail_extra"><br><br>
<div class="gmail_quote">On Tue, Mar 11, 2014 at 4:04 PM, Vitoria Piai <span dir="ltr"><<a href="mailto:v.piai.research@gmail.com" target="_blank">v.piai.research@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  

    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Dear FT-ers, <br>
    <br>
    I found an old posting to the mailing list (see below) that never
    got answered so my question still holds: given a location I found in
    the interpolated source, how do I find back the same location in
    .pos of the non-interpolated data?<br>
    I can try and go around it by finding the corresponding MNI
    coordinates in the interpolated data (which by now I have to do by
    hand, so not optimal anyways), and then look for those coordinates
    in .pos. But I was wondering, like Cornelius was in his post,
    whether there is a neater way to get this information.<br>
    <br>
    Thanks a lot for the help, <br>
    Vitória<br>
    <br>
    <br>
    <div>
      <div class="gmail_extra">
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div>
              <div>
                >>>>>>>>>>>>>><br>
                <br>
                Hi mailing list,<br>
                <br>
                I'm still struggling with the conversion of coordinates
                between source and<br>
                interpolated source space.<br>
                For example, if i have the position of a single grid
                point how do i get the<br>
                corresponding voxel  in the interpolated source
                structure. Or the other way<br>
                around, how to get the grid point which corresponds to a
                voxel (e.g the max<br>
                voxel) in the interpolated source structure.<br>
                <br>
                I think this should be a common problem when working
                with virtual<br>
                electrodes, shouldn't it?<br>
                <br>
                To make things easier i put together a example with the
                data from the<br>
                source tutorial where i tried to calculated the grid pos
                of the max voxel<br>
                in the interpolated source.<br>
                <br>
                clear all;<br>
                load sourcePost_nocon;               % source structure
                from tutorial<br>
                mri = ft_read_mri('Subject01.mri');  % mri of subject01
                from tutorial<br>
                <br>
                sourceNAI = sourcePost_nocon;<br>
                sourceNAI.avg.pow = sourcePost_nocon.avg.pow ./
                sourcePost_nocon.avg.noise;<br>
                sourceNAI=rmfield(sourceNAI,'freq'); % had to remove
                that to let<br>
                <br>
                cfg = [];<br>
                cfg.downsample = 2;<br>
                cfg.parameter = 'avg.pow';<br>
                sourceNAIInt = ft_sourceinterpolate(cfg, sourceNAI ,
                mri);<br>
                <br>
                % Find position of max activity<br>
                [dum, maxindx] = max(sourceNAIInt.avg.pow(:));<br>
                [xi, yi, zi] = ind2sub(sourceNAIInt.dim, maxindx);<br>
                posInt=[xi, yi, zi];<br>
                <br>
                % Plot interpolated source with position of max activity<br>
                cfg              = [];<br>
                cfg.method       = 'ortho';<br>
                cfg.funparameter = 'avg.pow';<br>
                cfg.locationcoordinates = 'voxel';<br>
                cfg.location      = posInt;          % location of max
                activity is marked<br>
                correctly.<br>
                figure;<br>
                ft_sourceplot(cfg,sourceNAIInt);<br>
                <br>
                % Transform coordinate back to uninterpolated source???<br>
                dpos = warp_apply(inv(mri.transform), posInt,
                'homogeneous');<br>
                <br>
                <br>
                % Plot uninterpolated source with position aquired from
                interpolated source<br>
                cfg              = [];<br>
                cfg.method       = 'ortho';<br>
                cfg.funparameter = 'avg.pow';<br>
                cfg.locationcoordinates = 'voxel';<br>
                cfg.location      = dpos;               % unfortunately
                this coordinate is<br>
                obviously wrong!!! WHY?<br>
                figure;<br>
                ft_sourceplot(cfg,sourceNAI);<br>
                <br>
                <br>
                Unfortunately the solution of Jan Mathijs did not work,
                nor did mine :(<br>
                <br>
                Any ideas???<br>
                <br>
                Cornelius<br>
                <br>
                <br>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
    </div>
    <br>
  </div>

<br>_______________________________________________<br>
fieldtrip mailing list<br>
<a href="mailto:fieldtrip@donders.ru.nl">fieldtrip@donders.ru.nl</a><br>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br></blockquote></div><br></div>