Import Geant4 10.5.1 source tree

This commit is contained in:
Gabriele Cosmo
2019-04-17 10:39:02 +02:00
parent a7fdc52004
commit 28a70706e0
661 changed files with 55791 additions and 106984 deletions
@@ -13,6 +13,24 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
09 April 2019, V.Ivanchenko (phys-ctor-em-V10-04-22)
20 March 2019, D.Sawkey
- G4OpticalPhysics, G4OpticalPhysicsMessenger - put all UI commands
into messenger class; fix bug 2085; deprecate commands with
/default/ in command string
07 March 2019, V.Ivanchenko
- G4EmLivermorePhysics, G4EmPenelopePhysics - make msc configuration
as in Opt4 : RangeFactor=0.08, Skin=3, UserSafetyPlus
- G4EmModelActivator - fixed problem 2106
18 January 2019, V.Ivanchenko
- G4EmStandardPhysicsWVI - use G4eplusTo2GammaOKVIModel with 3-gamma
annihilation for e+
14 January 2019, V.Ivanchenko
- G4EmStandardPhysics_option4 - change RangeFactor to 0.08 in
order to have expected results from fanoCavity test (M.Novak)
19 December 2018, V.Ivanchenko
- G4EmModelActivator - fixed clang7 compilation warning
27 November 2018, V.Ivanchenko (phys-ctor-em-V10-04-21)
- G4EmStandardPhysics_option2 - use the same models and parameters as
in LHCb EM physics constructor
@@ -42,19 +42,24 @@
#ifndef G4OpticalPhysics_h
#define G4OpticalPhysics_h 1
#include "globals.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4OpticalProcessIndex.hh"
#include "G4OpticalPhysicsMessenger.hh"
#include "G4OpticalSurface.hh"
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
#include <vector>
class G4VProcess;
class G4EmSaturation;
class G4Scintillation;
class G4Cerenkov;
class G4OpWLS;
class G4OpRayleigh;
class G4OpMieHG;
class G4OpBoundaryProcess;
class G4OpAbsorption;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -83,24 +88,38 @@ class G4OpticalPhysics : public G4VPhysicsConstructor
// configure G4OpticalPhysics builder
void Configure(G4OpticalProcessIndex, G4bool );
void SetMaxNumPhotonsPerStep(G4int );
void SetMaxBetaChangePerStep(G4double );
void SetTrackSecondariesFirst(G4OpticalProcessIndex, G4bool );
// Cerenkov
void SetMaxNumPhotonsPerStep(G4int);
void SetMaxBetaChangePerStep(G4double);
void SetCerenkovStackPhotons(G4bool);
void SetCerenkovTrackSecondariesFirst(G4bool);
void SetCerenkovVerbosity(G4int);
// Scintillation
void SetScintillationYieldFactor(G4double );
void SetScintillationExcitationRatio(G4double );
void SetWLSTimeProfile(G4String );
void SetScintillationByParticleType(G4bool );
void SetScintillationTrackInfo(G4bool );
void SetScintillationTrackSecondariesFirst(G4bool);
void SetFiniteRiseTime(G4bool );
void SetScintillationStackPhotons(G4bool );
void SetScintillationVerbosity(G4int);
//void AddScintillationSaturation(G4EmSaturation* );
void SetTrackSecondariesFirst(G4OpticalProcessIndex, G4bool );
void SetFiniteRiseTime(G4bool );
void SetCerenkovStackPhotons(G4bool );
void SetScintillationStackPhotons(G4bool );
// WLS
void SetWLSTimeProfile(G4String );
void SetWLSVerbosity(G4int);
//boundary
void SetBoundaryVerbosity(G4int);
void SetInvokeSD(G4bool );
void SetAbsorptionVerbosity(G4int);
void SetRayleighVerbosity(G4int);
void SetMieVerbosity(G4int);
private:
// methods
@@ -116,21 +135,14 @@ class G4OpticalPhysics : public G4VPhysicsConstructor
// the option to track secondaries before finishing their parent track
std::vector<G4bool> fProcessTrackSecondariesFirst;
/// max number of Cerenkov photons per step
G4int fMaxNumPhotons;
/// max change of beta per step
G4double fMaxBetaChange;
// scintillation /////////////////
static G4ThreadLocal G4Scintillation* fScintillationProcess;
/// scintillation yield factor
G4double fYieldFactor;
/// scintillation excitation ratio
G4double fExcitationRatio;
/// the WLS process time profile
G4String fProfile;
/// option to set a finite rise-time; Note: the G4Scintillation
/// process expects the user to have set the constant material
/// property FAST/SLOWSCINTILLATIONRISETIME
@@ -145,15 +157,39 @@ class G4OpticalPhysics : public G4VPhysicsConstructor
/// to be attached to a scintillation photon's track
G4bool fScintillationTrackInfo;
/// option to allow for G4OpBoundaryProcess
/// to call/not call InvokeSD method
G4bool fInvokeSD;
/// option to allow stacking of secondary Cerenkov photons
G4bool fCerenkovStackPhotons;
/// option to allow stacking of secondary Scintillation photons
G4bool fScintillationStackPhotons;
G4int fScintillationVerbosity;
////////////////// Cerenkov
static G4ThreadLocal G4Cerenkov* fCerenkovProcess;
/// max number of Cerenkov photons per step
G4int fMaxNumPhotons;
/// max change of beta per step
G4double fMaxBetaChange;
/// option to allow stacking of secondary Cerenkov photons
G4bool fCerenkovStackPhotons;
G4int fCerenkovVerbosity;
///////////////// WLS
static G4ThreadLocal G4OpWLS* fWLSProcess;
G4String fWLSTimeProfileName;
G4int fWLSVerbosity;
static G4ThreadLocal G4OpAbsorption* fAbsorptionProcess;
G4int fAbsorptionVerbosity;
static G4ThreadLocal G4OpRayleigh* fRayleighProcess;
G4int fRayleighVerbosity;
static G4ThreadLocal G4OpMieHG* fMieProcess;
G4int fMieVerbosity;
static G4ThreadLocal G4OpBoundaryProcess* fBoundaryProcess;
/// G4OpBoundaryProcess to call InvokeSD method
G4bool fInvokeSD;
G4int fBoundaryVerbosity;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -42,11 +42,11 @@
#ifndef G4OpticalPhysicsMessenger_h
#define G4OpticalPhysicsMessenger_h 1
#include "globals.hh"
#include "G4UImessenger.hh"
#include "G4OpticalProcessIndex.hh"
#include "globals.hh"
class G4VProcess;
class G4OpticalPhysics;
@@ -58,20 +58,6 @@ class G4UIcmdWithAnInteger;
class G4UIcommand;
// Messenger class that defines commands for the optical physics
//
// Implements commands:
// - /process/optical/processActivation proc_name flag
// - /process/optical/verbose level
// - /process/optical/setTrackSecondariesFirst proc_name flag
// - /process/optical/defaults/cerenkov/setMaxPhotons val
// - /process/optical/defaults/cerenkov/setMaxBetaChange val
// - /process/optical/defaults/cerenkov/setStackPhotons flag
// - /process/optical/defaults/scintillation/setYieldFactor val
// - /process/optical/defaults/scintillation/setByParticleType val
// - /process/optical/defaults/scintillation/setFiniteRiseTime val
// - /process/optical/defaults/scintillation/setStackPhotons flag
// - /process/optical/defaults/wls/setTimeProfile val
// - /process/optical/defaults/boundary/setInvokeSD flag
class G4OpticalPhysicsMessenger: public G4UImessenger
{
@@ -92,10 +78,12 @@ private:
/// Not implemented
G4OpticalPhysicsMessenger& operator=(const G4OpticalPhysicsMessenger& right);
void Deprecated(void);
// data members
/// associated class
G4OpticalPhysics* fOpticalPhysics;
G4OpticalPhysics* fOpticalPhysics;
/// command directory
G4UIdirectory* fDir;
@@ -105,47 +93,75 @@ private:
G4OpticalProcessIndex fSelectedProcessIndex;
/// selectOpProcess command
G4UIcommand* fActivateProcessCmd;
G4UIcommand* fActivateProcessCmd;
/// setProcessVerbose command
G4UIcmdWithAnInteger* fSetOpProcessVerboseCmd;
/// setCerenkovMaxPhotons command
G4UIcmdWithAnInteger* fSetCerenkovMaxPhotonsCmd;
/// setCerenkovMaxBetaChange command
G4UIcmdWithADouble* fSetCerenkovMaxBetaChangeCmd;
/// setStackPhotons command
G4UIcmdWithABool* fSetCerenkovStackPhotonsCmd;
/// setScintillationYieldFactor command
G4UIcmdWithADouble* fSetScintillationYieldFactorCmd;
/// setScintillationByParticleType command
G4UIcmdWithABool* fSetScintillationByParticleTypeCmd;
/// setScintillationTrackInfo command
G4UIcmdWithABool* fSetScintillationTrackInfoCmd;
/// setStackPhotons command
G4UIcmdWithABool* fSetScintillationStackPhotonsCmd;
// /// setOpticalSurfaceModel command
// G4UIcmdWithAString* fSetOpticalSurfaceModelCmd;
/// setWLSTimeProfile command
G4UIcmdWithAString* fSetWLSTimeProfileCmd;
G4UIcmdWithAnInteger* fVerboseCmd;
/// setTrackSecondariesFirst command
G4UIcommand* fSetTrackSecondariesFirstCmd;
G4UIcommand* fTrackSecondariesFirstCmd;
// Cerenkov
/// setCerenkovMaxPhotons command
G4UIcmdWithAnInteger* fCerenkovMaxPhotonsCmd;
G4UIcmdWithAnInteger* fCerenkovMaxPhotons1Cmd;
/// setCerenkovMaxBetaChange command
G4UIcmdWithADouble* fCerenkovMaxBetaChangeCmd;
G4UIcmdWithADouble* fCerenkovMaxBetaChange1Cmd;
/// setStackPhotons command
G4UIcmdWithABool* fCerenkovStackPhotonsCmd;
G4UIcmdWithABool* fCerenkovStackPhotons1Cmd;
G4UIcmdWithABool* fCerenkovTrackSecondariesFirstCmd;
G4UIcmdWithAnInteger* fCerenkovVerbosityCmd;
// Scintillation
/// setScintillationYieldFactor command
G4UIcmdWithADouble* fScintYieldFactorCmd;
G4UIcmdWithADouble* fScintYieldFactor1Cmd;
/// setScintillationByParticleType command
G4UIcmdWithABool* fScintByParticleTypeCmd;
G4UIcmdWithABool* fScintByParticleType1Cmd;
/// setScintillationTrackInfo command
G4UIcmdWithABool* fScintTrackInfoCmd;
G4UIcmdWithABool* fScintTrackInfo1Cmd;
/// setStackPhotons command
G4UIcmdWithABool* fScintStackPhotonsCmd;
G4UIcmdWithABool* fScintStackPhotons1Cmd;
G4UIcmdWithADouble* fScintExcitationRatioCmd;
G4UIcmdWithABool* fScintTrackSecondariesFirstCmd;
G4UIcmdWithAnInteger* fScintillationVerbosityCmd;
/// setFiniteRiseTime command
G4UIcmdWithABool* fSetFiniteRiseTimeCmd;
G4UIcmdWithABool* fScintFiniteRiseTimeCmd;
G4UIcmdWithABool* fScintFiniteRiseTime1Cmd;
G4UIcmdWithAnInteger* fScintVerbosityCmd;
// WLS
/// setWLSTimeProfile command
G4UIcmdWithAString* fWLSTimeProfileCmd;
G4UIcmdWithAString* fWLSTimeProfile1Cmd;
G4UIcmdWithAnInteger* fWLSVerbosityCmd;
/// setInvokeSD command
G4UIcmdWithABool* fSetInvokeSDCmd;
G4UIcmdWithABool* fBoundaryInvokeSDCmd;
G4UIcmdWithABool* fBoundaryInvokeSD1Cmd;
G4UIcmdWithAnInteger* fBoundaryVerbosityCmd;
G4UIcmdWithAnInteger* fAbsorptionVerbosityCmd;
G4UIcmdWithAnInteger* fRayleighVerbosityCmd;
G4UIcmdWithAnInteger* fMieVerbosityCmd;
};
@@ -146,7 +146,7 @@ G4EmLivermorePhysics::G4EmLivermorePhysics(G4int ver, const G4String&)
param->SetUseMottCorrection(true);
param->SetMscStepLimitType(fUseSafetyPlus);
param->SetMscSkin(3);
param->SetMscRangeFactor(0.2);
param->SetMscRangeFactor(0.08);
param->SetMuHadLateralDisplacement(true);
//param->SetUseICRU90Data(true);
param->SetFluo(true);
@@ -232,7 +232,6 @@ void G4EmLivermorePhysics::ConstructProcess()
// nuclear stopping
G4NuclearStopping* pnuc = new G4NuclearStopping();
G4NuclearStopping* inuc = new G4NuclearStopping();
// Add Livermore EM Processes
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
@@ -376,7 +375,7 @@ void G4EmLivermorePhysics::ConstructProcess()
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(ionIoni, particle);
ph->RegisterProcess(inuc, particle);
ph->RegisterProcess(pnuc, particle);
} else if (particleName == "pi+" ||
particleName == "pi-" ) {
@@ -412,7 +411,6 @@ void G4EmLivermorePhysics::ConstructProcess()
ph->RegisterProcess(pb, particle);
ph->RegisterProcess(pp, particle);
ph->RegisterProcess(new G4CoulombScattering(), particle);
ph->RegisterProcess(pnuc, particle);
} else if (particleName == "B+" ||
particleName == "B-" ||
@@ -453,7 +451,6 @@ void G4EmLivermorePhysics::ConstructProcess()
// Nuclear stopping
pnuc->SetMaxKinEnergy(MeV);
inuc->SetMaxKinEnergy(MeV);
// Deexcitation
//
@@ -185,11 +185,9 @@ void G4EmModelActivator::ActivateEmOptions()
if("G4EmStandard" == typesPhys[i]) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetLocked(true);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = new G4UrbanMscModel();
msc->SetLocked(true);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
} else if("G4EmStandard_opt1" == typesPhys[i] ||
@@ -197,13 +195,11 @@ void G4EmModelActivator::ActivateEmOptions()
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetStepLimitType(fMinimal);
msc->SetRangeFactor(0.2);
msc->SetLocked(true);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = new G4UrbanMscModel();
msc->SetStepLimitType(fMinimal);
msc->SetRangeFactor(0.2);
msc->SetLocked(true);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
} else if("G4EmStandard_opt3" == typesPhys[i]) {
@@ -231,6 +227,7 @@ void G4EmModelActivator::ActivateEmOptions()
FindOrAddProcess(prot, "CoulombScat");
em_config->SetExtraEmModel("proton", "CoulombScat", dummy, reg);
theParameters->SetNumberOfBinsPerDecade(20);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(reg, true, false, false);
}
@@ -247,17 +244,24 @@ void G4EmModelActivator::ActivateEmOptions()
} else if("G4EmStandard_opt4" == typesPhys[i]) {
G4VMscModel* msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
theParameters->SetNumberOfBinsPerDecade(20);
theParameters->SetUseMottCorrection(true);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(reg, true, false, false);
//theParameters->SetStepFunction(0.2, 10*um);
//theParameters->SetStepFunctionMuHad(0.1, 10*um);
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
@@ -271,30 +275,19 @@ void G4EmModelActivator::ActivateEmOptions()
} else if("G4EmStandardGS" == typesPhys[i]) {
G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel();
msc->SetRangeFactor(0.06);
msc->SetLocked(true);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = new G4GoudsmitSaundersonMscModel();
msc->SetRangeFactor(0.06);
msc->SetLocked(true);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
} else if("G4EmStandardWVI" == typesPhys[i]) {
G4WentzelVIModel* msc = new G4WentzelVIModel();
msc->SetLocked(true);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = new G4WentzelVIModel();
msc->SetLocked(true);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
FindOrAddProcess(elec, "CoulombScat");
FindOrAddProcess(posi, "CoulombScat");
mod = new G4eCoulombScatteringModel();
em_config->SetExtraEmModel("e-", "CoulombScat", mod, reg, 0.0, mscEnergyLimit);
mod = new G4eCoulombScatteringModel();
em_config->SetExtraEmModel("e+", "CoulombScat", mod, reg, 0.0, mscEnergyLimit);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
@@ -328,9 +321,15 @@ void G4EmModelActivator::ActivateEmOptions()
} else if("G4EmLivermore" == typesPhys[i]) {
G4VMscModel* msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
mod = new G4LivermorePhotoElectricModel();
@@ -350,6 +349,8 @@ void G4EmModelActivator::ActivateEmOptions()
mod = new G4LivermoreBremsstrahlungModel();
em_config->SetExtraEmModel("e-", "eBrem", mod, reg, 0.0, highEnergyLimit);
theParameters->SetNumberOfBinsPerDecade(20);
theParameters->SetUseMottCorrection(true);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
@@ -358,9 +359,15 @@ void G4EmModelActivator::ActivateEmOptions()
} else if("G4EmPenelope" == typesPhys[i]) {
G4VMscModel* msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(elec, em_config, msc, reg, mscEnergyLimit, highEnergy);
msc = GetGSModel();
msc->SetRangeFactor(0.08);
msc->SetSkin(3);
msc->SetStepLimitType(fUseSafetyPlus);
AddStandardScattering(posi, em_config, msc, reg, mscEnergyLimit, highEnergy);
mod = new G4PenelopePhotoElectricModel();
@@ -388,6 +395,8 @@ void G4EmModelActivator::ActivateEmOptions()
mod = new G4PenelopeAnnihilationModel();
em_config->SetExtraEmModel("e+", "annihil", mod, reg, 0.0, highEnergyLimit);
theParameters->SetNumberOfBinsPerDecade(20);
theParameters->SetUseMottCorrection(true);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
@@ -428,7 +437,7 @@ void G4EmModelActivator::ActivatePAI()
const std::vector<G4VEnergyLossProcess*>& v = G4LossTableManager::Instance()
->GetEnergyLossProcessVector();
std::vector<G4VEnergyLossProcess*>::const_iterator itr;
G4RegionStore* regionStore = G4RegionStore::GetInstance();
const G4ParticleDefinition* elec = G4Electron::Electron();
@@ -462,7 +471,6 @@ void G4EmModelActivator::ActivatePAI()
else if (p == gion)
{ name = "ionIoni"; }
//for(itr = v.begin(); itr != v.end(); ++itr) {
for(auto proc : v) {
if(!proc->IsIonisationProcess()) { continue; }
@@ -711,6 +719,7 @@ void G4EmModelActivator::AddStandardScattering(const G4ParticleDefinition* part,
G4String pname = part->GetParticleName();
// low-energy msc model
mscmod->SetLocked(true);
em_config->SetExtraEmModel(pname, "msc", mscmod, reg, 0.0, e1);
// high energy msc model
@@ -148,7 +148,7 @@ G4EmPenelopePhysics::G4EmPenelopePhysics(G4int ver, const G4String&)
param->SetUseMottCorrection(true);
param->SetMscStepLimitType(fUseSafetyPlus);
param->SetMscSkin(3);
param->SetMscRangeFactor(0.2);
param->SetMscRangeFactor(0.08);
param->SetMuHadLateralDisplacement(true);
param->SetFluo(true);
//param->SetAugerCascade(true);
@@ -233,7 +233,6 @@ void G4EmPenelopePhysics::ConstructProcess()
// nuclear stopping
G4NuclearStopping* pnuc = new G4NuclearStopping();
G4NuclearStopping* inuc = new G4NuclearStopping();
//Applicability range for Penelope models
//for higher energies, the Standard models are used
@@ -395,7 +394,7 @@ void G4EmPenelopePhysics::ConstructProcess()
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(ionIoni, particle);
ph->RegisterProcess(inuc, particle);
ph->RegisterProcess(pnuc, particle);
} else if (particleName == "pi+" ||
particleName == "pi-" ) {
@@ -423,6 +422,7 @@ void G4EmPenelopePhysics::ConstructProcess()
particleName == "anti_proton") {
G4hMultipleScattering* pmsc = new G4hMultipleScattering();
pmsc->SetEmModel(new G4WentzelVIModel());
G4hIonisation* hIoni = new G4hIonisation();
ph->RegisterProcess(pmsc, particle);
@@ -430,7 +430,6 @@ void G4EmPenelopePhysics::ConstructProcess()
ph->RegisterProcess(pb, particle);
ph->RegisterProcess(pp, particle);
ph->RegisterProcess(new G4CoulombScattering(), particle);
ph->RegisterProcess(pnuc, particle);
} else if (particleName == "B+" ||
particleName == "B-" ||
@@ -471,7 +470,6 @@ void G4EmPenelopePhysics::ConstructProcess()
// Nuclear stopping
pnuc->SetMaxKinEnergy(MeV);
inuc->SetMaxKinEnergy(MeV);
// Deexcitation
//
@@ -86,6 +86,7 @@
#include "G4IonParametrisedLossModel.hh"
#include "G4BraggIonModel.hh"
#include "G4NuclearStopping.hh"
#include "G4eplusTo2GammaOKVIModel.hh"
#include "G4ParticleTable.hh"
#include "G4Gamma.hh"
@@ -248,10 +249,13 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
msc->SetEmModel(new G4WentzelVIModel());
G4CoulombScattering* ss = new G4CoulombScattering();
G4eplusAnnihilation* ann = new G4eplusAnnihilation();
ann->SetEmModel(new G4eplusTo2GammaOKVIModel());
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(new G4eIonisation(), particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
ph->RegisterProcess(ann, particle);
ph->RegisterProcess(ss, particle);
} else if (particleName == "mu+" ||
@@ -139,10 +139,10 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
param->ActivateAngularGeneratorForIonisation(true);
param->SetStepFunction(0.2, 10*um);
param->SetStepFunctionMuHad(0.1, 20*um);
param->SetUseMottCorrection(true); // use Mott-correction for e-/e+ msc gs
param->SetMscStepLimitType(fUseSafetyPlus); // error-free stepping for e-/e+ msc gs
param->SetMscSkin(3); // error-free stepping for e-/e+ msc gs
param->SetMscRangeFactor(0.2); // error-free stepping for e-/e+ msc gs
param->SetUseMottCorrection(true); // use Mott-correction for e-/e+ msc gs
param->SetMscStepLimitType(fUseSafetyPlus); // for e-/e+ msc gs
param->SetMscSkin(3); // error-free stepping for e-/e+ msc gs
param->SetMscRangeFactor(0.08); // error-free stepping for e-/e+ msc gs
param->SetMuHadLateralDisplacement(true);
param->SetFluo(true);
//param->SetAugerCascade(true);
@@ -38,12 +38,11 @@
#include "G4OpticalPhysics.hh"
//#include "G4OpticalPhoton.hh"
#include "G4OpAbsorption.hh"
#include "G4OpRayleigh.hh"
#include "G4OpMieHG.hh"
#include "G4OpBoundaryProcess.hh"
#include "G4OpWLS.hh"
#include "G4Scintillation.hh"
#include "G4Cerenkov.hh"
@@ -51,30 +50,45 @@
#include "G4LossTableManager.hh"
#include "G4EmSaturation.hh"
#include "G4GenericMessenger.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4OpticalPhysics);
G4ThreadLocal G4Scintillation* G4OpticalPhysics::fScintillationProcess = nullptr;
G4ThreadLocal G4Cerenkov* G4OpticalPhysics::fCerenkovProcess = nullptr;
G4ThreadLocal G4OpWLS* G4OpticalPhysics::fWLSProcess = nullptr;
G4ThreadLocal G4OpAbsorption* G4OpticalPhysics::fAbsorptionProcess = nullptr;
G4ThreadLocal G4OpRayleigh* G4OpticalPhysics::fRayleighProcess = nullptr;
G4ThreadLocal G4OpMieHG* G4OpticalPhysics::fMieProcess = nullptr;
G4ThreadLocal G4OpBoundaryProcess* G4OpticalPhysics::fBoundaryProcess = nullptr;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
: G4VPhysicsConstructor(name),
fMaxNumPhotons(100),
fMaxBetaChange(10.0),
fYieldFactor(1.),
fExcitationRatio(0.0),
fProfile("delta"),
fFiniteRiseTime(false),
fScintillationByParticleType(false),
fScintillationTrackInfo(false),
fInvokeSD(true),
fScintillationStackPhotons(true),
fScintillationVerbosity(0),
fMaxNumPhotons(100),
fMaxBetaChange(10.0),
fCerenkovStackPhotons(true),
fScintillationStackPhotons(true)
fCerenkovVerbosity(0),
fWLSTimeProfileName("delta"),
fWLSVerbosity(0),
fAbsorptionVerbosity(0),
fRayleighVerbosity(0),
fMieVerbosity(0),
fInvokeSD(true),
fBoundaryVerbosity(0)
{
verboseLevel = verbose;
fMessenger = new G4OpticalPhysicsMessenger(this);
@@ -90,6 +104,7 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
G4OpticalPhysics::~G4OpticalPhysics()
{
delete fMessenger;
fMessenger = nullptr;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -111,7 +126,7 @@ void G4OpticalPhysics::PrintStatistics() const
if ( fProcessTrackSecondariesFirst[kCerenkov] ) {
G4cout << " Track secondaries first: activated" << G4endl;
}
else {
else {
G4cout << " Track secondaries first: inactivated" << G4endl;
}
}
@@ -123,12 +138,12 @@ void G4OpticalPhysics::PrintStatistics() const
if ( fProcessTrackSecondariesFirst[kScintillation] ) {
G4cout << " Track secondaries first: activated" << G4endl;
}
else {
else {
G4cout << " Track secondaries first: inactivated" << G4endl;
}
}
if ( i == kWLS ) {
G4cout << " WLS process time profile: " << fProfile << G4endl;
G4cout << " WLS process time profile: " << fWLSTimeProfileName << G4endl;
}
}
}
@@ -136,179 +151,50 @@ void G4OpticalPhysics::PrintStatistics() const
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4OpticalPhoton.hh"
void G4OpticalPhysics::ConstructParticle()
{
/// Instantiate particles.
// optical photon
G4OpticalPhoton::OpticalPhotonDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#define DIR_CMDS "/process/optical"
#define GUIDANCE "Commands related to the optical physics simulation engine for "
namespace UIhelpers {
//Helper functions to create UI commands for processes
template<class T>
void buildCommands(T* proc,const char* dir, const char* guidance)
{
//Generic function to add a "verbose" command for a process
G4GenericMessenger* mess = new G4GenericMessenger(proc,dir,guidance);
G4AutoDelete::Register(mess);
G4GenericMessenger::Command& wlscmd4 = mess->DeclareMethod("verbose",&T::SetVerboseLevel,
"Set the verbose level");
wlscmd4.SetParameterName("ver",true);
wlscmd4.SetDefaultValue("1");
wlscmd4.SetStates(G4State_Idle);
}
void buildCommands( G4OpWLS* op )
{
//Build UI commands for WLS
G4GenericMessenger* mess = new G4GenericMessenger(op,DIR_CMDS"/wls/",GUIDANCE"WLS process.");
G4AutoDelete::Register(mess);
//Here, more correctly DeclareProperty should be used, but to do that, I would need public/friend
//access of G4GenericMessenger to private members of G4Scintillation. Thus I use the approach
//of DeclareMethod, that has a draw back: range checking does not work
G4GenericMessenger::Command& wlscmd1 = mess->DeclareMethod("setTimeProfile",&G4OpWLS::UseTimeProfile,
"Set the WLS time profile (delta or exponential)");
wlscmd1.SetParameterName("profile",false);
wlscmd1.SetCandidates("delta exponential");
wlscmd1.SetStates(G4State_Idle);
buildCommands(op,DIR_CMDS"/wls/",GUIDANCE"WLS process.");
}
void buildCommands(G4Scintillation* ScintillationProcess)
{
//Build UI commands for scintillation
G4GenericMessenger* mess = new G4GenericMessenger(ScintillationProcess,DIR_CMDS"/scintillation/",GUIDANCE"scintillation process.");
G4AutoDelete::Register(mess);
G4GenericMessenger::Command& sccmd1 = mess->DeclareMethod("setFiniteRiseTime",
&G4Scintillation::SetFiniteRiseTime,
"Set option of a finite rise-time for G4Scintillation - If set, the G4Scintillation process expects the user to have set the constant material property FAST/SLOWSCINTILLATIONRISETIME");
sccmd1.SetParameterName("time",false);
sccmd1.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd2 = mess->DeclareMethod("setYieldFactor",
&G4Scintillation::SetScintillationYieldFactor,
"Set scintillation yield factor");
sccmd2.SetParameterName("factor",false);
//sccmd2.SetRange("factor>=0."); //LIMITATION: w/ DeclareMethod range checking does not work
sccmd2.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd3 = mess->DeclareMethod("setExcitationRatio",
&G4Scintillation::SetScintillationExcitationRatio,
"Set scintillation excitation ratio");
sccmd3.SetParameterName("ratio",false);
//sccmd3.SetRange("ratio>=0.&&ratio<=1.");//LIMITATION: w/ DeclareMethod range checking does not work
sccmd3.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd4 = mess->DeclareMethod("setByParticleType",
&G4Scintillation::SetScintillationByParticleType,
"Activate/Inactivate scintillation process by particle type");
sccmd4.SetParameterName("flag", false);
sccmd4.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd5 = mess->DeclareMethod("setTrackInfo",
&G4Scintillation::SetScintillationTrackInfo,
"Activate/Inactivate scintillation track info");
sccmd5.SetParameterName("flag", false);
sccmd5.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd6 = mess->DeclareMethod("setTrackSecondariesFirst",
&G4Scintillation::SetTrackSecondariesFirst,
"Set option to track secondaries before finishing their parent track");
sccmd6.SetParameterName("flag",false);
sccmd6.SetStates(G4State_Idle);
buildCommands(ScintillationProcess,DIR_CMDS"/scintillation/",GUIDANCE"scintillation process.");
}
void buildCommands(G4Cerenkov* CerenkovProcess)
{
//BUild UI commands for cerenkov
G4GenericMessenger* mess = new G4GenericMessenger(CerenkovProcess,DIR_CMDS"/cerenkov/",GUIDANCE"Cerenkov process.");
G4AutoDelete::Register(mess);
G4GenericMessenger::Command& cecmd1 = mess->DeclareMethod("setMaxPhotons",
&G4Cerenkov::SetMaxNumPhotonsPerStep,
"Set maximum number of photons per step");
cecmd1.SetParameterName("max",false);
//cecmd1.SetRange("max>=0");//LIMITATION: w/ DeclareMethod range checking does not work
cecmd1.SetStates(G4State_Idle);
G4GenericMessenger::Command& cecmd2 = mess->DeclareMethod("setMaxBetaChange",
&G4Cerenkov::SetMaxBetaChangePerStep,
"Set maximum change of beta of parent particle per step");
cecmd2.SetParameterName("max",false);
//cecmd2.SetRange("max>=0.");//LIMITATION: w/ DeclareMethod range checking does not work
cecmd2.SetStates(G4State_Idle);
G4GenericMessenger::Command& cecmd3 = mess->DeclareMethod("setTrackSecondariesFirst",
&G4Cerenkov::SetTrackSecondariesFirst,
"Set option to track secondaries before finishing their parent track");
cecmd3.SetParameterName("flag",false);
cecmd3.SetStates(G4State_Idle);
buildCommands(CerenkovProcess,DIR_CMDS"/cerenkov/",GUIDANCE"Cerenkov process.");
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4Threading.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4AutoDelete.hh"
void G4OpticalPhysics::ConstructProcess()
{
// Construct optical processes.
if(verboseLevel>0)
G4cout <<"G4OpticalPhysics:: Add Optical Physics Processes"<< G4endl;
// A vector of optical processes
std::vector<G4VProcess*> OpProcesses;
for ( G4int i=0; i<kNoProcess; i++ ) OpProcesses.push_back(NULL);
for ( G4int i=0; i<kNoProcess; i++ ) OpProcesses.push_back(nullptr);
// Add Optical Processes
G4OpAbsorption* OpAbsorptionProcess = new G4OpAbsorption();
UIhelpers::buildCommands(OpAbsorptionProcess,DIR_CMDS"/absorption/",GUIDANCE"absorption process");
OpProcesses[kAbsorption] = OpAbsorptionProcess;
fAbsorptionProcess = new G4OpAbsorption();
OpProcesses[kAbsorption] = fAbsorptionProcess;
G4OpRayleigh* OpRayleighScatteringProcess = new G4OpRayleigh();
UIhelpers::buildCommands(OpRayleighScatteringProcess,DIR_CMDS"/rayleigh/",GUIDANCE"Rayleigh scattering process");
OpProcesses[kRayleigh] = OpRayleighScatteringProcess;
G4OpMieHG* OpMieHGScatteringProcess = new G4OpMieHG();
UIhelpers::buildCommands(OpMieHGScatteringProcess,DIR_CMDS"/mie/",GUIDANCE"Mie scattering process");
OpProcesses[kMieHG] = OpMieHGScatteringProcess;
fRayleighProcess = new G4OpRayleigh();
OpProcesses[kRayleigh] = fRayleighProcess;
G4OpBoundaryProcess* OpBoundaryProcess = new G4OpBoundaryProcess();
UIhelpers::buildCommands(OpBoundaryProcess,DIR_CMDS"/boundary/",GUIDANCE"boundary process");
OpBoundaryProcess->SetInvokeSD(fInvokeSD);
OpProcesses[kBoundary] = OpBoundaryProcess;
fMieProcess = new G4OpMieHG();
OpProcesses[kMieHG] = fMieProcess;
G4OpWLS* OpWLSProcess = new G4OpWLS();
OpWLSProcess->UseTimeProfile(fProfile);
UIhelpers::buildCommands(OpWLSProcess);
OpProcesses[kWLS] = OpWLSProcess;
fBoundaryProcess = new G4OpBoundaryProcess();
fBoundaryProcess->SetInvokeSD(fInvokeSD);
OpProcesses[kBoundary] = fBoundaryProcess;
G4ProcessManager * pManager = 0;
fWLSProcess = new G4OpWLS();
fWLSProcess->UseTimeProfile(fWLSTimeProfileName);
OpProcesses[kWLS] = fWLSProcess;
G4ProcessManager* pManager = nullptr;
pManager = G4OpticalPhoton::OpticalPhoton()->GetProcessManager();
if (!pManager) {
std::ostringstream o;
o << "Optical Photon without a Process Manager";
G4ExceptionDescription ed;
ed << "Optical Photon without a Process Manager";
G4Exception("G4OpticalPhysics::ConstructProcess()","",
FatalException,o.str().c_str());
FatalException,ed);
return;
}
@@ -318,26 +204,24 @@ void G4OpticalPhysics::ConstructProcess()
}
}
G4Scintillation* ScintillationProcess = new G4Scintillation();
ScintillationProcess->SetScintillationYieldFactor(fYieldFactor);
ScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
ScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
ScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
ScintillationProcess->SetScintillationTrackInfo(fScintillationTrackInfo);
ScintillationProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
ScintillationProcess->SetStackPhotons(fScintillationStackPhotons);
fScintillationProcess = new G4Scintillation();
fScintillationProcess->SetScintillationYieldFactor(fYieldFactor);
fScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
fScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
fScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
fScintillationProcess->SetScintillationTrackInfo(fScintillationTrackInfo);
fScintillationProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
fScintillationProcess->SetStackPhotons(fScintillationStackPhotons);
G4EmSaturation* emSaturation = G4LossTableManager::Instance()->EmSaturation();
ScintillationProcess->AddSaturation(emSaturation);
UIhelpers::buildCommands(ScintillationProcess);
OpProcesses[kScintillation] = ScintillationProcess;
G4Cerenkov* CerenkovProcess = new G4Cerenkov();
CerenkovProcess->SetMaxNumPhotonsPerStep(fMaxNumPhotons);
CerenkovProcess->SetMaxBetaChangePerStep(fMaxBetaChange);
CerenkovProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kCerenkov]);
CerenkovProcess->SetStackPhotons(fCerenkovStackPhotons);
UIhelpers::buildCommands(CerenkovProcess);
OpProcesses[kCerenkov] = CerenkovProcess;
fScintillationProcess->AddSaturation(emSaturation);
OpProcesses[kScintillation] = fScintillationProcess;
fCerenkovProcess = new G4Cerenkov();
fCerenkovProcess->SetMaxNumPhotonsPerStep(fMaxNumPhotons);
fCerenkovProcess->SetMaxBetaChangePerStep(fMaxBetaChange);
fCerenkovProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kCerenkov]);
fCerenkovProcess->SetStackPhotons(fCerenkovStackPhotons);
OpProcesses[kCerenkov] = fCerenkovProcess;
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
@@ -349,25 +233,24 @@ void G4OpticalPhysics::ConstructProcess()
pManager = particle->GetProcessManager();
if (!pManager) {
std::ostringstream o;
o << "Particle " << particleName << "without a Process Manager";
G4ExceptionDescription ed;
ed << "Particle " << particleName << "without a Process Manager";
G4Exception("G4OpticalPhysics::ConstructProcess()","",
FatalException,o.str().c_str());
return; // else coverity complains for pManager use below
FatalException, ed);
return; // else coverity complains for pManager use below
}
if( CerenkovProcess->IsApplicable(*particle) &&
if( fCerenkovProcess->IsApplicable(*particle) &&
fProcessUse[kCerenkov] ) {
pManager->AddProcess(CerenkovProcess);
pManager->SetProcessOrdering(CerenkovProcess,idxPostStep);
pManager->AddProcess(fCerenkovProcess);
pManager->SetProcessOrdering(fCerenkovProcess,idxPostStep);
}
if( ScintillationProcess->IsApplicable(*particle) &&
fProcessUse[kScintillation] ){
pManager->AddProcess(ScintillationProcess);
pManager->SetProcessOrderingToLast(ScintillationProcess,idxAtRest);
pManager->SetProcessOrderingToLast(ScintillationProcess,idxPostStep);
if( fScintillationProcess->IsApplicable(*particle) &&
fProcessUse[kScintillation] ) {
pManager->AddProcess(fScintillationProcess);
pManager->SetProcessOrderingToLast(fScintillationProcess,idxAtRest);
pManager->SetProcessOrderingToLast(fScintillationProcess,idxPostStep);
}
}
// Add verbose
@@ -380,62 +263,146 @@ void G4OpticalPhysics::ConstructProcess()
G4cout << "### " << namePhysics << " physics constructed." << G4endl;
}
void G4OpticalPhysics::SetScintillationYieldFactor(G4double yieldFactor)
void G4OpticalPhysics::SetScintillationYieldFactor(G4double val)
{
/// Set the scintillation yield factor
fYieldFactor = yieldFactor;
//G4Scintillation::SetScintillationYieldFactor(yieldFactor);
fYieldFactor = val;
if (fScintillationProcess) {
fScintillationProcess->SetScintillationYieldFactor(fYieldFactor);
}
}
void G4OpticalPhysics::SetScintillationExcitationRatio(G4double excitationRatio)
void G4OpticalPhysics::SetScintillationExcitationRatio(G4double val)
{
/// Set the scintillation excitation ratio
fExcitationRatio = excitationRatio;
// G4Scintillation::SetScintillationExcitationRatio(excitationRatio);
fExcitationRatio = val;
if (fScintillationProcess) {
fScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
}
}
void G4OpticalPhysics::SetMaxNumPhotonsPerStep(G4int maxNumPhotons)
void G4OpticalPhysics::SetMaxNumPhotonsPerStep(G4int val)
{
/// Limit step to the specified maximum number of Cherenkov photons
fMaxNumPhotons = maxNumPhotons;
// G4Cerenkov::SetMaxNumPhotonsPerStep(maxNumPhotons);
/// Limit step to the specified maximum number of Cerenkov photons
fMaxNumPhotons = val;
if (fCerenkovProcess) {
fCerenkovProcess->SetMaxNumPhotonsPerStep(fMaxNumPhotons);
}
}
void G4OpticalPhysics::SetMaxBetaChangePerStep(G4double maxBetaChange)
void G4OpticalPhysics::SetMaxBetaChangePerStep(G4double val)
{
/// Limit step to the specified maximum change of beta of the parent particle
fMaxBetaChange = maxBetaChange;
// G4Cerenkov::SetMaxBetaChangePerStep(maxBetaChange);
fMaxBetaChange = val;
if (fCerenkovProcess) {
fCerenkovProcess->SetMaxBetaChangePerStep(fMaxBetaChange);
}
}
void G4OpticalPhysics::SetWLSTimeProfile(G4String profile)
void G4OpticalPhysics::SetCerenkovStackPhotons(G4bool val)
{
fCerenkovStackPhotons = val;
if (fCerenkovProcess) {
fCerenkovProcess->SetStackPhotons(fCerenkovStackPhotons);
}
}
void G4OpticalPhysics::SetCerenkovTrackSecondariesFirst(G4bool val)
{
fProcessTrackSecondariesFirst[kCerenkov] = val;
if (fCerenkovProcess) {
fCerenkovProcess->
SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kCerenkov]);
}
}
void G4OpticalPhysics::SetCerenkovVerbosity(G4int ver)
{
fCerenkovVerbosity = ver;
if (fCerenkovProcess) {
fCerenkovProcess->SetVerboseLevel(fCerenkovVerbosity);
}
}
void G4OpticalPhysics::SetWLSTimeProfile(G4String name)
{
/// Set the WLS time profile (delta or exponential)
fProfile = profile;
fWLSTimeProfileName = name;
if (fWLSProcess) {
fWLSProcess->UseTimeProfile(fWLSTimeProfileName);
}
}
//void G4OpticalPhysics::AddScintillationSaturation(G4EmSaturation* saturation)
//{
///// Adds Birks Saturation to the G4Scintillation Process
// G4Scintillation::AddSaturation(saturation);
//}
void G4OpticalPhysics::
SetScintillationByParticleType(G4bool scintillationByParticleType)
void G4OpticalPhysics::SetWLSVerbosity(G4int ver)
{
fScintillationByParticleType = scintillationByParticleType;
//G4Scintillation::SetScintillationByParticleType(scintillationByParticleType);
fWLSVerbosity = ver;
if (fWLSProcess) {
fWLSProcess->SetVerboseLevel(fWLSVerbosity);
}
}
void G4OpticalPhysics::
SetScintillationTrackInfo(G4bool scintillationTrackInfo)
void G4OpticalPhysics::SetScintillationByParticleType(G4bool val)
{
fScintillationTrackInfo = scintillationTrackInfo;
//G4Scintillation::SetScintillationTrackInfo(scintillationTrackInfo);
fScintillationByParticleType = val;
if (fScintillationProcess) {
fScintillationProcess->
SetScintillationByParticleType(fScintillationByParticleType);
}
}
void G4OpticalPhysics::SetScintillationTrackSecondariesFirst(G4bool val)
{
fProcessTrackSecondariesFirst[kScintillation] = val;
if (fScintillationProcess) {
fScintillationProcess->
SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
}
}
void G4OpticalPhysics::SetScintillationTrackInfo(G4bool val)
{
fScintillationTrackInfo = val;
if (fScintillationProcess) {
fScintillationProcess->SetScintillationTrackInfo(fScintillationTrackInfo);
}
}
void G4OpticalPhysics::SetScintillationVerbosity(G4int ver)
{
fScintillationVerbosity = ver;
if (fScintillationProcess) {
fScintillationProcess->SetVerboseLevel(fScintillationVerbosity);
}
}
void G4OpticalPhysics::SetAbsorptionVerbosity(G4int ver)
{
fAbsorptionVerbosity = ver;
if (fAbsorptionProcess) {
fAbsorptionProcess->SetVerboseLevel(fAbsorptionVerbosity);
}
}
void G4OpticalPhysics::SetRayleighVerbosity(G4int ver)
{
fRayleighVerbosity = ver;
if (fRayleighProcess) {
fRayleighProcess->SetVerboseLevel(fRayleighVerbosity);
}
}
void G4OpticalPhysics::SetMieVerbosity(G4int ver)
{
fMieVerbosity = ver;
if (fMieProcess) {
fMieProcess->SetVerboseLevel(fMieVerbosity);
}
}
void G4OpticalPhysics::SetBoundaryVerbosity(G4int ver)
{
fBoundaryVerbosity = ver;
if (fBoundaryProcess) {
fBoundaryProcess->SetVerboseLevel(fBoundaryVerbosity);
}
}
void G4OpticalPhysics::SetTrackSecondariesFirst(G4OpticalProcessIndex index,
@@ -444,32 +411,30 @@ void G4OpticalPhysics::SetTrackSecondariesFirst(G4OpticalProcessIndex index,
if ( index >= kNoProcess ) return;
if ( fProcessTrackSecondariesFirst[index] == trackSecondariesFirst ) return;
fProcessTrackSecondariesFirst[index] = trackSecondariesFirst;
// if ( index == kCerenkov )
// G4Cerenkov::SetTrackSecondariesFirst(trackSecondariesFirst);
// if ( index == kScintillation)
// G4Scintillation::SetTrackSecondariesFirst(trackSecondariesFirst);
}
void G4OpticalPhysics::SetFiniteRiseTime(G4bool finiteRiseTime)
void G4OpticalPhysics::SetFiniteRiseTime(G4bool b)
{
fFiniteRiseTime = finiteRiseTime;
//G4Scintillation::SetFiniteRiseTime(finiteRiseTime);
fFiniteRiseTime = b;
if (fScintillationProcess) {
fScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
}
}
void G4OpticalPhysics::SetInvokeSD(G4bool invokeSD)
void G4OpticalPhysics::SetInvokeSD(G4bool b)
{
fInvokeSD = invokeSD;
}
void G4OpticalPhysics::SetCerenkovStackPhotons(G4bool stackingFlag)
{
fCerenkovStackPhotons = stackingFlag;
fInvokeSD = b;
if (fBoundaryProcess) {
fBoundaryProcess->SetInvokeSD(fInvokeSD);
}
}
void G4OpticalPhysics::SetScintillationStackPhotons(G4bool stackingFlag)
{
fScintillationStackPhotons = stackingFlag;
if (fScintillationProcess) {
fScintillationProcess->SetStackPhotons(fScintillationStackPhotons);
}
}
void G4OpticalPhysics::Configure(G4OpticalProcessIndex index, G4bool isUse)
@@ -51,9 +51,10 @@
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "G4UIparameter.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleDefinition.hh"
// Commands with '/defaults/' are duplicates and will be removed in
// the next major release of Geant4. Use commands with no /defaults/ instead
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -62,31 +63,65 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
: G4UImessenger(),
fOpticalPhysics(opticalPhysics),
fSelectedProcessIndex(kNoProcess),
fActivateProcessCmd(0),
fSetOpProcessVerboseCmd(0),
fSetCerenkovMaxPhotonsCmd(0),
fSetCerenkovMaxBetaChangeCmd(0),
fSetCerenkovStackPhotonsCmd(0),
fSetScintillationYieldFactorCmd(0),
fSetScintillationByParticleTypeCmd(0),
fSetScintillationTrackInfoCmd(0),
fSetScintillationStackPhotonsCmd(0),
fSetWLSTimeProfileCmd(0),
fSetTrackSecondariesFirstCmd(0),
fSetFiniteRiseTimeCmd(0),
fSetInvokeSDCmd(0)
fActivateProcessCmd(nullptr),
fVerboseCmd(nullptr),
fTrackSecondariesFirstCmd(nullptr),
fCerenkovMaxPhotonsCmd(nullptr),
fCerenkovMaxPhotons1Cmd(nullptr),
fCerenkovMaxBetaChangeCmd(nullptr),
fCerenkovMaxBetaChange1Cmd(nullptr),
fCerenkovStackPhotonsCmd(nullptr),
fCerenkovStackPhotons1Cmd(nullptr),
fCerenkovTrackSecondariesFirstCmd(nullptr),
fCerenkovVerbosityCmd(nullptr),
fScintYieldFactorCmd(nullptr),
fScintYieldFactor1Cmd(nullptr),
fScintByParticleTypeCmd(nullptr),
fScintByParticleType1Cmd(nullptr),
fScintTrackInfoCmd(nullptr),
fScintTrackInfo1Cmd(nullptr),
fScintStackPhotonsCmd(nullptr),
fScintStackPhotons1Cmd(nullptr),
fScintTrackSecondariesFirstCmd(nullptr),
fScintFiniteRiseTimeCmd(nullptr),
fScintFiniteRiseTime1Cmd(nullptr),
fScintVerbosityCmd(nullptr),
fWLSTimeProfileCmd(nullptr),
fWLSTimeProfile1Cmd(nullptr),
fWLSVerbosityCmd(nullptr),
fBoundaryInvokeSDCmd(nullptr),
fBoundaryInvokeSD1Cmd(nullptr),
fBoundaryVerbosityCmd(nullptr),
fAbsorptionVerbosityCmd(nullptr),
fRayleighVerbosityCmd(nullptr),
fMieVerbosityCmd(nullptr)
{
G4bool toBeBroadcasted = false;
fDir = new G4UIdirectory("/process/optical/defaults/",toBeBroadcasted);
fDir->SetGuidance("Commands related to the optical physics simulation engine.");
fDir->SetGuidance("DEPRECATED Commands related to the optical physics simulation engine.");
fDir2 = new G4UIdirectory("/process/optical/",toBeBroadcasted);
fDir2->SetGuidance("Commands related to the optical physics simulation engine.");
CreateDirectory("/process/optical/defaults/cerenkov/", "Cerenkov process commands");
CreateDirectory("/process/optical/defaults/scintillation/", "Scintillation process commands");
CreateDirectory("/process/optical/defaults/wls/", "Wave length shifting process commands");
CreateDirectory("/process/optical/defaults/boundary/", "Boundary scattering commands");
CreateDirectory("/process/optical/defaults/cerenkov/", "DEPRECATED Cerenkov process commands");
CreateDirectory("/process/optical/defaults/scintillation/", "DEPRECATED Scintillation process commands");
CreateDirectory("/process/optical/defaults/wls/", "DEPRECATED Wave length shifting process commands");
CreateDirectory("/process/optical/defaults/boundary/", "DEPRECATED Boundary scattering commands");
CreateDirectory("/process/optical/cerenkov/", "Cerenkov process commands");
CreateDirectory("/process/optical/scintillation/", "Scintillation process commands");
CreateDirectory("/process/optical/wls/", "Wave length shifting process commands");
CreateDirectory("/process/optical/boundary/", "Boundary scattering commands");
CreateDirectory("/process/optical/mie/", "Mie scattering process commands");
CreateDirectory("/process/optical/absorption/", "absorption process commands");
CreateDirectory("/process/optical/rayleigh/", "Rayleigh scattering commands");
// general commands
fActivateProcessCmd= new G4UIcommand("/process/optical/processActivation", this);
fActivateProcessCmd->SetGuidance("Activate/deactivate the specified optical process");
G4UIparameter* par = new G4UIparameter("proc_name",'s',false);
@@ -104,119 +139,275 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fActivateProcessCmd->SetParameter(par);
fActivateProcessCmd->AvailableForStates(G4State_PreInit);
fSetOpProcessVerboseCmd = new G4UIcmdWithAnInteger("/process/optical/verbose", this);
fSetOpProcessVerboseCmd->SetGuidance("Set default verbosity level for optical processes");
fSetOpProcessVerboseCmd->SetParameterName("ver", true);
fSetOpProcessVerboseCmd->SetDefaultValue(1);
fSetOpProcessVerboseCmd->SetRange("ver>=0");
fSetOpProcessVerboseCmd->AvailableForStates(G4State_PreInit);
fSetTrackSecondariesFirstCmd = new G4UIcommand("/process/optical/setTrackSecondariesFirst", this);
fSetTrackSecondariesFirstCmd->SetGuidance("Activate/deactivate tracking of secondaries before finishing their parent track");
fTrackSecondariesFirstCmd = new G4UIcommand("/process/optical/setTrackSecondariesFirst", this);
fTrackSecondariesFirstCmd->SetGuidance("Activate/deactivate tracking of secondaries before finishing their parent track");
par = new G4UIparameter("proc_name",'s',false);
par->SetParameterCandidates(candidates);
fSetTrackSecondariesFirstCmd->SetParameter(par);
fTrackSecondariesFirstCmd->SetParameter(par);
par = new G4UIparameter("flag",'b',false);
par->SetDefaultValue(true);
fSetTrackSecondariesFirstCmd->SetParameter(par);
fSetTrackSecondariesFirstCmd->AvailableForStates(G4State_PreInit);
fTrackSecondariesFirstCmd->SetParameter(par);
fTrackSecondariesFirstCmd->AvailableForStates(G4State_PreInit);
//This are repetition of process specific ui commands needed by ATLICE and VMC
//(UI messages needed to exist in PreInit state before actual processes are instantiated)
fSetCerenkovMaxPhotonsCmd = new G4UIcmdWithAnInteger("/process/optical/defaults/cerenkov/setMaxPhotons", this);
fSetCerenkovMaxPhotonsCmd->SetGuidance("Set default maximum number of photons per step");
fSetCerenkovMaxPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fSetCerenkovMaxPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fSetCerenkovMaxPhotonsCmd->SetParameterName("CerenkovMaxPhotons", false);
fSetCerenkovMaxPhotonsCmd->SetRange("CerenkovMaxPhotons>=0");
fSetCerenkovMaxPhotonsCmd->AvailableForStates(G4State_PreInit);
fVerboseCmd = new G4UIcmdWithAnInteger("/process/optical/verbose", this);
fVerboseCmd->SetGuidance("Set default verbosity level for optical processes");
fVerboseCmd->SetParameterName("ver", true);
fVerboseCmd->SetDefaultValue(1);
fVerboseCmd->SetRange("ver>=0");
fVerboseCmd->AvailableForStates(G4State_PreInit);
fSetCerenkovMaxBetaChangeCmd = new G4UIcmdWithADouble("/process/optical/defaults/cerenkov/setMaxBetaChange", this);
fSetCerenkovMaxBetaChangeCmd->SetGuidance("Set default maximum change of beta of parent particle per step");
fSetCerenkovMaxBetaChangeCmd->SetGuidance("Note this command is used to set the default value,");
fSetCerenkovMaxBetaChangeCmd->SetGuidance("if process is not active command will not have effect.");
fSetCerenkovMaxBetaChangeCmd->SetParameterName("CerenkovMaxBetaChange", false);
fSetCerenkovMaxBetaChangeCmd->SetRange("CerenkovMaxBetaChange>=0");
fSetCerenkovMaxBetaChangeCmd->AvailableForStates(G4State_PreInit);
//// Cerenkov ////////////////////
fCerenkovMaxPhotons1Cmd = new G4UIcmdWithAnInteger("/process/optical/defaults/cerenkov/setMaxPhotons", this);
fCerenkovMaxPhotons1Cmd->SetGuidance("Set default maximum number of photons per step");
fCerenkovMaxPhotons1Cmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovMaxPhotons1Cmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovMaxPhotons1Cmd->SetGuidance("DEPRECATED: use /process/optical/cerenkov/setMaxPhotons instead.");
fCerenkovMaxPhotons1Cmd->SetParameterName("CerenkovMaxPhotons", false);
fCerenkovMaxPhotons1Cmd->SetRange("CerenkovMaxPhotons>=0");
fCerenkovMaxPhotons1Cmd->AvailableForStates(G4State_PreInit);
fSetCerenkovStackPhotonsCmd = new G4UIcmdWithABool("/process/optical/defaults/cerenkov/setStackPhotons", this);
fSetCerenkovStackPhotonsCmd->SetGuidance("Set default whether or not to stack secondary Cerenkov photons");
fSetCerenkovStackPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fSetCerenkovStackPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fSetCerenkovStackPhotonsCmd->SetParameterName("CerenkovStackPhotons", true);
fSetCerenkovStackPhotonsCmd->AvailableForStates(G4State_PreInit);
fCerenkovMaxPhotonsCmd = new G4UIcmdWithAnInteger("/process/optical/cerenkov/setMaxPhotons", this);
fCerenkovMaxPhotonsCmd->SetGuidance("Set default maximum number of photons per step");
fCerenkovMaxPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovMaxPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovMaxPhotonsCmd->SetParameterName("CerenkovMaxPhotons", false);
fCerenkovMaxPhotonsCmd->SetRange("CerenkovMaxPhotons>=0");
fCerenkovMaxPhotonsCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fSetScintillationYieldFactorCmd = new G4UIcmdWithADouble("/process/optical/defaults/scintillation/setYieldFactor", this);
fSetScintillationYieldFactorCmd->SetGuidance("Set scintillation yield factor");
fSetScintillationYieldFactorCmd->SetGuidance("Note this command is used to set the default value,");
fSetScintillationYieldFactorCmd->SetGuidance("if process is not active command will not have effect.");
fSetScintillationYieldFactorCmd->SetParameterName("ScintillationYieldFactor", false);
fSetScintillationYieldFactorCmd->SetRange("ScintillationYieldFactor>=0");
fSetScintillationYieldFactorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fCerenkovMaxBetaChange1Cmd = new G4UIcmdWithADouble("/process/optical/defaults/cerenkov/setMaxBetaChange", this);
fCerenkovMaxBetaChange1Cmd->SetGuidance("Set default maximum change of beta of parent particle per step");
fCerenkovMaxBetaChange1Cmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovMaxBetaChange1Cmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovMaxBetaChange1Cmd->SetGuidance("DEPRECATED: use /process/optical/cerenkov/setMaxBetaChange instead.");
fCerenkovMaxBetaChange1Cmd->SetParameterName("CerenkovMaxBetaChange", false);
fCerenkovMaxBetaChange1Cmd->SetRange("CerenkovMaxBetaChange>=0");
fCerenkovMaxBetaChange1Cmd->AvailableForStates(G4State_PreInit);
fSetScintillationByParticleTypeCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setByParticleType", this);
fSetScintillationByParticleTypeCmd->SetGuidance("Activate/Inactivate scintillation process by particle type");
fSetScintillationByParticleTypeCmd->SetGuidance("Note this command is used to set the default value,");
fSetScintillationByParticleTypeCmd->SetGuidance("if process is not active command will not have effect.");
fSetScintillationByParticleTypeCmd->SetParameterName("ScintillationByParticleTypeActivation", false);
fSetScintillationByParticleTypeCmd->AvailableForStates(G4State_PreInit);
fCerenkovMaxBetaChangeCmd = new G4UIcmdWithADouble("/process/optical/cerenkov/setMaxBetaChange", this);
fCerenkovMaxBetaChangeCmd->SetGuidance("Set default maximum change of beta of parent particle per step");
fCerenkovMaxBetaChangeCmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovMaxBetaChangeCmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovMaxBetaChangeCmd->SetParameterName("CerenkovMaxBetaChange", false);
fCerenkovMaxBetaChangeCmd->SetRange("CerenkovMaxBetaChange>=0");
fCerenkovMaxBetaChangeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fSetScintillationTrackInfoCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setTrackInfo", this);
fSetScintillationTrackInfoCmd->SetGuidance("Activate/Inactivate scintillation TrackInformation");
fSetScintillationTrackInfoCmd->SetParameterName("ScintillationTrackInfo", false);
fSetScintillationTrackInfoCmd->AvailableForStates(G4State_PreInit);
fCerenkovStackPhotons1Cmd = new G4UIcmdWithABool("/process/optical/defaults/cerenkov/setStackPhotons", this);
fCerenkovStackPhotons1Cmd->SetGuidance("Set default whether or not to stack secondary Cerenkov photons");
fCerenkovStackPhotons1Cmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovStackPhotons1Cmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovStackPhotons1Cmd->SetGuidance("DEPRECATED: use /process/optical/cerenkov/setStackPhotons instead.");
fCerenkovStackPhotons1Cmd->SetParameterName("CerenkovStackPhotons", true);
fCerenkovStackPhotons1Cmd->AvailableForStates(G4State_PreInit);
fSetFiniteRiseTimeCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setFiniteRiseTime", this);
fSetFiniteRiseTimeCmd->SetGuidance("Set option of a finite rise-time for G4Scintillation");
fSetFiniteRiseTimeCmd->SetGuidance("If set, the G4Scintillation process expects the user to have set the constant material property FAST/SLOWSCINTILLATIONRISETIME");
fSetFiniteRiseTimeCmd->SetGuidance("Note this command is used to set the default value,");
fSetFiniteRiseTimeCmd->SetGuidance("if process is not active command will not have effect.");
fSetFiniteRiseTimeCmd->SetParameterName("FiniteRiseTime", false);
fSetFiniteRiseTimeCmd->AvailableForStates(G4State_PreInit);
fCerenkovStackPhotonsCmd = new G4UIcmdWithABool("/process/optical/cerenkov/setStackPhotons", this);
fCerenkovStackPhotonsCmd->SetGuidance("Set default whether or not to stack secondary Cerenkov photons");
fCerenkovStackPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fCerenkovStackPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fCerenkovStackPhotonsCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fSetScintillationStackPhotonsCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setStackPhotons", this);
fSetScintillationStackPhotonsCmd->SetGuidance("Set default whether or not to stack secondary Scintillation photons");
fSetScintillationStackPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fSetScintillationStackPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fSetScintillationStackPhotonsCmd->SetParameterName("ScintillationStackPhotons", true);
fSetScintillationStackPhotonsCmd->AvailableForStates(G4State_PreInit);
fCerenkovTrackSecondariesFirstCmd = new G4UIcmdWithABool("/process/optical/cerenkov/setTrackSecondariesFirst", this);
fCerenkovTrackSecondariesFirstCmd->SetGuidance("Whether to track secondary Cerenkov photons before the primary.");
fCerenkovTrackSecondariesFirstCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fSetWLSTimeProfileCmd = new G4UIcmdWithAString("/process/optical/defaults/wls/setTimeProfile", this);
fSetWLSTimeProfileCmd->SetGuidance("Set the WLS time profile (delta or exponential)");
fSetWLSTimeProfileCmd->SetParameterName("WLSTimeProfile", false);
fSetWLSTimeProfileCmd->SetCandidates("delta exponential");
fSetWLSTimeProfileCmd->AvailableForStates(G4State_PreInit);
fCerenkovVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/cerenkov/verbose", this);
fCerenkovVerbosityCmd->SetGuidance("Verbosity for Cerenkov process.");
fCerenkovVerbosityCmd->SetParameterName("verbosity", true);
fCerenkovVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fCerenkovVerbosityCmd->AvailableForStates(G4State_Idle);
fSetInvokeSDCmd = new G4UIcmdWithABool("/process/optical/defaults/boundary/setInvokeSD", this);
fSetInvokeSDCmd->SetGuidance("Set option for calling InvokeSD in G4OpBoundaryProcess");
fSetInvokeSDCmd->SetParameterName("InvokeSD", false);
fSetInvokeSDCmd->AvailableForStates(G4State_PreInit);
// Scintillation //////////////////////////
fScintYieldFactor1Cmd = new G4UIcmdWithADouble("/process/optical/defaults/scintillation/setYieldFactor", this);
fScintYieldFactor1Cmd->SetGuidance("Set scintillation yield factor");
fScintYieldFactor1Cmd->SetGuidance("Note this command is used to set the default value,");
fScintYieldFactor1Cmd->SetGuidance("if process is not active command will not have effect.");
fScintYieldFactor1Cmd->SetGuidance("DEPRECATED: use /process/optical/scintillation/setYieldFactorinstead.");
fScintYieldFactor1Cmd->SetParameterName("ScintillationYieldFactor", false);
fScintYieldFactor1Cmd->SetRange("ScintillationYieldFactor>=0");
fScintYieldFactor1Cmd->AvailableForStates(G4State_PreInit);
fScintYieldFactorCmd = new G4UIcmdWithADouble("/process/optical/scintillation/setYieldFactor", this);
fScintYieldFactorCmd->SetGuidance("Set scintillation yield factor");
fScintYieldFactorCmd->SetGuidance("Note this command is used to set the default value,");
fScintYieldFactorCmd->SetGuidance("if process is not active command will not have effect.");
fScintYieldFactorCmd->SetParameterName("ScintillationYieldFactor", false);
fScintYieldFactorCmd->SetRange("ScintillationYieldFactor>=0");
fScintYieldFactorCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintExcitationRatioCmd = new G4UIcmdWithADouble("/process/optical/scintillation/setExcitationRatio", this);
fScintExcitationRatioCmd->SetGuidance("Set scintillation excitation ratio");
fScintExcitationRatioCmd->SetGuidance("Note this command is used to set the default value,");
fScintExcitationRatioCmd->SetGuidance("if process is not active command will not have effect.");
fScintExcitationRatioCmd->SetParameterName("ExcitationRatio", false);
fScintExcitationRatioCmd->SetRange("ExcitationRatio >= 0 && ExcitationRatio <=1");
fScintExcitationRatioCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintByParticleType1Cmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setByParticleType", this);
fScintByParticleType1Cmd->SetGuidance("Activate/Inactivate scintillation process by particle type");
fScintByParticleType1Cmd->SetGuidance("Note this command is used to set the default value,");
fScintByParticleType1Cmd->SetGuidance("if process is not active command will not have effect.");
fScintByParticleType1Cmd->SetGuidance("DEPRECATED: use /process/optical/scintillation/setByParticleType instead.");
fScintByParticleType1Cmd->SetParameterName("ScintillationByParticleTypeActivation", false);
fScintByParticleType1Cmd->AvailableForStates(G4State_PreInit);
fScintByParticleTypeCmd = new G4UIcmdWithABool("/process/optical/scintillation/setByParticleType", this);
fScintByParticleTypeCmd->SetGuidance("Activate/Inactivate scintillation process by particle type");
fScintByParticleTypeCmd->SetGuidance("Note this command is used to set the default value,");
fScintByParticleTypeCmd->SetGuidance("if process is not active command will not have effect.");
fScintByParticleTypeCmd->SetParameterName("ScintillationByParticleTypeActivation", false);
fScintByParticleTypeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintTrackInfo1Cmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setTrackInfo", this);
fScintTrackInfo1Cmd->SetGuidance("Activate/Inactivate scintillation TrackInformation");
fScintTrackInfo1Cmd->SetGuidance("DEPRECATED: use /process/optical/scintillation/setTrackInfo instead.");
fScintTrackInfo1Cmd->SetParameterName("ScintillationTrackInfo", false);
fScintTrackInfo1Cmd->AvailableForStates(G4State_PreInit);
fScintTrackInfoCmd = new G4UIcmdWithABool("/process/optical/scintillation/setTrackInfo", this);
fScintTrackInfoCmd->SetGuidance("Activate/Inactivate scintillation TrackInformation");
fScintTrackInfoCmd->SetParameterName("ScintillationTrackInfo", false);
fScintTrackInfoCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintFiniteRiseTime1Cmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setFiniteRiseTime", this);
fScintFiniteRiseTime1Cmd->SetGuidance("Set option of a finite rise-time for G4Scintillation");
fScintFiniteRiseTime1Cmd->SetGuidance("If set, the G4Scintillation process expects the user to have set the");
fScintFiniteRiseTime1Cmd->SetGuidance("constant material property FAST/SLOWSCINTILLATIONRISETIME");
fScintFiniteRiseTime1Cmd->SetGuidance("Note this command is used to set the default value,");
fScintFiniteRiseTime1Cmd->SetGuidance("if process is not active command will not have effect.");
fScintFiniteRiseTime1Cmd->SetGuidance("DEPRECATED: use /process/optical/scintillation/setFiniteRiseTime instead.");
fScintFiniteRiseTime1Cmd->SetParameterName("FiniteRiseTime", false);
fScintFiniteRiseTime1Cmd->AvailableForStates(G4State_PreInit);
fScintFiniteRiseTimeCmd = new G4UIcmdWithABool("/process/optical/scintillation/setFiniteRiseTime", this);
fScintFiniteRiseTimeCmd->SetGuidance("Set option of a finite rise-time for G4Scintillation");
fScintFiniteRiseTimeCmd->SetGuidance("If set, the G4Scintillation process expects the user to have set the");
fScintFiniteRiseTimeCmd->SetGuidance("constant material property FAST/SLOWSCINTILLATIONRISETIME");
fScintFiniteRiseTimeCmd->SetGuidance("Note this command is used to set the default value,");
fScintFiniteRiseTimeCmd->SetGuidance("if process is not active command will not have effect.");
fScintFiniteRiseTimeCmd->SetParameterName("FiniteRiseTime", false);
fScintFiniteRiseTimeCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintStackPhotons1Cmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setStackPhotons", this);
fScintStackPhotons1Cmd->SetGuidance("Set default whether or not to stack secondary Scintillation photons");
fScintStackPhotons1Cmd->SetGuidance("Note this command is used to set the default value,");
fScintStackPhotons1Cmd->SetGuidance("if process is not active command will not have effect.");
fScintStackPhotons1Cmd->SetGuidance("DEPRECATED: use /process/optical/scintillation/setStackPhotons instead.");
fScintStackPhotons1Cmd->SetParameterName("ScintillationStackPhotons", true);
fScintStackPhotons1Cmd->AvailableForStates(G4State_PreInit);
fScintStackPhotonsCmd = new G4UIcmdWithABool("/process/optical/scintillation/setStackPhotons", this);
fScintStackPhotonsCmd->SetGuidance("Set default whether or not to stack secondary Scintillation photons");
fScintStackPhotonsCmd->SetGuidance("Note this command is used to set the default value,");
fScintStackPhotonsCmd->SetGuidance("if process is not active command will not have effect.");
fScintStackPhotonsCmd->SetParameterName("ScintillationStackPhotons", true);
fScintStackPhotonsCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintTrackSecondariesFirstCmd = new G4UIcmdWithABool("/process/optical/scintillation/setTrackSecondariesFirst", this);
fScintTrackSecondariesFirstCmd->SetGuidance("Whether to track scintillation secondaries before primary.");
fScintTrackSecondariesFirstCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fScintVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/scintillation/verbose", this);
fScintVerbosityCmd->SetGuidance("Verbosity for scintillation process.");
fScintVerbosityCmd->SetParameterName("verbosity", true);
fScintVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fScintVerbosityCmd->AvailableForStates(G4State_Idle);
// WLS //////////////////////////////////
fWLSTimeProfile1Cmd = new G4UIcmdWithAString("/process/optical/defaults/wls/setTimeProfile", this);
fWLSTimeProfile1Cmd->SetGuidance("Set the WLS time profile (delta or exponential)");
fWLSTimeProfile1Cmd->SetGuidance("DEPRECATED: use /process/optical/wls/setTimeProfile instead.");
fWLSTimeProfile1Cmd->SetParameterName("WLSTimeProfile", false);
fWLSTimeProfile1Cmd->SetCandidates("delta exponential");
fWLSTimeProfile1Cmd->AvailableForStates(G4State_PreInit);
fWLSTimeProfileCmd = new G4UIcmdWithAString("/process/optical/wls/setTimeProfile", this);
fWLSTimeProfileCmd->SetGuidance("Set the WLS time profile (delta or exponential)");
fWLSTimeProfileCmd->SetParameterName("WLSTimeProfile", false);
fWLSTimeProfileCmd->SetCandidates("delta exponential");
fWLSTimeProfileCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fWLSVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/wls/verbose", this);
fWLSVerbosityCmd->SetGuidance("Verbosity for WLS process.");
fWLSVerbosityCmd->SetParameterName("verbosity", true);
fWLSVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fWLSVerbosityCmd->AvailableForStates(G4State_Idle);
// boundary //////////////////////////////////////
fBoundaryInvokeSD1Cmd = new G4UIcmdWithABool("/process/optical/defaults/boundary/setInvokeSD", this);
fBoundaryInvokeSD1Cmd->SetGuidance("Set option for calling InvokeSD in G4OpBoundaryProcess");
fBoundaryInvokeSD1Cmd->SetGuidance("DEPRECATED: use /process/optical/boundary/setInvokeSD instead.");
fBoundaryInvokeSD1Cmd->SetParameterName("InvokeSD", false);
fBoundaryInvokeSD1Cmd->AvailableForStates(G4State_PreInit);
fBoundaryInvokeSDCmd = new G4UIcmdWithABool("/process/optical/boundary/setInvokeSD", this);
fBoundaryInvokeSDCmd->SetGuidance("Set option for calling InvokeSD in G4OpBoundaryProcess");
fBoundaryInvokeSDCmd->SetParameterName("InvokeSD", false);
fBoundaryInvokeSDCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
fBoundaryVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/boundary/verbose", this);
fBoundaryVerbosityCmd->SetGuidance("Verbosity for boundary process.");
fBoundaryVerbosityCmd->SetParameterName("verbosity", true);
fBoundaryVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fBoundaryVerbosityCmd->AvailableForStates(G4State_Idle);
// the others ////////////////////////////////////
fAbsorptionVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/absorption/verbose", this);
fAbsorptionVerbosityCmd->SetGuidance("Verbosity for absorption process.");
fAbsorptionVerbosityCmd->SetParameterName("verbosity", true);
fAbsorptionVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fAbsorptionVerbosityCmd->AvailableForStates(G4State_Idle);
fRayleighVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/rayleigh/verbose", this);
fRayleighVerbosityCmd->SetGuidance("Verbosity for Rayleigh process.");
fRayleighVerbosityCmd->SetParameterName("verbosity", true);
fRayleighVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fRayleighVerbosityCmd->AvailableForStates(G4State_Idle);
fMieVerbosityCmd = new G4UIcmdWithAnInteger("/process/optical/mie/verbose", this);
fMieVerbosityCmd->SetGuidance("Verbosity for Mie process.");
fMieVerbosityCmd->SetParameterName("verbosity", true);
fMieVerbosityCmd->SetRange("verbosity >= 0 && verbosity <= 2");
fMieVerbosityCmd->AvailableForStates(G4State_Idle);
}
G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
{
// Destructor
delete fDir;
delete fDir2;
delete fActivateProcessCmd;
delete fSetOpProcessVerboseCmd;
delete fSetCerenkovMaxPhotonsCmd;
delete fSetCerenkovMaxBetaChangeCmd;
delete fSetCerenkovStackPhotonsCmd;
delete fSetScintillationYieldFactorCmd;
delete fSetScintillationByParticleTypeCmd;
delete fSetScintillationTrackInfoCmd;
delete fSetScintillationStackPhotonsCmd;
delete fSetWLSTimeProfileCmd;
delete fSetTrackSecondariesFirstCmd;
delete fSetFiniteRiseTimeCmd;
delete fSetInvokeSDCmd;
delete fVerboseCmd;
delete fCerenkovMaxPhotonsCmd;
delete fCerenkovMaxPhotons1Cmd;
delete fCerenkovMaxBetaChangeCmd;
delete fCerenkovMaxBetaChange1Cmd;
delete fCerenkovStackPhotonsCmd;
delete fCerenkovStackPhotons1Cmd;
delete fCerenkovTrackSecondariesFirstCmd;
delete fCerenkovVerbosityCmd;
delete fScintYieldFactorCmd;
delete fScintYieldFactor1Cmd;
delete fScintByParticleTypeCmd;
delete fScintByParticleType1Cmd;
delete fScintTrackInfoCmd;
delete fScintTrackInfo1Cmd;
delete fScintStackPhotonsCmd;
delete fScintStackPhotons1Cmd;
delete fScintExcitationRatioCmd;
delete fScintVerbosityCmd;
delete fScintFiniteRiseTimeCmd;
delete fScintFiniteRiseTime1Cmd;
delete fScintTrackSecondariesFirstCmd;
delete fWLSTimeProfileCmd;
delete fWLSTimeProfile1Cmd;
delete fWLSVerbosityCmd;
delete fAbsorptionVerbosityCmd;
delete fRayleighVerbosityCmd;
delete fMieVerbosityCmd;
delete fBoundaryVerbosityCmd;
delete fTrackSecondariesFirstCmd;
delete fBoundaryInvokeSDCmd;
delete fBoundaryInvokeSD1Cmd;
}
#include <iostream>
void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
G4String newValue)
{
@@ -248,7 +439,7 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
G4bool value = G4UIcommand::ConvertToBool(flag);
fOpticalPhysics->Configure(fSelectedProcessIndex,value);
}
else if (command == fSetTrackSecondariesFirstCmd )
else if (command == fTrackSecondariesFirstCmd )
{
std::istringstream is(newValue.data());
G4String pn;
@@ -276,54 +467,137 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
G4bool value = G4UIcommand::ConvertToBool(flag);
fOpticalPhysics->SetTrackSecondariesFirst(fSelectedProcessIndex,value);
}
else if (command == fSetOpProcessVerboseCmd) {
fOpticalPhysics->SetVerboseLevel(fSetOpProcessVerboseCmd->GetNewIntValue(newValue));
else if (command == fVerboseCmd) {
fOpticalPhysics->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValue));
}
else if (command == fSetCerenkovMaxPhotonsCmd) {
fOpticalPhysics
->SetMaxNumPhotonsPerStep(
fSetCerenkovMaxPhotonsCmd->GetNewIntValue(newValue));
else if (command == fCerenkovMaxPhotons1Cmd) {
fOpticalPhysics->SetMaxNumPhotonsPerStep(
fCerenkovMaxPhotons1Cmd->GetNewIntValue(newValue));
Deprecated();
}
else if (command == fSetCerenkovMaxBetaChangeCmd) {
fOpticalPhysics
->SetMaxBetaChangePerStep(
fSetCerenkovMaxBetaChangeCmd->GetNewDoubleValue(newValue));
else if (command == fCerenkovMaxPhotonsCmd) {
fOpticalPhysics->SetMaxNumPhotonsPerStep(
fCerenkovMaxPhotonsCmd->GetNewIntValue(newValue));
}
else if (command == fSetCerenkovStackPhotonsCmd) {
fOpticalPhysics
->SetCerenkovStackPhotons(
fSetCerenkovStackPhotonsCmd->GetNewBoolValue(newValue));
else if (command == fCerenkovMaxBetaChange1Cmd) {
fOpticalPhysics->SetMaxBetaChangePerStep(
fCerenkovMaxBetaChange1Cmd->GetNewDoubleValue(newValue));
Deprecated();
}
else if (command == fSetScintillationYieldFactorCmd) {
fOpticalPhysics
->SetScintillationYieldFactor(
fSetScintillationYieldFactorCmd->GetNewDoubleValue(newValue));
else if (command == fCerenkovMaxBetaChangeCmd) {
fOpticalPhysics->SetMaxBetaChangePerStep(
fCerenkovMaxBetaChangeCmd->GetNewDoubleValue(newValue));
}
else if (command == fSetScintillationByParticleTypeCmd) {
fOpticalPhysics
->SetScintillationByParticleType(
fSetScintillationByParticleTypeCmd->GetNewBoolValue(newValue));
else if (command == fCerenkovStackPhotons1Cmd) {
fOpticalPhysics->SetCerenkovStackPhotons(
fCerenkovStackPhotons1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fSetScintillationTrackInfoCmd) {
fOpticalPhysics
->SetScintillationTrackInfo(
fSetScintillationTrackInfoCmd->GetNewBoolValue(newValue));
else if (command == fCerenkovStackPhotonsCmd) {
fOpticalPhysics->SetCerenkovStackPhotons(
fCerenkovStackPhotonsCmd->GetNewBoolValue(newValue));
}
else if (command == fSetFiniteRiseTimeCmd) {
fOpticalPhysics
->SetFiniteRiseTime(
fSetFiniteRiseTimeCmd->GetNewBoolValue(newValue));
else if (command == fCerenkovTrackSecondariesFirstCmd) {
fOpticalPhysics->SetCerenkovTrackSecondariesFirst(
fCerenkovTrackSecondariesFirstCmd->GetNewBoolValue(newValue));
}
else if (command == fSetScintillationStackPhotonsCmd) {
fOpticalPhysics
->SetScintillationStackPhotons(
fSetScintillationStackPhotonsCmd->GetNewBoolValue(newValue));
else if (command == fCerenkovVerbosityCmd) {
fOpticalPhysics->SetCerenkovVerbosity(
fCerenkovVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fSetWLSTimeProfileCmd) {
else if (command == fScintYieldFactor1Cmd) {
fOpticalPhysics->SetScintillationYieldFactor(
fScintYieldFactor1Cmd->GetNewDoubleValue(newValue));
Deprecated();
}
else if (command == fScintYieldFactorCmd) {
fOpticalPhysics->SetScintillationYieldFactor(
fScintYieldFactorCmd->GetNewDoubleValue(newValue));
}
else if (command == fScintByParticleType1Cmd) {
fOpticalPhysics->SetScintillationByParticleType(
fScintByParticleType1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fScintByParticleTypeCmd) {
fOpticalPhysics->SetScintillationByParticleType(
fScintByParticleTypeCmd->GetNewBoolValue(newValue));
}
else if (command == fScintTrackInfo1Cmd) {
fOpticalPhysics->SetScintillationTrackInfo(
fScintTrackInfo1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fScintTrackInfoCmd) {
fOpticalPhysics->SetScintillationTrackInfo(
fScintTrackInfoCmd->GetNewBoolValue(newValue));
}
else if (command == fScintFiniteRiseTime1Cmd) {
fOpticalPhysics->SetFiniteRiseTime(
fScintFiniteRiseTime1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fScintFiniteRiseTimeCmd) {
fOpticalPhysics->SetFiniteRiseTime(
fScintFiniteRiseTimeCmd->GetNewBoolValue(newValue));
}
else if (command == fScintStackPhotons1Cmd) {
fOpticalPhysics->SetScintillationStackPhotons(
fScintStackPhotons1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fScintStackPhotonsCmd) {
fOpticalPhysics->SetScintillationStackPhotons(
fScintStackPhotonsCmd->GetNewBoolValue(newValue));
}
else if (command == fScintExcitationRatioCmd) {
fOpticalPhysics->SetScintillationExcitationRatio(
fScintExcitationRatioCmd->GetNewDoubleValue(newValue));
}
else if (command == fScintTrackSecondariesFirstCmd) {
fOpticalPhysics->SetScintillationTrackSecondariesFirst(
fScintTrackSecondariesFirstCmd->GetNewBoolValue(newValue));
}
else if (command == fScintVerbosityCmd) {
fOpticalPhysics->SetScintillationVerbosity(
fScintVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fWLSTimeProfile1Cmd) {
fOpticalPhysics->SetWLSTimeProfile(newValue);
Deprecated();
}
else if (command == fWLSTimeProfileCmd) {
fOpticalPhysics->SetWLSTimeProfile(newValue);
}
else if (command == fSetInvokeSDCmd) {
else if (command == fWLSVerbosityCmd) {
fOpticalPhysics->SetWLSVerbosity(fWLSVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fAbsorptionVerbosityCmd) {
fOpticalPhysics->SetAbsorptionVerbosity(fAbsorptionVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fRayleighVerbosityCmd) {
fOpticalPhysics->SetRayleighVerbosity(fRayleighVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fMieVerbosityCmd) {
fOpticalPhysics->SetMieVerbosity(fMieVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fBoundaryVerbosityCmd) {
fOpticalPhysics->SetBoundaryVerbosity(fBoundaryVerbosityCmd->GetNewIntValue(newValue));
}
else if (command == fBoundaryInvokeSD1Cmd) {
fOpticalPhysics->SetInvokeSD(fBoundaryInvokeSD1Cmd->GetNewBoolValue(newValue));
Deprecated();
}
else if (command == fBoundaryInvokeSDCmd) {
fOpticalPhysics
->SetInvokeSD(fSetInvokeSDCmd->GetNewBoolValue(newValue));
->SetInvokeSD(fBoundaryInvokeSDCmd->GetNewBoolValue(newValue));
}
}
void G4OpticalPhysicsMessenger::Deprecated()
{
G4ExceptionDescription ed;
ed <<" This command has been deprecated and will be removed in the next" << G4endl
<< "major release. Use the same command without /defaults/ instead.";
G4Exception("G4OpticalPhysicsMessenger", "optical001", JustWarning, ed);
}
@@ -13,6 +13,10 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
05-Mar-2019, A. Ribon (phys-ctor-helastic-V10-04-06)
- G4HadronElasticPhysics : for deuteron, triton and alpha, use Glauber-Gribov
elastic cross sections (instead of Gheisha ones, which returns zero).
26-Nov-2018, A. Ribon (phys-ctor-helastic-V10-04-05)
- README : updated this file. No changes to anything else.
@@ -41,10 +41,10 @@
- kaons
- cross section: Glauber-Gribov
- final-state: Gheisha
- hyperons, anti-hyperons, deuteron, triton, alpha
- hyperons, anti-hyperons
- cross section: Gheisha
- final-state: Gheisha
- He3
- deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
- anti_proton, anti_deuteron, anti_triton, anti_He3, anti_alpha
@@ -40,12 +40,6 @@
//
//----------------------------------------------------------------------------
//
// CHIPS for sampling scattering for p and n
// Glauber model for samplimg of high energy pi+- (E > 1GeV)
// LHEP sampling model for the other particle
// BBG cross sections for p, n and pi+-
// LHEP cross sections for other particles
#include "G4HadronElasticPhysics.hh"
#include "G4SystemOfUnits.hh"
@@ -156,10 +150,7 @@ void G4HadronElasticPhysics::ConstructProcess()
pname == "omega-" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "alpha" ||
pname == "deuteron" ||
pname == "triton"
pname == "xi-"
) {
hel = new G4HadronElasticProcess();
@@ -170,7 +161,11 @@ void G4HadronElasticPhysics::ConstructProcess()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "He3") {
} else if(pname == "alpha" ||
pname == "deuteron" ||
pname == "triton" ||
pname == "He3"
) {
hel = new G4HadronElasticProcess();
G4VCrossSectionDataSet* theComponentGGNuclNuclData =
new G4CrossSectionElastic(new G4ComponentGGNuclNuclXsc());
+5
View File
@@ -13,6 +13,11 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
09-April-2019 V.Ivanchenko (phys-lists-V10-04-08)
18-March-2019 V.Ivanchenko
- Shielding, QGSP_BIC_HP, QGSP_BIC_AllHP - cut for proton is set
to zero (problem #2150) and code clean-up
21-November-2018 A. Ribon (phys-lists-V10-04-07)
- Shielding : replaced "putenv" of the environmental variable
G4NEUTRONHP_PRODUCE_FISSION_FRAGMENTS with a call to
+11 -11
View File
@@ -68,33 +68,33 @@ QGSP_BIC::QGSP_BIC(G4int ver)
G4cout << "<<< Geant4 Physics List simulation engine: QGSP_BIC"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(ver);
defaultCutValue = 0.7*CLHEP::mm;
SetVerboseLevel(ver);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics(ver) );
RegisterPhysics( new G4EmStandardPhysics(ver) );
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
RegisterPhysics( new G4DecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysics(ver) );
RegisterPhysics( new G4HadronElasticPhysics(ver) );
// Hadron Physics
this->RegisterPhysics( new G4HadronPhysicsQGSP_BIC(ver));
RegisterPhysics( new G4HadronPhysicsQGSP_BIC(ver));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonElasticPhysics(ver) );
this->RegisterPhysics( new G4IonPhysics(ver));
RegisterPhysics( new G4IonElasticPhysics(ver) );
RegisterPhysics( new G4IonPhysics(ver));
// Neutron tracking cut
this->RegisterPhysics( new G4NeutronTrackingCut(ver));
RegisterPhysics( new G4NeutronTrackingCut(ver));
}
@@ -54,31 +54,32 @@ QGSP_BIC_AllHP::QGSP_BIC_AllHP(G4int ver)
G4cout << "<<< Geant4 Physics List simulation engine: QGSP_BIC_AllHP"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(ver);
defaultCutValue = 0.7*CLHEP::mm;
SetCutValue(0, "proton");
SetVerboseLevel(ver);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics_option4(ver) );
RegisterPhysics( new G4EmStandardPhysics_option4(ver) );
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
this->RegisterPhysics( new G4RadioactiveDecayPhysics(ver) );
RegisterPhysics( new G4DecayPhysics(ver) );
RegisterPhysics( new G4RadioactiveDecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysicsPHP(ver) );
RegisterPhysics( new G4HadronElasticPhysicsPHP(ver) );
// Hadron Physics
this->RegisterPhysics( new G4HadronPhysicsQGSP_BIC_AllHP(ver));
RegisterPhysics( new G4HadronPhysicsQGSP_BIC_AllHP(ver));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonElasticPhysics(ver) );
this->RegisterPhysics( new G4IonPhysicsPHP(ver));
RegisterPhysics( new G4IonElasticPhysics(ver) );
RegisterPhysics( new G4IonPhysicsPHP(ver));
}
+12 -11
View File
@@ -60,31 +60,32 @@ QGSP_BIC_HP::QGSP_BIC_HP(G4int ver)
G4cout << "<<< Geant4 Physics List simulation engine: QGSP_BIC_HP"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(ver);
defaultCutValue = 0.7*CLHEP::mm;
SetCutValue(0, "proton");
SetVerboseLevel(ver);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics_option4(ver) );
RegisterPhysics( new G4EmStandardPhysics_option4(ver) );
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
this->RegisterPhysics( new G4RadioactiveDecayPhysics(ver) );
RegisterPhysics( new G4DecayPhysics(ver) );
RegisterPhysics( new G4RadioactiveDecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysicsHP(ver) );
RegisterPhysics( new G4HadronElasticPhysicsHP(ver) );
// Hadron Physics
this->RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(ver));
RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(ver));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonElasticPhysics(ver) );
this->RegisterPhysics( new G4IonPhysics(ver));
RegisterPhysics( new G4IonElasticPhysics(ver) );
RegisterPhysics( new G4IonPhysics(ver));
}
+14 -16
View File
@@ -45,10 +45,7 @@
//
#include "Shielding.hh"
//#include <iomanip>
#include "globals.hh"
//#include "G4ios.hh"
#include "G4DecayPhysics.hh"
#include "G4RadioactiveDecayPhysics.hh"
@@ -88,11 +85,12 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
"<<< LEND will be used for low energy neutron and gamma projectiles"
<< G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(verbose);
defaultCutValue = 0.7*CLHEP::mm;
SetCutValue(0, "proton");
SetVerboseLevel(verbose);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics(verbose));
RegisterPhysics( new G4EmStandardPhysics(verbose));
// Synchroton Radiation & GN Physics
G4EmExtraPhysics* emExtraPhysics = new G4EmExtraPhysics(verbose);
@@ -100,20 +98,20 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
// Use LEND model for Gamma Nuclear
emExtraPhysics->LENDGammaNuclear(true);
}
this->RegisterPhysics( emExtraPhysics );
RegisterPhysics( emExtraPhysics );
// Decays
this->RegisterPhysics( new G4DecayPhysics(verbose) );
this->RegisterPhysics( new G4RadioactiveDecayPhysics(verbose) );
RegisterPhysics( new G4DecayPhysics(verbose) );
RegisterPhysics( new G4RadioactiveDecayPhysics(verbose) );
// Hadron Elastic scattering
if ( LEN_model == "HP" )
{
this->RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
}
else if ( LEN_model == "LEND" )
{
this->RegisterPhysics( new G4HadronElasticPhysicsLEND(verbose,evaluation));
RegisterPhysics( new G4HadronElasticPhysicsLEND(verbose,evaluation));
G4DataQuestionaire itt(lend);
}
else
@@ -122,7 +120,7 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
G4cout << "\"" << LEN_model
<< "\" is not valid for the low energy neutorn model." <<G4endl;
G4cout << "Neutron HP package will be used." <<G4endl;
this->RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) );
}
G4VPhysicsConstructor* hpc;
@@ -150,7 +148,7 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
// << " is invalid." <<G4endl;
//G4cout << "Will use neutron HP package." <<G4endl;
}
this->RegisterPhysics( hpc );
RegisterPhysics( hpc );
if ( LEN_model == "HP" ) {
//Activate prodcuton of fission fragments in neutronHP
@@ -158,11 +156,11 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
}
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(verbose) );
RegisterPhysics( new G4StoppingPhysics(verbose) );
// Ion Physics
this->RegisterPhysics( new G4IonElasticPhysics(verbose));
this->RegisterPhysics( new G4IonQMDPhysics(verbose));
RegisterPhysics( new G4IonElasticPhysics(verbose));
RegisterPhysics( new G4IonQMDPhysics(verbose));
}
Shielding::~Shielding()