85{
87 G4cout <<
"G4OpticalPhysics:: Add Optical Physics Processes" <<
G4endl;
88
90
91
92
93 G4ProcessManager* pManager =
95 if (nullptr == pManager)
96 {
98 ed << "Optical Photon without a Process Manager";
100 return;
101 }
102
103 if (params->GetProcessActivation("OpAbsorption")) {
104 auto absorption = new G4OpAbsorption();
106 }
107
108 if (params->GetProcessActivation("OpRayleigh")) {
109 auto rayleigh = new G4OpRayleigh();
111 }
112
113 if (params->GetProcessActivation("OpMieHG")) {
114 auto mie = new G4OpMieHG();
116 }
117
118 if (params->GetProcessActivation("OpBoundary")) {
119 auto boundary = new G4OpBoundaryProcess();
121 }
122
123 if (params->GetProcessActivation("OpWLS")) {
124 auto wls = new G4OpWLS();
126 }
127
128 if (params->GetProcessActivation("OpWLS2")) {
129 auto wls2 = new G4OpWLS2();
131 }
132
133 G4VProcess* theCerenkov{nullptr};
134 if (params->CerenkovGeneral()) {
135 auto ptr = new G4GeneralCerenkov();
136 theCerenkov = ptr;
137 }
138 else if (params->GetProcessActivation("Cerenkov")) {
139 auto ptr = new G4Cerenkov();
140 theCerenkov = ptr;
141 }
142
143 G4VProcess* theScint{nullptr};
144 if (params->GetProcessActivation("Scintillation")) {
145 auto scint = new G4Scintillation();
147 scint->AddSaturation(emSaturation);
148 theScint = scint;
149 }
150
152 myParticleIterator->reset();
153
154 while((*myParticleIterator)())
155 {
156 auto particle = myParticleIterator->value();
157 if (particle->IsShortLived()) { continue; }
158
159 pManager = particle->GetProcessManager();
160 if (nullptr == pManager) {
162 ed << "Particle " << particle->GetParticleName() << "without a Process Manager";
164 ed);
165 return;
166 }
167
168 if (
nullptr != theCerenkov && theCerenkov->
IsApplicable(*particle)) {
170 }
171
172 if (
nullptr != theScint && theScint->
IsApplicable(*particle)) {
176 }
177 }
178
183}
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4GLOB_DLL std::ostream G4cout
static G4LossTableManager * Instance()
G4EmSaturation * EmSaturation()
static G4OpticalPhoton * OpticalPhoton()
void PrintStatistics() const
G4ProcessManager * GetProcessManager() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
void SetProcessOrderingToLast(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
virtual G4bool IsApplicable(const G4ParticleDefinition &)