Positron Emission Tomography (PET) is a medical imaging technique which is commonly used to map out metabolic activity in the body. Typically, a $\beta^+$-emitting (positron-emitting) radionuclide (such as ${}^{18}\textrm{F}$) attached to a glucose molecule is injected into the body where it is taken up by tissues in proportion to their metabolic activity. Positrons produced by the decay of the radionuclide usually travel less than 1 mm in human tissue before they bind with an electron, and quickly annihilate. Most of the positron-electron annihilations result in the emission of a back-to-back pair of 511 keV photons. These photon pairs leave the body and can be detected. Areas of the body where there is high metabolic activity – such as cancer cells or active regions in the brain – will be more intense emitters of these 511 keV photon pairs. In a PET scanner, arrays of scintillator+PMT detectors are used to measure the intensity of this radiation along well defined planes (referred to as slices) passing through the patient's body. Tomography is the process of reconstructing a three-dimensional image of positron emission intensity from these slices.
In this experiment, you will use PET to create a two-dimensional image of a sample box containing several positron sources of unknown strength at unknown locations.
(source: Wikipedia) |
In this experiment you will use positron emission tomography to identify the positions and relative intensities of two unknown positron emitters inside a sealed box. Specifically, your goals for this experiment include the following:
The last goal here represents a typical use case for PET scanning: a chemical called Fluorodeoxyglucose that contains Fluorine-18 is administered to a patient, which the body treats as regular glucose. Cells with rapid metabolisms (e.g. cancer) take in glucose much more rapidly than other tissues, and thus will end up with higher concentrations of beta-emitting ${}^{18}$F.
PET scans and other radioimaging techniques are often performed/overseen by medical physicists; for information on this career path look into the American Association of Physicists in Medicine or the University of Chicago Medical Physics Ph.D. Program. On another front, some relatively recent research has begun to look into PET imaging using Na22 laden nanoparticles. These have the upside of combining the (relatively) long 2.6 yr half-life of sodium-22 with the lesser bio-availability of nanoparticles. This both ensures that the radioactive material doesn't accumulate in the body and eliminates the need of on-site generation of radio-isotopes.
To start out, you should do a bit of background research. Some suggested topics are the following:
The positron emitter that we will use in this experiment is sodium-22, which decays to an excited state of neon-22 by either electron capture or by positron emission. The neon later decays to its ground state by the emission of a 1.27 MeV gamma. (See Fig. 1.)
Figure 1: Nuclear decay scheme for sodium-22. (Source: C. Michael Lederer, Jack M. Hollander, and Isadore Perlman, Table of Isotopes, 6th Edition, John Wiley & Sons, 1967.) |
The emitted positrons are slowed down and are captured by electrons in the source to form an electron-positron bound state called https://en.wikipedia.org/wiki/Positronium, a hydrogen-like “atom.” The ground state of positronium, which has a binding energy of 6.8 eV, has two possible configurations depending on the relative orientation of the electron and positron spins. The state with anti-parallel spins has net spin equal to 0, and is variously referred to as the singlet state, para-positronium, or, in spectroscopic notation, the state $1S^0$. This state decays into an even number of photons, with the most likely result being two back-to-back photons with equal energy and oppositely directed momentum. The state with parallel spins has net spin equal to 1, and is referred to as the triplet state, ortho-positronium, or the state $3S^1$. This state decays into odd numbers of photons, most commonly three.
For reasons having to do with the lifetime of the two states and with the likelihood of triplet states flipping into singlet states, the two photon decay is much more likely. Since the rest masses $m_0$ of the electron and positron are converted to energy in the annihilation process, each of the resulting two photons has energy $E = m_0c^2 = 511 \,\textrm{keV}$ , and are created simultaneously.
The photon pairs which PET detects are produced in the following manner. (Letters correspond to features illustrated in Fig. 2.)
Medical imaging PET scanners utilize a large number of gamma-ray detector pairs, typically arrayed in an annulus to produce high resolution scans. (See Fig. 3.) The reconstruction of an image from these scanners is can be somewhat computationally intensive, requiring the use of https://en.wikipedia.org/wiki/Tomographic_reconstruction#Reconstruction_algorithms. Furthermore, processing all of the signals from such a ring of detectors would be daunting to someone just learning how this technique works.
Figure 3: PET scanner detector configuration. (Source: Wikipedia.) |
For the purposes of our experiment, we will use a single detector pair to create a two-dimensional image of a sample containing two sources. This simplified technique allows us to clearly illustrate the basic principles of PET while making use of a very simple tomographic reconstruction algorithm. The downside is that we are effectively collecting our individual scans in series (having to do one angle at a time) rather than parallel (using dozens of detectors). Nevertheless, a medical PET scanner operates on the same set of principles which apply to our scaled-down setup. A schematic of our PET scanner with the single pair of NaI+PMT detectors, a sample container and a sample guide is shown in Fig. 4.
A good introduction to the basic techniques we'll use for processing data is this handout on Tomographic Image Reconstruction, from the 41st American Association of Physicists in Medicine conference. We will use what is essentially a discretized version of an unfiltered backprojection operation, but reading further on what other options exist may be interesting.
Between 5-11 minutes of the following video also do a decent job of introducing our basic tomographic reconstruction technique.
We're still working on adapting material from an old version of this lab, so more info may be forthcoming.
A schematic of the apparatus is shown in Fig. 9. Individual components are described below.
The NaI(Tl)+PMT detectors are mounted in carriages. One detector is fixed in position (defined a $\theta = 0^\circ$ ) and the other is free to move around a circular track but should be set to 180º, directly opposite the fixed PMT. Anode signals from the PMTs are connected to the Red Pitaya for signal processing.
The Red Pitaya is a Field Programmable Gate Array (FPGA) that serves to process signals from the PMTs [A], send signals to control the motors via the Logic Level converter [C], and stop the motor at fixed positions determined by the Feedback Sensors [G]. We can access a Python program to let us interface with the Red Pitaya without needing sophisticated knowledge of its inner workings for now.
The motor driver acts both as a power supply for the motors as well as an interpreter for the incoming control signals from the Red Pitaya [B]. There are inputs that control the motor direction as well as one that will rotate a motor by a small angle for every individual pulse received from the Red Pitaya.
The clear acrylic disk will hold the sample that you are scanning for the various parts of this experiment. There is a motor beneath it that can rotate the sample, as well as a small brass flag that is used to ensure that the Feedback Sensors [G] are able to reset the platform to a consistent position.
This stage consists of another motor connected to a long worm gear, which holds the entire Sample Platform [E]. It translates the sample between the two detectors with better than mm precision thanks to the fine control from the Motor Driver [D].
There are three separate feedback sensors here: one photodetector that senses when the brass flag attached to Sample Platform [E] is aligned, and two switches that keep the linear stage from traveling too far in either direction. While the setup could operate without them, it would reliably resetting the position much more difficult to do.
The general process of doing a PET scan is the following:
A single scan (moving of the sample between detectors) gives you essentially a 1d plot of coincidence rate versus position. By rotating the sample between scans, you gather information about the distribution of sources that could be obscured at some angles (e.g. if some of the sources are co-linear with the detectors they will show up as a single stronger source). By combining data from multiple scans using an algorithm we can reconstruct the spatial positions of the positron emitters without having to disturb the sample or have physical access to the interior. When the sample is, say, a person, they tend to appreciate not having their interior disturbed.
We have set up a motorized control stage and digital coincidence counting for this experiment using an instrument called a Red Pitaya. The Red Pitaya combines a Linux computer with a Field Programmable Gate Array (FPGA) and high-speed oscilloscope inputs in one package. One is currently monitoring the air quality on the international space station.
To control the device and gather data, we've developed a way for the Red Pitaya to take in a list of commands and run them in order. The commands are:
File
BaseFileName
defines the save file prefix, a time/date will be appended to the end of the name.ResetLateral
ResetRotation
Move
Dir
is 0
for left and 1
(or anything else) for rightDist
is the # of motor stepsRotate
Dir
is 0
for clockwise and 1
for counter-clockwiseDist
is the # of motor stepsScan
Time
is the time in secondsLOOP
Times
is the number of times to repeatList
is a list of commands to loop throughThreshold
Channel
defines which input is being setKind
may be either: Lower
for the voltage that needs to be exceeded to begin detection orUpper
for the voltage that needs to be exceeded for an input to be rejectedDon't worry, we don't expect you to be writing command lists from scratch. We've provided several to perform basic tasks, but it will be up to you to tweak the settings to do what you want.
To use these commands, you'll open up the FPGA PET Command Interpreter
notebook linked on your computer's desktop.
Don't just run this notebook all at once, it needs you to input the file you'll use partway through.
In deciding how far apart to space one's measurements, several several factors need to be taken into consideration. Spreading out the scans too much will result in poor resolution of the location of the sources. More closely spaced scans will improve resolution, but at the cost of requiring more time to acquire the data as well as increased computing requirements. However an upper limit on how closely to space the scans can be set by measuring the spatial resolution of the detector system perpendicular to the LoR.
Your goal for this section is to use a single Na-22 button source translated orthogonally across the LoR as shown in Fig. 12, to determine the spatial resolution of the system.
Use the linearscan.json
file as a template for this part of the lab
We'll briefly go through the behavior of the command interpreter notebook here:
Counts
shows the number of coincidences that have been recorded in the active scan.Scan Time
shows a progress bar for the current scan (not the entire run).Your first task is to investigate the behavior of a single source passing through the detector.
From the plot, estimate the width of the distribution and what position corresponds to the center of the platform being directly between the detectors.
Reflect on how your prediction and results compare.
To demonstrate that you know the scripting language works, you are tasked with doing the following:
After you've established how wide the signal distribution is from a single source, you should also empirically determine how close a pair of identical Na22 sources can be before the signal becomes indistinct from a single source.
- How close two sources can be before their signals are no longer distinct?
Again the linearscan.json
file will serve as a basis for this part of the lab
Specifically, we want you to determine how close together two sources of similar strength can be before the can't be easily distinguished from a single stronger source.
Now that you've got a good idea of the limitations of the system, it's time to scan a known sample from multiple angles and use the data to try out our reconstruction techniques. Set up a configuration like the one shown below:
The specifics aren't critical, but you should measure out the positions of the sources beforehand so that you can calibrate your data reconstruction. The resulting plot of intensities versus position and angle is known as a sinogram because of the tendency of point sources to form sine curves in this format
Now you can use the Three.json
file as a template for this part of the experiment
You will want to run at least two scans for the known configuration:
You may use either one for the exercise, but be aware that you may want to work on the plotting between lab sessions. The notebook for reconstructing configurations can be found in the next section
After you have a good idea of what parameters are needed to resolve our Na22 sources you'll move onto the core piece of the lab: scanning a sample with $\beta^+$ emitters in unknown locations. One such sample is shown below:
It is suggested that you take a quick, low-resolution scan first to have some idea of what you're dealing with, and then to set up a longer scan to run overnight to capture fine details in the setup.
To create a 2-dimensional image from your data, we've created a Python script that will do the basic reconstruction, which can be accessed here:
If you're moving some before starting your scan, the reconstruction algorithm will do some odd things. One possible fix is to add a new cell before the rotation operation with the following:
pad_amt = 7 new_size = len(shifted_data[0])+pad_amt padded_data = np.zeros((len(shifted_data),new_size,new_size)) for index,item in enumerate(shifted_data): padded_data[index] = np.pad(item, (pad_amt,0)) fig,ax = plt.subplots() ax.imshow(padded_data[0])
and then change the rotation loop to
for index, item in enumerate(padded_data):
You'll have to tweak the pad_amt
manually until you get circles instead of rings.
There are instructions on how the code works and what it is doing at each step, and reading through it will be much more helpful than trying to run all of it at once.
You will be able to produce a few different sorts of plots with this code, and are free to modify it as needed.
Ultimately, you should identify the position of all sources within a sample as well as the relative intensities between them.
For the last day of the lab, we have an optimization task for you. We have another unknown sample prepared for you to scan today. This time, you have the following constraints:
You should write a short summary of the capabilities of the system used for this experiment. It should include:
You should include plots relevant to how you decided any of the above quantities.
Present your reconstruction & analysis of the unknown configuration. This should include:
Describe your performance in the challenge task. This should entail: