Import Geant4 8.2.0 source tree
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
// ***********************
|
||||
//
|
||||
// $Id: RemSimDecay.cc,v 1.5 2006/06/29 16:23:35 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// ***************************
|
||||
//
|
||||
// $Id: RemSimDecorator.cc,v 1.6 2006/06/29 16:23:37 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// **************************************
|
||||
//
|
||||
// $Id: RemSimDetectorConstruction.cc,v 1.17 2006/06/29 16:23:39 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimDetectorMessenger.cc,v 1.13 2006/06/29 16:23:41 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimElectronEEDL.cc,v 1.6 2006/06/29 16:23:43 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author: Susanna Guatelli, guatelloi@ge.infn.it
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimEventAction.cc,v 1.9 2006/06/29 16:23:45 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author : Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -29,10 +29,12 @@
|
||||
// * *
|
||||
// **************************************
|
||||
//
|
||||
// $Id: RemSimHadronicBertini.cc,v 1.4 2006/06/29 16:23:47 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// $Id: RemSimHadronicBertini.cc,v 1.5 2006/11/15 18:39:30 guatelli Exp $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author : Susanna Guatelli, guatelli@ge.infn.it
|
||||
|
||||
// Code review: MGP, 7 November 2006 (to be completed)
|
||||
//
|
||||
#include "RemSimHadronicBertini.hh"
|
||||
#include "G4BinaryLightIonReaction.hh"
|
||||
@@ -40,17 +42,10 @@
|
||||
#include "G4IonsShenCrossSection.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4ProcessVector.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ParticleTable.hh"
|
||||
#include "G4Material.hh"
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4ProtonInelasticCrossSection.hh"
|
||||
#include "G4NeutronInelasticCrossSection.hh"
|
||||
#include "G4PiNuclearCrossSection.hh"
|
||||
#include "G4LElastic.hh"
|
||||
#include "G4CascadeInterface.hh"
|
||||
//#include "G4PreCompoundModel.hh"
|
||||
//#include "G4QGSModel.hh"
|
||||
#include "G4LEProtonInelastic.hh"
|
||||
#include "G4LENeutronInelastic.hh"
|
||||
#include "G4LEPionPlusInelastic.hh"
|
||||
@@ -58,54 +53,11 @@
|
||||
#include "G4LEAlphaInelastic.hh"
|
||||
#include "G4LFission.hh"
|
||||
#include "G4LCapture.hh"
|
||||
#include "G4TheoFSGenerator.hh"
|
||||
#include "G4GeneratorPrecompoundInterface.hh"
|
||||
#include "G4ExcitationHandler.hh"
|
||||
#include "G4PreCompoundModel.hh"
|
||||
#include "G4QGSMFragmentation.hh"
|
||||
#include "G4ExcitedStringDecay.hh"
|
||||
|
||||
RemSimHadronicBertini::RemSimHadronicBertini(const G4String& name):
|
||||
G4VPhysicsConstructor(name)
|
||||
{
|
||||
// Hadronic cross sections
|
||||
|
||||
proton_XC = new G4ProtonInelasticCrossSection();
|
||||
neutron_XC = new G4NeutronInelasticCrossSection();
|
||||
pion_XC = new G4PiNuclearCrossSection();
|
||||
|
||||
// Hadronic cross sections for alpha particles
|
||||
tripathi = new G4TripathiCrossSection();
|
||||
shen = new G4IonsShenCrossSection();
|
||||
|
||||
// Hadronic models
|
||||
|
||||
elastic_model = new G4LElastic();
|
||||
bertini_model = new G4CascadeInterface();
|
||||
binary_ion_model = new G4BinaryLightIonReaction();
|
||||
|
||||
LEP_proton_model = new G4LEProtonInelastic();
|
||||
LEP_neutron_model = new G4LENeutronInelastic();
|
||||
LEP_pip_model = new G4LEPionPlusInelastic();
|
||||
LEP_pim_model = new G4LEPionMinusInelastic();
|
||||
LEP_alpha_model = new G4LEAlphaInelastic();
|
||||
nfission_model = new G4LFission();
|
||||
ncapture_model = new G4LCapture();
|
||||
|
||||
QGSP_model = new G4TheoFSGenerator();
|
||||
theCascade = new G4GeneratorPrecompoundInterface();
|
||||
thePreEquilib = new G4PreCompoundModel(&theHandler);
|
||||
theCascade -> SetDeExcitation(thePreEquilib);
|
||||
QGSP_model -> SetTransport(theCascade);
|
||||
theFragmentation = new G4QGSMFragmentation();
|
||||
theStringDecay = new G4ExcitedStringDecay(theFragmentation);
|
||||
theStringModel.SetFragmentationModel(theStringDecay);
|
||||
QGSP_model -> SetHighEnergyGenerator(&theStringModel);
|
||||
|
||||
}
|
||||
RemSimHadronicBertini::~RemSimHadronicBertini()
|
||||
{}
|
||||
|
||||
//#include "G4TheoFSGenerator.hh"
|
||||
//#include "G4GeneratorPrecompoundInterface.hh"
|
||||
//#include "G4PreCompoundModel.hh"
|
||||
//#include "G4QGSMFragmentation.hh"
|
||||
//#include "G4ExcitedStringDecay.hh"
|
||||
#include "G4HadronElasticProcess.hh"
|
||||
#include "G4HadronFissionProcess.hh"
|
||||
#include "G4HadronCaptureProcess.hh"
|
||||
@@ -114,159 +66,216 @@ RemSimHadronicBertini::~RemSimHadronicBertini()
|
||||
#include "G4PionPlusInelasticProcess.hh"
|
||||
#include "G4PionMinusInelasticProcess.hh"
|
||||
#include "G4AlphaInelasticProcess.hh"
|
||||
#include "G4ExcitationHandler.hh"
|
||||
|
||||
//
|
||||
// BERTINI PHYSICS LIST
|
||||
//
|
||||
|
||||
RemSimHadronicBertini::RemSimHadronicBertini(const G4String& name):
|
||||
G4VPhysicsConstructor(name)
|
||||
{}
|
||||
|
||||
RemSimHadronicBertini::~RemSimHadronicBertini()
|
||||
{}
|
||||
|
||||
void RemSimHadronicBertini::ConstructProcess()
|
||||
{
|
||||
// Set model energy regions
|
||||
// 0 - 3.2 GeV: Bertini cascade model for p, n, pi+, pi-
|
||||
// Physics for proton, neutron, pion+ and pion-
|
||||
|
||||
// Elastic scattering: LElastic model
|
||||
G4LElastic* elasticModel = new G4LElastic();
|
||||
G4HadronElasticProcess* elasticScattering = new G4HadronElasticProcess();
|
||||
elasticScattering->RegisterMe(elasticModel);
|
||||
|
||||
bertini_model -> SetMaxEnergy(3.2*GeV);
|
||||
// Inelastic scattering: Bertini model up to 3.2 GeV
|
||||
G4CascadeInterface* bertiniModel = new G4CascadeInterface();
|
||||
// Energy limit of the Bertini model
|
||||
G4double bertiniHighEnergyLimit = 3.2 * GeV;
|
||||
bertiniModel->SetMaxEnergy(bertiniHighEnergyLimit);
|
||||
|
||||
// 80 MeV - 20 GeV for light ions
|
||||
// Inelastic scattering: LEP model between 2.8 * GeV and 25. * GeV
|
||||
G4LEProtonInelastic* LEPProtonModel = new G4LEProtonInelastic();
|
||||
G4LENeutronInelastic* LEPNeutronModel = new G4LENeutronInelastic();
|
||||
G4LEPionPlusInelastic* LEPPionPlusModel = new G4LEPionPlusInelastic();
|
||||
G4LEPionMinusInelastic* LEPPionMinusModel = new G4LEPionMinusInelastic();
|
||||
// Set the energy limits
|
||||
G4double LEPLowEnergyLimit = 2.8 * GeV;
|
||||
G4double LEPHighEnergyLimit = 25. * GeV;
|
||||
LEPProtonModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPProtonModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
LEPNeutronModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPNeutronModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
LEPPionPlusModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPPionPlusModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
LEPPionMinusModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPPionMinusModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
|
||||
binary_ion_model -> SetMinEnergy(80*MeV);
|
||||
binary_ion_model -> SetMaxEnergy(110.*GeV);
|
||||
|
||||
// 2.8 - 25 GeV: LEP models for p, n, pi+, pi-
|
||||
// Inelastic scattering: QGSP model between 20 GeV and 100 TeV
|
||||
QGSPModel = new G4TheoFSGenerator();
|
||||
// Set the energy limits
|
||||
G4double QGSPLowEnergyLimit = 20.* GeV;
|
||||
G4double QGSPHighEnergyLimit = 100.* GeV;
|
||||
QGSPModel->SetMinEnergy(QGSPLowEnergyLimit);
|
||||
QGSPModel->SetMaxEnergy(QGSPHighEnergyLimit);
|
||||
|
||||
LEP_proton_model -> SetMinEnergy(2.8*GeV);
|
||||
LEP_proton_model -> SetMaxEnergy(25*GeV);
|
||||
LEP_neutron_model -> SetMinEnergy(2.8*GeV);
|
||||
LEP_neutron_model -> SetMaxEnergy(25*GeV);
|
||||
LEP_pip_model -> SetMinEnergy(2.8*GeV);
|
||||
LEP_pip_model -> SetMaxEnergy(25*GeV);
|
||||
LEP_pim_model -> SetMinEnergy(2.8*GeV);
|
||||
LEP_pim_model -> SetMaxEnergy(25*GeV);
|
||||
nfission_model -> SetMinEnergy(0*TeV);
|
||||
nfission_model -> SetMaxEnergy(100*TeV);
|
||||
ncapture_model -> SetMinEnergy(0*TeV);
|
||||
ncapture_model -> SetMaxEnergy(100*TeV);
|
||||
theCascade = new G4GeneratorPrecompoundInterface();
|
||||
|
||||
// Up to 100 MeV for alphas
|
||||
LEP_alpha_model -> SetMaxEnergy(100.*MeV);
|
||||
thePreEquilib = new G4PreCompoundModel(&theHandler);
|
||||
theCascade->SetDeExcitation(thePreEquilib);
|
||||
QGSPModel->SetTransport(theCascade);
|
||||
|
||||
// 20 GeV - 100 TeV: QGSP model for p, n, pi+, pi-
|
||||
|
||||
QGSP_model -> SetMinEnergy(20*GeV);
|
||||
QGSP_model -> SetMaxEnergy(100*TeV);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to proton *
|
||||
// ******************************************
|
||||
// Set the fragmentation
|
||||
theFragmentation = new G4QGSMFragmentation();
|
||||
theStringDecay = new G4ExcitedStringDecay(theFragmentation);
|
||||
theStringModel.SetFragmentationModel(theStringDecay);
|
||||
QGSPModel->SetHighEnergyGenerator(&theStringModel);
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// Proton processes
|
||||
G4ParticleDefinition* proton = G4Proton::ProtonDefinition();
|
||||
G4ProcessManager* protMan = proton -> GetProcessManager();
|
||||
G4ProcessManager* protonProcessManager = proton->GetProcessManager();
|
||||
|
||||
// Proton inelastic scattering
|
||||
G4ProtonInelasticProcess* protonInelasticProcess = new G4ProtonInelasticProcess();
|
||||
// Activate the cross-sections for proton nuclear scattering up to 20 GeV
|
||||
//G4ProtonInelasticCrossSection protonCrossSection;
|
||||
protonInelasticProcess->AddDataSet(&protonCrossSection);
|
||||
// Set the models
|
||||
protonInelasticProcess->RegisterMe(bertiniModel);
|
||||
protonInelasticProcess->RegisterMe(LEPProtonModel);
|
||||
|
||||
protonInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
protonProcessManager->AddDiscreteProcess(protonInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
protonProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* protelProc = new G4HadronElasticProcess();
|
||||
protelProc -> RegisterMe(elastic_model);
|
||||
protMan -> AddDiscreteProcess(protelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4ProtonInelasticProcess* protinelProc = new G4ProtonInelasticProcess();
|
||||
protinelProc -> AddDataSet(proton_XC);
|
||||
protinelProc -> RegisterMe(bertini_model);
|
||||
protinelProc -> RegisterMe(LEP_proton_model);
|
||||
protinelProc -> RegisterMe(QGSP_model);
|
||||
protMan -> AddDiscreteProcess(protinelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to neutron *
|
||||
// ******************************************
|
||||
//------------------------------------------------------
|
||||
// Pion Plus processes
|
||||
G4ParticleDefinition* piPlus = G4PionPlus::PionPlusDefinition();
|
||||
G4ProcessManager* pionPlusProcessManager = piPlus->GetProcessManager();
|
||||
|
||||
// Define the inelastic scattering for pion plus
|
||||
G4PionPlusInelasticProcess* pionPlusInelasticProcess = new G4PionPlusInelasticProcess();
|
||||
// Set the cross section
|
||||
// G4PiNuclearCrossSection pionCrossSection;
|
||||
pionPlusInelasticProcess->AddDataSet(&pionCrossSection);
|
||||
// Register the models
|
||||
pionPlusInelasticProcess->RegisterMe(bertiniModel);
|
||||
pionPlusInelasticProcess->RegisterMe(LEPPionPlusModel);
|
||||
pionPlusInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
pionPlusProcessManager->AddDiscreteProcess(pionPlusInelasticProcess);
|
||||
// Activate the elastic process
|
||||
pionPlusProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Pion Minus processes
|
||||
G4ParticleDefinition* piMinus = G4PionMinus::PionMinusDefinition();
|
||||
G4ProcessManager* pionMinusProcessManager = piMinus->GetProcessManager();
|
||||
|
||||
// Define the inelastic processes for pion minus
|
||||
G4PionMinusInelasticProcess* pionMinusInelasticProcess = new G4PionMinusInelasticProcess();
|
||||
// Set the cross section
|
||||
pionMinusInelasticProcess->AddDataSet(&pionCrossSection);
|
||||
// Register the models
|
||||
pionMinusInelasticProcess->RegisterMe(bertiniModel);
|
||||
pionMinusInelasticProcess->RegisterMe(LEPPionMinusModel);
|
||||
pionMinusInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
pionMinusProcessManager->AddDiscreteProcess(pionMinusInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
pionMinusProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
//-----------------------------------------------------
|
||||
// Neutron processes
|
||||
G4ParticleDefinition* neutron = G4Neutron::NeutronDefinition();
|
||||
G4ProcessManager* neutMan = neutron->GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* neutelProc = new G4HadronElasticProcess();
|
||||
neutelProc -> RegisterMe(elastic_model);
|
||||
neutMan -> AddDiscreteProcess(neutelProc);
|
||||
G4ProcessManager* neutronProcessManager = neutron->GetProcessManager();
|
||||
|
||||
// Inelastic process
|
||||
G4NeutronInelasticProcess* neutronInelasticProcess = new G4NeutronInelasticProcess();
|
||||
// Set the cross section
|
||||
//G4NeutronInelasticCrossSection neutronCrossSection;
|
||||
neutronInelasticProcess->AddDataSet(&neutronCrossSection);
|
||||
// Set the models
|
||||
neutronInelasticProcess->RegisterMe(bertiniModel);
|
||||
neutronInelasticProcess->RegisterMe(LEPNeutronModel);
|
||||
neutronInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the neutron inelastic scattering
|
||||
neutronProcessManager->AddDiscreteProcess(neutronInelasticProcess);
|
||||
// Activate the neutron elastic scattering
|
||||
neutronProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
G4NeutronInelasticProcess* neutinelProc = new G4NeutronInelasticProcess();
|
||||
neutinelProc -> AddDataSet(neutron_XC);
|
||||
neutinelProc -> RegisterMe(bertini_model);
|
||||
neutinelProc -> RegisterMe(LEP_neutron_model);
|
||||
neutinelProc -> RegisterMe(QGSP_model);
|
||||
neutMan -> AddDiscreteProcess(neutinelProc);
|
||||
// Neutron capture process
|
||||
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
|
||||
// Final state production model for capture of neutral hadrons in nuclei
|
||||
G4LCapture* captureModel = new G4LCapture();
|
||||
// Set the energy range for the capture model
|
||||
G4double neutronLowEnergyLimit = 0. * MeV;
|
||||
G4double neutronHighEnergyLimit = 100. * TeV;
|
||||
captureModel->SetMinEnergy(neutronLowEnergyLimit);
|
||||
captureModel->SetMaxEnergy(neutronHighEnergyLimit);
|
||||
// Activate the neutron capture model
|
||||
neutronCapture->RegisterMe(captureModel);
|
||||
// Activate the neutron capture process
|
||||
neutronProcessManager->AddDiscreteProcess(neutronCapture);
|
||||
|
||||
G4HadronCaptureProcess* neutcapProc = new G4HadronCaptureProcess();
|
||||
neutcapProc -> RegisterMe(ncapture_model);
|
||||
neutMan -> AddDiscreteProcess(neutcapProc);
|
||||
|
||||
G4HadronFissionProcess* neutfisProc = new G4HadronFissionProcess();
|
||||
neutfisProc -> RegisterMe(nfission_model);
|
||||
neutMan -> AddDiscreteProcess(neutfisProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to pi+ *
|
||||
// ******************************************
|
||||
|
||||
G4ParticleDefinition* piplus = G4PionPlus::PionPlusDefinition();
|
||||
G4ProcessManager* pipMan = piplus -> GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* pipelProc = new G4HadronElasticProcess();
|
||||
pipelProc -> RegisterMe(elastic_model);
|
||||
pipMan -> AddDiscreteProcess(pipelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4PionPlusInelasticProcess* pipinelProc = new G4PionPlusInelasticProcess();
|
||||
pipinelProc -> AddDataSet(pion_XC);
|
||||
pipinelProc -> RegisterMe(bertini_model);
|
||||
pipinelProc -> RegisterMe(LEP_pip_model);
|
||||
pipinelProc -> RegisterMe(QGSP_model);
|
||||
pipMan -> AddDiscreteProcess(pipinelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to pi- *
|
||||
// ******************************************
|
||||
|
||||
G4ParticleDefinition* piminus = G4PionMinus::PionMinusDefinition();
|
||||
G4ProcessManager* pimMan = piminus -> GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* pimelProc = new G4HadronElasticProcess();
|
||||
pimelProc -> RegisterMe(elastic_model);
|
||||
pimMan -> AddDiscreteProcess(pimelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4PionMinusInelasticProcess* piminelProc = new G4PionMinusInelasticProcess();
|
||||
piminelProc -> AddDataSet(pion_XC);
|
||||
piminelProc -> RegisterMe(bertini_model);
|
||||
piminelProc -> RegisterMe(LEP_pim_model);
|
||||
piminelProc -> RegisterMe(QGSP_model);
|
||||
pimMan -> AddDiscreteProcess(piminelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to alpha *
|
||||
// ******************************************
|
||||
// Process for induced fission
|
||||
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
|
||||
//Final state production model for induced fission
|
||||
G4LFission* fissionModel = new G4LFission();
|
||||
// Set the energy range for the fission model
|
||||
fissionModel->SetMinEnergy(neutronLowEnergyLimit);
|
||||
fissionModel->SetMaxEnergy(neutronHighEnergyLimit);
|
||||
// Register the fission model
|
||||
fission->RegisterMe(fissionModel);
|
||||
// Activate the fission process
|
||||
neutronProcessManager->AddDiscreteProcess(fission);
|
||||
|
||||
//--------------------------------------------------------
|
||||
// Physics for alpha particles
|
||||
|
||||
G4ParticleDefinition* alpha = G4Alpha::AlphaDefinition();
|
||||
G4ProcessManager* alfMan = alpha -> GetProcessManager();
|
||||
G4ProcessManager* alphaProcessManager = alpha->GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
// Cross section data sets
|
||||
|
||||
// TRIPATHI CROSS SECTION
|
||||
// Implementation of formulas taken from NASA technical paper 3621 by
|
||||
// Tripathi, et al. Cross-sections for ion ion scattering
|
||||
G4TripathiCrossSection* tripathi = new G4TripathiCrossSection();
|
||||
|
||||
G4HadronElasticProcess* alfelProc = new G4HadronElasticProcess();
|
||||
alfelProc -> RegisterMe(elastic_model);
|
||||
alfMan -> AddDiscreteProcess(alfelProc);
|
||||
// IONS SHEN CROSS SECTION
|
||||
// Implementation of formulas
|
||||
// Shen et al. Nuc. Phys. A 491 130 (1989)
|
||||
// Total Reaction Cross Section for Heavy-Ion Collisions
|
||||
G4IonsShenCrossSection* shen = new G4IonsShenCrossSection();
|
||||
|
||||
// Inelastic process
|
||||
G4LEAlphaInelastic* LEPAlphaModel = new G4LEAlphaInelastic();
|
||||
// Energy limit of the LEP model for alpha particles
|
||||
G4double LEPAlphaHighLimit = 100 * MeV;
|
||||
LEPAlphaModel->SetMaxEnergy(LEPAlphaHighLimit);
|
||||
|
||||
G4AlphaInelasticProcess* alfinelProc = new G4AlphaInelasticProcess();
|
||||
alfinelProc -> AddDataSet(tripathi);
|
||||
alfinelProc -> AddDataSet(shen);
|
||||
alfinelProc -> RegisterMe(LEP_alpha_model);
|
||||
alfinelProc -> RegisterMe(binary_ion_model);
|
||||
alfMan -> AddDiscreteProcess(alfinelProc);
|
||||
G4BinaryLightIonReaction* binaryIonModel = new G4BinaryLightIonReaction();
|
||||
// Energy limit of the binary ion model
|
||||
G4double binaryIonLowLimit = 80. * MeV;
|
||||
G4double binaryIonHighLimit = 40. * GeV;
|
||||
binaryIonModel->SetMinEnergy(binaryIonLowLimit);
|
||||
binaryIonModel->SetMaxEnergy(binaryIonHighLimit);
|
||||
|
||||
// Define the alpha inelastic scattering
|
||||
G4AlphaInelasticProcess* alphaInelasticProcess = new G4AlphaInelasticProcess();
|
||||
// Activate the Tripathi and Shen Cross Section
|
||||
alphaInelasticProcess->AddDataSet(tripathi);
|
||||
alphaInelasticProcess->AddDataSet(shen);
|
||||
// Set the models
|
||||
alphaInelasticProcess->RegisterMe(LEPAlphaModel);
|
||||
alphaInelasticProcess->RegisterMe(binaryIonModel);
|
||||
// Activate the inelastic scattering
|
||||
alphaProcessManager->AddDiscreteProcess(alphaInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
alphaProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -25,14 +25,16 @@
|
||||
//
|
||||
// **************************************
|
||||
// * *
|
||||
// * RemSimHadronicPhysics.cc *
|
||||
// * RemSimHadronicBinary.cc *
|
||||
// * *
|
||||
// **************************************
|
||||
//
|
||||
// $Id: RemSimHadronicBinary.cc,v 1.6 2006/06/29 16:23:49 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// $Id: RemSimHadronicBinary.cc,v 1.7 2006/11/15 18:39:30 guatelli Exp $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author : Susanna Guatelli, guatelli@ge.infn.it
|
||||
|
||||
// Code review: MGP, 7 November 2006 (to be completed)
|
||||
//
|
||||
#include "RemSimHadronicBinary.hh"
|
||||
#include "G4BinaryLightIonReaction.hh"
|
||||
@@ -40,17 +42,9 @@
|
||||
#include "G4IonsShenCrossSection.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4ProcessVector.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ParticleTable.hh"
|
||||
#include "G4Material.hh"
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4ProtonInelasticCrossSection.hh"
|
||||
#include "G4NeutronInelasticCrossSection.hh"
|
||||
#include "G4PiNuclearCrossSection.hh"
|
||||
#include "G4LElastic.hh"
|
||||
#include "G4CascadeInterface.hh"
|
||||
//#include "G4CascadeInterface.hh"
|
||||
//#include "G4PreCompoundModel.hh"
|
||||
#include "G4LEProtonInelastic.hh"
|
||||
#include "G4LENeutronInelastic.hh"
|
||||
#include "G4LEPionPlusInelastic.hh"
|
||||
@@ -58,60 +52,6 @@
|
||||
#include "G4LEAlphaInelastic.hh"
|
||||
#include "G4LFission.hh"
|
||||
#include "G4LCapture.hh"
|
||||
#include "G4TheoFSGenerator.hh"
|
||||
#include "G4GeneratorPrecompoundInterface.hh"
|
||||
#include "G4ExcitationHandler.hh"
|
||||
#include "G4PreCompoundModel.hh"
|
||||
#include "G4QGSMFragmentation.hh"
|
||||
#include "G4ExcitedStringDecay.hh"
|
||||
#include "G4BinaryCascade.hh"
|
||||
#include "G4PiMinusAbsorptionAtRest.hh"
|
||||
|
||||
RemSimHadronicBinary::RemSimHadronicBinary(const G4String& name):
|
||||
G4VPhysicsConstructor(name)
|
||||
{
|
||||
// Hadronic cross sections
|
||||
|
||||
proton_XC = new G4ProtonInelasticCrossSection();
|
||||
neutron_XC = new G4NeutronInelasticCrossSection();
|
||||
pion_XC = new G4PiNuclearCrossSection();
|
||||
|
||||
// Hadronic cross sections for alpha particles
|
||||
tripathi = new G4TripathiCrossSection();
|
||||
shen = new G4IonsShenCrossSection();
|
||||
|
||||
// Hadronic models
|
||||
|
||||
elastic_model = new G4LElastic();
|
||||
|
||||
binarycascade_model = new G4BinaryCascade();
|
||||
//bertini_model = new G4CascadeInterface();
|
||||
|
||||
binary_ion_model = new G4BinaryLightIonReaction();
|
||||
|
||||
LEP_proton_model = new G4LEProtonInelastic();
|
||||
LEP_neutron_model = new G4LENeutronInelastic();
|
||||
LEP_pip_model = new G4LEPionPlusInelastic();
|
||||
LEP_pim_model = new G4LEPionMinusInelastic();
|
||||
LEP_alpha_model = new G4LEAlphaInelastic();
|
||||
nfission_model = new G4LFission();
|
||||
ncapture_model = new G4LCapture();
|
||||
|
||||
QGSP_model = new G4TheoFSGenerator();
|
||||
theCascade = new G4GeneratorPrecompoundInterface();
|
||||
|
||||
thePreEquilib = new G4PreCompoundModel(&theHandler);
|
||||
theCascade -> SetDeExcitation(thePreEquilib);
|
||||
QGSP_model -> SetTransport(theCascade);
|
||||
theFragmentation = new G4QGSMFragmentation();
|
||||
theStringDecay = new G4ExcitedStringDecay(theFragmentation);
|
||||
theStringModel.SetFragmentationModel(theStringDecay);
|
||||
QGSP_model -> SetHighEnergyGenerator(&theStringModel);
|
||||
|
||||
}
|
||||
RemSimHadronicBinary::~RemSimHadronicBinary()
|
||||
{}
|
||||
|
||||
#include "G4HadronElasticProcess.hh"
|
||||
#include "G4HadronFissionProcess.hh"
|
||||
#include "G4HadronCaptureProcess.hh"
|
||||
@@ -120,158 +60,218 @@ RemSimHadronicBinary::~RemSimHadronicBinary()
|
||||
#include "G4PionPlusInelasticProcess.hh"
|
||||
#include "G4PionMinusInelasticProcess.hh"
|
||||
#include "G4AlphaInelasticProcess.hh"
|
||||
#include "G4BinaryCascade.hh"
|
||||
|
||||
//
|
||||
// BINARY PHYSICS LIST
|
||||
//
|
||||
|
||||
RemSimHadronicBinary::RemSimHadronicBinary(const G4String& name):
|
||||
G4VPhysicsConstructor(name)
|
||||
{}
|
||||
|
||||
RemSimHadronicBinary::~RemSimHadronicBinary()
|
||||
{}
|
||||
|
||||
void RemSimHadronicBinary::ConstructProcess()
|
||||
{
|
||||
// 0- 10. GeV: binary cascade for p, n
|
||||
// Physics for proton, neutron, pion+ and pion-
|
||||
|
||||
// Elastic scattering: LElastic model
|
||||
G4LElastic* elasticModel = new G4LElastic();
|
||||
G4HadronElasticProcess* elasticScattering = new G4HadronElasticProcess();
|
||||
elasticScattering->RegisterMe(elasticModel);
|
||||
|
||||
binarycascade_model -> SetMaxEnergy(10.*GeV);
|
||||
// Inelastic scattering: Binary model up to 10. GeV
|
||||
G4BinaryCascade* binaryModel = new G4BinaryCascade();
|
||||
// Energy limit of the Binary model
|
||||
G4double binaryHighEnergyLimit = 10. * GeV;
|
||||
binaryModel->SetMaxEnergy(binaryHighEnergyLimit);
|
||||
|
||||
// 80 MeV - 20 GeV for light ions
|
||||
// Inelastic scattering: LEP model between 8. * GeV and 25. * GeV
|
||||
G4LEProtonInelastic* LEPProtonModel = new G4LEProtonInelastic();
|
||||
G4LENeutronInelastic* LEPNeutronModel = new G4LENeutronInelastic();
|
||||
G4LEPionPlusInelastic* LEPPionPlusModel = new G4LEPionPlusInelastic();
|
||||
G4LEPionMinusInelastic* LEPPionMinusModel = new G4LEPionMinusInelastic();
|
||||
// Set the energy limits
|
||||
G4double LEPLowEnergyLimit = 8. * GeV;
|
||||
G4double LEPHighEnergyLimit = 25. * GeV;
|
||||
LEPProtonModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPProtonModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
LEPNeutronModel->SetMinEnergy(LEPLowEnergyLimit);
|
||||
LEPNeutronModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
|
||||
binary_ion_model -> SetMinEnergy(80*MeV);
|
||||
binary_ion_model -> SetMaxEnergy(110.*GeV);
|
||||
// no intranuclear transport activated for pions
|
||||
// at this stage; further tests on Binary Cascade for pions needed
|
||||
|
||||
LEP_proton_model -> SetMinEnergy(8.*GeV);
|
||||
LEP_proton_model -> SetMaxEnergy(25*GeV);
|
||||
|
||||
LEP_neutron_model -> SetMinEnergy(8.*GeV);
|
||||
LEP_neutron_model -> SetMaxEnergy(25*GeV);
|
||||
|
||||
LEP_pip_model -> SetMinEnergy(0.*GeV);
|
||||
LEP_pip_model -> SetMaxEnergy(25*GeV);
|
||||
LEP_pim_model -> SetMinEnergy(0.*GeV);
|
||||
LEP_pim_model -> SetMaxEnergy(25*GeV);
|
||||
|
||||
nfission_model -> SetMinEnergy(0*TeV);
|
||||
nfission_model -> SetMaxEnergy(100*TeV);
|
||||
ncapture_model -> SetMinEnergy(0*TeV);
|
||||
ncapture_model -> SetMaxEnergy(100*TeV);
|
||||
G4double LEPPionLowEnergyLimit = 0. * MeV;
|
||||
LEPPionPlusModel->SetMinEnergy(LEPPionLowEnergyLimit);
|
||||
LEPPionPlusModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
LEPPionMinusModel->SetMinEnergy(LEPPionLowEnergyLimit);
|
||||
LEPPionMinusModel->SetMaxEnergy(LEPHighEnergyLimit);
|
||||
|
||||
// Up to 100 MeV for alphas
|
||||
LEP_alpha_model -> SetMaxEnergy(100.*MeV);
|
||||
// Inelastic scattering: QGSP model between 20 GeV and 100 TeV
|
||||
QGSPModel = new G4TheoFSGenerator();
|
||||
// Set the energy limits
|
||||
G4double QGSPLowEnergyLimit = 20.* GeV;
|
||||
G4double QGSPHighEnergyLimit = 100.* GeV;
|
||||
QGSPModel->SetMinEnergy(QGSPLowEnergyLimit);
|
||||
QGSPModel->SetMaxEnergy(QGSPHighEnergyLimit);
|
||||
|
||||
// 20 GeV - 100 TeV: QGSP model for p, n, pi+, pi-
|
||||
theCascade = new G4GeneratorPrecompoundInterface();
|
||||
thePreEquilib = new G4PreCompoundModel(&theHandler);
|
||||
theCascade->SetDeExcitation(thePreEquilib);
|
||||
QGSPModel->SetTransport(theCascade);
|
||||
|
||||
QGSP_model -> SetMinEnergy(20*GeV);
|
||||
QGSP_model -> SetMaxEnergy(100*TeV);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to proton *
|
||||
// ******************************************
|
||||
// Set the fragmentation
|
||||
theFragmentation = new G4QGSMFragmentation();
|
||||
theStringDecay = new G4ExcitedStringDecay(theFragmentation);
|
||||
theStringModel.SetFragmentationModel(theStringDecay);
|
||||
QGSPModel->SetHighEnergyGenerator(&theStringModel);
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// Proton processes
|
||||
G4ParticleDefinition* proton = G4Proton::ProtonDefinition();
|
||||
G4ProcessManager* protMan = proton -> GetProcessManager();
|
||||
G4ProcessManager* protonProcessManager = proton->GetProcessManager();
|
||||
|
||||
// Proton inelastic scattering
|
||||
G4ProtonInelasticProcess* protonInelasticProcess = new G4ProtonInelasticProcess();
|
||||
// Activate the cross-sections for proton nuclear scattering up to 20 GeV
|
||||
//G4ProtonInelasticCrossSection protonCrossSection;
|
||||
protonInelasticProcess->AddDataSet(&protonCrossSection);
|
||||
// Set the models
|
||||
protonInelasticProcess->RegisterMe(binaryModel);
|
||||
protonInelasticProcess->RegisterMe(LEPProtonModel);
|
||||
|
||||
protonInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
protonProcessManager->AddDiscreteProcess(protonInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
protonProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* protelProc = new G4HadronElasticProcess();
|
||||
protelProc -> RegisterMe(elastic_model);
|
||||
protMan -> AddDiscreteProcess(protelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4ProtonInelasticProcess* protinelProc = new G4ProtonInelasticProcess();
|
||||
protinelProc -> AddDataSet(proton_XC);
|
||||
protinelProc -> RegisterMe(binarycascade_model);
|
||||
protinelProc -> RegisterMe(LEP_proton_model);
|
||||
protinelProc -> RegisterMe(QGSP_model);
|
||||
protMan -> AddDiscreteProcess(protinelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to neutron *
|
||||
// ******************************************
|
||||
//------------------------------------------------------
|
||||
// Pion Plus processes
|
||||
G4ParticleDefinition* piPlus = G4PionPlus::PionPlusDefinition();
|
||||
G4ProcessManager* pionPlusProcessManager = piPlus->GetProcessManager();
|
||||
|
||||
// Define the inelastic scattering for pion plus
|
||||
G4PionPlusInelasticProcess* pionPlusInelasticProcess = new G4PionPlusInelasticProcess();
|
||||
// Set the cross section
|
||||
// G4PiNuclearCrossSection pionCrossSection;
|
||||
pionPlusInelasticProcess->AddDataSet(&pionCrossSection);
|
||||
// Register the models
|
||||
pionPlusInelasticProcess->RegisterMe(LEPPionPlusModel);
|
||||
pionPlusInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
pionPlusProcessManager->AddDiscreteProcess(pionPlusInelasticProcess);
|
||||
// Activate the elastic process
|
||||
pionPlusProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Pion Minus processes
|
||||
G4ParticleDefinition* piMinus = G4PionMinus::PionMinusDefinition();
|
||||
G4ProcessManager* pionMinusProcessManager = piMinus->GetProcessManager();
|
||||
|
||||
// Define the inelastic processes for pion minus
|
||||
G4PionMinusInelasticProcess* pionMinusInelasticProcess = new G4PionMinusInelasticProcess();
|
||||
// Set the cross section
|
||||
pionMinusInelasticProcess->AddDataSet(&pionCrossSection);
|
||||
// Register the models
|
||||
pionMinusInelasticProcess->RegisterMe(LEPPionMinusModel);
|
||||
pionMinusInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the inelastic scattering
|
||||
pionMinusProcessManager->AddDiscreteProcess(pionMinusInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
pionMinusProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
//-----------------------------------------------------
|
||||
// Neutron processes
|
||||
G4ParticleDefinition* neutron = G4Neutron::NeutronDefinition();
|
||||
G4ProcessManager* neutMan = neutron->GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* neutelProc = new G4HadronElasticProcess();
|
||||
neutelProc -> RegisterMe(elastic_model);
|
||||
neutMan -> AddDiscreteProcess(neutelProc);
|
||||
G4ProcessManager* neutronProcessManager = neutron->GetProcessManager();
|
||||
|
||||
// Inelastic process
|
||||
G4NeutronInelasticProcess* neutronInelasticProcess = new G4NeutronInelasticProcess();
|
||||
// Set the cross section
|
||||
//G4NeutronInelasticCrossSection neutronCrossSection;
|
||||
neutronInelasticProcess->AddDataSet(&neutronCrossSection);
|
||||
// Set the models
|
||||
neutronInelasticProcess->RegisterMe(binaryModel);
|
||||
neutronInelasticProcess->RegisterMe(LEPNeutronModel);
|
||||
neutronInelasticProcess->RegisterMe(QGSPModel);
|
||||
// Activate the neutron inelastic scattering
|
||||
neutronProcessManager->AddDiscreteProcess(neutronInelasticProcess);
|
||||
// Activate the neutron elastic scattering
|
||||
neutronProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
|
||||
G4NeutronInelasticProcess* neutinelProc = new G4NeutronInelasticProcess();
|
||||
neutinelProc -> AddDataSet(neutron_XC);
|
||||
neutinelProc -> RegisterMe(binarycascade_model);
|
||||
neutinelProc -> RegisterMe(LEP_neutron_model);
|
||||
neutinelProc -> RegisterMe(QGSP_model);
|
||||
neutMan -> AddDiscreteProcess(neutinelProc);
|
||||
// Neutron capture process
|
||||
G4HadronCaptureProcess* neutronCapture = new G4HadronCaptureProcess();
|
||||
// Final state production model for capture of neutral hadrons in nuclei
|
||||
G4LCapture* captureModel = new G4LCapture();
|
||||
// Set the energy range for the capture model
|
||||
G4double neutronLowEnergyLimit = 0. * MeV;
|
||||
G4double neutronHighEnergyLimit = 100. * TeV;
|
||||
captureModel->SetMinEnergy(neutronLowEnergyLimit);
|
||||
captureModel->SetMaxEnergy(neutronHighEnergyLimit);
|
||||
// Activate the neutron capture model
|
||||
neutronCapture->RegisterMe(captureModel);
|
||||
// Activate the neutron capture process
|
||||
neutronProcessManager->AddDiscreteProcess(neutronCapture);
|
||||
|
||||
G4HadronCaptureProcess* neutcapProc = new G4HadronCaptureProcess();
|
||||
neutcapProc -> RegisterMe(ncapture_model);
|
||||
neutMan -> AddDiscreteProcess(neutcapProc);
|
||||
|
||||
G4HadronFissionProcess* neutfisProc = new G4HadronFissionProcess();
|
||||
neutfisProc -> RegisterMe(nfission_model);
|
||||
neutMan -> AddDiscreteProcess(neutfisProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to pi+ *
|
||||
// ******************************************
|
||||
|
||||
G4ParticleDefinition* piplus = G4PionPlus::PionPlusDefinition();
|
||||
G4ProcessManager* pipMan = piplus -> GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* pipelProc = new G4HadronElasticProcess();
|
||||
pipelProc -> RegisterMe(elastic_model);
|
||||
pipMan -> AddDiscreteProcess(pipelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4PionPlusInelasticProcess* pipinelProc = new G4PionPlusInelasticProcess();
|
||||
pipinelProc -> AddDataSet(pion_XC);
|
||||
pipinelProc -> RegisterMe(LEP_pip_model);
|
||||
pipinelProc -> RegisterMe(QGSP_model);
|
||||
pipMan -> AddDiscreteProcess(pipinelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to pi- *
|
||||
// ******************************************
|
||||
|
||||
G4ParticleDefinition* piminus = G4PionMinus::PionMinusDefinition();
|
||||
G4ProcessManager* pimMan = piminus -> GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
|
||||
G4HadronElasticProcess* pimelProc = new G4HadronElasticProcess();
|
||||
pimelProc -> RegisterMe(elastic_model);
|
||||
pimMan -> AddDiscreteProcess(pimelProc);
|
||||
|
||||
// Inelastic process
|
||||
|
||||
G4PionMinusInelasticProcess* piminelProc = new G4PionMinusInelasticProcess();
|
||||
piminelProc -> AddDataSet(pion_XC);
|
||||
piminelProc -> RegisterMe(LEP_pim_model);
|
||||
piminelProc -> RegisterMe(QGSP_model);
|
||||
//pimMan -> AddRestProcess(new G4PiMinusAbsorptionAtRest, ordDefault);
|
||||
pimMan -> AddDiscreteProcess(piminelProc);
|
||||
|
||||
// ******************************************
|
||||
// * register models, processes to alpha *
|
||||
// ******************************************
|
||||
// Process for induced fission
|
||||
G4HadronFissionProcess* fission = new G4HadronFissionProcess();
|
||||
//Final state production model for induced fission
|
||||
G4LFission* fissionModel = new G4LFission();
|
||||
// Set the energy range for the fission model
|
||||
fissionModel->SetMinEnergy(neutronLowEnergyLimit);
|
||||
fissionModel->SetMaxEnergy(neutronHighEnergyLimit);
|
||||
// Register the fission model
|
||||
fission->RegisterMe(fissionModel);
|
||||
// Activate the fission process
|
||||
neutronProcessManager->AddDiscreteProcess(fission);
|
||||
|
||||
//--------------------------------------------------------
|
||||
// Physics for alpha particles
|
||||
|
||||
G4ParticleDefinition* alpha = G4Alpha::AlphaDefinition();
|
||||
G4ProcessManager* alfMan = alpha -> GetProcessManager();
|
||||
G4ProcessManager* alphaProcessManager = alpha->GetProcessManager();
|
||||
|
||||
// Elastic process
|
||||
// Cross section data sets
|
||||
|
||||
// TRIPATHI CROSS SECTION
|
||||
// Implementation of formulas taken from NASA technical paper 3621 by
|
||||
// Tripathi, et al. Cross-sections for ion ion scattering
|
||||
G4TripathiCrossSection* tripathi = new G4TripathiCrossSection();
|
||||
|
||||
G4HadronElasticProcess* alfelProc = new G4HadronElasticProcess();
|
||||
alfelProc -> RegisterMe(elastic_model);
|
||||
alfMan -> AddDiscreteProcess(alfelProc);
|
||||
// IONS SHEN CROSS SECTION
|
||||
// Implementation of formulas
|
||||
// Shen et al. Nuc. Phys. A 491 130 (1989)
|
||||
// Total Reaction Cross Section for Heavy-Ion Collisions
|
||||
G4IonsShenCrossSection* shen = new G4IonsShenCrossSection();
|
||||
|
||||
// Inelastic process
|
||||
G4LEAlphaInelastic* LEPAlphaModel = new G4LEAlphaInelastic();
|
||||
// Energy limit of the LEP model for alpha particles
|
||||
G4double LEPAlphaHighLimit = 100 * MeV;
|
||||
LEPAlphaModel->SetMaxEnergy(LEPAlphaHighLimit);
|
||||
|
||||
G4AlphaInelasticProcess* alfinelProc = new G4AlphaInelasticProcess();
|
||||
alfinelProc -> AddDataSet(tripathi);
|
||||
alfinelProc -> AddDataSet(shen);
|
||||
alfinelProc -> RegisterMe(LEP_alpha_model);
|
||||
alfinelProc -> RegisterMe(binary_ion_model);
|
||||
alfMan -> AddDiscreteProcess(alfinelProc);
|
||||
G4BinaryLightIonReaction* binaryIonModel = new G4BinaryLightIonReaction();
|
||||
// Energy limit of the binary ion model
|
||||
G4double binaryIonLowLimit = 80. * MeV;
|
||||
G4double binaryIonHighLimit = 40. * GeV;
|
||||
binaryIonModel->SetMinEnergy(binaryIonLowLimit);
|
||||
binaryIonModel->SetMaxEnergy(binaryIonHighLimit);
|
||||
|
||||
// Define the alpha inelastic scattering
|
||||
G4AlphaInelasticProcess* alphaInelasticProcess = new G4AlphaInelasticProcess();
|
||||
// Activate the Tripathi and Shen Cross Section
|
||||
alphaInelasticProcess->AddDataSet(tripathi);
|
||||
alphaInelasticProcess->AddDataSet(shen);
|
||||
// Set the models
|
||||
alphaInelasticProcess->RegisterMe(LEPAlphaModel);
|
||||
alphaInelasticProcess->RegisterMe(binaryIonModel);
|
||||
// Activate the inelastic scattering
|
||||
alphaProcessManager->AddDiscreteProcess(alphaInelasticProcess);
|
||||
// Activate the elastic scattering
|
||||
alphaProcessManager->AddDiscreteProcess(elasticScattering);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimIonICRU.cc,v 1.10 2006/06/29 16:23:51 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author: Susanna Guatelli, guatelli@ge.infn.it
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
// *******************************
|
||||
//
|
||||
// $Id: RemSimMaterial.cc,v 1.7 2006/06/29 16:23:53 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
|
||||
#include "G4MaterialPropertiesTable.hh"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
// **************************************
|
||||
//
|
||||
// $Id: RemSimMoonHabitat.cc,v 1.7 2006/06/29 16:23:55 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimMuonStandard.cc,v 1.6 2006/06/29 16:23:57 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimPhotonEPDL.cc,v 1.7 2006/06/29 16:24:01 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author:Susanna Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimPhysicsList.cc,v 1.10 2006/06/29 16:24:03 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author: Susanna Guatelli
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimPhysicsListMessenger.cc,v 1.4 2006/06/29 16:24:05 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author: Susanna Guatelli, guatelli@ge.infn.it
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimPositronStandard.cc,v 1.6 2006/06/29 16:24:07 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Author: Susanna Guatelli, guatelli@ge.infn.it
|
||||
#include "RemSimPositronStandard.hh"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimPrimaryGeneratorMessenger.cc,v 1.11 2006/06/29 16:24:11 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
// ************************************
|
||||
//
|
||||
// $Id: RemSimROGeometry.cc,v 1.6 2006/06/29 16:24:13 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
#include "RemSimROGeometry.hh"
|
||||
#include "RemSimDummySD.hh"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimRoofDecorator.cc,v 1.7 2006/06/29 16:24:15 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
#include "RemSimVGeometryComponent.hh"
|
||||
#include "RemSimMaterial.hh"
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
// $Id: RemSimRunAction.cc,v 1.14 2006/06/29 16:24:17 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
|
||||
#include "RemSimRunAction.hh"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimSensitiveDetector.cc,v 1.15 2006/06/29 16:24:19 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimShelterSPEDecorator.cc,v 1.3 2006/06/29 16:24:21 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimShieldingDecorator.cc,v 1.6 2006/06/29 16:24:23 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: RemSimSteppingAction.cc,v 1.10 2006/06/29 16:24:25 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
//
|
||||
// Author: Susanna Guatelli (guatelli@ge.infn.it)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
//$Id: RemSimSteppingActionMessenger.cc,v 1.5 2006/06/29 16:24:27 gunter Exp $// GEANT4 tag $Name: geant4-08-01 $
|
||||
//$Id: RemSimSteppingActionMessenger.cc,v 1.5 2006/06/29 16:24:27 gunter Exp $// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimVGeometryComponent.cc,v 1.4 2006/06/29 16:24:29 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: RemSimVehicle1.cc,v 1.9 2006/06/29 16:24:31 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-08-01 $
|
||||
// GEANT4 tag $Name: geant4-08-02 $
|
||||
//
|
||||
// Code developed by: S.Guatelli, guatelli@ge.infn.it
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user