Geant4  10.00.p01
PhysicsList.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 // This example is provided by the Geant4-DNA collaboration
27 // Any report or published results obtained using the Geant4-DNA software
28 // shall cite the following Geant4-DNA collaboration publication:
29 // Med. Phys. 37 (2010) 4692-4708
30 // The Geant4-DNA web site is available at http://geant4-dna.org
31 //
32 
33 #include "PhysicsList.hh"
34 #include "G4SystemOfUnits.hh"
35 
36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
37 
39 {
45 
46  SetVerboseLevel(1);
47 }
48 
49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
50 
52 {}
53 
54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
55 
57 {
61 }
62 
63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
64 
66 {
67  // gamma
69 }
70  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
71 
73 {
74  // leptons
77 }
78 
79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
80 
81 //DNA
83 //ENDDNA
84 
86 {
87  // baryons
90 
91  // Geant4 DNA new particles
92  G4DNAGenericIonsManager * genericIonsManager;
93  genericIonsManager=G4DNAGenericIonsManager::Instance();
94  genericIonsManager->GetIon("alpha++");
95  genericIonsManager->GetIon("alpha+");
96  genericIonsManager->GetIon("helium");
97  genericIonsManager->GetIon("hydrogen");
98 }
99 
100 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
101 
103 {
105  ConstructEM();
107 }
108 
109 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
110 
111 // Geant4-DNA MODELS
112 
113 #include "G4DNAElastic.hh"
116 
117 #include "G4DNAExcitation.hh"
120 
121 #include "G4DNAIonisation.hh"
124 
125 #include "G4DNAChargeDecrease.hh"
127 
128 #include "G4DNAChargeIncrease.hh"
130 
131 #include "G4DNAAttachment.hh"
133 
134 #include "G4DNAVibExcitation.hh"
136 
137 //
138 
139 #include "G4LossTableManager.hh"
140 #include "G4EmConfigurator.hh"
141 #include "G4VEmModel.hh"
142 #include "G4DummyModel.hh"
143 #include "G4eIonisation.hh"
144 #include "G4hIonisation.hh"
145 #include "G4ionIonisation.hh"
146 #include "G4eMultipleScattering.hh"
147 #include "G4hMultipleScattering.hh"
148 #include "G4BraggIonGasModel.hh"
150 #include "G4UrbanMscModel.hh"
151 #include "G4MollerBhabhaModel.hh"
152 #include "G4IonFluctuations.hh"
153 #include "G4UniversalFluctuation.hh"
154 
155 #include "G4ElectronCapture.hh"
156 
157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
158 
160 {
161 
162  theParticleIterator->reset();
163 
164  while( (*theParticleIterator)() )
165  {
166 
167  G4ParticleDefinition* particle = theParticleIterator->value();
168  G4ProcessManager* pmanager = particle->GetProcessManager();
169  G4String particleName = particle->GetParticleName();
170 
171  // *********************************
172  // 1) Processes for the World region
173  // *********************************
174 
175  if (particleName == "e-") {
176 
177  // STANDARD msc is active in the world
179  pmanager->AddProcess(msc, -1, 1, 1);
180 
181  // STANDARD ionisation is active in the world
182  G4eIonisation* eion = new G4eIonisation();
183  eion->SetEmModel(new G4MollerBhabhaModel(), 1);
184  pmanager->AddProcess(eion, -1, 2, 2);
185 
186  // DNA elastic is not active in the world
187  G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
188  theDNAElasticProcess->SetEmModel(new G4DummyModel(),1);
189  pmanager->AddDiscreteProcess(theDNAElasticProcess);
190 
191  // DNA excitation is not active in the world
192  G4DNAExcitation* dnaex = new G4DNAExcitation("e-_G4DNAExcitation");
193  dnaex->SetEmModel(new G4DummyModel(),1);
194  pmanager->AddDiscreteProcess(dnaex);
195 
196  // DNA ionisation is not active in the world
197  G4DNAIonisation* dnaioni = new G4DNAIonisation("e-_G4DNAIonisation");
198  dnaioni->SetEmModel(new G4DummyModel(),1);
199  pmanager->AddDiscreteProcess(dnaioni);
200 
201  // DNA attachment is not active in the world
202  G4DNAAttachment* dnaatt = new G4DNAAttachment("e-_G4DNAAttachment");
203  dnaatt->SetEmModel(new G4DummyModel(),1);
204  pmanager->AddDiscreteProcess(dnaatt);
205 
206  // DNA vib. excitation is not active in the world
207  G4DNAVibExcitation* dnavib = new G4DNAVibExcitation("e-_G4DNAVibExcitation");
208  dnavib->SetEmModel(new G4DummyModel(),1);
209  pmanager->AddDiscreteProcess(dnavib);
210 
211  // THE FOLLOWING PROCESS WILL KILL ALL ELECTRONS BELOW A SELECTED ENERY THRESHOLD
212  // Capture of low-energy e-
213  G4ElectronCapture* ecap = new G4ElectronCapture("Target", 5.1*eV);
214  pmanager->AddDiscreteProcess(ecap);
215 
216  } else if ( particleName == "proton" ) {
217 
218  // STANDARD msc is active in the world
220  pmanager->AddProcess(msc, -1, 1, 1);
221 
222  // STANDARD ionisation is active in the world
223  G4hIonisation* hion = new G4hIonisation();
224  hion->SetEmModel(new G4BraggIonGasModel(), 1);
225  hion->SetEmModel(new G4BetheBlochIonGasModel(), 2);
226  pmanager->AddProcess(hion, -1, 2, 2);
227 
228  // DNA excitation is not active in the world
229  G4DNAExcitation* dnaex = new G4DNAExcitation("proton_G4DNAExcitation");
230  dnaex->SetEmModel(new G4DummyModel(),1);
231  dnaex->SetEmModel(new G4DummyModel(),2);
232  pmanager->AddDiscreteProcess(dnaex);
233 
234  // DNA ionisation is not active in the world
235  G4DNAIonisation* dnaioni = new G4DNAIonisation("proton_G4DNAIonisation");
236  dnaioni->SetEmModel(new G4DummyModel(),1);
237  dnaioni->SetEmModel(new G4DummyModel(),2);
238  pmanager->AddDiscreteProcess(dnaioni);
239 
240  // DNA charge decrease is ACTIVE in the world since no corresponding STANDARD process exist
241  pmanager->AddDiscreteProcess(new G4DNAChargeDecrease("proton_G4DNAChargeDecrease"));
242 
243  } else if ( particleName == "hydrogen" ) {
244 
245  // DNA processes are ACTIVE in the world since no corresponding STANDARD processes exist
246  pmanager->AddDiscreteProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"));
247  pmanager->AddDiscreteProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"));
248  pmanager->AddDiscreteProcess(new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease"));
249 
250  } else if (particleName == "GenericIon") { // THIS IS NEEDED FOR STANDARD ALPHA G4ionIonisation PROCESS
251 
252  // STANDARD msc is active in the world
253  pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
254 
255  // STANDARD ionisation is active in the world
256  G4ionIonisation* hion = new G4ionIonisation();
257  hion->SetEmModel(new G4BraggIonGasModel(),1);
258  hion->SetEmModel(new G4BetheBlochIonGasModel(), 2);
259  pmanager->AddProcess(hion, -1, 2, 2);
260 
261  } else if ( particleName == "alpha" ) {
262 
263  // STANDARD msc is active in the world
265  pmanager->AddProcess(msc, -1, 1, 1);
266 
267  // STANDARD ionisation is active in the world
268  G4ionIonisation* hion = new G4ionIonisation();
269  hion->SetEmModel(new G4BraggIonGasModel(),1);
270  hion->SetEmModel(new G4BetheBlochIonGasModel(), 2);
271  pmanager->AddProcess(hion, -1, 2, 2);
272 
273  // DNA excitation is not active in the world
274  G4DNAExcitation* dnaex = new G4DNAExcitation("alpha_G4DNAExcitation");
275  dnaex->SetEmModel(new G4DummyModel(),1);
276  pmanager->AddDiscreteProcess(dnaex);
277 
278  // DNA ionisation is not active in the world
279  G4DNAIonisation* dnaioni = new G4DNAIonisation("alpha_G4DNAIonisation");
280  dnaioni->SetEmModel(new G4DummyModel(),1);
281  pmanager->AddDiscreteProcess(dnaioni);
282 
283  // DNA charge decrease is ACTIVE in the world since no corresponding STANDARD process exist
284  pmanager->AddDiscreteProcess(new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease"));
285 
286  } else if ( particleName == "alpha+" ) {
287 
288  // DNA processes are ACTIVE in the world since no corresponding STANDARD processes exist
289  pmanager->AddDiscreteProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"));
290  pmanager->AddDiscreteProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"));
291  pmanager->AddDiscreteProcess(new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease"));
292  pmanager->AddDiscreteProcess(new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease"));
293 
294  } else if ( particleName == "helium" ) {
295 
296  // DNA processes are ACTIVE in the world since no corresponding STANDARD processes exist
297  pmanager->AddDiscreteProcess(new G4DNAExcitation("helium_G4DNAExcitation"));
298  pmanager->AddDiscreteProcess(new G4DNAIonisation("helium_G4DNAIonisation"));
299  pmanager->AddDiscreteProcess(new G4DNAChargeIncrease("helium_G4DNAChargeIncrease"));
300 
301  }
302  }
303 
304  // **************************************
305  // 2) Define processes for Target region
306  // **************************************
307 
308  // STANDARD EM processes should be inactivated when corresponding DNA processes are used
309  // - STANDARD EM e- processes are inactivated below 1 MeV
310  // - STANDARD EM proton & alpha processes are inactivated below standEnergyLimit
311  G4double standEnergyLimit = 9.9*MeV;
312  //
313 
314  G4double massFactor = 1.0079/4.0026;
316 
317  G4VEmModel* mod;
318 
319  // *** e-
320 
321  // ---> STANDARD EM processes are inactivated below 1 MeV
322 
323  mod = new G4UrbanMscModel();
325  em_config->SetExtraEmModel("e-","msc",mod,"Target");
326 
327  mod = new G4MollerBhabhaModel();
329  em_config->SetExtraEmModel("e-","eIoni",mod,"Target",0.0,100*TeV, new G4UniversalFluctuation());
330 
331  // ---> DNA processes activated
332 
333  mod = new G4DNAChampionElasticModel();
334  em_config->SetExtraEmModel("e-","e-_G4DNAElastic",mod,"Target",0.0,1*MeV);
335 
336  mod = new G4DNABornIonisationModel();
337  em_config->SetExtraEmModel("e-","e-_G4DNAIonisation",mod,"Target",11*eV,1*MeV);
338 
339  mod = new G4DNABornExcitationModel();
340  em_config->SetExtraEmModel("e-","e-_G4DNAExcitation",mod,"Target",9*eV,1*MeV);
341 
342  mod = new G4DNAMeltonAttachmentModel();
343  em_config->SetExtraEmModel("e-","e-_G4DNAAttachment",mod,"Target",4*eV,13*eV);
344 
345  mod = new G4DNASancheExcitationModel();
346  em_config->SetExtraEmModel("e-","e-_G4DNAVibExcitation",mod,"Target",2*eV,100*eV);
347 
348  // *** proton
349 
350  // ---> STANDARD EM processes inactivated below standEnergyLimit
351 
352  // STANDARD msc is still active
353  // Inactivate following STANDARD processes
354 
355  mod = new G4BraggIonGasModel();
356  mod->SetActivationLowEnergyLimit(standEnergyLimit);
357  em_config->SetExtraEmModel("proton","hIoni",mod,"Target",0.0,2*MeV, new G4IonFluctuations());
358 
359  mod = new G4BetheBlochIonGasModel();
360  mod->SetActivationLowEnergyLimit(standEnergyLimit);
361  em_config->SetExtraEmModel("proton","hIoni",mod,"Target",2*MeV,100*TeV, new G4UniversalFluctuation());
362 
363  // ---> DNA processes activated
364 
365  mod = new G4DNARuddIonisationModel();
366  em_config->SetExtraEmModel("proton","proton_G4DNAIonisation",mod,"Target",0.0,0.5*MeV);
367 
368  mod = new G4DNABornIonisationModel();
369  em_config->SetExtraEmModel("proton","proton_G4DNAIonisation",mod,"Target",0.5*MeV,10*MeV);
370 
372  em_config->SetExtraEmModel("proton","proton_G4DNAExcitation",mod,"Target",10*eV,0.5*MeV);
373 
374  mod = new G4DNABornExcitationModel();
375  em_config->SetExtraEmModel("proton","proton_G4DNAExcitation",mod,"Target",0.5*MeV,10*MeV);
376 
377  // *** alpha
378 
379  // ---> STANDARD EM processes inactivated below standEnergyLimit
380 
381  // STANDARD msc is still active
382  // Inactivate following STANDARD processes
383 
384  mod = new G4BraggIonGasModel();
385  mod->SetActivationLowEnergyLimit(standEnergyLimit);
386  em_config->SetExtraEmModel("alpha","ionIoni",mod,"Target",0.0,2*MeV/massFactor, new G4IonFluctuations());
387 
388  mod = new G4BetheBlochIonGasModel();
389  mod->SetActivationLowEnergyLimit(standEnergyLimit);
390  em_config->SetExtraEmModel("alpha","ionIoni",mod,"Target",2*MeV/massFactor,100*TeV, new G4UniversalFluctuation());
391 
392  // ---> DNA processes activated
393 
394  mod = new G4DNARuddIonisationModel();
395  em_config->SetExtraEmModel("alpha","alpha_G4DNAIonisation",mod,"Target",0.0,10*MeV);
396 
398  em_config->SetExtraEmModel("alpha","alpha_G4DNAExcitation",mod,"Target",1*keV,10*MeV);
399 
400 }
401 
402 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
403 
405 { }
406 
407 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
408 
410 {
411  if (verboseLevel >0)
412  {
413  G4cout << "PhysicsList::SetCuts:";
414  G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
415  }
416 
417  // set cut values for gamma at first and for e- second and next for e+,
418  // because some processes for e+/e- need cut values for gamma
419  SetCutValue(cutForGamma, "gamma");
422  SetCutValue(cutForProton, "proton");
423 
424  if (verboseLevel>0) { DumpCutValuesTable(); }
425 }
G4EmConfigurator * EmConfigurator()
static G4Electron * ElectronDefinition()
Definition: G4Electron.cc:89
static G4GenericIon * GenericIonDefinition()
Definition: G4GenericIon.cc:88
void ConstructParticle()
Definition: PhysicsList.cc:117
static const double MeV
Definition: G4SIunits.hh:193
static G4LossTableManager * Instance()
void SetCutValue(G4double aCut, const G4String &pname)
void ConstructBosons()
Definition: PhysicsList.cc:65
void ConstructLeptons()
Definition: PhysicsList.cc:72
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
G4ProcessManager * GetProcessManager() const
G4EmConfigurator em_config
Definition: PhysicsList.hh:65
const G4String & GetParticleName() const
G4double cutForProton
Definition: PhysicsList.hh:76
G4double cutForElectron
Definition: PhysicsList.hh:64
void ConstructBarions()
Definition: PhysicsList.cc:85
void SetEmModel(G4VEmModel *, G4int index=1)
void DumpCutValuesTable(G4int flag=1)
G4GLOB_DLL std::ostream G4cout
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
static G4DNAGenericIonsManager * Instance(void)
void SetVerboseLevel(G4int value)
void SetCuts()
Definition: PhysicsList.cc:219
void SetActivationLowEnergyLimit(G4double)
Definition: G4VEmModel.hh:704
static G4Positron * PositronDefinition()
Definition: G4Positron.cc:89
static const double micrometer
Definition: G4SIunits.hh:90
static const double eV
Definition: G4SIunits.hh:194
G4double cutForGamma
Definition: PhysicsList.hh:63
void SetEmModel(G4VEmModel *, G4int index=1)
#define G4endl
Definition: G4ios.hh:61
static const double TeV
Definition: G4SIunits.hh:197
static const double keV
Definition: G4SIunits.hh:195
G4double cutForPositron
Definition: PhysicsList.hh:65
double G4double
Definition: G4Types.hh:76
void ConstructProcess()
Definition: PhysicsList.cc:170
void ConstructGeneral()
Definition: PhysicsList.cc:404
void ConstructEM()
Definition: PhysicsList.cc:120
void SetExtraEmModel(const G4String &particleName, const G4String &processName, G4VEmModel *, const G4String &regionName="", G4double emin=0.0, G4double emax=DBL_MAX, G4VEmFluctuationModel *fm=0)
#define theParticleIterator
G4ParticleDefinition * GetIon(const G4String &name)
static G4Gamma * GammaDefinition()
Definition: G4Gamma.cc:81