Recent posts

#41
Particles, Track & Event / Re: secondary photon removal
Last post by julienzzzz - Nov 04, 2025, 09:19 PM
Hi Didier,

Thank you so much. It is very helpful.

Thanks,
Julien
#42
Output Data / Multiple detectors
Last post by mwj12 - Nov 04, 2025, 02:22 PM
I am gradually trying to evolve my single CBCT detector simulation into a multi-layer CBCT detector simulation. I might have anywhere between 1 and 4 detector layers. Is it possible to set up a simulation with more than one detector plane in the same simulation?

When I do this, I will want each layer's detector output to feel the effects of attenuation from the layers that come before it in the beam path. I will also want it to feel the effects of scatter from neighboring layers both before and after it in the beam path. I assume this means I will need to define a navigator for each detector layer. If so, am I still using GGEMSCTSystem to implement the detection process? Can navigators and GGEMSCTSystems occupy the same 3D space?
#43
Output Data / CBCT simulation output (energy...
Last post by mwj12 - Nov 04, 2025, 02:10 PM
I am new to GGEMS and trying to generate simulated CBCT projections. As an initial example, I am implementing the detector as below, with scattered detections stored separately. My question is about whether the output that gets stored is energy-integrated or not, i.e., do the photon detections get weighted by their energies when tallying the final projection image. I have heard some rumors that, while the primary detections will be energy integrated, the scattered projections may not be. Is this fake news? And if I wanted to toggle energy integration on or off, say, to simulate a photon counting detector, is there way to do that for both primary and scatter?

# TrueBeam CBCT geometry
ct_detector = GGEMSCTSystem('TrueBeam_CBCT')
ct_detector.set_ct_type('flat')
ct_detector.set_number_of_modules(1, 1)
ct_detector.set_number_of_detection_elements(193,257, 1)
ct_detector.set_size_of_detection_elements(0.776*2, 0.776*2, 0.7, 'mm')
ct_detector.set_material('CsI')
ct_detector.set_source_isocenter_distance(1000.0, 'mm')
ct_detector.set_source_detector_distance(1500.0, 'mm')
ct_detector.set_threshold(20.0, 'keV')
ct_detector.set_rotation(0.0, 0.0, -90.0, 'deg')
ct_detector.save('data/truebeam_projection')
ct_detector.store_scatter(True)
#44
Thanks a lot! When you say that
QuoteGGEMS does not support analytical navigators.
does that mean that the geometric shape generators, like,

box = GGEMSBox(24.0, 36.0, 56.0, 'mm')
box.set_position(-70.0, -30.0, 10.0, 'mm')
box.set_label_value(1)
box.set_material('Water')

do not define a navigators? Or are these meshed  navigators in disguise?
#45
Hi,

No, you don't need to create one large volume.

(1) Yes — if you want to add a new element to the beam path, you should include it as a navigator (a volume), either meshed or voxelized. GGEMS does not support analytical navigators.

(2) You can add as many navigators as you want, as long as they do not overlap in space. You can also freely combine voxelized and meshed navigators — they are completely independent. So in the example you mentioned (bowtie, filter layer, anti-scatter grid), yes, this setup is fully possible.

(3) In CBCT you do not need a voxelized source. This feature was mainly developed for future GGEMS versions that will support PET and SPECT simulations. It is intended to model photons emitted inside a volume. In a voxelized source, photons are emitted in 360 degrees, so it cannot be used to represent a directional X-ray tube source, if that's what you were considering.

Best regards,
Didier
#46
Particles, Track & Event / Re: secondary photon removal
Last post by didier.benoit - Nov 04, 2025, 11:53 AM
Hi Julien,

No, in GGEMS you can't directly disable or remove secondary photons.
However, if you subtract the scatter image from the raw data, you will obtain an image containing only the primary photons.

There is another possible solution, but only if you are using a mono-energetic source: you can set very high energy cuts, close to the incident energy, which will practically keep only the primary photons.

Best regards,
Didier
#47
Hello, I am a new GGEMS user, trying to simulate a cone beam CT (CBCT) system, but am not finding any examples in the documentation about including additional post-source elements (e.g., bowtie and filter) and pre-detector elements (e.g. anti-scatter grid) in the beam path, in addition to the usual CBCT subject (i.e., the digital phantom). The naive option would be to craft a giant phantom grid to include both the phantom and these other elements, which I do not want to do for reasons of computation and memory efficiency.

My understanding is that this can be avoided by using what the documentation calls "navigators" (voxelized or meshed). My questions are,

(1) Is this understanding correct? Is this the intended and preferred way of including additional objects in the beam path?

(2) Can any number of navigators be added, and can the two types be mixed in arbitrary combinations? Could I have for example, in addition to the phantom, a voxelized navigator for the bowtie, a meshed navigator for the pre-bowtie filter layer, and another meshed navigator for the anti-scatter grid?

(3) The documentation mentions something called a "voxelized source". Is this the same as a voxelized navigator? And when providing a voxelized source, is the .mhd file describing a bowtie, or something else?
#48
Particles, Track & Event / secondary photon removal
Last post by julienzzzz - Nov 02, 2025, 10:26 PM
Hi GGEMS staff,

In CT simulation, is there any approach to remove the secondary photons and only collect primarys? If I remove the scatter raw data, the only primary photons would be left?

Thanks,
Julien