User Tools

Site Tools




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:

  • separating all voxels above thresholds (clustering)
  • searching for local maxima (minima) within each cluster (see splitclustercoords for more info)
  • generating a BrainVoyager QX compatible VOI object with the clustering information (functional voxels represented uniquely)
  • location of activation peaks (highest statistical values)
  • reporting the size of each cluster as well as the average statistical value
  • extracting the statistical value of other available maps at those coordinates (to compare statistical values)
  • optional conversion of coordinates from MNI into Talairach space (using Matthew Brett's mni2tal function)
  • looking up the closest Talairach label for each peak coordinate (using a toolbox-builtin local TD database function)

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
 Note: if only one output is requested, the table is text table is
 Note: icbm2tal overrides mni2tal!
 Note: svc only valid for VMP (given FWHM estimate in RunTimeVars!)



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


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.


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


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


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


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.


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.


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


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.


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


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).


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


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


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).


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).


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.


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.


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).


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).


Corrected threshold for SVC.


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!



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

  • .coords - Cx3 list of coordinates (unique functional locations), given in the internal resolution and space, so that they can be immediately used to access data in the map
  • .localmax - 1×1 char value, either set to the space character (not a local maximum) or 'L' (local maximum), useful for function that create user-defined tables
  • .max - maximum value within cluster; for clusters with negative values, this reflects the minimum value (absolute maximum with correct sign)
  • .mean - average value within cluster
  • .peak - peak coordinate given in the internal resolution and space (is identical to the first coordinate in the cluster)
  • .peakalt - if alternative maps are given in the opts.altmaps option, this contains the list of values extracted from those maps at peak location
  • .rwcoords - Cx3 list of coordinates, a transformation has been applied to represent BrainVoyager's TAL axes notation (X = left/right with 0 being the center, and so on)
  • .rwpeak - peak coordinate in real-world coordinates (identical to the first coordinate in .rwcoords)
  • .rwsize - estimated size of the cluster in real-world space (by using the functional resolution, e.g. for a 3mm-resolution map, the number of coordinates is multiplied with 27)
  • .size - number of functional voxels (equals size(c(C).coords, 1))
  • .talcoords - if the opts.mni2tal flag is set to true, this will contain the coordinates after passing .rwcoords through mni2tal
  • .talout - this is then set to the output of the tdclient function for the peak (first) coordinate in the cluster's .rwcoords
  • .talpeak - peak location in Talairach space (only set if opts.mni2tal is set to true)
  • .values - extracted values for the current map (useful for scripts that need each value)


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

% 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!


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


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).

vmp.clustertable.txt · Last modified: 2014/06/04 17:57 by jochen