Skip to content

Conversation

ckuethe
Copy link
Contributor

@ckuethe ckuethe commented Aug 15, 2025

There are now 5 radiacode models known to exist - RC101, RC102, RC103, RC103G, and RC110 - and they don't all use the same detector. This diff adds knowledge of the three different scintillators used.

As there don't seem to be any mining facilities near me I can't hope for a couple of Cs137 sources to fall off a truck, so my attempts at computing dead time will be rather crude.

Radiacode_th232.zip
is a set of Th323 spectra from android app 1.65.01 and rc102 .. rc110

in preparation for adding RC-103G and RC-110, both of which do not use
10x10x10mm CsI(Tl) scintillators. I'm not sure that it makes much of a
difference right now, but when new DRFs are added to InterSpec, it's
probably worth having correct information about the scintillator.

Having a hook for different detector models will probably be useful
for estimating dead time too.
Based on a mapping of model to scintillator types:
- RC-10[123] are 10x10x10mm CsI(Tl)
- RC-103G is 10x10x10mm GAGG
- RC-110 is 14x14x14mm CsI(Tl)

Some of that can be found on the radiacode product info pages, but
you can also ask the device itself. The scintillator type is in the
`SP2DR_Table` member of the `configuration()` message

```
"SP2DR_Table": "CsI_10x10x10",
"SP2DR_Table": "CsI_10x10x10",
"SP2DR_Table": "GAGG_10x10x10",
"SP2DR_Table": "CsI_14x14x14",
```

from my RC102, RC103, RC103G, and RC110 respectively. I used the
following bit of python to print that.

```python

import radiacode
from io import StringIO
from json import dumps as jdumps
import configobj

rc = radiacode.RadiaCode()
io_config = StringIO(rc.configuration())

cf_config = configobj.ConfigObj(io_config)

print(jdumps(dict(cf_config), indent=2))
```

Attached are some fairly long spectra from each of my four test devices
measuring the same thorium source (big pile of tungsten welding rods) in
a 3d printed fixture so that direct comparison of their performance can
be made.

Even without adding specific scintillator geometry, InterSpec on Linux
and Android both read the spectra from all the different devices and
didn't produce totally bogus results.

The C binding is broken, and appears to have not been compiled in quite
a while. I'll fix that in a later diff.
@ckuethe
Copy link
Contributor Author

ckuethe commented Aug 15, 2025

Need to fix the C and Python bindings...

@wcjohns wcjohns merged commit 8dc06f2 into sandialabs:master Aug 18, 2025
5 of 13 checks passed
@ckuethe
Copy link
Contributor Author

ckuethe commented Aug 18, 2025

Thanks! I'm learning all sorts of things about C++ from this project.

@wcjohns
Copy link
Collaborator

wcjohns commented Aug 18, 2025

Haha, I'm not sure if that's a good thing or not :)

I also just pushed an update to InterSpec to handle these new enums as well.
However, we don't have detector efficiency functions for these models, so its not the most useful in the world.

Thanks for adding these!

@ckuethe
Copy link
Contributor Author

ckuethe commented Aug 19, 2025

yeah, I need to try set up some kind of jig to make DRFs for the other models but at least some of the plumbing is now in place.

I did a little bit of backwards math and it seems that live time is calculated by the app (not the device itself) and is using a constant 5uS dead time. Not sure how much, if any, additional energy compensation it's doing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants