SimSET: Creando el área de trabajo
11 April, 2017 | SimSET | Eduardo MarquezLo primero que se hace para realizar una simulación es configurar los parámetros del Generador de historia del positron (PHG, por su siglas en ingles, el cual explicare a detalle después, por ahora entiéndase que crea el “área de trabajo”), el PHG utiliza el sistema cartesiano, con origen (0,0,0), y puede compuesto por uno o mas slices (rebanadas), todos los slices de mismo tamaño vertical y horizontal, solo variando en la posición del eje Z. La siguiente figura, muestra un un área con tres slices, en el cual el slice central tiene mayor resolución que los slices de los extremos.
Ten en cuenta que todos los slices están pegados, la imagen solo es una referencia de como se forma el objeto.
La unidad utilizada por SimSET es el centímetro y cuando se especifican los slices en los parámetros del PHG deben comenzar siempre con las posiciones negativas. Para especificarlas se utilizan solo dos parámetros, mínimo y máximo. Ademas se especifica el numero de “voxels” verticales y horizontales.
NOTA: A pesar de que los objetos se pueden diseñar de manera rectangular, el PGH tratará a los objetos como un cilindro, el cilindro que mejor llene la cuadricula diseñada, y se define en
TARGET CYLINDER INFORMATION
El siguiente ejemplo, consta del área de trabajo dividida en 12 slices, cada uno con 128 voxels:
######################################################################### # Se explicara con mayor detalle estas líneas un poco mas tarde, # por ahora solo las utilizaremos. # RUNTIME OPTIONS INT num_to_simulate = 100000000 REAL length_of_scan = 60.0 BOOL simulate_SPECT = true BOOL simulate_PET_coincidences_only = false BOOL simulate_PET_coincidences_plus_singles = false REAL photon_energy = 140.5 REAL minimum_energy = 110.0 BOOL model_coherent_scatter_in_obj = true BOOL model_coherent_scatter_in_tomo = true BOOL adjust_for_collinearity = false BOOL adjust_for_positron_range = false # ENUM isotope = c11 INT random_seed = 0 # IMPORTANCE SAMPLING OPTIONS BOOL simulate_stratification = false BOOL simulate_forced_detection = false BOOL forced_non_absorbtion = true REAL weight_window_ratio = 1.0 # OBJECT GEOMETRY VALUES BOOL point_source_voxels = false BOOL line_source_voxels = false ######################################################################### # A partir de aquí se definen los slices del área de trabajo. NUM_ELEMENTS_IN_LIST object = 13 # Siempre el numero de slices + 1 INT num_slices = 12 # Numero de slices ################################## Por cada SLICE se declara: NUM_ELEMENTS_IN_LIST slice = 9 # 9 o 11** (Se explicara en la cración del objeto) INT slice_number = 0 # Número de slice REAL zMin = -24 # Posición inicial en el eje Z REAL zMax = -20 # Posición final en el eje Z REAL xMin = -32.00 # Posición inicial en el eje X REAL xMax = 32.00 # Posición inicial en el eje X REAL yMin = -32.00 # Posición inicial en el eje Y REAL yMax = 32.00 # Posición inicial en el eje Y INT num_X_bins = 128 # Número de voxels en X INT num_Y_bins = 128 # Número de voxels en Y ################################## Se repite por cada Slice, (SOLO CAMBIA Z) NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 1 REAL zMin = -20 REAL zMax = -16 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 2 REAL zMin = -16 REAL zMax = -12 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 3 REAL zMin = -12 REAL zMax = -8 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 4 REAL zMin = -8 REAL zMax = -4 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 5 REAL zMin = -4 REAL zMax = 0 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 6 REAL zMin = 0 REAL zMax = 4 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 7 REAL zMin = 4 REAL zMax = 8 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 8 REAL zMin = 8 REAL zMax = 12 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 9 REAL zMin = 12 REAL zMax = 16 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 10 REAL zMin = 16 REAL zMax = 20 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 NUM_ELEMENTS_IN_LIST slice = 9 INT slice_number = 11 REAL zMin = 20 REAL zMax = 24 REAL xMin = -32.00 REAL xMax = 32.00 REAL yMin = -32.00 REAL yMax = 32.00 INT num_X_bins = 128 INT num_Y_bins = 128 ######################################################################### # Se define el la información del cilindro NUM_ELEMENTS_IN_LIST target_cylinder = 3 REAL target_zMin = -4.0 REAL target_zMax = 4.0 REAL radius = 36.00 REAL acceptance_angle = 5.0 ######################################################################### # A partir de aquí se definen los directorios: solo modificaremos # ACTIVITY INDEX FILE y ATTENUATION INDEX FILE, por los archivos # que definirán el objeto. # COHERENT ANGULAR DISTRIBUTION FILES STR coherent_scatter_table = "@simset/phg.data/phg_ad_files" # ISOTOPE DATA #STR isotope_data_file = "@simset/phg.data/isotope_positron_energy_data" # ACTIVITY INDEX FILE STR activity_indexes = "@simset/Example/objeto.act_index" # ACTIVITY TABLE FILE STR activity_table = "@simset/phg.data/phg_act_table" # ACTIVITY INDEX TO TABLE TRANSLATION FILE STR activity_index_trans = "@simset/phg.data/phg_act_index_trans" # ACTIVITY IMAGE OUTPUT FILE STR activity_image = "@simset/Example/objeto.actimg" # ATTENUATION INDEX FILE STR attenuation_indexes = "@simset/Example/objeto.att_index" # ATTENUATION TABLE FILE STR attenuation_table = "@simset/phg.data/phg_att_table" # ATTENUATION INDEX TO TABLE TRANSLATION FILE STR attenuation_index_trans = "@simset/phg.data/phg_att_index_trans" # ATTENUATION IMAGE OUTPUT FILE STR attenuation_image = "@simset/Example/objeto.attimg" # PRODUCTIVITY INPUT TABLE FILE STR productivity_input_table = "" # PRODUCTIVITY TABLE FILE STR productivity_output_table = "" # COLLIMATOR PARAMETER FILE STR collimator_params_file = "" # DETECTOR PARAMETER FILE STR detector_params_file = "" # BINNING PARAMATER FILE STR bin_params_file = "@simset/Example/object.bin_params" # HISTORY FILE STR history_file = "" # HISTORY PARAMETERS FILE STR history_params_file = "" # STATISTICS FILE (for debugging purposes only) STR statistics_file = ""
NOTA0: En mi caso dentro de la carpeta 2.9.2, cree una carpeta llamada Example, donde estoy colocando estos archivos. Tengan mucho cuidado con los path (directorios.
NOTA1: Como menciona el código y con el fin de no cometer errores (es normal), solo cambiaremos los archivos object.act_index y object.att_index según se necesite, sin renombralos.
NOTA2: Básicamente en este archivo solo definiremos (por ahora) los slices, los voxels y el cilindro objetivo, con medidas que abarquen todo el espacio.