Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 //
28 //
29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
30 
31 #include "exrdmPhysListHadron.hh"
32 
33 #include "G4ParticleDefinition.hh"
34 #include "G4ProcessManager.hh"
35 
36 #include "G4TheoFSGenerator.hh"
37 #include "G4ExcitationHandler.hh"
38 #include "G4Evaporation.hh"
39 #include "G4FermiBreakUp.hh"
40 #include "G4StatMF.hh"
42 #include "G4PreCompoundModel.hh"
43 #include "G4QGSModel.hh"
44 #include "G4QGSParticipants.hh"
45 #include "G4QGSMFragmentation.hh"
46 #include "G4ExcitedStringDecay.hh"
47 
48 #include "G4LElastic.hh"
49 #include "G4LFission.hh"
50 #include "G4LCapture.hh"
51 
52 #include "G4CascadeInterface.hh"
53 
54 #include "G4BinaryCascade.hh"
56 
57 //HPNeutron
58 
59 #include "G4NeutronHPElastic.hh"
61 #include "G4NeutronHPCapture.hh"
63 #include "G4NeutronHPInelastic.hh"
65 //c-s
70 
71 // RadioactiveDecay
72 #include "G4RadioactiveDecay.hh"
73 #include "G4GenericIon.hh"
74 
75 #include "G4SystemOfUnits.hh"
76 
77 
79  : G4VPhysicsConstructor(name),
80  fTheNeutronElasticProcess(0), fTheFissionProcess(0),
81  fTheCaptureProcess(0),fTheDeuteronInelasticProcess(0),
82  fTheTritonInelasticProcess(0), fTheAlphaInelasticProcess(0),
83  fTheIonInelasticProcess(0)
84 {}
85 
87 {}
88 
89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
91 {
92 
93  G4ProcessManager * pManager = 0;
94 
95  // this will be the model class for high energies
96  G4TheoFSGenerator * theTheoModel = new G4TheoFSGenerator;
97  // all models for treatment of thermal nucleus
98  G4Evaporation * theEvaporation = new G4Evaporation;
99  G4FermiBreakUp * theFermiBreakUp = new G4FermiBreakUp;
100  G4StatMF * theMF = new G4StatMF;
101  // Evaporation logic
102  G4ExcitationHandler * theHandler = new G4ExcitationHandler;
103  theHandler->SetEvaporation(theEvaporation);
104  theHandler->SetFermiModel(theFermiBreakUp);
105  theHandler->SetMultiFragmentation(theMF);
106  theHandler->SetMaxAandZForFermiBreakUp(12, 6);
107  theHandler->SetMinEForMultiFrag(5*MeV);
108  // Pre equilibrium stage
109  G4PreCompoundModel * thePreEquilib = new G4PreCompoundModel(theHandler);
110 
111  // a no-cascade generator-precompound interaface
113  theCascade->SetDeExcitation(thePreEquilib);
114 
115  // here come the high energy parts
116  // the string model; still not quite according to design
117  // - Explicite use of the forseen interfaces
118  G4VPartonStringModel * theStringModel;
119  theStringModel = new G4QGSModel<G4QGSParticipants>;
120  theTheoModel->SetTransport(theCascade);
121  theTheoModel->SetHighEnergyGenerator(theStringModel);
122  theTheoModel->SetMinEnergy(10*GeV); // 15 GeV may be the right limit
123  theTheoModel->SetMaxEnergy(100*TeV);
124 
125  G4VLongitudinalStringDecay * theFragmentation = new G4QGSMFragmentation;
126  G4ExcitedStringDecay * theStringDecay = new G4ExcitedStringDecay(theFragmentation);
127  theStringModel->SetFragmentationModel(theStringDecay);
128 
129  // Elastic Process
130 
131  fTheElasticProcess.RegisterMe(new G4LElastic());
132 
133  // ---------------------------------------------------------------------------
134  // Hadron elastic process
135  // for all particles except neutrons
136 
138  while( (*theParticleIterator)() ) {
140  G4String particleName = particle->GetParticleName();
141  if (particleName != "neutron") {
142  pManager = particle->GetProcessManager();
143  if (particle->GetPDGMass() > 110.*MeV && fTheElasticProcess.IsApplicable(*particle)
144  && !particle->IsShortLived()) {
145  pManager->AddDiscreteProcess(&fTheElasticProcess);
146  //
147  // G4cout << "### Elastic model are registered for "
148  // << particle->GetParticleName()
149  // << G4endl;
150  }
151  }
152  }
153  // Proton
154  pManager = G4Proton::Proton()->GetProcessManager();
155  // add inelastic process
156  // Binary Cascade
157  G4BinaryCascade * theBC = new G4BinaryCascade;
158  theBC->SetMaxEnergy(10.5*GeV);
159  fTheProtonInelastic.RegisterMe(theBC);
160  // Higher energy
161  fTheProtonInelastic.RegisterMe(theTheoModel);
162  // now the cross-sections.
164  fTheProtonInelastic.AddDataSet(theProtonData);
165  pManager->AddDiscreteProcess(&fTheProtonInelastic);
166  //
167  //
168  // Neutron
169  pManager = G4Neutron::Neutron()->GetProcessManager();
170  // add process
171  // elastic scattering
172  fTheNeutronElasticProcess =
174  G4LElastic* theElasticModel1 = new G4LElastic;
175  G4NeutronHPElastic * theElasticNeutron = new G4NeutronHPElastic;
176  fTheNeutronElasticProcess->RegisterMe(theElasticModel1);
177  theElasticModel1->SetMinEnergy(19.*MeV);
178  fTheNeutronElasticProcess->RegisterMe(theElasticNeutron);
179  theElasticNeutron->SetMaxEnergy(20.*MeV);
180 
181  G4NeutronHPElasticData * theNeutronData = new G4NeutronHPElasticData;
182  fTheNeutronElasticProcess->AddDataSet(theNeutronData);
183  pManager->AddDiscreteProcess(fTheNeutronElasticProcess);
184  // inelastic
185  G4NeutronHPInelastic * theHPNeutronInelasticModel =
187  theHPNeutronInelasticModel->SetMaxEnergy(20.*MeV);
188  fTheNeutronInelastic.RegisterMe(theHPNeutronInelasticModel);
189  G4NeutronHPInelasticData * theNeutronData1 = new G4NeutronHPInelasticData;
190  fTheNeutronInelastic.AddDataSet(theNeutronData1);
191  // binary
192  G4BinaryCascade * neutronBC = new G4BinaryCascade;
193  neutronBC->SetMinEnergy(19.*MeV);
194  neutronBC->SetMaxEnergy(10.5*GeV);
195  fTheNeutronInelastic.RegisterMe(neutronBC);
196  // higher energy
197  fTheNeutronInelastic.RegisterMe(theTheoModel);
198  // now the cross-sections.
200  fTheNeutronInelastic.AddDataSet(theNeutronData2);
201  pManager->AddDiscreteProcess(&fTheNeutronInelastic);
202  // fission
203  fTheFissionProcess =
205  G4LFission* theFissionModel = new G4LFission;
206  fTheFissionProcess->RegisterMe(theFissionModel);
207  pManager->AddDiscreteProcess(fTheFissionProcess);
208  //capture
209  fTheCaptureProcess =
211  G4LCapture* theCaptureModel = new G4LCapture;
212  fTheCaptureProcess->RegisterMe(theCaptureModel);
213  theCaptureModel->SetMinEnergy(19.*MeV);
214  G4NeutronHPCapture * theHPNeutronCaptureModel = new G4NeutronHPCapture;
215  fTheCaptureProcess->RegisterMe(theHPNeutronCaptureModel);
216  G4NeutronHPCaptureData * theNeutronData3 = new G4NeutronHPCaptureData;
217  fTheCaptureProcess->AddDataSet(theNeutronData3);
218  pManager->AddDiscreteProcess(fTheCaptureProcess);
219 
220  // now light ions
221  // light Ion BC
223  theIonBC->SetMinEnergy(1*MeV);
224  theIonBC->SetMaxEnergy(20*GeV);
225  G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection;
227 
228  // deuteron
229  pManager = G4Deuteron::Deuteron()->GetProcessManager();
230  fTheDeuteronInelasticProcess =
231  new G4DeuteronInelasticProcess("inelastic");
232  // G4LEDeuteronInelastic* theDeuteronInelasticModel =
233  // new G4LEDeuteronInelastic;
234  // theDeuteronInelasticModel->SetMaxEnergy(100*MeV);
235  fTheDeuteronInelasticProcess->AddDataSet(TripathiCrossSection);
236  fTheDeuteronInelasticProcess->AddDataSet(aShen);
237  // fTheDeuteronInelasticProcess->RegisterMe(theDeuteronInelasticModel);
238  fTheDeuteronInelasticProcess->RegisterMe(theIonBC);
239  fTheDeuteronInelasticProcess->RegisterMe(theTheoModel);
240  pManager->AddDiscreteProcess(fTheDeuteronInelasticProcess);
241  // triton
242  pManager = G4Triton::Triton()->GetProcessManager();
243  fTheTritonInelasticProcess =
244  new G4TritonInelasticProcess("inelastic");
245  // G4LETritonInelastic* theTritonInelasticModel =
246  // new G4LETritonInelastic;
247  //theTritonInelasticModel->SetMaxEnergy(100*MeV);
248  fTheTritonInelasticProcess->AddDataSet(TripathiCrossSection);
249  fTheTritonInelasticProcess->AddDataSet(aShen);
250  // fTheTritonInelasticProcess->RegisterMe(theTritonInelasticModel);
251  fTheTritonInelasticProcess->RegisterMe(theIonBC);
252  fTheTritonInelasticProcess->RegisterMe(theTheoModel);
253  pManager->AddDiscreteProcess(fTheTritonInelasticProcess);
254  // alpha
255  pManager = G4Alpha::Alpha()->GetProcessManager();
256  fTheAlphaInelasticProcess =
257  new G4AlphaInelasticProcess("inelastic");
258  // G4LEAlphaInelastic* theAlphaInelasticModel =
259  // new G4LEAlphaInelastic;
260  //theAlphaInelasticModel->SetMaxEnergy(100*MeV);
261  fTheAlphaInelasticProcess->AddDataSet(TripathiCrossSection);
262  fTheAlphaInelasticProcess->AddDataSet(aShen);
263  // fTheAlphaInelasticProcess->RegisterMe(theAlphaInelasticModel);
264  fTheAlphaInelasticProcess->RegisterMe(theIonBC);
265  fTheAlphaInelasticProcess->RegisterMe(theTheoModel);
266  pManager->AddDiscreteProcess(fTheAlphaInelasticProcess);
267 
268  // GenericIon
270  // need to add the elastic explicitly
271  pManager->AddDiscreteProcess(&fTheElasticProcess);
272  fTheIonInelasticProcess =
273  new G4IonInelasticProcess();
274  fTheIonInelasticProcess->AddDataSet(TripathiCrossSection);
275  fTheIonInelasticProcess->AddDataSet(aShen);
276  // G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
277  // theGenIonBC->SetMinEnergy(0*MeV);
278  //theGenIonBC->SetMaxEnergy(20*GeV);
279  fTheIonInelasticProcess->RegisterMe(theIonBC);
280  fTheIonInelasticProcess->RegisterMe(theTheoModel);
281  pManager->AddDiscreteProcess(fTheIonInelasticProcess);
282 }