source: trunk/examples/advanced/microbeam/src/MicrobeamPhysicsList.cc@ 1218

Last change on this file since 1218 was 807, checked in by garnier, 17 years ago

update

  • Property svn:executable set to *
File size: 10.0 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// -------------------------------------------------------------------
27// $Id: MicrobeamPhysicsList.cc,v 1.6 2006/11/23 12:24:20 sincerti Exp $
28// -------------------------------------------------------------------
29
30#include "G4ParticleDefinition.hh"
31#include "G4ProcessManager.hh"
32#include "G4ParticleTypes.hh"
33#include "G4StepLimiter.hh"
34#include "G4BaryonConstructor.hh"
35#include "G4IonConstructor.hh"
36#include "G4MesonConstructor.hh"
37
38#include "MicrobeamPhysicsList.hh"
39
40//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
41
42MicrobeamPhysicsList::MicrobeamPhysicsList(): G4VUserPhysicsList()
43{
44 defaultCutValue = 0.01*micrometer;
45 cutForGamma = defaultCutValue;
46 cutForElectron = defaultCutValue;
47 cutForPositron = defaultCutValue;
48 SetVerboseLevel(1);
49}
50
51//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
52
53MicrobeamPhysicsList::~MicrobeamPhysicsList()
54{}
55
56//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
57
58void MicrobeamPhysicsList::ConstructParticle()
59{
60 ConstructBosons();
61 ConstructLeptons();
62 ConstructBaryons();
63}
64
65//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
66
67void MicrobeamPhysicsList::ConstructBosons()
68{
69 // gamma
70 G4Gamma::GammaDefinition();
71
72 // optical photon
73 G4OpticalPhoton::OpticalPhotonDefinition();
74}
75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
76
77void MicrobeamPhysicsList::ConstructLeptons()
78{
79 // leptons
80 G4Electron::ElectronDefinition();
81 G4Positron::PositronDefinition();
82}
83
84//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
85
86void MicrobeamPhysicsList::ConstructBaryons()
87{
88 // baryons
89 G4BaryonConstructor bConstructor;
90 bConstructor.ConstructParticle();
91
92 G4IonConstructor iConstructor;
93 iConstructor.ConstructParticle();
94
95 G4MesonConstructor mConstructor;
96 mConstructor.ConstructParticle();
97}
98
99//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
100
101void MicrobeamPhysicsList::ConstructProcess()
102{
103 AddTransportation();
104 ConstructEM();
105 ConstructHad();
106 ConstructGeneral();
107}
108
109#include "G4MultipleScattering.hh"
110#include "G4eIonisation.hh"
111#include "G4eBremsstrahlung.hh"
112#include "G4eplusAnnihilation.hh"
113
114#include "G4MuIonisation.hh"
115#include "G4MuBremsstrahlung.hh"
116#include "G4MuPairProduction.hh"
117
118#include "G4LowEnergyPhotoElectric.hh"
119#include "G4LowEnergyCompton.hh"
120#include "G4LowEnergyGammaConversion.hh"
121#include "G4LowEnergyRayleigh.hh"
122
123#include "G4LowEnergyIonisation.hh"
124#include "G4LowEnergyBremsstrahlung.hh"
125
126#include "G4hLowEnergyIonisation.hh"
127#include "G4hMultipleScattering.hh"
128
129
130//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131
132void MicrobeamPhysicsList::ConstructEM()
133{
134 theParticleIterator->reset();
135
136 while( (*theParticleIterator)() ){
137
138 G4ParticleDefinition* particle = theParticleIterator->value();
139 G4ProcessManager* pmanager = particle->GetProcessManager();
140 G4String particleName = particle->GetParticleName();
141
142 if (particleName == "gamma") {
143
144
145 pmanager->AddDiscreteProcess(new G4LowEnergyCompton);
146
147 G4LowEnergyPhotoElectric * LePeprocess = new G4LowEnergyPhotoElectric();
148 LePeprocess->ActivateAuger(true);
149 LePeprocess->SetCutForLowEnSecPhotons(0.250 * keV);
150 LePeprocess->SetCutForLowEnSecElectrons(0.250 * keV);
151 pmanager->AddDiscreteProcess(LePeprocess);
152
153 pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion());
154
155 pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh());
156
157 pmanager->AddProcess(new G4StepLimiter(), -1, -1, 3);
158
159
160 } else if (particleName == "e-") {
161
162 pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
163
164 G4LowEnergyIonisation * LeIoprocess = new G4LowEnergyIonisation("IONI");
165 LeIoprocess->ActivateAuger(true);
166 LeIoprocess->SetCutForLowEnSecPhotons(0.1*keV);
167 LeIoprocess->SetCutForLowEnSecElectrons(0.1*keV);
168 pmanager->AddProcess(LeIoprocess, -1, 2, 2);
169
170 G4LowEnergyBremsstrahlung * LeBrprocess = new G4LowEnergyBremsstrahlung();
171 pmanager->AddProcess(LeBrprocess, -1, -1, 3);
172 pmanager->AddProcess(new G4StepLimiter(), -1, -1, 3);
173
174 } else if (particleName == "e+") {
175
176 pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
177
178 pmanager->AddProcess(new G4eIonisation, -1, 2,2);
179
180 pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3);
181
182 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4);
183
184 pmanager->AddProcess(new G4StepLimiter(), -1, -1, 3);
185
186 } else if( particleName == "mu+" ||
187 particleName == "mu-" ) {
188
189 } else if ((!particle->IsShortLived()) &&
190 (particle->GetPDGCharge() != 0.0) &&
191 (particle->GetParticleName() != "chargedgeantino")) {
192
193 //pmanager->AddProcess(new G4MultipleScattering(),-1,1,1);
194 pmanager->AddProcess(new G4hMultipleScattering(),-1,1,1);
195
196 G4hLowEnergyIonisation* hLowEnergyIonisation = new G4hLowEnergyIonisation();
197 pmanager->AddProcess(hLowEnergyIonisation,-1,2,2);
198
199 hLowEnergyIonisation->SetElectronicStoppingPowerModel(particle,"ICRU_R49He");
200 hLowEnergyIonisation->SetNuclearStoppingOn();
201 hLowEnergyIonisation->SetNuclearStoppingPowerModel("ICRU_R49");
202 hLowEnergyIonisation->SetFluorescence(true);
203 hLowEnergyIonisation->ActivateAugerElectronProduction(true);
204
205 pmanager->AddProcess(new G4StepLimiter(), -1, -1, 3);
206
207 }
208
209//end
210
211 }
212}
213
214//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
215
216#include "G4HadronElasticProcess.hh"
217#include "G4LElastic.hh"
218
219#include "G4AlphaInelasticProcess.hh"
220#include "G4BinaryLightIonReaction.hh"
221#include "G4TripathiCrossSection.hh"
222#include "G4IonsShenCrossSection.hh"
223#include "G4LEAlphaInelastic.hh"
224
225void MicrobeamPhysicsList::ConstructHad()
226{
227
228 G4HadronElasticProcess * theElasticProcess = new G4HadronElasticProcess;
229 theElasticProcess->RegisterMe( new G4LElastic() );
230
231 theParticleIterator->reset();
232 while( (*theParticleIterator)() )
233 {
234 G4ParticleDefinition* particle = theParticleIterator->value();
235 G4ProcessManager* pManager = particle->GetProcessManager();
236
237 if (particle->GetParticleName() == "alpha")
238 {
239
240 // INELASTIC SCATTERING
241 // Binary Cascade
242 G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction();
243 theBC -> SetMinEnergy(80.*MeV);
244 theBC -> SetMaxEnergy(40.*GeV);
245
246 // TRIPATHI CROSS SECTION
247 // Implementation of formulas in analogy to NASA technical paper 3621 by
248 // Tripathi, et al. Cross-sections for ion ion scattering
249 G4TripathiCrossSection* TripathiCrossSection = new G4TripathiCrossSection;
250
251 // IONS SHEN CROSS SECTION
252 // Implementation of formulas
253 // Shen et al. Nuc. Phys. A 491 130 (1989)
254 // Total Reaction Cross Section for Heavy-Ion Collisions
255 G4IonsShenCrossSection* aShen = new G4IonsShenCrossSection;
256
257 // Final state production model for Alpha inelastic scattering below 20 GeV
258 G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic;
259 theAIModel -> SetMaxEnergy(100.*MeV);
260
261 G4AlphaInelasticProcess * theIPalpha = new G4AlphaInelasticProcess;
262 theIPalpha->AddDataSet(TripathiCrossSection);
263 theIPalpha->AddDataSet(aShen);
264
265 // Register the Alpha Inelastic and Binary Cascade Model
266 theIPalpha->RegisterMe(theAIModel);
267 theIPalpha->RegisterMe(theBC);
268
269 // Activate the alpha inelastic scattering using the alpha inelastic and binary cascade model
270 pManager -> AddDiscreteProcess(theIPalpha);
271
272 // Activate the Hadron Elastic Process
273 pManager -> AddDiscreteProcess(theElasticProcess);
274
275 }
276 }
277
278}
279
280//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
281
282void MicrobeamPhysicsList::ConstructGeneral()
283{ }
284
285//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
286
287void MicrobeamPhysicsList::SetCuts()
288{
289 if (verboseLevel >0){
290 G4cout << "MicrobeamPhysicsList::SetCuts:";
291 G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
292 }
293
294 // set cut values for gamma at first and for e- second and next for e+,
295 // because some processes for e+/e- need cut values for gamma
296 SetCutValue(cutForGamma, "gamma");
297 SetCutValue(cutForElectron, "e-");
298 SetCutValue(cutForPositron, "e+");
299
300 if (verboseLevel>0) DumpCutValuesTable();
301
302}
303
Note: See TracBrowser for help on using the repository browser.