Problem 915

Summary: tracking C12 crashes exampleN02 [modified]
Product: Examples/Basic and Novice Reporter: tforest
Component: N02Assignee: tkoi
Status: RESOLVED INVALID    
Severity: normal    
Priority: P2    
Version: 8.1   
Hardware: All   
OS: Other   

Description tforest 2006-11-30 13:30:46 CET
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);
    }
  }
}
Comment 1 John Apostolakis 2007-02-12 11:24:59 CET
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.
Comment 2 tkoi 2007-02-12 18:58:59 CET
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