blockDetectorParamet..

advertisement
Parameter files for a block-detector based tomograph
Author: R. Harrison
Date: February 2006
Description
This document describes the geometry of block-detector based tomograph in SimSET and the
parameter files used to define this geometry. There are three types of parameter files used: a
block parameter file, which defines the geometry of a detector block; a ring parameter file, which
defines a ring of detector blocks; and a block detector system parameter file, which defines a
tomograph as a stack of rings.
SimSET allows for considerable flexibility in the geometry of block-detector systems. The two
main limitations are that all elements of the detector system are outside an elliptical cylinder
containing the object being imaged, and that the elements of the detector system be composed
entirely of right-rectangular boxes. This latter constraint does not allow for the simulation of
triangular cross-section objects, as might be desired for interblock septa; these would need to be
approximated as a collection of right-rectangular boxes.
We will also be creating easier ways (e.g. a MatLab program or Excel macro) to create common
tomograph geometries; however, these will still create the parameter files described below.
Furthermore, direct generation of the parameter files may be required for some complicated
tomograph definitions.
Definition of a tomograph
Definition of a block-detector system requires three levels of parameter files: parameter files
describing the block type or types used; parameter files arranging blocks into rings (or other
arrangements, as long as they fit inside two nested elliptical cylinders); and a parameter file
which creates a tomograph from a stack of rings and defines some general tomograph
parameters.
All distances in the parameter files are measured in cm, all angles in degrees.
Blocks
The basic unit for a block-detector system is the block. Blocks are right-rectangular boxes which
can be further subdivided into smaller right-rectangular boxes. Each block has its own coordinate
system, with x corresponding to the depth into the block (the radial direction, for the default
block orientation in the tomograph), y corresponding to the other transaxial dimension, and z
corresponding to the axial dimension. (Figure 1.)
Figure 1. A four layer block (block A) and a tungsten blade (block B). Each block has its own coordinate system,
with x corresponding to the depth into the block (the radial direction, for the default block orientation in the
tomograph), y corresponding to the other transaxial dimension, and z corresponding to the axial dimension.
Blocks are split into layers in the x-direction. Each layer is subdivided into non-uniform voxels
at user-specified boundaries in the y and z direction. Layers extend across the entire block, and
the other boundaries extend across the entire layer, thus some parts of the block (e.g. the
housing) will be defined as multiple voxels (Figure 2).
Figure 2. In the block parameter file, all material boundaries are extended across the whole block. Here a block layer
consisting of detector housing, crystals, and inter-crystal gaps is split into the voxels that would need to be defined
in the block parameter file.
We will use two types of blocks in our sample system. Block A consists of two layers of crystal
and a light guide plus some block housing. Block B is just a tungsten blade used for interblock
septa. (Figures 1, 3 and 4.) The parameter files for them are given below in Appendices 1 and 2.
We use block A to elucidate some of the features and syntax of block parameter files.
The first step in defining a block is to give a reference point somewhere on or in the block. This
is the point that will later be positioned in space when defining rings containing the blocks (see
Rings below).
REAL block_reference_x = 0.0
REAL block_reference_y = 0.0
REAL block_reference_z = 0.0
The next steps are to define the outer dimensions of the block and the number of layers (Figure
3).
Figure 3. The user first defines some general characteristics of the block: a reference point (here the point at the
middle of the front face of the block); the range of values the block occupies in the x, y and z dimensions; and the
number of layers.
REAL
REAL
REAL
REAL
REAL
REAL
block_x_minimum
block_x_maximum
block_y_minimum
block_y_maximum
block_z_minimum
block_z_maximum
=
=
=
=
=
=
0.0
3.1
-1.015
1.015
-1.015
1.015
INT block_num_layers = 4
The rest of the block parameter file specifies the dimensions, materials, and whether the material
is ‘active’ (e.g. scintillating) for each voxel in the block layer by layer (Figure 4).
Figure 4. The four layers of block A. The user defines materials and dimensions for each layer of the block detector.
Block A consists of an aluminum front cover (layer 0), tungsten side covers (extending through layers 1 and 2), a
4x4 array of BGO separated by graphite-filled gaps (layer 1), a 2 NaI crystals separated by a graphite-filled gap
(layer 2), and a polyethylene backcover/light guide (layer 3). The BGO and NaI crystals are the active elements.
Block A consists of an aluminum front cover (layer 0), tungsten side covers (extending through
layers 2 and 3), a 4x4 array of BGO separated by graphite-filled gaps (layer 1), a 2 NaI crystals
separated by a graphite-filled gap (layer 2), and a polyethylene backcover/light guide (layer 3).
(Some of the materials are unusual – we are limited to the materials in the SimSET attenuation
table, though that table can be expanded.) The BGO and NaI crystals are the active elements.
For each layer in the block, the block parameter file gives a list of five items (some of which are
themselves lists): the inner and outer x-boundaries of the layer; the y and z coordinates for voxel
boundaries/material changes; and the definition of the voxels/material elements. For instance, for
layer 1:
NUM_ELEMENTS_IN_LIST
block_layer_info_list = 5
REAL
block_layer_inner_x = 0.1
# (must be == to outer x of previous layer)
REAL
block_layer_outer_x = 1.6
NUM_ELEMENTS_IN_LIST
block_layer_num_y_changes = 8
REAL
block_layer_y_change = -0.915
REAL
block_layer_y_change = -0.465
REAL
block_layer_y_change = -0.455
…
REAL
block_layer_y_change =
0.915
NUM_ELEMENTS_IN_LIST
block_layer_num_z_changes = 8
REAL
block_layer_z_change = -0.915
…
REAL
block_layer_z_change =
0.915
NUM_ELEMENTS_IN_LIST
block_layer_material elements = 81
# Material element 0
NUM_ELEMENTS_IN_LIST
block_material_info_list = 2
INT
block_material_index = 21 # tungsten
BOOL
block_material_is_active = FALSE
…
# Material element 10, Crystal 0
NUM_ELEMENTS_IN_LIST
block_material_info_list = 2
INT
block_material_index = 10 # BGO
BOOL
block_material_is_active = TRUE
# Material element 11
NUM_ELEMENTS_IN_LIST
block_material_info_list = 2
INT
block_material_index = 12 # graphite
BOOL
block_material_is_active = FALSE
…
# Material element 80
NUM_ELEMENTS_IN_LIST
block_material_info_list = 2
INT
block_material_index = 21 # tungsten
BOOL
block_material_is_active = FALSE
Note that the number of material elements in a layer is equal to (number of y material changes
+1)*(number of z material changes +1).
Rings
Rings are axially and radially bounded collections of blocks. Within the axial and radial bounds
the blocks can be arranged in almost any orientation; the two restrictions are that the axial faces
of the blocks remain parallel to the x-y (transaxial) plane, and the blocks may not overlap.
Appendix 3 gives a parameter file for a sample ring constructed from blocks A and B (Figures 4
and 5). 12 type A blocks are arranged in a square, three to a side. 4 type B blocks serve as interblock septa at the corners of the square. A 0.001 cm gap is left between the blocks along the
sides of the square: this is to protect against overlap of two blocks due to round-off errors when
computing their positions.
Figure 5. The sample ring consists of 12 copies of block type A arranged in a square with 4 copies of block type B
serving as inter-block septa.
The parameter file starts with the outer ring dimensions:
REAL
REAL
REAL
REAL
ring_x_inner_radius
ring_x_outer_radius
ring_y_inner_radius
ring_y_outer_radius
=
=
=
=
3.05
6.9
3.05
6.9
# by having x-, y-radii the same,
# bounding cylinders are circular.
REAL ring_z_minimum = -1.015
REAL ring_z_maximum = 1.015
The coordinate system for these parameters is specific to the ring, but related to the tomograph
coordinate system: the ring will be positioned in the tomograph by specifying an axial (zcoordinate) shift and a transaxial rotation (see following section).
The parameter file then gives the number of blocks in the ring and the file name and positioning
for each block:
NUM_ELEMENTS_IN_LIST ring_num_blocks_in_ring = 16
# PLACEMENT AND DEFINITION OF BLOCK 0
NUM_ELEMENTS_IN_LIST
ring_block_description_list = 5
STR
ring_block_parameter_file = “sampleBlockA.blockparms”
REAL
ring_block_x_position = 3.05
REAL
ring_block_y_position = -2.031
REAL
ring_block_z_position = 0.0
REAL
ring_block__transaxial_orientation = 33.659711
# degrees
…
Each block is defined and positioned using a list of 5 parameters. The first is a reference to its
parameter file, the next three give the position of the block reference point (described above in
the Blocks section) within the ring, and the last gives the orientation of the front face of the block
relative to the center line of the tomograph. The orientation is specified by the angle the
perpendicular to the face of the block at the block’s reference point makes with the line between
the reference point and the center line of the tomograph. An orientation angle of 0 degrees
means they are collinear, a positive angle means that the perpendicular is shifted in the
counterclockwise direction from the line. (Figure 6.)
Reference point position = (3.05, -2.031, 0)

Figure 6. Block position for block 0. Block position is specified by the position of the reference point and by an
orientation angle, , the angle between the line from the central axis of the ring and the perpendicular to the front
face of the block at the reference point. Here
positive.

2.031
 33.6597 . Counterclockwise rotations are
 3.05 
  arctan
Tomograph
A block-detector tomograph is defined as an axial stack of rings. Two rings cannot share any part
of the same axial range – not even if they are radially distinct.
Appendix 4 gives a parameter file defining a sample tomograph consisting of three of the rings
defined above, with the center ring rotated 45 degrees (Figure 7).
Figure 7. Sample tomograph consisting of three copies of the same ring, with the center ring rotated 45 degrees.
The parameter file starts with parameters that are common to all the detector types. It uses a new
detector type, block.
ENUM detector_type = block
BOOL do_forced_interaction = true
REAL
REAL
reference_energy_keV = 511.0
energy_resolution_percentage = 15
STR
history_file = "PET3d.dethist"
STR history_params_file = ""
The rest of the parameter file is devoted to defining the positioning of the rings. First the number
of rings is declared, then the parameter file name and positioning is given for each ring.
NUM_ELEMENTS_IN_LIST blocktomo_num_rings = 3
# Ring 0
NUM_ELEMENTS_IN_LIST
blocktomo_ring_description_list = 3
STR
blocktomo_ring_parameter_file = “sampleRingA.ringparms”
REAL
blocktomo_ring_axial_shift = -2.03
REAL
blocktomo_ring_transaxial_rotation = 0
# Ring 1
NUM_ELEMENTS_IN_LIST
blocktomo_ring_description_list = 3
STR
blocktomo_ring_parameter_file = “sampleRingA.ringparms”
REAL
blocktomo_ring_axial_shift = 0.0
REAL
blocktomo_ring_transaxial_rotation = 45
# degrees
…
The axial shift specifies how far the z=0 plane of the ring should be shifted when positioning it in
the tomograph. For instance, as the ring is declared (above in the Rings section) to cover the
axial range [-1.015, 1.015], after a -2.03 cm shift Ring 0 will cover the range [-3.045, -1.-15].
The transaxial rotation is measured counterclockwise: thus Ring 1 is rotated 1/8 of a turn.
Download