19#include "BDSException.hh"
20#include "BDSPhysicsCherenkov.hh"
22#include "G4AutoDelete.hh"
23#include "G4Cerenkov.hh"
25#include "G4LeptonConstructor.hh"
26#include "G4OpticalPhoton.hh"
27#include "G4ParticleDefinition.hh"
28#include "G4PhysicsListHelper.hh"
29#include "G4Version.hh"
32BDSPhysicsCherenkov::BDSPhysicsCherenkov(G4int maxPhotonsPerStepIn,
33 G4double maxBetaChangePerStepIn):
34 G4VPhysicsConstructor(
"BDSPhysicsCherenkov"),
35 maxPhotonsPerStep(maxPhotonsPerStepIn),
36 maxBetaChangePerStep(maxBetaChangePerStepIn)
38 if (maxBetaChangePerStep > 100.0)
39 {
throw BDSException(__METHOD_NAME__,
"the option 'maxBetaChangePerStep' must be less than 100 %");}
40 if (maxBetaChangePerStep < 0)
41 {
throw BDSException(__METHOD_NAME__,
"the option 'maxBetaChangePerStep' must be >= 0 %");}
44BDSPhysicsCherenkov::~BDSPhysicsCherenkov()
47void BDSPhysicsCherenkov::ConstructParticle()
49 G4LeptonConstructor::ConstructParticle();
51 G4OpticalPhoton::OpticalPhotonDefinition();
54void BDSPhysicsCherenkov::ConstructProcess()
59 G4Cerenkov* cherenkov =
new G4Cerenkov();
60 G4AutoDelete::Register(cherenkov);
63 cherenkov->SetTrackSecondariesFirst(
true);
66 if (maxPhotonsPerStep > -1)
67 {cherenkov->SetMaxNumPhotonsPerStep(maxPhotonsPerStep);}
68 cherenkov->SetMaxBetaChangePerStep(maxBetaChangePerStep);
70 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
72#if G4VERSION_NUMBER > 1029
73 auto aParticleIterator = GetParticleIterator();
75 aParticleIterator->reset();
76 while( (*aParticleIterator)() )
78 G4ParticleDefinition* particle = aParticleIterator->value();
80 if (cherenkov->IsApplicable(*particle))
81 {ph->RegisterProcess(cherenkov, particle);}
General exception with possible name of object and message.
G4bool Activated() const
Get whether this instance has been activated.
void SetActivated()
Flag this instance as activated for later querying.