LCPhys is a Geant4 physics list written by Dennis Wright for ILC physics.
Overview
LCPhys Source Code Documentation (doxygen)
LCPhys contains the following classes.
- LCPhysicsList - physics list definition; subclass of G4VModularPhysicsList
- LCDecayPhysics - particle decays
- LCBosonPhysics - gammas and geantinos
- LCLeptonPhysics - leptons
- LCHadronPhysics - hadron physics
- LCIonPhysics - ion physics
Particle Decays
Applies G4Decay process to all applicable particles.
Bosons
- geantino
- gamma
- gamma nuclear low
- 0 to 3.5 GeV
- gamma nuclear high (refer to LCBosonPhysics.cc for more details)
- 3.0 GeV to 100.0 TeV
- G4TheoFSGenerator - high energy gamma model
- G4GeneratorPrecompoundInterface - high energy gamma transport
- G4QGSModel - string model
- G4QGSMFragmentation - string fragmentation model (template)
- G4ExcitedStringDecay - concrete fragmentation model
- gamma conversion
- compton scattering
- photoelectric effect
- gamma nuclear low
Leptons
- electron
- multiple scattering
- electron ionisation
- electron bremsstrahlung
- electro-nuclear reaction
- positron
- multiple scattering
- electron ionisation
- electron bremsstrahlung
- electron-positron annihilation
- electro-nuclear reaction
- mu-
- multiple scattering
- muon ionisation
- muon bremsstrahlung
- muon pair production
- mu+
- multiple scattering
- muon ionisation
- muon bremsstrahlung
- muon pair production
- tau-
- multiple scattering
- ionisation
- tau+
- multiple scattering
- ionisation
- nueutrino_e
- antineutrino_e
- neutrino_mu
- antineutrino_mu
- neutrino_tau
- antineutrino_tau
Hadron Physics
// Construct all mesons
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
// Construct all baryons
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct resonaces and quarks
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
}
void LCHadronPhysics::ConstructProcess()
{
// Hadronic Elastic Process and Model (the same for all hadrons)
G4HadronElasticProcess* elasticProcess = new G4HadronElasticProcess();
G4LElastic* elasticModel = new G4LElastic();
elasticProcess->RegisterMe(elasticModel);
// Hadronic inelastic models
// Bertini cascade model: use between 0 and 9.9 GeV
// for p,n,pi+,pi-
G4CascadeInterface* bertiniModel = new G4CascadeInterface();
bertiniModel->SetMaxEnergy(9.9*GeV);
// Bertini cascade model: use between 0 and 13 GeV for
// K+,K-,K0L,K0S,Lambda,Sigma+,Sigma-,Xi0,Xi-
G4CascadeInterface* bertiniModelStrange = new G4CascadeInterface();
bertiniModelStrange->SetMaxEnergy(13*GeV);
// Low energy parameterized models : use between 9.5 and 25 GeV
G4double LEPUpperLimit = 25*GeV;
G4double LEPLowerLimitForHyperons = 12*GeV;
G4double LEPpnpiLimit = 9.5*GeV;
// Quark-Gluon String Model: use for p,n,pi+,pi-,K+,K-,K0L,K0S
// between 12 GeV and 100 TeV
G4TheoFSGenerator* QGSPModel = new G4TheoFSGenerator();
G4GeneratorPrecompoundInterface* theCascade =
new G4GeneratorPrecompoundInterface();
G4ExcitationHandler* exHandler = new G4ExcitationHandler();
G4PreCompoundModel* preCompound = new G4PreCompoundModel(exHandler);
theCascade->SetDeExcitation(preCompound);
QGSPModel->SetTransport(theCascade);
G4QGSMFragmentation* frag = new G4QGSMFragmentation();
G4ExcitedStringDecay* stringDecay = new G4ExcitedStringDecay(frag);
G4QGSModel<G4QGSParticipants>* stringModel =
new G4QGSModel<G4QGSParticipants>();
stringModel->SetFragmentationModel(stringDecay);
QGSPModel->SetHighEnergyGenerator(stringModel);
QGSPModel->SetMinEnergy(12*GeV);
QGSPModel->SetMaxEnergy(100*TeV);
//
G4ProcessManager * pManager = 0;
///////////////////
// //
// pi+ physics //
// //
///////////////////
pManager = G4PionPlus::PionPlus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4PionPlusInelasticProcess* pipinelProc = new G4PionPlusInelasticProcess();
G4PiNuclearCrossSection* pion_XC = new G4PiNuclearCrossSection();
pipinelProc->AddDataSet(pion_XC);
pipinelProc->RegisterMe(bertiniModel);
G4LEPionPlusInelastic* LEPpipModel = new G4LEPionPlusInelastic();
LEPpipModel->SetMinEnergy(LEPpnpiLimit);
LEPpipModel->SetMaxEnergy(LEPUpperLimit);
pipinelProc->RegisterMe(LEPpipModel);
pipinelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(pipinelProc);
///////////////////
// //
// pi- physics //
// //
///////////////////
pManager = G4PionMinus::PionMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4PionMinusInelasticProcess* piminelProc = new G4PionMinusInelasticProcess();
piminelProc->AddDataSet(pion_XC);
piminelProc->RegisterMe(bertiniModel);
G4LEPionMinusInelastic* LEPpimModel = new G4LEPionMinusInelastic();
LEPpimModel->SetMinEnergy(LEPpnpiLimit);
LEPpimModel->SetMaxEnergy(LEPUpperLimit);
piminelProc->RegisterMe(LEPpimModel);
piminelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(piminelProc);
// pi- absorption at rest
G4PionMinusAbsorptionAtRest* pimAbsorb = new G4PionMinusAbsorptionAtRest();
pManager->AddRestProcess(pimAbsorb);
///////////////////
// //
// K+ physics //
// //
///////////////////
pManager = G4KaonPlus::KaonPlus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4KaonPlusInelasticProcess* kpinelProc = new G4KaonPlusInelasticProcess();
kpinelProc->RegisterMe(bertiniModelStrange);
kpinelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(kpinelProc);
///////////////////
// //
// K- physics //
// //
///////////////////
pManager = G4KaonMinus::KaonMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4KaonMinusInelasticProcess* kminelProc = new G4KaonMinusInelasticProcess();
kminelProc->RegisterMe(bertiniModelStrange);
kminelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(kminelProc);
// K- absorption at rest
G4KaonMinusAbsorption* kmAbsorb = new G4KaonMinusAbsorption();
pManager->AddRestProcess(kmAbsorb);
///////////////////
// //
// K0L physics //
// //
///////////////////
pManager = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4KaonZeroLInelasticProcess* k0LinelProc = new G4KaonZeroLInelasticProcess();
k0LinelProc->RegisterMe(bertiniModelStrange);
k0LinelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(k0LinelProc);
///////////////////
// //
// K0S physics //
// //
///////////////////
pManager = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4KaonZeroSInelasticProcess* k0SinelProc = new G4KaonZeroSInelasticProcess();
k0SinelProc->RegisterMe(bertiniModelStrange);
k0SinelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(k0SinelProc);
///////////////////
// //
// Proton //
// //
///////////////////
pManager = G4Proton::Proton()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4ProtonInelasticProcess* pinelProc = new G4ProtonInelasticProcess();
G4ProtonInelasticCrossSection* proton_XC =
new G4ProtonInelasticCrossSection();
pinelProc->AddDataSet(proton_XC);
pinelProc->RegisterMe(bertiniModel);
G4LEProtonInelastic* LEPpModel = new G4LEProtonInelastic();
LEPpModel->SetMinEnergy(LEPpnpiLimit);
LEPpModel->SetMaxEnergy(LEPUpperLimit);
pinelProc->RegisterMe(LEPpModel);
pinelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(pinelProc);
///////////////////
// //
// Anti-Proton //
// //
///////////////////
pManager = G4AntiProton::AntiProton()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiProtonInelasticProcess* apinelProc =
new G4AntiProtonInelasticProcess();
G4LEAntiProtonInelastic* LEPapModel = new G4LEAntiProtonInelastic();
apinelProc->RegisterMe(LEPapModel);
G4HEAntiProtonInelastic* HEPapModel = new G4HEAntiProtonInelastic();
apinelProc->RegisterMe(HEPapModel);
pManager->AddDiscreteProcess(apinelProc);
// anti-proton annihilation at rest
G4AntiProtonAnnihilationAtRest* apAnnihil =
new G4AntiProtonAnnihilationAtRest();
pManager->AddRestProcess(apAnnihil);
///////////////////
// //
// Neutron //
// //
///////////////////
pManager = G4Neutron::Neutron()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4NeutronInelasticProcess* ninelProc = new G4NeutronInelasticProcess();
G4NeutronInelasticCrossSection* neutron_XC =
new G4NeutronInelasticCrossSection();
ninelProc->AddDataSet(neutron_XC);
ninelProc->RegisterMe(bertiniModel);
G4LENeutronInelastic* LEPnModel = new G4LENeutronInelastic();
LEPnModel->SetMinEnergy(LEPpnpiLimit);
LEPnModel->SetMaxEnergy(LEPUpperLimit);
ninelProc->RegisterMe(LEPnModel);
ninelProc->RegisterMe(QGSPModel);
pManager->AddDiscreteProcess(ninelProc);
// neutron-induced fission
G4HadronFissionProcess* neutronFission = new G4HadronFissionProcess();
G4LFission* neutronFissionModel = new G4LFission();
neutronFissionModel->SetMinEnergy(0.);
neutronFissionModel->SetMaxEnergy(20*TeV);
neutronFission->RegisterMe(neutronFissionModel);
pManager->AddDiscreteProcess(neutronFission);
// neutron capture
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
G4LCapture* neutronCaptureModel = new G4LCapture();
neutronCaptureModel->SetMinEnergy(0.);
neutronCaptureModel->SetMaxEnergy(20*TeV);
neutronCapture->RegisterMe(neutronCaptureModel);
pManager->AddDiscreteProcess(neutronCapture);
///////////////////
// //
// Anti-Neutron //
// //
///////////////////
pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiNeutronInelasticProcess* aninelProc =
new G4AntiNeutronInelasticProcess();
G4LEAntiNeutronInelastic* LEPanModel = new G4LEAntiNeutronInelastic();
aninelProc->RegisterMe(LEPanModel);
G4HEAntiNeutronInelastic* HEPanModel = new G4HEAntiNeutronInelastic();
aninelProc->RegisterMe(HEPanModel);
pManager->AddDiscreteProcess(aninelProc);
// anti-neutron annihilation at rest
G4AntiNeutronAnnihilationAtRest* anAnnihil =
new G4AntiNeutronAnnihilationAtRest();
pManager->AddRestProcess(anAnnihil);
///////////////////
// //
// Lambda //
// //
///////////////////
pManager = G4Lambda::Lambda()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4LambdaInelasticProcess* linelProc =
new G4LambdaInelasticProcess();
linelProc->RegisterMe(bertiniModelStrange);
G4LELambdaInelastic* LEPlModel = new G4LELambdaInelastic();
LEPlModel->SetMinEnergy(LEPLowerLimitForHyperons);
linelProc->RegisterMe(LEPlModel);
G4HELambdaInelastic* HEPlModel = new G4HELambdaInelastic();
linelProc->RegisterMe(HEPlModel);
pManager->AddDiscreteProcess(linelProc);
///////////////////
// //
// Anti-Lambda //
// //
///////////////////
pManager = G4AntiLambda::AntiLambda()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiLambdaInelasticProcess* alinelProc =
new G4AntiLambdaInelasticProcess();
G4LEAntiLambdaInelastic* LEPalModel = new G4LEAntiLambdaInelastic();
alinelProc->RegisterMe(LEPalModel);
G4HEAntiLambdaInelastic* HEPalModel = new G4HEAntiLambdaInelastic();
alinelProc->RegisterMe(HEPalModel);
pManager->AddDiscreteProcess(alinelProc);
///////////////////
// //
// Sigma- //
// //
///////////////////
pManager = G4SigmaMinus::SigmaMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4SigmaMinusInelasticProcess* sminelProc =
new G4SigmaMinusInelasticProcess();
sminelProc->RegisterMe(bertiniModelStrange);
G4LESigmaMinusInelastic* LEPsmModel = new G4LESigmaMinusInelastic();
LEPsmModel->SetMinEnergy(LEPLowerLimitForHyperons);
sminelProc->RegisterMe(LEPsmModel);
G4HESigmaMinusInelastic* HEPsmModel = new G4HESigmaMinusInelastic();
sminelProc->RegisterMe(HEPsmModel);
pManager->AddDiscreteProcess(sminelProc);
///////////////////
// //
// Anti-Sigma- //
// //
///////////////////
pManager = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiSigmaMinusInelasticProcess* asminelProc =
new G4AntiSigmaMinusInelasticProcess();
G4LEAntiSigmaMinusInelastic* LEPasmModel =
new G4LEAntiSigmaMinusInelastic();
asminelProc->RegisterMe(LEPasmModel);
G4HEAntiSigmaMinusInelastic* HEPasmModel =
new G4HEAntiSigmaMinusInelastic();
asminelProc->RegisterMe(HEPasmModel);
pManager->AddDiscreteProcess(asminelProc);
///////////////////
// //
// Sigma+ //
// //
///////////////////
pManager = G4SigmaPlus::SigmaPlus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4SigmaPlusInelasticProcess* spinelProc = new G4SigmaPlusInelasticProcess();
spinelProc->RegisterMe(bertiniModelStrange);
G4LESigmaPlusInelastic* LEPspModel = new G4LESigmaPlusInelastic();
LEPspModel->SetMinEnergy(LEPLowerLimitForHyperons);
spinelProc->RegisterMe(LEPspModel);
G4HESigmaPlusInelastic* HEPspModel = new G4HESigmaPlusInelastic();
spinelProc->RegisterMe(HEPspModel);
pManager->AddDiscreteProcess(spinelProc);
///////////////////
// //
// Anti-Sigma+ //
// //
///////////////////
pManager = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiSigmaPlusInelasticProcess* aspinelProc =
new G4AntiSigmaPlusInelasticProcess();
G4LEAntiSigmaPlusInelastic* LEPaspModel =
new G4LEAntiSigmaPlusInelastic();
aspinelProc->RegisterMe(LEPaspModel);
G4HEAntiSigmaPlusInelastic* HEPaspModel =
new G4HEAntiSigmaPlusInelastic();
aspinelProc->RegisterMe(HEPaspModel);
pManager->AddDiscreteProcess(aspinelProc);
///////////////////
// //
// Xi- //
// //
///////////////////
pManager = G4XiMinus::XiMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4XiMinusInelasticProcess* xminelProc = new G4XiMinusInelasticProcess();
xminelProc->RegisterMe(bertiniModelStrange);
G4LEXiMinusInelastic* LEPxmModel = new G4LEXiMinusInelastic();
LEPxmModel->SetMinEnergy(LEPLowerLimitForHyperons);
xminelProc->RegisterMe(LEPxmModel);
G4HEXiMinusInelastic* HEPxmModel = new G4HEXiMinusInelastic();
xminelProc->RegisterMe(HEPxmModel);
pManager->AddDiscreteProcess(xminelProc);
///////////////////
// //
// Anti-Xi- //
// //
///////////////////
pManager = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiXiMinusInelasticProcess* axminelProc =
new G4AntiXiMinusInelasticProcess();
G4LEAntiXiMinusInelastic* LEPaxmModel = new G4LEAntiXiMinusInelastic();
axminelProc->RegisterMe(LEPaxmModel);
G4HEAntiXiMinusInelastic* HEPaxmModel = new G4HEAntiXiMinusInelastic();
axminelProc->RegisterMe(HEPaxmModel);
pManager->AddDiscreteProcess(axminelProc);
///////////////////
// //
// Xi0 //
// //
///////////////////
pManager = G4XiZero::XiZero()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4XiZeroInelasticProcess* x0inelProc = new G4XiZeroInelasticProcess();
x0inelProc->RegisterMe(bertiniModelStrange);
G4LEXiZeroInelastic* LEPx0Model = new G4LEXiZeroInelastic();
LEPx0Model->SetMinEnergy(LEPLowerLimitForHyperons);
x0inelProc->RegisterMe(LEPx0Model);
G4HEXiZeroInelastic* HEPx0Model = new G4HEXiZeroInelastic();
x0inelProc->RegisterMe(HEPx0Model);
pManager->AddDiscreteProcess(x0inelProc);
///////////////////
// //
// Anti-Xi0 //
// //
///////////////////
pManager = G4AntiXiZero::AntiXiZero()->GetProcessManager();
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiXiZeroInelasticProcess* ax0inelProc =
new G4AntiXiZeroInelasticProcess();
G4LEAntiXiZeroInelastic* LEPax0Model = new G4LEAntiXiZeroInelastic();
ax0inelProc->RegisterMe(LEPax0Model);
G4HEAntiXiZeroInelastic* HEPax0Model = new G4HEAntiXiZeroInelastic();
ax0inelProc->RegisterMe(HEPax0Model);
pManager->AddDiscreteProcess(ax0inelProc);
///////////////////
// //
// Omega- //
// //
///////////////////
pManager = G4OmegaMinus::OmegaMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4OmegaMinusInelasticProcess* ominelProc =
new G4OmegaMinusInelasticProcess();
G4LEOmegaMinusInelastic* LEPomModel = new G4LEOmegaMinusInelastic();
ominelProc->RegisterMe(LEPomModel);
G4HEOmegaMinusInelastic* HEPomModel = new G4HEOmegaMinusInelastic();
ominelProc->RegisterMe(HEPomModel);
pManager->AddDiscreteProcess(ominelProc);
///////////////////
// //
// Anti-Omega- //
// //
///////////////////
pManager = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AntiOmegaMinusInelasticProcess* aominelProc =
new G4AntiOmegaMinusInelasticProcess();
G4LEAntiOmegaMinusInelastic* LEPaomModel =
new G4LEAntiOmegaMinusInelastic();
aominelProc->RegisterMe(LEPaomModel);
G4HEAntiOmegaMinusInelastic* HEPaomModel =
new G4HEAntiOmegaMinusInelastic();
aominelProc->RegisterMe(HEPaomModel);
pManager->AddDiscreteProcess(aominelProc);
Ion Physics
// Construct light ions (d, t, 3He, alpha, and generic ion)
G4IonConstructor ionConstruct;
ionConstruct.ConstructParticle();
}
void LCIonPhysics::ConstructProcess()
{
// Hadronic Elastic Process and Model (for all ions except generic ion)
G4HadronElasticProcess* elasticProcess = new G4HadronElasticProcess();
G4LElastic* elasticModel = new G4LElastic();
elasticProcess->RegisterMe(elasticModel);
// Hadronic inelastic models
G4ProcessManager * pManager = 0;
///////////////////
// //
// Deuteron //
// //
///////////////////
pManager = G4Deuteron::Deuteron()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4DeuteronInelasticProcess* dinelProc = new G4DeuteronInelasticProcess();
G4LEDeuteronInelastic* LEPdModel = new G4LEDeuteronInelastic();
dinelProc->RegisterMe(LEPdModel);
pManager->AddDiscreteProcess(dinelProc);
///////////////////
// //
// Triton //
// //
///////////////////
pManager = G4Triton::Triton()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4hIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4TritonInelasticProcess* tinelProc = new G4TritonInelasticProcess();
G4LETritonInelastic* LEPtModel = new G4LETritonInelastic();
tinelProc->RegisterMe(LEPtModel);
pManager->AddDiscreteProcess(tinelProc);
///////////////////
// //
// 3He //
// //
///////////////////
pManager = G4He3::He3()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4ionIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// NO INELASTIC PROCESS AVAILABLE FOR 3HE
///////////////////
// //
// Alpha //
// //
///////////////////
pManager = G4Alpha::Alpha()->GetProcessManager();
// EM processes
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4ionIonisation(), -1, 2, 2);
// hadron elastic
pManager->AddDiscreteProcess(elasticProcess);
// hadron inelastic
G4AlphaInelasticProcess* ainelProc = new G4AlphaInelasticProcess();
G4LEAlphaInelastic* LEPaModel = new G4LEAlphaInelastic();
ainelProc->RegisterMe(LEPaModel);
pManager->AddDiscreteProcess(ainelProc);
///////////////////
// //
// generic ion //
// //
///////////////////
pManager = G4GenericIon::GenericIon()->GetProcessManager();
// Only EM processes for generic ion
pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1);
pManager->AddProcess(new G4ionIonisation(), -1, 2, 2);