15 #include <Geant4/G4ProcessManager.hh>
16 #include <Geant4/G4HadronElasticProcess.hh>
17 #include <Geant4/G4HadronInelasticProcess.hh>
19 #include <Geant4/G4TheoFSGenerator.hh>
20 #include <Geant4/G4FTFModel.hh>
21 #include <Geant4/G4ExcitedStringDecay.hh>
22 #include <Geant4/G4LundStringFragmentation.hh>
23 #include <Geant4/G4GeneratorPrecompoundInterface.hh>
24 #include <Geant4/G4QMDReaction.hh>
25 #include <Geant4/G4HadronicInteractionRegistry.hh>
26 #include <Geant4/G4PreCompoundModel.hh>
27 #include <Geant4/G4BinaryLightIonReaction.hh>
28 #include <Geant4/G4HadronElastic.hh>
29 #include <Geant4/G4NuclNuclDiffuseElastic.hh>
31 #include <Geant4/G4CrossSectionElastic.hh>
32 #include <Geant4/G4CrossSectionInelastic.hh>
33 #include <Geant4/G4ComponentGGNuclNuclXsc.hh>
34 #include <Geant4/G4SystemOfUnits.hh>
42 preCompoundModel(nullptr),
43 theGGNuclNuclXS(nullptr),
66 G4ProcessManager* procMan = 0;
69 G4NuclNuclDiffuseElastic* ionElastic =
new G4NuclNuclDiffuseElastic;
70 ionElastic->SetMinEnergy(0.0);
73 ftfp =
new G4TheoFSGenerator(
"FTFP");
76 new G4ExcitedStringDecay(
fragModel =
new G4LundStringFragmentation);
86 G4QMDReaction* qmd =
new G4QMDReaction;
87 qmd->SetMinEnergy(100.0*
MeV);
88 qmd->SetMaxEnergy(10.0*
GeV);
91 G4HadronicInteraction*
p =
92 G4HadronicInteractionRegistry::Instance()->FindModel(
"PRECO");
93 G4PreCompoundModel* thePreCompound =
static_cast<G4PreCompoundModel*
>(
p);
94 if(!thePreCompound) { thePreCompound =
new G4PreCompoundModel; }
96 G4BinaryLightIonReaction* ionBC =
new G4BinaryLightIonReaction(thePreCompound);
97 ionBC->SetMinEnergy(0.0*
MeV);
98 ionBC->SetMaxEnergy(110.0*
MeV);
101 ionGGXS =
new G4ComponentGGNuclNuclXsc;
102 G4VCrossSectionDataSet* ionElasticXS =
new G4CrossSectionElastic(
ionGGXS);
103 ionElasticXS->SetMinKinEnergy(0.0);
107 G4VCrossSectionDataSet* nuclNuclXS =
114 procMan = G4Deuteron::Deuteron()->GetProcessManager();
120 G4HadronInelasticProcess* deutProcInel =
121 new G4HadronInelasticProcess(
"DeuteronInelProcess", G4Deuteron::Deuteron() );
122 deutProcInel->RegisterMe(ionBC);
123 deutProcInel->RegisterMe(qmd);
124 deutProcInel->RegisterMe(
ftfp);
125 deutProcInel->AddDataSet(nuclNuclXS);
126 procMan->AddDiscreteProcess(deutProcInel);
132 procMan = G4Triton::Triton()->GetProcessManager();
138 G4HadronInelasticProcess* tritProcInel =
139 new G4HadronInelasticProcess(
"TritonInelProcess", G4Triton::Triton() );
140 tritProcInel->RegisterMe(ionBC);
141 tritProcInel->RegisterMe(qmd);
142 tritProcInel->RegisterMe(
ftfp);
143 tritProcInel->AddDataSet(nuclNuclXS);
144 procMan->AddDiscreteProcess(tritProcInel);
150 procMan = G4He3::He3()->GetProcessManager();
156 G4HadronInelasticProcess* he3ProcInel =
157 new G4HadronInelasticProcess(
"He3InelProcess", G4He3::He3() );
158 he3ProcInel->RegisterMe(ionBC);
159 he3ProcInel->RegisterMe(qmd);
160 he3ProcInel->RegisterMe(
ftfp);
161 he3ProcInel->AddDataSet(nuclNuclXS);
162 procMan->AddDiscreteProcess(he3ProcInel);
168 procMan = G4Alpha::Alpha()->GetProcessManager();
174 G4HadronInelasticProcess* alphProcInel =
175 new G4HadronInelasticProcess(
"AlphaInelProcess", G4Alpha::Alpha() );
176 alphProcInel->RegisterMe(ionBC);
177 alphProcInel->RegisterMe(qmd);
178 alphProcInel->RegisterMe(
ftfp);
179 alphProcInel->AddDataSet(nuclNuclXS);
180 procMan->AddDiscreteProcess(alphProcInel);
186 procMan = G4GenericIon::GenericIon()->GetProcessManager();
189 G4HadronElasticProcess* ionProcEl =
new G4HadronElasticProcess;
190 ionProcEl->RegisterMe(ionElastic);
191 ionProcEl->AddDataSet(ionElasticXS);
192 procMan->AddDiscreteProcess(ionProcEl);
195 G4HadronInelasticProcess* genIonProcInel =
196 new G4HadronInelasticProcess(
"IonInelProcess", G4GenericIon::GenericIon() );
197 genIonProcInel->RegisterMe(ionBC);
198 genIonProcInel->RegisterMe(qmd);
199 genIonProcInel->RegisterMe(
ftfp);
200 genIonProcInel->AddDataSet(nuclNuclXS);
201 procMan->AddDiscreteProcess(genIonProcInel);