Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions
G4OpticalPhysics Class Reference

#include <G4OpticalPhysics.hh>

Inheritance diagram for G4OpticalPhysics:
G4VPhysicsConstructor

Public Member Functions

 G4OpticalPhysics (G4int verbose=0, const G4String &name="Optical")
 
virtual ~G4OpticalPhysics ()
 
void Configure (G4OpticalProcessIndex, G4bool)
 
void SetProcessVerbose (G4int, G4int)
 
void SetMaxNumPhotonsPerStep (G4int)
 
void SetMaxBetaChangePerStep (G4double)
 
void SetScintillationYieldFactor (G4double)
 
void SetScintillationExcitationRatio (G4double)
 
void SetWLSTimeProfile (G4String)
 
void SetScintillationByParticleType (G4bool)
 
void AddScintillationSaturation (G4EmSaturation *)
 
void SetTrackSecondariesFirst (G4OpticalProcessIndex, G4bool)
 
void SetFiniteRiseTime (G4bool)
 
- Public Member Functions inherited from G4VPhysicsConstructor
 G4VPhysicsConstructor (const G4String &="")
 
 G4VPhysicsConstructor (const G4String &name, G4int physics_type)
 
virtual ~G4VPhysicsConstructor ()
 
void SetPhysicsName (const G4String &="")
 
const G4StringGetPhysicsName () const
 
void SetPhysicsType (G4int)
 
G4int GetPhysicsType () const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4int GetInstanceID () const
 

Protected Member Functions

virtual void ConstructParticle ()
 
virtual void ConstructProcess ()
 
- Protected Member Functions inherited from G4VPhysicsConstructor
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPhysicsConstructor
static const G4VPCManagerGetSubInstanceManager ()
 
- Protected Attributes inherited from G4VPhysicsConstructor
G4int verboseLevel
 
G4String namePhysics
 
G4int typePhysics
 
G4ParticleTabletheParticleTable
 
G4int g4vpcInstanceID
 
- Static Protected Attributes inherited from G4VPhysicsConstructor
static G4RUN_DLL G4VPCManager subInstanceManager
 

Detailed Description

Definition at line 61 of file G4OpticalPhysics.hh.

Constructor & Destructor Documentation

G4OpticalPhysics::G4OpticalPhysics ( G4int  verbose = 0,
const G4String name = "Optical" 
)

Definition at line 62 of file G4OpticalPhysics.cc.

References kNoProcess, and G4VPhysicsConstructor::verboseLevel.

63  : G4VPhysicsConstructor(name),
64 
65  fMaxNumPhotons(100),
66  fMaxBetaChange(10.0),
67  fYieldFactor(1.),
68  fExcitationRatio(0.0),
69  fProfile("delta"),
70  fFiniteRiseTime(false),
71  fScintillationByParticleType(false)
72 {
73  verboseLevel = verbose;
74  fMessenger = new G4OpticalPhysicsMessenger(this);
75 
76  for ( G4int i=0; i<kNoProcess; i++ ) {
77  fProcessUse.push_back(true);
78  fProcessVerbose.push_back(verbose);
79  fProcessTrackSecondariesFirst.push_back(true);
80  }
81 }
Number of processes, no selected process.
int G4int
Definition: G4Types.hh:78
G4VPhysicsConstructor(const G4String &="")
G4OpticalPhysics::~G4OpticalPhysics ( )
virtual

Definition at line 85 of file G4OpticalPhysics.cc.

86 {
87  delete fMessenger;
88 }

Member Function Documentation

void G4OpticalPhysics::AddScintillationSaturation ( G4EmSaturation saturation)

Adds Birks Saturation to the G4Scintillation Process

Definition at line 294 of file G4OpticalPhysics.cc.

References G4Scintillation::AddSaturation().

295 {
296 /// Adds Birks Saturation to the G4Scintillation Process
297  G4Scintillation::AddSaturation(saturation);
298 }
static void AddSaturation(G4EmSaturation *)
void G4OpticalPhysics::Configure ( G4OpticalProcessIndex  index,
G4bool  isUse 
)

Definition at line 326 of file G4OpticalPhysics.cc.

327 {
328  // Configure the physics constructor to use/not use a selected process.
329  // This method can only be called in PreInit> phase (before execution of
330  // ConstructProcess). The process is not added to particle's process manager
331  // and so it cannot be re-activated later in Idle> phase with the command
332  // /process/activate.
333 
334  if ( index >= kNoProcess ) return;
335  if ( fProcessUse[index] == isUse ) return;
336  fProcessUse[index] = isUse;
337 }
Number of processes, no selected process.
void G4OpticalPhysics::ConstructParticle ( void  )
protectedvirtual

Instantiate particles.

Implements G4VPhysicsConstructor.

Definition at line 126 of file G4OpticalPhysics.cc.

References G4OpticalPhoton::OpticalPhotonDefinition().

127 {
128 /// Instantiate particles.
129 
130  // optical photon
132 }
static G4OpticalPhoton * OpticalPhotonDefinition()
void G4OpticalPhysics::ConstructProcess ( void  )
protectedvirtual

Implements G4VPhysicsConstructor.

Definition at line 140 of file G4OpticalPhysics.cc.

References G4ProcessManager::AddDiscreteProcess(), G4ProcessManager::AddProcess(), G4Scintillation::AddSaturation(), aParticleIterator, G4LossTableManager::EmSaturation(), FatalException, G4cout, G4endl, G4Exception(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetProcessManager(), idxAtRest, idxPostStep, G4LossTableManager::Instance(), G4Cerenkov::IsApplicable(), G4Scintillation::IsApplicable(), G4Threading::IsWorkerThread(), kAbsorption, kBoundary, kCerenkov, kMieHG, kNoProcess, kRayleigh, kScintillation, kWLS, G4VPhysicsConstructor::namePhysics, G4OpticalPhoton::OpticalPhoton(), G4Scintillation::SetFiniteRiseTime(), G4Cerenkov::SetMaxBetaChangePerStep(), G4Cerenkov::SetMaxNumPhotonsPerStep(), G4ProcessManager::SetProcessOrdering(), G4ProcessManager::SetProcessOrderingToLast(), G4Scintillation::SetScintillationByParticleType(), G4Scintillation::SetScintillationExcitationRatio(), G4Scintillation::SetScintillationYieldFactor(), G4Scintillation::SetTrackSecondariesFirst(), G4Cerenkov::SetTrackSecondariesFirst(), G4OpWLS::UseTimeProfile(), and G4VPhysicsConstructor::verboseLevel.

141 {
142 // Construct optical processes.
143 
144  if(verboseLevel>0)
145  G4cout <<"G4OpticalPhysics:: Add Optical Physics Processes"<< G4endl;
146 
147  // A vector of optical processes
148  std::vector<G4VProcess*> OpProcesses;
149 
150  for ( G4int i=0; i<kNoProcess; i++ ) OpProcesses.push_back(NULL);
151 
152  // Add Optical Processes
153 
154  G4OpAbsorption* OpAbsorptionProcess = new G4OpAbsorption();
155  G4OpRayleigh* OpRayleighScatteringProcess = new G4OpRayleigh();
156  G4OpMieHG* OpMieHGScatteringProcess = new G4OpMieHG();
157 
158  OpProcesses[kAbsorption] = OpAbsorptionProcess;
159  OpProcesses[kRayleigh] = OpRayleighScatteringProcess;
160  OpProcesses[kMieHG] = OpMieHGScatteringProcess;
161 
162  G4OpBoundaryProcess* OpBoundaryProcess = new G4OpBoundaryProcess();
163 
164  OpProcesses[kBoundary] = OpBoundaryProcess;
165 
166  G4OpWLS* OpWLSProcess = new G4OpWLS();
167 
168  OpProcesses[kWLS] = OpWLSProcess;
169 
170  G4ProcessManager * pManager = 0;
172 
173  if (!pManager) {
174  std::ostringstream o;
175  o << "Optical Photon without a Process Manager";
176  G4Exception("G4OpticalPhysics::ConstructProcess()","",
177  FatalException,o.str().c_str());
178  return;
179  }
180 
181  for ( G4int i=kAbsorption; i<=kWLS; i++ ) {
182  if ( fProcessUse[i] ) {
183  pManager->AddDiscreteProcess(OpProcesses[i]);
184  }
185  }
186 
187  G4Scintillation* ScintillationProcess = new G4Scintillation();
188 
189  OpProcesses[kScintillation] = ScintillationProcess;
190 
191  G4Cerenkov* CerenkovProcess = new G4Cerenkov();
192  OpProcesses[kCerenkov] = CerenkovProcess;
193 
194  // static parameters - set only for masther thread
196  {
197  G4OpWLS::UseTimeProfile(fProfile);
198 
201  G4Scintillation::SetFiniteRiseTime(fFiniteRiseTime);
202  G4Scintillation::SetScintillationByParticleType(fScintillationByParticleType);
203  G4Scintillation::SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
204 
205  // Use Birks Correction in the Scintillation process
207  G4Scintillation::AddSaturation(emSaturation);
208 
209  G4Cerenkov::SetMaxNumPhotonsPerStep(fMaxNumPhotons);
210  G4Cerenkov::SetMaxBetaChangePerStep(fMaxBetaChange);
211  G4Cerenkov::SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kCerenkov]);
212  }
213 
214  aParticleIterator->reset();
215 
216  while( (*aParticleIterator)() ){
217 
218  G4ParticleDefinition* particle = aParticleIterator->value();
219  G4String particleName = particle->GetParticleName();
220 
221  pManager = particle->GetProcessManager();
222  if (!pManager) {
223  std::ostringstream o;
224  o << "Particle " << particleName << "without a Process Manager";
225  G4Exception("G4OpticalPhysics::ConstructProcess()","",
226  FatalException,o.str().c_str());
227  return; // else coverity complains for pManager use below
228  }
229 
230  if( CerenkovProcess->IsApplicable(*particle) &&
231  fProcessUse[kCerenkov] ) {
232  pManager->AddProcess(CerenkovProcess);
233  pManager->SetProcessOrdering(CerenkovProcess,idxPostStep);
234  }
235  if( ScintillationProcess->IsApplicable(*particle) &&
236  fProcessUse[kScintillation] ){
237  pManager->AddProcess(ScintillationProcess);
238  pManager->SetProcessOrderingToLast(ScintillationProcess,idxAtRest);
239  pManager->SetProcessOrderingToLast(ScintillationProcess,idxPostStep);
240  }
241 
242  }
243 
244  // Add verbose
245  for ( G4int i=0; i<kNoProcess; i++ ) {
246  if ( fProcessUse[i] ) OpProcesses[i]->SetVerboseLevel(fProcessVerbose[i]);
247  }
248 
249  if (verboseLevel > 1) PrintStatistics();
250  if (verboseLevel > 0)
251  G4cout << "### " << namePhysics << " physics constructed." << G4endl;
252 }
static void SetScintillationByParticleType(const G4bool)
static void SetMaxBetaChangePerStep(const G4double d)
Definition: G4Cerenkov.cc:148
static G4LossTableManager * Instance()
static void SetFiniteRiseTime(const G4bool state)
Number of processes, no selected process.
static void SetTrackSecondariesFirst(const G4bool state)
Definition: G4Cerenkov.cc:143
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
Scintillation process index.
G4bool IsApplicable(const G4ParticleDefinition &aParticleType)
Mie scattering process index.
Absorption process index.
G4ProcessManager * GetProcessManager() const
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
static void UseTimeProfile(const G4String name)
Definition: G4OpWLS.cc:426
static void SetScintillationYieldFactor(const G4double yieldfactor)
G4GLOB_DLL std::ostream G4cout
static void AddSaturation(G4EmSaturation *)
#define aParticleIterator
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
G4EmSaturation * EmSaturation()
static void SetMaxNumPhotonsPerStep(const G4int NumPhotons)
Definition: G4Cerenkov.cc:153
void SetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt, G4int ordDoIt=ordDefault)
Wave Length Shifting process index.
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4bool IsWorkerThread()
Definition: G4Threading.cc:104
static void SetScintillationExcitationRatio(const G4double ratio)
static G4OpticalPhoton * OpticalPhoton()
Boundary process index.
static void SetTrackSecondariesFirst(const G4bool state)
void SetProcessOrderingToLast(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
Cerenkov process index.
#define G4endl
Definition: G4ios.hh:61
Rayleigh scattering process index.
G4bool IsApplicable(const G4ParticleDefinition &aParticleType)
Definition: G4Cerenkov.cc:132
void G4OpticalPhysics::SetFiniteRiseTime ( G4bool  finiteRiseTime)

Definition at line 320 of file G4OpticalPhysics.cc.

References G4Scintillation::SetFiniteRiseTime().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

321 {
322  fFiniteRiseTime = finiteRiseTime;
323  G4Scintillation::SetFiniteRiseTime(finiteRiseTime);
324 }
static void SetFiniteRiseTime(const G4bool state)
void G4OpticalPhysics::SetMaxBetaChangePerStep ( G4double  maxBetaChange)

Limit step to the specified maximum change of beta of the parent particle

Definition at line 278 of file G4OpticalPhysics.cc.

References G4Cerenkov::SetMaxBetaChangePerStep().

Referenced by LXePhysicsList::LXePhysicsList(), and G4OpticalPhysicsMessenger::SetNewValue().

279 {
280 /// Limit step to the specified maximum change of beta of the parent particle
281 
282  fMaxBetaChange = maxBetaChange;
284 }
static void SetMaxBetaChangePerStep(const G4double d)
Definition: G4Cerenkov.cc:148
void G4OpticalPhysics::SetMaxNumPhotonsPerStep ( G4int  maxNumPhotons)

Limit step to the specified maximum number of Cherenkov photons

Definition at line 270 of file G4OpticalPhysics.cc.

References G4Cerenkov::SetMaxNumPhotonsPerStep().

Referenced by LXePhysicsList::LXePhysicsList(), and G4OpticalPhysicsMessenger::SetNewValue().

271 {
272 /// Limit step to the specified maximum number of Cherenkov photons
273 
274  fMaxNumPhotons = maxNumPhotons;
276 }
static void SetMaxNumPhotonsPerStep(const G4int NumPhotons)
Definition: G4Cerenkov.cc:153
void G4OpticalPhysics::SetProcessVerbose ( G4int  index,
G4int  verbose 
)

Definition at line 339 of file G4OpticalPhysics.cc.

341 {
342  // Set new verbose level to a selected process
343 
344  if ( index >= kNoProcess ) return;
345  if ( fProcessVerbose[index] == verbose ) return;
346  fProcessVerbose[index] = verbose;
347 }
Number of processes, no selected process.
void G4OpticalPhysics::SetScintillationByParticleType ( G4bool  scintillationByParticleType)

Definition at line 301 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationByParticleType().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

302 {
303  fScintillationByParticleType = scintillationByParticleType;
304  G4Scintillation::SetScintillationByParticleType(scintillationByParticleType);
305 }
static void SetScintillationByParticleType(const G4bool)
void G4OpticalPhysics::SetScintillationExcitationRatio ( G4double  excitationRatio)

Set the scintillation excitation ratio

Definition at line 262 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationExcitationRatio().

Referenced by LXePhysicsList::LXePhysicsList().

263 {
264 /// Set the scintillation excitation ratio
265 
266  fExcitationRatio = excitationRatio;
268 }
static void SetScintillationExcitationRatio(const G4double ratio)
void G4OpticalPhysics::SetScintillationYieldFactor ( G4double  yieldFactor)

Set the scintillation yield factor

Definition at line 254 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationYieldFactor().

Referenced by LXePhysicsList::LXePhysicsList(), and G4OpticalPhysicsMessenger::SetNewValue().

255 {
256 /// Set the scintillation yield factor
257 
258  fYieldFactor = yieldFactor;
260 }
static void SetScintillationYieldFactor(const G4double yieldfactor)
void G4OpticalPhysics::SetTrackSecondariesFirst ( G4OpticalProcessIndex  index,
G4bool  trackSecondariesFirst 
)

Definition at line 307 of file G4OpticalPhysics.cc.

References kCerenkov, kScintillation, G4Scintillation::SetTrackSecondariesFirst(), and G4Cerenkov::SetTrackSecondariesFirst().

Referenced by LXePhysicsList::LXePhysicsList(), and G4OpticalPhysicsMessenger::SetNewValue().

309 {
310  if ( index >= kNoProcess ) return;
311  if ( fProcessTrackSecondariesFirst[index] == trackSecondariesFirst ) return;
312  fProcessTrackSecondariesFirst[index] = trackSecondariesFirst;
313 
314  if ( index == kCerenkov )
315  G4Cerenkov::SetTrackSecondariesFirst(trackSecondariesFirst);
316  if ( index == kScintillation)
317  G4Scintillation::SetTrackSecondariesFirst(trackSecondariesFirst);
318 }
Number of processes, no selected process.
static void SetTrackSecondariesFirst(const G4bool state)
Definition: G4Cerenkov.cc:143
Scintillation process index.
static void SetTrackSecondariesFirst(const G4bool state)
Cerenkov process index.
void G4OpticalPhysics::SetWLSTimeProfile ( G4String  profile)

Set the WLS time profile (delta or exponential)

Definition at line 286 of file G4OpticalPhysics.cc.

References profile(), and G4OpWLS::UseTimeProfile().

Referenced by LXePhysicsList::LXePhysicsList(), and G4OpticalPhysicsMessenger::SetNewValue().

287 {
288 /// Set the WLS time profile (delta or exponential)
289 
290  fProfile = profile;
291  G4OpWLS::UseTimeProfile(profile);
292 }
function profile(XB)
Definition: hijing1.383.f:4673
static void UseTimeProfile(const G4String name)
Definition: G4OpWLS.cc:426

The documentation for this class was generated from the following files: