1st escape peak missing?

Hi All,
I’m firing 14.06 MeV neutrons (from above) into a graphite block.
To the side of the block (in the image below) are some sensitive volumes to detect the gamma energy.

When I look at the literature, the histograms presented always has a first escape peak at ~3.9 MeV. This is ~511KeV from the ~4.43 MeV characteristic gamma from C12.

Any clues why I might no be seeing it? In the literature, the first escape peak obvious. I just want to ensure my simulation is correct. Histogram below.

I’ve tried adjusting the size of both graphite block and the gamma SDs.
I also tried G4_BGO and G4_SODIUM_IODIDE from the NIST manager.
I have tried QGSP_BIC_HP and QGSP_INCLXX_HP physics.
Also, note that the closest peak is ~50-60KeV lower than the 1st escape peak.

Note the log axis.


Any insight and help is greatly appreciated.


1 Like

The histograms from the literature have a first and sometimes a second escape peak due to pair production in the detector. Are your sensitive detectors measuring the energy of the gamma rays from C12 entering the detector or the energy deposited by those gammas in the detector? If the former, there should not be escape peaks. If the latter, what is the materials of the gamma sensitive detectors? Also, what is the surrounding material?

1 Like

Thank you for the assistance.

The surrounding material is G4_Galactic.

In the histograms above, I am using ‘aStep->GetPreStepPoint()->GetKineticEnergy()’ in the SD (only detecting gammas).

Below is a snippet of code from my SD.

if (isGamma && touchable->GetVolume()->GetName() == "pv_gammaDet" && time < gammaTimeCutHigh && time > gammaTimeCutLow){ // gammaTimeCut in ns
	//if (isGamma && touchable->GetVolume()->GetName() == "pv_graphiteCalibrator" && time < gammaTimeCutHigh && time > gammaTimeCutLow){ //Delete
		G4AnalysisManager *man = G4AnalysisManager::Instance();
		//G4cout << "Gamma Energy: " << G4BestUnit(aStep->GetPreStepPoint()->GetKineticEnergy(),"Energy") << G4endl;

		//Interrogration areas
		AlphaDetector* alphaDet = new AlphaDetector;
		G4double alphaChannels = pow(alphaDet->GetAlphaDetUnitAmount(),2);
		G4int copyNum = track->GetOriginTouchable()->GetCopyNumber();

However I also tried,
‘aStep->GetTotalEnergyDeposit()’ and
‘aStep->GetTotalEnergyDeposit()’ with a track kill
‘GetPreStepPoint()->GetKineticEnergy()’ with a track kill.
‘GetPostStepPoint()->GetKineticEnergy()’ with a track kill.

Also, I experimented with and without appropriate time cuts. From what I understand, the gammas that produce the first escape peak occur within a short time window after the neutrons inelastically react with the C12. Gammas produced through elastic scattering in the C12 happen a bit later. Below is a histogram of the global time that the gammas reach the detectors.

I am still a bit confused by the geometry. Could you please clarify it for me? Is the graphite target that the neutrons are incident on (pv_graphiteCalibrator) the same as the cube in the figure? Are the cylinders in the figure the SDs (pv_gammaDet)? What materials are the detctors made of? What are the dimensions of the cube, cylinders and the distances between them? How far away is the neutron source from the target (I’m guessing 5-6cm from the time graph)?

Also, how are gamma rays produced by elastic scattering of neutrons on C12?

pv_gammaDet are the gamma detectors (the G4Tubs in the image).

pv_graphiteCalibrator is the graphite cube which the 14.06 MeV neutrons are incident upon, which is the cube in the image.

In the histogram provided the gamma detectors are G4_SODIUM_IODIDE. However I am now using G4_BGO (I saw no escape peaks in either material).

Particle Source Position (0 cm,60 cm ,0 cm)

gammaDet#0 :: pos(-25 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )
gammaDet#1 :: pos(-15 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )
gammaDet#2 :: pos(-5 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )
gammaDet#3 :: pos(5 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )
gammaDet#4 :: pos(15 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )
gammaDet#5 :: pos(25 cm ,12.2262 cm ,36.5 cm ) :: Rotation(0.523599,0,0)rads :: rad(4 cm ) :: halfHeight(15 cm )

Graphite Block :: pos(0 fm ,-1.9 cm ,0 fm )	::	halfSize(5 cm ,5 cm ,5 cm )

The neutron takes about 6ns to reach the surface of the graphite block, then some time interacting, then about <1ns for the gamma to get to the gamma detector.

I must have misread what I said earlier regarding the inelastic and elastic gammas. Apologies

Thank you very much for the assistance.
Let me know if I can provide any more information.


Given the geometry, the gamma ray global timing makes sense.

The detectors are big enough (8cm by 30cm cylinders) that many of the 0.511 gammas will get reabsorbed in the scintillator. So the double escape peak should be heavily suppressed and the single escape peak should be quite small but still present. I dug through my old files and found a run I did on 1.275MeV gamma rays with a much smaller (5cm x 5cm cylindr) LaCl3:Ce scintillator. The full energy, first and second escape peaks are clearly visible. Your 1st and 2nd escape peaks should much smaller (relative to full energy peak) than the ones shown here.

You can also see a smaller peak ~38 keV below the full energy peak. That is the La K X-ray escape peak.

Note that I am measuring energy deposited in the detector per event. That is kind of what an experimental spectrum would measure. To do so, I get the energy deposited at each step with step->GetTotalEnergyDeposit() in SteppingAction and then add them up in EventAction. (Example B1 shows how to do this.)

Thank you very much!
I’ll try this approach right away.


I was wondering if I could get some assistance.

I change the time histogram (shown previously) to read the global time at the end of event (below) instead of every step in the SD (which I did previously). The plots look the same to me.

I implemented the gamma energy deposit from my SD to step and event, like in B1. I’m adding up the energy deposited from step into Event. At EndOfEvent I add the value to a histogram.

Any clue what I am looking at now, or if I did something wrong?
The gamma energy histogram looks way different from previous (in OP). I don’t even see the ~4.4 MeV characteristic gamma peak for C12. The gamma detector is G4_BGO and the graphite cube is G4_GRAPHITE.
It’s still only counting gammas, and only in the gamma detectors. The time window I explained earlier is also implemented.


Hi. The first spectrum you showed at the top of this post is the spectrum of gamma rays that arrive at the detector (from GetKineticEnergy()). Now you are calculating the total energy deposited (from GetTotalEnergyDeposit()) to get a detector pseudo-response. You need to accumulate the energy deposited by gammas and their secondaries at each step. The test for isGamma may not be allowing you to collect the energy of the secondaries (just a guess). Try removing the isGamma test. The time window should reject most neutrons.

Thank you very much for your help. I think it is correct now.
The ~4.4 MeV, the 2 escape and the 511KeV peaks are visible.

Removing the isGamma was an issue,I also make some other tweaks such as changing the size of the graphite cube, gamma detector position help get the plot below.

If there is anything obviously wrong, please let me know.
And again thank you very much.