Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4ErrorPhysicsList.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// $Id$
27//
28// ------------------------------------------------------------
29// GEANT 4 class implementation file
30// ------------------------------------------------------------
31
32#include "globals.hh"
33
35#include "G4SystemOfUnits.hh"
36
37#include "G4ErrorPhysicsList.hh"
39#include "G4GammaConversion.hh"
41
42#include "G4eIonisation.hh"
43#include "G4eBremsstrahlung.hh"
45
46#include "G4MuIonisation.hh"
47#include "G4MuBremsstrahlung.hh"
48#include "G4MuPairProduction.hh"
49
50#include "G4hIonisation.hh"
51
52#include "G4MuIonisation.hh"
53#include "G4MuBremsstrahlung.hh"
54#include "G4MuPairProduction.hh"
55
56#include "G4hIonisation.hh"
57
59#include "G4ProcessManager.hh"
60#include "G4ProcessVector.hh"
61#include "G4ParticleTypes.hh"
62#include "G4ParticleTable.hh"
63#include "G4Material.hh"
64#include "G4MaterialTable.hh"
65#include "G4ios.hh"
66#include "G4PhysicsTable.hh"
67#include "G4Transportation.hh"
68
69#include "G4ErrorEnergyLoss.hh"
70
71//------------------------------------------------------------------------
73{
74 defaultCutValue = 1.0E+9*cm; // set big step so that AlongStep computes all the energy
75}
76
77
78//------------------------------------------------------------------------
80{
81}
82
83
84//------------------------------------------------------------------------
86{
87// In this method, static member functions should be called
88 // for all particles which you want to use.
89 // This ensures that objects of these particle types will be
90 // created in the program.
91 // gamma
93 // e+/-
96 // mu+/-
99
100 // pi+/-
103
104 // proton
106
107}
108
109
110//------------------------------------------------------------------------
112{
113 G4Transportation* theTransportationProcess= new G4Transportation();
114
115#ifdef G4VERBOSE
116 if (verboseLevel >= 4){
117 G4cout << "G4VUserPhysicsList::ConstructProcess() "<< G4endl;
118 }
119#endif
120
121 // loop over all particles in G4ParticleTable
123 while( (*theParticleIterator)() ){
125 G4ProcessManager* pmanager = particle->GetProcessManager();
126 if (!particle->IsShortLived()) {
127 G4cout << particle << "G4ErrorPhysicsList:: particle process manager " << particle->GetParticleName() << " = " << particle->GetProcessManager() << G4endl;
128 // Add transportation process for all particles other than "shortlived"
129 if ( pmanager == 0) {
130 // Error !! no process manager
131 G4String particleName = particle->GetParticleName();
132 G4Exception("G4ErrorPhysicsList::ConstructProcess","No process manager",
133 RunMustBeAborted, particleName );
134 } else {
135 // add transportation with ordering = ( -1, "first", "first" )
136 pmanager ->AddProcess(theTransportationProcess);
137 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxAlongStep);
138 pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxPostStep);
139 }
140 } else {
141 // shortlived particle case
142 }
143 }
144
145 ConstructEM();
146}
147
148
149//------------------------------------------------------------------------
150#include "G4eBremsstrahlung.hh"
151#include "G4eIonisation.hh"
152
153#include "G4eIonisation.hh"
154
155#include "G4MuBremsstrahlung.hh"
156#include "G4MuIonisation.hh"
157#include "G4MuPairProduction.hh"
158
159#include "G4PhysicsTable.hh"
160
161#include "G4VEnergyLoss.hh"
162
163#include "G4MuIonisation.hh"
164
167#include "G4ErrorMessenger.hh"
168
170{
171
172 G4ErrorEnergyLoss* eLossProcess = new G4ErrorEnergyLoss;
175 new G4ErrorMessenger( stepLengthLimitProcess, magFieldLimitProcess, eLossProcess );
176
178 while( (*theParticleIterator)() ){
180 G4ProcessManager* pmanager = particle->GetProcessManager();
181 G4String particleName = particle->GetParticleName();
182
183 if (particleName == "gamma") {
184 // gamma
185 pmanager->AddDiscreteProcess(new G4GammaConversion());
186 pmanager->AddDiscreteProcess(new G4ComptonScattering());
188
189 // } else if (particleName == "e-" || particleName == "e+"
190 // || particleName == "mu+" || particleName == "mu-" ) {
191 }else if (!particle->IsShortLived() && particle->GetPDGCharge() != 0 ) {
192
193 pmanager->AddContinuousProcess(eLossProcess,1);
194 pmanager->AddDiscreteProcess( stepLengthLimitProcess, 2 );
195 pmanager->AddDiscreteProcess( magFieldLimitProcess, 3 );
196
197 /* } else if ((!particle->IsShortLived()) &&
198 (particle->GetPDGCharge() != 0.0) &&
199 (particle->GetParticleName() != "chargedgeantino")) {
200 // all others charged particles except geantino
201 // G4VProcess* aMultipleScattering = new G4MultipleScattering();
202 G4VProcess* anIonisation = new G4hIonisation();
203 ////G4VProcess* theUserCuts = new G4UserSpecialCuts();
204
205 //
206 // add processes
207 pmanager->AddProcess(anIonisation);
208 // pmanager->AddProcess(aMultipleScattering);
209 ////pmanager->AddProcess(theUserCuts);
210
211 //
212 // set ordering for AlongStepDoIt
213 // pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,1);
214 pmanager->SetProcessOrdering(anIonisation, idxAlongStep,1);
215
216 //
217 // set ordering for PostStepDoIt
218 // pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep,1);
219 pmanager->SetProcessOrdering(anIonisation, idxPostStep,1);
220 ////pmanager->SetProcessOrdering(theUserCuts, idxPostStep,2);
221 */
222 }
223 }
224}
225
226
227//------------------------------------------------------------------------
229{
230 // " G4VUserPhysicsList::SetCutsWithDefault" method sets
231 // the default cut value or all particle types
233 // if (verboseLevel>0)
234 // DumpCutValuesTable();
235}
236
@ RunMustBeAborted
@ idxPostStep
@ idxAlongStep
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
static G4Electron * ElectronDefinition()
Definition: G4Electron.cc:89
virtual void ConstructProcess()
virtual void ConstructEM()
virtual void ConstructParticle()
static G4Gamma * GammaDefinition()
Definition: G4Gamma.cc:81
static G4MuonMinus * MuonMinusDefinition()
Definition: G4MuonMinus.cc:95
static G4MuonPlus * MuonPlusDefinition()
Definition: G4MuonPlus.cc:94
G4ProcessManager * GetProcessManager() const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
static G4PionMinus * PionMinusDefinition()
Definition: G4PionMinus.cc:93
static G4PionPlus * PionPlusDefinition()
Definition: G4PionPlus.cc:93
static G4Positron * PositronDefinition()
Definition: G4Positron.cc:89
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
G4int AddContinuousProcess(G4VProcess *aProcess, G4int ord=ordDefault)
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
void SetProcessOrderingToFirst(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
G4ParticleTable::G4PTblDicIterator * theParticleIterator
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41