File indexing completed on 2026-09-18 08:32:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "PhysicsList.hh"
0030
0031 #include "PhysListEmPolarized.hh"
0032 #include "PhysicsListMessenger.hh"
0033 #include "StepMax.hh"
0034
0035 #include "G4EmBuilder.hh"
0036 #include "G4EmParameters.hh"
0037 #include "G4EmStandardPhysics.hh"
0038 #include "G4ProcessManager.hh"
0039
0040
0041
0042 PhysicsList::PhysicsList()
0043 : G4VModularPhysicsList(), fEmPhysicsList(0), fEmName("polarized"), fMessenger(0)
0044 {
0045 fMessenger = new PhysicsListMessenger(this);
0046
0047 G4EmParameters::Instance();
0048
0049 SetVerboseLevel(1);
0050
0051 fEmPhysicsList = new PhysListEmPolarized();
0052 }
0053
0054
0055
0056 PhysicsList::~PhysicsList()
0057 {
0058 delete fMessenger;
0059 }
0060
0061
0062
0063 void PhysicsList::ConstructParticle()
0064 {
0065
0066 G4EmBuilder::ConstructMinimalEmSet();
0067 }
0068
0069
0070
0071 void PhysicsList::ConstructProcess()
0072 {
0073
0074
0075 AddTransportation();
0076
0077
0078
0079 fEmPhysicsList->ConstructProcess();
0080
0081
0082
0083 AddStepMax();
0084 }
0085
0086
0087
0088 void PhysicsList::AddPhysicsList(const G4String& name)
0089 {
0090 if (verboseLevel > 0) {
0091 G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl;
0092 }
0093
0094 if (name == fEmName) return;
0095
0096 if (name == "standard") {
0097 fEmName = name;
0098 delete fEmPhysicsList;
0099 fEmPhysicsList = new G4EmStandardPhysics();
0100 }
0101 else if (name == "polarized") {
0102 fEmName = name;
0103 delete fEmPhysicsList;
0104 fEmPhysicsList = new PhysListEmPolarized();
0105 }
0106 else {
0107 G4cout << "PhysicsList::AddPhysicsList: <" << name << ">"
0108 << " is not defined" << G4endl;
0109 }
0110 }
0111
0112
0113
0114 void PhysicsList::AddStepMax()
0115 {
0116
0117 StepMax* stepMaxProcess = new StepMax();
0118
0119 auto particleIterator = GetParticleIterator();
0120 particleIterator->reset();
0121 while ((*particleIterator)()) {
0122 G4ParticleDefinition* particle = particleIterator->value();
0123 G4ProcessManager* pmanager = particle->GetProcessManager();
0124
0125 if (stepMaxProcess->IsApplicable(*particle) && pmanager)
0126 pmanager->AddDiscreteProcess(stepMaxProcess);
0127 }
0128 }
0129
0130