Radiative capture of a neutron by 98Mo nucleus is missing

Hello,

I work on 100Mo(p, x)Y nuclear reaction modeling on a solid cyclotron target. The target consists not only with 100Mo isotope, but also has 98Mo. The dominant reaction on 100Mo is 100Mo(p, 2n)99mTc which gives us 2 neutrons in the output channel. I would like to produce an additional portion of 99mTc via the following reaction chain: 98Mo(n, \gamma)99Mo → 99mTc via beta-decay (see the cross-section of 99Mo production on the screenshot taken from JANIS). Therefore, I need to know how many 99Mo nucleus were produced.
The problem is that there is no 99Mo produced at all, and it seems that the capture process does not happen.

What would you suggest to do in order to solve the problem?

I tried to add the process explicitly like:

void MolybdenumPhysicsListGeneral::ConstructProcess() {
    G4VModularPhysicsList::ConstructProcess();
    // AddTransportation();
    G4ProcessManager* process_manager = G4Neutron::Neutron()->GetProcessManager();
    auto* neutron_capture_process     = new G4NeutronCaptureProcess();
    neutron_capture_process->RegisterMe(new G4NeutronHPCapture());
    process_manager->AddDiscreteProcess(neutron_capture_process);
},

but it didn’t help!

P.S. Additionally, I found I use G4HadronPhysicsFTFP_BERT_HP physics model for inelastic physics and there is a message:

                           Hadronic Processes for neutron
  Process: neutronInelastic
        Model:                      FTFP: 3 GeV ---> 100 TeV
        Model:            BertiniCascade: 19.9 MeV ---> 6 GeV
        Model:        NeutronHPInelastic: 0 eV  ---> 20 MeV
     Cr_sctns:      NeutronHPInelasticXS: 0 eV  ---> 20 MeV
     Cr_sctns:      G4NeutronInelasticXS: 0 eV  ---> 100 TeV
  Process: nCapture
        Model:          NeutronHPCapture: 0 eV  ---> 20 MeV
        Model:               nRadCapture: 19.9 MeV ---> 100 TeV
     Cr_sctns:        NeutronHPCaptureXS: 0 eV  ---> 100 TeV
     Cr_sctns:        G4NeutronCaptureXS: 0 eV  ---> 100 TeV
  Process: nFission
        Model:          NeutronHPFission: 0 eV  ---> 20 MeV
        Model:                G4LFission: 19.9 MeV ---> 100 TeV
     Cr_sctns:        NeutronHPFissionXS: 0 eV  ---> 20 MeV
     Cr_sctns:                    ZeroXS: 0 eV  ---> 100 TeV
  Process: nCapture
        Model:          NeutronHPCapture: 0 eV  ---> 20 MeV
     Cr_sctns:        G4NeutronCaptureXS: 0 eV  ---> 100 TeV

with nRadCapture: 19.9 MeV ---> 100 TeV while all the output neutron are below 10 MeV (see the screenshot attached). Maybe it caused such behavior? Is it possible to somehow change these parameters or use another physics list (which one?)?


Sincerely, Ihor

1 Like

How did you construct your material? If you use the G4NistManager, then you’ll get “natural abundance” molybdenum, which contains Mo-92, Mo-94 to 98, and Mo-100. If you made your own target material, can you show the code you used?

You’re using ParticleHP in your physics list, which uses tabulated data below 20 MeV for processes. So you certainly should be getting catures wih your lower energy neutrons. In G4NDL4.6 (what I’m using), I see Capture/CrossSections/42_98_Molybdenum.z, so there’s data there to do the capture you’re expecting.

Dear @mkelsey,
the code I used to compose the target material is:

    auto* molybdenum100 = new G4Isotope("100Mo", 42, 100, molybdenum100_atomic_mass); // 1 g/mole == 1 Da
    auto* molybdenum98  = new G4Isotope("98Mo", 42, 98, molybdenum98_atomic_mass);
    auto* molybdenum97  = new G4Isotope("97Mo", 42, 97, molybdenum97_atomic_mass);
    auto* molybdenum96  = new G4Isotope("96Mo", 42, 96, molybdenum96_atomic_mass);
    auto* molybdenum95  = new G4Isotope("95Mo", 42, 95, molybdenum95_atomic_mass);
    auto* molybdenum94  = new G4Isotope("94Mo", 42, 94, molybdenum94_atomic_mass);
    auto* molybdenum92  = new G4Isotope("92Mo", 42, 92, molybdenum92_atomic_mass);

    auto* molybdenum100_enriched = new G4Element("100Mo_enriched", "100Mo_92_2", 7);
    molybdenum100_enriched->AddIsotope(molybdenum100, molybdenum100_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum98, molybdenum98_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum97, molybdenum97_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum96, molybdenum96_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum95, molybdenum95_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum94, molybdenum94_abundance);
    molybdenum100_enriched->AddIsotope(molybdenum92, molybdenum92_abundance);

    molybdenum100_material = new G4Material("100Mo2C", molybdenum100_enriched_density, 1, kStateSolid);
    molybdenum100_material->AddElement(molybdenum100_enriched, 1);

with the following abundances:

    // molybdenum-100 isotope (100Mo)
    static constexpr G4double molybdenum100_enriched_density = 10.22 * g / cm3;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum100_abundance   = 92.2 * perCent;
    static constexpr G4double molybdenum100_atomic_mass = 99.9074682 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum98_abundance   = 3.16 * perCent;
    static constexpr G4double molybdenum98_atomic_mass = 97.9054041 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum97_abundance   = 0.8 * perCent;
    static constexpr G4double molybdenum97_atomic_mass = 96.9060171 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum96_abundance   = 1.28 * perCent;
    static constexpr G4double molybdenum96_atomic_mass = 95.90467488 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum95_abundance   = 1.11 * perCent;
    static constexpr G4double molybdenum95_atomic_mass = 94.90583748 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum94_abundance   = 0.57 * perCent;
    static constexpr G4double molybdenum94_atomic_mass = 93.9050841 * g / mole;
    // -------------------------------------------------------------------------------------------
    static constexpr G4double molybdenum92_abundance   = 0.88 * perCent;
    static constexpr G4double molybdenum92_atomic_mass = 91.9068071 * g / mole;
    // -------------------------------------------------------------------------------------------

So, the contribution of Mo98 is only 3.16 %. Is it too small abundance to observe the capture?

In the meantime, I changed the physics list to G4HadronInelasticQBBC since it’s recommended as the best option for low-energy processes (QBBC — PhysicsListGuide 11.2 documentation) and G4HadronElasticPhysicsHP for elastic collisions.
I managed to obtain a small number of Mo99 nuclei, but investigating process produced these nuclei I found it was “neutronInelastic” instead of “nCapture” I was expecting. I’m attaching the output json file with all the isotopes distributed by the creator processes.
processes_file.json.txt (2.4 KB)

Previously, I also managed to get a single neutron produced by “nCapture” using the G4HadronPhysicsFTFP_BERT_HP (just increasing N of events), but amount of Tc99[140.511] and Tc99[142.683], which are also the isotopes of interest, were extremely small (1 isomeric state per 3 millions of incident protons), so I refused it.
The G4HadronPhysicsQGSP_BIC_HP physics list shows an adequate number of the metastable 99mTc, but there is no 99Mo.

Summarizing, what might cause such difference in 99mTc production and what is the best physics list I need to use to produce enough number of 99Mo as well as 99mTc?

P.S. I checked my cross-section files. I use G4NDL4.7.1 and Capture/CrossSection/42_98_Molybdenum.z is present there!

Many thanks!

Ihor

Your material definition looks quite reasonable; the low rate may be your culprit. How many events did you generate to still see “no Mo99”?

Here, two runs of example Hadr03 (macro and printout).
In PhysicsList.cc, I selected G4HadronPhysicsQGSP_BIC_HP
ihor1.mac.txt (260 Bytes)
ihor1.out.txt (5.1 KB)
ihor2.mac.txt (259 Bytes)
ihor2.out.txt (1.5 KB)

@mkelsey last time I ran 100 events (each event has 100,000 protons). I used G4HadronPhysicsQGSP_BIC_HP physics list and didn’t get any Mo99 nucleus. There were only small number of Mo101 produced by neutron capture reaction.

Furthermore, I added another pellet made of pure Mo98 just behind enriched the Mo100, so now I have the proton beam interacts with 100Mo and produced neutrons from (p, 2n) and other reactions (see a screenshot attached). Then these neutrons as I expected should be captured by Mo98 nuclei and produce Mo99 isotope.
I just wanted reproduce something similar to the target from the 2nd example @maire1 provided me with.

The result is about 2-3 nuclei of Mo99 produced per 200 events (200 * 100,000 = 20,000,000 protons). The peak of neutron kinetic energy is about 1.1 MeV.