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)
virtual G4ScintillationGetScintillationProcess ()
virtual G4CerenkovGetCerenkovProcess ()
virtual G4OpWLSGetOpWLSProcess ()
virtual G4OpAbsorptionGetOpAbsorptionProcess ()
virtual G4OpRayleighGetOpRayleighProcess ()
virtual G4OpMieHGGetOpMieHGProcess ()
virtual G4OpBoundaryProcessGetOpBoundaryProcess ()
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)

Protected Member Functions

virtual void ConstructParticle ()
virtual void ConstructProcess ()

Detailed Description

Definition at line 69 of file G4OpticalPhysics.hh.


Constructor & Destructor Documentation

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

Definition at line 53 of file G4OpticalPhysics.cc.

References kNoProcess, and G4VPhysicsConstructor::verboseLevel.

00054   : G4VPhysicsConstructor(name),
00055 
00056     wasActivated(false),
00057 
00058     fScintillationProcess(NULL),
00059     fCerenkovProcess(NULL),
00060     fOpWLSProcess(NULL),
00061     fOpAbsorptionProcess(NULL),
00062     fOpRayleighScatteringProcess(NULL),
00063     fOpMieHGScatteringProcess(NULL),
00064     fOpBoundaryProcess(NULL),
00065     fMaxNumPhotons(100),
00066     fMaxBetaChange(10.0),
00067     fYieldFactor(1.),
00068     fExcitationRatio(0.0),
00069     fProfile("delta"),
00070     fFiniteRiseTime(false),
00071     fScintillationByParticleType(false)
00072 {
00073   verboseLevel = verbose;
00074   fMessenger = new G4OpticalPhysicsMessenger(this);
00075 
00076   for ( G4int i=0; i<kNoProcess; i++ ) {
00077     fProcesses.push_back(NULL);
00078     fProcessUse.push_back(true);
00079     fProcessVerbose.push_back(verbose);
00080     fProcessTrackSecondariesFirst.push_back(true);
00081   }
00082 }

G4OpticalPhysics::~G4OpticalPhysics (  )  [virtual]

Definition at line 86 of file G4OpticalPhysics.cc.

00087 {
00088   delete fMessenger;
00089 
00090   if (wasActivated) {
00091 
00092      if (fScintillationProcess) delete fScintillationProcess;
00093      if (fCerenkovProcess) delete fCerenkovProcess;
00094      if (fOpWLSProcess) delete fOpWLSProcess;
00095 
00096      if (fOpAbsorptionProcess) delete fOpAbsorptionProcess;
00097      if (fOpRayleighScatteringProcess) delete fOpRayleighScatteringProcess;
00098      if (fOpMieHGScatteringProcess) delete fOpMieHGScatteringProcess;
00099      if (fOpBoundaryProcess) delete fOpBoundaryProcess;
00100 
00101   }
00102 }


Member Function Documentation

void G4OpticalPhysics::AddScintillationSaturation ( G4EmSaturation  ) 

Definition at line 302 of file G4OpticalPhysics.cc.

References G4Scintillation::AddSaturation().

00303 {
00305 
00306   if(fScintillationProcess)
00307     fScintillationProcess->AddSaturation(saturation);
00308 }

void G4OpticalPhysics::Configure ( G4OpticalProcessIndex  ,
G4bool   
)

Definition at line 339 of file G4OpticalPhysics.cc.

00340 {
00341   // Configure the physics constructor to use/not use a selected process.
00342   // This method can only be called in PreInit> phase (before execution of
00343   // ConstructProcess). The process is not added to particle's process manager
00344   // and so it cannot be re-activated later in Idle> phase with the command
00345   // /process/activate.
00346 
00347   if ( index >= kNoProcess ) return;
00348   if ( fProcessUse[index] == isUse ) return;
00349   fProcessUse[index] = isUse;
00350 }

void G4OpticalPhysics::ConstructParticle (  )  [protected, virtual]

Implements G4VPhysicsConstructor.

Definition at line 140 of file G4OpticalPhysics.cc.

References G4OpticalPhoton::OpticalPhotonDefinition().

00141 {
00143 
00144   // optical photon
00145   G4OpticalPhoton::OpticalPhotonDefinition();
00146 }

void G4OpticalPhysics::ConstructProcess (  )  [protected, virtual]

Implements G4VPhysicsConstructor.

Definition at line 153 of file G4OpticalPhysics.cc.

References G4ProcessManager::AddDiscreteProcess(), G4ProcessManager::AddProcess(), G4Scintillation::AddSaturation(), G4LossTableManager::EmSaturation(), FatalException, G4cout, G4Exception(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetProcessManager(), idxAtRest, idxPostStep, G4LossTableManager::Instance(), G4Scintillation::IsApplicable(), G4Cerenkov::IsApplicable(), kAbsorption, kBoundary, kCerenkov, kMieHG, kRayleigh, kScintillation, kWLS, G4VPhysicsConstructor::namePhysics, G4OpticalPhoton::OpticalPhoton(), G4ParticleTableIterator< K, V >::reset(), G4Scintillation::SetFiniteRiseTime(), G4Cerenkov::SetMaxBetaChangePerStep(), G4Cerenkov::SetMaxNumPhotonsPerStep(), G4ProcessManager::SetProcessOrdering(), G4ProcessManager::SetProcessOrderingToLast(), G4Scintillation::SetScintillationByParticleType(), G4Scintillation::SetScintillationExcitationRatio(), G4Scintillation::SetScintillationYieldFactor(), SetTrackSecondariesFirst(), G4VPhysicsConstructor::SetVerboseLevel(), G4VPhysicsConstructor::theParticleIterator, G4OpWLS::UseTimeProfile(), G4ParticleTableIterator< K, V >::value(), and G4VPhysicsConstructor::verboseLevel.

00154 {
00155 // Construct optical processes.
00156 
00157   if (wasActivated) return;
00158 
00159   if(verboseLevel>0)
00160          G4cout <<"G4OpticalPhysics:: Add Optical Physics Processes"<< G4endl;
00161 
00162   // Add Optical Processes
00163 
00164   fProcesses[kAbsorption] = fOpAbsorptionProcess  = new G4OpAbsorption();
00165   fProcesses[kRayleigh] = fOpRayleighScatteringProcess = new G4OpRayleigh();
00166   fProcesses[kMieHG] = fOpMieHGScatteringProcess = new G4OpMieHG();
00167 
00168   fProcesses[kBoundary] = fOpBoundaryProcess = new G4OpBoundaryProcess();
00169 
00170   fProcesses[kWLS] = fOpWLSProcess = new G4OpWLS();
00171   fOpWLSProcess->UseTimeProfile(fProfile);
00172 
00173   G4ProcessManager * pManager = 0;
00174   pManager = G4OpticalPhoton::OpticalPhoton()->GetProcessManager();
00175 
00176   if (!pManager) {
00177      std::ostringstream o;
00178      o << "Optical Photon without a Process Manager";
00179      G4Exception("G4OpticalPhysics::ConstructProcess()","",
00180                   FatalException,o.str().c_str());
00181      return;
00182   }
00183 
00184   for ( G4int i=kAbsorption; i<=kWLS; i++ ) {
00185       if ( fProcessUse[i] ) {
00186          pManager->AddDiscreteProcess(fProcesses[i]);
00187       }
00188   }
00189 
00190   fProcesses[kScintillation] = fScintillationProcess = new G4Scintillation();
00191   fScintillationProcess->SetScintillationYieldFactor(fYieldFactor);
00192   fScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
00193   fScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
00194   fScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
00195   fScintillationProcess->
00196        SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
00197 
00198   // Use Birks Correction in the Scintillation process
00199 
00200   G4EmSaturation* emSaturation = G4LossTableManager::Instance()->EmSaturation();
00201   fScintillationProcess->AddSaturation(emSaturation);
00202 
00203   fProcesses[kCerenkov] = fCerenkovProcess = new G4Cerenkov();
00204   fCerenkovProcess->SetMaxNumPhotonsPerStep(fMaxNumPhotons);
00205   fCerenkovProcess->SetMaxBetaChangePerStep(fMaxBetaChange);
00206   fCerenkovProcess->
00207        SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kCerenkov]);
00208 
00209   theParticleIterator->reset();
00210 
00211   while( (*theParticleIterator)() ){
00212 
00213     G4ParticleDefinition* particle = theParticleIterator->value();
00214     G4String particleName = particle->GetParticleName();
00215 
00216     pManager = particle->GetProcessManager();
00217     if (!pManager) {
00218        std::ostringstream o;
00219        o << "Particle " << particleName << "without a Process Manager";
00220        G4Exception("G4OpticalPhysics::ConstructProcess()","",
00221                     FatalException,o.str().c_str());
00222        return;                 // else coverity complains for pManager use below            
00223     }
00224 
00225     if( fCerenkovProcess->IsApplicable(*particle) &&
00226         fProcessUse[kCerenkov] ) {
00227           pManager->AddProcess(fCerenkovProcess);
00228           pManager->SetProcessOrdering(fCerenkovProcess,idxPostStep);
00229     }
00230     if( fScintillationProcess->IsApplicable(*particle) &&
00231         fProcessUse[kScintillation] ){
00232           pManager->AddProcess(fScintillationProcess);
00233           pManager->SetProcessOrderingToLast(fScintillationProcess,idxAtRest);
00234           pManager->SetProcessOrderingToLast(fScintillationProcess,idxPostStep);
00235     }
00236 
00237   }
00238 
00239   // Add verbose
00240   for ( G4int i=0; i<kNoProcess; i++ ) {
00241     fProcesses[i]->SetVerboseLevel(fProcessVerbose[i]);
00242   }
00243 
00244   if (verboseLevel > 1) PrintStatistics();
00245   if (verboseLevel > 0)
00246     G4cout << "### " << namePhysics << " physics constructed." << G4endl;
00247 
00248   wasActivated = true;
00249 
00250 }

virtual G4Cerenkov* G4OpticalPhysics::GetCerenkovProcess (  )  [inline, virtual]

Definition at line 97 of file G4OpticalPhysics.hh.

00098                                        { return fCerenkovProcess; }

virtual G4OpAbsorption* G4OpticalPhysics::GetOpAbsorptionProcess (  )  [inline, virtual]

Definition at line 101 of file G4OpticalPhysics.hh.

00102                                        { return fOpAbsorptionProcess; }

virtual G4OpBoundaryProcess* G4OpticalPhysics::GetOpBoundaryProcess (  )  [inline, virtual]

Definition at line 107 of file G4OpticalPhysics.hh.

00108                                        { return fOpBoundaryProcess; }

virtual G4OpMieHG* G4OpticalPhysics::GetOpMieHGProcess (  )  [inline, virtual]

Definition at line 105 of file G4OpticalPhysics.hh.

00106                                        { return fOpMieHGScatteringProcess; }

virtual G4OpRayleigh* G4OpticalPhysics::GetOpRayleighProcess (  )  [inline, virtual]

Definition at line 103 of file G4OpticalPhysics.hh.

00104                                        { return fOpRayleighScatteringProcess; }

virtual G4OpWLS* G4OpticalPhysics::GetOpWLSProcess (  )  [inline, virtual]

Definition at line 99 of file G4OpticalPhysics.hh.

00099 { return fOpWLSProcess; }

virtual G4Scintillation* G4OpticalPhysics::GetScintillationProcess (  )  [inline, virtual]

Definition at line 95 of file G4OpticalPhysics.hh.

00096                                        { return fScintillationProcess; }

void G4OpticalPhysics::SetFiniteRiseTime ( G4bool   ) 

Definition at line 332 of file G4OpticalPhysics.cc.

References G4Scintillation::SetFiniteRiseTime().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00333 {
00334   fFiniteRiseTime = finiteRiseTime;
00335   if(fScintillationProcess)
00336     fScintillationProcess->SetFiniteRiseTime(finiteRiseTime);
00337 } 

void G4OpticalPhysics::SetMaxBetaChangePerStep ( G4double   ) 

Definition at line 282 of file G4OpticalPhysics.cc.

References G4Cerenkov::SetMaxBetaChangePerStep().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00283 {
00285 
00286   fMaxBetaChange = maxBetaChange;
00287 
00288   if(fCerenkovProcess)
00289     fCerenkovProcess->SetMaxBetaChangePerStep(maxBetaChange);
00290 }

void G4OpticalPhysics::SetMaxNumPhotonsPerStep ( G4int   ) 

Definition at line 272 of file G4OpticalPhysics.cc.

References G4Cerenkov::SetMaxNumPhotonsPerStep().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00273 {
00275 
00276   fMaxNumPhotons = maxNumPhotons;
00277 
00278   if(fCerenkovProcess)
00279     fCerenkovProcess->SetMaxNumPhotonsPerStep(maxNumPhotons);
00280 }

void G4OpticalPhysics::SetProcessVerbose ( G4int  ,
G4int   
)

Definition at line 352 of file G4OpticalPhysics.cc.

00354 {
00355   // Set new verbose level to a selected process
00356 
00357   if ( index >= kNoProcess ) return;
00358   if ( fProcessVerbose[index] == inputVerboseLevel ) return;
00359 
00360   fProcessVerbose[index] = inputVerboseLevel;
00361 
00362   if ( fProcesses[index] ) fProcesses[index]->SetVerboseLevel(inputVerboseLevel);
00363 }

void G4OpticalPhysics::SetScintillationByParticleType ( G4bool   ) 

Definition at line 310 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationByParticleType().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00311 {
00312   fScintillationByParticleType = scintillationByParticleType;
00313 
00314   if (fScintillationProcess)
00315      fScintillationProcess->SetScintillationByParticleType(scintillationByParticleType);
00316 }

void G4OpticalPhysics::SetScintillationExcitationRatio ( G4double   ) 

Definition at line 262 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationExcitationRatio().

00263 {
00265 
00266   fExcitationRatio = excitationRatio;
00267 
00268   if(fScintillationProcess)
00269     fScintillationProcess->SetScintillationExcitationRatio(excitationRatio);
00270 }

void G4OpticalPhysics::SetScintillationYieldFactor ( G4double   ) 

Definition at line 252 of file G4OpticalPhysics.cc.

References G4Scintillation::SetScintillationYieldFactor().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00253 {
00255 
00256   fYieldFactor = yieldFactor;
00257 
00258   if(fScintillationProcess)
00259     fScintillationProcess->SetScintillationYieldFactor(yieldFactor);
00260 }

void G4OpticalPhysics::SetTrackSecondariesFirst ( G4OpticalProcessIndex  ,
G4bool   
)

Definition at line 318 of file G4OpticalPhysics.cc.

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

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

00320 {
00321   if ( index >= kNoProcess ) return;
00322   if ( fProcessTrackSecondariesFirst[index] == trackSecondariesFirst ) return;
00323   fProcessTrackSecondariesFirst[index] = trackSecondariesFirst;
00324 
00325   if(fCerenkovProcess && index == kCerenkov )
00326     fCerenkovProcess->SetTrackSecondariesFirst(trackSecondariesFirst);
00327 
00328   if(fScintillationProcess && index == kScintillation)
00329     fScintillationProcess->SetTrackSecondariesFirst(trackSecondariesFirst);
00330 }

void G4OpticalPhysics::SetWLSTimeProfile ( G4String   ) 

Definition at line 292 of file G4OpticalPhysics.cc.

References G4OpWLS::UseTimeProfile().

Referenced by G4OpticalPhysicsMessenger::SetNewValue().

00293 {
00295 
00296   fProfile = profile;
00297 
00298   if(fOpWLSProcess)
00299     fOpWLSProcess->UseTimeProfile(fProfile);
00300 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:47 2013 for Geant4 by  doxygen 1.4.7