How to create pure MuonToMuonPairProduction events?

Hi everyone,

I’m trying to implement a program to study muon (lepton) pair production from muon-nucleus scattering.

Just for context, I implemented a simple geometry with a block of Tungsten.

For testing, I have a very minimal PhysicsList:

PhysicsList::PhysicsList() {}

void PhysicsList::ConstructParticle() {
  G4MuonPlus::MuonPlusDefinition();
  G4MuonMinus::MuonMinusDefinition();

  G4Gamma::GammaDefinition();
  G4Electron::ElectronDefinition();
  G4Positron::PositronDefinition();
}

void PhysicsList::ConstructProcess() {
  AddTransportation();


  auto muonPlus = G4MuonPlus::MuonPlusDefinition();
  G4ProcessManager* pManager = muonPlus->GetProcessManager();


  // pManager->AddProcess(new G4MuIonisation());
  // pManager->AddProcess(new G4MuBremsstrahlung());
  // pManager->AddProcess(new G4MuPairProduction());
// Crashes without the three process above?
  pManager->AddProcess(new G4MuonToMuonPairProduction());
}

The strange behavior is that if I don’t add the standard muon processes such as ionisation and bremsstrahlung, the program crashes. And if I keep them on I no longer get a “pure” process anymore.

I also tried biasing like

  auto muonpair = new G4MuonToMuonPairProduction();
  muonpair->SetCrossSectionBiasingFactor(100);
  pManager->AddProcess(muonpair);

but I’m not sure whether I’m setting this up correctly and as such wanted to get some advice?

My questions are:

  1. Is it valid to have a G4MuonPlus with only my custom production process and transportation?
  2. Why would removing G4MuIonisation/G4MuBremsstrahlung cause a crash?
  3. Is there a minimum set of processes that must be registered for a muon? If so how do I find this minimum list?
  4. What should I change in the PhysicsList above to get a pure sample of mu → 3mu?

Thanks!

P.S Once I had the process I was hoping to serialize the G4Event ideally into an HepMC or atleast store the momentum/position of the incoming and outgoing muons at the vertex. Just wanted to check if there were any examples for this? (Most examples seemed to be dumping values from sensitive detectors)

Please fill out the following information to help in answering your question, and also see tips for posting code snippets. If you don’t provide this information it will take more time to help with your problem!

Geant4 Version: 11.5.0
Operating System: Fedora44
Compiler/Version: 20
CMake Version:4.3.0