Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4HyperonFTFPBuilder.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// GEANT4 tag $Name: not supported by cvs2svn $
27//
28//---------------------------------------------------------------------------
29//
30// ClassName: G4HyperonFTFPBuilder
31//
32// Author: 2012 G.Folger
33// Implementation started from G4HyperonLHEPBuilder.
34//
35// Modified:
36//----------------------------------------------------------------------------
37//
39
40#include "G4SystemOfUnits.hh"
42#include "G4ParticleTable.hh"
43#include "G4ProcessManager.hh"
45
46
48 theLambdaInelastic(0),
49 theAntiLambdaInelastic(0),
50 theSigmaMinusInelastic(0),
51 theAntiSigmaMinusInelastic(0),
52 theSigmaPlusInelastic(0),
53 theAntiSigmaPlusInelastic(0),
54 theXiZeroInelastic(0),
55 theAntiXiZeroInelastic(0),
56 theXiMinusInelastic(0),
57 theAntiXiMinusInelastic(0),
58 theOmegaMinusInelastic(0),
59 theAntiOmegaMinusInelastic(0),
60 wasActivated(false)
61{
62
63// Hyperon : Bertini at low energies, then FTFP
64
65 HyperonFTFP = new G4TheoFSGenerator("FTFP");
66
67 HyperonFTFP->SetMinEnergy( 2.*GeV );
68 HyperonFTFP->SetMaxEnergy( 100.*TeV );
69
70 theStringModel = new G4FTFModel;
71 theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
72 theStringModel->SetFragmentationModel(theStringDecay);
73
74 theCascade = new G4GeneratorPrecompoundInterface;
75 thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
76 theCascade->SetDeExcitation(thePreEquilib);
77
78 HyperonFTFP->SetTransport(theCascade);
79 HyperonFTFP->SetHighEnergyGenerator(theStringModel);
80
81 theBertini = new G4CascadeInterface;
82 theBertini->SetMinEnergy( 0.*GeV );
83 theBertini->SetMaxEnergy( 6.*GeV );
84
85// AntiHyperons: Use FTFP for full energy range, starting at 0.
86
87 AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
88 AntiHyperonFTFP->SetMinEnergy( 0.*GeV );
89 AntiHyperonFTFP->SetMaxEnergy( 100.*TeV );
90 AntiHyperonFTFP->SetTransport(theCascade);
91 AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
92
93// use CHIPS cross sections
95}
96
97
99{
100 delete HyperonFTFP;
101 delete theStringModel;
102 delete theStringDecay;
103 delete theCascade;
104 delete thePreEquilib;
105 // delete theHandler;
106 delete theBertini;
107 delete AntiHyperonFTFP;
108
109 if (wasActivated) {
110 delete theLambdaInelastic;
111 delete theAntiLambdaInelastic;
112 delete theSigmaMinusInelastic;
113 delete theAntiSigmaMinusInelastic;
114 delete theSigmaPlusInelastic;
115 delete theAntiSigmaPlusInelastic;
116 delete theXiMinusInelastic;
117 delete theAntiXiMinusInelastic;
118 delete theXiZeroInelastic;
119 delete theAntiXiZeroInelastic;
120 delete theOmegaMinusInelastic;
121 delete theAntiOmegaMinusInelastic;
122 }
123}
124
126{
127 G4ProcessManager * aProcMan = 0;
128 wasActivated = true;
129
130 // Lambda
131 theLambdaInelastic = new G4LambdaInelasticProcess();
132 theLambdaInelastic->RegisterMe(theBertini);
133 theLambdaInelastic->RegisterMe(HyperonFTFP);
134 theLambdaInelastic->AddDataSet(theCHIPSInelastic);
135 aProcMan = G4Lambda::Lambda()->GetProcessManager();
136 aProcMan->AddDiscreteProcess(theLambdaInelastic);
137
138 // AntiLambda
139 theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
140 theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
141 theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic);
142
144 aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
145
146 // SigmaMinus
147 theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
148 theSigmaMinusInelastic->RegisterMe(theBertini);
149 theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
150 theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
151
153 aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
154
155 // anti-SigmaMinus
156 theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
157 theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
158 theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
159
161 aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
162
163 // SigmaPlus
164 theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
165 theSigmaPlusInelastic->RegisterMe(theBertini);
166 theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
167 theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
168
170 aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
171
172 // anti-SigmaPlus
173 theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
174 theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
175 theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
176
178 aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
179
180 // XiMinus
181 theXiMinusInelastic = new G4XiMinusInelasticProcess();
182 theXiMinusInelastic->RegisterMe(theBertini);
183 theXiMinusInelastic->RegisterMe(HyperonFTFP);
184 theXiMinusInelastic->AddDataSet(theCHIPSInelastic);
185
187 aProcMan->AddDiscreteProcess(theXiMinusInelastic);
188
189 // anti-XiMinus
190 theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
191 theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
192 theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic);
193
195 aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
196
197 // XiZero
198 theXiZeroInelastic = new G4XiZeroInelasticProcess();
199 theXiZeroInelastic->RegisterMe(theBertini);
200 theXiZeroInelastic->RegisterMe(HyperonFTFP);
201 theXiZeroInelastic->AddDataSet(theCHIPSInelastic);
202
203 aProcMan = G4XiZero::XiZero()->GetProcessManager();
204 aProcMan->AddDiscreteProcess(theXiZeroInelastic);
205
206 // anti-XiZero
207 theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
208 theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
209 theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic);
210
212 aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
213
214 // OmegaMinus
215 theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
216 theOmegaMinusInelastic->RegisterMe(theBertini);
217 theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
218 theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
219
221 aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
222
223 // anti-OmegaMinus
224 theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
225 theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
226 theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
227
229 aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);
230}
231
232
static G4AntiLambda * AntiLambda()
static G4AntiOmegaMinus * AntiOmegaMinus()
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4AntiSigmaPlus * AntiSigmaPlus()
static G4AntiXiMinus * AntiXiMinus()
static G4AntiXiZero * AntiXiZero()
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static G4CrossSectionDataSetRegistry * Instance()
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void RegisterMe(G4HadronicInteraction *a)
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108
static G4OmegaMinus * OmegaMinus()
G4ProcessManager * GetProcessManager() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4SigmaMinus * SigmaMinus()
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
void SetTransport(G4VIntraNuclearTransportModel *const value)
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
void SetDeExcitation(G4VPreCompoundModel *ptr)
void SetFragmentationModel(G4VStringFragmentation *aModel)
static G4XiMinus * XiMinus()
Definition: G4XiMinus.cc:106
static G4XiZero * XiZero()
Definition: G4XiZero.cc:106