Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 //
38 #include "G4HyperonFTFPBuilder.hh"
39 
40 #include "G4SystemOfUnits.hh"
41 #include "G4ParticleDefinition.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 
186  aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
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