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