Geant4  10.01.p01
exrdmPhysListHadron.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 // $Id: exrdmPhysListHadron.cc 82660 2014-07-02 08:43:20Z gcosmo $
27 //
30 //
31 
32 #include "exrdmPhysListHadron.hh"
33 
34 #include "G4ParticleDefinition.hh"
35 #include "G4ProcessManager.hh"
36 
37 #include "G4TheoFSGenerator.hh"
38 #include "G4ExcitationHandler.hh"
39 #include "G4Evaporation.hh"
40 #include "G4FermiBreakUp.hh"
41 #include "G4StatMF.hh"
43 #include "G4PreCompoundModel.hh"
44 #include "G4QGSModel.hh"
45 #include "G4QGSParticipants.hh"
46 #include "G4QGSMFragmentation.hh"
47 #include "G4ExcitedStringDecay.hh"
48 
49 #include "G4HadronElastic.hh"
50 #include "G4LFission.hh"
51 #include "G4NeutronRadCapture.hh"
52 #include "G4NeutronCaptureXS.hh"
53 
54 #include "G4CascadeInterface.hh"
55 
56 #include "G4BinaryCascade.hh"
59 
60 //HPNeutron
61 
62 #include "G4NeutronHPElastic.hh"
64 #include "G4NeutronHPCapture.hh"
66 #include "G4NeutronHPInelastic.hh"
68 //c-s
74 
75 // RadioactiveDecay
76 #include "G4RadioactiveDecay.hh"
77 #include "G4GenericIon.hh"
78 
79 #include "G4SystemOfUnits.hh"
80 
81 
83  : G4VPhysicsConstructor(name),
84  fTheNeutronElasticProcess(0), fTheFissionProcess(0),
85  fTheCaptureProcess(0),fTheDeuteronInelasticProcess(0),
86  fTheTritonInelasticProcess(0), fTheAlphaInelasticProcess(0),
87  fTheIonInelasticProcess(0)
88 {}
89 
91 {}
92 
93 
95 {
96  G4ProcessManager* pManager = 0;
97 
98  G4TheoFSGenerator* theTheoModel = new G4TheoFSGenerator;
99  // all models for treatment of thermal nucleus
100  G4Evaporation* theEvaporation = new G4Evaporation;
101  G4FermiBreakUp* theFermiBreakUp = new G4FermiBreakUp;
102  G4StatMF* theMF = new G4StatMF;
103  // Evaporation logic
104  G4ExcitationHandler* theHandler = new G4ExcitationHandler;
105  theHandler->SetEvaporation(theEvaporation);
106  theHandler->SetFermiModel(theFermiBreakUp);
107  theHandler->SetMultiFragmentation(theMF);
108  theHandler->SetMaxAandZForFermiBreakUp(12, 6);
109  theHandler->SetMinEForMultiFrag(5*MeV);
110  // Pre equilibrium stage
111  G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel(theHandler);
112 
113  // a no-cascade generator-precompound interaface
114  G4GeneratorPrecompoundInterface* theCascade =
116  theCascade->SetDeExcitation(thePreEquilib);
117 
118  // High energy parts
119  // String model; still not quite according to design
120  // Explicit use of the forseen interfaces
121  G4VPartonStringModel* theStringModel;
122  theStringModel = new G4QGSModel<G4QGSParticipants>;
123  theTheoModel->SetTransport(theCascade);
124  theTheoModel->SetHighEnergyGenerator(theStringModel);
125  theTheoModel->SetMinEnergy(10*GeV); // 15 GeV may be the right limit
126  theTheoModel->SetMaxEnergy(100*TeV);
127 
128  G4VLongitudinalStringDecay * theFragmentation = new G4QGSMFragmentation;
129  G4ExcitedStringDecay * theStringDecay =
130  new G4ExcitedStringDecay(theFragmentation);
131  theStringModel->SetFragmentationModel(theStringDecay);
132 
133  // Elastic Process
134 
136 
137  // Hadron elastic process for all particles except neutrons and generic ions
138  aParticleIterator->reset();
139  while ((*aParticleIterator)() ) {
140  G4ParticleDefinition* particle = aParticleIterator->value();
141  G4String particleName = particle->GetParticleName();
142  if (particleName != "neutron" && particleName != "GenericIon" &&
143  particleName != "He3") {
144  pManager = particle->GetProcessManager();
145  if (particle->GetPDGMass() > 110.*MeV &&
146  fTheElasticProcess.IsApplicable(*particle) &&
147  !particle->IsShortLived()) {
149  // G4cout << "### Elastic model are registered for "
150  // << particle->GetParticleName()
151  // << G4endl;
152  }
153  }
154  }
155 
156  // Proton
157  pManager = G4Proton::Proton()->GetProcessManager();
158  // add inelastic process
159  // Binary Cascade
160  G4BinaryCascade * theBC = new G4BinaryCascade;
161  theBC->SetMaxEnergy(10.5*GeV);
163  // Higher energy
164  fTheProtonInelastic.RegisterMe(theTheoModel);
165  // now the cross-sections.
166  G4ProtonInelasticCrossSection* theProtonData =
168  fTheProtonInelastic.AddDataSet(theProtonData);
170 
171  // Neutron
172  pManager = G4Neutron::Neutron()->GetProcessManager();
173  // add process
174  // elastic scattering
176  G4HadronElastic* theElasticModel1 = new G4HadronElastic;
177  G4NeutronHPElastic * theElasticNeutron = new G4NeutronHPElastic;
178  fTheNeutronElasticProcess->RegisterMe(theElasticModel1);
179  theElasticModel1->SetMinEnergy(19.*MeV);
180  fTheNeutronElasticProcess->RegisterMe(theElasticNeutron);
181  theElasticNeutron->SetMaxEnergy(20.*MeV);
182 
183  G4NeutronHPElasticData * theNeutronData = new G4NeutronHPElasticData;
184  fTheNeutronElasticProcess->AddDataSet(theNeutronData);
186 
187  // inelastic
188  G4NeutronHPInelastic * theHPNeutronInelasticModel =
190  theHPNeutronInelasticModel->SetMaxEnergy(20.*MeV);
191  fTheNeutronInelastic.RegisterMe(theHPNeutronInelasticModel);
192  G4NeutronHPInelasticData * theNeutronData1 = new G4NeutronHPInelasticData;
193  fTheNeutronInelastic.AddDataSet(theNeutronData1);
194  // binary
195  G4BinaryCascade * neutronBC = new G4BinaryCascade;
196  neutronBC->SetMinEnergy(19.*MeV);
197  neutronBC->SetMaxEnergy(10.5*GeV);
198  fTheNeutronInelastic.RegisterMe(neutronBC);
199  // higher energy
200  fTheNeutronInelastic.RegisterMe(theTheoModel);
201  // now the cross-sections.
202  G4NeutronInelasticCrossSection * theNeutronData2 =
204  fTheNeutronInelastic.AddDataSet(theNeutronData2);
206 
207  // fission
209  G4LFission* theFissionModel = new G4LFission;
210  fTheFissionProcess->RegisterMe(theFissionModel);
212 
213  //capture
215  G4NeutronRadCapture* theCaptureModel = new G4NeutronRadCapture;
216  theCaptureModel->SetMinEnergy(19.*MeV);
217  fTheCaptureProcess->RegisterMe(theCaptureModel);
219 
220  G4NeutronHPCapture * theHPNeutronCaptureModel = new G4NeutronHPCapture;
221  fTheCaptureProcess->RegisterMe(theHPNeutronCaptureModel);
222  G4NeutronHPCaptureData * theNeutronData3 = new G4NeutronHPCaptureData;
223  fTheCaptureProcess->AddDataSet(theNeutronData3);
225 
226  // now light ions
227  // light Ion BC
229  theIonBC->SetMinEnergy(1*MeV);
230  theIonBC->SetMaxEnergy(20*GeV);
231  G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection;
233 
234  // deuteron
235  pManager = G4Deuteron::Deuteron()->GetProcessManager();
237  fTheDeuteronInelasticProcess->AddDataSet(TripathiCrossSection);
242 
243  // triton
244  pManager = G4Triton::Triton()->GetProcessManager();
246  fTheTritonInelasticProcess->AddDataSet(TripathiCrossSection);
249  fTheTritonInelasticProcess->RegisterMe(theTheoModel);
251 
252  // alpha
253  pManager = G4Alpha::Alpha()->GetProcessManager();
255  fTheAlphaInelasticProcess->AddDataSet(TripathiCrossSection);
258  fTheAlphaInelasticProcess->RegisterMe(theTheoModel);
260 
261  // Generic ion elastic
262  G4NuclNuclDiffuseElastic* ionElasticModel = new G4NuclNuclDiffuseElastic;
264  ionElasticProcess.RegisterMe(ionElasticModel);
265  ionElasticProcess.AddDataSet(ionElasticXS);
268 
269  // Generic ion inelastic
271  fTheIonInelasticProcess->AddDataSet(TripathiCrossSection);
274  fTheIonInelasticProcess->RegisterMe(theTheoModel);
276 }
static const double MeV
Definition: G4SIunits.hh:193
void SetFragmentationModel(G4VStringFragmentation *aModel)
exrdmPhysListHadron(const G4String &name="hadron")
G4String name
Definition: TRTMaterials.hh:40
Definition of the exrdmPhysListHadron class.
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
void SetMinEForMultiFrag(G4double anE)
G4NeutronInelasticProcess fTheNeutronInelastic
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
G4TritonInelasticProcess * fTheTritonInelasticProcess
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
G4HadronElasticProcess * fTheNeutronElasticProcess
void RegisterMe(G4HadronicInteraction *a)
void SetMinEnergy(G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
#define aParticleIterator
void SetFermiModel(G4VFermiBreakUp *ptr)
static G4Triton * Triton()
Definition: G4Triton.cc:95
static G4Proton * Proton()
Definition: G4Proton.cc:93
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
static const double GeV
Definition: G4SIunits.hh:196
G4DeuteronInelasticProcess * fTheDeuteronInelasticProcess
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4IonInelasticProcess * fTheIonInelasticProcess
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
G4AlphaInelasticProcess * fTheAlphaInelasticProcess
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:93
G4double GetPDGMass() const
G4HadronFissionProcess * fTheFissionProcess
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
void SetEvaporation(G4VEvaporation *ptr)
void SetMaxEnergy(const G4double anEnergy)
void SetDeExcitation(G4VPreCompoundModel *ptr)
void SetTransport(G4VIntraNuclearTransportModel *const value)
static const double TeV
Definition: G4SIunits.hh:197
G4HadronElasticProcess fTheElasticProcess
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
virtual void ConstructProcess()
G4ProtonInelasticProcess fTheProtonInelastic
G4HadronElasticProcess ionElasticProcess
virtual G4bool IsApplicable(const G4ParticleDefinition &)
Definition: G4VProcess.hh:205
G4HadronCaptureProcess * fTheCaptureProcess