The PDB file format: pathway data-bases for tractography solutions
Based on work by Sherbondy, Dougherty, Wandell and others in the Stanford VISTA lab.
This library implements reading and writing of .pdb tractography files.
It also includes command-line interfaces to convert pdb files from/to trk files, which are used as follows:
pdb2trk pdb_file.pdb trk_file.trk
trk2pdb trk_file.trk pdb_file.pdb
pip install nibabel
To install the software itself, download the source code and run:
python setup.py install
Installing with pip
To install the release version of
pip, you can run:
pip install pdb_files
File format specification:
The following is the nominal specification of PDB files, version 3. Note that some of these things were not implemented in practice in many files, so the code implements a partial version of this spec.
The file-format is organized as a semi-hierarchical data-base, according to the following specification: [ header size] - int -- HEADER FOLLOWS -- [4x4 xform matrix ] - 16 doubles [ number of pathway statistics ] - int for each statistic: [ currently unused ] - bool [ is stat stored per point, or aggregate per path? ] - bool [ currently unused ] - bool [ name of the statistic ] - char [ currently unused ] - char [ unique ID - unique identifier for this stat across files ] - int ** The algorithms bit is not really working as advertised: ** [ number of algorithms ] - int for each algorithm: [ algorithm name ] - char [ comments about the algorithm ] - char [ unique ID - unique identifier for this algorithm, across files ] - int [ version number ] - int -- HEADER ENDS -- [ number of pathways ] - int [ pts per fiber ] - number of pathways integers for each pathway: [ header size ] - int -- PATHWAY HEADER FOLLOWS -- ** The following are not actually encoded in the fiber header and are currently set in an arbitrary fashion: ** [ number of points ] - int [ algorithm ID ] - int [ seed point index ] - int for each statistic: [ precomputed statistical value ] - double -- PATHWAY HEADER ENDS -- for each point: [ position of the point ] - 3 doubles (ALREADY TRANSFORMED from voxel space!) for each statistic: IF computed per point (see statistics header, second bool field): for each point: [ statistical value for this point ] - double