I changed the target in examples/novice/N02 to C12, added G4NeutronHPElastic() to the physics list, constructed G4IonConstructor::ConstructParticle();, and fired 50 eV neutrons at the target. After almost 100 events I get the following Segmentation fault Segmentation fault ********************************************************************************************************* * G4Track Information: Particle = C12[0.0], Track ID = 2, Parent ID = 1 ********************************************************************************************************* G4ParticleChange::CheckIt : the global time goes back !! Difference: 109.17164[ns] G4ParticleChange::CheckIt : the proper time goes back !! Difference: 109.17164[ns] G4ParticleChange::CheckIt ----------------------------------------------- G4ParticleChange Information ----------------------------------------------- # of 2ndaries : 0 ----------------------------------------------- Energy Deposit (MeV): 0 Track Status : Alive True Path Length (mm) : 0 Stepping Control : 0 Mass (GeV) : 0 Charge (eplus) : 0 Position - x (mm) : 0 Position - y (mm) : 0 Position - z (mm) : -969 Time (ns) : 1.64e+03 Proper Time (ns) : -109 Momentum Direct - x : -0.585 Momentum Direct - y : 0.504 Momentum Direct - z : 0.635 Kinetic Energy (MeV): 5.22e-06 Polarization - x : 0 Polarization - y : 0 Polarization - z : 0 Track Weight : 0 Touchable (pointer) : 0x82df2d8 *** G4Exception : 200 issued by : G4ParticleChange::CheckIt momentum, energy, and/or time was illegal *** Event Must Be Aborted Segmentation fault Any idea where my mistake is? Tony Below is the physicslist code after many changes #include "globals.hh" #include "BetheBlochPhysicsList.hh" #include "G4ProcessManager.hh" #include "G4ParticleTypes.hh" #include "G4IonConstructor.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... BetheBlochPhysicsList::BetheBlochPhysicsList(): G4VUserPhysicsList() { defaultCutValue = 1.0*cm; SetVerboseLevel(1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... BetheBlochPhysicsList::~BetheBlochPhysicsList() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructParticle() { // In this method, static member functions should be called // for all particles which you want to use. // This ensures that objects of these particle types will be // created in the program. ConstructBosons(); ConstructLeptons(); ConstructMesons(); ConstructBaryons(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructBosons() { // pseudo-particles G4Geantino::GeantinoDefinition(); G4ChargedGeantino::ChargedGeantinoDefinition(); // gamma G4Gamma::GammaDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructLeptons() { // leptons // e+/- G4Electron::ElectronDefinition(); G4Positron::PositronDefinition(); // mu+/- G4MuonPlus::MuonPlusDefinition(); G4MuonMinus::MuonMinusDefinition(); // nu_e G4NeutrinoE::NeutrinoEDefinition(); G4AntiNeutrinoE::AntiNeutrinoEDefinition(); // nu_mu G4NeutrinoMu::NeutrinoMuDefinition(); G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructMesons() { // mesons // light mesons G4PionPlus::PionPlusDefinition(); G4PionMinus::PionMinusDefinition(); G4PionZero::PionZeroDefinition(); G4Eta::EtaDefinition(); G4EtaPrime::EtaPrimeDefinition(); G4KaonPlus::KaonPlusDefinition(); G4KaonMinus::KaonMinusDefinition(); G4KaonZero::KaonZeroDefinition(); G4AntiKaonZero::AntiKaonZeroDefinition(); G4KaonZeroLong::KaonZeroLongDefinition(); G4KaonZeroShort::KaonZeroShortDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructBaryons() { // barions G4Proton::ProtonDefinition(); G4AntiProton::AntiProtonDefinition(); G4Neutron::NeutronDefinition(); G4AntiNeutron::AntiNeutronDefinition(); G4IonConstructor ion; ion.ConstructParticle(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructProcess() { AddTransportation(); ConstructEM(); ConstructGeneral(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4ComptonScattering.hh" #include "G4GammaConversion.hh" #include "G4PhotoElectricEffect.hh" #include "G4LowEnergyPhotoElectric.hh" #include "G4LowEnergyCompton.hh" #include "G4LowEnergyGammaConversion.hh" #include "G4PenelopeIonisation.hh" #include "G4MultipleScattering.hh" #include "G4eIonisation.hh" #include "G4eBremsstrahlung.hh" #include "G4eplusAnnihilation.hh" #include "G4MuIonisation.hh" #include "G4MuBremsstrahlung.hh" #include "G4MuPairProduction.hh" #include "G4hIonisation.hh" #include "G4ionIonisation.hh" // hadron elastic scattering processes // this include file defines the class G4HadronElasticProcess #include "G4NeutronHPorLElastic.hh" //#include "G4ElasticHadrNucleusHE.hh" /* for high energy elestic scattering */ // Neutron elastic scattering processes //#include "G4LElastic.hh" //#include "G4NeutronHPElastic.hh" #include "G4StepLimiter.hh" #include "G4UserSpecialCuts.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void BetheBlochPhysicsList::ConstructEM() { theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { // gamma // pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); //pmanager->AddDiscreteProcess(new G4LowEnergyPhotoElectric); pmanager->AddDiscreteProcess(new G4ComptonScattering); // pmanager->AddDiscreteProcess(new G4LowEnergyCompton); //pmanager->AddDiscreteProcess(new G4GammaConversion); //pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion); // pmanager->AddDiscrete(new G4PenelopeIonisation); // pmanager->AddDiscrete(new G4LowEnergyRayleigh()); } else if (particleName == "e-") { //electron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); } else if (particleName == "neutron") { //neutron // available neutron elastic scattering models //G4LElastic* elasticModel = new G4LElastic(); //G4NeutronHPElastic* elasticModel = new G4NeutronHPElastic(); G4NeutronHPorLElastic* elasticModel = new G4NeutronHPorLElastic(); // define process to handle elastic scattering G4HadronElasticProcess* hadElastProc = new G4HadronElasticProcess(); // register the model you are using for eleastic scatterin hadElastProc->RegisterMe(elasticModel); // add the elastic scattering process to the process manager pmanager->AddDiscreteProcess(hadElastProc); pmanager->AddProcess(new G4StepLimiter, -1,-1,3); } else if (particleName == "e+") { //positron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); } else if( particleName == "mu+" || particleName == "mu-" ) { //muon pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4MuIonisation, -1, 2,2); pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3,3); pmanager->AddProcess(new G4MuPairProduction, -1, 4,4); } else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0) && (particle->GetParticleName() != "chargedgeantino")) { //all others charged particles except geantino //pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); //pmanager->AddProcess(new G4hIonisation, -1, 2,2); //step limit // pmanager->AddProcess(new G4StepLimiter, -1,-1,1); pmanager->AddProcess(new G4StepLimiter, 1,1,1); ///pmanager->AddProcess(new G4UserSpecialCuts, -1,-1,4); } } }
It is rather difficult to debug a large physics list, in which many changes have been made. Could you please try to reproduce your problem with a ready- made physics list for the release that you utilising ? Could you also please give some background regarding the application that you are using, so that we can offer advise better. Best regards, John Apostolakis.
I think your problem is a misuse of physics list code and not identified bug. It will be more appropriate to post this under the physics lists or hadronics forum of hyper news. http://geant4-hn.slac.stanford.edu:5090/Geant4-HyperNews/index Best regards, Tatsumi Koi