26 #ifndef DDG4_GEANT4OPTICALPHOTONPHYSICS_H
27 #define DDG4_GEANT4OPTICALPHOTONPHYSICS_H 1
33 #include <G4OpAbsorption.hh>
34 #include <G4OpRayleigh.hh>
35 #include <G4OpMieHG.hh>
36 #include <G4OpBoundaryProcess.hh>
38 #include <G4OpWLS2.hh>
39 #include <G4ParticleDefinition.hh>
40 #include <G4ParticleTypes.hh>
41 #include <G4ParticleTable.hh>
42 #include <G4ProcessManager.hh>
43 #include <G4Version.hh>
45 #if G4VERSION_NUMBER >= 1070
46 #include <G4OpticalParameters.hh>
79 info(
"+++ Constructing optical_photon processes:");
80 G4ParticleTable* table = G4ParticleTable::GetParticleTable();
81 G4ParticleDefinition* particle = table->FindParticle(
"opticalphoton");
83 except(
"++ Cannot resolve 'opticalphoton' particle definition!");
86 G4ProcessManager* pmanager = particle->GetProcessManager();
88 #if G4VERSION_NUMBER >= 1070
89 G4OpticalParameters* params = G4OpticalParameters::Instance();
94 pmanager->AddDiscreteProcess(
new G4OpBoundaryProcess());
99 auto addIf = [&](
const G4String&
key, G4VDiscreteProcess* proc, G4int verbosity) {
100 if (params->GetProcessActivation(
key)) {
101 proc->SetVerboseLevel(verbosity);
102 pmanager->AddDiscreteProcess(proc);
107 addIf(
"OpAbsorption",
new G4OpAbsorption(),
m_verbosity);
108 addIf(
"OpRayleigh",
new G4OpRayleigh(),
m_verbosity);
114 std::string active =
"+++ G4OpBoundaryProcess";
115 for (
const char*
key : {
"OpAbsorption",
"OpRayleigh",
"OpMieHG",
"OpWLS",
"OpWLS2"}) {
116 if (params->GetProcessActivation(
key)) active += std::string(
" G4") +
key;
118 info(
"%s", active.c_str());
120 info(
"+++ G4OpAbsorption G4OpRayleigh G4OpMieHG G4OpBoundaryProcess");
121 G4OpBoundaryProcess* fBoundaryProcess =
new G4OpBoundaryProcess();
122 G4OpAbsorption* fAbsorptionProcess =
new G4OpAbsorption();
123 G4OpRayleigh* fRayleighScatteringProcess =
new G4OpRayleigh();
124 G4OpMieHG* fMieHGScatteringProcess =
new G4OpMieHG();
126 fRayleighScatteringProcess->SetVerboseLevel(
m_verbosity);
127 fMieHGScatteringProcess->SetVerboseLevel(
m_verbosity);
129 #if G4VERSION_NUMBER >= 1000
132 pmanager->AddDiscreteProcess(fAbsorptionProcess);
133 pmanager->AddDiscreteProcess(fRayleighScatteringProcess);
134 pmanager->AddDiscreteProcess(fMieHGScatteringProcess);
135 pmanager->AddDiscreteProcess(fBoundaryProcess);
144 #endif // DDG4_GEANT4OPTICALPHOTONPHYSICS_H