Difference in transmission data

Hi Geant4 experts,
Recently I tried to simulate photons emitted into lead. After I collected the data and figured out the transmission of photons. I found my data is bigger than the transmission data from XCOM.

Here’s my PhysicsLists

void PhysicsList::ConstructParticle()
{

  G4BosonConstructor  pBosonConstructor;
  pBosonConstructor.ConstructParticle();

  G4LeptonConstructor pLeptonConstructor;
  pLeptonConstructor.ConstructParticle();

  G4MesonConstructor pMesonConstructor;
  pMesonConstructor.ConstructParticle();

  G4BaryonConstructor pBaryonConstructor;
  pBaryonConstructor.ConstructParticle();

  G4IonConstructor pIonConstructor;
  pIonConstructor.ConstructParticle();

  G4ShortLivedConstructor sLivedConstructor;
  sLivedConstructor.ConstructParticle();
  
}


#include "G4PhysicsListHelper.hh"

#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"

#include "G4eMultipleScattering.hh"

#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"

void PhysicsList::ConstructProcess()
{
  AddTransportation();
  G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
  
  auto particleIterator=GetParticleIterator();
  particleIterator->reset();
  while( (*particleIterator)() ){
    G4ParticleDefinition* particle = particleIterator->value();
    G4String particleName = particle->GetParticleName();
     
    if (particleName == "gamma") {
          
      ph->RegisterProcess(new G4RayleighScattering, particle);      
      ph->RegisterProcess(new G4PhotoElectricEffect, particle);
      G4ComptonScattering* cs   = new G4ComptonScattering;
      cs->SetEmModel(new G4KleinNishinaModel());
      ph->RegisterProcess(cs, particle);
      ph->RegisterProcess(new G4GammaConversion, particle);
      
    } else if (particleName == "e-") {

      ph->RegisterProcess(new G4eMultipleScattering, particle);
      ph->RegisterProcess(new G4eIonisation,         particle);
      ph->RegisterProcess(new G4eBremsstrahlung,     particle);      

    } else if (particleName == "e+") {

      ph->RegisterProcess(new G4eMultipleScattering, particle);
      ph->RegisterProcess(new G4eIonisation,         particle);
      ph->RegisterProcess(new G4eBremsstrahlung,     particle);
      ph->RegisterProcess(new G4eplusAnnihilation,   particle);  

    } else if (particleName == "mu+" || 
               particleName == "mu-"    ) {

      ph->RegisterProcess(new G4MuMultipleScattering(), particle); 
      ph->RegisterProcess(new G4MuIonisation(), particle);
      ph->RegisterProcess(new G4MuBremsstrahlung(), particle);
      ph->RegisterProcess(new G4MuPairProduction(), particle);
                   
    } else if( particleName == "proton" ||
               particleName == "pi-" ||
               particleName == "pi+"    ) {

      ph->RegisterProcess(new G4hMultipleScattering(), particle);      
      ph->RegisterProcess(new G4hIonisation(), particle);
      ph->RegisterProcess(new G4hBremsstrahlung(), particle);
      ph->RegisterProcess(new G4hPairProduction(), particle);            
     
    } else if( particleName == "alpha" || 
               particleName == "He3"    ) {

      ph->RegisterProcess(new G4hMultipleScattering(), particle);           
      ph->RegisterProcess(new G4ionIonisation(), particle);
      ph->RegisterProcess(new G4NuclearStopping(), particle);      
            
    } else if( particleName == "GenericIon" ) {

      ph->RegisterProcess(new G4hMultipleScattering(), particle);          
      G4ionIonisation* ionIoni = new G4ionIonisation();
      ionIoni->SetEmModel(new G4IonParametrisedLossModel());
      ph->RegisterProcess(ionIoni, particle);
      ph->RegisterProcess(new G4NuclearStopping(), particle);                   
      
    } else if ((!particle->IsShortLived()) &&
               (particle->GetPDGCharge() != 0.0) && 
               (particle->GetParticleName() != "chargedgeantino")) {
               
      ph->RegisterProcess(new G4hMultipleScattering(), particle);
      ph->RegisterProcess(new G4hIonisation(), particle);
    }
  }
}

And here’s the chart of my data and data from XCOM.

Did I miss any physics processes? Or is there any ways to collect energy transmission ?
Thanks for your time and consideration!

I founded that the difference between my data and data form XCOM became bigger when the photon energy increased.
Did I miss any additional physics processes? Or I used the incorrect ways to add new physicslists? :thinking:

It won’t matter for the graph shown, since it only goes up to 1MeV, but for higher energies the transmission will be larger (cross section smaller) than it should be because you have not included pair production for gamma rays.

Also, are you sure you are calculating transmission correctly? Specifically, what is your geometry and how are you doing the calculation?

1 Like

Hi dear John_McFee,
I am not sure if I calculated transmission correctly.

The photon source is just a point. It emitted photons into a lead filter(square with a side length of 2 cm, 1 mm thick) and I tried to figure out the transmission of the lead filter.

And I guess there may be some mistakes in the method I calculate the transmission. I collected the photons which the “PreStepPoint” were in the lead filter and the “PostStepPoint” were in the “World”.

Will this method make me collect additional energy?

Thanks for your time and consideration!

Hi,

Transmission is measured using a “good geometry” experiment, that is, one in which any interaction removes the gamma ray from the incident gamma ray beam. (See a good reference text, e.g., Modern Nuclear Chemistry 2nd ed., Loveland et al. 2017 Section 10.4, for a good discussion on transmission experiments.) Think of a gamma beam in the x-direction incident on a thin (in x-direction) plate target whose y- and z- dimensions are comparatively very large. The number of gamma rays that exit from the far x-side of the plate are counted.

You may not have a good geometry. You use a point source, but you did not say how far from the target it is. If the 1mm side is along x, the source must be far from the target in the x-direction. Then you must count only gamma rays exiting from the far x-side of the target. Your logic suggests that you are counting gammas that scatter out of the y- and z- sides of the target as well. That will over estimate the transmission.

What is your source-to-target distance and orientation with respect to the plate?

Hi,
As you said, I didn’t build a complete 3D model of the detector. I just set a point source, then emitted photons to the filter. The position of the point source is (0, -2.0 cm, -1.5 cm). The direction of these photons is (0, 0, 1). I tired to emit photons toward the positive half axis of the Z axis. And the filter’s position is (0, -2.0 cm, -0.5 mm), so the source-to-target distance is 1.4 cm.

Does my methods make me overestimate the transmission? If so, how could I count only gamma rays exiting from the far x-side of the target?

Thank you so much for your answer!

To double check your result, here a printout of example TestEm13.
PhysicsList is EmStandard, including Rayleigh scattering.
Total cross section (7.1242 mm2/g) differs from xcom ( 7.102 mm2/g) by ~0.3%

You can test Livermore or Penelope as well.

shzong.mac.txt (233 Bytes)
shzong-std.out.txt (1011 Bytes)
xcom.txt (174 Bytes)

Hi.

Testem13, as suggested by Michel, is a better way to measure the transmission and should give the most accurate estimate. However, the scoring method used there would be impossible to realize in a practical experiment.

If you are trying to model a “practical” experiment, you should modify your geometry.

The idea of a “good geometry” is that any interaction of a gamma ray with a target atom will remove it from the beam. Your geometry is not a “good geometry” because 1) you are counting exiting gammas too close to the boundaries of the target which allows in-scattering to be counted and 2) you are counting gammas exiting on surfaces other than the far z-surface (I assume +z is the primary gamma ray direction). To fix it, you should situate a sensitive detector of small x,y dimensions at a large +z distance from the target center and count gammas that hit it. You’ll have to play with “small” and “large” a bit.