source: trunk/examples/extended/medical/fanoCavity2/src/PhysicsList.cc @ 807

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

update

File size: 7.8 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: PhysicsList.cc,v 1.1 2007/10/15 16:20:23 maire Exp $
28// GEANT4 tag $Name:  $
29//
30
31//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33
34#include "PhysicsList.hh"
35#include "PhysicsListMessenger.hh"
36#include "DetectorConstruction.hh"
37
38#include "G4ParticleDefinition.hh"
39#include "G4ParticleTypes.hh"
40#include "G4ParticleTable.hh"
41
42#include "G4ProcessManager.hh"
43#include "G4LossTableManager.hh"
44
45//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
46
47PhysicsList::PhysicsList(DetectorConstruction* det)
48: G4VUserPhysicsList(), detector(det)
49{
50  defaultCutValue = 10.*km;
51  singleScattering = false;
52  registerBrem = false;
53  pMessenger = new PhysicsListMessenger(this);
54  SetVerboseLevel(1);
55 
56  G4LossTableManager::Instance(); 
57}
58
59//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
60
61PhysicsList::~PhysicsList()
62{ delete pMessenger; }
63
64//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
65
66void PhysicsList::ConstructParticle()
67{
68  G4Geantino::GeantinoDefinition();
69  G4Gamma::GammaDefinition();
70
71  G4Electron::ElectronDefinition();
72  G4Positron::PositronDefinition();
73
74  G4Proton::ProtonDefinition();
75}
76
77//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
78
79void PhysicsList::ConstructProcess()
80{
81  AddTransportation();
82  ConstructEM();
83  AddStepMax();
84}
85
86//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
87
88#include "G4ComptonScattering.hh"
89#include "G4GammaConversion.hh"
90#include "G4PhotoElectricEffect.hh"
91
92#include "G4MultipleScattering.hh"
93#include "G4CoulombScattering.hh"
94
95#include "G4eIonisation.hh"
96#include "MyMollerBhabhaModel.hh"
97#include "G4eBremsstrahlung.hh"
98#include "G4eplusAnnihilation.hh"
99
100#include "G4hIonisation.hh"
101
102#include "G4EmProcessOptions.hh"
103#include "G4MscStepLimitType.hh"
104
105//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
106
107
108void PhysicsList::ConstructEM()
109{
110  theParticleIterator->reset();
111  while( (*theParticleIterator)() ){
112    G4ParticleDefinition* particle = theParticleIterator->value();
113    G4ProcessManager* pmanager = particle->GetProcessManager();
114    G4String particleName = particle->GetParticleName();
115    G4int iAlong = 0, iPost = 0; 
116     
117    if (particleName == "gamma") {
118                 
119      pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
120      pmanager->AddDiscreteProcess(new G4ComptonScattering);         
121      pmanager->AddDiscreteProcess(new G4GammaConversion);
122     
123    } else if (particleName == "e-") {
124
125      if (singleScattering)
126        pmanager->AddProcess(new G4CoulombScattering,  -1, -1,       ++iPost);
127        else   
128        pmanager->AddProcess(new G4MultipleScattering, -1, ++iAlong, ++iPost);
129     
130      G4eIonisation* eIoni = new G4eIonisation();
131      eIoni->SetEmModel(new MyMollerBhabhaModel);             
132      pmanager->AddProcess(eIoni,                      -1, ++iAlong, ++iPost);
133     
134      if (registerBrem)
135        pmanager->AddProcess(new G4eBremsstrahlung,    -1, ++iAlong, ++iPost);     
136       
137    } else if (particleName == "e+") {
138   
139      if (singleScattering)
140        pmanager->AddProcess(new G4CoulombScattering,  -1, -1,       ++iPost);
141        else   
142        pmanager->AddProcess(new G4MultipleScattering, -1, ++iAlong, ++iPost);
143     
144      G4eIonisation* pIoni = new G4eIonisation();
145      pIoni->SetEmModel(new MyMollerBhabhaModel);                   
146      pmanager->AddProcess(pIoni,                      -1, ++iAlong, ++iPost);
147     
148      if (registerBrem) {
149        pmanager->AddProcess(new G4eBremsstrahlung,    -1, ++iAlong, ++iPost);
150        pmanager->AddProcess(new G4eplusAnnihilation,   0, -1,       ++iPost);
151      }
152     
153    } else if (particleName == "proton") {
154   
155      if (singleScattering)
156        pmanager->AddProcess(new G4CoulombScattering,  -1, -1,       ++iPost);
157        else   
158        pmanager->AddProcess(new G4MultipleScattering, -1, ++iAlong, ++iPost);
159       
160      pmanager->AddProcess(new G4hIonisation,          -1, ++iAlong, ++iPost);
161    }
162  }
163 
164  // Em options
165  //
166  G4EmProcessOptions emOptions;
167 
168  //multiple scattering
169  //
170  emOptions.SetMscStepLimitation(fUseDistanceToBoundary);
171  emOptions.SetSkin(2.);
172 
173  //physics tables
174  //
175  emOptions.SetMinEnergy(100*eV);   
176  emOptions.SetMaxEnergy(10*GeV); 
177  emOptions.SetDEDXBinning(800); 
178  emOptions.SetLambdaBinning(800);
179 
180  //energy loss
181  // 
182  emOptions.SetStepFunction(0.2, 10*um);
183  emOptions.SetLinearLossLimit(1.e-6);
184         
185  //build CSDA range
186  //
187  emOptions.SetBuildCSDARange(true);
188  emOptions.SetMaxEnergyForCSDARange(10*GeV); 
189  emOptions.SetDEDXBinningForCSDARange(800);   
190}
191
192//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
193
194#include "StepMax.hh"
195
196void PhysicsList::AddStepMax()
197{
198  // Step limitation seen as a process
199  StepMax* stepMaxProcess = new StepMax();
200
201  theParticleIterator->reset();
202  while ((*theParticleIterator)()){
203      G4ParticleDefinition* particle = theParticleIterator->value();
204      G4ProcessManager* pmanager = particle->GetProcessManager();
205
206      if (stepMaxProcess->IsApplicable(*particle))
207        {
208          pmanager ->AddDiscreteProcess(stepMaxProcess);
209        }
210  }
211}
212
213//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
214
215#include "G4UnitsTable.hh"
216
217void PhysicsList::SetCuts()
218{
219  if (verboseLevel >0){
220    G4cout << "PhysicsList::SetCuts:";
221    G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
222  }
223     
224  // set cut values for gamma at first and for e- second and next for e+,
225  // because some processes for e+/e- need cut values for gamma
226  SetCutValue(defaultCutValue, "gamma");
227  SetCutValue(defaultCutValue, "e-");
228  SetCutValue(defaultCutValue, "e+");
229}
230
231//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
232
233void PhysicsList::SingleCoulombScattering(G4bool flag)
234{
235  singleScattering = flag;
236}
237
238//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
239
240void PhysicsList::RegisterBrem(G4bool flag)
241{
242  registerBrem = flag;
243}
244
245//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
246
247
248
249
Note: See TracBrowser for help on using the repository browser.