#include "SolidNeutronPhysics.hh" #include "G4ParticleDefinition.hh" #include "G4ProcessManager.hh" #include "G4ProcessTable.hh" // Processes #include "G4HadronElasticProcess.hh" #include "G4ChipsNeutronElasticXS.hh" #include "G4NeutronHPElasticData.hh" #include "G4NeutronHPThermalScatteringData.hh" #include "G4NeutronHPElastic.hh" #include "G4NeutronHPThermalScattering.hh" #include "G4ChipsElasticModel.hh" #include "G4NeutronInelasticProcess.hh" #include "G4NeutronHPInelasticData.hh" #include "G4NeutronInelasticXS.hh" #include "G4NeutronHPInelastic.hh" #include "G4CascadeInterface.hh" #include "G4HadronCaptureProcess.hh" #include "G4NeutronHPCaptureData.hh" #include "G4NeutronCaptureXS.hh" #include "G4NeutronHPCapture.hh" #include "G4NeutronRadCapture.hh" #include "G4HadronFissionProcess.hh" #include "G4NeutronHPFissionData.hh" #include "G4NeutronHPFission.hh" #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SolidNeutronPhysics::SolidNeutronPhysics(G4int verbosityLevel_, const G4String& name_) : G4VPhysicsConstructor(name_) { fThermal=true; verbosityLevel=verbosityLevel_; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SolidNeutronPhysics::~SolidNeutronPhysics() { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void SolidNeutronPhysics::ConstructProcess() { G4ParticleDefinition* neutron = G4Neutron::Neutron(); G4ProcessManager* pManager = G4Neutron::Neutron()->GetProcessManager(); // delete all neutron processes if already registered // G4ProcessTable* processTable = G4ProcessTable::GetProcessTable(); G4VProcess* process = 0; process = processTable->FindProcess("hadElastic", neutron); if (process) pManager->RemoveProcess(process); // process = processTable->FindProcess("neutronInelastic", neutron); if (process) pManager->RemoveProcess(process); // process = processTable->FindProcess("nCapture", neutron); if (process) pManager->RemoveProcess(process); // process = processTable->FindProcess("nFission", neutron); if (process) pManager->RemoveProcess(process); // process: elastic // G4HadronElasticProcess* process1 = new G4HadronElasticProcess(); pManager->AddDiscreteProcess(process1); // // cross section data set G4NeutronHPElasticData* dataSet1a = new G4NeutronHPElasticData(); G4NeutronHPThermalScatteringData* dataSet1b = new G4NeutronHPThermalScatteringData(); G4ChipsNeutronElasticXS* dataSet1c = new G4ChipsNeutronElasticXS(); process1->AddDataSet(dataSet1c); process1->AddDataSet(dataSet1a); if (fThermal) process1->AddDataSet(dataSet1b); // // models G4HadronElastic* model1c = new G4ChipsElasticModel(); G4NeutronHPElastic* model1a = new G4NeutronHPElastic(); G4NeutronHPThermalScattering* model1b = new G4NeutronHPThermalScattering(); // Model for neutrons above 20 MeV //if (fThermal) model1c->SetMinEnergy(20*MeV); //process1->RegisterMe(model1c); // Model for neutron between 20MeV and 4 eV model1c->SetMinEnergy(19.5*MeV); process1->RegisterMe(model1c); if (fThermal) model1a->SetMinEnergy(4*eV); process1->RegisterMe(model1a); if (fThermal) process1->RegisterMe(model1b); // process: inelastic // G4NeutronInelasticProcess* process2 = new G4NeutronInelasticProcess(); pManager->AddDiscreteProcess(process2); // // cross section data set G4NeutronHPInelasticData* dataSet2a = new G4NeutronHPInelasticData(); G4NeutronInelasticXS* dataSet2c = new G4NeutronInelasticXS(); process2->AddDataSet(dataSet2c); process2->AddDataSet(dataSet2a); // // models G4NeutronHPInelastic* model2a = new G4NeutronHPInelastic(); G4CascadeInterface* model2c = new G4CascadeInterface(); model2c->SetMinEnergy(19.5*MeV); model2c->SetMaxEnergy(100*TeV); process2->RegisterMe(model2c); process2->RegisterMe(model2a); // process: nCapture // G4HadronCaptureProcess* process3 = new G4HadronCaptureProcess(); pManager->AddDiscreteProcess(process3); // // cross section data set G4NeutronHPCaptureData* dataSet3a = new G4NeutronHPCaptureData(); G4NeutronCaptureXS* dataSet3c = new G4NeutronCaptureXS(); process3->AddDataSet(dataSet3c); process3->AddDataSet(dataSet3a); // // models G4NeutronHPCapture* model3a = new G4NeutronHPCapture(); G4NeutronRadCapture* model3c = new G4NeutronRadCapture(); model3c->SetMinEnergy(19.5*MeV); process3->RegisterMe(model3c); process3->RegisterMe(model3a); // process: nFission // G4HadronFissionProcess* process4 = new G4HadronFissionProcess(); pManager->AddDiscreteProcess(process4); // // cross section data set G4NeutronHPFissionData* dataSet4 = new G4NeutronHPFissionData(); process4->AddDataSet(dataSet4); // // models G4NeutronHPFission* model4 = new G4NeutronHPFission(); process4->RegisterMe(model4); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......