Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/nanobeam/src/PhysicsList.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 // Please cite the following paper if you use this software
 27 // Nucl.Instrum.Meth.B260:20-27, 2007
 28 
 29 #include "PhysicsList.hh"
 30 #include "G4SystemOfUnits.hh"
 31 
 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 33 
 34 PhysicsList::PhysicsList():  G4VUserPhysicsList()
 35 {
 36   defaultCutValue = 1*micrometer;
 37   fCutForGamma     = defaultCutValue;
 38   fCutForElectron  = defaultCutValue;
 39   fCutForPositron  = defaultCutValue;
 40   fCutForProton    = defaultCutValue;
 41   
 42   SetVerboseLevel(1);
 43 }
 44 
 45 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 46 
 47 PhysicsList::~PhysicsList()
 48 {}
 49 
 50 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 51 
 52 void PhysicsList::ConstructParticle()
 53 {
 54   ConstructBosons();
 55   ConstructLeptons();
 56   ConstructBarions();
 57 }
 58 
 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 60 
 61 void PhysicsList::ConstructBosons()
 62 { 
 63   // gamma
 64   G4Gamma::GammaDefinition();
 65 
 66   // optical photon
 67   G4OpticalPhoton::OpticalPhotonDefinition();
 68 }
 69  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 70 
 71 void PhysicsList::ConstructLeptons()
 72 {
 73   // leptons
 74   G4Electron::ElectronDefinition();
 75   G4Positron::PositronDefinition();
 76 }
 77 
 78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 79 
 80 void PhysicsList::ConstructBarions()
 81 {
 82   //  barions
 83   G4Proton::ProtonDefinition();
 84   G4AntiProton::AntiProtonDefinition();
 85   G4GenericIon::GenericIonDefinition();
 86 }
 87 
 88 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 89 
 90 void PhysicsList::ConstructProcess()
 91 {
 92   AddTransportation();
 93   ConstructEM();
 94   ConstructGeneral();
 95 }
 96 
 97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 98 
 99 #include "G4PhotoElectricEffect.hh"
100 #include "G4ComptonScattering.hh"
101 #include "G4GammaConversion.hh"
102 
103 #include "G4eMultipleScattering.hh"
104 #include "G4eIonisation.hh"
105 #include "G4eBremsstrahlung.hh"
106 #include "G4eplusAnnihilation.hh"
107 
108 #include "G4MuMultipleScattering.hh"
109 #include "G4WentzelVIModel.hh"
110 
111 #include "G4MuIonisation.hh"
112 #include "G4MuBremsstrahlung.hh"
113 #include "G4MuPairProduction.hh"
114 #include "G4CoulombScattering.hh"
115 
116 #include "G4hMultipleScattering.hh"
117 #include "G4ionIonisation.hh"
118 #include "G4hIonisation.hh"
119 #include "G4hBremsstrahlung.hh"
120 #include "G4hPairProduction.hh"
121 
122 #include "G4StepLimiter.hh"
123 
124 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
125 
126 void PhysicsList::ConstructEM()
127 {
128 
129   G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
130 
131 // ****************************************************************
132 // Identical to G4EmStandardPhysics but added G4StepLimiter process
133 // ****************************************************************
134 
135 
136   auto particleIterator=GetParticleIterator();
137   particleIterator->reset();
138 
139   while( (*particleIterator)() ){
140 
141     G4ParticleDefinition* particle = particleIterator->value();
142 
143     G4String particleName = particle->GetParticleName();
144 
145     if (particleName == "gamma") {
146 
147       ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
148       ph->RegisterProcess(new G4ComptonScattering(), particle);
149       ph->RegisterProcess(new G4GammaConversion(), particle);
150 
151     } else if (particleName == "e-") {
152 
153       ph->RegisterProcess(new G4eMultipleScattering(), particle);
154       ph->RegisterProcess(new G4eIonisation(), particle);
155       ph->RegisterProcess(new G4eBremsstrahlung(), particle);
156 
157     } else if (particleName == "e+") {
158 
159       ph->RegisterProcess(new G4eMultipleScattering(), particle);
160       ph->RegisterProcess(new G4eIonisation(), particle);
161       ph->RegisterProcess(new G4eBremsstrahlung(), particle);
162       ph->RegisterProcess(new G4eplusAnnihilation(), particle);
163       
164     } else if( particleName == "mu+" || 
165                particleName == "mu-"    ) {
166 
167       G4MuMultipleScattering* msc = new G4MuMultipleScattering();
168       msc->AddEmModel(0, new G4WentzelVIModel());
169 
170       ph->RegisterProcess(msc, particle);
171       ph->RegisterProcess(new G4MuIonisation(), particle);
172       ph->RegisterProcess(new G4MuBremsstrahlung(), particle);
173       ph->RegisterProcess(new G4MuPairProduction(), particle);
174       ph->RegisterProcess(new G4CoulombScattering(), particle);
175 
176     } else if (particleName == "alpha" ||
177                particleName == "He3") {
178 
179       ph->RegisterProcess(new G4hMultipleScattering(), particle);
180       ph->RegisterProcess(new G4ionIonisation(), particle);
181 
182     } else if (particleName == "GenericIon") {
183 
184       ph->RegisterProcess(new G4hMultipleScattering(), particle);
185       ph->RegisterProcess(new G4ionIonisation(), particle);
186      
187     } else if (particleName == "proton") {
188       ph->RegisterProcess(new G4hMultipleScattering(), particle);
189       ph->RegisterProcess(new G4hIonisation(), particle);
190       ph->RegisterProcess(new G4hBremsstrahlung(), particle);
191       ph->RegisterProcess(new G4hPairProduction(), particle);
192 
193       ph->RegisterProcess(new G4StepLimiter(), particle);
194             
195     }
196   }
197 }
198 
199 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
200 
201 void PhysicsList::ConstructGeneral()
202 { }
203 
204 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
205 
206 void PhysicsList::SetCuts()
207 {
208   if (verboseLevel >0){
209     G4cout << "PhysicsList::SetCuts:";
210     G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
211   }  
212   
213   SetCutValue(fCutForGamma, "gamma");
214   SetCutValue(fCutForElectron, "e-");
215   SetCutValue(fCutForPositron, "e+");
216   SetCutValue(fCutForProton, "proton");
217   SetCutValue(fCutForProton, "anti_proton");
218   
219   if (verboseLevel>0) DumpCutValuesTable();
220 }
221 
222 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
223 
224 void PhysicsList::SetGammaCut(G4double val)
225 {
226   fCutForGamma = val;
227 }
228 
229 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
230 
231 void PhysicsList::SetElectronCut(G4double val)
232 {
233   fCutForElectron = val;
234 }
235 
236 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
237 
238 void PhysicsList::SetPositronCut(G4double val)
239 {
240   fCutForPositron = val;
241 }
242 
243 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
244 
245 void PhysicsList::SetProtonCut(G4double val)
246 {
247   fCutForProton = val;
248 }
249