Using my own Geometry in rdecay02 example

Hi All, I am using rdecay02 example for my simulation. I have added my own geometry code in DetectorConstruction.cc file. I deleted DetectorMessagenger.cc file and all the references of previous gemoetry from all files. No compilation errors in code. But When In run the executable ./rdecay02, I get following error:

Checking overlaps for volume shellPV:0 (G4Sphere) ... OK! 
Checking overlaps for volume shellPV_1:0 (G4Sphere) ... OK! 
Checking overlaps for volume shellPV_2:0 (G4Sphere) ... OK! 
Checking overlaps for volume shellPV_3:0 (G4Sphere) ... OK! 
Checking overlaps for volume shellPV_4:0 (G4Sphere) ... OK! 

------------------------------------------------------------
---> The shell dimension:  inner_r 10   outer_r 1000
------------------------------------------------------------
World is registered to the default region.
physicsList->Construct() start.

 hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval 
 for pions :   3 to 6 GeV
 for kaons :   3 to 6 GeV
 for proton :  3 to 6 GeV
 for neutron : 3 to 6 GeV

physicsList->CheckParticleList() start.
physicsList->setCut() start.
/run/physicsModified
=======================================================================
======                 Electromagnetic Physics Parameters      ========
=======================================================================
LPM effect enabled                                 1
Enable creation and use of sampling tables         0
Apply cuts on all EM processes                     0
Use general process                                0
Enable linear polarisation for gamma               0
Enable sampling of quantum entanglement            0
X-section factor for integral approach             0.8
Min kinetic energy for tables                      100 eV 
Max kinetic energy for tables                      100 TeV
Number of bins per decade of a table               7
Verbose level                                      1
Verbose level for worker thread                    0
Bremsstrahlung energy threshold above which 
  primary e+- is added to the list of secondary    100 TeV
Bremsstrahlung energy threshold above which primary
  muon/hadron is added to the list of secondary    100 TeV
Lowest triplet kinetic energy                      1 MeV
Enable sampling of gamma linear polarisation       0
5D gamma conversion model type                     0
5D gamma conversion model on isolated ion          0
Livermore data directory                           livermore
=======================================================================
======                 Ionisation Parameters                   ========
=======================================================================
Step function for e+-                              (1, 1 mm)
Step function for muons/hadrons                    (1, 1 mm)
Step function for light ions                       (0.2, 0.1 mm)
Step function for general ions                     (0.2, 0.1 mm)
Lowest e+e- kinetic energy                         1 keV
Lowest muon/hadron kinetic energy                  1 keV
Fluctuations of dE/dx are enabled                  1
Use ICRU90 data                                    0
Use built-in Birks satuaration                     0
Build CSDA range enabled                           0
Use cut as a final range enabled                   0
Enable angular generator interface                 0
Max kinetic energy for CSDA tables                 1 GeV
Max kinetic energy for NIEL computation            0 eV 
Linear loss limit                                  0.01
Read data from file for e+e- pair production by mu 0
=======================================================================
======                 Multiple Scattering Parameters          ========
=======================================================================
Type of msc step limit algorithm for e+-           1
Type of msc step limit algorithm for muons/hadrons 0
Msc lateral displacement for e+- enabled           1
Msc lateral displacement for muons and hadrons     0
Urban msc model lateral displacement alg96         1
Range factor for msc step limit for e+-            0.04
Range factor for msc step limit for muons/hadrons  0.2
Geometry factor for msc step limitation of e+-     2.5
Safety factor for msc step limit for e+-           0.6
Skin parameter for msc step limitation of e+-      1
Lambda limit for msc step limit for e+-            1 mm
Use Mott correction for e- scattering              0
Factor used for dynamic computation of angular 
  limit between single and multiple scattering     1
Fixed angular limit between single 
  and multiple scattering                          3.1416 rad
Upper energy limit for e+- multiple scattering     100 MeV
Type of electron single scattering model           0
Type of nuclear form-factor                        1
Screening factor                                   1
=======================================================================
======                 Atomic Deexcitation Parameters          ========
=======================================================================
Fluorescence enabled                               1
Fluorescence Bearden data files enabled            0
Fluorescence ANSTO data files enabled              0
Auger electron cascade enabled                     1
PIXE atomic de-excitation enabled                  0
De-excitation module ignores cuts                  0
Type of PIXE cross section for hadrons             Empirical
Type of PIXE cross section for e+-                 Livermore
=======================================================================

### ===  Deexcitation model UAtomDeexcitation is activated for 1 region:
          DefaultRegionForTheWorld  1  1  0
### ===  Auger flag: 1
### ===  Ignore cuts flag:   0

phot:  for gamma SubType=12 BuildTable=0
      LambdaPrime table from 200 keV to 100 TeV in 61 bins 
      ===== EM models for the G4Region  DefaultRegionForTheWorld ======
 LivermorePhElectric : Emin=    0 eV  Emax=  100 TeV  SauterGavrila Fluo

compt:  for gamma SubType=13 BuildTable=1
      Lambda table from 100 eV  to 1 MeV, 7 bins/decade, spline: 1
      LambdaPrime table from 1 MeV to 100 TeV in 56 bins 
      ===== EM models for the G4Region  DefaultRegionForTheWorld ======
       Klein-Nishina : Emin=    0 eV  Emax=  100 TeV

conv:  for gamma SubType=14 BuildTable=1
      Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1
      ===== EM models for the G4Region  DefaultRegionForTheWorld ======
     BetheHeitlerLPM : Emin=    0 eV  Emax=  100 TeV  ModifiedTsai

Rayl:  for gamma SubType=11 BuildTable=1
      Lambda table from 100 eV  to 100 keV, 7 bins/decade, spline: 0
      LambdaPrime table from 100 keV to 100 TeV in 63 bins 
      ===== EM models for the G4Region  DefaultRegionForTheWorld ======
   LivermoreRayleigh : Emin=    0 eV  Emax=  100 TeV  CullenGenerator

msc:  for e-  SubType= 10
      ===== EM models for the G4Region  DefaultRegionForTheWorld ======
            UrbanMsc : Emin=    0 eV  Emax=  100 MeV Nbins=42 100 eV  - 100 MeV
          StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm
        WentzelVIUni : Emin=  100 MeV Emax=  100 TeV Nbins=42 100 MeV - 100 TeV
          StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm

-------- EEEE ------- G4Exception-START -------- EEEE -------
*** G4Exception : glob03
      issued by : G4PhysicsLogVector::G4PhysicsLogVector()
G4PhysicsLogVector with wrong parameters: theNbin= 2 Emin= 1e+08 Emax= 1e+08Nbins should be > 1 and Emax > Emin > 0

*** Fatal Exception *** core dump ***
 **** Track information is not available at this moment
 **** Step information is not available at this moment

-------- EEEE -------- G4Exception-END --------- EEEE -------


*** G4Exception: Aborting execution ***

Can anyone tell me what could be the problem? How can I know the problem?

Hi, it means you have some overlaps in your geometry. These errors MUST be corrected.

Susanna

I saw the above errors, It definitely checks for overlaps and it says OK!

sorry, I misread :slight_smile:
which version of Geant4 do you use? which physics list do you use?

cheers
Susanna

Ok. I solved the problem. It was basically happening because I was registering physics processes in wrong way. I was using G4VUserPhysicsList, I needed to use G4VModularPhysicsList class. It was issue related to preinit.

@guatelli, by the way, can you please tell me why constructProcess() function in physlicslist.cc file in rdecay02 does not use AddTransportation() method? I read geant4 documentation, it says it is mendatory method.

I thought that the G4VModularPhysicsList base class took care of AddTransportation itself, so that user-developed physics lists don’t have to worry about it.

as usual, thanks mkelsey!!!

Dear

The same errors came across, how can i solve it?
The PhysicsList is following:

void MOFPhysics::ConstructProcess() {
    // 1. Set Verbose
	if(verboseLevel > 1) {
		G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
	}

	// 2. Set is MOF
	G4bool is_MOF = false;
	const G4Material *MOF_mat = m_detector->GetMOFMaterial();
	G4String MOF_mat_name = MOF_mat->GetName();

	if (MOF_mat_name == "MOF808") is_MOF = true;

    const auto myParticleIterator = GetParticleIterator();
	myParticleIterator->reset();
	while( (*myParticleIterator)()) {
		G4ParticleDefinition* particle = myParticleIterator->value();
		G4ProcessManager* process_manager = particle->GetProcessManager();
        G4String particleName = particle->GetParticleName();
		G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
		/*******************************************************************************
         * 2. Processes for the World Region (G4_WATER)
		 * ******************************************************************************/
		if(particleName == "e-") {
			// (1) DNA elastic is active in the world
			auto *theDNAElasticProcess = new G4DNAElastic{"e-_G4DNAElastic"};
			theDNAElasticProcess->SetEmModel(new G4DNAELSEPAElasticModel());
			ph->RegisterProcess(theDNAElasticProcess, particle);
			//
			// (2) DNA ionisation is active in the world
			auto *theDNAIonisationProcess = new G4DNAIonisation("e-_G4DNAIonisation");
			theDNAIonisationProcess->SetEmModel(new G4DNABornIonisationModel());
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			//
			// (3) DNA excitation is active in the world
			auto *theDNAExcitationProcess = new G4DNAExcitation{"e-_G4DNAExcitation"};
			theDNAExcitationProcess->SetEmModel(new G4DNABornExcitationModel());
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			//
			// (4)  DNA vib. excitation is active in the world
			auto* dnavib = new G4DNAVibExcitation{"e-_G4DNAVibExcitation"};
			dnavib->SetEmModel(new G4DNASancheExcitationModel());
			ph->RegisterProcess(dnavib, particle);

			// (5)  DNA attachment is active in the world
			auto dnaatt = new G4DNAAttachment{"e-_G4DNAAttachment"};
			dnaatt->SetEmModel(new G4DNAMeltonAttachmentModel());
			ph->RegisterProcess(dnaatt, particle);
			//
			// (6) Solvation is active in the world
			auto* solvation = new G4DNAElectronSolvation{"e-_G4DNAElectronSolvation"};
			auto therm = G4DNASolvationModelFactory::GetMacroDefinedModel();
			therm->SetHighEnergyLimit(10.* eV); // limit of the ELSEPA model
			solvation->SetEmModel(therm);
			 ph->RegisterProcess(solvation, particle);

			if (is_MOF) {
				// (7) STANDARD ss is not active in the world
				auto *ss = new G4CoulombScattering{};
				ss->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(ss, particle);
				//(8) STANDARD ionisation is not active in the world, 1 keV above
				auto* eIoni = new G4eIonisation {};
				eIoni->SetStepFunction(0.2, 100*um);
				eIoni->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(eIoni, particle);
				// (9) STANDARD bremsstrahlung is not active in the world
				auto* brem = new G4eBremsstrahlung {};
				brem->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(brem, particle);
			}

            process_manager->AddProcess(new G4StepLimiter, -1, -1, 3);
		} else if(particleName == "e+") {
            G4CoulombScattering* ss = new G4CoulombScattering();
            ph->RegisterProcess(ss, particle);

			G4eIonisation* eIoni = new G4eIonisation();
			ph->RegisterProcess(eIoni, particle);

			ph->RegisterProcess(new G4eBremsstrahlung(), particle);
			ph->RegisterProcess(new G4eplusAnnihilation(), particle);
		} else if(particleName == "gamma") {
			// Photoelectric
			G4PhotoElectricEffect* pe = new G4PhotoElectricEffect();
			G4VEmModel* theLivermorePEModel = new G4LivermorePhotoElectricModel();
			pe->SetEmModel(theLivermorePEModel,1);
			ph->RegisterProcess(pe, particle);
			// Compton scattering
			G4ComptonScattering* cs = new G4ComptonScattering;
            cs->SetEmModel(new G4KleinNishinaModel(), 1);
            G4VEmModel *theLowEPComptonModel = new G4LowEPComptonModel();
            theLowEPComptonModel->SetHighEnergyLimit(20 * MeV);
            cs->AddEmModel(0, theLowEPComptonModel);
			ph->RegisterProcess(cs, particle);
			// Gamma conversion
			G4GammaConversion* gc = new G4GammaConversion();
            G4VEmModel *thePenelopeGCModel = new G4PenelopeGammaConversionModel();
            thePenelopeGCModel->SetHighEnergyLimit(1 * GeV);
            gc->SetEmModel(thePenelopeGCModel, 1);
			ph->RegisterProcess(gc, particle);
			// Rayleigh scattering
            ph->RegisterProcess(new G4RayleighScattering(), particle);
		} else if(particleName == "GenericIon") {
			// (1) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation{"GenericIon_G4DNAIonisation"};
			ph->RegisterProcess(theDNAIonisationProcess, particle);

			if (is_MOF) {
				// (2) STANDARD ss is not active in the world
				G4CoulombScattering* ss = new G4CoulombScattering();
				ss->SetEmModel(new G4DummyModel());
				//ss->SetEmModel(new G4IonCoulombScatteringModel());
				ph->RegisterProcess(ss, particle);

				// (3) STANDARD ionisation is not active in the world
				G4ionIonisation* ionIoni = new G4ionIonisation();
				ionIoni->SetStepFunction(0.1, 0.02 * mm);
				ionIoni->SetEmModel(new G4DummyModel());
				// ionIoni->SetEmModel(new G4IonParametrisedLossModel());
				ph->RegisterProcess(ionIoni, particle);

				// (5)  Nuclear Stopping is active in the world
				G4NuclearStopping* pnuc = new G4NuclearStopping();
				G4double nielEnergyLimit = G4EmParameters::Instance()->MaxNIELEnergy();
				pnuc->SetMaxKinEnergy(nielEnergyLimit);
				ph->RegisterProcess(pnuc, particle);
			}

			
			process_manager->AddProcess(new G4StepLimiter, -1, -1, 3);
		} else if(particleName == "proton") {
			// (1) DNA Elastic is active in the world
			G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("proton_G4DNAElastic");
			ph->RegisterProcess(theDNAElasticProcess, particle);
			
			// (2) DNA Excitation is active in the world
			G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("proton_G4DNAExcitation");
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			
			// (3) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("proton_G4DNAIonisation");
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			
            // (4) DNA Charge Decrease is active in the world
            G4DNAChargeDecrease* theDNAChargeDecreaseProcess = new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
            theDNAChargeDecreaseProcess->SetEmModel(new G4DNADingfelderChargeDecreaseModel());
            ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);

			if (is_MOF) {
				// (5) STANDARD ionisation is not active in the world
				G4hIonisation* hion = new G4hIonisation();
				hion->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(hion, particle);

				// (6)  STANDARD Coulomb scattering is not active in the world
				G4CoulombScattering* pcou = new G4CoulombScattering();
				pcou->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(pcou, particle);
			}

			
			/*
			// (7) STANDARD bremsstrahlung is not active in the world 
			G4hBremsstrahlung* hBrem = new G4hBremsstrahlung();
			hBrem->SetEmModel(new G4DummyModel());
			ph->RegisterProcess(hBrem, particle);
			
			// (8) STANDRD Pair Production is not active in the world 
			G4hPairProduction* hPair = new G4hPairProduction();
			hPair->SetEmModel(new G4DummyModel());
			ph->RegisterProcess(hPair, particle);
			*/
            process_manager->AddProcess(new G4StepLimiter, -1, -1, 3);
		
		} else if(particleName == "alpha") {
			// (1) DNA Elastic is active in the world
			G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("alpha_G4DNAElastic");
			ph->RegisterProcess(theDNAElasticProcess, particle);
			
			// (2) DNA Excitation is active in the world
			G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("alpha_G4DNAExcitation");
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			
			// (3) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("alpha_G4DNAIonisation");
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			
			// (4) DNA Charge Decrease is active in the world
			G4DNAChargeDecrease *cd = new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
			ph->RegisterProcess(cd, particle);


			if (is_MOF) {
				// (5) STANDARD ionisation is not active in the world
				G4ionIonisation* aion = new G4ionIonisation();
				aion->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(aion, particle);

				// (6)  STANDARD Coulomb scattering is not active in the world
				G4CoulombScattering* ecs = new G4CoulombScattering();
				ecs->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(ecs, particle);
				// (7) Nuclear Stopping is not active in the world
				G4NuclearStopping* pnuc = new G4NuclearStopping();
				pnuc->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(pnuc, particle);
			}

            process_manager->AddProcess(new G4StepLimiter, -1,-1,3);
		} else if(particleName == "alpha+") {
			// (1) DNA Elastic is active in the world
			G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("alpha+_G4DNAElastic");
			ph->RegisterProcess(theDNAElasticProcess, particle);
			
			// (2) DNA Excitation is active in the world
			G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("alpha+_G4DNAExcitation");
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			
			// (3) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("alpha+_G4DNAIonisation");
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			
			// (4) DNA Charge Decrease is active in the world
            G4DNAChargeIncrease *ci = new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
            ph->RegisterProcess(ci, particle);

			if (is_MOF) {
				// (5) STANDARD ionisation is not active in the world
				G4ionIonisation* aion = new G4ionIonisation();
				aion->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(aion, particle);

				// (6)  STANDARD msc is not active in the world
				G4hMultipleScattering* msc = new G4hMultipleScattering();
				msc->SetEmModel(new G4DummyModel());
				ph->RegisterProcess(msc, particle);
			}

		} else if(particleName == "helium") {
			// (1) DNA Elastic is active in the world
			G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("helium_G4DNAElastic");
			ph->RegisterProcess(theDNAElasticProcess, particle);
			
			// (2) DNA Excitation is active in the world
			G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("helium_G4DNAExcitation");
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			
			// (3) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("helium_G4DNAIonisation");
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			
			// (4) DNA Charge Decrease is active in the world
            G4DNAChargeIncrease *ci = new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
            ph->RegisterProcess(ci, particle);
		} else if(particleName == "hydrogen") {
			// (1) DNA Elastic is active in the world
			G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("hydrogen_G4DNAElastic");
			ph->RegisterProcess(theDNAElasticProcess, particle);
			
			// (2) DNA Excitation is active in the world
			G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("hydrogen_G4DNAExcitation");
			ph->RegisterProcess(theDNAExcitationProcess, particle);
			
			// (3) DNA Ionisation is active in the world
			G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("hydrogen_G4DNAIonisation");
			ph->RegisterProcess(theDNAIonisationProcess, particle);
			
			// (4) DNA Charge Decrease is active in the world
            G4DNAChargeIncrease *ci = new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
            ph->RegisterProcess(ci, particle);
		}
		
	}
	
	/*******************************************************************************************************************
     * 3. Define processes for the MOF Region (MOF808)
	 *  TIP: gamma,e+ is the same; hydrogen and helium only for G4_WATER
	 * ****************************************************************************************************************/
	if (is_MOF) {
		G4EmConfigurator* em_config = G4LossTableManager::Instance()->EmConfigurator();
		G4VEmModel* mod;
		G4double massFactor = 1.0079/4.0026;
		// 2.1 e- process for the MOF Region
		// (1) msc process is active in MOF region
	    // mod = new G4eSingleCoulombScatteringModel();
		mod = new G4DNAELSEPAElasticModel();
		mod->SetActivationLowEnergyLimit(1 * GeV);
		em_config->SetExtraEmModel("e-", "msc", mod, "MOF");

	    mod = new G4eSingleCoulombScatteringModel();
	    em_config->SetExtraEmModel("e-", "CoulombScat", mod, "MOF", 0., 100 * MeV);

		// (2) Ionisation process is active in MOF Region
		mod = new G4PenelopeIonisationModel();
	    em_config->SetExtraEmModel("e-", "eIon", mod, "MOF", 0., 10 * TeV, new G4UniversalFluctuation());

		// (3) Bremsstrahlung
		mod = new G4SeltzerBergerModel();
	    em_config->SetExtraEmModel("e-", "eBrem", mod, "MOF", 0., 1.0 * GeV, new G4UniversalFluctuation());

		// 2.2 proton process for the MOF Region
	    mod =  new G4hCoulombScatteringModel();
		em_config->SetExtraEmModel("proton","CoulombScat",mod,"MOF", 0, 100*TeV);

		mod = new G4BraggModel();
		em_config->SetExtraEmModel("proton","hIoni", mod,"MOF",0.0,2*MeV, new G4IonFluctuations());
		mod = new G4BetheBlochModel();
		em_config->SetExtraEmModel("proton","hIoni", mod,"MOF",2*MeV,100*TeV, new G4UniversalFluctuation());

		// 2.3 GenericIon

		// mod = new G4IonParametrisedLossModel();
		// em_config->SetExtraEmModel("GenericIon", "GenericIon_Ioni", mod, "MOF");

		// mod = new G4IonCoulombScatteringModel();
	 //    em_config->SetExtraEmModel("GenericIon", "GenericIon_msc", mod, "MOF", 28. * eV, 100. * keV);

		// 2.4 alpha
		mod =  new G4UrbanMscModel();
		mod->SetActivationLowEnergyLimit(1.*MeV);
		em_config->SetExtraEmModel("alpha","msc",mod,"MOF", 0, 100*TeV);

	    mod = new G4IonParametrisedLossModel();
	    em_config->SetExtraEmModel("alpha", "alpha_Ioni", mod, "MOF");

		// 2.5 alpha+
		mod =  new G4UrbanMscModel();
		mod->SetActivationLowEnergyLimit(1.*MeV);
		em_config->SetExtraEmModel("alpha+","msc",mod,"MOF", 0, 100*TeV);

		mod = new G4BraggIonModel();
		mod->SetActivationLowEnergyLimit(9.9 * MeV);
		em_config->SetExtraEmModel("alpha+","ionIoni", mod,"MOF",0.0,2*MeV/massFactor, new G4IonFluctuations());

		mod = new G4BetheBlochModel();
		mod->SetActivationLowEnergyLimit(9.9 * MeV);
		em_config->SetExtraEmModel("alpha+","ionIoni", mod,"MOF",2*MeV/massFactor,100*TeV, new G4UniversalFluctuation());
	}

}

The error is

-------- EEEE ------- G4Exception-START -------- EEEE -------
*** G4Exception : glob03
      issued by : G4PhysicsLogVector::G4PhysicsLogVector()
G4PhysicsLogVector with wrong parameters: theNbin= 2 Emin= 100 Emax= 100Nbins should be > 1 and Emax > Emin > 0

Your error is likely from setting a lower energy threshold of zero in some (or many) processes. And you have many calls setting such lower bounds.

Examples:

em_config->SetExtraEmModel(“proton”,“hIoni”, mod,“MOF”,0.0,2*MeV, new G4IonFluctuations());

or

em_config->SetExtraEmModel(“e-”, “eIon”, mod, “MOF”, 0., 10 * TeV, new G4UniversalFluctuation())

Etc.

This physics list is doing a lot of lifting based on the particle type when you could just load general physics list as in rdecay02. There are even physics lists for DNA. Most physics models already handle different energy regimes in different ways as a compromise between speed and accuracy. I don’t know what you are gaining from doing this except introducing more possible points of failure.