source: trunk/examples/extended/radioactivedecay/exrdm/src/exrdmPhysicsList.cc@ 1330

Last change on this file since 1330 was 1230, checked in by garnier, 16 years ago

update to geant4.9.3

File size: 8.3 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 "exrdmPhysicsList.hh"
29#include "exrdmPhysicsListMessenger.hh"
30
31#include "exrdmPhysListParticles.hh"
32#include "G4EmStandardPhysics.hh"
33#include "exrdmPhysListEmLowEnergy.hh"
34#include "exrdmPhysListHadron.hh"
35#include "G4RegionStore.hh"
36#include "G4Region.hh"
37#include "G4ProductionCuts.hh"
38#include "G4ProcessManager.hh"
39#include "G4ParticleTypes.hh"
40#include "G4ParticleTable.hh"
41
42#include "G4Gamma.hh"
43#include "G4Electron.hh"
44#include "G4Positron.hh"
45
46#include "G4UnitsTable.hh"
47#include "G4LossTableManager.hh"
48
49#include "HadronPhysicsQGSP_BERT.hh"
50#include "HadronPhysicsQGSP_BIC.hh"
51#include "HadronPhysicsQGSP_BERT_HP.hh"
52#include "HadronPhysicsQGSP_BIC_HP.hh"
53
54#include "G4EmExtraPhysics.hh"
55#include "G4HadronElasticPhysics.hh"
56#include "G4QStoppingPhysics.hh"
57#include "G4IonBinaryCascadePhysics.hh"
58#include "G4RadioactiveDecayPhysics.hh"
59#include "G4NeutronTrackingCut.hh"
60#include "G4DecayPhysics.hh"
61
62//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
63
64exrdmPhysicsList::exrdmPhysicsList() : G4VModularPhysicsList()
65{
66 G4LossTableManager::Instance();
67 defaultCutValue = 1.*mm;
68 cutForGamma = defaultCutValue;
69 cutForElectron = defaultCutValue;
70 cutForPositron = defaultCutValue;
71
72 DetectorCuts = 0;
73 TargetCuts = 0;
74
75 pMessenger = new exrdmPhysicsListMessenger(this);
76
77 SetVerboseLevel(1);
78
79 //default physics
80 particleList = new G4DecayPhysics();
81
82 //default physics
83 raddecayList = new G4RadioactiveDecayPhysics();
84
85 // EM physics
86 emPhysicsList = new G4EmStandardPhysics();
87
88 // Had physics
89 hadPhysicsList = 0;
90 nhadcomp = 0;
91
92}
93
94//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
95
96exrdmPhysicsList::~exrdmPhysicsList()
97{
98 delete pMessenger;
99 delete raddecayList;
100 delete emPhysicsList;
101 if (hadPhysicsList) delete hadPhysicsList;
102 if (nhadcomp > 0) {
103 for(G4int i=0; i<nhadcomp; i++) {
104 delete hadronPhys[i];
105 }
106 }
107}
108
109//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
110
111void exrdmPhysicsList::ConstructParticle()
112{
113 particleList->ConstructParticle();
114}
115
116//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
117
118void exrdmPhysicsList::ConstructProcess()
119{
120 AddTransportation();
121 // em
122 emPhysicsList->ConstructProcess();
123 // decays
124 particleList->ConstructProcess();
125 raddecayList->ConstructProcess();
126 // had
127 if (nhadcomp > 0) {
128 for(G4int i=0; i<nhadcomp; i++) {
129 (hadronPhys[i])->ConstructProcess();
130 }
131 }
132 if (hadPhysicsList) hadPhysicsList->ConstructProcess();
133 G4cout << "### exrdmPhysicsList::ConstructProcess is done" << G4endl;
134
135}
136
137//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
138
139void exrdmPhysicsList::SelectPhysicsList(const G4String& name)
140{
141 if (verboseLevel>1) {
142 G4cout << "exrdmPhysicsList::SelectPhysicsList: <" << name << ">" << G4endl;
143 }
144 // default Had physics
145 if (name == "Hadron" && !hadPhysicsList) {
146 hadPhysicsList = new exrdmPhysListHadron("hadron");
147 } else if (name == "QGSP_BERT") {
148 AddExtraBuilders(false);
149 hadPhysicsList = new HadronPhysicsQGSP_BERT("std-hadron");
150 } else if (name == "QGSP_BIC" && !hadPhysicsList) {
151 AddExtraBuilders(false);
152 hadPhysicsList = new HadronPhysicsQGSP_BIC("std-hadron");
153 } else if (name == "QGSP_BERT_HP" && !hadPhysicsList) {
154 AddExtraBuilders(true);
155 hadPhysicsList = new HadronPhysicsQGSP_BERT_HP("std-hadron");
156 } else if (name == "QGSP_BIC_HP" && !hadPhysicsList) {
157 AddExtraBuilders(true);
158 hadPhysicsList = new HadronPhysicsQGSP_BIC_HP("std-hadron");
159 } else if (name == "LowEnergy_EM") {
160 delete emPhysicsList;
161 emPhysicsList = new exrdmPhysListEmLowEnergy("lowe-em");
162 } else if (name == "Standard_EM") {
163 delete emPhysicsList;
164 emPhysicsList = new G4EmStandardPhysics();
165 } else {
166 G4cout << "exrdmPhysicsList WARNING wrong or unkonwn <"
167 << name << "> Physics " << G4endl;
168 }
169}
170
171//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
172
173void exrdmPhysicsList::AddExtraBuilders(G4bool flagHP)
174{
175 nhadcomp = 5;
176 hadronPhys.push_back( new G4EmExtraPhysics("extra EM"));
177 hadronPhys.push_back( new G4HadronElasticPhysics("elastic",verboseLevel,
178 flagHP));
179 hadronPhys.push_back( new G4QStoppingPhysics("stopping",verboseLevel));
180 hadronPhys.push_back( new G4IonBinaryCascadePhysics("ionBIC"));
181 hadronPhys.push_back( new G4NeutronTrackingCut("Neutron tracking cut"));
182}
183
184//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
185
186void exrdmPhysicsList::SetCuts()
187{
188 SetCutValue(cutForGamma, "gamma");
189 SetCutValue(cutForElectron, "e-");
190 SetCutValue(cutForPositron, "e+");
191 G4cout << "world cuts are set" << G4endl;
192
193 if( !TargetCuts ) SetTargetCut(cutForElectron);
194 G4Region* region = (G4RegionStore::GetInstance())->GetRegion("Target");
195 region->SetProductionCuts(TargetCuts);
196 G4cout << "Target cuts are set" << G4endl;
197
198 if( !DetectorCuts ) SetDetectorCut(cutForElectron);
199 region = (G4RegionStore::GetInstance())->GetRegion("Detector");
200 region->SetProductionCuts(DetectorCuts);
201 G4cout << "Detector cuts are set" << G4endl;
202
203 if (verboseLevel>0) DumpCutValuesTable();
204}
205
206//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
207
208void exrdmPhysicsList::SetCutForGamma(G4double cut)
209{
210 cutForGamma = cut;
211 SetParticleCuts(cutForGamma, G4Gamma::Gamma());
212}
213
214//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
215
216void exrdmPhysicsList::SetCutForElectron(G4double cut)
217{
218 cutForElectron = cut;
219 SetParticleCuts(cutForElectron, G4Electron::Electron());
220}
221
222//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
223
224void exrdmPhysicsList::SetCutForPositron(G4double cut)
225{
226 cutForPositron = cut;
227 SetParticleCuts(cutForPositron, G4Positron::Positron());
228}
229
230//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
231
232void exrdmPhysicsList::SetTargetCut(G4double cut)
233{
234 if( !TargetCuts ) TargetCuts = new G4ProductionCuts();
235
236 TargetCuts->SetProductionCut(cut, idxG4GammaCut);
237 TargetCuts->SetProductionCut(cut, idxG4ElectronCut);
238 TargetCuts->SetProductionCut(cut, idxG4PositronCut);
239
240}
241
242//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
243
244void exrdmPhysicsList::SetDetectorCut(G4double cut)
245{
246 if( !DetectorCuts ) DetectorCuts = new G4ProductionCuts();
247
248 DetectorCuts->SetProductionCut(cut, idxG4GammaCut);
249 DetectorCuts->SetProductionCut(cut, idxG4ElectronCut);
250 DetectorCuts->SetProductionCut(cut, idxG4PositronCut);
251}
252
253//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Note: See TracBrowser for help on using the repository browser.