Cross sections for photonuclear reactions

hi everyone! Now I am trying to get cross sections for photonuclear reactions (gamma, n). So I have gamma beam with energy from 0.1 MeV up to 50 MeV and gold target. And I want to get cross sections for the next reactions for different gamma beam energy: Au197 + gamma = A196 + n, Au197 + gamma = A194 + 3n. But I see that cross section for these tro reaction are the same. Only cross sections for Au197 + gamma = A194 + 3n start from about 23 MeV. Could you tell why? Thank you in advance!

Which physics list are you using?

pl->RegisterPhysics(new G4EmStandardPhysics_option4());
pl->RegisterPhysics(new G4DecayPhysics());
pl->RegisterPhysics(new G4RadioactiveDecayPhysics());

So, as I understood in in the method GetElementCrossSection we don’t have difference for Au197 + gamma = A196 + n, Au197 + gamma = A194 + 3n reactions. So how can I get cross section for them separately?

G4PhotoNuclearCrossSection::GetElementCrossSection(const G4DynamicParticle* aPart,
G4int ZZ, const G4Material*)
const G4double Energy = 30*MeV;

if (Energy<THmin) return 0.;
G4double sigma=0.;

if(ZZ!=lastZ)   // Otherwise the set of parameters is ready
    lastZ = ZZ;             // The last Z of calculated nucleus
    if(GDR[ZZ]) // Calculated nuclei in DB
        lastGDR=GDR[ZZ];   // Pointer to prepared GDR cross sections
        lastHEN=HEN[ZZ];   // Pointer to prepared High Energy cross sections
        lastTH =eTH[ZZ];   // Energy Threshold
        lastSP =spA[ZZ];   // Shadowing coefficient for UHE
        G4double Aa = nistmngr->GetAtomicMassAmu(ZZ); // average A
        G4int N = (G4int)Aa - ZZ;
        G4double lnA=G4Log(Aa); // The nucleus is not found in DB. It is new.
        if(Aa==1.) lastSP=1.;      // The Reggeon shadowing (A=1)
        else lastSP=Aa*(1.-shc*lnA);      // The Reggeon shadowing
        lastTH=ThresholdEnergy(ZZ, N); // Energy Threshold
        lastGDR = new G4double[nL];  // Allocate memory for the new
        // GDR cross sections
        lastHEN = new G4double[nH];  // Allocate memory for the new
        // HEN cross sections
        G4int er=GetFunctions(Aa,lastGDR,lastHEN); // new ZeroPosition and
        // filling of the functions
        if(er<1) G4cerr << "***G4PhotoNucCrossSection::GetCrossSection: A="
            << Aa << " failed" << G4endl;
        GDR[ZZ]=lastGDR;     // added GDR, found by AH 10/7/02
        HEN[ZZ]=lastHEN;     // added HEN, found by AH 10/7/02
        eTH[ZZ]=lastTH;      // Threshold Energy
        spA[ZZ]=lastSP;      // Pomeron Shadowing
    } // End of creation of the new set of parameters
}// End of parameters udate

// =================== NOW the Magic Formula ===================
if (Energy<lastTH)
    return 0.;
else if (Energy<Emin)   // GDR region (approximated in E, not in lnE)
else if (Energy<Emax)                     // High Energy region
    G4double lE=G4Log(Energy);
else               // UHE region (calculation, but not so frequent)
    G4double lE=G4Log(Energy);
// End of "sigma" calculation

if(sigma<0.) return 0.;
return sigma*millibarn;


You might try the ShieldingLEND physics list. Currently LEND is the only Geant4 model which can separate the final states of a (gamma, n) reaction. However, I’m not an expert on this model so I don’t know if n and 3n are explicitly treated.

Thank you for this! So maybe someone know how could I get photonuclear cross sections from LEND physics list?

1- you need to download LEND data file and set the corresponding environment variable G4LENDDATA

2- below, a simplified physics constructor for example Hadr03 (and Hadr06, Hadr07 …) which uses Lend model and cross sections. (3.1 KB)

Thank you for your reply! Now I know how to use this physics list. But I want to get the values for cross sections of nuclear reactions with different gamma energies. How can I get them?

Any solutions for this problem?

what do you mean by “different gamma energy” ? above 20 MeV ?

1- with Hadr03 you can print values of cross section for any energy below 20 MeV
2- for a realistic simulation use ShieldingLEND physics list, as suggested by Dennis.

I want to get cross section like on the image. But the problem is that I have the same CS for Au197 + gamma = A196 + n and Au197 + gamma = A194 + 3n. Now I use ShieldingLEND physics list.

And when I use ShieldingLEND I get:


G4LENDCrossSection* lend = new G4LENDCrossSection;

const G4DynamicParticle* aPart = step->GetTrack()->GetDynamicParticle();
G4StepPoint* point1 = step->GetPreStepPoint();
const G4Material* material = point1->GetMaterial();
const G4Element* element = material->GetElement(0);
const G4Isotope* isotope = element->GetIsotope(0);

G4double xs2 = lend->GetIsoCrossSection( aPart , isotope->GetZ() , isotope->GetN() , isotope ,element , material );
cout << xs2 << endl;

From the terminal:

*** G4Exception : LENDCrossSection-01
issued by : G4LEND::GetIsoCrossSection(,)
is unexpectedly called.
*** Fatal Exception *** core dump ***
G4WT0 > G4Track (0x7f290c3f57e0) - track ID = 1, parent ID = 0
G4WT0 > Particle type : gamma - creator process : not available
G4WT0 > Kinetic energy : 0 eV - Momentum direction : (0,0,1)
G4WT0 > Step length : 7.61299 mm - total energy deposit : 0 eV
G4WT0 > Pre-step point : (0,0,-100) - Physical volume : phys0 (G4_Au)
G4WT0 > - defined by : not available
G4WT0 > Post-step point : (0,0,-92.387) - Physical volume : phys0 (G4_Au)
G4WT0 > - defined by : conv - step status : 4
G4WT0 > *** Note: Step information might not be properly updated.

Any advices, please?

below a run of Hadr03 (with Bertini cascade) : macro and output.
As you can see branching ratio for (g,n)Au196 and (g,3n)Au194 are different.

I did not try LEND model because on my local computer I cannot download LEND data (limited connexion). But if you have LEND data installed, you can try with the I have send you few day ago.
Au197.mac.txt (220 Bytes)
Au197.out.txt (2.4 KB)

I don’t know what photonuclear reaction data base is being used by these physics packages, but there are lots of graphs of energy dependent cross sections in IAEA-TECDOC-1178. You can check, gamma,3n is zero below ~23 MeV and rises to ~10 mbarn at 30-32 MeV. The gamma, peak at ~600 mbarn at ~13.5 MeV and drops to less than ~10 mbarn at the higher energies.

Hi, Thank you very much for your topic! I am trying to use the above codes to get the cross sections of 187Re(gamma, n) reaction. But the above codes don’t to specify the (gamma, n) reaction channel. So, how can I get what I want?