source: trunk/examples/extended/radioactivedecay/exrdm/src/exrdmPhysListHadron.cc @ 1279

Last change on this file since 1279 was 1230, checked in by garnier, 14 years ago

update to geant4.9.3

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