| Message: confused on the results about neutron yield and spectra produced from reaction (d,n) | Not Logged In (login) |
|
Hi all,
I am trying to simulate the neutron production yield and neutron spectra from the reactions: 9Be(d,n)10B and 12C(d,n)13N. Here is physics processes that I applied for deuteron:
#include "IonPhysics.hh"
#include "globals.hh" #include "G4ios.hh" #include <iomanip> // Elastic scattering, multiple scattering and ionisation
IonPhysics::IonPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
IonPhysics::~IonPhysics() { }
#include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" #include "G4ProcessManager.hh"
void IonPhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
// Deuteron pManager = G4Deuteron::Deuteron()->GetProcessManager();
// add process
G4HadronElasticProcess* thedueElasticProcess
= new G4HadronElasticProcess();
G4LElastic* thedueElasticModel = new G4LElastic();
thedueElasticProcess->RegisterMe(thedueElasticModel);
pManager->AddDiscreteProcess(thedueElasticProcess);
G4VProcess* thedueMultipleScattering = new G4MultipleScattering(); G4VProcess* thedueIonisation = new G4hIonisation(); // pManager->AddProcess(thedueIonisation); pManager->AddProcess(thedueMultipleScattering); // // set ordering for AlongStepDoIt pManager->SetProcessOrdering(thedueMultipleScattering, idxAlongStep,1); pManager->SetProcessOrdering(thedueIonisation, idxAlongStep,2); // // set ordering for PostStepDoIt pManager->SetProcessOrdering(thedueMultipleScattering, idxPostStep,1); pManager->SetProcessOrdering(thedueIonisation, idxPostStep,2); } // inelastic processes
#include "PhysListIonBinaryCascade.hh" #include "G4ParticleDefinition.hh" #include "G4ProcessManager.hh"
#include "G4Deuteron.hh" #include "G4Triton.hh" #include "G4Alpha.hh" #include "G4GenericIon.hh"
#include "G4HadronInelasticProcess.hh" #include "G4HadronElasticProcess.hh" #include "G4BinaryLightIonReaction.hh" #include "G4TripathiCrossSection.hh" #include "G4TripathiLightCrossSection.hh" #include "G4IonsShenCrossSection.hh" #include "G4LEDeuteronInelastic.hh" #include "G4DeuteronInelasticProcess.hh" #include "G4LETritonInelastic.hh" #include "G4LEAlphaInelastic.hh" #include "G4LElastic.hh" //EM process //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PhysListIonBinaryCascade::PhysListIonBinaryCascade(const G4String& name)
: G4VPhysicsConstructor(name)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysListIonBinaryCascade::~PhysListIonBinaryCascade() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void PhysListIonBinaryCascade::ConstructProcess()
{
// Binary Cascade
G4ParticleDefinition* particle = 0;
G4ProcessManager* pmanager = 0;
// 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 * TripathiCrossSection= new G4TripathiCrossSection;
// 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 * aShen = new G4IonsShenCrossSection;
// Intra-nuclear transport: Binary Cascade Model // Binary Cascade for deuteron, triton, alpha particle
G4BinaryLightIonReaction* theIonBC = new G4BinaryLightIonReaction();
theIonBC->SetMinEnergy(80*MeV); theIonBC->SetMaxEnergy(10*GeV);
// deuteron particle = G4Deuteron::Deuteron(); pmanager = particle->GetProcessManager();
// Final state production model for deuteron inelastic scattering below 100 MeV: Low Energy Parameterised model
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic;
// Set the maximum energy for LEP model
theDIModel->SetMaxEnergy(100*MeV);
// Activate the Tripathi and Shen Cross Section
theIPdeuteron.AddDataSet(TripathiCrossSection); theIPdeuteron.AddDataSet(aShen);
// Register the Parameterised Deuteron Inelastic Model and the Ion Binary Cascade Model
theIPdeuteron.RegisterMe(theDIModel); //theIPdeuteron.RegisterMe(theTheoModel); theIPdeuteron.RegisterMe(theIonBC);
// Activate inelastic scattering
pmanager->AddDiscreteProcess(&theIPdeuteron); Here is physics processes for neutron: #include "HadronPhysics.hh"
#include "globals.hh" #include "G4ios.hh" #include <iomanip>
HadronPhysics::HadronPhysics(const G4String& name)
: G4VPhysicsConstructor(name)
{
}
HadronPhysics::~HadronPhysics() { }
#include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh"
#include "G4ProcessManager.hh" #include "G4NeutronInelasticCrossSection.hh"
void HadronPhysics::ConstructProcess()
{
G4ProcessManager * pManager = 0;
// neutron Physics pManager = G4Neutron::Neutron()->GetProcessManager();
// add process
G4HadronElasticProcess* thenElasticProcess
= new G4HadronElasticProcess();
G4LElastic* thenElasticModel = new G4LElastic();
thenElasticProcess->RegisterMe(thenElasticModel);
pManager->AddDiscreteProcess(thenElasticProcess);
G4NeutronInelasticCrossSection* theNeutronCrossSection = new G4NeutronInelasticCrossSection() ;
G4NeutronInelasticProcess* theNeutronInelasticProcess
= new G4NeutronInelasticProcess();
G4LENeutronInelastic* theNeutronLEPModel = new G4LENeutronInelastic(); G4HENeutronInelastic* theNeutronHEPModel = new G4HENeutronInelastic(); //theNeutronHEPModel->SetMaxEnergy(20.*MeV); theNeutronInelasticProcess->AddDataSet(theNeutronCrossSection);
theNeutronInelasticProcess->RegisterMe(theNeutronLEPModel); theNeutronInelasticProcess->RegisterMe(theNeutronHEPModel); pManager->AddDiscreteProcess(theNeutronInelasticProcess);
//neutron + fission
G4HadronFissionProcess* thenFission
= new G4HadronFissionProcess();
G4LFission* thenFissionModel = new G4LFission();
thenFission->RegisterMe(thenFissionModel);
pManager->AddDiscreteProcess(thenFission);
//neutron + capture
G4HadronCaptureProcess* thenCapture
= new G4HadronCaptureProcess();
G4LCapture* thenCaptureModel = new G4LCapture();
thenCapture->RegisterMe(thenCaptureModel);
pManager->AddDiscreteProcess(thenCapture);
// anti-neutron Physics pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
// add process
G4HadronElasticProcess* theanElasticProcess
= new G4HadronElasticProcess();
G4LElastic* theanElasticModel = new G4LElastic();
theanElasticProcess->RegisterMe(theanElasticModel);
pManager->AddDiscreteProcess(theanElasticProcess);
G4AntiNeutronInelasticProcess* theAntiNeutronInelasticProcess
= new G4AntiNeutronInelasticProcess();
G4LEAntiNeutronInelastic* theAntiNeutronLEPModel = new G4LEAntiNeutronInelastic(); G4HEAntiNeutronInelastic* theAntiNeutronHEPModel = new G4HEAntiNeutronInelastic(); theAntiNeutronInelasticProcess->RegisterMe(theAntiNeutronLEPModel); theAntiNeutronInelasticProcess->RegisterMe(theAntiNeutronHEPModel); pManager->AddDiscreteProcess(theAntiNeutronInelasticProcess);
G4AntiNeutronAnnihilationAtRest* theAntiNeutronAnnihilation
= new G4AntiNeutronAnnihilationAtRest();
pManager->AddRestProcess(theAntiNeutronAnnihilation);
} However, at low energy ( deuteron which has energy lower than 100 MeV) my program can not reproduce the experimental data about neutron yields and spectra. Speccially, with 160 MeV deuteron i can not see any neutron. It would be very grateful if you can let me know what is error in my program and suggest me some ideas to solve this problem. Thank you very much in advance! Phan Viet Cuong
|
| Inline Depth: | Outline Depth: | Add message: |
|
|
to: |