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 : G4VPhysicsConstructor(name)
30 //_____________________________________________________________________________
31 TG4PhysicsConstructorOptical::~TG4PhysicsConstructorOptical() {
37 //_____________________________________________________________________________
38 void TG4PhysicsConstructorOptical::ConstructParticle()
40 // Instantiates particles.
44 G4OpticalPhoton::OpticalPhotonDefinition();
47 //_____________________________________________________________________________
48 void TG4PhysicsConstructorOptical::ConstructProcess()
50 // Constructs optical processes.
51 // According to ExN06PhysicsList.cc.
55 G4Cerenkov* theCerenkovProcess = new G4Cerenkov("Cerenkov");
56 G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
57 G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
58 G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
60 theCerenkovProcess->DumpPhysicsTable();
61 //theAbsorptionProcess->DumpPhysicsTable();
62 //theRayleighScatteringProcess->DumpPhysicsTable();
65 theCerenkovProcess->SetVerboseLevel(0);
66 theAbsorptionProcess->SetVerboseLevel(0);
67 theRayleighScatteringProcess->SetVerboseLevel(0);
68 theBoundaryProcess->SetVerboseLevel(0);
70 G4int maxNumPhotons = 300;
72 theCerenkovProcess->SetTrackSecondariesFirst(true);
73 theCerenkovProcess->SetMaxNumPhotonsPerStep(maxNumPhotons);
75 //G4OpticalSurfaceModel themodel = unified;
77 G4OpticalSurfaceModel themodel = glisur;
78 theBoundaryProcess->SetModel(themodel);
80 theParticleIterator->reset();
81 while( (*theParticleIterator)() ){
82 G4ParticleDefinition* particle = theParticleIterator->value();
83 G4ProcessManager* processManager = particle->GetProcessManager();
84 G4String particleName = particle->GetParticleName();
85 if (theCerenkovProcess->IsApplicable(*particle)) {
86 processManager->AddContinuousProcess(theCerenkovProcess);
88 if (particleName == "opticalphoton") {
89 G4cout << " AddDiscreteProcess to OpticalPhoton " << G4endl;
90 processManager->AddDiscreteProcess(theAbsorptionProcess);
91 processManager->AddDiscreteProcess(theRayleighScatteringProcess);
92 processManager->AddDiscreteProcess(theBoundaryProcess);
97 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
98 controlMap->Add(theCerenkovProcess, kCKOV);
99 controlMap->Add(theAbsorptionProcess, kLABS);
100 controlMap->Add(theRayleighScatteringProcess, kRAYL);
101 controlMap->Add(theBoundaryProcess, kLABS);
103 // map to AliMCProcess codes
104 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
105 mcMap->Add(theCerenkovProcess, kPCerenkov);
106 mcMap->Add(theAbsorptionProcess, kPLightAbsorption);
107 mcMap->Add(theRayleighScatteringProcess, kPRayleigh);
108 mcMap->Add(theBoundaryProcess, kPLightScattering);
111 G4cout << "### " << namePhysics << " physics constructed." << G4endl;