51 crossSectionHandler(0), shellCrossSectionHandler(0)
53 lowEnergyLimit = 10 *
eV;
54 highEnergyLimit = 100 *
GeV;
73 fAtomDeexcitation = 0;
74 fDeexcitationActive =
false;
76 if (verboseLevel > 1) {
77 G4cout <<
"Livermore Polarized PhotoElectric is constructed " <<
G4endl
79 << lowEnergyLimit /
keV <<
" keV - "
80 << highEnergyLimit /
GeV <<
" GeV"
89 delete crossSectionHandler;
90 delete shellCrossSectionHandler;
100 if (verboseLevel > 3) {
101 G4cout <<
"Calling G4LivermorePolarizedPhotoElectricModel::Initialise()" <<
G4endl;
103 if (crossSectionHandler)
105 crossSectionHandler->
Clear();
106 delete crossSectionHandler;
109 if (shellCrossSectionHandler)
111 shellCrossSectionHandler->
Clear();
112 delete shellCrossSectionHandler;
118 crossSectionHandler->
Clear();
119 G4String crossSectionFile =
"phot/pe-cs-";
120 crossSectionHandler->
LoadData(crossSectionFile);
123 shellCrossSectionHandler->
Clear();
124 G4String shellCrossSectionFile =
"phot/pe-ss-cs-";
125 shellCrossSectionHandler->
LoadShellData(shellCrossSectionFile);
130 if(fAtomDeexcitation) {
131 fDeexcitationActive = fAtomDeexcitation->
IsFluoActive();
133 if (verboseLevel > 1) {
134 G4cout <<
"Livermore Polarized PhotoElectric model is initialized "
153 if (verboseLevel > 3) {
154 G4cout <<
"G4LivermorePolarizedPhotoElectricModel::ComputeCrossSectionPerAtom()"
156 G4cout <<
" E(keV)= " << GammaEnergy/
keV <<
" Z= " << Z
157 <<
" CrossSection(barn)= "
166 std::vector<G4DynamicParticle*>* fvect,
172 if (verboseLevel > 3) {
173 G4cout <<
"Calling SampleSecondaries() of G4LivermorePolarizedPhotoElectricModel"
185 if (photonEnergy <= lowEnergyLimit)
204 if(fDeexcitationActive) {
210 if(
G4int(shellIndex) > nshells) { shellIndex =
std::max(0, nshells); }
217 if(photonEnergy < bindingEnergy) {
240 fvect->push_back(electron);
243 if(fDeexcitationActive) {
246 size_t nbefore = fvect->size();
249 size_t nafter = fvect->size();
250 if(nafter > nbefore) {
251 for (
size_t j=nbefore; j<nafter; ++j) {
252 edep -= ((*fvect)[j])->GetKineticEnergy();
G4double LowEnergyLimit() const
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
static G4LossTableManager * Instance()
G4int GetNbOfAtomicShells() const
G4bool IsFluoActive() const
G4double GetKineticEnergy() const
G4double HighEnergyLimit() const
G4int SelectRandomShell(G4int Z, G4double e) const
G4VEmAngularDistribution * GetAngularDistribution()
G4double BindingEnergy() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
G4double FindValue(G4int Z, G4double e) const
G4ParticleChangeForGamma * fParticleChange
G4LivermorePolarizedPhotoElectricModel(const G4String &nam="LivermorePolarizedPhotoElectric")
G4GLOB_DLL std::ostream G4cout
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0, G4double cut=0, G4double emax=DBL_MAX)
void LoadShellData(const G4String &dataFile)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetAngularDistribution(G4VEmAngularDistribution *)
virtual ~G4LivermorePolarizedPhotoElectricModel()
void LoadData(const G4String &dataFile)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
static G4Electron * Electron()
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4VAtomDeexcitation * AtomDeexcitation()
G4double GetAtomicShell(G4int index) const
void ProposeTrackStatus(G4TrackStatus status)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
void SetDeexcitationFlag(G4bool val)
G4double bindingEnergy(G4int A, G4int Z)
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
const G4Material * GetMaterial() const