# Normalization on CASToR

**URL:** <https://castor-project.discourse.group/t/normalization-on-castor/979>\
**Category:** General Discussions\
**Tags:** pet\
**Created:** [February 11, 2025, 3:50pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979 "2025-02-11T15:50:32Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![imbeatrizp](https://avatars.discourse-cdn.com/v4/letter/i/da6949/32.png) [@imbeatrizp](https://castor-project.discourse.group/u/imbeatrizp)\
**Post date:** [February 11, 2025, 3:50pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/1 "2025-02-11T15:50:32Z")

</div>

Hi everyone,

I have read a discussion here on the forum about the normalization file and factor computation on CASToR but I still have some doubts on how to do that exactly.

I have done a Gate pet scanner simulation with the NEMA IEC phantom and followed the NEMA NU 2018 for image quality. I filled it with water and with the background activity concentration of 5.3kBq/cm3, and four times that for the spheres.

Now, for me to obtain the normalization file I have to reconstruct the resulting list mode from this simulation test normally with castor-recon and then provide those images resulting from it to the castor-norm, right? My doubt is do I need to provide an attenuation file for this?

I would really appreciate it if anyone could clarify.

Thank you!

Greetings,  
Beatriz

---

<div class="post-metadata">

**Author:** ![s\_mousavi](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@s\_mousavi](https://castor-project.discourse.group/u/s_mousavi)\
**Post date:** [February 11, 2025, 5:08pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/2 "2025-02-11T17:08:38Z")

</div>

Hello Beatriz,

First note that castor-norm is for direct normalization and in addition your data should be in the histogram format rather than list-mode.

Answering your question, as far as I understand, you need to feed castor-norm the true image and not the reconstructed one by castor-recon. I think you are referring to the following post on the forum.

> [@Normalization file preparation and normalization factor computation](https://castor-project.discourse.group/t/normalization-file-preparation-and-normalization-factor-computation/966/5):
>
> Hi Seyyed, To my understanding, castor-norm is based on a direct normalization, unlike the paper from Pepin et al. which is based on a component-based normalization. The principle of a direct normalization is simple : the normalization factor is given by the ratio between the expected projection and the measured projection. The expected projection is the forward projection of the normalization phantom. This is why you have to provide the true image of the normalization phantom to castor-norm,…

If you look at this post, it is stated clearly.

> [@Normalization file preparation and normalization factor computation](https://castor-project.discourse.group/t/normalization-file-preparation-and-normalization-factor-computation/966/5):
>
> The expected projection is the forward projection of the normalization phantom. This is why you have to provide the true image of the normalization phantom to castor-norm, rather than the reconstructed (hence, approximative) image of the normalization phantom.
> 
> Experimentally, it is better to use an annular phantom to neglect attenuation and scattered coincidences. If not, you have first to correct the measured data for attenuation and scattered coincidences. You shall also remove the random coincidences.

It depends on you, whether you want to correct for the attenuation effect or not. Providing atten factors with the normalization is optional and not mandatory. As you can see in the quoted post, if you choose an annular phantom you can probably ignore the effect of attenuation.

To conclude, I think it depends on your specific needs and goal. The more corrections, the better the quality of the reconstructed image.

Best,  
Seyyed

---

<div class="post-metadata">

**Author:** ![imbeatrizp](https://avatars.discourse-cdn.com/v4/letter/i/da6949/32.png) [@imbeatrizp](https://castor-project.discourse.group/u/imbeatrizp)\
**Post date:** [February 11, 2025, 5:41pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/3 "2025-02-11T17:41:15Z")

</div>

Hi Seyyed,

Thank you for your response.

I read your post, but I still have some doubts. I am working exclusively with simulated phantoms and a PET scanner in GATE, where all geometries are defined by me. My simulation outputs a .root file, which I can convert to a CASToR-compatible format using the castor-GATERootToCastor tool.

However, I’m unsure how to obtain the mandatory -img path\_to\_img.hdr parameter for castor-norm, since GATE does not directly provide this file. Do you know how I can generate or extract this image from GATE?

Additionally, I’m not entirely clear on how to apply corrections for attenuation, scattered coincidences, and the removal of random coincidences. I had assumed that these corrections were only possible during reconstruction using castor-recon. Could you clarify how these corrections are typically handled?

Greetings,  
Beatriz

---

<div class="post-metadata">

**Author:** ![tmerlin](https://yyz2.discourse-cdn.com/free1/user_avatar/castor-project.discourse.group/tmerlin/32/216_2.png) [@tmerlin](https://castor-project.discourse.group/u/tmerlin)\
**Post date:** [February 19, 2025, 10:41pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/4 "2025-02-19T22:41:02Z")

</div>

Hi Beatriz,

What object do you use as normalization phantom in your simulation ?

Regarding the corrections, ACFs can be computed by providing the umap to CASToR.

For scatter estimation, there is a matlab/python tool developed by Rodrigo Jose Santo who made a presentation at the IEEE NSS/MIC User Meeting at the end of last year, and which is available at the following link:

> **[GitHub - r-santo/openSSS: Open-source implementation of scatter estimation...](https://github.com/r-santo/openSSS)**
>
> Open-source implementation of scatter estimation for 3D TOF-PET

I have yet to test it, but you could give it a try. It contains several support functions for CASToR.

Best,  
Thibaut

---

<div class="post-metadata">

**Author:** ![imbeatrizp](https://avatars.discourse-cdn.com/v4/letter/i/da6949/32.png) [@imbeatrizp](https://castor-project.discourse.group/u/imbeatrizp)\
**Post date:** [February 20, 2025, 10:56am UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/5 "2025-02-20T10:56:13Z")

</div>

I am using as a normalization phantom the NEMA IEC phantom because from what I read that is the phantom they also use in real cases. Should it be a simple cylindrical phantom for CASToR?

I will give that a try. Thank you!

Greetings,  
Beatriz

---

<div class="post-metadata">

**Author:** ![claude.comtat](https://avatars.discourse-cdn.com/v4/letter/c/ce7236/32.png) [@claude.comtat](https://castor-project.discourse.group/u/claude.comtat)\
**Post date:** [February 20, 2025, 12:23pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/6 "2025-02-20T12:23:54Z")

</div>

Hello Beatriz,

Usually, a dedicated phantom is used for normalization. I wouldn’t use the NEMA IEC for normalization. The phantom should cover all possible lines of response. As a consequence, its radius is bigger than the imaged field-of-view. You also want to minimize attenuation and scattering. As a consequence, a thin annular phantom with an internal radius larger than the FOV is an appropriate choice.

---

<div class="post-metadata">

**Author:** ![imbeatrizp](https://avatars.discourse-cdn.com/v4/letter/i/da6949/32.png) [@imbeatrizp](https://castor-project.discourse.group/u/imbeatrizp)\
**Post date:** [February 20, 2025, 5:02pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/7 "2025-02-20T17:02:14Z")

</div>

Hi,

Thank you for explaining. I understand it better now. I still have just one question. Should the phantom be filled with air right?

Is this a good representation of how the phantom should look like?

 ![77777](https://global.discourse-cdn.com/free1/uploads/castor_project/original/1X/e4ffb47d916ccfd112c074386f62a90866320609.png)

I did it according to the FOV dimensions of the scanner I have, so the phantom has an outer radius of 400 mm, an inner radius of 399 mm, and a 200 mm length.

---

<div class="post-metadata">

**Author:** ![s\_mousavi](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@s\_mousavi](https://castor-project.discourse.group/u/s_mousavi)\
**Post date:** [February 20, 2025, 5:26pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/8 "2025-02-20T17:26:05Z")

</div>

Hello Beatriz,

The phantom should be filled with a solution of a radioactive material/element. You can use for example 18F solution (in water). But the area in the scanner (including your FOV) should be filled with air or even maybe vacuum. I think your construction of annular phantom is OK.

Hope this helps out!

Best,  
Seyyed

---

<div class="post-metadata">

**Author:** ![claude.comtat](https://avatars.discourse-cdn.com/v4/letter/c/ce7236/32.png) [@claude.comtat](https://castor-project.discourse.group/u/claude.comtat)\
**Post date:** [February 20, 2025, 5:53pm UTC](https://castor-project.discourse.group/t/normalization-on-castor/979/9 "2025-02-20T17:53:52Z")

</div>

Yes, you can fill the phantom with air (so, no attenuation nor scattering).

Yes, our phantom is suitable for normalization.
