Table of Contents

obj.ClusterTable

Motivation

As part of the analysis output for a whole-brain search (i.e. next to images of whole-brain statistical maps for instance), people usually include tables of activation peaks into their manuscripts. This method allows to create such tables with the following features:

Method reference ('obj.Help('ClusterTable')')

 OBJ::ClusterTable  - generate a table with clusters
 
 FORMAT:       [c, t, v, vo] = obj.ClusterTable(mapno [, thresh [, opts]])
 
 Input fields:
 
       mapno       map number (1 .. NrOfMaps)
       thresh      either p/r values (0 .. 1) or t/F value (1 .. Inf)
                   if not given or 0, uses the LowerThreshold of map
       opts        optional settings
        .altmaps   alternative maps to extract values from (default: [])
        .altstat   either of 'mean' or {'peak'}
        .cclag     flag, interpret the threshold as lag number (false)
        .clconn    cluster connectivity ('face', {'edge'}, 'vertex')
        .icbm2tal  flag, VMP coords are passed to icbm2tal (default: false)
        .localmax  break down larger clusters threshold (default: Inf)
        .localmaxi iterate on sub-clusters (default: false)
        .localmin  minimum size for sub-clusters (default: 2)
        .localmsz  print sub-cluster sizes (default: false)
        .lupcrd    look-up coordinate, either or 'center', 'cog', {'peak'}
        .minsize   minimum cluster size (map resolution, default by map)
        .mni2tal   flag, VMP coords are passed to mni2tal (default: false)
        .showneg   flag, negative values are considered (default: false)
        .showpos   flag, positive values are considered (default: true)
        .sorting   either of 'maxstat', {'maxstats'}, 'size', 'x', 'y', 'z'
        .svc       small-volume correction (either VOI, voxels, or image)
        .svcthresh threshold for SVC (default: 0.05)
        .tdclient  flag, lookup closest talairach label (default false)
 
 Output fields:
 
       c           1xC struct with properties of clusters
       t           text table output
       v           thresholded map (in VMP resolution!)
       vo          if requested, VOI structure with (TAL) coords
 
 TYPES: CMP, HDR, HEAD, MSK, VMP
 
 Note: if only one output is requested, the table is text table is
       returned!!
 
 Note: icbm2tal overrides mni2tal!
 
 Note: svc only valid for VMP (given FWHM estimate in RunTimeVars!)

Arguments

mapno

This references the map number within the VMP object. Must be an integer number between 1 and the number of maps.

thresh

This sets the threshold. If the value is smaller than 0.1, the value is interpreted as a probability value for Null-hypothesis-testing, and the map type (.Type), degrees-of-freedom (.DF1 and .DF2), and selected-tails (.ShowPositiveNegativeFlag) parameters are used to compute the correct threshold value. If left empty, the threshold configured in the map (.LowerThreshold) is used.

opts

If given, this must be a 1×1 struct with the following optional fields:

.altmaps

Lists the indices of maps to extract statistical values at the coordinates of the peaks in the selected map (mapno argument).

.altstat

Selects whether the peak or the mean for the additional maps is extracted and shown.

.cclag

If given and set to 1×1 logical with value true, the given thresh argument is interpreted as a lag number for a cross-correlation map.

.clconn

Overrides the default for the setting as how to determine whether two adjacent voxels are connected (belong to the same cluster); whereas 'face' means that voxels must be direct neighbors (coordinate value may only be different by 1 voxel in one dimension), 'edge' (which is the default) means that voxels are also considered to be connected when the coordinate values differ by up to 1 in two dimensions, and 'vertex' finally means that voxels which are only connected by one of their vertices (full spatial diagonal where all dimensions differ by 1 in either direction) are considered to be part of one cluster.

.icbm2tal

Turns on ICBM2TAL conversion (using the icbm2tal function) for the text output (only) instead of mni2tal.

.localmax

Sets a threshold (related to cluster size in number of voxels) for which an attempt is made to search for local maxima (or minima for negative values) within the given cluster. The default is Inf which means that clusters are not being searched for local maxima.

.localmaxi

Flag to turn on iterating over sub-clusters until no more splitting can be performed.

.localmin

Sets the minimal size of sub-clusters (useful restriction for maps that have been masked, where the local maxima might be at the very edge of the cluster; please see splitclustercoords for more information).

.localmsz

Flag whether or not to print sub-cluster sizes (in text output).

.lupcrd

Which coordinate to print in the text output (center, i.e. mean, center-of-gravity, i.e. the stats-weighted mean, or peak).

.minsize

Overrides the .ClusterSize and .EnableClusterCheck settings in the map (referenced by the mapno argument). If given, clusters of smaller size will not be part of the output (but this does not apply to the size estimate of local sub-clusters, as the clustersize is used only as a way to ensure that a given cluster is significant, see alphasim for more information).

.mni2tal

If this is set to a 1×1 logical with value true, coordinates reported in a table will (and potentially passed to the Talairach Daemon database lookup function, tdclient) will first be passed through the mni2tal function to account for the fact that the MNI Space (in which, for instance, all typical SPM results will be in) does not lign up perfectly with the space as defined as “Talairach Space” (see mni2tal for more background).

.showneg

Flag to override the .ShowPositiveNegativeFlag in the map of the VMP. If set to a 1×1 logical with value true the negative tail of the distribution is taken into account (which also applies to the conversion of p-thresholds given by the thresh argument!). If set to false, the negative tail will be suppressed.

.showpos

Flag to override the .ShowPositiveNegativeFlag in the map of the VMP. If set to a 1×1 logical with value true the positive tail of the distribution is taken into account (which also applies to the conversion of p-thresholds given by the thresh argument!). If set to false, the positive tail will be suppressed.

.sorting

Alters the way in which clusters are sorted for both table and VOI outputs. The default value, 'maxstat' means that clusters with a higher (absolute) statistical value will appear before clusters with a lower statistical value in the output. The value 'size' sorts from larger to smaller clusters, and the values 'x', 'y', and 'z' will sort clusters by their coordinate (in the given dimension).

.svc

If a small-volume is provided in this field (either a VOI object, an image object, or a list of coordinates), perform SVC on the selected map (only works for VMP maps, and creates a new map in the object).

.svcthresh

Corrected threshold for SVC.

.tdclient

If set to a 1×1 logical with value true, coordinates (potentially passed through mni2tal first) will be passed on to tdclient, a local implementation of the Talairach Daemon database with the options to lookup the nearest gray matter label within a preset search radius of 7 millimeters (which approximates the most commonly used smoothing kernels of 6 and 8mm). This only affects the text output!

Output(s)

c

This is a 1xC struct with the properties of the found clusters, which contains the following fields:

t

Text table output. Here is an example generated with the following code:

vmp_ClusterTable_example.m
% create new VMP
vmp = xff('new:vmp');
 
% generate random data
vmp.Map.VMPData = single(15.*smoothdata3(randn(size(vmp.Map.VMPData)), [2,2,2]));
 
% mask with Colin's brain (we don't want stuff that couldn't be good)
cb = neuroelf_file('c', 'colin_brain.vmr');
vmp.MaskWithVMR(cb, 11);
 
% produce cluster table outputs
[c,t,v,vo] = vmp.ClusterTable(1, -sdist('tinv', 1e-6, vmp.Map.DF1), struct( ...
    'minsize', 40, 'mni2tal', true, 'tdclient', true));

Which produced (will differ, given that it is random data!):

   Clustertable of map:   "New Map"
           Type of map:   t-Map
    Degrees of freedom:   249
   Cluster k-threshold:   1080 mm^3 (40 voxel)
 Applied map threshold:   4.86840 (p < 0.00000)

   x    y    z  |     k  |    max    |    mean    | tal out
-----------------------------------------------------------
  68  -10   -1  |   114  | 13.611333 |  6.891288  |RH Middle Temporal Gyrus (Brodmann area 21) ( 68; -11; -2) [d=1.4mm])
 -30  -12   71  |    41  | -11.695634 | -6.247030  |LH Precentral Gyrus (Brodmann area 6) (-30; -12; 67) [d=4.0mm])
 -56   20    5  |    84  | 10.922107 |  6.315453  |LH Inferior Frontal Gyrus (Brodmann area 45)
 -27  -18   65  |    59  | 10.363769 |  6.237379  |LH Precentral Gyrus (Brodmann area 6) (-28; -17; 62) [d=3.3mm])
   9  -32  -33  |    58  | 10.271681 |  6.644166  |
  39  -36    3  |   141  | -9.934493 | -6.074017  |RH Caudate (Caudate Tail) ( 35; -35;  2) [d=4.2mm])
  12   -2   29  |    53  | -9.922318 | -6.117676  |RH Cingulate Gyrus (Brodmann area 24) (  7;  -2; 30) [d=5.1mm])
 -65  -31   33  |   101  | -9.520975 | -6.539583  |LH Inferior Parietal Lobule (Brodmann area 40)
 -15  -16  -11  |    48  |  9.516015 |  6.776953  |LH Parahippocampal Gyrus (Brodmann area 28) (-17; -14;-11) [d=2.8mm])
 -56   34   -1  |    52  |  9.491652 |  6.201726  |LH Inferior Frontal Gyrus (Brodmann area 47)
 -12    5   70  |    66  | -9.457577 | -6.388255  |LH Superior Frontal Gyrus (Brodmann area 6) (-10;   8; 67) [d=4.7mm])
  15    9   25  |    68  |  9.455211 |  6.238290  |RH Caudate (Caudate Body) ( 15;   8; 21) [d=4.1mm])
 -33  -31  -15  |    58  | -9.024246 | -5.839670  |LH Parahippocampal Gyrus (Brodmann area 36)
 -30  -89  -20  |    46  |  8.971775 |  6.387179  |LH Declive (-30; -88;-20) [d=1.0mm])
  -6  -33    8  |    44  |  8.942706 |  6.349526  |LH Thalamus ( -9; -31;  8) [d=3.6mm])
 -45  -43   25  |    45  |  8.869677 |  6.180710  |LH Superior Temporal Gyrus (Brodmann area 13) (-45; -43; 21) [d=4.0mm])
   6  -86  -18  |    49  |  8.615259 |  5.918599  |RH Declive (  7; -85;-18) [d=1.4mm])
   9  -63  -24  |    56  | -8.613391 | -6.012746  |RH Nodule
 -21  -58   29  |    54  | -8.550800 | -6.070900  |LH Precuneus (Brodmann area 7) (-20; -62; 30) [d=4.2mm])
 -42   11   -2  |    53  |  8.523092 |  5.915134  |LH Insula (Brodmann area 13)
 -12  -25   35  |    43  | -8.373242 | -6.004561  |LH Cingulate Gyrus (Brodmann area 31) (-12; -25; 38) [d=3.0mm])
   6  -53   62  |    47  | -8.299561 | -5.859161  |RH Precuneus (Brodmann area 7) (  5; -53; 62) [d=1.0mm])
  50   37   -6  |    53  | -7.895029 | -6.229494  |RH Middle Frontal Gyrus (Brodmann area 47)

NOTE: if only one output is requested (e.g. if called without outputs and without semicolon), then only the text table is returned, which then replaces the c output!

v

This is the numeric map (as in vmp.Map(mapno).VMPData) after thresholding (in double precision). Potentially useful for display and further processing.

vo

This is a 1×1 xff object of sub-type VOI which contains the clusters and their coordinates as in .rwcoords of the cluster structure (and a copy of the values in vo.VOI(V).VoxelValues; while this field is not supported by the VOI format, this information does not harm the object in any way, and it is used by the GUI of NeuroElf).