4 #include "G4SystemOfUnits.hh"
5 #include "G4ParticleDefinition.hh"
6 #include "G4ParticleTable.hh"
7 #include "G4ProcessManager.hh"
8 #include "G4CrossSectionInelastic.hh"
9 #include "G4ComponentGGHadronNucleusXsc.hh"
10 #include "G4HadronicParameters.hh"
12 #include "G4LambdaInelasticProcess.hh"
13 #include "G4AntiLambdaInelasticProcess.hh"
14 #include "G4SigmaPlusInelasticProcess.hh"
15 #include "G4SigmaMinusInelasticProcess.hh"
16 #include "G4AntiSigmaPlusInelasticProcess.hh"
17 #include "G4AntiSigmaMinusInelasticProcess.hh"
18 #include "G4XiZeroInelasticProcess.hh"
19 #include "G4XiMinusInelasticProcess.hh"
20 #include "G4AntiXiZeroInelasticProcess.hh"
21 #include "G4AntiXiMinusInelasticProcess.hh"
22 #include "G4OmegaMinusInelasticProcess.hh"
23 #include "G4AntiOmegaMinusInelasticProcess.hh"
25 #include "G4TheoFSGenerator.hh"
26 #include "G4GeneratorPrecompoundInterface.hh"
27 #include "G4FTFModel.hh"
28 #include "G4LundStringFragmentation.hh"
29 #include "G4ExcitedStringDecay.hh"
30 #include "G4CascadeInterface.hh"
39 auto HyperonFTFP =
new G4TheoFSGenerator(
"FTFP");
41 HyperonFTFP->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade());
42 HyperonFTFP->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy());
44 auto theStringModel =
new G4FTFModel;
45 auto theStringDecay =
new G4ExcitedStringDecay(
new G4LundStringFragmentation());
46 theStringModel->SetFragmentationModel(theStringDecay);
48 auto theCascade =
new G4GeneratorPrecompoundInterface;
50 HyperonFTFP->SetTransport(theCascade);
51 HyperonFTFP->SetHighEnergyGenerator(theStringModel);
53 auto theBertini =
new G4CascadeInterface;
54 theBertini->SetMinEnergy(0.0);
55 theBertini->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade());
59 auto AntiHyperonFTFP =
new G4TheoFSGenerator(
"FTFP");
60 AntiHyperonFTFP->SetMinEnergy(0.0);
61 AntiHyperonFTFP->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy());
62 AntiHyperonFTFP->SetTransport(theCascade);
63 AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
66 auto theInelasticCrossSection =
new G4CrossSectionInelastic(
new G4ComponentGGHadronNucleusXsc);
68 G4ProcessManager* aProcMan =
nullptr;
71 auto theLambdaInelastic =
new G4LambdaInelasticProcess();
72 theLambdaInelastic->RegisterMe(theBertini);
73 theLambdaInelastic->RegisterMe(HyperonFTFP);
74 theLambdaInelastic->AddDataSet(theInelasticCrossSection);
76 aProcMan->AddDiscreteProcess(theLambdaInelastic);
79 auto theAntiLambdaInelastic =
new G4AntiLambdaInelasticProcess();
80 theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
81 theAntiLambdaInelastic->AddDataSet(theInelasticCrossSection);
83 aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager();
84 aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
87 auto theSigmaMinusInelastic =
new G4SigmaMinusInelasticProcess();
88 theSigmaMinusInelastic->RegisterMe(theBertini);
89 theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
90 theSigmaMinusInelastic->AddDataSet(theInelasticCrossSection);
92 aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
93 aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
96 auto theAntiSigmaMinusInelastic =
new G4AntiSigmaMinusInelasticProcess();
97 theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
98 theAntiSigmaMinusInelastic->AddDataSet(theInelasticCrossSection);
100 aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
101 aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
104 auto theSigmaPlusInelastic =
new G4SigmaPlusInelasticProcess();
105 theSigmaPlusInelastic->RegisterMe(theBertini);
106 theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
107 theSigmaPlusInelastic->AddDataSet(theInelasticCrossSection);
109 aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
110 aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
113 auto theAntiSigmaPlusInelastic =
new G4AntiSigmaPlusInelasticProcess();
114 theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
115 theAntiSigmaPlusInelastic->AddDataSet(theInelasticCrossSection);
117 aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
118 aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
121 auto theXiMinusInelastic =
new G4XiMinusInelasticProcess();
122 theXiMinusInelastic->RegisterMe(theBertini);
123 theXiMinusInelastic->RegisterMe(HyperonFTFP);
124 theXiMinusInelastic->AddDataSet(theInelasticCrossSection);
126 aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
127 aProcMan->AddDiscreteProcess(theXiMinusInelastic);
130 auto theAntiXiMinusInelastic =
new G4AntiXiMinusInelasticProcess();
131 theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
132 theAntiXiMinusInelastic->AddDataSet(theInelasticCrossSection);
134 aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
135 aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
138 auto theXiZeroInelastic =
new G4XiZeroInelasticProcess();
139 theXiZeroInelastic->RegisterMe(theBertini);
140 theXiZeroInelastic->RegisterMe(HyperonFTFP);
141 theXiZeroInelastic->AddDataSet(theInelasticCrossSection);
143 aProcMan = G4XiZero::XiZero()->GetProcessManager();
144 aProcMan->AddDiscreteProcess(theXiZeroInelastic);
147 auto theAntiXiZeroInelastic =
new G4AntiXiZeroInelasticProcess();
148 theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
149 theAntiXiZeroInelastic->AddDataSet(theInelasticCrossSection);
151 aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
152 aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
155 auto theOmegaMinusInelastic =
new G4OmegaMinusInelasticProcess();
156 theOmegaMinusInelastic->RegisterMe(theBertini);
157 theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
158 theOmegaMinusInelastic->AddDataSet(theInelasticCrossSection);
160 aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
161 aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
164 auto theAntiOmegaMinusInelastic =
new G4AntiOmegaMinusInelasticProcess();
165 theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
166 theAntiOmegaMinusInelastic->AddDataSet(theInelasticCrossSection);
168 aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
169 aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);