14 #include "G4ProcessManager.hh"
15 #include "G4HadronElasticProcess.hh"
16 #include "G4HadronInelasticProcess.hh"
18 #include "G4TheoFSGenerator.hh"
19 #include "G4FTFModel.hh"
20 #include "G4ExcitedStringDecay.hh"
21 #include "G4LundStringFragmentation.hh"
22 #include "G4GeneratorPrecompoundInterface.hh"
23 #include "G4QMDReaction.hh"
24 #include "G4HadronicInteractionRegistry.hh"
25 #include "G4PreCompoundModel.hh"
26 #include "G4BinaryLightIonReaction.hh"
27 #include "G4HadronElastic.hh"
28 #include "G4NuclNuclDiffuseElastic.hh"
30 #include "G4CrossSectionElastic.hh"
31 #include "G4CrossSectionInelastic.hh"
32 #include "G4ComponentGGNuclNuclXsc.hh"
33 #include "G4SystemOfUnits.hh"
35 #include "G4Version.hh"
36 #if G4VERSION_NUMBER < 1100
52 : G4VPhysicsConstructor(
"eASTIon")
65 G4ProcessManager* procMan = 0;
68 G4NuclNuclDiffuseElastic* ionElastic =
new G4NuclNuclDiffuseElastic;
69 ionElastic->SetMinEnergy(0.0);
72 ftfp =
new G4TheoFSGenerator(
"FTFP");
75 new G4ExcitedStringDecay(
fragModel =
new G4LundStringFragmentation);
85 G4QMDReaction* qmd =
new G4QMDReaction;
86 qmd->SetMinEnergy(100.0*
MeV);
87 qmd->SetMaxEnergy(10.0*
GeV);
90 G4HadronicInteraction*
p =
91 G4HadronicInteractionRegistry::Instance()->FindModel(
"PRECO");
92 G4PreCompoundModel* thePreCompound =
static_cast<G4PreCompoundModel*
>(
p);
93 if(!thePreCompound) { thePreCompound =
new G4PreCompoundModel; }
95 G4BinaryLightIonReaction* ionBC =
new G4BinaryLightIonReaction(thePreCompound);
96 ionBC->SetMinEnergy(0.0*
MeV);
97 ionBC->SetMaxEnergy(110.0*
MeV);
100 ionGGXS =
new G4ComponentGGNuclNuclXsc;
101 G4VCrossSectionDataSet* ionElasticXS =
new G4CrossSectionElastic(
ionGGXS);
102 ionElasticXS->SetMinKinEnergy(0.0);
106 G4VCrossSectionDataSet* nuclNuclXS =
113 procMan = G4Deuteron::Deuteron()->GetProcessManager();
119 G4HadronInelasticProcess* deutProcInel =
120 new G4HadronInelasticProcess(
"DeuteronInelProcess", G4Deuteron::Deuteron() );
121 deutProcInel->RegisterMe(ionBC);
122 deutProcInel->RegisterMe(qmd);
123 deutProcInel->RegisterMe(
ftfp);
124 deutProcInel->AddDataSet(nuclNuclXS);
125 procMan->AddDiscreteProcess(deutProcInel);
131 procMan = G4Triton::Triton()->GetProcessManager();
137 G4HadronInelasticProcess* tritProcInel =
138 new G4HadronInelasticProcess(
"TritonInelProcess", G4Triton::Triton() );
139 tritProcInel->RegisterMe(ionBC);
140 tritProcInel->RegisterMe(qmd);
141 tritProcInel->RegisterMe(
ftfp);
142 tritProcInel->AddDataSet(nuclNuclXS);
143 procMan->AddDiscreteProcess(tritProcInel);
149 procMan = G4He3::He3()->GetProcessManager();
155 G4HadronInelasticProcess* he3ProcInel =
156 new G4HadronInelasticProcess(
"He3InelProcess", G4He3::He3() );
157 he3ProcInel->RegisterMe(ionBC);
158 he3ProcInel->RegisterMe(qmd);
159 he3ProcInel->RegisterMe(
ftfp);
160 he3ProcInel->AddDataSet(nuclNuclXS);
161 procMan->AddDiscreteProcess(he3ProcInel);
167 procMan = G4Alpha::Alpha()->GetProcessManager();
173 G4HadronInelasticProcess* alphProcInel =
174 new G4HadronInelasticProcess(
"AlphaInelProcess", G4Alpha::Alpha() );
175 alphProcInel->RegisterMe(ionBC);
176 alphProcInel->RegisterMe(qmd);
177 alphProcInel->RegisterMe(
ftfp);
178 alphProcInel->AddDataSet(nuclNuclXS);
179 procMan->AddDiscreteProcess(alphProcInel);
185 procMan = G4GenericIon::GenericIon()->GetProcessManager();
188 G4HadronElasticProcess* ionProcEl =
new G4HadronElasticProcess;
189 ionProcEl->RegisterMe(ionElastic);
190 ionProcEl->AddDataSet(ionElasticXS);
191 procMan->AddDiscreteProcess(ionProcEl);
194 G4HadronInelasticProcess* genIonProcInel =
195 new G4HadronInelasticProcess(
"IonInelProcess", G4GenericIon::GenericIon() );
196 genIonProcInel->RegisterMe(ionBC);
197 genIonProcInel->RegisterMe(qmd);
198 genIonProcInel->RegisterMe(
ftfp);
199 genIonProcInel->AddDataSet(nuclNuclXS);
200 procMan->AddDiscreteProcess(genIonProcInel);