Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ExExChHyperonFTFPBuilder.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 //
28 //
29 
31 
32 #include "G4SystemOfUnits.hh"
33 #include "G4ParticleDefinition.hh"
34 #include "G4ParticleTable.hh"
35 #include "G4ProcessManager.hh"
37 
38 // Wrapper
40 
42 theLambdaInelastic(0),
43 theAntiLambdaInelastic(0),
44 theSigmaMinusInelastic(0),
45 theAntiSigmaMinusInelastic(0),
46 theSigmaPlusInelastic(0),
47 theAntiSigmaPlusInelastic(0),
48 theXiZeroInelastic(0),
49 theAntiXiZeroInelastic(0),
50 theXiMinusInelastic(0),
51 theAntiXiMinusInelastic(0),
52 theOmegaMinusInelastic(0),
53 theAntiOmegaMinusInelastic(0),
54 wasActivated(false)
55 {
56 
57  // Hyperon : Bertini at low energies, then FTFP
58 
59  HyperonFTFP = new G4TheoFSGenerator("FTFP");
60 
61  HyperonFTFP->SetMinEnergy( 2.*GeV );
62  HyperonFTFP->SetMaxEnergy( 100.*TeV );
63 
64  theStringModel = new G4FTFModel;
65  theLund = new G4LundStringFragmentation;
66  theStringDecay = new G4ExcitedStringDecay(theLund);
67  theStringModel->SetFragmentationModel(theStringDecay);
68 
69  theCascade = new G4GeneratorPrecompoundInterface;
70 
71  theHandler =new G4ExcitationHandler;
72  thePreEquilib = new G4PreCompoundModel(theHandler);
73  theCascade->SetDeExcitation(thePreEquilib);
74 
75  HyperonFTFP->SetTransport(theCascade);
76  HyperonFTFP->SetHighEnergyGenerator(theStringModel);
77 
78  theBertini = new G4CascadeInterface;
79  theBertini->SetMinEnergy( 0.*GeV );
80  theBertini->SetMaxEnergy( 6.*GeV );
81 
82  // AntiHyperons: Use FTFP for full energy range, starting at 0.
83 
84  AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
85  AntiHyperonFTFP->SetMinEnergy( 0.*GeV );
86  AntiHyperonFTFP->SetMaxEnergy( 100.*TeV );
87  AntiHyperonFTFP->SetTransport(theCascade);
88  AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
89 
90  // use CHIPS cross sections
91  theCHIPSInelastic = G4CrossSectionDataSetRegistry::
94 }
95 
96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
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 
125 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
126 
128 {
129  G4ProcessManager * aProcMan = 0;
130  wasActivated = true;
131 
132  // Lambda
133  theLambdaInelastic = new G4LambdaInelasticProcess();
134  theLambdaInelastic->RegisterMe(theBertini);
135  theLambdaInelastic->RegisterMe(HyperonFTFP);
136  theLambdaInelastic->AddDataSet(theCHIPSInelastic);
137  aProcMan = G4Lambda::Lambda()->GetProcessManager();
138  aProcMan->AddDiscreteProcess(theLambdaInelastic);
139 
140  // AntiLambda
141  theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
142  theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
143  theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic);
144 
146  aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
147 
148  // SigmaMinus
149  theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
150  theSigmaMinusInelastic->RegisterMe(theBertini);
151  theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
152  theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
153 
155  XWrapperDiscreteProcess* theSigmaMinusInelastic_w =
157  theSigmaMinusInelastic_w->RegisterProcess(theSigmaMinusInelastic,1);
158  aProcMan->AddDiscreteProcess(theSigmaMinusInelastic_w);
159 
160  // anti-SigmaMinus
161  theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
162  theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
163  theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
164 
166  XWrapperDiscreteProcess* theAntiSigmaMinusInelastic_w =
168  theAntiSigmaMinusInelastic_w->RegisterProcess(theAntiSigmaMinusInelastic,1);
169  aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic_w);
170 
171  // SigmaPlus
172  theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
173  theSigmaPlusInelastic->RegisterMe(theBertini);
174  theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
175  theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
176 
178  XWrapperDiscreteProcess* theSigmaPlusInelastic_w =
180  theSigmaPlusInelastic_w->RegisterProcess(theSigmaPlusInelastic,1);
181  aProcMan->AddDiscreteProcess(theSigmaPlusInelastic_w);
182 
183  // anti-SigmaPlus
184  theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
185  theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
186  theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
187 
189  XWrapperDiscreteProcess* theAntiSigmaPlusInelastic_w =
191  theAntiSigmaPlusInelastic_w->RegisterProcess(theAntiSigmaPlusInelastic,1);
192  aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic_w);
193 
194  // XiMinus
195  theXiMinusInelastic = new G4XiMinusInelasticProcess();
196  theXiMinusInelastic->RegisterMe(theBertini);
197  theXiMinusInelastic->RegisterMe(HyperonFTFP);
198  theXiMinusInelastic->AddDataSet(theCHIPSInelastic);
199 
200  aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
201  XWrapperDiscreteProcess* theXiMinusInelastic_w =
203  theXiMinusInelastic_w->RegisterProcess(theXiMinusInelastic,1);
204  aProcMan->AddDiscreteProcess(theXiMinusInelastic_w);
205 
206  // anti-XiMinus
207  theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
208  theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
209  theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic);
210 
212  XWrapperDiscreteProcess* theAntiXiMinusInelastic_w =
214  theAntiXiMinusInelastic_w->RegisterProcess(theAntiXiMinusInelastic,1);
215  aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic_w);
216 
217  // XiZero
218  theXiZeroInelastic = new G4XiZeroInelasticProcess();
219  theXiZeroInelastic->RegisterMe(theBertini);
220  theXiZeroInelastic->RegisterMe(HyperonFTFP);
221  theXiZeroInelastic->AddDataSet(theCHIPSInelastic);
222 
223  aProcMan = G4XiZero::XiZero()->GetProcessManager();
224  aProcMan->AddDiscreteProcess(theXiZeroInelastic);
225 
226  // anti-XiZero
227  theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
228  theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
229  theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic);
230 
232  aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
233 
234  // OmegaMinus
235  theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
236  theOmegaMinusInelastic->RegisterMe(theBertini);
237  theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
238  theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
239 
241  XWrapperDiscreteProcess* theOmegaMinusInelastic_w =
243  theOmegaMinusInelastic_w->RegisterProcess(theOmegaMinusInelastic,1);
244  aProcMan->AddDiscreteProcess(theOmegaMinusInelastic_w);
245 
246  // anti-OmegaMinus
247  theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
248  theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
249  theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
250 
252  XWrapperDiscreteProcess* theAntiOmegaMinusInelastic_w =
254  theAntiOmegaMinusInelastic_w->RegisterProcess(theAntiOmegaMinusInelastic,1);
255  aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic_w);
256 }
257 
258 
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static G4AntiOmegaMinus * AntiOmegaMinus()
void SetFragmentationModel(G4VStringFragmentation *aModel)
static G4OmegaMinus * OmegaMinus()
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4AntiSigmaPlus * AntiSigmaPlus()
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
void RegisterMe(G4HadronicInteraction *a)
static constexpr double TeV
Definition: G4SIunits.hh:218
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4XiZero * XiZero()
Definition: G4XiZero.cc:106
void SetMinEnergy(G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
static G4XiMinus * XiMinus()
Definition: G4XiMinus.cc:106
static G4AntiXiMinus * AntiXiMinus()
static G4CrossSectionDataSetRegistry * Instance()
static G4SigmaMinus * SigmaMinus()
Definition of the XWrapperDiscreteProcess class.
static G4AntiLambda * AntiLambda()
G4ProcessManager * GetProcessManager() const
static constexpr double GeV
Definition: G4SIunits.hh:217
void SetMaxEnergy(const G4double anEnergy)
void SetDeExcitation(G4VPreCompoundModel *ptr)
static G4AntiXiZero * AntiXiZero()
void SetTransport(G4VIntraNuclearTransportModel *const value)
void RegisterProcess(G4VDiscreteProcess *)
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108
Definition of the ExExChHyperonFTFPBuilder class.