Does G4RadioactiveDecay handle isomeric states?

We want to radioactive backgrounds in our experiment, specifically simulating Ag-108m contamination from solder and components on our circuit boards. The Ag-108m isomer is a very long-lived state (438 years), which can decay either via electron capture to Pd-108, or via internal transition (IT, emitting a pair of gammas) to the Ag-108 ground state. Both of these channels are relevant to our backgrounds budget.

I create an Ag-108m nucleus for G4ParticleGun with

    G4IonTable* ionTable = G4IonTable::GetIonTable();
    G4ParticleDefinition* ag108m = ionTable->GetIon(47, 108, 0.*keV, G4Ions::plus_X);

(note that GetIon(Z, A, level) generates an error message and fails) but it doesn’t appear to decay at all. Tracking shows:

G4WT0 > *********************************************************************************************************
G4WT0 > * G4Track Information:   Particle = Ag108[0.000X],   Track ID = 1,   Parent ID = 0
G4WT0 > *********************************************************************************************************
G4WT0 > 
G4WT0 > Step#    X(mm)    Y(mm)    Z(mm) KinE(MeV)  dE(MeV) StepLeng TrackLeng  NextVolume ProcName
G4WT0 >     0    -11.4    -38.4    -7.95         0        0        0         0         Zip initStep
G4WT0 >     1    -11.4    -38.4    -7.95         0        0        0         0         Zip Scintillation
G4WT0 > 

and then it goes on to the next event. The particle name string matches what I think I should see for an isomer.

To verify that RadioactiveDecay is present and active, I tried the same job using the Ag-108 ground state, which beta decays to Cd-108 in about 2 minutes:

    G4ParticleDefintion* ag108 = ionTable->GetIon(47, 108, 0.*keV);

G4WT0 > *********************************************************************************************************
G4WT0 > * G4Track Information:   Particle = Ag108,   Track ID = 1,   Parent ID = 0
G4WT0 > *********************************************************************************************************
G4WT0 > 
G4WT0 > Step#    X(mm)    Y(mm)    Z(mm) KinE(MeV)  dE(MeV) StepLeng TrackLeng  NextVolume ProcName
G4WT0 >     0    -20.7     31.3    -13.9         0        0        0         0         Zip initStep
G4WT0 >     1    -20.7     31.3    -13.9         0        0        0         0         Zip Scintillation
G4WT0 >     :----- List of 2ndaries - #SpawnInStep=  3(Rest= 3,Along= 0,Post= 0), #SpawnTotal=  3 ---------------
G4WT0 >     :     -20.7      31.3     -13.9  7.01e-06              Cd108
G4WT0 >     :     -20.7      31.3     -13.9      0.93          anti_nu_e
G4WT0 >     :     -20.7      31.3     -13.9     0.716                 e-
G4WT0 >     :----------------------------------------------------------------- EndOf2ndaries Info ---------------
G4WT0 > 

Here you see the decay, just as expected. I should have seen a similar “List of 2ndaries” above, with either X rays from electron capture, or a pair of gammas from the internal transition.

So, should RadioactiveDecay be handling isomer decays? Is there a hidden configuration option we need to set to enable this behaviour?

The third argument of GetIon(…) is the excitation energy, not its kinetic energy.
Here, a macro for rdecay01 and the printout.
electron capture : ~91% ; IT mode : 9%
Ag108m.mac.txt (289 Bytes)
Ag108m.out.txt (4.2 KB)

Thanks, Michel. I see that the decay channel is implemented and works, but your demonstration opens several questions.

First, where is G4ions::G4FloatLevelBase documented? You wrote,

I knew that, but then what I don’t understand is the fourth argument. Specifically,

   G4ParticleDefinition* GetIon(G4int Z, G4int A, G4double E, 
                                G4Ions::G4FloatLevelBase flb, G4int J=0);

where G4Ions.hh defines

  // enumerator for floating level base
  enum class G4FloatLevelBase
       { no_Float=0,
         plus_X, plus_Y, plus_Z, plus_U, plus_V, plus_W,
         plus_R, plus_S, plus_T, plus_A, plus_B, plus_C, plus_D, plus_E

I thought that the “floating level base” corresponds to the energy level of the isomeric state, so that, e.g., GetIon(47,108,0.,G4Ions::plus_X) would give me the Ag-108m state with no extra excitation energy. Your macro command, instead, calls GetIon(47,108,109.466*keV,G4Ions::no_Float). Is there any documentation for using G4FloatLevelBase properly? @kurasige? @civanch?

Next, looking at your macro file, you used /gun/ion 47 108 0 109.466 to get the isomer state. But according to ENSDF the Ag-108m isomer is at 109.51 keV. Where in the G4 databases can I find out what excitation energy Geant4 is using for a given isomer?

1- the G4 data set are RadioactiveDecay and PhotonEvaporation. For example files z47.a108 …etc…
2- Floating level _X, _Y, …etc… are related to the known precision of these levels.
I did not follow the details of this story … Experts are Laurent Desorgher, Dennis Wright, @civanch

Mmmm. And the “X, Y, Z, etc.” notation isn’t used at all in either file :frowning: But I see in both z47.a108 files that we include the 79.401 keV intermediate state (lifetime 1.2 ns) as a “level.”

I wonder if that was my problem? I specified the “X” (first) level as the floating base, assuming (in the absence of any documentation) that those levels only mapped onto macroscopic “m” isomer states. Nope. I tried using “level 2” (plusY) for the isomer, and it still doesn’t reproduce the Ag-108m decays.

The only way I can get the isomer decays is with GetIon(47, 108, 109.466*keV) (as I noted above, 109.51*keV does not work).

although it is very common to label isomers as “m” here the labels X, Y, Z, A, … are for floating levels.

A floating level (or band) is a (series of) level(s) that are known to come in coincidence with a residual nuclei but because of it characteristics they are not known to connect to a level where the excitation energy is known. This is very common for low lying levels that are highly converted but have been measured with setups not sensitive to conversion electrons. Geant4 is able to have transitions between levels in the same band since their energy difference is known.

I am unsure but I think once you reach the head of a floating level the next state would be the ground state (no emission of anything) and then things continue as normal.

For Geant4 isomers, on the the hand, have the following consequences:

  • they will try to decay normally (gamma, IC, etc…)
  • if they are “reasonably” long lived they can also be transported.

I don’t know about the commands. I am just trying t clarify those letters and the whole “floating” levels.



Thank you very much! I have no background in nuclear physics (I started out in HEP and am now doing a dark matter search), so much of this is/was unfamiliar. I wasn’t able to find anything in the G4 documentation about the floating levels; it just seemed from G4IonTable that it was “analogous” or “parallel” to isomer levels.

Your explanation has clarified a lot! I wish something like it was included in the documentation.