47.12. Identifying True Coincidences
Table of Contents
Understanding True Coincidences in PET
In the PET practical example, you already have a working simulation that generates coincidences. The next step is to distinguish which of these coincidences are true, which are scattered, and which are random. This chapter focuses only on identifying true coincidences within the PET example, and assumes that the digitizer, coincidence sorting, and recording of coincidence data are already configured.
Definition of a True Coincidence
In PET, two detected photons form a coincidence event. Conceptually, a true coincidence occurs when both detected photons come from the same positron annihilation and reach the detectors without undergoing any scattering that changes their path or energy significantly.
More formally, in an idealized simulation context, a true coincidence satisfies all of the following:
- Both photons originate from the same annihilation event.
- Both photons are primary 511 keV photons produced by annihilation, not secondary photons created by scattering in the patient or detector.
- Neither photon undergoes a Compton or Rayleigh interaction before being detected, or any such interaction is neglected by a specific definition you choose.
In a real scanner or experiment, you cannot perfectly know this, but in a Monte Carlo simulation you can use information stored in the event history to classify coincidences.
A true coincidence in PET simulation is a coincidence event where both detected photons are direct annihilation photons from the same positron annihilation, without being created by scatter or significantly altered before reaching the detectors.
Information Available in PET Coincidence Data
When you record coincidences in GATE using a coincidence digitizer or coincidence actor, the output typically contains, for each coincidence, the combined information from the two contributing singles. Although the exact branch names depend on your configuration, you will usually have:
| Quantity | Typical meaning |
|---|---|
eventID or event_id | Primary event index in the simulation |
runID or run_id | Run index (if multiple runs are combined) |
sourceID or source_id | Which source or isotope generated the event |
globalTime1, globalTime2 | Detection times of the two photons |
energy1, energy2 | Deposited or measured energies in each detector |
detectorID1, detectorID2 | Identifiers of the two detector elements |
trackID1, trackID2 | Track identifiers of the detected photons |
parentID1, parentID2 | Parent track identifier for each photon |
comptonPhantom1/2 (optional) | Number of Compton scatters in the phantom |
comptonDetector1/2 (optional) | Number of Compton scatters in the detector |
rayleighPhantom1/2 (optional) | Number of Rayleigh scatters in the phantom |
Specific flag or counter branches (such as comptonPhantom) are often available if you use PET oriented actors or digitizers provided by GATE. These are especially useful for classifying coincidences.
To identify true coincidences, you will rely primarily on:
- Event identity, to ensure both photons come from the same annihilation.
- Scatter counters or history flags, to ensure the photons have not scattered in the phantom.
- Possibly additional flags if you want to exclude detector scatter as well.
Classification Strategy for True Coincidences
The goal is to construct a logical condition that you can apply to each coincidence in your output data. If the condition is satisfied, you label that event as a true coincidence.
Step 1: Same Primary Event
The first requirement is that both photons are associated with the same primary annihilation. In many PET simulations, this corresponds to the same eventID. When building coincidences, GATE already pairs singles within a coincidence time window, so you do not need to sort them manually. However, you still need to make sure your classification uses the event information correctly.
If your coincidence output already contains one eventID per coincidence, it typically means both singles came from the same primary in the simulation and GATE stored that information as a single value. In that case, this part is already enforced and you do not need an additional test. If you have separate eventID1 and eventID2 fields, a minimal condition is:
$$
\text{same primary} \iff eventID1 = eventID2
$$
This condition ensures that the photons originated from the same primary event in the Monte Carlo history.
To classify a coincidence as true, both photons must share the same primary event identifier, usually expressed as
$$eventID1 = eventID2.$$
Step 2: No Scatter in the Phantom
The primary physical distinction between true and scattered coincidences is whether the photons have undergone Compton or Rayleigh scattering before detection. In GATE PET examples, this is commonly encoded in counters such as comptonPhantom1, comptonPhantom2, rayleighPhantom1, and rayleighPhantom2.
The most common definition of a true coincidence in PET performance evaluation is:
- Both photons come from the same annihilation.
- Neither photon experiences a Compton or Rayleigh interaction in the phantom or patient.
In terms of the scatter counters, you can express this as:
$$
\text{no scatter in phantom} \iff
comptonPhantom1 = 0,\ comptonPhantom2 = 0,\ rayleighPhantom1 = 0,\ rayleighPhantom2 = 0.
$$
Often, only Compton scatter is tracked, in which case you might simply require:
$$
comptonPhantom1 = 0,\quad comptonPhantom2 = 0.
$$
You can choose whether to include detector scatter in your definition. A common choice in PET simulation studies is to allow detector scatter and focus on scatter in the patient or phantom, because the clinical concept of scatter fraction is dominated by scattering in the object being imaged.
Step 3: Optional Energy Window Requirement
Even though your digitizer already applies an energy window, it is good practice to also apply an explicit energy selection in your analysis when counting true coincidences for performance metrics. This ensures that you classify only events within your PET energy window, for example approximately 350 to 650 keV around the 511 keV photopeak.
If E1 and E2 are the energies after energy blurring in your singles or coincidence data, the condition is:
$$
E_{\text{low}} \le E1 \le E_{\text{high}},\quad
E_{\text{low}} \le E2 \le E_{\text{high}}.
$$
With a typical window, you might take $E_{\text{low}} = 350\ \text{keV}$ and $E_{\text{high}} = 650\ \text{keV}$, but use the values defined earlier in your PET example.
When computing PET performance metrics, count as true coincidences only those events that both
- Pass the PET energy window condition, and
- Satisfy the no-scatter and same-event conditions for both photons.
Combining Conditions into a True Coincidence Definition
You can now combine the individual requirements into a single logical expression. Suppose your coincidence data provide:
eventID1,eventID2comptonPhantom1,comptonPhantom2energy1,energy2
You might define true coincidences with:
- Same primary:
$$ eventID1 = eventID2 $$ - No Compton scatter in the phantom:
$$ comptonPhantom1 = 0,\quad comptonPhantom2 = 0 $$ - Energy window:
$$ E_{\text{low}} \le energy1 \le E_{\text{high}},\quad E_{\text{low}} \le energy2 \le E_{\text{high}} $$
If all of these are satisfied, you classify the event as a true coincidence.
In words, your algorithm for each recorded coincidence is:
First, check that both photons belong to the same primary event. Then check that neither photon scattered in the phantom. Finally, check that both energies lie inside the defined PET energy window. If all checks pass, mark the coincidence as true.
Implementing True Coincidence Identification in Practice
The exact implementation depends on whether you analyze your data with ROOT or with Python. In earlier chapters you learned how to access GATE output through both tools. Here the focus is not on syntax, but on how you conceptually apply the true coincidence definition.
In a ROOT based workflow you would typically:
- Open the coincidence ROOT file that you created in the PET example.
- Access the coincidence tree.
- Create a selection expression that matches your true coincidence conditions, using branch names provided by your simulation.
- Apply the expression when filling histograms or when counting the number of events.
In a Python based workflow with uproot and NumPy or Pandas, you would:
- Load the coincidence tree into arrays.
- Construct boolean masks for each condition: same event, no scatter in phantom, and energy window.
- Combine the masks with logical AND to create a final mask that selects true coincidences.
- Use this mask to count true events, to create distributions, or to compare with scattered and random coincidences in later chapters.
The crucial point is that the logic itself, not the programming, defines what you call a true coincidence. The PET example provides all the needed branches; your task is to select and combine them correctly.
Relationship to Other Coincidence Types
This chapter isolates the definition of true coincidences, but in the broader PET example you also classify scattered and random coincidences. The conditions you used here form the baseline. For instance:
If you later define scattered coincidences, you will often start from the same-event condition but require at least one scatter in the phantom. For random coincidences, you will require that the two photons do not come from the same primary event.
By defining true coincidences clearly and explicitly, you create a consistent reference that allows you to calculate PET performance metrics, such as sensitivity and scatter fraction, in the following chapters.
For the PET practical example, treat as true coincidences only those coincidence events that simultaneously satisfy:
- Both photons come from the same primary annihilation.
- Neither photon has scattered in the phantom, according to your scatter counters.
- Both photon energies lie within the PET energy window defined for the scanner.
Use this exact rule set whenever you count or analyze true coincidences in your PET simulations.
Views: 11
KAHIBARO