Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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: G4ErrorPhysicsList.cc 99974 2016-10-13 07:22:33Z gcosmo $
27 //
28 // ------------------------------------------------------------
29 // GEANT 4 class implementation file
30 // ------------------------------------------------------------
31 
32 #include "globals.hh"
33 
34 #include "G4PhysicalConstants.hh"
35 #include "G4SystemOfUnits.hh"
36 
37 #include "G4ErrorPhysicsList.hh"
38 #include "G4ComptonScattering.hh"
39 #include "G4GammaConversion.hh"
40 #include "G4PhotoElectricEffect.hh"
41 
42 #include "G4eIonisation.hh"
43 #include "G4eBremsstrahlung.hh"
44 #include "G4eplusAnnihilation.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 
58 #include "G4ParticleDefinition.hh"
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
122  auto myParticleIterator=GetParticleIterator();
123  myParticleIterator->reset();
124  while( (*myParticleIterator)() ) { // Loop checking, 06.08.2015, G.Cosmo
125  G4ParticleDefinition* particle = myParticleIterator->value();
126  G4ProcessManager* pmanager = particle->GetProcessManager();
127  if (!particle->IsShortLived()) {
128  G4cout << particle << "G4ErrorPhysicsList:: particle process manager " << particle->GetParticleName() << " = " << particle->GetProcessManager() << G4endl;
129  // Add transportation process for all particles other than "shortlived"
130  if ( pmanager == 0) {
131  // Error !! no process manager
132  G4String particleName = particle->GetParticleName();
133  G4Exception("G4ErrorPhysicsList::ConstructProcess","No process manager",
134  RunMustBeAborted, particleName );
135  } else {
136  // add transportation with ordering = ( -1, "first", "first" )
137  pmanager ->AddProcess(theTransportationProcess);
138  pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxAlongStep);
139  pmanager ->SetProcessOrderingToFirst(theTransportationProcess, idxPostStep);
140  }
141  } else {
142  // shortlived particle case
143  }
144  }
145 
146  ConstructEM();
147 }
148 
149 
150 //------------------------------------------------------------------------
151 #include "G4eBremsstrahlung.hh"
152 #include "G4eIonisation.hh"
153 
154 #include "G4eIonisation.hh"
155 
156 #include "G4MuBremsstrahlung.hh"
157 #include "G4MuIonisation.hh"
158 #include "G4MuPairProduction.hh"
159 
160 #include "G4PhysicsTable.hh"
161 
162 #include "G4MuIonisation.hh"
163 
166 #include "G4ErrorMessenger.hh"
167 
169 {
170 
171  G4ErrorEnergyLoss* eLossProcess = new G4ErrorEnergyLoss;
172  G4ErrorStepLengthLimitProcess* stepLengthLimitProcess = new G4ErrorStepLengthLimitProcess;
173  G4ErrorMagFieldLimitProcess* magFieldLimitProcess = new G4ErrorMagFieldLimitProcess;
174  new G4ErrorMessenger( stepLengthLimitProcess, magFieldLimitProcess, eLossProcess );
175 
176  auto myParticleIterator=GetParticleIterator();
177  myParticleIterator->reset();
178  while( (*myParticleIterator)() ) { // Loop checking, 06.08.2015, G.Cosmo
179  G4ParticleDefinition* particle = myParticleIterator->value();
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());
187  pmanager->AddDiscreteProcess(new G4PhotoElectricEffect());
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();
204 
205  //
206  // add processes
207  pmanager->AddProcess(anIonisation);
208  // pmanager->AddProcess(aMultipleScattering);
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);
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 
static G4Electron * ElectronDefinition()
Definition: G4Electron.cc:89
static G4MuonPlus * MuonPlusDefinition()
Definition: G4MuonPlus.cc:94
void SetProcessOrderingToFirst(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
virtual void ConstructEM()
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
virtual void ConstructParticle()
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
static G4PionMinus * PionMinusDefinition()
Definition: G4PionMinus.cc:93
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
static constexpr double cm
Definition: G4SIunits.hh:119
static G4PionPlus * PionPlusDefinition()
Definition: G4PionPlus.cc:93
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4Positron * PositronDefinition()
Definition: G4Positron.cc:89
G4ProcessManager * GetProcessManager() const
static G4MuonMinus * MuonMinusDefinition()
Definition: G4MuonMinus.cc:95
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
#define G4endl
Definition: G4ios.hh:61
virtual void ConstructProcess()
G4double GetPDGCharge() const
G4int AddContinuousProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4Gamma * GammaDefinition()
Definition: G4Gamma.cc:81