Update on CT scanner: calibrating the radiation detector


I thought I’d post a quick update on the open source CT scanner, especially given that there’s been a lot of interest lately. Life has been a little busy over the past few months — in the lab with paper writing, visiting home for the holidays, as well as my mom very recently passing away after her 18 year battle with cancer — so I haven’t been as good at writing updates as I’d planned.

Before getting to the CT scanner, I’d like to put together a proper update on the Mark 5 Science Tricorder shortly. A quick preview — in November I redesigned the Mark 5 from scratch to be less expensive, more modular, easier to modify, and quicker to program — and I call the result the Arducorder. The Mark 5 is now Arduino Due compatible, so the hundred thousand folks out there who can program an Arduino should be able to comfortably pick up and modify the code quickly, while others looking to start writing code for the Arduino could do so over a weekend using the large existing library of books and resources available. The sensor board now attaches using a standard 0.1 inch header, so one should be able to prototype new sensor boards quickly. The system includes a separate graphics processor (the FT800), so the graphics capabilities should be similar to something like a Gameboy Advanced, and the motherboard also includes a WiFi module for wireless connectivity (the CC3000). The boards arrived just as I flew back in from the holidays, and I’ve been building them and writing the drivers and firmware over the past few weekends.

A source and detector for the CT scanner
As I mentioned in my first post, for safety I’ve designed the CT scanner to use a radioisotope x-ray source that’s barely above background levels — the tradeoff for this safety being acquisition time. There are a number of low-intensity radioisotope check sources commercially available, each with different emission spectra. I ended up deciding to use a Cadmium-109 source, which has the lowest energy photons I could find — it’s primary emissions are 22keV x-rays, with a small secondary 88keV emission. I’ve read that 22keV photons are about 50% absorbed by 2cm of tissue, so this seemed like a usefully contrastive figure — too much or too little absorption and you’ll need many more samples to make a useful image, which increases acquisition time. Higher energy emissions from other radioisotopes (in the many hundreds of keV) might be useful for imaging metals, but generally have much less absorption for non-metallic materials that I’d like to image first (like vegetables).

The detector data sheet from the folks who make the Radation Watch Type 5 also suggests that lower energy photons are much easier to detect, with a detection efficiency of around 30% for 22keV photons, where this drops to about 1% for 88keV photons (Note: although further discussions suggest that they might be using a slightly different photodiode than the FSX100-7 2.0 in the Type 5, so the efficiency curve in the datasheet is likely somewhat different). Functionally, this is like having a source that’s 30 times more intense — when every photon counts, if you can count them more efficiently, you can get by with much less exposure, and decrease the acquisition time.

The actual measured count from the Cd-109 source ended up being much less than I was expecting, and after some investigation it looked as though the detector was only measuring the 88keV emissions, which both account for only 4% of the total emissions, and are also detected much less efficiently — reducing the number of counts by a factor of about 2000. After chatting with the Radiation Watch folks, it looks as though the Type 5 is calibrated for Cesium-134 and 137, which emit higher energy photons, and would need to be recalibrated to sense the lower energy emissions of Cd-109.


Measuring high energy photons is a constant battle between signal and noise, in part due to the extreme amplification required to sense a single subatomic particle and convert this into a voltage signal with an energy many orders of magnitude larger that can be detected by a microcontroller. To keep the signal-to-noise ratio favorable, the Type 5 has a detection threshold somewhere above the noise floor of the amplifier circuit and below the energy produced when a high-energy Cesium photon hits the detector. To recalibrate the detector for the 22keV Cadmium-109 emissions, this threshold has to be lowered — but it can only be lowered so far, and if the peaks produced by the 22keV photons aren’t larger than the noise, then we’re out of luck and either have to choose a more sensitive detector or a source with higher energy emissions. Thankfully the folks who designed the Type 5 detector were good enough to include a test point after the amplifier and before the threshold comparator that can be used to see the raw signal, and recalibrate if required.


Above on the oscilloscope, the raw signal is pictured in blue (50mV/div), and the detector output (raw signal after the comparator) that’s fed into a microcontroller is pictured in yellow (2V/div). Here, an 88keV photon from the Cd-109 source has hit the detector, and we’re seeing the yellow line trigger. We can also see that the raw signal for this photon is about an order of magnitude above the noise floor — looking good.


Here we see a lower energy emission from the Cd-109 source, likely in the 22keV range. These lower energy emissions are just barely above the +/-80mV noise floor, and setting the oscilloscope to trigger at 90mV above has the scope triggering frequently when the Cd-109 source is near the detector, and very little when the source is taken away. So, we’re just barely squeaking in, and appear to be able to measure the ~22keV photons just above the noise floor.

To make a quick ball-park measurement of the signal-to-noise ratio, I measured the number of detections (by hand) above 90mV with the Cd-109 source 10cm away from the detector, as well as the background rate (Cd-109 source in a shielded container), and with a few nearby materials between the source and detector.

  • The background rate is up from about 5 counts per minute (cpm) to around 15. These extra detections are likely a combination of actual lower-energy photons that the detector threshold was missing, as well as electrical noise.
  • The count with the source 10cm from the detector is 80 cpm. This is still less than I was expecting, but it’s very workable as a starting point.
  • With a 1/4 inch acrylic sheet between the source and detector, the detector measures 52 cpm — so it’s absorbing about 40% of the 22keV x-rays.
  • With a 1/8 inch MDF sheet between the source and detector (the same material that the prototype CT scanner is constructed out of), the detector measures 68 cpm — or about 20% absorption.
  • A bottle of water between the source and detector measures about 18 cpm, so nearly 95% absorption.

So, we’re looking very good, and these numbers should give useful contrast and interesting images for many small non-metalic objects.

Next Steps
Rather than modify the comparator on the detector circuit itself, I’ll put together a small board that connects to the raw test point, and has a comparator with a precision potentiometer for calibration. This will both make it a lot easier for folks to replicate, but also reduce the chances of introducing noise into the detector by removing and trying to replace the electrical shielding around the detector.

Because I’m seeing fewer detections than I’d expected, I’ll also make a small mechanical modification and move the source and detector from the outside of the gantry to the inside — reducing their distance from 30cm to somewhere in the 10-15cm range.

Once that’s complete, I should be able to acquire the first images of a few test targets!