Geant4_10
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 //
27 //---------------------------------------------------------------------------
28 //
29 // ClassName: G4HyperonFTFPBuilder
30 //
31 // Author: 2012 G.Folger
32 // Implementation started from G4HyperonLHEPBuilder.
33 //
34 // Modified:
35 //----------------------------------------------------------------------------
36 //
37 #include "G4HyperonFTFPBuilder.hh"
38 
39 #include "G4SystemOfUnits.hh"
40 #include "G4ParticleDefinition.hh"
41 #include "G4ParticleTable.hh"
42 #include "G4ProcessManager.hh"
44 
45 
47  theLambdaInelastic(0),
48  theAntiLambdaInelastic(0),
49  theSigmaMinusInelastic(0),
50  theAntiSigmaMinusInelastic(0),
51  theSigmaPlusInelastic(0),
52  theAntiSigmaPlusInelastic(0),
53  theXiZeroInelastic(0),
54  theAntiXiZeroInelastic(0),
55  theXiMinusInelastic(0),
56  theAntiXiMinusInelastic(0),
57  theOmegaMinusInelastic(0),
58  theAntiOmegaMinusInelastic(0),
59  wasActivated(false)
60 {
61 
62 // Hyperon : Bertini at low energies, then FTFP
63 
64  HyperonFTFP = new G4TheoFSGenerator("FTFP");
65 
66  HyperonFTFP->SetMinEnergy( 2.*GeV );
67  HyperonFTFP->SetMaxEnergy( 100.*TeV );
68 
69  theStringModel = new G4FTFModel;
70  theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
71  theStringModel->SetFragmentationModel(theStringDecay);
72 
73  theCascade = new G4GeneratorPrecompoundInterface;
74  thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
75  theCascade->SetDeExcitation(thePreEquilib);
76 
77  HyperonFTFP->SetTransport(theCascade);
78  HyperonFTFP->SetHighEnergyGenerator(theStringModel);
79 
80  theBertini = new G4CascadeInterface;
81  theBertini->SetMinEnergy( 0.*GeV );
82  theBertini->SetMaxEnergy( 6.*GeV );
83 
84 // AntiHyperons: Use FTFP for full energy range, starting at 0.
85 
86  AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
87  AntiHyperonFTFP->SetMinEnergy( 0.*GeV );
88  AntiHyperonFTFP->SetMaxEnergy( 100.*TeV );
89  AntiHyperonFTFP->SetTransport(theCascade);
90  AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
91 
92 // use CHIPS cross sections
94 }
95 
96 
98 {
99  delete HyperonFTFP;
100  delete theStringModel;
101  delete theStringDecay;
102  delete theCascade;
103  delete thePreEquilib;
104  // delete theHandler;
105  delete theBertini;
106  delete AntiHyperonFTFP;
107 
108  if (wasActivated) {
109  delete theLambdaInelastic;
110  delete theAntiLambdaInelastic;
111  delete theSigmaMinusInelastic;
112  delete theAntiSigmaMinusInelastic;
113  delete theSigmaPlusInelastic;
114  delete theAntiSigmaPlusInelastic;
115  delete theXiMinusInelastic;
116  delete theAntiXiMinusInelastic;
117  delete theXiZeroInelastic;
118  delete theAntiXiZeroInelastic;
119  delete theOmegaMinusInelastic;
120  delete theAntiOmegaMinusInelastic;
121  }
122 }
123 
125 {
126  G4ProcessManager * aProcMan = 0;
127  wasActivated = true;
128 
129  // Lambda
130  theLambdaInelastic = new G4LambdaInelasticProcess();
131  theLambdaInelastic->RegisterMe(theBertini);
132  theLambdaInelastic->RegisterMe(HyperonFTFP);
133  theLambdaInelastic->AddDataSet(theCHIPSInelastic);
134  aProcMan = G4Lambda::Lambda()->GetProcessManager();
135  aProcMan->AddDiscreteProcess(theLambdaInelastic);
136 
137  // AntiLambda
138  theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
139  theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
140  theAntiLambdaInelastic->AddDataSet(theCHIPSInelastic);
141 
143  aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
144 
145  // SigmaMinus
146  theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
147  theSigmaMinusInelastic->RegisterMe(theBertini);
148  theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
149  theSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
150 
152  aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
153 
154  // anti-SigmaMinus
155  theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
156  theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
157  theAntiSigmaMinusInelastic->AddDataSet(theCHIPSInelastic);
158 
160  aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
161 
162  // SigmaPlus
163  theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
164  theSigmaPlusInelastic->RegisterMe(theBertini);
165  theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
166  theSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
167 
169  aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
170 
171  // anti-SigmaPlus
172  theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
173  theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
174  theAntiSigmaPlusInelastic->AddDataSet(theCHIPSInelastic);
175 
177  aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
178 
179  // XiMinus
180  theXiMinusInelastic = new G4XiMinusInelasticProcess();
181  theXiMinusInelastic->RegisterMe(theBertini);
182  theXiMinusInelastic->RegisterMe(HyperonFTFP);
183  theXiMinusInelastic->AddDataSet(theCHIPSInelastic);
184 
185  aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
186  aProcMan->AddDiscreteProcess(theXiMinusInelastic);
187 
188  // anti-XiMinus
189  theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
190  theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
191  theAntiXiMinusInelastic->AddDataSet(theCHIPSInelastic);
192 
194  aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
195 
196  // XiZero
197  theXiZeroInelastic = new G4XiZeroInelasticProcess();
198  theXiZeroInelastic->RegisterMe(theBertini);
199  theXiZeroInelastic->RegisterMe(HyperonFTFP);
200  theXiZeroInelastic->AddDataSet(theCHIPSInelastic);
201 
202  aProcMan = G4XiZero::XiZero()->GetProcessManager();
203  aProcMan->AddDiscreteProcess(theXiZeroInelastic);
204 
205  // anti-XiZero
206  theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
207  theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
208  theAntiXiZeroInelastic->AddDataSet(theCHIPSInelastic);
209 
211  aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
212 
213  // OmegaMinus
214  theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
215  theOmegaMinusInelastic->RegisterMe(theBertini);
216  theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
217  theOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
218 
220  aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
221 
222  // anti-OmegaMinus
223  theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
224  theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
225  theAntiOmegaMinusInelastic->AddDataSet(theCHIPSInelastic);
226 
228  aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);
229 }
230 
231 
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()
G4ProcessManager * GetProcessManager() const
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
void RegisterMe(G4HadronicInteraction *a)
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()
static G4AntiLambda * AntiLambda()
void SetMaxEnergy(const G4double anEnergy)
void SetDeExcitation(G4VPreCompoundModel *ptr)
static G4AntiXiZero * AntiXiZero()
void SetTransport(G4VIntraNuclearTransportModel *const value)
static G4SigmaPlus * SigmaPlus()
Definition: G4SigmaPlus.cc:108
static G4Lambda * Lambda()
Definition: G4Lambda.cc:108