Ionisation Electrons and Muons in Gas Detector

Geant4 Version: 11.2.2
Operating System: aarch64-el9-gcc13-opt
Compiler/Version: gcc13
_CMake Version:_3.26.2

I am building multiple panels for gas detectors. The particle gun reads through multiple particles which are created by GENIE and shoots them into the simulation one by one as a single event.
Currently I am filtering out all the particles created by GENIE and only selecting muons to be shot with particle gun.
The detectors are filled with Ar:CO2 in 70:30 ratio. The problem I am facing currently is with very little to no ionisation electrons in the gas volume, also not all the panels of gas detector track muons. I only see occasional hits in one of two panels.

Here is a code snippet for how I am defining the Ar:CO2 has mixture

 G4Element* elC  = nist->FindOrBuildElement("C");
        G4Element* elO  = nist->FindOrBuildElement("O");
        G4Element* elAr = nist->FindOrBuildElement("Ar");

        density = 1.977 * mg/cm3;
        temperature = 298.15*kelvin;
        pressure = 3.0*atmosphere;

        G4Material* CO2 = new G4Material(name="CO2", density, ncomponents=2);
        CO2->AddElement(elC, natoms=1);
        CO2->AddElement(elO, natoms=2);

        density = 1.8223 * mg/cm3;
        temperature = 298.15*kelvin;
        pressure = 3.0*atmosphere;

        gasmix = new G4Material(name="ArCO2_70_30", density, ncomponents=2, kStateGas, temperature, pressure);
        gasmix->AddElement(elAr, fractionmass = 0.70);
        gasmix->AddMaterial(CO2,fractionmass = 0.30);
        
        if (gasmix) {
                G4cout << "Gas Material: " << gasmix->GetName() << G4endl;
                G4cout << "Density: " << gasmix->GetDensity() / (g/cm3) << " g/cm³" << G4endl;
                G4cout << "Ionization Potential: " << gasmix->GetIonisation()->GetMeanExcitationEnergy() / eV << " eV" << G4endl;
        }

Here are some modifications I did to be able to see electrons

// Define the gas region
        G4Region* gasRegion = new G4Region("gasmixRegion");
        gPanelLogic->SetRegion(gasRegion);
        gasRegion->AddRootLogicalVolume(gPanelLogic);

        G4double maxStep = 0.5 * mm; // Limit step size to 0.5 mm inside gas
        G4UserLimits* stepLimit = new G4UserLimits(maxStep);
        gPanelLogic->SetUserLimits(stepLimit);

        // Set lower production cuts
        G4ProductionCuts* cuts = new G4ProductionCuts();
        cuts->SetProductionCut(0.1 * mm, "e-"); // Reduce to 0.01 mm
        gasRegion->SetProductionCuts(cuts);

Here are some physics lists, I added LiverMore and PenelopePhysics to check if this makes any changes

 G4RunManager *runManager = new G4RunManager();

        G4PhysListFactory physListFactory;
        G4VModularPhysicsList *physicsList = physListFactory.GetReferencePhysList("QSGP_BERT_EMZ");

        // Add optical physics
        G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
        physicsList->RegisterPhysics(opticalPhysics);
        physicsList->RegisterPhysics(new G4EmStandardPhysics_option4());
        physicsList->RegisterPhysics(new G4EmLivermorePhysics());
        physicsList->RegisterPhysics(new G4EmPenelopePhysics());
        //physicsList->RegisterPhysics(new G4MicroElecPhysics());

        G4EmParameters* emParams = G4EmParameters::Instance();
        emParams->SetMinEnergy(0.01 * eV); // Even lower threshold for secondary electrons
        emParams->SetAugerCascade(true);

        runManager->SetUserInitialization(physicsList);
        runManager->SetUserInitialization(new DetectorConstruction());
        runManager->SetUserInitialization(new ActionInitialization());
        runManager->SetNumberOfThreads(2);
        runManager->Initialize();

I can provide more information if needed. Kindly suggest how this can be resolved ?

Thanks in advance :slight_smile: