The Format of VTC Files
A VTC file contains the functional data (time series) of one experimental run (one functional scan) in a 3D space (native, AC-PC, Talairach, MNI) without slice gap. The binary file contains a variable-length header followed by the actual 4D data. The data is not stored as a sequence of volumes (time points), but contains for each voxel a continous stream of values representing the voxel's time course. Having time as the inner loop in this way speeds up reading time course data for voxels from a file.
VTC Header
BYTES | DATA TYPE | DEFAULT | DESCRIPTION |
2 | short int | 2 | version number |
N | byte | name of FMR file whose STC data has been transformed (*1) | |
M | byte | <none> | name of the linked protocol (PRT) file (*1) |
2 | short int | NrOfVolumes (number of volumes, measurements, time points) | |
2 | short int | 3 | VTC resolution, i.e. 3 -> one voxel = 3 x 3 x 3 mm (*2) |
2 | short int | 57 | XStart (*3) |
2 | short int | 231 | XEnd (*3) |
2 | short int | 52 | YStart (*3) |
2 | short int | 172 | YEnd (*3) |
2 | short int | 59 | ZStart (*3) |
2 | short int | 197 | ZEnd (*3) |
2 | short int | Hemodynamic delay, simple shift value (*4) | |
4 | float | TR [ms] (*4) | |
4 | float | Hemodynamic function, delta parameter (*4) | |
4 | float | Hemodynamic function, tau parameter (*4) | |
2 | short int | Segment size, used for time course separation (*4) | |
2 | short int | Segment offset, used for time course separation (*4) |
(*1) Variable length, the end of the name is indicated by '0'.
(*2) The VTC resolution is defined with respect to the resolution of a VMR file. Typically, one VMR voxel has the resolution of 1 (Talairach) mm3. A VTC resolution value of 3 means that one VTC voxel encompasses 3 x 3 x 3 = 27 VMR voxels. Other resolutions are possible, i.e. 1 and 2.
(*3) These values indicate the relative position within a VMR volume (must be a 2563 data set for Talairach VTC data, (see explanations below).
(*4) These values are included in the header only if the file version number is at least 2. You can ignore these values, they might be dropped in future versions.
VTC Data
Each data element (intensity value) is represented in 2 bytes (unsigned short). The data is organized in four loops:
DimZ
DimY
DimX
DimT
The inner loop (DimT = NrOfVolumes) contains the time series for each VTC voxel. The spatial dimensions can be computed from the header info as follows:
DimX = (XEnd-XStart) / VTC-resolution
DimY = (YEnd-YStart) / VTC-resolution
DimZ = (ZEnd-ZStart) / VTC-resolution
Example. With a VTC resolution of 3 and the default dimension values provided above, this results in:
DimX = 58
DimY = 40
DimZ = 46
With these values and a typical NrOfVolumes of 200, the total number of bytes (for data without header) is therefore:
DimX * DimY * DimZ * NrOfVolumes * 2 = 42,688,000
or approximately 40MB.
Note that the axes terminology follows the internal BrainVoyager (BV) format. The mapping to Talairach axes is as follows:
BV X front -> back = Y in Tal space
BV Y top -> bottom = Z in Tal space
BV Z left -> right = X in Tal space