4 // Author: I. Hrivnacova
6 // Class TG4PhysicsConstructorOptical
7 // ----------------------------------
8 // See the class description in the header file.
9 // According to ExN06PhysicsList (geant4 1.1)
11 #include "TG4PhysicsConstructorOptical.h"
12 #include "TG4ProcessControlMap.h"
13 #include "TG4ProcessMCMap.h"
15 #include <G4ParticleDefinition.hh>
16 #include <G4ProcessManager.hh>
17 #include <G4Cerenkov.hh>
18 #include <G4OpAbsorption.hh>
19 #include <G4OpRayleigh.hh>
20 #include <G4OpBoundaryProcess.hh>
22 //_____________________________________________________________________________
23 TG4PhysicsConstructorOptical::TG4PhysicsConstructorOptical(const G4String& name)
24 : TG4VPhysicsConstructor(name) {
28 //_____________________________________________________________________________
29 TG4PhysicsConstructorOptical::TG4PhysicsConstructorOptical(G4int verboseLevel,
31 : TG4VPhysicsConstructor(name, verboseLevel) {
35 //_____________________________________________________________________________
36 TG4PhysicsConstructorOptical::~TG4PhysicsConstructorOptical() {
42 //_____________________________________________________________________________
43 void TG4PhysicsConstructorOptical::ConstructParticle()
45 // Instantiates particles.
49 G4OpticalPhoton::OpticalPhotonDefinition();
52 //_____________________________________________________________________________
53 void TG4PhysicsConstructorOptical::ConstructProcess()
55 // Constructs optical processes.
56 // According to ExN06PhysicsList.cc.
60 G4Cerenkov* theCerenkovProcess = new G4Cerenkov("Cerenkov");
61 G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
62 G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
63 G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
65 theCerenkovProcess->DumpPhysicsTable();
66 //theAbsorptionProcess->DumpPhysicsTable();
67 //theRayleighScatteringProcess->DumpPhysicsTable();
70 theCerenkovProcess->SetVerboseLevel(0);
71 theAbsorptionProcess->SetVerboseLevel(0);
72 theRayleighScatteringProcess->SetVerboseLevel(0);
73 theBoundaryProcess->SetVerboseLevel(0);
75 G4int maxNumPhotons = 300;
77 theCerenkovProcess->SetTrackSecondariesFirst(true);
78 theCerenkovProcess->SetMaxNumPhotonsPerStep(maxNumPhotons);
80 //G4OpticalSurfaceModel themodel = unified;
82 G4OpticalSurfaceModel themodel = glisur;
83 theBoundaryProcess->SetModel(themodel);
85 theParticleIterator->reset();
86 while( (*theParticleIterator)() ){
87 G4ParticleDefinition* particle = theParticleIterator->value();
88 G4ProcessManager* processManager = particle->GetProcessManager();
89 G4String particleName = particle->GetParticleName();
90 if (theCerenkovProcess->IsApplicable(*particle)) {
91 processManager->AddContinuousProcess(theCerenkovProcess);
93 if (particleName == "opticalphoton") {
94 G4cout << " AddDiscreteProcess to OpticalPhoton " << G4endl;
95 processManager->AddDiscreteProcess(theAbsorptionProcess);
96 processManager->AddDiscreteProcess(theRayleighScatteringProcess);
97 processManager->AddDiscreteProcess(theBoundaryProcess);
101 // map to G3 controls
102 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
103 controlMap->Add(theCerenkovProcess, kCKOV);
104 controlMap->Add(theAbsorptionProcess, kLABS);
105 controlMap->Add(theRayleighScatteringProcess, kRAYL);
106 controlMap->Add(theBoundaryProcess, kLABS);
108 // map to AliMCProcess codes
109 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
110 mcMap->Add(theCerenkovProcess, kPCerenkov);
111 mcMap->Add(theAbsorptionProcess, kPLightAbsorption);
112 mcMap->Add(theRayleighScatteringProcess, kPRayleigh);
113 mcMap->Add(theBoundaryProcess, kPLightScattering);
115 if (VerboseLevel() > 0) {
116 G4cout << "### " << namePhysics << " physics constructed." << G4endl;