Dear Doug,
thank you for the clarification.
So to make sure, do you use this group_avg_area for each vertex also for building null distribution of maximal cluster size? The area values in .csd files are values of group_avg_area of cluster with maximal group_avg_area in each simulation step?
Looking to the source codes it seems to me that the "actual area" of vertices (named "area" in source codes) in fsaverage surfaces is by default not used for anything.
This would be reason why in cluster reports from p-map surface overlays originally generated by PALM but clustered by mri_surfcluster the p-values of clusters were not monotonous with respect to cluster area.
There was cluster with larger area, but larger p, than other cluster, which had smaller area, but also smaller p.
Which was one of the reasons why I digged onto this issue.
Now I am at least getting correspondence between PALM and mri_surfcluster cluster sizes. I "detached" lh.white from lh.white.avg.area.mgh (this file is implicitly read by mri_surfcluster), then I got values differing only by global scaling factor corresponding to the ratio of group_avg_surf_area/total_area.
PALM does not do this correction.
Apparently there is quite large region-specific variability in scaling factor between area and group_avg_area of vertices due to the fact that some regions of brain are less spatially variable (less small individual-specific folds), therefore their average surface does not lose too much folding.
Is this effect also accounted for in smoothing on average surface, i.e. are the group average distance between vertices used for smoothing instead of actual positions of the vertices?
This would require storing this info somewhere which does not seem to me.
If the real positions and distances of vertices in average surfaces are used for smoothing, but group_avg_area is used for cluster extent inference, then this effect would in fact introduce variance of spatial smoothness of data, which could have consequences to statistical inference, wouldn't it? How this is handled?
I have several related questions:
Reading source code I came across term "ripped" faces/vertices. It seems to me that these faces/vertices are effectively excluded from computations. What does this term mean? Are there any "ripped" vertices in fsaverage subject surfaces?
Do you also generate file corresponding to avg.area.mgh in make_average_surfaces? From the code it seems to me that there is only global scaling realized by setting total group_avg_area average surface file.
Which values are stored in lh.area of fsaverage? It seems to me that these values do not correspond to area of real lh.white vertices.
Thank you for your kind support.
Regards,
Antonin Skoch
It is quite confusing and took us some time to understand ourselves.
When we create an average subject like fsaverage, we have to create a
triangular mesh just like we do with any subject. This means that we
have to assign an xyz to each coordinate. When trying to represent a
group, this is not straight forward. The way we do it is to compute the
xyz coordinate in MNI305 space for each vertex for each subject, then
map that through the spherical registration into the common
surface-space for each subject. We then average the MNI305 xyzs across
subject to arrive at the xyz for that vertex in the common
surface-space. This gives the pial surface of fsaverage its brain-like
shape. The problem is that it is much smoother than an individual cortex
because all the little folds have been averaged out. This means that the
surface has much less surface area than any of the individuals used to
make the average (from a surface area standpoint, it is not an average
at all!). To be able to report average surface area, we computed the
area of each vertex of each subject and mapped this into the common
surface space and averaged it across subjects. When we want to report an
area for a given region, we compute the sum of the vertex average areas
rather than the area of the vertices themselves.
On 04/13/2016 11:17 AM, Antonin Skoch wrote:
> Dear Doug,
>
> thank you very much for the support.
>
> I am quite confused by this info about correcting of area of fsaverage
> clusters. Could you please clarify to me the following:
>
> How exactly the values of lh.area, lh.white.avg.area.mgh of fsaverage were
> computed?
>
> How the cluster area inside mri_surfcluster (and also mri_glmfit and
> mri_mcsim) is computed?
>
> How the correction for average subject is applied?
>
> I assumed that area belonging to particular vertex is computed by summing
> areas of faces originating in particular vertex divided by 3.
> The face areas are computed from vertex coordinates by the method (based on
> cross-product of vectors)
>
> http://stackoverflow.com/questions/26312570/calculate-surface-area-of-a-3d-mesh
>
> This is how the vertex area from surface file is computed inside PALM. Is the
> same method used in freeSurfer? I checked the values of lh.white vertex area
> computed in PALM and they do NOT correspond neither to lh.area, nor
> lh.white.area.mgh values.
> I am listing areas of 3 representative vertices of fsaverage white surface
> got from lh.white.avg.area, lh.area and computed from lh.white in PALM:
>
> vtx 50: lh.white.avg.area 0.4952, lh.area 0.589, PALM 0.5967
> vtx 110: lh.white.avg.area 0.5533, lh.area 0.5198, PALM 0.5421
> vtx 1000: lh.white.avg.area 0.6193, lh.area 0.3349, PALM 0.4305
>
> Any clues why there is a difference?
>
> In cluster summary file, there are flags FixVertexAreaFlag 1 and
> FixSurfClusterArea 1. What is the significance of these flags? I tried to set
> --no-fix-vertex-area. The FixVertexAreaFlag got value 0, but the vertex areas
> produced by mri_surfcluster were the same.
> Is it possible to turn off also FixSurfClusterArea?
>
> I also found flags FixVertexAreaFlag and FixGroupSubjectArea in .csd files.
> Are there similar corrections applied to cluster size values in .csd files?
>
> Thank you in advance for help.
>
> Regards,
>
> Antonin Skoch
>
> > Dear FreeSurfer experts,
> >
> > I am using mri_surfcluster to compare results from PALM and FreeSurfer
> > cluster extent inference.
> >
> > I came across several issues in mri_surfcluster I cannot cope with.
> >
> > 1.
> > I observed that --mask option in mri_surfcluster does not prevent
> > cluster to growing outside the mask.
> >
> > When I run
> >
> > mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum
> > summary.txt --subject fsaverage --surf white --hemi lh --thmin 0 --ocn
> > cluster_summary.mgz --mask ./mask.mgh
> >
> > the cluster is growing outside mask and covers all surface including
> > non-cortical (masked) regions.
> >
> > Is this intended behavior? This behavior (allowing clusters leak
> > outside mask) seems strange to me since it could possibly influence
> > results of cluster-extent inference in case of mask-constrained analysis.
> This is happening because you are setting the threshold to 0.
> >
> > 2.
> > How behaves mri_glmfit-sim in permutation-based building
> > cluster-extent null distribution with mask? Is in this case also
> > allowed to clusters to leak outside mask?
> No
> >
> > 3.
> > Another issue is concerning reported cluster area. I tested
> > mri_surfcluster on data where overlay values
> > (lh.thickness.fsaverage.mgh) were set to 0 outside cortex mask (they
> > were non-zero also in some portion of non-cortical vertices). When I
> > set thmin to non-zero value in mri_surfcluster
> >
> > mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum
> > summary.txt --subject fsaverage --surf white --hemi lh --thmin 0.00001
> > --ocn cluster_summary.mgz --mask ./mask.mgh
> >
> > I get cluster comprising (almost) all cortex, not leaking to
> > non-cortical areas. But what is strange, the reported cluster size is
> > far larger than area of the whole cortical surface.
> >
> > number of voxels in search space = 149953
> > Done loading source values (nvtxs = 163842)
> > overall max = 5 at vertex 817
> > overall min = 0 at vertex 8
> > surface nvertices 163842
> > surface area 65417.097656
> > surface area 65416.648438
> > NOT Adjusting threshold for 1-tailed test
> > Searching for Clusters ...
> > thmin=0.000100 (0.000100), thmax=-1.000000 (-1), thsignid=0,
> > minarea=0.000000
> > Found 2 clusters
> > Max cluster size 76431.562500
> > Saving cluster numbers to pok.mgz
> >
> >
> > Here is output of mri_surfcluster:
> > # ClusterNo Max VtxMax Size(mm^2) MNIX MNIY MNIZ NVtxs
> > 1 5.000 817 76431.56 -25.8 4.6 -37.5 149874
> > 2 2.670 144205 0.53 -15.8 -40.4 -3.8 1
> >
> > How it is possible?
> The surface area of 65416.648438 has not been corrected for the fact
> that fsaverage is an average subject. The area in the summary table has
> been corrected.
> >
> > 4.
> > Does the fsaverage/surf/lh.area correspond to area of particular
> > vertices on fsaverage/surf/lh.white? I expect yes.
> The lh.area file does correspond. However, the area measures on the raw
> fsaverage surface are not accurate because the average surface has much
> less surface area due to averaging out the individual folding patterns.
> >
> > 5.
> > How it is possible to calculate area of specified vertex of surface? I
> > tried to do that by creating .label file with particular vertex number
> > and running
> >
> > mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum
> > summary.txt --subject fsaverage --surf white --hemi lh --thmin 0.00001
> > --clabel myVertex.label
> >
> > I indeed got report of 1 cluster with 1 vertex, with VtxMax value
> > identical to vertex index in myVertex.label
> > but the area value in summary.txt is different that value in
> > fsaverage/surf/lh.area.
> You can extract it out of ?h.white.avg.area.mgh using mri_segstats with
> the --slabel function.
> >
> > Thank you very much in advance for clarification,
> >
> > Antonin Skoch
>
>
> _______________________________________________
> Freesurfer mailing list
> Freesurfer@nmr.mgh.harvard.edu
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer