How to calculate the absorbed dose rate

I know it is convenient to measure the absorbed dose of radioactive material in SD in G4, but it seems that there is no way to calculate the absorbed dose rate directly from the detector in G4. So do you have any good way to calculate the absorbed dose rate using G4?

I am not sure to well understand your question. Concepts of sensitive detector and hits collections are utilities included in Geant4, but they are not mandatory.

In any circonstances, informations are collected in SteppingAction (and/or TrackingAction), and from that you can do what is necessary.

See examples B1, B4a, TestEm1, …etc…

I apologize for not explaining my question clearly, I know that I can use the G4MultiFunctionalDetector in G4 to define the SD and get the absorbed dose in the SD. This absorbed dose is in Gy, but now I need to get the absorbed dose rate variable in cGy/h. But I found that there seems to be no direct SD for the absorbed dose rate in G4MultiFunctionalDetector, and I know that G4 has no concept of time, G4 runs on an event basis. So is there any good way to calculate the over absorbed dose rate (cGy/h).

If you know the real source you’re simulating, then its activity will tell you number of “generated events per second.” That will allow you to convert your simulated “absorbed dose per event” into absorbed dose per time.

I seem to comprehend your meaning, see if I understand correctly. If my radioactive source emits 3.7*10E7 particles in one second, then I can use the command /run/beamOn 3.7*10E7 for my experiment. Then the absorbed dose obtained in the detector should be in cGy/s. If I want to obtain the variable in cGy/h I would just multiply it by 3600 (3600 seconds in an hour), or I would just use the command /run/beamOn 3.7*10E7*3600 to simulate the number of particles released by the source in one hour. I would like to ask if I understand it correctly

You do understand, but you don’t need to generate that many events. You can scale the number of event based on the known rate. So for example, if you have a source that emits 3.7e+7 particles per second, then you could run, let’s say, 100000 events. Then you take your output and multiply it by (3.7e+7/100000) and that gives you your dose in “per second”. If you want to know your does “per hour”, just multiply your results by another 3600.

The number of events you generate determines the uncertainty (“error bars”) on your result, but it doesn’t determine the represented time. The uncertainty scales like sqrt(N), and the relative (fractional) uncertainty scales like sqrt(N)/N = 1/sqrt(N). If you generate 10,000 events, your uncertainty would be about 1%. If you generate 1000000 events, your uncertainty would be roughly one per mil.

1 Like

I just tried it with the four commands /run/beamOn 100,/run/beamOn 1000,/run/beamOn 10000 respectively. I found that the absorbed dose values showed a multiplicative relationship, i.e. the four commands /run/beamOn 100,/run/beamOn 1000,/run/beamOn 10000 basically showed a 10-fold relationship between the adjacent results. Based on your suggestion I think I should be able to run /run/beamOn 3.7e+5 at a time and multiply the obtained value by 100 directly, thus obtaining the absorbed dose in one second, and thus the absorbed dose rate in cGy/s.

Good! That’s exactly what you should have gotten.

If you have a very small number of small scoring boxes, you won’t see that exact multiplicative relationship for each little box, since many of the boxes might have zero events, but then start to see one or two events with much bigger jobs.

Thanks for the reply, I feel like I should have this figured out by now, I will next use /run/beamOn 1/10 or 1/100 of the particle count and multiply by 10 or 100 to get the absorbed dose in one second and then multiply by 3600 to get the absorbed dose in one hour. Really thank you for your reply this helped me a lot.

You’re quite welcome!

Hello @mkelsey !
I am new to Geant4 and trying to understand the basics.
So, we assume that the modeling time is exactly 1 second?
Thanks in advance!

if you have a source that emits 10 particle per second, and you now simulate 36000 events, you could either say the simulation “lasts” for 1 hour, or you could divide by (36000/10 =) 3600 and then argue you have sampled the 1 second 3600 times to improve your statistics.

Thank you for response!
The question is: how can we set the activity of the source in Geant so that the source emits 10 particles per second?

i think the point is, when you place N decaying isotopes into the run, they will all decay. the simulation will not stop after a defined time and some have decayed and others not. in my understanding, all decay chains will come to their respective end. so the same argument as before holds: put as many primaries as you like, and scale the results to the required quantity.