Biasing of neutron production cross section


I’m trying to simulate a neutron source by shooting deuterons on a lithium target.
I want to increase the neutron-production cross-section but I could not get the examples from your Geant4 Gitlab to work for my case.

I basically copied the GB01 example, which I thought would be the only example that made sense in my case, with corresponding files, but nothing changed in my neutron-production.

I added this to the file which creates my geometry:

G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()-GetVolume(“target_log”);
GB01BOptrMultiParticleChangeCrossSection* testMany = new GB01BOptrMultiParticleChangeCrossSection();

And I added this part to the file where my physics list is defined.

G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics();

Am I missing something here? Or am I using the wrong example?
I’ve also tried some examples from the internet, but without success.

I hope you can help me.
Thanks in advance!

@marcverderi It looks like you were the author of this example?


I got the biasing to work by looking at what interaction created the neutrons (mostly “dInelastic” and partly neutronInelastic) and coding it like this:

    G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics();
    biasingPhysics->PhysicsBias("deuteron", {"dInelastic"});
    biasingPhysics->PhysicsBias("neutron", {"neutronInelastic"});

For some reason the biasingPhysics->Bias(“deuteron”); did not do any biasing.

To make the biasing active you have to do two things:

  • what you have done about the physics list (this is to equip the physics with the needed technical biasing features)
  • tell the “biasing operator” it has to handle deuterons. In example GB01, this is done in the GB01DetectorConstruction class; there, you will see lines likes:
    • testMany->AddParticle(“gamma”);
      so, add:
    • testMany->AddParticle(“deuteron”);

One word of caution though. The code has been tested with neutral particles. Charged particles are being addressed (not yet released) and may hit some warning messages. For what concern inelastic of deuterons, this should work. But in case of problem, please report to this thread !


Hi Marc,

I tried the exact thing you are explaining in my initial test.
For some reason no biasing was happening when I implemented it like


but it biased properly when I implemented it like

biasingPhysics->PhysicsBias("deuteron", {"dInelastic"});

Do you know why this is the case?
Since the example GB01 only uses the first one I thought I’d report it on this forum for other people who might have the same problem.