Tutorial Rápido de GATE y ROOT en el ambiente de la GRID de GISELA. Por Fernando Andrés Quiñonez Granados Tutorial rápido con ejemplos del programa de las ciencias de la vida GATE y de la plataforma de análisis de datos ROOT, usandose en el entorno visual del portal de ciencia de GISELA. Marzo, 2012. BUCARAMANGA - COLOMBIA. 1 Para mi esposa Adriana Godoy. 2 Índice general 1 MÓDULO 1 6 1.1 Registrarse en el portal . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Ingresando al portal 1.3 Reconociendo el entorno del portal de ciencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . GISELA/GATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 1.4 2 3 My Workspace ) Mi Espacio de Trabajo ( Enviando trabajos a la GRID 11 14 . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . 16 MÓDULO 2 17 2.1 Procesos Físicos en GATE/GEANT4 . . . . . . . . . . . . . . . . . . . 17 2.2 El código Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 La base de datos de materiales de GATE . . . . . . . 26 2.4 Sistemas PET en GATE . . . . . . . . . . . . . . . . . . . . . . . . . . 41 GateMaterials.db 2.4.1 Sistema CylindricalPET . . . . . . . . . . . . . . . . . . . . . . 41 2.4.2 Sistema ecat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.5 Sistemas SPECT en GATE . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Radioterapia y Dosimetría en GATE . . . . . . . . . . . . . . . . . . . MÓDULO 3 3.1 Tipos de códigos en ROOT 3.1.1 3.2 70 81 85 . . . . . . . . . . . . . . . . . . . . . . . . 85 Códigos tipo CINT . . . . . . . . . . . . . . . . . . . . . . . . . 85 ROOT ejemplo por ejemplo . . . . . . . . . . . . . . . . . . . . . . . . 87 3.2.1 Análisis del archivo ROOT proveniente del código DEMO . . . 89 3.2.2 Histogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Bibliografía 92 3 Índice de cuadros 4 Índice de guras 1.1 Página web de GATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Ingreso de información de cuenta de GATE. . . . . . . . . . . . . . . . 8 1.3 Selección de GRID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 Vericación de texto y click en enviar. 1.5 Ingreso al portal de GATE. . . . . . . . . . . . . . . . . . . . . . . . . 11 1.6 Escojencia de la federación y de la organización. . . . . . . . . . . . . . 12 1.7 A tan solo un click. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.8 Adentro del portal de GATE de GISELA. 1.9 Dando click en MyJobs. . . . . . . . . . . . . . . . . . . . 7 10 . . . . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.10 Viendo en que lugar del mundo andan corriendo nuestros trabajos. Actualmente hay un trabajo corriendo en Rio de Janeiro, y lo podemos observar en el mapa con un punto azul. . . . . . . . . . . . . . . . . . . 2.1 Geometría del detector CylindricalPET presente en el código PET_CylindricalPET_System.ma La echa indica que un volumen apunta a la volumen hija. 2.2 16 . . . . . . . 47 Geometría del detector ecat presente en PET_Ecat_System.mac. La echa indica que un volumen apunta a la volumen hija . . . . . . . . . 57 2.3 Michelograma para un sistema escaner de 16 anillo-cristales . . . . . . . 64 2.4 Geometría del detector SPECThead. La echa indica que un volumen 3.1 apunta a la volumen hija . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Histograma generado en el código anterior. . . . . . . . . . . . . . . . . 91 5 Capítulo 1 MÓDULO 1 GATE es un software avanzado de fuente abierta desarrollado por la colaboración internacional OpenGATE y es dedicado a simulaciones numericas de imágenes médicas y radioterapia. Actualmente (2012) soporta simulaciones de Tomografía de Emisión PET y SPECT, y experimentos de radioterapia. Siendo PET la sigla en inglés para Positron Emission Tomography (Tomografía de Emisión de Positrón) y SPECT la sigla en ingles para Single Photon Emission Computed Tomography (Tomografía Computada de Emisión de Fotón Simple). GATE juega un rol importante en el diseño de nuevos diseños de dispositivos de imagenes médicas, en la optimización de protocolos de adquisición y en el desarrollo y valoración de algoritmos de reconstrucción de imágenes y técnicas de corrección. GATE también puede ser utilizado para cálculos de dosis en experimentos de radioterapia. GISELA Grid Initiatives for e-Science virtual communities in Europe and America Latina (Iniciativas de GRID para comunidades virtuales de e-Ciencia en Europa y America Latina) nos ofrece los Portales de Ciencia SG Science Gateways para acceder a los computadores conectados en GRID para correr aplicaciones de Ciencias de la Vida, la Industria, Matematicas y Físicas. En este tutorial aprenderemos a usar los portales de ciencia Science Gateways de GISELA para enviar proyectos robustos de GATE a la GRID. Este tutorial es lo mas autocontenido posible, pero no trata de ser un tratado completo sobre todas las posibles formas de usar GATE y ROOT. El release de GATE de los ejemplos de este manual es GATE 6.0.0. 6 1.1. Registrarse en el portal Primeramente ingresamos a la página web de GATE en GISELA. Abrimos nuestro navegador preferido e ingresamos a la siguiente dirección https://gisela-gw.ct.infn.it/gate Figura 1.1: Página web de GATE. Lo primero que haremos será registrarnos en el portal, para ello damos click en la esquina superior derecha, en el link que dice 1.1. 7 Register, tal como se muestra en la gura Inmediatamente se abrirá la siguiente página e ingresamos la información correspon- Figura 1.2: Ingreso de información de cuenta de GATE. diente, por ejemplo, Nombres, apellidos, correo electrónico, nombre de la universidad en donde se estudia o se labora, etc. etc. Cabe recordar que es de carácter obligatorio llenar las cajas con asterisco. 8 En la caja Identity federations escojemos GRIDP (CATCH ALL) tal cual como se muestra en la gura 1.3. Figura 1.3: Selección de GRID. 9 Finalmente llenamos la caja de Text verication con los mismos carácteres alfanu- mericos que aparecen encima de la caja. Le damos click en send y listo. Ver gura 1.4. Después de esto esperaremos a que el administrador del sistema del portal GATE de Figura 1.4: Vericación de texto y click en enviar. GISELA nos envíe dos correos electrónicos. Uno de conrmación, y el otro con la cuenta de usuario y la contraseña. 10 1.2. Ingresando al portal Para ingresar al portal nuevamente abrimos la página web https://gisela-gw.ct.infn.it/gate y esta vez damos click en sign in tal como se muestra en la gura 1.5 Figura 1.5: Ingreso al portal de GATE. 11 Federation escojemos GrIDP IDPCT (INFN Catania and COMETA), tal como se muestra en la gura 1.6, damos click en Select y listo. luego en la siguiente página que se abre escojemos en (catch-all) y en Organization escojemos Figura 1.6: Escojencia de la federación y de la organización. 12 Ahora nos aparecerá una página en donde ingresaremos nuestro usuario y contraseña, damos click en login y listo. Ver gura 1.8. Figura 1.7: A tan solo un click. 13 Una vez dentro de GATE, veremos en la parte superior de la página una barra gris con nuestro nombre al lado derecho. Figura 1.8: Adentro del portal de GATE de GISELA. 1.3. Reconociendo el entorno del portal de ciencia GISELA/GATE Una vez estando adentro de GATE como se muestra en la gura 1.8, el usuario Science Gateways una lista empezando por Home, y seguido de las categorías de los portales de ciencias Life Science, Industry, y Mathematics. En la parte más abajo de la misma columna está el link de historias exitosas Success Stories. En este instante nosotros estamos en la categoría de Life Science, y como podemos ver, en la subcategoría de GATE. podrá ver en la columna de la izquierda bajo el título de 1.3.1. My Workspace ) Mi Espacio de Trabajo ( Siguiendo en la misma página web podemos ver al lado inferior izquierdo un recuadro My Workspace, ahí veremos 4 links que son: My jobs, My JobsMap, MyData, y MyHelp. Si damos click en MyJobs como se muestra en la gura 1.9 nos enviará con el título de a una página en donde podemos ver nuestros trabajos ordenados en dos listas, una lista 14 Figura 1.9: Dando click en de trabajos activos MyJobs. Active Jobs List, y otra de trabajos hechos Done Jobs List. Por Active Jobs List. Si queremos cambiar de lista de trabajos, solo pestaña correspondiente. En My Workspace también podemos ac- defecto entraremos a daremos click en la ceder a MyJobsMap, en donde podemos ver el mapa en google maps del sitio del planeta en donde esta o estan corriendo nuestros trabajos. Por ejemplo, actualmente podemos ver en la gura 1.10 que tengo un trabajo corriendo en una de las máquinas ubicadas My Workspace también podemos acceder MyHelp, páginas que actualmente estan bajo construcción. Actualmente en Rio de Janeiro Brasil. Finalmente, desde a MyData y a para poder ver nuestros datos resultantes de las simulaciones y análisis, tenemos que descargar nuestros datos desde el link MyJobs, Active Jobs List, dando click en status. Hay que tener cuidado con los datos que descarguemos desde el portal, porque una vez descargado una sola vez, entonces los datos serán borrados de la GRID. 15 Figura 1.10: Viendo en que lugar del mundo andan corriendo nuestros trabajos. Actualmente hay un trabajo corriendo en Rio de Janeiro, y lo podemos observar en el mapa con un punto azul. 1.4. Enviando traba jos a la GRID Para enviar trabajos a la GRID de GISELA, iremos a la página web https://gisela-gw.ct.infn.it/run-gate una vez allí observaremos tres cajas requiriendo tres tipos de códigos, uno es de tipo .mac, el otro de tipo GATE Material Database con extensión .db, y el tercero que es de tipo ROOT con extensi« .C. En la parte de abajo GATE Macro File y tiene extensión de la página encontraremos varios botones, que son: About. Si uno da click en el botón Demo Demo, Submit, Reset Values, y se llenarán todos los campos de los tres tipos Reset Values, botón Submit se de códigos con un trabajo demostrativo de GATE. Si damos click en dejaremos en blanco las tres cajas que contienen al código Demo. El usa para enviar nuestros códigos a la GRID. Para probar este botón, daremos click en Demo y luego en Submit. Una vez enviado, podremos ver el estatus de nuestro trabajo My Workspace, click en MyJobs, click en Active Jobs List. Cuando el trabajo haya en nalizado se podrán bajar los datos resultantes. 16 Capítulo 2 MÓDULO 2 En este módulo veremos las partes más importantes presentes en un código de GATE, mediante el análisis de varios códigos. El primer código que analizaremos será el código Demo, luego analizaremos otro ejemplo. Debido a que GATE es basado en GEANT4, todos los aspectos referentes a la geometría de los sistemas detectores, los procesos físicos involucrados en las interacciones de las partículas, y la generación de los eventos primarios, pueden ser leidos desde el manual de GEANT4 presente en [1], y más especicamente en el apartado que trata sobre el modo intercoms. 2.1. Procesos Físicos en GATE/GEANT4 PhotoElectric, (Fotoeléctrico): es la absorción de un fotón por un electrón atómico con la eyección de este electrón desde el átomo. La energía del electrón saliente es: E = hν − L donde L (2.1) en la energía de enlace del electrón. Debido a que un electrón libre no puede absorber un fotón y conservar momentum, el efecto fotoeléctrico siempre ocurre sobre electrones ligados al mismo tiempo que el núcleo absorbe el culetazo de momentum. El cálculo de la sección ecáz es compleja debido a la combinación de funciones de ondas de Dirac, por eso es simulada usando una absorción del fotón parametrizada para determinar varias cantidades, entre ellas el camino libre medio o longitud de interacción, dada por λ(E) = P i con ni σ(Zi , E) siendo la sección ecáz y Zi 1 , ni σ(Zi , E) (2.2) el número de átómico del átomo i-ésimo, y el número de átomos de tipo i. Y también para determinar los datos de las cáscaras atómicas para determinar la energía del electrón eyectado, y la distribución angular de cáscara K para muestrear la dirección del electrón. La sección ecáz depende del número atómico Z del material. El efecto fotoeléctrico tiende a aumentar para materiales de 17 Z grande. En la implementación actual la relajación del átomo no es simulada, en lugar de eso, se toma como un depósito de energía local. Para procesos de baja energía, la des-excitación del átomo es simulada. Compton, (Efecto Compton) El efecto Compton describe el dispersión de un fotón con electrones libres. Aunque los electrones son ligados a la matería, los electrones pueden ser considerados libres por fotones con energía mucho mayor a la energía de enlace de los electrones ligados. En la simulación se usa un formula empírica para la sección ecaz, la cual reproduce la sección ecaz de los datos que esten por debajo de 10 keV. El estado nal es generado mediante la formula de Klein-Nishina. Para fotones incidentes de bajas energías, la simulación de la dispersión de Compton es realizada usando el mismo procedimiento usado para la simulación de la dispersión de Compton estándar además de que el factor de forma atómico de Hubbel es tenido en cuenta. La distribución de energía y la ángular del fotón incoherentemente dispersado viene dado por el producto de la formula de Klein-Nishina y la función de dispersión. Rayleigh Scattering, (Dispersión de Rayleigh) La dispersión de Thomson y de Rayleigh estan ligadas a la dispersión de Compton. La dispersión de Thomson es similar a la dispersión de Compton en el límite clásico i.e. la dispersión de los fotones por electrones libres. Para la dispersión de Rayleigh, todos los electrones del átomo contribuyen de manera coherente. Para estos procesos, no se transere energía al blanco. La dirección del fotón es el único parámetro modicado. Los átomos no son excitados ni ionizados. A altas energías las secciones ecaces de las dispersiones de Thomson y de Rayleigh son muy pequeñas y por ende despreciadas. Por estas razones, el proceso Rayleigh es denido solamente para modelos low energy 1 2 y Penelope . Pair Production, (Producción de Pares) El proceso de producción de pares describe la transformación de un fotón en un par electrón-positrón. Para conservar momentum, la producción de pares solo puede ocurrrir en presencia de un tercer cuerpo, usualmente un núcleo. La mínima energía requerida para crear un par es igual a la suma de la masa del electrón y la masa del positrón (1.022 MeV). Ionisation, (Ionización) Una partícula cargada que pasa a trávez de la materia pierde energía debido a la colisión inelástica con los electrones atómicos del material. Esta energía es transferida al átomo para generar ionización o excitación. La perdida de energía de ionización es calculada usando la formula de Bethe-Bloch. La energía perdida por la partícula E es dividida en perdida de energía continua y producción de electrones secundarios. El umbral de 1 Energías 2 Energías entre 250 eV y 100 GeV entre 250 eV y 1 GeV 18 producción es denido como la mínima energía necesaria para que las partículas secundarias sean producidas y trazadas. Cuando energía continua, y cuando E>E umbral E<E umbral , E es incluida en la perdida de se producirán electrones secundarios. Perdida de energía proveniente de la excitación será incluida en la perdida de ebergía continua. El potencial de excitación promedio I es el parámetro principal de la formula de Bethe- Bloch. Este potencial puede ser denido por el usuario para cada material. Bremsstrahlung Bremsstrahlung es una palabra compuesta que viene del alemán cuyas partes Brems y Strahlung signican frenado y radiación respectivamente. Más precisamente bremsstrahlung es radiación electromagnética por frenado de una partícula cargada. Generalmente un núcleo es el causante de este frenado. La sección ecaz de bremsstrahlung es inversamente proporcional al cuadrado de la masa. Por lo tanto este proceso es bastante importante para electrones y postitrones que tienen masa pequeña. Si la energía perdida por bremsstrahlung E está por encima de un umbral, se simula que E causa la producción de fotones. Debajo del umbral, la emisión de fotones suaves es tratada como una perdida continua de energía. El espectro de energía del bresstrahlung es continuo. Positron and Electron Annihilation, (Aniquilación de Positrón y Electrón) Es el proceso en donde un electrón y un positrón se aniquilan y producen fotones. Usualmente se asume en programas de duchas (showers) que el electrón atómico esta inicialmente libre y en reposo y que luego es atado al positrón. Además se desprecian procesos en donde la aniquilación del par produce uno o tres fotones, debido a que la probabilidad de que se produzcan dos fotones es mucho mas elevada. Single and Multiple Scattering, (Dispersión Simple y Multiple) Las partículas cargadas además de presentar dispersión inelástica, también pueden sufrir dispersiones de Coulomb desde los nucleos. Las secciones ecaces elásticas es enorme cuando la energía de la partícula decrece, asi que dispersión multiple MSC debería ser introducida para tener rendimiento de CPU de la simulación aceptable. El modelo MSC usado en GEANT4 pertenece a la clase de algoritmos condensados en los cuales, los efectos globales de las colisiones son simuladas al nal de un segmento de traza (paso). Los efectos globales generalmente computados en estos códigos son el desplazamiento neto, la perdida de energía, y el cambio de dirección de la partícula cargada. El modelo es basado en la teoría MSC de Lewis y usa funciones del modelo para determinar las distribuciones angular y espacial después de un paso. Las funciones han sido escogidas tal que den los mismos momentos de las distribuciones como en la teoría de Lewis. 2.2. El código Demo Echemos un vistazo en el código Demo, más precisamente el código macro_file.mac que es en donde se encuentra el esqueleto principal de la simulación 19 Computed Tomographs ). de los CTs ( GATE con extensión .mac Lo primero que debemos saber de los códigos de es que, si al principio de una linea encontramos el caracter # signica que esa linea es un comentario, i.e., que el computador no va a ejecutar esta linea. Así que las lineas 1-3, 7-9, 35-37, 53-55, 58, 61-63, 65, 67, 69, 78, 81, 86, 104, y 106, no van a ser ejecutadas por el computador. Las líneas en blanco tampoco son ejecutadas por el computador. Los comentarios sirven como guias para el programador. La usanza es que hacemos un comentario sobre el tema del código que viene a continuación, ó, alguna explicación explicita de lo que esta haciedo la línea siguiente. Podemos ver en las líneas 4-6 del código puso ningún tipo de código de Visualisation. macro_file.mac que el autor no Desde las líneas 11 a la 51 todo lo que está puesto allí es de carácter obligatorio en un código GATE (Característica heredada de GEANT4). Para ser mas claros, en todo código GATE debemos especicar la geometría del detector, los procesos físicos involucrados en la simulación, y la conguración inicial de los eventos generados. La línea 11 del código llama a la base de datos de materiales de GATE, que veremos con detalle más adelante. Más precisamente la linea dice: /gate/geometry/setMaterialDatabase GateMaterials.db, que incluiremos el archivo de gate. GateMaterials.db que signica a la base da datos de la categoría La mayoría de comandos en GATE comienzan con el prejo geometry /gate/. Las ge- ometrías en GATE son hechas a partir de un conjunto de volúmenes. El volúmen mas grande es el llamado volúmen Mundo que en inglés es World. El debe contener todos los demás volúmenes de la geometría del detector. Los demás volúmenes son creados y World. La forma World, es una caja. Cada volúmen es creado describiendo su puestos dentro de volúmenes previos, todos incluidos en el volúmen más simple de describir el forma y sus características físicas y colocandolos dentro de su volúmen contenedor. Al volúmen contenedor se le llamará la madre y el volúmen contenido se llamará la hija que en inglés es Daughter. El sistema coordenado para especicar en donde la hija irá colocada, es el sistema coordenado de la madre. Para describir la forma de un volúmen, usaremos el concepto de sólido. Un sólido es un objeto geométrico que tiene una forma y valores especícos para cada una de las dimensiones de la forma. Para describir completamente un volúmen usaremos el concepto de volúmen lógico. Un volúmen lógico incluye tanto propiedades geométricas, como propiedades físicas, como por ejemplo: el material del volúmen, si el contiene elementos sensibles de detección, el campo magnético, etc. En ese sentido la línea 11 le da a GATE toda una base de datos de deniciones de materiales para ayudar a crear volúmenes lógicos. En el código macro_file.mac el mundo es un sólido tipo paralelepipedo (caja) con dimensiones dadas por las líneas 14-16. El comando de la línea 14 /gate/world/geometry/setXlength 200 cm crea los limites en el eje cm hasta x = 200 x de la caja del mundo, los limites irán desde cm, siendo la longitud total en x x = −200 del mundo de 400 cm. La misma discusión queda igual para los comandos en y , y z de las líneas 15 y 16. Al nal tenemos 3 3 que el volumen del mundo es de 2 · 200 · 300 · 200 cm . La línea 17 /gate/world/setMaterial Vacuum 20 nos dice que el mundo esta relleno del material llamado Vacío, en inglés Vacuum. Con esto ya tenemos creado el volúmen lógico del mundo de nuestra simulación. En las líneas 19 y 20 /gate/world/daughters/name target /gate/world/daughters/insert box se le da un nombre a una hija de del mundo de la simulación, esta hija se llama target. También se especica el tipo de sólido que és esta hija. La línea que inserta la caja (línea 20) debe ir inmediatamente después de la línea que especica el nombre de la hija (línea 19). La línea 21 especica el que target esta hecha de aluminio. Las líneas 22-24 especican las medidas de target. En la línea 25 /gate/target/placement/setTranslation 0 0 0 mm se le dice a GATE en donde colocar a target dentro de mundo, en este caso el centro de target coincide con el centro de world. También podría decirle a GATE que ubique el centro de target en otra posición distinta al centro de world, digamos en la posición x=5 mm, y = −1 mm, y z=1 mm. Entonces el comando sería /gate/target/placement/setTranslation 5 -1 1 mm. Ademas de trasladar a target dentro de world, también podemos rotarlo. Esta caracteristica la veremos más adelante. En las líneas 27-33 se crea otra hija llamada PhSp, la cual es una caja hecha de vacio. Sus longitudes estan especicadas en las líneas 30,31, y 32; y el centro de PhSp esta en (0,-0.11,0)cm. Las líneas 39-41 /gate/physics/addProcess PhotoElectric /gate/physics/addProcess Compton /gate/physics/addProcess GammaConversion adicionan los procesos físicos que sufren los fotones a la lista de procesos, mientras que las líneas 43-45 /gate/physics/addProcess ElectronIonisation /gate/physics/addProcess Bremsstralung /gate/physics/addProcess PositronAnnihilationStd y 47-48 /gate/physics/addProcess MultipleScattering e+ /gate/physics/addProcess MultipleScattering eadicionan los procesos físicos que afectan a los electrones y a sus antipartículas los positrones, a la lista de procesos. La línea 50 habilita la lista de procesos, mientras que la línea 51 la inicializa. 21 La línea 70 adiciona el actor PhS_g, el cual es un actor de tipo PhaseSpaceActor. Los actores son herramientas que permiten interactuar con la simulación. Ellos pueden coleccionar información durante la simulación, tal como la energía depositada, el número de partículas creadas en un volumen dado, etc. Ellos también pueden modicar el comportamiento de la simulación. Los actores usan ganchos en la simulación: run (begin/end), event(begin/end), track(begin/end), step. Hay diferentes tipos de actores que coleccionan diferentes tipos de información, sin embargo algunos comandos y comportamientos son comunes a todos los actores. Para usar el criterio de selección, también es posible adicionar ltros. La línea 71 amarra PhS_g a la hija PhSp; sino se amarrara especicamente a ningún volumen, entonces por defecto se hubiera amarrado a todos los volumenes presentes en la simulación. El actor PhS_g salva la información en el archivo de salida phsp.root. También es posible salvar la información con alguno de los siguientes comandos: /gate/actor/PhS_g/saveEveryNEvents [N] /gate/actor/PhS_g/saveEveryNSeconds [N] siendo [N] un número dado por el usuario. Las líneas 73-77 permiten grabar en el archivo de salida phsp.root, el nombre de la partícula, el nombre del volumen en donde la partícula fue producida, el proceso que produjo la partícula, usa el marco de referencia del volumen al que fue amarrado el actor en lugar del mundo, y la posición en Z. La línea 83 deshabilita la creación del archivo de salida en formato .dat. La lína 84 inicializa los 4 pasos del modo de pre-inicialización. Los 4 pasos de preinicialización son: 1. Verborrea y Visualisación. 2. Geometría. 3. Digitalizador. 4. Física. Toda simulación en GATE consta de los pasos anteriores mas los siguientes: 5. Fuentes. 6. Salidas. 7. Experimento. En este código vemos que se hizo el paso de las Salidas antes de llamar al comando de la línea 84. Esto no afecta en absoluto el buen comportamiento del código. Los 7 pasos anteriormente descritos pueden ser leídos en [2]. 22 Las líneas 89-102 89 90 91 92 93 94 95 96 97 98 99 100 101 102 /gate/source/addSource electron_beam gps /gate/source/electron_beam/gps/particle e/gate/source/electron_beam/gps/ene/mono 6.0 MeV /gate/source/electron_beam/gps/angtype iso /gate/source/electron_beam/gps/posrot1 1 0 0 /gate/source/electron_beam/gps/posrot2 0 0 1 /gate/source/electron_beam/gps/mintheta 0 deg /gate/source/electron_beam/gps/maxtheta 0 deg /gate/source/electron_beam/gps/minphi 90 deg /gate/source/electron_beam/gps/maxphi 90 deg /gate/source/electron_beam/gps/type Plane /gate/source/electron_beam/gps/shape Circle /gate/source/electron_beam/gps/radius 1.0 cm /gate/source/electron_beam/gps/centre 0 10 0 cm realizan el paso de las Fuentes. En 89 se adiciona una fuente llamada electron_beam de tipo gps (General Particle Source). En la línea 90 establece que la fuente es de tipo partícula y que emite electrones. La línea 91 dice que la energía de los electrones es monoenergética y es igual a 6 Mega electrón Voltios. La línea 92 que la distribución angular de los ángulos de emisión es istrópica. Las líneas 93 y 94 dice que la supercie incidente está en el plano xz . Las líneas 95 y 96 nos dan un rango para el ángulo de dirección de los electrones incidentes, en este caso jados a θ es el ángulo polar de coordenadas esféricas, El ángulo θ θ = 0. Debido a que puede variar entre 0 y 180 grados. Las líneas 97 y 98 nos dan un rango para el ángulo azimutal, en este caso es igual a 90 grados. El ángulo azimutal generalmente puede variar entre 0 y 360 grados. Esto es importante tenerlo en cuenta, en ROOT, el ángulo azimutal varía entre -180 y 180. De las líneas 95-98 podemos concluir que las partículas se dirigen en dirección (x = 0, y = 0, z = |r|). Las líneas 99-102 nos dan el tipo, la forma y las dimensiones de la forma desde donde los electrones son emitidos, en este caso la fuente de electrones es un plano circular de radio de 1 cm y centro (0,10,0) cm. Las líneas 108 y 109 establecen el nombre de la máquina (algoritmo) generadora de números aleatorios, y le da un valor a la semilla. Las líneas 112 y 113 establecen la verborrea de la salida estándar [3] de la parte que trata con la generación de números aleatorios a activa, y la que trata con las fuentes a inactiva. La línea 116 establece el número de eventos a 1200. Esto puede ser hecho debido a que las fuentes no son radioactivas. La línea 118 comienza la simulación. 1 ################### 2 # Visualisation # 3 ################### 4 23 5 6 7 ##################### 8 # Mandatory fGate # 9 ##################### 10 11 / g a t e / geometry / s e t M a t e r i a l D a t a b a s e G a t e M a t e r i a l s . db 12 13 14 / g a t e / world / geometry / setXLength 200 cm 15 / g a t e / world / geometry / setYLength 300 cm 16 / g a t e / world / geometry / s etZL ength 200 cm 17 / g a t e / world / s e t M a t e r i a l Vacuum 18 19 / g a t e / world / d a u g h t e r s /name t a r g e t 20 / g a t e / world / d a u g h t e r s / i n s e r t box 21 / g a t e / t a r g e t / s e t M a t e r i a l Aluminium 22 / g a t e / t a r g e t / geometry / setXLength 5 cm 23 / g a t e / t a r g e t / geometry / setYLength 0 . 1 cm 24 / g a t e / t a r g e t / geometry / setZ Lengt h 5 cm 25 / g a t e / t a r g e t / placement / s e t T r a n s l a t i o n 0 0 0 mm 26 27 / g a t e / world / d a u g h t e r s /name PhSp 28 / g a t e / world / d a u g h t e r s / i n s e r t box 29 / g a t e /PhSp/ s e t M a t e r i a l Vacuum 30 / g a t e /PhSp/ geometry / setXLength 10 cm 31 / g a t e /PhSp/ geometry / setYLength 1 nm 32 / g a t e /PhSp/ geometry / setZ Lengt h 10 cm 33 / g a t e /PhSp/ placement / s e t T r a n s l a t i o n 0 − 0.11 0 cm 34 35 ############# 36 # P h y s i c s # 37 ############# 38 39 / g a t e / p h y s i c s / a d d P r o c e s s P h o t o E l e c t r i c 40 / g a t e / p h y s i c s / a d d P r o c e s s Compton 41 / g a t e / p h y s i c s / a d d P r o c e s s GammaConversion 42 43 / g a t e / p h y s i c s / a d d P r o c e s s E l e c t r o n I o n i s a t i o n 44 / g a t e / p h y s i c s / a d d P r o c e s s B r e m s s t r a h l u n g 45 / g a t e / p h y s i c s / a d d P r o c e s s P o s i t r o n A n n i h i l a t i o n S t d 46 47 / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e+ 48 / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e− 49 50 / g a t e / p h y s i c s / p r o c e s s L i s t Enabled 51 / g a t e / p h y s i c s / p r o c e s s L i s t I n i t i a l i z e d 52 53 ########## 54 # Cuts # 55 ########## 56 24 57 58 #/ g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion phantom 0 . 0 1 0 mm 59 60 61 ############## 62 # Step Max # 63 ############## 64 65 #/ g a t e / p h y s i c s / SetMaxStepSizeInRegion phantom 0 . 0 1 0 mm 66 67 # ACTORS 68 69 #/ g a t e / output / allowNoOutput 70 / g a t e / a c t o r / addActor PhaseSpaceActor PhS_g 71 / g a t e / a c t o r /PhS_g/ attachTo PhSp 72 / g a t e / a c t o r /PhS_g/ s a v e phsp . r o o t 73 / g a t e / a c t o r /PhS_g/ e n a b l e P a r t i c l e N a m e true 74 / g a t e / a c t o r /PhS_g/ enableProductionVolume true 75 / g a t e / a c t o r /PhS_g/ e n a b l e P r o d u c t i o n P r o c e s s true 76 / g a t e / a c t o r /PhS_g/ useVolumeFrame true 77 / g a t e / a c t o r /PhS_g/ e n a b l e Z P o s i t i o n true 78 #/ g a t e / a c t o r /PhS_g/ saveEveryNSeconds 120 79 80 81 # INITIALIZE 82 83 / g a t e / output / a s c i i / d i s a b l e 84 / g a t e / run / i n i t i a l i z e 85 86 # SOURCE 87 88 89 / g a t e / s o u r c e / addSource electron_beam gps 90 / g a t e / s o u r c e / electron_beam / gps / p a r t i c l e e− 91 / g a t e / s o u r c e / electron_beam / gps / ene /mono 6 . 0 MeV 92 / g a t e / s o u r c e / electron_beam / gps / angtype i s o 93 / g a t e / s o u r c e / electron_beam / gps / p o s r o t 1 1 0 0 94 / g a t e / s o u r c e / electron_beam / gps / p o s r o t 2 0 0 1 95 / g a t e / s o u r c e / electron_beam / gps / mintheta 0 deg 96 / g a t e / s o u r c e / electron_beam / gps / maxtheta 0 deg 97 / g a t e / s o u r c e / electron_beam / gps / minphi 90 deg 98 / g a t e / s o u r c e / electron_beam / gps / maxphi 90 deg 99 / g a t e / s o u r c e / electron_beam / gps / type Plane 100 / g a t e / s o u r c e / electron_beam / gps / shape C i r c l e 101 / g a t e / s o u r c e / electron_beam / gps / r a d i u s 1 . 0 cm 102 / g a t e / s o u r c e / electron_beam / gps / c e n t r e 0 10 0 cm 103 104 # R A N D OM 105 106 # JamesRandom Ranlux64 MersenneTwister 107 108 / g a t e /random/ setEngineName MersenneTwister 25 109 110 111 112 113 114 115 116 117 118 / g a t e /random/ s e t E n g i n e S e e d 1988588 / g a t e /random/ v e r b o s e 1 / gate / source / verbose 0 / g a t e / a p p l i c a t i o n / setTotalN umberOfP rimaries 1200 / gate / a p p l i c a t i o n / s t a r t 2.3. Gate- La base de datos de materiales de GATE Materials.db Casi todos los códigos en GATE llaman al archivo GateMaterials.db el cual especica las deniciones de algunos elementos químicos, algunos materiales de tipo biológico y humano. Esta base de datos dene dos grandes grupos de objetos: desde la línea 1 hasta la 48 se denen los elementos químicos de la tabla periódica más frecuentemente usados en las simulaciones de GATE. Desde la línea 49 hasta la línea 692 se denen los materiales más usados en GATE. La sintaxis para denir un elemento químico es la siguiente: [nombre]: S=[Símbolo]; Z=[Número Atómico]; A=[Masa Atómica en g/mole] g/mole Mientras que la sintaxis para denir un material en estado gaseoso es la siguiente: 3 [nombre]: d=[densidad en g/cm ] g/cm3; n=[Nelementos ] +el: name=[elemento químico 1]; n=[Nel. quim. 1 ] n=[Nel. quim. Nelementos ... +el: name=[elemento químico Nelementos ]; ] . Si el material se encuentra en estado líquido o sólido se agrega un valor extra a la primera línea. Por ejemplo para un material en estado sólido: 3 [nombre]: d=[densidad en g/cm ] g/cm3; +el: name=[elemento químico 1]; n=[Nelementos ]; state=solid n=[Nel. quim. 1 ] n=[Nel. quim. Nelementos ... +el: name=[elemento químico Nelementos ]; ] . Un elemento químico también puede ser un material, por ejemplo ver las líneas 53 y 54 para la denición del Aluminium como un material. Para nalizar esta discusión vale la pena decir que uno puede agregar nuevos tipos de materiales a este archivo. 26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 [ Elements ] Hydrogen : Helium : Lithium : Beryllium : Boron : Carbon : Nitrogen : Oxygen : Fluorine : Neon : Sodium : Magnesium : Aluminium : Silicon : Phosphor : Sulfur : Chlorine : Argon : Potassium : Calcium : Scandium : Titanium : Vandium : Chromium : Manganese : Iron : Cobalt : Nickel : Copper : Zinc : Gallium : Germanium : Yttrium : Cadmium : Tin : Tellurium : Iodine : Cesium : Gadolinium : Lutetium : Tantalum : Tungsten : Thallium : Lead : Bismuth : Uranium : S= H S= He S= Li S= Be S= B S= C S= N S= O S= F S= Ne S= Na S= Mg S= Al S= S i S= P S= S S= Cl S= Ar S= K S= Ca S= Sc S= Ti S= V S= Cr S= Mn S= Fe S= Co S= Ni S= Cu S= Zn S= Ga S= Ge S= Y S= Cd S= Sn S= Te S= I S= Cs S= Gd S= Lu S= Ta S= W S= Tl S= Pb S= Bi S= U ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= Z= 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 39. 48. 50. 52. 53. 55. 64. 71. 73. 74. 81. 82. 83. 92. ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= A= 1.01 4.003 6.941 9.012 10.811 12.01 14.01 16.00 18.998 20.180 22.99 24.305 26.98 28.09 30.97 32.066 35.45 39.95 39.098 40.08 44.956 47.867 50.942 51.996 54.938 55.845 58.933 58.693 63.39 65.39 69.723 72.61 88.91 112.41 118.71 127.6 126.90 132.905 157.25 174.97 180.95 183.84 204.37 207.20 208.98 238.03 [ Materials ] Vacuum : d =0.000001 mg/cm3 ; n=1 +e l : name=Hydrogen ; n=1 27 g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g/ mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole g / mole 52 53 Aluminium : d=2.7 g /cm3 ; n=1 ; s t a t e=s o l i d 54 +e l : name=auto ; n=1 55 56 Copper : d=8.92 g /cm3 ; n=1 ; s t a t e=s o l i d 57 +e l : name=auto ; n=1 58 59 B e r y l l i u m : d=1.85 g /cm3 ; n=1 ; s t a t e=s o l i d 60 +e l : name=auto ; n=1 61 62 Uranium : d =18.90 g /cm3 ; n=1 ; s t a t e=s o l i d 63 +e l : name=auto ; n=1 64 65 S i l i c o n : d=2.33 g /cm3 ; n=1 ; s t a t e=s o l i d 66 +e l : name=auto ; n=1 67 68 Germanium : d=5.32 g /cm3 ; n=1 ; s t a t e=s o l i d 69 +e l : name=auto ; n=1 70 71 Yttrium : d=4.47 g /cm3 ; n=1 72 +e l : name=auto ; n=1 73 74 Gadolinium : d=7.9 g /cm3 ; n=1 75 +e l : name=auto ; n=1 76 77 Lutetium : d=9.84 g /cm3 ; n=1 78 +e l : name=auto ; n=1 79 80 Tantalum : d =16.65 g /cm3 ; n=1 ; s t a t e=s o l i d 81 +e l : name=auto ; n=1 82 83 Tungsten : d=19.3 g /cm3 ; n=1 ; s t a t e=s o l i d 84 +e l : name=auto ; n=1 85 86 Lead : d=11.4 g /cm3 ; n=1 ; s t a t e=s o l i d 87 +e l : name=auto ; n=1 88 89 Bismuth : d=9.75 g/cm3 ; n=1 ; s t a t e=s o l i d 90 +e l : name=auto ; n=1 91 92 NaI : d=3.67 g /cm3 ; n=2; s t a t e=s o l i d 93 +e l : name=Sodium ; n=1 94 +e l : name=I o d i n e ; n=1 95 96 PWO: d=8.28 g /cm3 ; n=3 ; s t a t e=S o l i d 97 +e l : name=Lead ; n=1 98 +e l : name=Tungsten ; n=1 99 +e l : name=Oxygen ; n=4 100 101 BGO: d=7.13 g /cm3 ; n= 3 ; s t a t e=s o l i d 102 +e l : name=Bismuth ; n=4 103 +e l : name=Germanium ; n=3 28 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 +e l : name=Oxygen ; n=12 LSO : d=7.4 g /cm3 ; n=3 ; s t a t e=S o l i d +e l : name=Lutetium ; n=2 +e l : name=S i l i c o n ; n=1 +e l : name=Oxygen ; n=5 GSO: d=6.7 g /cm3 ; n=3 ; s t a t e=S o l i d +e l : name=Gadolinium ; n=2 +e l : name=S i l i c o n ; n=1 +e l : name=Oxygen ; n=5 LuAP : +e l +e l +e l d=8.34 g /cm3 ; n=3 ; s t a t e=S o l i d : name=Lutetium ; n=1 : name=Aluminium ; n=1 : name=Oxygen ; n=3 YAP: d=5.55 g /cm3 ; n=3 ; s t a t e=S o l i d +e l : name=Yttrium ; n=1 +e l : name=Aluminium ; n=1 +e l : name=Oxygen ; n=3 Water : d=1.00 g /cm3 ; n=2 ; s t a t e=l i q u i d +e l : name=Hydrogen ; n=2 +e l : name=Oxygen ; n=1 Quartz : d=2.2 g /cm3 ; n=2 ; s t a t e=S o l i d +e l : name=S i l i c o n ; n=1 +e l : name=Oxygen ; n=2 Kapton : d=1.42 g /cm3 ; n=4 +e l : name=Hydrogen ; f =0.026362 +e l : name=Carbon ; f =0.691133 +e l : name=N i t r o g e n ; f =0.07327 +e l : name=Oxygen ; f =0.209235 Mylar : d=1.4 g /cm3 ; n=3 +e l : name=Hydrogen ; f =0.041958 +e l : name=Carbon ; f =0.625017 +e l : name=Oxygen ; f =0.333025 ZA8 : d=6.34 g /cm3 ; n=3; s t a t e=s o l i d +e l : name=Aluminium ; f =0.084 +e l : name=Z i n c ; f =0.906 +e l : name=Copper ; f =0.01 AluT6 : +e l : +e l : +e l : +e l : d=2.7 g /cm3 ; n=4; s t a t e=s o l i d name=Aluminium ; f =0.986 name=I r o n ; f =0.007 name=Copper ; f =0.004 name=Chromium ; f =0.003 29 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 C e r r o t r u : d=8.72 g /cm3 ; n=2 ; s t a t e=S o l i d +e l : name=Bismuth ; f =0.58 +e l : name=Tin ; f =0.42 B r e a s t : d =1.020 g/cm3 ; n = 8 +e l : name=Oxygen ; f =0.5270 +e l : name=Carbon ; f =0.3320 +e l : name=Hydrogen ; f =0.1060 +e l : name=N i t r o g e n ; f =0.0300 +e l : name=S u l f u r ; f =0.0020 +e l : name=Sodium ; f =0.0010 +e l : name=Phosphor ; f =0.0010 +e l : name=C h l o r i n e ; f =0.0010 Air : d=1.29 mg/cm3 ; n=4 ; s t a t e=g a s +e l : name=N i t r o g e n ; f =0.755268 +e l : name=Oxygen ; f =0.231781 +e l : name=Argon ; f =0.012827 +e l : name=Carbon ; f =0.000124 Air2 : +e l +e l +e l +e l : : : : d=2.58 mg/cm3 ; n=4 ; s t a t e=g a s name=N i t r o g e n ; f =0.755268 name=Oxygen ; f =0.231781 name=Argon ; f =0.012827 name=Carbon ; f =0.000124 Glass : +e l : +e l : +e l : +e l : d=2.5 g /cm3 ; n=4; s t a t e=s o l i d name=Sodium ; f =0.1020 name=Calcium ; f =0.0510 name=S i l i c o n ; f =0.2480 name=Oxygen ; f =0.5990 Plexiglass : +e l +e l +e l d=1.19 g /cm3 ; n=3; s t a t e=s o l i d : name=Hydrogen ; f =0.080538 : name=Carbon ; f =0.599848 : name=Oxygen ; f =0.319614 S c i n t i −C9H10 : d =1.032 g /cm3 ; n=2 +e l : name=Carbon ; n=9 +e l : name=Hydrogen ; n=10 LuYAP− 70: d=7.1 g /cm3 +e l : name=Lutetium ; +e l : name=Yttrium ; +e l : name=Aluminium ; +e l : name=Oxygen ; ; n=4 n= 7 n= 3 n=10 n=30 LuYAP− 80: d=7.5 g /cm3 +e l : name=Lutetium ; +e l : name=Yttrium ; +e l : name=Aluminium ; +e l : name=Oxygen ; ; n=4 n= 8 n= 2 n=10 n=30 30 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 Plastic : d=1.18 g /cm3 ; n=3; s t a t e=s o l i d +e l : name=Carbon ; n=5 +e l : name=Hydrogen ; n=8 +e l : name=Oxygen ; n=2 Paraffine : +e l +e l +e l CZT: d=5.68 +e l : +e l : +e l : Lung : +e l +e l +e l +e l +e l +e l d=0.8 g /cm3 ; n=3; s t a t e=s o l i d : name=Carbon ; n=5 : name=Hydrogen ; n=8 : name=Oxygen ; n=2 : : : : : : g /cm3 ; n=3; s t a t e=s o l i d name=Cadmium ; n=9 name=Z i n c ; n=1 name=T e l l u r i u m ; n=10 d=0.26 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.103 name=Carbon ; f =0.105 name=N i t r o g e n ; f =0.031 name=Oxygen ; f =0.749 name=Sodium ; f =0.002 name=Phosphor ; f =0.002 name=S u l f u r ; f =0.003 +e l : name=C h l o r i n e ; f =0.003 +e l : name=Potassium ; f =0.002 P o l y e t h y l e n e : d=0.96 g /cm3 ; n=2 +e l : name=Hydrogen ; n=2 +e l : name=Carbon ; n=1 PVC: d=1.65 +e l : +e l : +e l : g /cm3 ; n=3 ; s t a t e=s o l i d name=Hydrogen ; n=3 name=Carbon ; n=2 name=C h l o r i n e ; n=1 SS304 : d=7.92 g /cm3 ; n=4 +e l : name=I r o n +e l : name=Chromium +e l : name=N i c k e l +e l : name=Manganese ; ; ; ; ; s t a t e=s o l i d f =0.695 f =0.190 f =0.095 f =0.020 PTFE: d= 2 . 1 8 g /cm3 ; n=2 ; s t a t e=s o l i d +e l : name=Carbon ; n=1 +e l : name=F l u o r i n e ; n=2 LYSO : d=5.37 g /cm3 ; n=4 ; s t a t e=S o l i d +e l : name=Lutetium ; f =0.31101534 +e l : name=Yttrium ; f =0.368765605 +e l : name=S i l i c o n ; f =0.083209699 +e l : name=Oxygen ; f =0.237009356 31 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 Body : d=1.00 g /cm3 ; n=2 +e l : name=Hydrogen +e l : name=Oxygen Muscle : d=1.05 g /cm3 ; n=9 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=C h l o r i n e +e l : name=Potassium ; f =0.112 ; f =0.888 ; ; ; ; ; ; ; ; ; f =0.102 f =0.143 f =0.034 f =0.71 f =0.001 f =0.002 f =0.003 f =0.001 f =0.004 LungMoby : d=0.30 g /cm3 ; n=6 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Phosphor ; +e l : name=Calcium ; f =0.099 f =0.100 f =0.028 f =0.740 f =0.001 f =0.032 SpineBone : d=1.42 g /cm3 ; n=11 +e l : name=Hydrogen ; f =0.063 +e l : name=Carbon ; f =0.261 +e l : name=N i t r o g e n ; f =0.039 +e l : name=Oxygen ; f =0.436 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.001 +e l : name=Phosphor ; f =0.061 +e l : name=S u l f u r ; f =0.003 +e l : name=C h l o r i n e ; f =0.001 +e l : name=Potassium ; f =0.001 +e l : name=Calcium ; f =0.133 RibBone : d=1.92 g /cm3 ; n=9 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Magnesium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=Calcium ; ; ; ; ; ; ; ; ; f =0.034 f =0.155 f =0.042 f =0.435 f =0.001 f =0.002 f =0.103 f =0.003 f =0.225 Adipose : d=0.92 g /cm3 ; n=6 +e l : name=Hydrogen ; f =0.120 +e l : name=Carbon ; f =0.640 +e l : name=N i t r o g e n ; f =0.008 32 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 +e l : name=Oxygen +e l : name=Phosphor +e l : name=Calcium ; f =0.229 ; f =0.002 ; f =0.001 Blood : d=1.06 g/cm3 ; n=10 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=C h l o r i n e +e l : name=Potassium +e l : name=I r o n ; ; ; ; ; ; ; ; ; ; f =0.102 f =0.11 f =0.033 f =0.745 f =0.001 f =0.001 f =0.002 f =0.003 f =0.002 f =0.001 Heart : d=1.05 g /cm3 ; n=9 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=C h l o r i n e +e l : name=Potassium ; ; ; ; ; ; ; ; ; f =0.104 f =0.139 f =0.029 f =0.718 f =0.001 f =0.002 f =0.002 f =0.002 f =0.003 Kidney : d=1.05 g /cm3 ; n=10 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=C h l o r i n e +e l : name=Potassium +e l : name=Calcium ; ; ; ; ; ; ; ; ; ; f =0.103 f =0.132 f =0.03 f =0.724 f =0.002 f =0.002 f =0.002 f =0.002 f =0.002 f =0.001 f =0.102 f =0.139 f =0.03 f =0.716 f =0.002 f =0.003 f =0.003 f =0.002 f =0.003 Liver : d=1.06 g /cm3 ; n=9 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=C h l o r i n e +e l : name=Potassium ; ; ; ; ; ; ; ; ; Lymph : d=1.03 g /cm3 ; n=7 +e l : name=Hydrogen ; f =0.108 33 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 +e l +e l +e l +e l +e l +e l ; ; ; ; ; ; f =0.041 f =0.011 f =0.832 f =0.003 f =0.001 f =0.004 Pancreas : d=1.04 g /cm3 ; n=9 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Sodium ; +e l : name=Phosphor ; +e l : name=S u l f u r ; +e l : name=C h l o r i n e ; +e l : name=Potassium ; f =0.106 f =0.169 f =0.022 f =0.694 f =0.002 f =0.002 f =0.001 f =0.002 f =0.002 I n t e s t i n e : d=1.03 g /cm3 ; n=9 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Sodium ; +e l : name=Phosphor ; +e l : name=S u l f u r ; +e l : name=C h l o r i n e ; +e l : name=Potassium ; f =0.106 f =0.115 f =0.022 f =0.751 f =0.001 f =0.001 f =0.001 f =0.002 f =0.001 Skull : : : : : : : name=Carbon name=N i t r o g e n name=Oxygen name=Sodium name=S u l f u r name=C h l o r i n e d=1.61 g /cm3 ; n=9 +e l : name=Hydrogen +e l : name=Carbon +e l : name=N i t r o g e n +e l : name=Oxygen +e l : name=Sodium +e l : name=Magnesium +e l : name=Phosphor +e l : name=S u l f u r +e l : name=Calcium ; ; ; ; ; ; ; ; ; f =0.05 f =0.212 f =0.04 f =0.435 f =0.001 f =0.002 f =0.081 f =0.003 f =0.176 C a r t i l a g e : d=1.10 g /cm3 ; n=8 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Sodium ; +e l : name=Phosphor ; +e l : name=S u l f u r ; +e l : name=C h l o r i n e ; f =0.096 f =0.099 f =0.022 f =0.744 f =0.005 f =0.022 f =0.009 f =0.003 Brain : d=1.04 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.107 34 416 +e l : name=Carbon ; f =0.145 417 +e l : name=N i t r o g e n ; f =0.022 418 +e l : name=Oxygen ; f =0.712 419 +e l : name=Sodium ; f =0.002 420 +e l : name=Phosphor ; f =0.004 421 +e l : name=S u l f u r ; f =0.002 422 +e l : name=C h l o r i n e ; f =0.003 423 +e l : name=Potassium ; f =0.003 424 425 S p l e e n : d=1.06 g /cm3 ; n=9 426 +e l : name=Hydrogen ; f =0.103 427 +e l : name=Carbon ; f =0.113 428 +e l : name=N i t r o g e n ; f =0.032 429 +e l : name=Oxygen ; f =0.741 430 +e l : name=Sodium ; f =0.001 431 +e l : name=Phosphor ; f =0.003 432 +e l : name=S u l f u r ; f =0.002 433 +e l : name=C h l o r i n e ; f =0.002 434 +e l : name=Potassium ; f =0.003 435 436 CdTe : d=5.85 g /cm3 ; n=2; s t a t e=s o l i d e 437 +e l : name=Cadmium ; f =0.468358 438 +e l : name=T e l l u r i u m ; f =0.531642 439 440 PMMA: d=1.19 g /cm3 ; n=3 ; s t a t e=s o l i d 441 +e l : name=Hydrogen ; f =0.080538 442 +e l : name=Carbon ; f =0.599848 443 +e l : name=Oxygen ; f =0.319614 444 445 HU_− 1000_− 950: d =0.001205 g /cm3 ; n=3 446 +e l : name=N i t r o g e n ; f =0.755 447 +e l : name=Oxygen ; f =0.232 448 +e l : name=Argon ; f =0.013 449 450 HU_−949_− 121: d=0.26 g /cm3 ; n=9 451 +e l : name=Hydrogen ; f =0.103 452 +e l : name=Carbon ; f =0.105 453 +e l : name=N i t r o g e n ; f =0.031 454 +e l : name=Oxygen ; f =0.749 455 +e l : name=Sodium ; f =0.002 456 +e l : name=Phosphor ; f =0.002 457 +e l : name=S u l f u r ; f =0.003 458 +e l : name=C h l o r i n e ; f =0.003 459 +e l : name=Potassium ; f =0.002 460 461 HU_−120_− 78: d=0.91 g /cm3 ; n=5 462 +e l : name=Hydrogen ; f =0.118 463 +e l : name=Carbon ; f =0.780 464 +e l : name=Oxygen ; f =0.100 465 +e l : name=S u l f u r ; f =0.001 466 +e l : name=C h l o r i n e ; f =0.001 467 35 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 HU_−77_− 49: d=0.95 g /cm3 ; n=6 +e l : name=Hydrogen ; f =0.115 +e l : name=Carbon ; f =0.613 +e l : name=N i t r o g e n ; f =0.006 +e l : name=Oxygen ; f =0.264 +e l : name=S u l f u r ; f =0.001 +e l : name=C h l o r i n e ; f =0.001 HU_−48_− 21: d=0.97 g /cm3 ; n=7 +e l : name=Hydrogen ; f =0.112 +e l : name=Carbon ; f =0.506 +e l : name=N i t r o g e n ; f =0.012 +e l : name=Oxygen ; f =0.365 +e l : name=Phosphor ; f =0.001 +e l : name=S u l f u r ; f =0.002 +e l : name=C h l o r i n e ; f =0.002 HU_−20_9 : d=1.01 g /cm3 ; n=7 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Phosphor ; +e l : name=S u l f u r ; +e l : name=C h l o r i n e ; f =0.109 f =0.386 f =0.020 f =0.481 f =0.001 f =0.002 f =0.002 HU_10_21 : d=1.03 g /cm3 ; n=7 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; +e l : name=Phosphor ; +e l : name=S u l f u r ; +e l : name=C h l o r i n e ; f =0.107 f =0.309 f =0.025 f =0.554 f =0.001 f =0.002 f =0.002 HU_22_80 : d=1.05 g /cm3 ; n=10 +e l : name=Hydrogen ; f =0.103 +e l : name=Carbon ; f =0.139 +e l : name=N i t r o g e n ; f =0.031 +e l : name=Oxygen ; f =0.718 +e l : name=Sodium ; f =0.002 +e l : name=Phosphor ; f =0.001 +e l : name=S u l f u r ; f =0.001 +e l : name=C h l o r i n e ; f =0.001 +e l : name=Potassium ; f =0.002 +e l : name=Calcium ; f =0.002 HU_81_120 : d=1.12 g /cm3 ; n=8 +e l : name=Hydrogen ; +e l : name=Carbon ; +e l : name=N i t r o g e n ; +e l : name=Oxygen ; f =0.094 f =0.207 f =0.062 f =0.623 36 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 +e l : name=Phosphor ; f =0.002 +e l : name=S u l f u r ; f =0.003 +e l : name=C h l o r i n e ; f =0.003 +e l : name=Calcium ; f =0.006 HU_121_200 : d=1.14 g /cm3 ; n=10 +e l : name=Hydrogen ; f =0.092 +e l : name=Carbon ; f =0.440 +e l : name=N i t r o g e n ; f =0.026 +e l : name=Oxygen ; f =0.359 +e l : name=Sodium ; f =0.001 +e l : name=Phosphor ; f =0.026 +e l : name=S u l f u r ; f =0.001 +e l : name=C h l o r i n e ; f =0.001 +e l : name=Potassium ; f =0.001 +e l : name=Calcium ; f =0.054 HU_201_300 : d=1.20 g /cm3 ; n=10 +e l : name=Hydrogen ; f =0.084 +e l : name=Carbon ; f =0.400 +e l : name=N i t r o g e n ; f =0.028 +e l : name=Oxygen ; f =0.370 +e l : name=Sodium ; f =0.001 +e l : name=Phosphor ; f =0.037 +e l : name=S u l f u r ; f =0.001 +e l : name=C h l o r i n e ; f =0.001 +e l : name=Potassium ; f =0.001 +e l : name=Calcium ; f =0.078 HU_301_400 : d=1.28 g /cm3 ; n=11 +e l : name=Hydrogen ; f =0.075 +e l : name=Carbon ; f =0.357 +e l : name=N i t r o g e n ; f =0.031 +e l : name=Oxygen ; f =0.381 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.001 +e l : name=Phosphor ; f =0.048 +e l : name=S u l f u r ; f =0.001 +e l : name=C h l o r i n e ; f =0.001 +e l : name=Potassium ; f =0.001 +e l : name=Calcium ; f =0.103 HU_401_500 : d=1.35 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.070 +e l : name=Carbon ; f =0.328 +e l : name=N i t r o g e n ; f =0.032 +e l : name=Oxygen ; f =0.389 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.001 +e l : name=Phosphor ; f =0.056 +e l : name=S u l f u r ; f =0.002 +e l : name=Calcium ; f =0.121 37 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 HU_501_600 : d=1.43 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.062 +e l : name=Carbon ; f =0.295 +e l : name=N i t r o g e n ; f =0.034 +e l : name=Oxygen ; f =0.399 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.001 +e l : name=Phosphor ; f =0.065 +e l : name=S u l f u r ; f =0.002 +e l : name=Calcium ; f =0.141 HU_601_700 : d=1.50 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.057 +e l : name=Carbon ; f =0.268 +e l : name=N i t r o g e n ; f =0.036 +e l : name=Oxygen ; f =0.406 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.001 +e l : name=Phosphor ; f =0.072 +e l : name=S u l f u r ; f =0.002 +e l : name=Calcium ; f =0.157 HU_701_800 : d=1.59 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.051 +e l : name=Carbon ; f =0.239 +e l : name=N i t r o g e n ; f =0.037 +e l : name=Oxygen ; f =0.411 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.003 +e l : name=Phosphor ; f =0.080 +e l : name=S u l f u r ; f =0.004 +e l : name=Calcium ; f =0.174 HU_801_900 : d=1.66 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.047 +e l : name=Carbon ; f =0.217 +e l : name=N i t r o g e n ; f =0.038 +e l : name=Oxygen ; f =0.417 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.003 +e l : name=Phosphor ; f =0.086 +e l : name=S u l f u r ; f =0.004 +e l : name=Calcium ; f =0.187 HU_901_1000 : d=1.73 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.043 +e l : name=Carbon ; f =0.199 +e l : name=N i t r o g e n ; f =0.040 +e l : name=Oxygen ; f =0.422 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.003 38 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 +e l : name=Phosphor ; f =0.090 +e l : name=S u l f u r ; f =0.004 +e l : name=Calcium ; f =0.198 HU_1001_1100 : d=1.81 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.039 +e l : name=Carbon ; f =0.179 +e l : name=N i t r o g e n ; f =0.041 +e l : name=Oxygen ; f =0.427 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.003 +e l : name=Phosphor ; f =0.096 +e l : name=S u l f u r ; f =0.004 +e l : name=Calcium ; f =0.210 HU_1101_1200 : d=1.89 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.036 +e l : name=Carbon ; f =0.162 +e l : name=N i t r o g e n ; f =0.042 +e l : name=Oxygen ; f =0.433 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.002 +e l : name=Phosphor ; f =0.101 +e l : name=S u l f u r ; f =0.003 +e l : name=Calcium ; f =0.220 HU_1201_1300 : d=1.96 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.032 +e l : name=Carbon ; f =0.147 +e l : name=N i t r o g e n ; f =0.042 +e l : name=Oxygen ; f =0.437 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.002 +e l : name=Phosphor ; f =0.105 +e l : name=S u l f u r ; f =0.003 +e l : name=Calcium ; f =0.231 HU_1301_1400 : d=2.04 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.029 +e l : name=Carbon ; f =0.133 +e l : name=N i t r o g e n ; f =0.043 +e l : name=Oxygen ; f =0.442 +e l : name=Sodium ; f =0.001 +e l : name=Magnesium ; f =0.002 +e l : name=Phosphor ; f =0.109 +e l : name=S u l f u r ; f =0.002 +e l : name=Calcium ; f =0.239 HU_1401_1500 : d=2.12 g /cm3 ; n=9 +e l : name=Hydrogen ; f =0.026 +e l : name=Carbon ; f =0.119 +e l : name=N i t r o g e n ; f =0.044 39 676 +e l : name=Oxygen ; f =0.446 677 +e l : name=Sodium ; f =0.001 678 +e l : name=Magnesium ; f =0.002 679 +e l : name=Phosphor ; f =0.113 680 +e l : name=S u l f u r ; f =0.001 681 +e l : name=Calcium ; f =0.248 682 683 HU_1501_1600 : d=2.19 g /cm3 ; n=9 684 +e l : name=Hydrogen ; f =0.025 685 +e l : name=Carbon ; f =0.105 686 +e l : name=N i t r o g e n ; f =0.045 687 +e l : name=Oxygen ; f =0.448 688 +e l : name=Sodium ; f =0.001 689 +e l : name=Magnesium ; f =0.002 690 +e l : name=Phosphor ; f =0.117 691 +e l : name=S u l f u r ; f =0.002 692 +e l : name=Calcium ; f =0.255 40 2.4. Sistemas PET en GATE En esta sección analizaremos dos ejemplos muy provechosos acerca de sistemas PET. 2.4.1. Sistema CylindricalPET A continuación el código que analizaremos se llama PET_CylindricalPET_System.mac y en resumidas cuentas lo que hace es simular un detector de geometría axial en el cuál + se bombardea con una fuente de positrones e un pedazo de cuerpo humano idealizado o simplicado. Aprenderemos muchos de los conceptos de GATE en la explicación de este código. La línea 1 del código le dice a GATE que utilice el controlador de visualisación OpenGL y que utilice el servidor X para manejar la parte gráca [4],[5]. La línea 2 /vis/viewer/set/viewpointThetaPhi 60 60 ubica la cámara (el observador) en la posición ángular θ = 60, φ = 60 de las coor- denadas esféricas [6] y que apunte hacia el centro del sistema coordenado. La l inea /vis/viewer/zoom 6.0 establece un /vis/drawVolume le dice a GATE que 3 aumento del detector de un 6:1. La línea 4 dibuje todas las geometrías que vayan a ser creadas. La línea 5 luce un poco intrusa ya que no empieza con el prejo de visualización /vis/, esta línea almacena las trayectorias, y es necesaria para que la línea 6 pueda agregar las trayectorias de las partículas a la escena. Entonces es típico encontrar estas dos líneas juntas /tracking/storeTrajectory 1 /vis/scene/add/trajectories Luego en la línea 7 encontramos el comando /vis/scene/endOfEventAction accumulate que ordena al programa que acumule en la escena todos los eventos. Las líneas 8-21 establecen el nivel de verborrea de todos los componentes de la simulación a 0. Los niveles de verborrea para cada componente de la simulación son: 0, 1, 2, 3, 4, 5. El mínimo es 0 y el máximo es 5. La línea 22 /run/verbose 0 establece el nivel de verborrea de G4RunManager a 0 (silencioso), otros posibles valores son 1 (topicos principales), 2 (topicos principales + resumen de la corrida). La línea 23 /event/verbose 0 establece la verborrea del administrador de eventos a 0 (silencioso), otros posibles valores son 1 (información de apilamiento), 2 (Mas detalles). La línea 24 /tracking/verbose 0 le dice a GATE que no imprima en pantalla la información correspondiente a las trayectorias de las partículas. Otros posibles valores son 1 (minima información de cada paso), 2 (+ Informanción de las partículas secundarias), 3 (+ Información pre y post del paso), 4 (+ Información acerca de la ejecución del proceso AlongStepPostStep), y 5 (+ Información de la longitud del paso propuesto). Las líneas 25-28 ya las conocemos y simplemente estamos cargando la base de datos de los materiales y creando el mundo. La línea 29 41 /gate/world/daughters/name cylindricalPET crea la hija llamada cylindricalPET, que en realidad no es un nombre arbitrario, sino uno de los sistemas que GATE tiene a nuestra dispocisión para ayudarnos a crear detectores. Otro tipo de sistemas son: y OPET. scanner, CTscanner, SPECTHead, ecat, CPET, Los sistemas en GATE sirven como un molde para crear distintos tipos de detectores obedeciendo el patrón geométrico estipulado por dicho molde o sistema. Un sistema cylindricalPET es un sistema PET que puede describir la mayoría de de los escáneres PET para animales. El objetivo principal de cylindricalPET es almacenar los datos de salida en el formato LMF (List Mode Format) desarrollado por la colaboración Crystal Clear. Un sistema cylindricalPET se basa en la geometría cilíndrica, y consiste en cinco niveles de jerarquia desde la madre hasta la hija, denidos así: El volumen cylindricalPET se dene como un cilindro con un agujero en el inte- rior, dentro del mundo. El volumen rsector (profundidad=1) se dene como una caja, la cual es repetida con un anillo repetidor dentro de cylindricalPET. El volumen module (profundidad=2) se dene como una caja dentro de rsector. La cual es repetida por un repetidor cubicarray sin repetición en x. Este nivel es opcional. El volumen submodule (profundidad=3) se dene como una caja dentro de mod- ule. La cual es repetida por un repetidor cubicarray sin repetición en x. Este nivel es opcional. el volumen crystal (profundidad=4) se dene como una caja dentro de submodule. La cual es repetida por un repetidor cubicarray sin repetición en x. Este nivel es opcional. layer en español capa (profundidad=5), se dene como una o varias cajas ar- regladas radialmente dentro de crystal. No se recomienda usar un repetidor para capa(s), pero sí se recomienda que se construya una por una en el código. Capa debe ser un detector sensible. Los materiales de capa deben ser los materiales del detector, e.g. LSO, o BGO+GSO para un sistema de doble capa phoswich. Ahora iremos línea a línea construyendo un sistema cylindricalPET. Con la línea 30 /gate/world/daughters/insert cylinder establece que cylindricalPET es un cilindro, en donde las características de este cilindro se dan a continuación. La línea 31 ubica a la hija cylindricalPET en el centro del mundo. La línea 32 /gate/cylindricalPET/geometry/setRmax 52.0 cm ja el radio del cilindro 42 a 52 cm, mientras que la línea 33 /gate/cylindricalPET/geometry/setRmin 39.9 cm da el radio interno del cilindro cylindricalPET. En este caso, lo que estamos formando es un anillo. Un verdadero cilindro tendría un radio mínimo igual a cero. La línea 34 /gate/cylindricalPET/geometry/setHeight 40.2 cm nos da el largo del cilindro igual a 80.4 cm. En la línea 35 llenamos a cylindricalPET de aire. Las líneas 36 y 37 son de visualización /gate/cylindricalPET/vis/forceWireframe /gate/cylindricalPET/vis/setColor white para cylindricalPET, signicando la línea 36 que se utilice un dibujo con líneas que demarquen las supercies, estas líneas en la jerga de los programas que dibujan, se llaman cables; mientras que la línea 37 dice que se coloree de blanco el cylindricalPET. En la línea 38-39 denimos una hija de nombre cabeza con geometría de una caja. En la línea establecemos el centro de la hija cabeza a la posición (44.0, 0.0, 0.0)cm del sistema de coordenadas de cylindricalPET, en las líneas 41-43 damos las dimensiones de cabeza igual a 2×(8, 32, 40)cm, y en la línea 44 establecemos el material de cabeza a aire. La línea 45 /gate/cabeza/vis/setVisible 0 es importante porque le dice a GATE que no renderice el dibujo de cabeza, y que en lugar de eso, lo dibuje usando cables. Desde 46 hasta 53 denimos a bloque como una hija de cabeza, siendo una caja ubicada en el centro de cabeza con dimensiones de 2×(30, 16, 20)mm, hecha de aire y dibujada con cables. Desde 54 hasta 61 denimos a cristal como una hija de bloque, siendo una caja ubicada en el centro de bloque con dimensiones de 2×(30, 3, 3.8)mm, hecha de aire y dibujada con cables. Desde 62 hasta 69 denimos a miDetectorLSO como una hija de cristal, siendo una caja ubicada en (-0.75, 0.0, 0.0)cm del sistema de coordenadas de cristal, con dimensiones de 2×(15, 3, 3.8)mm, hecha de LSO (Lu2 Si O5 ), y dibujada con color rojo. Desde 70 hasta 77 denimos a miDetectorBGO como una hija de cristal, siendo una caja ubicada en (+0.75, 0.0, 0.0)cm del sistema de coordenadas de cristal, con dimensiones de 2×(15, 3, 3.8)mm, hecha de BGO (Bi4 Ge3 O12 ), y dibujada con color amarillo. La línea 78 /gate/cristal/repeaters/insert cubicArray introduce un repetidor tipo cubicArray para el volumen cristal, las líneas 79, 80, y 81 /gate/cristal/cubicArray/setRepeatNumberX 1 /gate/cristal/cubicArray/setRepeatNumberY 5 /gate/cristal/cubicArray/setRepeatNumberZ 5 dicen que no haya repetición a lo largo del eje del eje 5 = 25 y, x, que hayan 5 repeticiones a lo largo y que hayan 5 repeticiones a lo largo del eje z, en total habrán 1×5× cristales. La línea 82 /gate/cristal/cubicArray/setRepeatVector 0.0 3.2 4.0 mm establece el paso de la repetición de cristal sobre los ejes 2 × (∆x, ∆y, ∆z) x, y, z a 2×(0,0, 3,2, 4,0)mm= y son apropiados porque no hay solapamiento ya que las dimensiones 43 de cada cristal son 2×(30, 3, 3.8)mm. Esta repetición de arreglo cúbica se explica así: La posición inicial del centro de cristal está en P0 = (0, 0, 0) (el origen de bloque), y en general, las nuevas posiciones de los centros de los demas cristales estarán dados por P~ (a, b, c) = P~0 + 2a ∆x î + 2b ∆y ĵ + 2c ∆z k̂ en donde a 1, 2, 3, 4, 5; y (2.3) a = 1; b puede tomar 5 valores, b = c = 1, 2, 3, 4, 5. Las 25 posiciones en milimetros solamente puede tomar un valor, c puede tomar 5 valores son: (0, 6.4, 8) (0, 6.4, 16) (0, 6.4, 24) (0, 6.4, 32) (0, 6.4, 40) (0, 12.8, 8) (0, 12.8, 16) (0, 12.8, 24) (0, 12.8, 32) (0, 12.8, 40) (0, 19.2, 8) (0, 19.2, 16) (0, 19.2, 24) (0, 19.2, 32) (0, 19.2, 40) (0, 25.6, 8) (0, 25.6, 16) (0, 25.6, 24) (0, 25.6, 32) (0, 25.6, 40) (0, 32, 8) (0, 32, 16) (0, 32, 24) (0, 32, 32) (0, 32, 40) que serían las posiciones nales en el caso en que se hubiera dado el comando /gate/cristal/linear/autoCenter false pero ya que este no es el caso, porque el anterior comando no se dió en el código, y además, la opción de autocentrado viene por defecto igual a verdadero, entonces tendremos que centrar el grupo de posiciones repetidas alrededor de la posición del ~0 ) que ha sido repetido. El autocentrado cambia la ecuación 2.3 a: volumen inicial (P P~ (ā, b̄, c̄) = P~0 + 2ā ∆x î + 2b̄ ∆y ĵ + 2c̄ ∆z k̂ en donde ā, b̄, y c̄ ā = − b̄ = − c̄ = − (2.4) pueden tomar los valores dados por la siguientes ecuaciones: (a (b max − 1) ,− (a 2 − 1) (b ,− 2 − 1) (c ,− 2 max (c max max − 1) + 1, . . . , (a 2 − 1) (b + 1, . . . , 2 − 1) (c + 1, . . . , 2 max − 1) − 1, (a 2 − 1) (b − 1, 2 − 1) (c − 1, 2 max − 1) (2.5) 2 − 1) 2 − 1) , 2 max max max max max max (2.6) (2.7) a viene dado por el comando setRepeatNumberX, b viene dado por el setRepeatNumberY, y c viene dado por el comando setRepeatNumberZ; En este ejemplo vemos que ā puede tomar solo un valor, cero. Por otro lado b̄ y c̄ pueden en donde max max comando max tomar valores -2, -1, 0, 1, y 2. Luego de aplicar el autocentrado queda: (0, -12.8, -16) (0, -12.8, -8) (0, -12.8, 0) (0, -12.8, 8) (0, -6.4, -16) (0, -6.4, -8) (0, -6.4, 0) (0, -6.4, 8) (0, -6.4, 16) (0, 0, -16) (0, 0, -8) (0, 0, 0) (0, 0, 8) (0, 0, 16) (0, 6.4, -16) (0, 6.4, -8) (0, 6.4, 0) (0, 6.4, 8) (0, 6.4, 16) (0, 12.8, -16) (0, 12.8, -8) (0, 12.8, 0) (0, 12.8, 8) (0, 12.8, 16) 44 (0, -12.8, 16) . En este punto podemos darnos cuenta que el repetidor de arreglo cubico es una herramienta muy poderosa. De las líneas 83 a 87 /gate/bloque/repeaters/insert cubicArray /gate/bloque/cubicArray/setRepeatNumberX 1 /gate/bloque/cubicArray/setRepeatNumberY 20 /gate/bloque/cubicArray/setRepeatNumberZ 20 /gate/bloque/cubicArray/setRepeatVector 0.0 1.6 2.0 cm podemos ver que se repite a bloque mediante un arreglo cubico 1 × 20 × 20 = 400 veces 2×(0.0, 1.6, 2.0)cm. Luego las posiciones van desde ~ P (ā = 0, b̄ = −9.5, c̄ = −9.5)=(0, -30.4, -38)cm hasta P~ (ā = 0, b̄ = 9.5, c̄ = 9.5)=(0, con un paso de 30.4, 38)cm, /gate/cabeza/repeaters/insert ring sirve para repetir al volumen cabeza a lo largo de un anillo. El número de veces que se repite viene dada por el comando de la línea 89 /gate/cabeza/ring/setRepeatNumber 4 el eje en el cual el volumen rotara debe ser especicado por dos puntos del eje, así /gate/VolumenNombre/ring/setPoint1 0. 1. 0. mm /gate/VolumenNombre/ring/setPoint2 0. 0. 0. mm cuando el eje de rotación no se especica, entonces el eje de rotación se elije a ser el eje z. Las líneas 90 a 94 /gate/systems/cylindricalPET/rsector/attach cabeza /gate/systems/cylindricalPET/module/attach bloque /gate/systems/cylindricalPET/crystal/attach cristal /gate/systems/cylindricalPET/layer0/attach miDetectorLSO /gate/systems/cylindricalPET/layer1/attach miDetectorBGO atan los volumenes que ya hemos creado como lo son cabeza, bloque, cristal, miDetectorLSO, y miDetectorBGO a distintas partes del sistema cylindricalPET. Las líneas 95 y 96 /gate/miDetectorLSO/attachCrystalSD /gate/miDetectorBGO/attachCrystalSD ata miDetectorLSO y miDetectorBGO a piezas sensibles de detección tipo cristal. La línea 97 /gate/systems/cylindricalPET/describe imprime información acerca del detector cylindricalPET. La línea 98 /gate/cylindricalPET/moves/insert orbiting indica que el sistema cylindricalPET realice un movimiento de tipo orbitante. La línea 99 /gate/cylindricalPET/orbiting/setSpeed 30 deg/s especica la velocidad de rotación a 30 grados/s. Las líneas 100 y 101 45 /gate/cylindricalPET/orbiting/setPoint1 0 0 0 cm /gate/cylindricalPET/orbiting/setPoint2 0 0 1 cm especican dos puntos del eje de rotación alrededor del cual el sistema cylindricalPET rota, en este caso es el eje z. Desde la línea 102 hasta la 110 /gate/world/daughters/name fantasma /gate/world/daughters/insert box /gate/fantasma/geometry/setXLength 10 cm /gate/fantasma/geometry/setYLength 10 cm /gate/fantasma/geometry/setZLength 10 cm /gate/fantasma/setMaterial Water /gate/fantasma/vis/forceSolid /gate/fantasma/vis/setColor blue /gate/fantasma/attachPhantomSD denimos al volumen fantasma como hija del mundo y de longitudes 2×(10, 10, 10)cm. Fantasma esta hecha de agua y mediante las funciones de visualización se establece a que se dibuje de manera solida y de color azúl. Por último se ata fantasma a un tipo de detector sensitivo. Generalmente un fantasma es un volumen animal o humano el cual será bombardeado con partículas. Las 3/4 partes de un cuerpo humano o animal, esta hecho de agua. Por eso es una buena aproximación usar agua como un blanco animal o humano. Las líneas 111-119 especican los procesos físicos involucrados en la simulación, /gate/physics/addProcess PhotoElectric /gate/physics/addProcess Compton /gate/physics/addProcess GammaConversion /gate/physics/addProcess LowEnergyRayleighScattering /gate/physics/addProcess ElectronIonisation /gate/physics/addProcess Bremsstrahlung /gate/physics/addProcess PositronAnnihilationStd /gate/physics/addProcess MultipleScattering e+ /gate/physics/addProcess MultipleScattering emientras que las líneas 120 y 121 /gate/physics/processList Enabled /gate/physics/processList Initialized habilitan la lista de procesos físicos y la inicializan. Las líneas 122 hasta 130 /gate/physics/Gamma/SetCutInRegion miDetectorLSO 1.0 cm /gate/physics/Electron/SetCutInRegion miDetectorLSO 1.0 cm /gate/physics/Positron/SetCutInRegion miDetectorLSO 1.0 cm /gate/physics/Gamma/SetCutInRegion miDetectorBGO 1.0 cm /gate/physics/Electron/SetCutInRegion miDetectorBGO 1.0 cm /gate/physics/Positron/SetCutInRegion miDetectorBGO 1.0 cm /gate/physics/Gamma/SetCutInRegion fantasma 0.1 mm /gate/physics/Electron/SetCutInRegion fantasma 0.1 mm 46 world CylindricalPET fantasma cabeza bloque cristal miDetectorBGO miDetectorLSD Figura 2.1: Geometría del detector CylindricalPET presente en el código PET_CylindricalPET_System.mac. La echa indica que un volumen apunta a la volumen hija. /gate/physics/Positron/SetCutInRegion fantasma 0.1 mm son comandos de la forma /gate/physics/Gamma/SetCutInRegion <VolumenLogico> <valor> <unidades> /gate/physics/Electron/SetCutInRegion <VolumenLogico> <valor> <unidades> /gate/physics/Positron/SetCutInRegion <VolumenLogico> <valor> <unidades> los cuales establecen un cuota minima para garantizar que no ocurra divergencias infrarrojas (integrales en donde la energía del fotón tiende a cero) en los calculos de las interacciones de las partículas Gamma (fotón), electrón, y positrón con los materiales de los volumenes geométricos. La línea 131 /gate/physics/SetMaxStepSizeInRegion fantasma 0.01 mm como su nombre lo indica establece el tamaño máximo del paso en el volumen lógico fantasma a 0.01 mm. La línea 132 /gate/run/initialize inicializa la verborrea, la visualización y la lista de procesos físicos. Las líneas 133 a 139 /gate/timing/setTime 1.0 s /gate/timing/setTime 2 s /gate/timing/setTime 3 s /gate/timing/setTime 4 s 47 /gate/timing/setTime 5 s /gate/timing/setTime 6 s muestran como corre el sistema en los tiempos especicados. Las líneas 140 a 154 utilizan el concepto de digitizer que en español signica digitalizador. El proposito de digitalizador es simular el comportamiento de los escaneres detectores y cadena de procesamiento de la señal. GATE usa GEANT4 para generar particulas y transportarlas a travéz de distintos materiales. Esto mimica las interacciones físicas entre partículas y matería. La información generada durante este proceso es usada por GATE para simular los pulsos del detector (digitos), los cuales corresponden a los datos observados. El digitalizador representa la serie de pasos y ltros que pulen este proceso. 1. Una partícula es generada con todos sus parámetros tales como su energía inicial, su momentum, etc. 2. Un paso de trayectoria elemental (en GEANT4 llamada simplemente un paso - step -) es aplicada. Un paso corresponde a la trayectoria de una partícula en- tre interacciones discretas (i.e. fotoeléctrica, Compton, producción de par, etc.). Durante un paso los cambios en la información de la energía de la partícula y momentum son calculadas. La longitud de un paso depende de la naturaleza de la interacción, el tipo de partícula y material, etc. El cálculo de la longitud del paso es compleja y es mencionada aqui brevemente. Para mas detalles ver [1]. 3. Si un paso ocurre dentro de un volumen correspondiente a un detector sensitivo, la información de la interacción entre la partícula y el material es almacenada. Esta información puede incluir la energía depositada, el momentum antes y después de la interacción, el nombre del volumen donde la interacción ocurrió, y asi sucesivamente. Este conjunto de información es referida como un hit (impacto). 4. Las etapas 2 y 3 son repetidas hasta que la energía de la partícula se vuelve más baja que un valor predenido, o que la posición de la partícula caiga afuera de los límites denidos. La serie entera de pasos forman una trayectoria simulada de la partícula, que es llamada una track (traza) en GEANT4. 5. La cantidad de energía depositada en un cristal es ltrada por el digitalizador. La salida desde el digitalizador corresponde a la señal después de que ella ha sido procesada por la front end electronics FEE (electrónica delantera). Generalmente la FEE es hecha de varios unidades de procesamiento, trabajando en serie y/o en paralelo. Este proceso de transformar la energía de un impacto en el valor digital nal es llamado Digitalización, y es realizada por por la porción de digitalizador de la arquitectura GATE. Cada unidad de procesamiento en la FEE es representada en GATE por un módulo digitalizador. El valor nal obtenido después de ltrar por un conjunto de módulos es llamado un single (simple). Los simples pueden ser salvados como un archivo de salida. Cada valor transiente entre dos módulos es llamado un pulso. 48 Este proceso es repetido para cada evento en la simulación para producir uno o mas conjuntos de simples. Estos simples pueden ser almacenados en un archivo de salida e.g. un árbol de ROOT. Una vez que esta lista es creada, una segunda etapa de procesamiento puede ser insertada para ordenar por coincidencias la lista de simples. Para hacer esto, el algoritmo busca en esta lista un conjunto de simples que son detectados dentro de un intervalo de tiempo (eventos coincidentes). Finalmente la coincidencia de los datos puede ser ltrada para mimicar cualquier posible perdida de datos, la cual puede ocurrir en el circuito lógico de coincidencias o durante el transporte de los datos. Así como para simples, el procesamiento es realizado especicando una lista de módulos genericos para aplicarlos al ujo de datos de coincidencia. La información contenida en el impacto no corresponde con lo que es proveido por un detector real. Para simular los valores digitales (pulsos) que resultan desde la salida del FEE, los métodos de muestreo de la señal deben ser especicados. Para hacer esto, un número de módulos digitizadores son disponibles y serán descritos abajo. Además en el caso de análisis PET, el trigger (gatillo) lógico es basado en uno o mas decisiones denidas por el usuario que depende sobre cantidades sicas observables tales como umbrales de energía y tiempos de coincidencia. El rol del digitalizador es construir desde la información del impacto, los observables físicos, los cuales incluyen energía, posición, y tiempo de detección para cada partícula. Además, el digitalizador debe implementar la lógica requerida para simular coincidencias durante las simulaciones PET. El uso típico del módulo digitalizador incluye las siguientes acciones: simular la respuesta del detector, simular el esquema de lectura de salida, simular la lógica del gatillo. Módulos de digitalizador: La digitalización consiste de una serie de procesadores de señal. La salida de cada paso a lo largo de la serie es denida como un pulso. Al nal de la cadena, los pulsos de salidad son nombrados simples. Estos simples simulan realísticamente los observables físicos de una respuesta de detector para una partícula que interactua con él. El comando básico para introducir un módulo a la simulación es /gate/digitizer/insert <MODULO> la declaración de cada uno de los módulos debería hacer sentido. Se inserta Adder antes que readout, readout antes que thresholder/upholder, y blurring antes que thresholder/upholder. Módulo Adder: Una partícula a menudo crea interacciones multiples, y consecuente- mente multiples impactos dentro de un cristal dado. Un fotón puede interactuar con un cristal por dos procesos Compton y una abosorción fotoeléctrica. El primer paso de el digitalizador es sumar todos los impactos que ocurren dentro del mismo cristal (i.e. el mismo volumen). Esto es debido a el hecho de que la electrónica siempre mide una señal integrada, y no tiene la resolución temporal o energética necesaria para distinguir 49 entre interacciones individuales de la partícula dentro de un cristal. Esta acción digitalizadora es completada por un módulo llamado adder (Adicionador). Generalmente el adder debería ser el primer módulo de una cadena digitalizadora. El adder reagrupa los impactos per volumen en un pulso. Si una partícula que entra a un detector hace multiples impactos dentro de dos cristales antes de ser detenida, la salida del módulo adder consistirá de dos pulsos. Cada pulso es computado como sigue: la energía es la total de las energías en cada volumen, la posición es obtenida con un centroide de energía-pesada de las diferentes posiciones de los impactos. El tiempo es igual al tiempo en el cual el primer impacto ocurrió. En la línea 140 se inserta el módulo adder: /gate/digitizer/Singles/insert adder Módulo Readout: Con la excepción de un sistema detector en donde cada cristal es leido por un foto-detector individual, la segmentación de readout es a menudo diferente desde las estructuras geométricas básicas del detector. La geometría readout es una geométria articial que es usualmente asociada con un grupo de detectores sensibles. Este agrupamiento tiene que ser determinado por el usuario a travéz de una variable llamada depth (profundidad). Usando esta variable, los pulsos son sumados si sus IDs de los volumenes son iguales a este nivel de profundidad. El módulo readout reagrupa pulsos per bloque (grupo de detectores sensibles). El usuario necesita especicar la profundidad del bloque para indicar la profundidad dentro de la jerarquia del volumen a la cual los pulsos son sumados. Los resultados de este módulo son la energía total en el bloque, la posición del pulso con la máxima energía (el ganador toma todo!). En las líneas 141 y 142 /gate/digitizer/Singles/insert readout /gate/digitizer/Singles/readout/setDepth 1 insertamos el módulo readout y además establecemos la profundidad al nivel 1 (el nivel de rsector, en este caso cabeza). La próxima tarea es transformar este pulso de salida desde el módulo readout en un simple, el cual es el observable físico del experimento. Esta transformación es el resultado de la respuesta del detector y debería mimicar los comportamientos del foto-detector, la electrónica, y el sistema de adquisición. Módulo Blurring: El módulo de procesador de pulsos blurring (borrón), simula el borrón gausiano del espectro de energía después de salir del módulo readout. Esto es acompañado por la introducción de una resolución mitad del máximo) a una energía dada R(E). E0 . R0 (FWHM amplitud llena a la La resolución es una función de la energía, la resolución de la energía es: r R(E) = R0 el comando de la línea 144 50 E0 , E (2.8) /gate/digitizer/Singles/blurring/setResolution 0.26 establece R0 = 0,26, mientras que la línea 145 /gate/digitizer/Singles/blurring/setEnergyOfReference 511. keV establece E0 = 511 keV. Módulo Thresholder y Upholder: Estos módulos permiten establecer valores infe- riores y superiores de la energía, en los cuales no se tendran en cuenta las partículas que no pasen y sobrepasen estos valores respectivamente. Las líneas 146 y 147 /gate/digitizer/Singles/insert thresholder /gate/digitizer/Singles/thresholder/setThreshold 350. keV insertan el módulo thresholder y establece el valor mínimo a 350 keV. Mientras que las líneas 148 y 149 /gate/digitizer/Singles/insert upholder /gate/digitizer/Singles/upholder/setUphold 650. keV introducen a upholder y establecen el valor máximo a 650 keV. La línea 150 /gate/digitizer/Coincidences/setWindow 10. ns ordena por coincidencias la lista de simples presentes en una ventana de tiempo de 10 nano segundos. incidencias: Ordenador de Co- El ordenador de coincidencias busca en la lista de simples por parejas de simples coincidentes. En donde sea que dos o mas simples son encontrados dentro de una ventana de tiempo, estos simples son agrupados para formar un evento de coincidencia. Dos métodos son posibles para encontrar simples coincidentes dentro de GATE. En el primer método, cuando un simple es detectado, el abre una nueva ventanda de tiempo, y busca por un segundo simple que ocurra durante la longitud de la ventana. En este método, mientras la ventana abierta por el primer simple no sea cerrada, otro simple no podrá abrir su propia ventana de tiempo. En el segundo método, todos los simples abren sus propias ventanas de coincidencia, y un OR lógico es hecho entre todas las señales individuales para encontrar coincidencias. Los ods métodos están disponibles en GATE, y pueden dar resultados levementes distintos, para una ventana de amplitud dada. Coincidencias demoradas: Cada simple emitido desde una fuente de particula dada es almacenada en un númer ID de evento, el cual unicamente identica el decaimiento desde el cual el simple esta viniendo. Si dos números ID de eventos no son identicos en un evento de coincidencia, el evento es denido como una coincidencia aleatoria. Un método experimental usado para estimar el número de coincidencias aleatórias consiste de usar una ventana de tiempo demorada. Por defecto, la ventana de coincidencia es abierta cuado una partícula es detectada (i.e. cuando un simple es creado). En este método, una segunda ventana de coincidencia es creada en paralelo a la ventana de coincidencia normal (la cual en este caso es referida como la ventana pronta). La segunda ventana (usualmente con la misma amplitud) es abierta, pero es desplazada en tiempo. Este desplzamiento debería ser lo sucientemente largo para asegurar que las dos partículas detectadas dentro de ella provienen de diferentes decaimientos. El número resultante de coincidencias detectadas en esta ventan demorada aproxima el número 51 de eventos aleatorios contados en la ventana pronta. GATE ofrece la posibilidad de especicar un valor de desplazamiento, para el ordenador de coincidencias, asi que lineas prontas y/o demoradas pueden ser simuladas. Volviendo a nuestro código, en las líneas 151 hasta 154 /gate/digitizer/name demora /gate/digitizer/insert coincidenceSorter /gate/digitizer/demora/setWindow 10. ns /gate/digitizer/demora/setOset 500. ns denimos a nuestro ordenador de coincidencias demora con una ventana de tiempo de 10 ns, y un valor de desplazamiento igual a 500 ns. La línea 155 /gate/source/addSource mipositronC11 luego se agrega la línea 156 /gate/source/mipositronC11/gps/particle e+ para especicar que mipositronC11 es una partícula gps de tipo positrón. La línea 157 /gate/source/mipositronC11/gps/energytype Carbon11 especica que la distribución de energía de estos positrones corresponden al decaimiento del isotopo de Carbono 11 en: un isotopo de Borón 11 mas un positrón mas un neutrino electrónico mas una energía de 0.96 MeV: 11 C→ 11 B + e+ + νe + 0.96 MeV. (2.9) Estos decaimientos no son simulados, pero si la energíga de los positrones y el tiempo de vida media. La línea 158 /gate/source/mipositronC11/setActivity 100 becquerel establece la actividad de la fuente mipositronC11 a 100 Bq. Un Bq es una unidad del sistema internacional de medidas que es equivalente a 1/s. La línea 159 /gate/source/mipositronC11/setForcedUnstableFlag true nos dice que mipositronC11 es que nuestros positrones pueden decaer en otras partículas. La línea 160 /gate/source/mipositronC11/setForcedHalfLife 1223 s establece un nuevo tiempo de vida media de 1223 segundos para los positrones con una distribución de energía a la isotopo de Carbono 11. La línea 161 /gate/source/mipositronC11/gps/angtype iso 52 nos dice que la emisión de la fuente mipositronC11 es isotrópica en los angulos θ y φ de coordenadas esféricas; éste comportamiento puede cambiar si aplicamos otros comandos explicitos para ello. La línea 162 /gate/source/list nos indica que todos los datos de la fuente fueron agregados a la lista de de la simulación. Las líneas 163 a 168 /gate/output/root/enable /gate/output/root/setFileName YourFile /gate/output/root/setRootHitFlag 0 /gate/output/root/setRootSinglesFlag 1 /gate/output/root/setRootCoincidencesFlag 1 /gate/output/root/setRootdemoraFlag 1 habilitan el archivo de salida tipo ROOT llamado YourFile y en el se almacenarán los impactos, los simples, las coincidencias con encontradas con el algoritmo que viene por defecto, además de las coincidencias usando el algoritmo de coincidencias demoradas. Vale notar que el comando del archivo de coincidencias demoradas usa el nombre del introducido en la línea 151, i.e. la línea 168 usa la sintaxis /gate/output/root/setRoot<NombreCoincidenciasDemoradas>Flag 1. Las líneas 169 a 171 /gate/random/setEngineName JamesRandom /gate/random/setEngineSeed default /gate/random/verbose 1 establecen el algoritmo de números aleatorios a la máquina JamesRandom y la semilla es la que viene por defecto y la verborrea será impresa. Finalmente las líneas 172 a 175 /gate/application/setTimeSlice 1 s /gate/application/setTimeStart 0 s /gate/application/setTimeStop 6 s /gate/application/startDAQ especica las características de la aplicación. Cada tajada slice de simulación es el tiempo necesario para que una corrida completa de adquisición de datos ocurra, en este caso cada tajada de simulación dura 1 segundo. El tiempo de inicio de la simulación se establece a cero y el tiempo nal a 6 segundos; luego habrán 6 tajadas de simulación que usualmente se le dice en el mundo de la física de colisionadores como un evento. La última línea dice que se de inicio a la simulación, o lo que es lo mismo, que empiece la adquisición de datos ( 1 2 3 4 5 6 7 8 9 10 Data AcQuisition ). / v i s / open OGLSX / v i s / v i e w e r / s e t / v i e w p o i n t T h e t a P h i 60 60 / v i s / v i e w e r /zoom 6 . 0 / v i s /drawVolume / tracking / storeTrajectory 1 / v i s / s c e n e /add/ t r a j e c t o r i e s / v i s / s c e n e / endOfEventAction accumulate / gate / verbose Physic 5 / g a t e / v e r b o s e Cuts 0 / g a t e / v e r b o s e SD 0 53 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 0 / g a t e / v e r b o s e Warning 0 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 0 / g a t e / v e r b o s e Core 0 / run / v e r b o s e 0 / event / verbose 0 / tracking / verbose 0 / g a t e / geometry / s e t M a t e r i a l D a t a b a s e G a t e M a t e r i a l s . db / g a t e / world / geometry / setXLength 4 0 0 . cm / g a t e / world / geometry / setYLength 4 0 0 . cm / g a t e / world / geometry / s etZL ength 4 0 0 . cm / g a t e / world / d a u g h t e r s /name c y l i n d r i c a l P E T / g a t e / world / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / c y l i n d r i c a l P E T / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 0 . 0 cm / g a t e / c y l i n d r i c a l P E T / geometry /setRmax 5 2 . 0 cm / g a t e / c y l i n d r i c a l P E T / geometry / setRmin 3 9 . 9 cm / g a t e / c y l i n d r i c a l P E T / geometry / s e t H e i g h t 4 0 . 2 cm / g a t e / c y l i n d r i c a l P E T / s e t M a t e r i a l Air / gate / cylindricalPET / v i s / forceWireframe / gate / cylindricalPET / v i s / setC olor white / g a t e / c y l i n d r i c a l P E T / d a u g h t e r s /name c a b e z a / g a t e / c y l i n d r i c a l P E T / d a u g h t e r s / i n s e r t box / g a t e / c a b e z a / placement / s e t T r a n s l a t i o n 4 4 . 0 0 . 0 0 . 0 cm / g a t e / c a b e z a / geometry / setXLength 8 cm / g a t e / c a b e z a / geometry / setYLength 32 cm / g a t e / c a b e z a / geometry / s etZL engt h 40 cm / g a t e / c a b e z a / s e t M a t e r i a l Air / gate / cabeza / v i s / s e t V i s i b l e 0 / g a t e / c a b e z a / d a u g h t e r s /name b l o q u e / g a t e / c a b e z a / d a u g h t e r s / i n s e r t box / g a t e / b l o q u e / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 0 . 0 cm / g a t e / b l o q u e / geometry / setXLength 30 mm / g a t e / b l o q u e / geometry / setYLength 16 mm / g a t e / b l o q u e / geometry / s etZL ength 20 mm / g a t e / b l o q u e / s e t M a t e r i a l Air / gate / bloque / v i s / s e t V i s i b l e 0 / g a t e / b l o q u e / d a u g h t e r s /name c r i s t a l / g a t e / b l o q u e / d a u g h t e r s / i n s e r t box / g a t e / c r i s t a l / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 0 . 0 cm / g a t e / c r i s t a l / geometry / setXLength 30 mm / g a t e / c r i s t a l / geometry / setYLength 3 . 0 mm / g a t e / c r i s t a l / geometry / s etZLe ngth 3 . 8 mm / g a t e / c r i s t a l / s e t M a t e r i a l Air / gate / c r i s t a l / v i s / s e t V i s i b l e 0 / g a t e / c r i s t a l / d a u g h t e r s /name miDetectorLSO 54 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 / g a t e / c r i s t a l / d a u g h t e r s / i n s e r t box / g a t e / miDetectorLSO / placement / s e t T r a n s l a t i o n − 0.75 0 . 0 0 . 0 cm / g a t e / miDetectorLSO / geometry / setXLength 15 mm / g a t e / miDetectorLSO / geometry / setYLength 3 . 0 mm / g a t e / miDetectorLSO / geometry / s etZLe ngth 3 . 8 mm / g a t e / miDetectorLSO / s e t M a t e r i a l LSO / g a t e / miDetectorLSO / v i s / s e t C o l o r r e d / g a t e / c r i s t a l / d a u g h t e r s /name miDetectorBGO / g a t e / c r i s t a l / d a u g h t e r s / i n s e r t box / g a t e /miDetectorBGO/ placement / s e t T r a n s l a t i o n +0.75 0 . 0 0 . 0 cm / g a t e /miDetectorBGO/ geometry / setXLength 15 mm / g a t e /miDetectorBGO/ geometry / setYLength 3 . 0 mm / g a t e /miDetectorBGO/ geometry / set ZLeng th 3 . 8 mm / g a t e /miDetectorBGO/ s e t M a t e r i a l BGO / g a t e /miDetectorBGO/ v i s / s e t C o l o r y e l l o w / gate / c r i s t a l / r e p e a t e r s / i n s e r t cubicArray / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberX 1 / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberY 5 / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberZ 5 / g a t e / c r i s t a l / c u b i c A r r a y / s e t R e p e a t V e c t o r 0 . 0 3 . 2 4 . 0 mm / gate / bloque / r e p e a t e r s / i n s e r t cubicArray / g a t e / b l o q u e / c u b i c A r r a y / setRepeatNumberX 1 / g a t e / b l o q u e / c u b i c A r r a y / setRepeatNumberY 20 / g a t e / b l o q u e / c u b i c A r r a y / setRepeatNumberZ 20 / g a t e / b l o q u e / c u b i c A r r a y / s e t R e p e a t V e c t o r 0 . 0 1 . 6 2 . 0 cm / gate / cabeza / r e p e a t e r s / i n s e r t r i n g / g a t e / c a b e z a / r i n g / setRepeatNumber 4 / gate / systems / cylindricalPET / r s e c t o r / attach cabeza / g a t e / s y s t e m s / c y l i n d r i c a l P E T / module / a t t a c h b l o q u e / gate / systems / cylindricalPET / c r y s t a l / attach c r i s t a l / g a t e / s y s t e m s / c y l i n d r i c a l P E T / l a y e r 0 / a t t a c h miDetectorLSO / g a t e / s y s t e m s / c y l i n d r i c a l P E T / l a y e r 1 / a t t a c h miDetectorBGO / g a t e / miDetectorLSO / a t t a c h C r y s t a l S D / g a t e /miDetectorBGO/ a t t a c h C r y s t a l S D / gate / systems / cylindricalPET / d e s c r i b e / g a t e / c y l i n d r i c a l P E T / moves / i n s e r t o r b i t i n g / g a t e / c y l i n d r i c a l P E T / o r b i t i n g / s e t S p e e d 30 deg / s / g a t e / c y l i n d r i c a l P E T / o r b i t i n g / s e t P o i n t 1 0 0 0 cm / g a t e / c y l i n d r i c a l P E T / o r b i t i n g / s e t P o i n t 2 0 0 1 cm / g a t e / world / d a u g h t e r s /name fantasma / g a t e / world / d a u g h t e r s / i n s e r t box / g a t e / fantasma / geometry / setXLength 10 cm / g a t e / fantasma / geometry / setYLength 10 cm / g a t e / fantasma / geometry / setZ Leng th 10 cm / g a t e / fantasma / s e t M a t e r i a l Water / g a t e / fantasma / v i s / f o r c e S o l i d / g a t e / fantasma / v i s / s e t C o l o r b l u e / g a t e / fantasma / attachPhantomSD / gate / physics / addProcess PhotoElectric / g a t e / p h y s i c s / a d d P r o c e s s Compton / g a t e / p h y s i c s / a d d P r o c e s s GammaConversion / gate / physics / addProcess LowEnergyRayleighScattering 55 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 / gate / physics / addProcess E l e c t r o n I o n i s a t i o n / gate / p h y s i c s / addProcess Bremsstrahlung / gate / physics / addProcess PositronAnnihilationStd / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e+ / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e− / g a t e / p h y s i c s / p r o c e s s L i s t Enabled / gate / physics / p r o c e s s L i s t I n i t i a l i z e d / g a t e / p h y s i c s /Gamma/ SetCutInRegion miDetectorLSO 1 . 0 cm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion miDetectorLSO 1 . 0 cm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion miDetectorLSO 1 . 0 cm / g a t e / p h y s i c s /Gamma/ SetCutInRegion miDetectorBGO 1 . 0 cm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion miDetectorBGO 1 . 0 cm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion miDetectorBGO 1 . 0 cm / g a t e / p h y s i c s /Gamma/ SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / SetMaxStepSizeInRegion fantasma 0 . 0 1 mm / g a t e / run / i n i t i a l i z e / g a t e / t i m i n g / setTime 0 . s / g a t e / t i m i n g / setTime 1 s / g a t e / t i m i n g / setTime 2 s / g a t e / t i m i n g / setTime 3 s / g a t e / t i m i n g / setTime 4 s / g a t e / t i m i n g / setTime 5 s / g a t e / t i m i n g / setTime 6 s / g a t e / d i g i t i z e r / S i n g l e s / i n s e r t adder / gate / d i g i t i z e r / S i n g l e s / i n s e r t readout / g a t e / d i g i t i z e r / S i n g l e s / r e a d o u t / setDepth 1 / gate / d i g i t i z e r / S i n g l e s / i n s e r t blurring / gate / d i g i t i z e r / S i n g l e s / blurring / setResolution 0.26 / g a t e / d i g i t i z e r / S i n g l e s / b l u r r i n g / s e t E n e r g y O f R e f e r e n c e 5 1 1 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t thresholder / g a t e / d i g i t i z e r / S i n g l e s / t h r e s h o l d e r / s e t T h r e s h o l d 3 5 0 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t upholder / g a t e / d i g i t i z e r / S i n g l e s / u p h o l d e r / setUphold 6 5 0 . keV / g a t e / d i g i t i z e r / C o i n c i d e n c e s / setWindow 1 0 . ns / g a t e / d i g i t i z e r /name demora / gate / d i g i t i z e r / i n s e r t coincidenceSorter / g a t e / d i g i t i z e r / demora / setWindow 1 0 . ns / g a t e / d i g i t i z e r / demora / s e t O f f s e t 5 0 0 . ns / g a t e / s o u r c e / addSource m i p o s i t r o n C 1 1 / g a t e / s o u r c e / m i p o s i t r o n C 1 1 / gps / p a r t i c l e e+ / g a t e / s o u r c e / m i p o s i t r o n C 1 1 / gps / e n e r g y t y p e Carbon11 / g a t e / s o u r c e / m i p o s i t r o n C 1 1 / s e t A c t i v i t y 100 b e c q u e r e l / gate / source / mipositronC11 / setForcedUnstableFlag true / g a t e / s o u r c e / m i p o s i t r o n C 1 1 / s e t F o r c e d H a l f L i f e 1223 s / g a t e / s o u r c e / m i p o s i t r o n C 1 1 / gps / angtype i s o / gate / source / l i s t / g a t e / output / r o o t / e n a b l e / g a t e / output / r o o t / s etF ileN ame Y o u r F i l e / g a t e / output / r o o t / s e t R o o t H i t F l a g 0 / g a t e / output / r o o t / s e t R o o t S i n g l e s F l a g 1 56 167 168 169 170 171 172 173 174 175 / g a t e / output / r o o t / s e t R o o t C o i n c i d e n c e s F l a g 1 / g a t e / output / r o o t / setRootdemoraFlag 1 / g a t e /random/ setEngineName JamesRandom / g a t e /random/ s e t E n g i n e S e e d d e f a u l t / g a t e /random/ v e r b o s e 1 / gate / a p p l i c a t i o n / setTimeSlice 1 s / gate / a p p l i c a t i o n / setTimeStart 0 s / g a t e / a p p l i c a t i o n / setTimeStop 6 s / g a t e / a p p l i c a t i o n / startDAQ 2.4.2. Sistema ecat El código que analizaremos se llama PET_Ecat_System.mac y realiza una simulación utilizando archivos de salida tipo sinogramas ecat. Las líneas 1 a 28 de este código son idénticas al código anterior, la línea 29 /gate/world/daughters/name ecat introduce una hija de world, en este caso un sistema ecat (nuevamente este nombre del sistema no se puede cambiar). Las líneas 31 a 37 world ecat fantasma cristal bloque micarter micarter1 micarter2 micarter3 micarter4 Figura 2.2: Geometría del detector ecat presente en PET_Ecat_System.mac. La echa indica que un volumen apunta a la volumen hija /gate/ecat/geometry/setRmax 44.2 cm /gate/ecat/geometry/setRmin 41.2 cm 57 /gate/ecat/geometry/setHeight 15.52 cm /gate/ecat/setMaterial Air /gate/ecat/vis/forceWireframe /gate/ecat/daughters/name bloque /gate/ecat/daughters/insert box denen la geometría del ecat como un anillo de radio externo igual a 44.2 cm y radio interno igual a 41.2 cm, el largo en z igual a 2×15.52 cm; el material es aire, la visu- alización de ecat se hace por medio de cables e introducimos una hija de ecat llamada bloque y que tiene forma de caja. Las líneas 38 a 45 /gate/bloque/placement/setTranslation 427.0 0.0 0.0 mm /gate/bloque/geometry/setXLength 30.0 mm /gate/bloque/geometry/setYLength 35.8594 mm /gate/bloque/geometry/setZLength 38.7 mm /gate/bloque/setMaterial Air /gate/bloque/vis/forceWireframe /gate/bloque/daughters/name cristal /gate/bloque/daughters/insert box colocan a bloque en la posición (427, 0, 0)mm del marco de referencia de ecat. Las dimensiones de bloque se establecen a 2×(30, 358.8594, 38.7)mm, el material de bloque es aire y la opción de visualización es de cables. Además de eso se le asigna una hija llamada cristal de geometría de caja. Las líneas 46 a 55 /gate/cristal/geometry/setXLength 30.0 mm /gate/cristal/geometry/setYLength 4.4 mm /gate/cristal/geometry/setZLength 4.75 mm /gate/cristal/setMaterial BGO /gate/cristal/vis/setColor yellow /gate/cristal/repeaters/insert cubicArray /gate/cristal/cubicArray/setRepeatNumberX 1 /gate/cristal/cubicArray/setRepeatNumberY 8 /gate/cristal/cubicArray/setRepeatNumberZ 8 /gate/cristal/cubicArray/setRepeatVector 0. 4.4942 4.85 mm establecen las longitudes de cristal a 2×(30, 4.4, 4.75)mm, el material es cristal a BGO (Bi4 Ge3 O12 ), el color de cristal es amarillo, se repite cristal mediante un arreglo cubico 1 × 8 × 8 = 64 veces, con posiciones empezando en (0, -31.4594, -33.95) mm y termi- nando en (0, 31.4594, 33.95) mm, con un paso de repetición de 2×(0, 4.4942, 4.85) mm. Ahora bien, teniendo ya a cristal repetido dentro de bloque, podemos repetir bloque. En las líneas 56 a 58 /gate/bloque/repeaters/insert linear /gate/bloque/linear/setRepeatNumber 4 /gate/bloque/linear/setRepeatVector 0. 0. 38.8 mm inserta un repetidor lineal y repite 4 veces a bloque en el eje 58 z con un paso de 2×38.8 mm. La formula general para un repetidor lineal es: ~ P~ (a) = P~0 + 2aR donde entero ~ es el R a toma (2.10) vector de repetición establecido por el comando setRepeatVector. El valores de la misma manera como se explico en el repetidor de arreglo cubico, desde 1 hasta el valor establecido por el comando setRepeatNumber. Debido al autocentrado que esta puesto por defecto, los vectores de posición de los bloques irán desde hasta 1 − a ~ P 2 a ~ P max max − 1 2 = P~0 + (1 − a = P~0 + (a max ~ )R (2.11) ~ − 1)R. (2.12) max Por ejemplo para este caso en particular, las posiciones iniciales y nales del cluster de bloques son: (427, 0, -116.4)mm hasta (427, 0, 116.4)mm. Las líneas 59 y 60 /gate/bloque/repeaters/insert ring /gate/bloque/ring/setRepeatNumber 72 nos indican que vamos a volver a repetir a bloque (el cluster de bloques), pero esta vez el repetidor es un anillo, con el eje z (el que viene por defecto) como eje de rotación. Bloque se repite 72 veces, luego cada posición viene dada cada el cluster de bloques contará con 4 × 72 = 288 2π/72 radianes. Al nal bloques. Las líneas 61 a 68 /gate/world/daughters/name micarter /gate/world/daughters/insert cylinder /gate/micarter/setMaterial Air /gate/micarter/geometry/setRmax 44. cm /gate/micarter/geometry/setRmin 28. cm /gate/micarter/geometry/setHeight 9. cm /gate/micarter/placement/setTranslation 0.0 0.0 12.5 cm /gate/micarter/vis/forceWireframe introducen otro hija de mundo llamado micarter como un cilindro hueco hecho de aire, con radio interno de 28 cm, radio externo de 44 cm, altura de 2×9=18 cm y lo ubica en la posicion (0, 0, 12.5)cm del marco de referencia de mundo, además de eso, micarter viene visualizado con cables. Las líneas 69 a 76 /gate/micarter/daughters/name micarter1 /gate/micarter/daughters/insert cylinder /gate/micarter1/setMaterial Tungsten /gate/micarter1/geometry/setRmax 30.0 cm /gate/micarter1/geometry/setRmin 29.0 cm /gate/micarter1/geometry/setHeight 3.0 cm /gate/micarter1/vis/setColor grey /gate/micarter1/placement/setTranslation 0.0 0.0 -3 cm crean una hija de micarter llamada carter1 con las especicaciones indicadas arriba. Las líneas 77 a 84 59 /gate/micarter/daughters/name micarter2 /gate/micarter/daughters/insert cylinder /gate/micarter2/setMaterial Tungsten /gate/micarter2/geometry/setRmax 40.7 cm /gate/micarter2/geometry/setRmin 30.0 cm /gate/micarter2/geometry/setHeight 1.0 cm /gate/micarter2/vis/setColor grey /gate/micarter2/placement/setTranslation 0.0 0.0 -2 cm crean una hija de micarter llamada micarter2 con las especicaciones indicadas arriba. Las líneas 85 a 92 /gate/micarter/daughters/name micarter3 /gate/micarter/daughters/insert cylinder /gate/micarter3/setMaterial Tungsten /gate/micarter3/geometry/setRmax 40.7 cm /gate/micarter3/geometry/setRmin 39.7 cm /gate/micarter3/geometry/setHeight 3.0 cm /gate/micarter3/vis/setColor grey /gate/micarter3/placement/setTranslation 0.0 0.0 0 cm crean una hija de micarter llamada micarter3 con las especicaciones indicadas arriba. Las líneas 93 a 100 /gate/micarter/daughters/name micarter4 /gate/micarter/daughters/insert cylinder /gate/micarter4/setMaterial Tungsten /gate/micarter4/geometry/setRmax 43.7 cm /gate/micarter4/geometry/setRmin 40.7 cm /gate/micarter4/geometry/setHeight 1.0 cm /gate/micarter4/vis/setColor grey /gate/micarter4/placement/setTranslation 0.0 0.0 1 cm crean una hija de micarter llamada micarter4 con las especicaciones indicadas arriba. Las líneas 101 a 103 /gate/systems/ecat/block/attach bloque /gate/systems/ecat/crystal/attach cristal /gate/cristal/attachCrystalSD atan los volumenes bloque a block, cristal a crystal, y además se especica que cristal es un detector sensitivo. Las líneas 104 a 110 /gate/world/daughters/name fantasma /gate/world/daughters/insert cylinder /gate/fantasma/setMaterial Water /gate/fantasma/vis/setColor green /gate/fantasma/geometry/setRmax 10.0 cm /gate/fantasma/geometry/setHeight 20. cm /gate/fantasma/attachPhantomSD crean a nuestro fantasma como una hija de mundo, y ademaás este fantasma es un de- 60 tector sensitivo de fantasma. El resto de especicaciones las podemos ver en el código. Las líneas 111 a 121 /gate/physics/addProcess PhotoElectric /gate/physics/addProcess Compton /gate/physics/addProcess GammaConversion /gate/physics/addProcess LowEnergyRayleighScattering /gate/physics/addProcess ElectronIonisation /gate/physics/addProcess Bremsstrahlung /gate/physics/addProcess PositronAnnihilationStd /gate/physics/addProcess MultipleScattering e+ /gate/physics/addProcess MultipleScattering e/gate/physics/processList Enabled /gate/physics/processList Initialized introducen los procesos físicos que estan presentes en la simulación, los habilita y los inicializa. Las líneas 122 a 129 /gate/physics/Gamma/SetCutInRegion cristal 1.0 cm /gate/physics/Electron/SetCutInRegion cristal 1.0 cm /gate/physics/Positron/SetCutInRegion cristal 1.0 cm /gate/physics/Gamma/SetCutInRegion fantasma 0.1 mm /gate/physics/Electron/SetCutInRegion fantasma 0.1 mm /gate/physics/Positron/SetCutInRegion fantasma 0.1 mm /gate/physics/SetMaxStepSizeInRegion fantasma 0.01 mm /gate/run/initialize establecen los valores de corte para fotón, electrón y positrón para evitar divergencias infrarrojas en los volumenes cristal y fantasma. Líneas 130 a 157 /gate/digitizer/Singles/insert adder /gate/digitizer/Singles/insert readout /gate/digitizer/Singles/readout/setDepth 1 /gate/digitizer/Singles/insert blurring /gate/digitizer/Singles/blurring/setResolution 0.26 /gate/digitizer/Singles/blurring/setEnergyOfReference 511. keV /gate/digitizer/Singles/insert thresholder /gate/digitizer/Singles/thresholder/setThreshold 250. keV /gate/digitizer/Singles/insert upholder /gate/digitizer/Singles/upholder/setUphold 750. keV /gate/digitizer/Singles/insert deadtime /gate/digitizer/Singles/deadtime/setDeadTime 3000000. ps /gate/digitizer/Singles/deadtime/setMode paralysable /gate/digitizer/Singles/deadtime/chooseDTVolume bloque /gate/digitizer/Coincidences/setWindow 10. ns /gate/digitizer/Coincidences/setOset 0. ns /gate/digitizer/Coincidences/describe /gate/digitizer/name demora 61 /gate/digitizer/insert coincidenceSorter /gate/digitizer/demora/setWindow 10. ns /gate/digitizer/demora/setOset 500. ns /gate/digitizer/demora/describe /gate/digitizer/name coincidenciasFinales /gate/digitizer/insert coincidenceChain /gate/digitizer/coincidenciasFinales/addInputName demora /gate/digitizer/coincidenciasFinales/addInputName Coincidences /gate/digitizer/coincidenciasFinales/usePriority true /gate/digitizer/coincidenciasFinales/describe introduce toda la parte de digitalización. En las líneas 158 a 160 /gate/random/setEngineName JamesRandom /gate/random/setEngineSeed default /gate/random/verbose 1 usamos el generador de números aleatorios llamado JamesRandom, dejamos la semilla que viene por defecto e imprimimos la información en nivel 1. Líneas 161 a 167 /gate/output/root/enable /gate/output/root/setFileName YourPETSimu /gate/output/root/setRootSinglesAdderFlag 1 /gate/output/root/setRootSinglesReadoutFlag 1 /gate/output/root/setRootHitFlag 1 /gate/output/root/setRootSinglesFlag 1 /gate/output/root/setRootCoincidencesFlag 1 Líneas 168 a 177 /gate/output/sinogram/enable /gate/output/sinogram/setTangCrystalBlurring 1.8 mm /gate/output/sinogram/setAxialCrystalBlurring 1.8 mm /gate/output/sinogram/verbose 2 /gate/output/sinogram/RawOutputEnable false /gate/output/sinogram/setFileName yourSinogram /gate/output/sinogram/StoreDelayeds /gate/output/sinogram/StoreScatters /gate/output/sinogram/setInputDataName coincidenciasFinales /gate/output/sinogram/describe habilitan la creación de un archivo tipo sinograma con las especicaciones dadas a continuación. Los eventos coincidentes son almacenados en un arreglo de sinogramas 2D. Hay un sinograma 2D por cada par de anillos. Hay una correspondencia uno a uno entre bines de sinogramas y líneas de respuesta (LOR) juntando dos cristales en coincidencia. El asignamiento del bin del sinograma no es basado en las verdaderas posiciones radiales y azimutales del LOR, pero si en el indice de los cristales. Esto signica que los sinogramas estan sujetos a los efectos de curvatura. Por defecto, todos los eventos coincidentes son almacenados, a pesar de sus origenes (aleatorio, verdaderamente no dispersado, verdaderamente dispersado). Es posible descartar eventos aleatorios por 62 medio del comando /gate/output/sinogram/TruesOnly true En los verdaderos, coincidencias dispersas y no dispersas son incluidas. No hay simulación de una ventana de coincidencia demorada. Al comienzo de cada corrida, el contenido de los sinogramas 2D es restablecido a cero. Al nal de cada corrida los contenidos de los sinogramas 2D pueden ser opcionalmente escritos a un archivo crudo (uno por corrida), pero esta característica tiene que ser habilitada por medio del comando /gate/output/sinogram/RawOutputEnable True pero en nuestro caso en la línea 172 no fue habilitada. Líneas 178 a 188 /gate/output/ecat7/enable /gate/output/ecat7/verbose 2 /gate/output/ecat7/setFileName yourSinogram /gate/output/ecat7/describe /gate/output/ecat7/mashing 2 /gate/output/ecat7/span 9 /gate/output/ecat7/maxringdi 22 /gate/output/ecat7/system 962 /gate/output/ecat7/IsotopeCode F-18 /gate/output/ecat7/IsotopeHalife 6586.2 second /gate/output/ecat7/IsotopeBranchingFraction 1.0 muestran como habilitar un archivo de salida tipo ecat7 con nivel de verborrea igual a 2 y llamado yourSinogram. El sistema coordenado de una línea de Respuesta LOR se dene por la diferencia de los índices de los anillos-cristales de dos anillos en coincidencia. Para un escaner con por 2N − 1. N anillos-cristales, el número total de muestras simples es dada Usualmente no se almacenan todas las diferencias de anillos-cristales en sistemas ecat. Sólo se graban las diferencias absolutas hasta un valor dado, referido como la diferencia de anillo máxima, esta diferencia de anillo máxima se dene mediante el comando de la línea 184. La gura 2.3 muestra el signicado de maxringdi. Para mas información sobre el sistema ecat, usted puede leer las siguientes referencias: [7]. Las líneas 189 a 205 /gate/verbose Physic 5 /gate/verbose Cuts 0 /gate/verbose SD 0 /gate/verbose Actions 0 /gate/verbose Actor 0 /gate/verbose Step 0 /gate/verbose Error 0 /gate/verbose Warning 0 63 Figura 2.3: Michelograma para un sistema escaner de 16 anillo-cristales /gate/verbose Output 0 /gate/verbose Beam 0 /gate/verbose Volume 0 /gate/verbose Image 0 /gate/verbose Geometry 0 /gate/verbose Core 0 /run/verbose 0 /event/verbose 0 /tracking/verbose 0 como es bien sabido, hacen referencia a la información que se imprime en pantalla. Líneas 206 a 218 /gate/source/addSource F18CylinderSource /gate/source/F18CylinderSource/setActivity 10000. becquerel /gate/source/F18CylinderSource/gps/particle e+ /gate/source/F18CylinderSource/setForcedUnstableFlag true /gate/source/F18CylinderSource/setForcedHalfLife 6586 s /gate/source/F18CylinderSource/gps/energytype Fluor18 /gate/source/F18CylinderSource/gps/type Volume /gate/source/F18CylinderSource/gps/shape Cylinder /gate/source/F18CylinderSource/gps/radius 0.5 mm /gate/source/F18CylinderSource/gps/halfz 0.5 mm /gate/source/F18CylinderSource/gps/angtype iso /gate/source/F18CylinderSource/gps/centre 0.0 0.0 0. cm /gate/source/list 64 añaden una fuente de un isotopo de Fluor 18 de geometría cilindrica con una actividad radioactiva de 10000 Becquerel el cual lanza positrones. Finalmente las líneas 219 a 222 /gate/application/setTimeSlice 1. s /gate/application/setTimeStart 0. s /gate/application/setTimeStop 1. s /gate/application/startDAQ establecen el tiempo necesario para una adquisiciçón de datos, establce el tiempo de inicio y el de nalización, y comienza la adquisición de datos. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 / v i s / open OGLSX / v i s / v i e w e r / s e t / v i e w p o i n t T h e t a P h i 60 60 / v i s / v i e w e r /zoom 6 . 0 / v i s /drawVolume / tracking / storeTrajectory 1 / v i s / s c e n e /add/ t r a j e c t o r i e s / v i s / s c e n e / endOfEventAction accumulate / gate / verbose Physic 5 / g a t e / v e r b o s e Cuts 0 / g a t e / v e r b o s e SD 0 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 0 / g a t e / v e r b o s e Warning 0 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 0 / g a t e / v e r b o s e Core 0 / run / v e r b o s e 0 / event / verbose 0 / tracking / verbose 0 / g a t e / geometry / s e t M a t e r i a l D a t a b a s e G a t e M a t e r i a l s . db / g a t e / world / geometry / setXLength 4 0 0 . cm / g a t e / world / geometry / setYLength 4 0 0 . cm / g a t e / world / geometry / s etZL ength 4 0 0 . cm / g a t e / world / d a u g h t e r s /name e c a t / g a t e / world / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / e c a t / geometry /setRmax 4 4 . 2 cm / g a t e / e c a t / geometry / setRmin 4 1 . 2 cm / g a t e / e c a t / geometry / s e t H e i g h t 1 5 . 5 2 cm / g a t e / e c a t / s e t M a t e r i a l Air / gate / ecat / v i s / forceWireframe / g a t e / e c a t / d a u g h t e r s /name b l o q u e / g a t e / e c a t / d a u g h t e r s / i n s e r t box / g a t e / b l o q u e / placement / s e t T r a n s l a t i o n 4 2 7 . 0 0 . 0 0 . 0 mm / g a t e / b l o q u e / geometry / setXLength 3 0 . 0 mm / g a t e / b l o q u e / geometry / setYLength 3 5 . 8 5 9 4 mm / g a t e / b l o q u e / geometry / s etZL ength 3 8 . 7 mm / g a t e / b l o q u e / s e t M a t e r i a l Air 65 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 / gate / bloque / v i s / forceWireframe / g a t e / b l o q u e / d a u g h t e r s /name c r i s t a l / g a t e / b l o q u e / d a u g h t e r s / i n s e r t box / g a t e / c r i s t a l / geometry / setXLength 3 0 . 0 mm / g a t e / c r i s t a l / geometry / setYLength 4 . 4 mm / g a t e / c r i s t a l / geometry / s etZLe ngth 4 . 7 5 mm / g a t e / c r i s t a l / s e t M a t e r i a l BGO / gate / c r i s t a l / v i s / setColor yellow / gate / c r i s t a l / r e p e a t e r s / i n s e r t cubicArray / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberX 1 / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberY 8 / g a t e / c r i s t a l / c u b i c A r r a y / setRepeatNumberZ 8 / g a t e / c r i s t a l / c u b i c A r r a y / s e t R e p e a t V e c t o r 0 . 4 . 4 9 4 2 4 . 8 5 mm / gate / bloque / r e p e a t e r s / i n s e r t l i n e a r / g a t e / b l o q u e / l i n e a r / setRepeatNumber 4 / g a t e / b l o q u e / l i n e a r / s e t R e p e a t V e c t o r 0 . 0 . 3 8 . 8 mm / gate / bloque / r e p e a t e r s / i n s e r t ring / g a t e / b l o q u e / r i n g / setRepeatNumber 72 / g a t e / world / d a u g h t e r s /name m i c a r t e r / g a t e / world / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / m i c a r t e r / s e t M a t e r i a l Air / g a t e / m i c a r t e r / geometry /setRmax 4 4 . cm / g a t e / m i c a r t e r / geometry / setRmin 2 8 . cm / g a t e / m i c a r t e r / geometry / s e t H e i g h t 9 . cm / g a t e / m i c a r t e r / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 1 2 . 5 cm / gate / micarter / v i s / forceWireframe / g a t e / m i c a r t e r / d a u g h t e r s /name m i c a r t e r 1 / gate / micarter / daughters / i n s e r t c y l i n d e r / g a t e / m i c a r t e r 1 / s e t M a t e r i a l Tungsten / g a t e / m i c a r t e r 1 / geometry /setRmax 3 0 . 0 cm / g a t e / m i c a r t e r 1 / geometry / setRmin 2 9 . 0 cm / g a t e / m i c a r t e r 1 / geometry / s e t H e i g h t 3 . 0 cm / gate / micarter1 / v i s / setColor grey / g a t e / m i c a r t e r 1 / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 −3 cm / g a t e / m i c a r t e r / d a u g h t e r s /name m i c a r t e r 2 / gate / micarter / daughters / i n s e r t c y l i n d e r / g a t e / m i c a r t e r 2 / s e t M a t e r i a l Tungsten / g a t e / m i c a r t e r 2 / geometry /setRmax 4 0 . 7 cm / g a t e / m i c a r t e r 2 / geometry / setRmin 3 0 . 0 cm / g a t e / m i c a r t e r 2 / geometry / s e t H e i g h t 1 . 0 cm / gate / micarter2 / v i s / setColor grey / g a t e / m i c a r t e r 2 / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 −2 cm / g a t e / m i c a r t e r / d a u g h t e r s /name m i c a r t e r 3 / gate / micarter / daughters / i n s e r t c y l i n d e r / g a t e / m i c a r t e r 3 / s e t M a t e r i a l Tungsten / g a t e / m i c a r t e r 3 / geometry /setRmax 4 0 . 7 cm / g a t e / m i c a r t e r 3 / geometry / setRmin 3 9 . 7 cm / g a t e / m i c a r t e r 3 / geometry / s e t H e i g h t 3 . 0 cm / gate / micarter3 / v i s / setColor grey / g a t e / m i c a r t e r 3 / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 0 cm / g a t e / m i c a r t e r / d a u g h t e r s /name m i c a r t e r 4 / gate / micarter / daughters / i n s e r t c y l i n d e r 66 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 / g a t e / m i c a r t e r 4 / s e t M a t e r i a l Tungsten / g a t e / m i c a r t e r 4 / geometry /setRmax 4 3 . 7 cm / g a t e / m i c a r t e r 4 / geometry / setRmin 4 0 . 7 cm / g a t e / m i c a r t e r 4 / geometry / s e t H e i g h t 1 . 0 cm / gate / micarter4 / v i s / setColor grey / g a t e / m i c a r t e r 4 / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 1 cm / gate / systems / ecat / block / attach bloque / gate / systems / ecat / c r y s t a l / attach c r i s t a l / gate / c r i s t a l / attachCrystalSD / g a t e / world / d a u g h t e r s /name fantasma / g a t e / world / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / fantasma / s e t M a t e r i a l Water / g a t e / fantasma / v i s / s e t C o l o r g r e e n / g a t e / fantasma / geometry /setRmax 1 0 . 0 cm / g a t e / fantasma / geometry / s e t H e i g h t 2 0 . cm / g a t e / fantasma / attachPhantomSD / gate / physics / addProcess PhotoElectric / g a t e / p h y s i c s / a d d P r o c e s s Compton / g a t e / p h y s i c s / a d d P r o c e s s GammaConversion / gate / physics / addProcess LowEnergyRayleighScattering / gate / physics / addProcess E l e c t r o n I o n i s a t i o n / gate / p h y s i c s / addProcess Bremsstrahlung / gate / physics / addProcess PositronAnnihilationStd / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e+ / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e− / g a t e / p h y s i c s / p r o c e s s L i s t Enabled / gate / physics / p r o c e s s L i s t I n i t i a l i z e d / g a t e / p h y s i c s /Gamma/ SetCutInRegion c r i s t a l 1 . 0 cm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion c r i s t a l 1 . 0 cm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion c r i s t a l 1 . 0 cm / g a t e / p h y s i c s /Gamma/ SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion fantasma 0 . 1 mm / g a t e / p h y s i c s / SetMaxStepSizeInRegion fantasma 0 . 0 1 mm / g a t e / run / i n i t i a l i z e / g a t e / d i g i t i z e r / S i n g l e s / i n s e r t adder / gate / d i g i t i z e r / S i n g l e s / i n s e r t readout / g a t e / d i g i t i z e r / S i n g l e s / r e a d o u t / setDepth 1 / gate / d i g i t i z e r / S i n g l e s / i n s e r t blurring / gate / d i g i t i z e r / S i n g l e s / blurring / setResolution 0.26 / g a t e / d i g i t i z e r / S i n g l e s / b l u r r i n g / s e t E n e r g y O f R e f e r e n c e 5 1 1 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t thresholder / g a t e / d i g i t i z e r / S i n g l e s / t h r e s h o l d e r / s e t T h r e s h o l d 2 5 0 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t upholder / g a t e / d i g i t i z e r / S i n g l e s / u p h o l d e r / setUphold 7 5 0 . keV / g a t e / d i g i t i z e r / S i n g l e s / i n s e r t deadtime / g a t e / d i g i t i z e r / S i n g l e s / deadtime / setDeadTime 3 0 0 0 0 0 0 . ps / g a t e / d i g i t i z e r / S i n g l e s / deadtime / setMode p a r a l y s a b l e / g a t e / d i g i t i z e r / S i n g l e s / deadtime /chooseDTVolume b l o q u e / g a t e / d i g i t i z e r / C o i n c i d e n c e s / setWindow 1 0 . ns / g a t e / d i g i t i z e r / C o i n c i d e n c e s / s e t O f f s e t 0 . ns / gate / d i g i t i z e r / Coincidences / describe 67 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 / g a t e / d i g i t i z e r /name demora / gate / d i g i t i z e r / i n s e r t coincidenceSorter / g a t e / d i g i t i z e r / demora / setWindow 1 0 . ns / g a t e / d i g i t i z e r / demora / s e t O f f s e t 5 0 0 . ns / g a t e / d i g i t i z e r / demora / d e s c r i b e / g a t e / d i g i t i z e r /name c o i n c i d e n c i a s F i n a l e s / gate / d i g i t i z e r / i n s e r t coincidenceChain / g a t e / d i g i t i z e r / c o i n c i d e n c i a s F i n a l e s / addInputName demora / g a t e / d i g i t i z e r / c o i n c i d e n c i a s F i n a l e s / addInputName C o i n c i d e n c e s / gate / d i g i t i z e r / c o i n c i d e n c i a s F i n a l e s / u s e P r i o r i t y true / gate / d i g i t i z e r / c o i n c i d e n c i a s F i n a l e s / describe / g a t e /random/ setEngineName JamesRandom / g a t e /random/ s e t E n g i n e S e e d d e f a u l t / g a t e /random/ v e r b o s e 1 / g a t e / output / r o o t / e n a b l e / g a t e / output / r o o t / s etF ileN ame YourPETSimu / g a t e / output / r o o t / s e t R o o t S i n g l e s A d d e r F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s R e a d o u t F l a g 1 / g a t e / output / r o o t / s e t R o o t H i t F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s F l a g 1 / g a t e / output / r o o t / s e t R o o t C o i n c i d e n c e s F l a g 1 / g a t e / output / sinogram / e n a b l e / g a t e / output / sinogram / s e t T a n g C r y s t a l B l u r r i n g 1 . 8 mm / g a t e / output / sinogram / s e t A x i a l C r y s t a l B l u r r i n g 1 . 8 mm / g a t e / output / sinogram / v e r b o s e 2 / g a t e / output / sinogram / RawOutputEnable f a l s e / g a t e / output / sinogram / se tFil eNam e yourSinogram / g a t e / output / sinogram / S t o r e D e l a y e d s / g a t e / output / sinogram / S t o r e S c a t t e r s / g a t e / output / sinogram / setInputDataName c o i n c i d e n c i a s F i n a l e s / g a t e / output / sinogram / d e s c r i b e / g a t e / output / e c a t 7 / e n a b l e / g a t e / output / e c a t 7 / v e r b o s e 2 / g a t e / output / e c a t 7 / se tFil eNam e yourSinogram / g a t e / output / e c a t 7 / d e s c r i b e / g a t e / output / e c a t 7 / mashing 2 / g a t e / output / e c a t 7 / span 9 / g a t e / output / e c a t 7 / m a x r i n g d i f f 22 / g a t e / output / e c a t 7 / system 962 / g a t e / output / e c a t 7 / I s o t o p e C o d e F−18 / g a t e / output / e c a t 7 / I s o t o p e H a l f l i f e 6 5 8 6 . 2 s e c o n d / g a t e / output / e c a t 7 / I s o t o p e B r a n c h i n g F r a c t i o n 1 . 0 / gate / verbose Physic 5 / g a t e / v e r b o s e Cuts 0 / g a t e / v e r b o s e SD 0 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 0 / g a t e / v e r b o s e Warning 0 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 68 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 0 / g a t e / v e r b o s e Core 0 / run / v e r b o s e 0 / event / verbose 0 / tracking / verbose 0 / g a t e / s o u r c e / addSource F 1 8 C y l i n d e r S o u r c e / gate / source / F18CylinderSource / s e t A c t i v i t y 10000. becquerel / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / p a r t i c l e e+ / gate / source / F18CylinderSource / setForcedUnstableFlag true / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / s e t F o r c e d H a l f L i f e 6586 s / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / e n e r g y t y p e F l u o r 1 8 / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / type Volume / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / shape C y l i n d e r / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / r a d i u s 0 . 5 mm / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / h a l f z 0 . 5 mm / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / angtype i s o / g a t e / s o u r c e / F 1 8 C y l i n d e r S o u r c e / gps / c e n t r e 0 . 0 0 . 0 0 . cm / gate / source / l i s t / gate / a p p l i c a t i o n / setTimeSlice 1. s / gate / a p p l i c a t i o n / setTimeStart 0. s / g a t e / a p p l i c a t i o n / setTimeStop 1. s / g a t e / a p p l i c a t i o n / startDAQ 69 2.5. Sistemas SPECT en GATE En esta sección analizaremos un sistema de SPECT. En la gura 2.4 se puede ver el orden de los volumenes lógicos. Las primeras líneas (1-9) establcen la mayor parte que es la corresponde a la visualización. Recuerde que los jobs que se envien a la GRID de GISELA no deben contener comandos de visualización. /vis/open OGLSX /vis/viewer/set/viewpointThetaPhi 60 60 /vis/viewer/zoom 1.5 /vis/drawVolume /vis/viewer/ush /tracking/verbose 0 /tracking/storeTrajectory 1 /vis/scene/add/trajectories /vis/scene/endOfEventAction accumulate la línea 10 es bien conocida por todos /gate/geometry/setMaterialDatabase GateMaterials.db y llama a la base de datos con la información de los materiales disponibles en GATE. Las líneas 11 a 13 world table fantasma SPECThead shielding movsource cristal collimator compartment hole Figura 2.4: Geometría del detector SPECThead. La echa indica que un volumen apunta a la volumen hija /gate/world/geometry/setXLength 100 cm 70 /gate/world/geometry/setYLength 100 cm /gate/world/geometry/setZLength 100 cm ponen las dimensiones del mundo. las líneas 14 a 29 denen lo que es el volumen SPECThead. /gate/world/daughters/name SPECThead /gate/world/daughters/insert box /gate/SPECThead/geometry/setXLength 7. cm /gate/SPECThead/geometry/setYLength 21. cm /gate/SPECThead/geometry/setZLength 30. cm /gate/SPECThead/placement/setTranslation 20.0 0. 0. cm /gate/SPECThead/setMaterial Air /gate/SPECThead/repeaters/insert ring /gate/SPECThead/ring/setRepeatNumber 4 /gate/SPECThead/moves/insert orbiting /gate/SPECThead/orbiting/setSpeed 0.15 deg/s /gate/SPECThead/orbiting/setPoint1 0 0 0 cm /gate/SPECThead/orbiting/setPoint2 0 0 1 cm /gate/SPECThead/vis/forceWireframe Líneas 30 a 36 /gate/shielding/geometry/setXLength 7. cm /gate/shielding/geometry/setYLength 21. cm /gate/shielding/geometry/setZLength 30. cm /gate/shielding/placement/setTranslation 0. 0. 0. cm /gate/shielding/setMaterial Lead /gate/shielding/vis/setColor red /gate/shielding/vis/forceWireframe denen el volumen lógico de escudo shielding el cual esta hecho de plomo. Líneas 37 a 45 /gate/SPECThead/daughters/name collimator /gate/SPECThead/daughters/insert box /gate/collimator/geometry/setXLength 3. cm /gate/collimator/geometry/setYLength 19. cm /gate/collimator/geometry/setZLength 28. cm /gate/collimator/placement/setTranslation -2. 0. 0. cm /gate/collimator/setMaterial Lead /gate/collimator/vis/setColor red /gate/collimator/vis/forceWireframe denen a collimator el cual también es de plomo. Líneas 46 a 60 /gate/collimator/daughters/name hole /gate/collimator/daughters/insert hexagone /gate/hole/geometry/setHeight 3. cm /gate/hole/geometry/setRadius .15 cm /gate/hole/placement/setRotationAxis 0 1 0 71 /gate/hole/placement/setRotationAngle 90 deg /gate/hole/setMaterial Air /gate/hole/repeaters/insert cubicArray /gate/hole/cubicArray/setRepeatNumberX 1 /gate/hole/cubicArray/setRepeatNumberY 52 /gate/hole/cubicArray/setRepeatNumberZ 44 /gate/hole/cubicArray/setRepeatVector 0. 0.36 0.624 cm /gate/hole/repeaters/insert linear /gate/hole/linear/setRepeatNumber 2 /gate/hole/linear/setRepeatVector 0. 0.18 0.312 cm insertamos un hueco hole tipo hexagonal repetido varias veces. Líneas 61 a 68 /gate/SPECThead/daughters/name crystal /gate/SPECThead/daughters/insert box /gate/crystal/geometry/setXLength 1. cm /gate/crystal/geometry/setYLength 19. cm /gate/crystal/geometry/setZLength 28. cm /gate/crystal/placement/setTranslation 0. 0. 0. cm /gate/crystal/setMaterial NaI /gate/crystal/vis/setColor yellow denimos un cristal de tipo caja hecho de yoduro de sodio. Líneas 69 a 76 /gate/SPECThead/daughters/name compartment /gate/SPECThead/daughters/insert box /gate/compartment/geometry/setXLength 2.5 cm /gate/compartment/geometry/setYLength 19. cm /gate/compartment/geometry/setZLength 28. cm /gate/compartment/placement/setTranslation 1.75 0. 0. cm /gate/compartment/setMaterial Glass /gate/compartment/vis/setColor grey denimos a compartment de vidrio. Líneas 77 a 88 /gate/world/daughters/name table /gate/world/daughters/insert box /gate/table/geometry/setXLength 0.6 cm /gate/table/geometry/setYLength 8. cm /gate/table/geometry/setZLength 34. cm /gate/table/placement/setRotationAxis 0 0 1 /gate/table/placement/setRotationAngle 90 deg /gate/table/placement/setTranslation 0. -5.3 0. cm /gate/table/moves/insert translation /gate/table/translation/setSpeed 0 0 0.04 cm/s /gate/table/setMaterial Glass /gate/table/vis/setColor grey Denimos una mesa table de vidrio con una velocidad de movimiento de cm/s. Líneas 89 a 99 72 vz = 0,04 /gate/table/vis/setColor grey /gate/world/daughters/name fantasma /gate/world/daughters/insert cylinder /gate/fantasma/geometry/setRmax 5. cm /gate/fantasma/geometry/setRmin 0. cm /gate/fantasma/geometry/setHeight 20. cm /gate/fantasma/placement/setTranslation 0. 0. -6. cm /gate/fantasma/moves/insert translation /gate/fantasma/translation/setSpeed 0 0 0.04 cm/s /gate/fantasma/setMaterial Water /gate/fantasma/vis/setColor blue /gate/fantasma/vis/forceWireframe denimos a un fantasma hecho de agua cuya velocidad de movimiento es igual a la de table. Líneas 100 a 107 /gate/fantasma/daughters/name movsource /gate/fantasma/daughters/insert cylinder /gate/movsource/geometry/setRmax 2. cm /gate/movsource/geometry/setRmin 0. cm /gate/movsource/geometry/setHeight 5. cm /gate/movsource/placement/setTranslation 0. 0. -6. cm /gate/movsource/setMaterial Water /gate/movsource/vis/setColor magenta Líneas 108 a 109 /gate/systems/SPECThead/crystal/attach crystal /gate/systems/SPECThead/describe adjuntan los volumenes que previamente creados a las subpartes del sistema SPECT. Líneas 110 a 117 /gate/crystal/attachCrystalSD /gate/fantasma/attachPhantomSD /gate/movsource/attachPhantomSD /gate/table/attachPhantomSD /gate/compartment/attachPhantomSD /gate/shielding/attachPhantomSD /gate/SPECThead/attachPhantomSD /gate/collimator/attachPhantomSD adjuntan los volumenes previamente creados a subpartes del detecotor SPECT. Líneas 118 a 125 /gate/physics/addProcess PhotoElectric /gate/physics/addProcess LowEnergyCompton /gate/physics/addProcess LowEnergyRayleighScattering /gate/physics/addProcess ElectronIonisation /gate/physics/addProcess Bremsstrahlung /gate/physics/addProcess MultipleScattering e- 73 /gate/physics/processList Enabled /gate/physics/processList Initialized Líneas 126 y 127 /gate/physics/Gamma/SetCutInRegion SPECThead 0.1 cm /gate/physics/Electron/SetCutInRegion SPECThead 1.0 cm introduce los cortes necesarios en los electrones y fotones, para así evitar divergencias infrarrojas. Línea 128 /gate/run/initialize Líneas 129 a 145 /gate/timing/setTime 0. s /gate/timing/setTime 37.5 s /gate/timing/setTime 75 s /gate/timing/setTime 112.5 s /gate/timing/setTime 150 s /gate/timing/setTime 187.5 s /gate/timing/setTime 225 s /gate/timing/setTime 262.5 s /gate/timing/setTime 300 s /gate/timing/setTime 337.5 s /gate/timing/setTime 375 s /gate/timing/setTime 412.5 s /gate/timing/setTime 450 s /gate/timing/setTime 487.5 s /gate/timing/setTime 525 s /gate/timing/setTime 562.5 s /gate/timing/setTime 600 s son distintas estampillas de tiempo para observar los que ocurre con la simulación. Líneas 146 a 156 /gate/source/addSource SourceConnement /gate/source/SourceConnement/gps/type Volume /gate/source/SourceConnement/gps/shape Cylinder /gate/source/SourceConnement/gps/radius 2. cm /gate/source/SourceConnement/gps/halfz 14.5 cm /gate/source/SourceConnement/gps/centre 0. 0. 0. cm /gate/source/SourceConnement/gps/particle gamma /gate/source/SourceConnement/gps/energy 140. keV /gate/source/SourceConnement/setActivity 30000. Bq /gate/source/SourceConnement/gps/angtype iso /gate/source/SourceConnement/gps/conne movsource Introducen una fuente de fotones de tipo ciliíndrico y otras propiedades que pueden ser vistas en los comandos. Líneas 157 a 167 /gate/digitizer/Singles/insert adder /gate/digitizer/Singles/insert blurring /gate/digitizer/Singles/blurring/setResolution 0.10 74 /gate/digitizer/Singles/blurring/setEnergyOfReference 140. keV /gate/digitizer/Singles/insert spblurring /gate/digitizer/Singles/spblurring/setSpresolution 2.0 mm /gate/digitizer/Singles/spblurring/verbose 0 /gate/digitizer/Singles/insert thresholder /gate/digitizer/Singles/thresholder/setThreshold 20. keV /gate/digitizer/Singles/insert upholder /gate/digitizer/Singles/upholder/setUphold 190. keV se simula la parte del digitalizador. Líneas 168 a 174 /gate/output/root/enable /gate/output/root/setFileName benchSPECT /gate/output/root/setRootSinglesAdderFlag 1 /gate/output/root/setRootSinglesBlurringFlag 1 /gate/output/root/setRootSinglesSpblurringFlag 1 /gate/output/root/setRootSinglesThresholderFlag 1 /gate/output/root/setRootSinglesUpholderFlag 1 habilitamos la creación de un archivo de salida tipo ROOT en donde guardaremos la información correspondiente a la digitalización. Líneas 175 a 179 /gate/output/ascii/setOutFileSinglesAdderFlag 0 /gate/output/ascii/setOutFileSinglesSpblurringFlag 0 /gate/output/ascii/setOutFileSinglesBlurringFlag 0 /gate/output/ascii/setOutFileSinglesThresholderFlag 0 /gate/output/ascii/setOutFileSinglesUpholderFlag 0 desabilitamos la creación de un archivo ascii con la información correspondiente a la digitalización. Líneas 180 a 182 /gate/random/setEngineName Ranlux64 /gate/random/setEngineSeed 123456789 /gate/random/verbose 1 introducimos la información pertinente a la generación de números aleatorios. Líneas 183 a 189 /gate/output/projection/enable /gate/output/projection/setFileName YourProjection /gate/output/projection/pixelSizeX 0.904 mm /gate/output/projection/pixelSizeY 0.904 mm /gate/output/projection/pixelNumberX 128 /gate/output/projection/pixelNumberY 128 /gate/output/projection/projectionPlane YZ habilitamos la creación de un archivo llamado YourProjection en donde se muestra la vista YZ del pixel 128 denido en XY . Líneas 190 a 192 /gate/application/setTimeSlice 37.5 s /gate/application/setTimeStart 0. s /gate/application/setTimeStop 600. s establece los tiempos inicial y nal, además de la longitud de los cuadros temporales 75 de la simulación. Líneas 193 a 209 /gate/verbose Physic 0 /gate/verbose Cuts 0 /gate/verbose SD 0 /gate/verbose Actions 0 /gate/verbose Actor 0 /gate/verbose Step 0 /gate/verbose Error 0 /gate/verbose Warning 0 /gate/verbose Output 0 /gate/verbose Beam 0 /gate/verbose Volume 0 /gate/verbose Image 0 /gate/verbose Geometry 0 /gate/verbose Core 0 /run/verbose 0 /event/verbose 0 /tracking/verbose 0 son comandos de verborrea. Y nalmente la línea 210 /gate/application/startDAQ empieza la simulación. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 / v i s / open OGLSX / v i s / v i e w e r / s e t / v i e w p o i n t T h e t a P h i 60 60 / v i s / v i e w e r /zoom 1 . 5 / v i s /drawVolume / v i s / viewer / f l u s h / tracking / verbose 0 / tracking / storeTrajectory 1 / v i s / s c e n e /add/ t r a j e c t o r i e s / v i s / s c e n e / endOfEventAction accumulate / g a t e / geometry / s e t M a t e r i a l D a t a b a s e G a t e M a t e r i a l s . db / g a t e / world / geometry / setXLength 100 cm / g a t e / world / geometry / setYLength 100 cm / g a t e / world / geometry / s etZL ength 100 cm / g a t e / world / d a u g h t e r s /name SPECThead / g a t e / world / d a u g h t e r s / i n s e r t box / g a t e /SPECThead/ geometry / setXLength 7 . cm / g a t e /SPECThead/ geometry / setYLength 2 1 . cm / g a t e /SPECThead/ geometry / se tZLen gth 3 0 . cm / g a t e /SPECThead/ placement / s e t T r a n s l a t i o n 2 0 . 0 0 . 0 . cm / g a t e /SPECThead/ s e t M a t e r i a l Air / g a t e /SPECThead/ r e p e a t e r s / i n s e r t r i n g / g a t e /SPECThead/ r i n g / setRepeatNumber 4 / g a t e /SPECThead/ moves / i n s e r t o r b i t i n g / g a t e /SPECThead/ o r b i t i n g / s e t S p e e d 0 . 1 5 deg / s / g a t e /SPECThead/ o r b i t i n g / s e t P o i n t 1 0 0 0 cm / g a t e /SPECThead/ o r b i t i n g / s e t P o i n t 2 0 0 1 cm / g a t e /SPECThead/ v i s / f o r c e W i r e f r a m e 76 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 / g a t e /SPECThead/ d a u g h t e r s /name s h i e l d i n g / g a t e /SPECThead/ d a u g h t e r s / i n s e r t box / g a t e / s h i e l d i n g / geometry / setXLength 7 . cm / g a t e / s h i e l d i n g / geometry / setYLength 2 1 . cm / g a t e / s h i e l d i n g / geometry / s etZL ength 3 0 . cm / g a t e / s h i e l d i n g / placement / s e t T r a n s l a t i o n 0 . 0 . 0 . cm / g a t e / s h i e l d i n g / s e t M a t e r i a l Lead / gate / s h i e l d i n g / v i s / setColor red / gate / s h i e l d i n g / v i s / forceWireframe / g a t e /SPECThead/ d a u g h t e r s /name c o l l i m a t o r / g a t e /SPECThead/ d a u g h t e r s / i n s e r t box / g a t e / c o l l i m a t o r / geometry / setXLength 3 . cm / g a t e / c o l l i m a t o r / geometry / setYLength 1 9 . cm / g a t e / c o l l i m a t o r / geometry / s etZL ength 2 8 . cm / g a t e / c o l l i m a t o r / placement / s e t T r a n s l a t i o n − 2. 0 . 0 . cm / g a t e / c o l l i m a t o r / s e t M a t e r i a l Lead / gate / c o l l i m a t o r / v i s / setColor red / gate / collima tor / v i s / forceWireframe / g a t e / c o l l i m a t o r / d a u g h t e r s /name h o l e / g a t e / c o l l i m a t o r / d a u g h t e r s / i n s e r t hexagone / g a t e / h o l e / geometry / s e t H e i g h t 3 . cm / g a t e / h o l e / geometry / s e t R a d i u s . 1 5 cm / g a t e / h o l e / placement / s e t R o t a t i o n A x i s 0 1 0 / g a t e / h o l e / placement / s e t R o t a t i o n A n g l e 90 deg / g a t e / h o l e / s e t M a t e r i a l Air / gate / hole / r e p e a t e r s / i n s e r t cubicArray / g a t e / h o l e / c u b i c A r r a y / setRepeatNumberX 1 / g a t e / h o l e / c u b i c A r r a y / setRepeatNumberY 52 / g a t e / h o l e / c u b i c A r r a y / setRepeatNumberZ 44 / g a t e / h o l e / c u b i c A r r a y / s e t R e p e a t V e c t o r 0 . 0 . 3 6 0 . 6 2 4 cm / gate / hole / repeaters / i n s e r t l i n e a r / g a t e / h o l e / l i n e a r / setRepeatNumber 2 / g a t e / h o l e / l i n e a r / s e t R e p e a t V e c t o r 0 . 0 . 1 8 0 . 3 1 2 cm / g a t e /SPECThead/ d a u g h t e r s /name c r y s t a l / g a t e /SPECThead/ d a u g h t e r s / i n s e r t box / g a t e / c r y s t a l / geometry / setXLength 1 . cm / g a t e / c r y s t a l / geometry / setYLength 1 9 . cm / g a t e / c r y s t a l / geometry / s etZL ength 2 8 . cm / g a t e / c r y s t a l / placement / s e t T r a n s l a t i o n 0 . 0 . 0 . cm / g a t e / c r y s t a l / s e t M a t e r i a l NaI / gate / c r y s t a l / v i s / setColor yellow / g a t e /SPECThead/ d a u g h t e r s /name compartment / g a t e /SPECThead/ d a u g h t e r s / i n s e r t box / g a t e / compartment / geometry / setXLength 2 . 5 cm / g a t e / compartment / geometry / setYLength 1 9 . cm / g a t e / compartment / geometry / s etZL ength 2 8 . cm / g a t e / compartment / placement / s e t T r a n s l a t i o n 1 . 7 5 0 . 0 . cm / g a t e / compartment / s e t M a t e r i a l G l a s s / g a t e / compartment / v i s / s e t C o l o r g r e y / g a t e / world / d a u g h t e r s /name t a b l e / g a t e / world / d a u g h t e r s / i n s e r t box / g a t e / t a b l e / geometry / setXLength 0 . 6 cm 77 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 / g a t e / t a b l e / geometry / setYLength 8 . cm / g a t e / t a b l e / geometry / setZ Leng th 3 4 . cm / g a t e / t a b l e / placement / s e t R o t a t i o n A x i s 0 0 1 / g a t e / t a b l e / placement / s e t R o t a t i o n A n g l e 90 deg / g a t e / t a b l e / placement / s e t T r a n s l a t i o n 0 . − 5.3 0 . cm / g a t e / t a b l e / moves / i n s e r t t r a n s l a t i o n / g a t e / t a b l e / t r a n s l a t i o n / s e t S p e e d 0 0 0 . 0 4 cm/ s / gate / table / setMaterial Glass / gate / table / v i s / setColor grey / g a t e / world / d a u g h t e r s /name fantasma / g a t e / world / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / fantasma / geometry /setRmax 5 . cm / g a t e / fantasma / geometry / setRmin 0 . cm / g a t e / fantasma / geometry / s e t H e i g h t 2 0 . cm / g a t e / fantasma / placement / s e t T r a n s l a t i o n 0 . 0 . − 6. cm / g a t e / fantasma / moves / i n s e r t t r a n s l a t i o n / g a t e / fantasma / t r a n s l a t i o n / s e t S p e e d 0 0 0 . 0 4 cm/ s / g a t e / fantasma / s e t M a t e r i a l Water / g a t e / fantasma / v i s / s e t C o l o r b l u e / g a t e / fantasma / v i s / f o r c e W i r e f r a m e / g a t e / fantasma / d a u g h t e r s /name movsource / g a t e / fantasma / d a u g h t e r s / i n s e r t c y l i n d e r / g a t e / movsource / geometry /setRmax 2 . cm / g a t e / movsource / geometry / setRmin 0 . cm / g a t e / movsource / geometry / s e t H e i g h t 5 . cm / g a t e / movsource / placement / s e t T r a n s l a t i o n 0 . 0 . − 6. cm / g a t e / movsource / s e t M a t e r i a l Water / g a t e / movsource / v i s / s e t C o l o r magenta / g a t e / s y s t e m s /SPECThead/ c r y s t a l / a t t a c h c r y s t a l / g a t e / s y s t e m s /SPECThead/ d e s c r i b e / gate / c r y s t a l / attachCrystalSD / g a t e / fantasma / attachPhantomSD / g a t e / movsource / attachPhantomSD / g a t e / t a b l e / attachPhantomSD / g a t e / compartment / attachPhantomSD / g a t e / s h i e l d i n g / attachPhantomSD / g a t e /SPECThead/ attachPhantomSD / g a t e / c o l l i m a t o r / attachPhantomSD / gate / physics / addProcess PhotoElectric / g a t e / p h y s i c s / a d d P r o c e s s LowEnergyCompton / gate / physics / addProcess LowEnergyRayleighScattering / gate / physics / addProcess E l e c t r o n I o n i s a t i o n / gate / p h y s i c s / addProcess Bremsstrahlung / g a t e / p h y s i c s / a d d P r o c e s s M u l t i p l e S c a t t e r i n g e− / g a t e / p h y s i c s / p r o c e s s L i s t Enabled / gate / physics / p r o c e s s L i s t I n i t i a l i z e d / g a t e / p h y s i c s /Gamma/ SetCutInRegion SPECThead 0 . 1 cm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion SPECThead 1 . 0 cm / g a t e / run / i n i t i a l i z e / g a t e / t i m i n g / setTime 0 . s / g a t e / t i m i n g / setTime 3 7 . 5 s / g a t e / t i m i n g / setTime 75 s 78 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 / g a t e / t i m i n g / setTime 1 1 2 . 5 s / g a t e / t i m i n g / setTime 150 s / g a t e / t i m i n g / setTime 1 8 7 . 5 s / g a t e / t i m i n g / setTime 225 s / g a t e / t i m i n g / setTime 2 6 2 . 5 s / g a t e / t i m i n g / setTime 300 s / g a t e / t i m i n g / setTime 3 3 7 . 5 s / g a t e / t i m i n g / setTime 375 s / g a t e / t i m i n g / setTime 4 1 2 . 5 s / g a t e / t i m i n g / setTime 450 s / g a t e / t i m i n g / setTime 4 8 7 . 5 s / g a t e / t i m i n g / setTime 525 s / g a t e / t i m i n g / setTime 5 6 2 . 5 s / g a t e / t i m i n g / setTime 600 s / g a t e / s o u r c e / addSource SourceConfinement / g a t e / s o u r c e / SourceConfinement / gps / type Volume / g a t e / s o u r c e / SourceConfinement / gps / shape C y l i n d e r / g a t e / s o u r c e / SourceConfinement / gps / r a d i u s 2 . cm / g a t e / s o u r c e / SourceConfinement / gps / h a l f z 1 4 . 5 cm / g a t e / s o u r c e / SourceConfinement / gps / c e n t r e 0 . 0 . 0 . cm / g a t e / s o u r c e / SourceConfinement / gps / p a r t i c l e gamma / g a t e / s o u r c e / SourceConfinement / gps / e n e r g y 1 4 0 . keV / g a t e / s o u r c e / SourceConfinement / s e t A c t i v i t y 3 0 0 0 0 . Bq / g a t e / s o u r c e / SourceConfinement / gps / angtype i s o / g a t e / s o u r c e / SourceConfinement / gps / c o n f i n e movsource / g a t e / d i g i t i z e r / S i n g l e s / i n s e r t adder / gate / d i g i t i z e r / S i n g l e s / i n s e r t blurring / gate / d i g i t i z e r / S i n g l e s / blurring / setResolution 0.10 / g a t e / d i g i t i z e r / S i n g l e s / b l u r r i n g / s e t E n e r g y O f R e f e r e n c e 1 4 0 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t spblurring / g a t e / d i g i t i z e r / S i n g l e s / s p b l u r r i n g / s e t S p r e s o l u t i o n 2 . 0 mm / gate / d i g i t i z e r / S i n g l e s / spblurring / verbose 0 / gate / d i g i t i z e r / S i n g l e s / i n s e r t thresholder / g a t e / d i g i t i z e r / S i n g l e s / t h r e s h o l d e r / s e t T h r e s h o l d 2 0 . keV / gate / d i g i t i z e r / S i n g l e s / i n s e r t upholder / g a t e / d i g i t i z e r / S i n g l e s / u p h o l d e r / setUphold 1 9 0 . keV / g a t e / output / r o o t / e n a b l e / g a t e / output / r o o t / s etF ileN ame benchSPECT / g a t e / output / r o o t / s e t R o o t S i n g l e s A d d e r F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s B l u r r i n g F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s S p b l u r r i n g F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s T h r e s h o l d e r F l a g 1 / g a t e / output / r o o t / s e t R o o t S i n g l e s U p h o l d e r F l a g 1 / g a t e / output / a s c i i / s e t O u t F i l e S i n g l e s A d d e r F l a g 0 / g a t e / output / a s c i i / s e t O u t F i l e S i n g l e s S p b l u r r i n g F l a g 0 / g a t e / output / a s c i i / s e t O u t F i l e S i n g l e s B l u r r i n g F l a g 0 / g a t e / output / a s c i i / s e t O u t F i l e S i n g l e s T h r e s h o l d e r F l a g 0 / g a t e / output / a s c i i / s e t O u t F i l e S i n g l e s U p h o l d e r F l a g 0 / g a t e /random/ setEngineName Ranlux64 / g a t e /random/ s e t E n g i n e S e e d 123456789 / g a t e /random/ v e r b o s e 1 / g a t e / output / p r o j e c t i o n / e n a b l e 79 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 / g a t e / output / p r o j e c t i o n / set File Name Y o u r P r o j e c t i o n / g a t e / output / p r o j e c t i o n / p i x e l S i z e X 0 . 9 0 4 mm / g a t e / output / p r o j e c t i o n / p i x e l S i z e Y 0 . 9 0 4 mm / g a t e / output / p r o j e c t i o n / pixelNumberX 128 / g a t e / output / p r o j e c t i o n / pixelNumberY 128 / g a t e / output / p r o j e c t i o n / p r o j e c t i o n P l a n e YZ / gate / a p p l i c a t i o n / setTimeSlice 37.5 s / gate / a p p l i c a t i o n / setTimeStart 0. s / g a t e / a p p l i c a t i o n / setTimeStop 600. s / gate / verbose Physic 0 / g a t e / v e r b o s e Cuts 0 / g a t e / v e r b o s e SD 0 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 0 / g a t e / v e r b o s e Warning 0 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 0 / g a t e / v e r b o s e Core 0 / run / v e r b o s e 0 / event / verbose 0 / tracking / verbose 0 / g a t e / a p p l i c a t i o n / startDAQ 80 2.6. Radioterapia y Dosimetría en GATE En esta sección se muestra un ejemplo de código que simula un proceso de radioterapia. Este ejemplo no contiene comandos de visualización, así que es enviable a la GRID sin necesidad de hacerle ninguna modicación. Para dejar un código sin comandos de visualización, basta con borrar todos los comandos en donde se encuentre el comando /vis/. Los procesos físicos son procesos avanzados de física núclear los cuales no se tratarán en detalle en este manual. Las líneas 37 y 38 son /gate/physics/processes/MultipleScattering/setGeometricalStepLimiterType e- distanceToBoundary /gate/physics/processes/MultipleScattering/setGeometricalStepLimiterType e+ distanceToBoundary Se deja de tarea que el estudiante haga el diagrama de volumenes lógicos del siguiente código. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 / gate / verbose Physic 1 / g a t e / v e r b o s e Cuts 1 / g a t e / v e r b o s e SD 0 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 1 / g a t e / v e r b o s e Warning 1 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 2 / g a t e / geometry / s e t M a t e r i a l D a t a b a s e G a t e M a t e r i a l s . db / g a t e / world / geometry / setXLength 5 m / g a t e / world / geometry / setYLength 5 m / g a t e / world / geometry / s etZL ength 5 m / g a t e / world / s e t M a t e r i a l Air / g a t e / world / d a u g h t e r s /name mainbox / g a t e / world / d a u g h t e r s / i n s e r t box / g a t e / mainbox / geometry / setXLength 40 cm / g a t e / mainbox / geometry / setYLength 40 cm / g a t e / mainbox / geometry / setZ Lengt h 40 cm / g a t e / mainbox / placement / s e t T r a n s l a t i o n 0 . 0 0 . 0 25 cm / g a t e / mainbox / s e t M a t e r i a l Water / g a t e / geometry / s e t I o n i s a t i o n P o t e n t i a l Water 75 eV / g a t e / geometry / s e t I o n i s a t i o n P o t e n t i a l Air 8 5 . 7 eV / gate / physics / addProcess PhotoElectric / g a t e / p h y s i c s / a d d P r o c e s s Compton / g a t e / p h y s i c s / a d d P r o c e s s GammaConversion / gate / physics / addProcess E l e c t r o n I o n i s a t i o n / g a t e / p h y s i c s / p r o c e s s e s / E l e c t r o n I o n i s a t i o n / s e t S t e p F u n c t i o n e+ 0 . 2 0 . 1 mm / g a t e / p h y s i c s / p r o c e s s e s / E l e c t r o n I o n i s a t i o n / s e t S t e p F u n c t i o n e− 0 . 2 0 . 1 mm 81 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 / gate / p h y s i c s / addProcess Bremsstrahlung / gate / physics / addProcess P o s i t r o n A n n i h i l a t i o n / gate / physics / addProcess M u l t i p l e S c a t t e r i n g / g a t e / p h y s i c s / p r o c e s s e s / M u l t i p l e S c a t t e r i n g / s e t G e o m e t r i c a l S t e p L i m i t e r T y p e e− distanceToBou / g a t e / p h y s i c s / p r o c e s s e s / M u l t i p l e S c a t t e r i n g / s e t G e o m e t r i c a l S t e p L i m i t e r T y p e e+ distanceToBou / gate / physics / addProcess HadronIonisation / gate / p h y s i c s / removeProcess HadronIonisation deuteron / gate / p h y s i c s / removeProcess HadronIonisation t r i t o n / g a t e / p h y s i c s / r e m o v e P r o c e s s H a d r o n I o n i s a t i o n He3 / gate / p h y s i c s / removeProcess HadronIonisation alpha / gate / p h y s i c s / removeProcess HadronIonisation GenericIon / g a t e / p h y s i c s / p r o c e s s e s / H a d r o n I o n i s a t i o n / s e t S t e p F u n c t i o n p r o t o n 0 . 2 0 . 0 5 mm / g a t e / p h y s i c s / p r o c e s s e s / H a d r o n I o n i s a t i o n / s e t S t e p F u n c t i o n p i+ 0 . 2 0 . 0 5 mm / g a t e / p h y s i c s / p r o c e s s e s / H a d r o n I o n i s a t i o n / s e t S t e p F u n c t i o n pi − 0 . 2 0 . 0 5 mm / gate / physics / addProcess I o n I o n i s a t i o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I o n i s a t i o n / s e t S t e p F u n c t i o n G e n e r i c I o n 0 . 1 0 . 0 2 mm / gate / phys ics / p r o c e s s e s / I o n I o n i s a t i o n / setStepFunction alpha 0 . 1 0 . 0 2 mm / gate / physics / p r o c e s s e s / I o n I o n i s a t i o n / setStepFunction deuteron 0 . 1 0 . 0 2 mm / gate / physics / processes / I o n I o n i s a t i o n / setStepFunction t r i t o n 0 . 1 0 . 0 2 mm / g a t e / p h y s i c s / p r o c e s s e s / I o n I o n i s a t i o n / s e t S t e p F u n c t i o n He3 0 . 1 0 . 0 2 mm / gate / physics / addProcess HadronElastic GenericIon / g a t e / p h y s i c s / p r o c e s s e s / H a d r o n E l a s t i c / setModel G 4 L E l a s t i c G e n e r i c I o n / g a t e / p h y s i c s / a d d P r o c e s s UHadronElastic / g a t e / p h y s i c s / p r o c e s s e s / UHadronElastic / setModel G4HadronElastic / g a t e / p h y s i c s / p r o c e s s e s / UHadronElastic / s e t D a t a S e t G4HadronElasticDataSet / gate / physics / addProcess P r o t o n I n e l a s t i c / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c / setModel G4BinaryCascade / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c / G4BinaryCascade / setEmin 170 MeV / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c / G4BinaryCascade / setEmax 500 GeV / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c / setModel PreCompound / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c /PreCompound/ setEmin 0 MeV / g a t e / p h y s i c s / p r o c e s s e s / P r o t o n I n e l a s t i c /PreCompound/ setEmax 170 MeV / gate / physics / addProcess I o n I n e l a s t i c / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / setModel G 4 B i n a r y L i g h t I o n R e a c t i o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / setModel G 4 L E D e u t e r o n I n e l a s t i c d e u t e r o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / setModel G 4 L E T r i t o n I n e l a s t i c t r i t o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / setModel G 4 L E A l p h a I n e l a s t i c a l p h a / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmin 80 MeV d e u t e r o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmax 20 GeV d e u t e r o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmin 80 MeV t r i t o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmax 20 GeV t r i t o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmin 80 MeV a l p h a / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 B i n a r y L i g h t I o n R e a c t i o n / setEmax 20 GeV a l p h a / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E D e u t e r o n I n e l a s t i c / setEmin 0 MeV d e u t e r o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E D e u t e r o n I n e l a s t i c / setEmax 80 MeV d e u t e r o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E T r i t o n I n e l a s t i c / setEmin 0 MeV t r i t o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E T r i t o n I n e l a s t i c / setEmax 80 MeV t r i t o n / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E A l p h a I n e l a s t i c / setEmin 0 MeV a l p h a / g a t e / p h y s i c s / p r o c e s s e s / I o n I n e l a s t i c / G 4 L E A l p h a I n e l a s t i c / setEmax 80 MeV a l p h a / gate / physics / p r o c e s s e s / I o n I n e l a s t i c / setDataSet G4IonsShenCrossSection GenericIon / gate / physics / p r o c e s s e s / I o n I n e l a s t i c / setDataSet G4TripathiLightCrossSection deuteron / gate / physics / processes / I o n I n e l a s t i c / setDataSet G4TripathiLightCrossSection t r i t o n 82 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 / gate / physics / p r o c e s s e s / I o n I n e l a s t i c / setDataSet G4TripathiLightCrossSection alpha / gate / physics / addProcess P i o n P l u s I n e l a s t i c / g a t e / p h y s i c s / p r o c e s s e s / P i o n P l u s I n e l a s t i c / setModel G 4 L E P i o n P l u s I n e l a s t i c / gate / physics / addProcess PionMinusInelastic / g a t e / p h y s i c s / p r o c e s s e s / P i o n M i n u s I n e l a s t i c / setModel G4LEPionMinusInelastic / g a t e / p h y s i c s / a d d P r o c e s s NeutronCapture / g a t e / p h y s i c s / p r o c e s s e s / NeutronCapture / setModel G4LCapture / gate / physics / addProcess F i s s i o n / g a t e / p h y s i c s / p r o c e s s e s / F i s s i o n / setModel G4LFission / gate / physics / addProcess N e u t r o n I n e l a s t i c / g a t e / p h y s i c s / p r o c e s s e s / N e u t r o n I n e l a s t i c / setModel PreCompound / g a t e / p h y s i c s / a d d P r o c e s s Decay / g a t e / p h y s i c s / setEMin 0 . 1 keV / g a t e / p h y s i c s /setEMax 10 GeV / g a t e / p h y s i c s / setDEDXBinning 220 / g a t e / p h y s i c s / setLambdaBinning 220 / g a t e / p h y s i c s /Gamma/ SetCutInRegion world 1 mm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion world 1 mm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion world 1 mm / g a t e / p h y s i c s /Gamma/ SetCutInRegion mainbox 0 . 1 mm / g a t e / p h y s i c s / E l e c t r o n / SetCutInRegion mainbox 0 . 1 mm / g a t e / p h y s i c s / P o s i t r o n / SetCutInRegion mainbox 0 . 1 mm / g a t e / p h y s i c s / SetMaxStepSizeInRegion world 1 mm / gate / phys ics / ActivateStepLimiter proton / gate / physics / ActivateStepLimiter deuteron / gate / physics / ActivateStepLimiter t r i t o n / gate / physics / ActivateStepLimiter alpha / gate / physics / ActivateStepLimiter GenericIon / gate / physics / displayCuts / g a t e / a c t o r / addActor DoseActor d o s e D i s t r i b u t i o n / g a t e / a c t o r / d o s e D i s t r i b u t i o n / s a v e output / Config −p r o t o n . t x t / g a t e / a c t o r / d o s e D i s t r i b u t i o n / attachTo mainbox / g a t e / a c t o r / d o s e D i s t r i b u t i o n / stepHitType random / g a t e / a c t o r / d o s e D i s t r i b u t i o n / s e t P o s i t i o n 0 0 0 cm / g a t e / a c t o r / d o s e D i s t r i b u t i o n / s e t R e s o l u t i o n 1 1 400 / g a t e / a c t o r / d o s e D i s t r i b u t i o n / saveEveryNSeconds 60 / g a t e / a c t o r / d o s e D i s t r i b u t i o n / enableEdep t r u e / gate / actor / d o se D i s t r ib u t i on / enableUncertaintyEdep f a l s e / gate / actor / d o s e D i s t r i b u t i o n / enableDose true / gate / actor / doseDistribution / enableUncertaintyDose true / g a t e / a c t o r / d o s e D i s t r i b u t i o n / enableNumberOfHits f a l s e / g a t e / a c t o r / addActor S i m u l a t i o n S t a t i s t i c A c t o r s t a t / g a t e / a c t o r / s t a t / s a v e output / s t a t −p r o t o n . t x t / g a t e / a c t o r / s t a t / saveEveryNSeconds 60 / g a t e / run / i n i t i a l i z e / g a t e / s o u r c e / addSource mybeam gps / g a t e / s o u r c e /mybeam/ gps / p a r t i c l e p r o t o n / g a t e / s o u r c e /mybeam/ gps / pos / type Beam / g a t e / s o u r c e /mybeam/ gps / pos / r o t 1 0 1 0 / g a t e / s o u r c e /mybeam/ gps / pos / r o t 2 1 0 0 / g a t e / s o u r c e /mybeam/ gps / pos / shape C i r c l e / g a t e / s o u r c e /mybeam/ gps / pos / c e n t r e 0 0 0 mm 83 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 / g a t e / s o u r c e /mybeam/ gps / pos /sigma_x 3 mm / g a t e / s o u r c e /mybeam/ gps / pos /sigma_y 3 mm / g a t e / s o u r c e /mybeam/ gps / ene /mono 150 MeV / g a t e / s o u r c e /mybeam/ gps / ene / type Gauss / g a t e / s o u r c e /mybeam/ gps / ene / sigma 2 . 0 MeV / g a t e / s o u r c e /mybeam/ gps / d i r e c t i o n 0 0 1 / tracking / storeTrajectory 1 / gate / verbose Physic 1 / g a t e / v e r b o s e Cuts 1 / g a t e / v e r b o s e SD 0 / gate / verbose Actions 0 / g a t e / v e r b o s e Actor 0 / g a t e / v e r b o s e Step 0 / gate / verbose Error 1 / g a t e / v e r b o s e Warning 1 / g a t e / v e r b o s e Output 0 / g a t e / v e r b o s e Beam 0 / g a t e / v e r b o s e Volume 0 / g a t e / v e r b o s e Image 0 / g a t e / v e r b o s e Geometry 2 / g a t e /random/ setEngineName MersenneTwister / g a t e /random/ s e t E n g i n e S e e d 1000 / g a t e / a p p l i c a t i o n / noGlobalOutput / g a t e / a p p l i c a t i o n / setTotalN umberOfP rimaries 1000 / gate / a p p l i c a t i o n / s t a r t 84 Capítulo 3 MÓDULO 3 3.1. Tipos de códigos en ROOT ROOT [8] es una plataforma orientada a objetos que fue desarrollada en el CERN para analizar datos provenientes de los experimentos que allá se desarrollan. La plataforma computacional de ROOT fue escrita en C++ y C. Luego la sintaxis de ROOT corresponde a la de los lenguages previamente mencionados. En ROOT existen tres tipos distintos de códigos, que son: 1. los interpretados por el intérprete del lenguaje C++ (CINT); el cual fue desarrollado independientemente por Masaharu Goto, 2. los compilados por el Compilador Automático de Librerias de CINT (ACLIC), y 3. los que son compilados como si fueran códigos de C++. Actualmente se esta desarrollando el intérprete CLING que lidiará con las nuevas funcionalidades del nuevo C++ estandár C++11X. 3.1.1. Códigos tipo CINT Los códigos interpretados son códigos que son leidos por el intérprete linea por linea. Cada vez que lee una linea, la traduce a su equivalente en lenguaje maquina. Cuando un intérprete entra a un bucle, el intérprete generará un código máquina por cada linea de iteración dentro del bucle. Dentro de esta categoría existen dos subclases: los códigos que presentan una función sin nombre, y los que presentan una función con nombre. Función sin nombre. A continuación veremos un ejemplo de un código que imprime desde ROOT por medio de CINT, éste código se llama hola.C . 85 Hola Mundo ejecutado 1 { 2 c o u t << " \ nHola " 3 p r i n t f ( " Mundo\n" ) 4 } Y para ejecutarlo haremos: $ root -l root [0] .x hola.C Hola Mundo root [1] y para salir de root hacemos: root [1] .q $ notese que en las lineas 2 y 3 de hola.C se encuentran las funciones cout y printf, de C++ y C, respectivamente. En estas lineas en un código compilado de C o de C++, nos haría falta agregar al nal de la linea el carácter ; el cual puede ser omitido en CINT sin ningún problema. También notable el hecho de no tener que agregar #include<iostream>, ni #include<stdio.h>, las cuales cout y printf respectivamente. Para correr el código, la linea de comandos con la opción -l la cual lanza a root desnuda. Y para Ejecutarlo lo hacemos con .x hola.C. El librerias del preprocesador via son necesarias para poder usar invocamos a ROOT desde sin la imagén de la mujer comando en root .x queda por su abreviación de la palabra en inglés eXecute. Los corchetes de las lineas 1 y 4 signican que todo lo que esta dentro de estas lineas es parte de una función; en este caso, una función sin nombre. Función con nombre. Ahora veamos un ejemplo de un código con una función con nombre, este código se llama hola2.C y contiene lo siguiente: 1 void s a l u d a ( ) 2 { 3 c o u t << " \ nHola " ; 4 p r i n t f ( " Mundo\n" ) ; 5 } y se ejecuta de la siguiente manera: $ root -l root [0] .L hola2.C root [1] saluda() Hola Mundo root [2] .q $ 86 Para correr o ejecutar este tipo de códigos, una vez estando dentro de root, en la linea 0 se hizo .L hola2.C, la cual carga (Load) el contenido del código dentro de CINT. Luego en la linea 1 simplemente llamamos a nuestra función por su respectivo nombre y saluda(). Luego vemos el mensaje Hola Mundo, y posteriormente .q. jemonos en la primera linea del código la que dice void saluda(), en esta linea se especica que la función saluda no toma ningún argumento (porque no hay nada entre los paréntesis) y además que la función saluda no devuelve ningún tipo de valor, o lo que es lo mismo, que saluda devuelve un void. En las lineas 3 y 4 tenemos que agregar el ; o de lo contrario CINT nos arrojará el argumentos, es decir, en la linea 2 salimos de root mediante mensaje de error: Syntax Error: cout<<"\nHola" printf(" Mundo\n") Maybe missing ';' hola2.C:5: *** Interpreter error recovered *** Los códigos de ROOT que actualmente puede procesar la GRID de GISELA, son códigos que presentan funciones sin nombre interpretados por CINT. 3.2. ROOT ejemplo por ejemplo Los códigos ROOT usan la sintaxis de C/C++ debido a que fue construido sobre estos lenguages computacionales. ROOT internamente renombra algunos tipos de datos de C/C++ por unos tipos de nombre parecidos, que son: 1. char 2. float 3. double por Char_t. por Float_t. por Double_t. 4. etcétera etcétera. Para mas información sobre estos aliases, el usuario puede ver el archivo $ROOTSYS/core/base/inc/Rtypes.h en donde están todos los aliases que utiliza ROOT. Vale la pena decir que todas los arhivos de cabecera de ROOT incluyen a Rtypes.h, así que los usuarios generalmente no tienen que incluirlo, además de esto, el usuario puede usar indistintamente los tipos C/C++ en lugar de los de ROOT sin ningún problema. También es bueno volver a repetir que en los códigos ROOT que enviaremos a GISELA, no agregaremos archivos de cabecera via include. Por otro lado, ROOT tiene varios apuntadores globales que facilitan el trabajo a la hora de escribir código, los apuntadores globales mas usados son: 1. gROOT, este apuntador tiene acceso a toda la información de la sesión actual por medio de una instancia del objeto TROOT. La mayor parte de los usos es a través de llamadas a los siguientes métodos: 87 gROOT->GetListOfClasses() gROOT->GetListOfColors() gROOT->GetListOfTypes() gROOT->GetListOfGlobals() gROOT->GetListOfGlobalFunctions() gROOT->GetListOfFiles() gROOT->GetListOfMappedFiles() gROOT->GetListOfSockets() gROOT->GetListOfCanvases() gROOT->GetListOfStyles() gROOT->GetListOfFunctions() gROOT->GetListOfSpecials() gROOT->GetListOfGeometries() gROOT->GetListOfBrowsers() gROOT->GetListOfMessageHandlers() Estos métodos devuelven una TSeqCollection, es decir, una lista de objetos en secuencia, que pueden ser usados para aplicarles alguna operación tal como encontrar un objeto, o recorrer la lista y llamar a un método para cada uno de los miembros de la lista. Por ejemplo: gROOT->GetListOfCanvases()->FindObject("c1"); Se acostumbra a reestablecer a ceros las sesiones de ROOT al inicio de las mismas por medio del comando gROOT->Reset() 2. gFile, 3. gDirectory, este apuntador tiene acceso al archivo abierto actual. este apuntador tiene acceso al directorio actual de la clase contene- doras de ROOT que se esté analizando. 4. gPad, un objeto gráco siempre se dibuja en el pad activo actual. Es conveniente poder acceder al pad activo. Para eso está gPad que siempre está apuntando al pad activo. Por ejemplo, si uno quiere cambiar el color de llenado del pad activo a azúl, pero el usuario no sabe el nombre de él (el pad activo), entonces puede usar gPad. 5. 6. gRandom, gEnv, accede al generador de números aleatorios actual. accede a la información de las variables del ambiente computacional en el que se esta trabajando. Un ejemplo sería imprimir la información del nodo de la GRID de GISELA en donde nuestro código esta corriendo. Esto se puede conseguir mediante el comando gEnv->Print(); 88 . 3.2.1. Análisis del archivo ROOT proveniente del código DEMO Recordemos el código ROOT del demo de GISELA, el cual era: 1 { 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 } gROOT−>Reset ( ) ; TFile * f = new TFile ( " phsp . r o o t " ) ; TTree * PhaseSpace = ( TTree * ) g D i r e c t o r y −>Get ( " PhaseSpace " ) ; // D e c l a r a t i o n o f l e a v e s t y p e s − TTree PhaseSpace Ekine ; Weight ; X; Y; // Float_t Z; Float_t dX ; Float_t dY ; Float_t dZ ; Char_t volumeName [ 6 4 ] ; Char_t p a r t i c l e N a m e [ 6 4 ] ; Char_t procName [ 6 4 ] ; Float_t Float_t Float_t Float_t // S e t branch a d d r e s s e s − TTree PhaseSpace PhaseSpace −>SetBranchAddress ( " ParticleName " ,& p a r t i c l e N a m e ) ; PhaseSpace −>SetBranchAddress ( " ProductionVolume " ,&volumeName ) ; PhaseSpace −>SetBranchAddress ( " P r o d u c t i o n P r o c e s s " ,&procName ) ; PhaseSpace −>SetBranchAddress ( " Ekine " ,& Ekine ) ; PhaseSpace −>SetBranchAddress ( " Weight " ,&Weight ) ; PhaseSpace −>SetBranchAddress ( "X" ,&X ) ; PhaseSpace −>SetBranchAddress ( "Y" ,&Y ) ; // PhaseSpace −>SetBranchAddress ( "Z",&Z ) ; PhaseSpace −>SetBranchAddress ( "dX" ,&dX ) ; PhaseSpace −>SetBranchAddress ( "dY" ,&dY ) ; PhaseSpace −>SetBranchAddress ( "dZ" ,&dZ ) ; Int_t n e n t r i e s = PhaseSpace −>G e t E n t r i e s ( ) ; cout<<" n e n t r i e s : Int_t n b y t e s = 0 ; "<< n e n t r i e s <<e n d l ; // l o o p on t h e e v e n t s i n t h e TTree PhaseSpace f o r ( Int_t i =0; i <n e n t r i e s ; i ++) { n b y t e s += PhaseSpace −>GetEntry ( i ) ; cout<<pa rt icl eNa me <<" −−−Ek = "<<Ekine<<" MeV"<<e n d l ; } En este código vemos que en ROOT al igual que en C++, las líneas comentadas empiezan con doble slash //. En este tutorial las líneas comentadas de ROOT aparecerán 89 en verde. Otra manera de comentar muchas líneas es colocar /* al comienzo del bloque a ser comentado, y */ al nal del bloque a ser comentado. En la línea 2 del antiguo código se puede ver el comando gROOT->Reset(); el cual reestablece todas las variables y apuntadores globales de ROOT a sus valores predeterminados. Luego la línea 3 TFile *f = new TFile("phsp.root"); nos indica que se abra el archivo llamado phsp.root. La línea 5 TTree *PhaseSpace = (TTree*)gDirectory->Get("PhaseSpace"); nos dice que mediante gDirectory (que actualmente está apuntando al archivo activo del TFile) se acceda al apuntador a arbol llamado PhaseSpace. (TTree *) nos indica que el tipo de dato devuelto luego de atrapar a PhaseSpace mediante gDirectory, sea convertido a un apuntador a TTree. TTree *PhaseSpace = nos indica que almacenaremos el resultado de la expresión del lado derecho en un apuntador a TTree llamado PhaseSpace. Desde la línea 7 hasta la línea 14 se denen 7 variables de tipo otante llamadas: Ekine, Weight, X, Y, dX, dY, y dZ. Desde la línea 15 hasta la línea 17 vemos como se denen 3 arrays de carácteres de largo 64 llamados: volumeName, particleName, y procName. Las líneas 21 a 31 utilizan el métdo SetBranchAddres de la clase TTree. Este método esta tomando 2 argumentos aunque normalmente se usa con 3 argumentos. En este momento explicaremos la versión que toma 2 argumentos: verb|PhaseSpace->SetBranchAddress("variable",&variable);| el primer argumento hace referencia al nombre que se le va a dar a la variable en nuestro programa, mientras que el segundo argumento hace referencia al nombre de la variable que se encuentra dentro del árbol. Es fácil ver esto por el ampersand & que se encuentra a la izquierda de la variable, en ese sentido pasamos la dirección de variable dentro de árbol a la función SetBranchAddress. La línea 33 Int_t nentries = PhaseSpace->GetEntries inicializa a nentries con el número de entradas que tiene el árbol PhaseSpace. La línea 35 imprime en pantalla el valor de nentries cout<<"nentries: "<< nentries << endl; La línea 36 Int_t nbytes = 0; declara e inicializa nbytes a cero. El bucle de las líneas 40 hasta 44 for (Int_t i=0; i<nentries;i++) { nbytes += PhaseSpace->GetEntry(i); cout<<particleName<<" ---Ek = "<<Ekine<<" MeV"<<endl; } recorre todas las entradas dentro del árbol PhaseSpace imprime el nombre de la partícula y su energía cinética. 90 3.2.2. Histogramas Una poderosa herramienta que posee ROOT son los histogramas. Los histogramas pueden ser usados dentro de los códigos tipo root con las variables guardadas en los archivos .root creados en un código GATE. Para denir un histograma debemos denir el intervalo mediante un límite inferior y un límite superior, también debemos denir el número de bines del histograma, junto con un nombre del histograma y un título del histograma. Por ejemplo para denir un histograma de números otantes, usaremos la línea. 1 TH1F *h = new TH1F( "nombre" , " t i t u l o " , 2 5 , − 5 , 5 ) ; aquí 25 es el número de bines, -5 es el límite inferior y 5 es el límite superior. Luego tendremos que llenar el histograma con el comando Fill. Por ejemplo: 1 f o r ( int i = − 5000; i <=5000; i ++){ 2 h−>F i l l ( i * 0 . 0 0 1 ) ; 3 h−>F i l l ( 0 ) ; 4 } en el ejemplo anterior, i*0.001 era la variable de tipo otante. Para guardar el histogra- ma usamos el comando SaveAs. 1 h−>SaveAs ( " h i s t o . j p g " ) ; Este ejemplo produce el siguiente archivo: Figura 3.1: Histograma generado en el código anterior. Finalmente los histogramas pueden ser de tipo int TH1I, de tipo double TH1D y de tipo char TH1C. 91 Bibliografía [1] Gate hereda todos los conceptos de geant4, página web de geant4. cern.ch/support/userdocuments.shtml. http://geant4. http://wiki.opengatecollaboration. org/index.php/Users_Guide:Architecture_of_the_simulation. [2] Arquitectura de una simulación en gate. [3] Denición de: Salida, entrada, y error estándar. Standard_streams. [4] La librería gráca abierta. [5] El servidor x. [6] Coordenadas esfericas. [7] http://en.wikipedia.org/wiki/ http://www.opengl.org/. http://www.x.org/wiki/. esféricas. http://es.wikipedia.org/wiki/Coordenadas_ http://wiki.opengatecollaboration.org/index.php/Users_Guide_V6: Data_output. [8] R. Brun and F. Rademakers. ROOT: An object oriented data analysis framework. Nucl.Instrum.Meth., A389:8186, 1997. 92