Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4LowEPPolarizedComptonModel.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25// ********************************************************************
26// *********************************************************************
27// | |
28// | G4LowEPPolarizedComptonModel-- Geant4 Monash University |
29// | polarised low energy Compton scattering model. |
30// | J. M. C. Brown, Monash University, Australia |
31// | |
32// | |
33// *********************************************************************
34// | |
35// | The following is a Geant4 class to simulate the process of |
36// | bound electron Compton scattering. General code structure is |
37// | based on G4LowEnergyCompton.cc and |
38// | G4LivermorePolarizedComptonModel.cc. |
39// | Algorithms for photon energy, and ejected Compton electron |
40// | direction taken from: |
41// | |
42// | J. M. C. Brown, M. R. Dimmock, J. E. Gillam and D. M. Paganin, |
43// | "A low energy bound atomic electron Compton scattering model |
44// | for Geant4", NIMB, Vol. 338, 77-88, 2014. |
45// | |
46// | The author acknowledges the work of the Geant4 collaboration |
47// | in developing the following algorithms that have been employed |
48// | or adapeted for the present software: |
49// | |
50// | # sampling of photon scattering angle, |
51// | # target element selection in composite materials, |
52// | # target shell selection in element, |
53// | # and sampling of bound electron momentum from Compton profiles. |
54// | |
55// *********************************************************************
56// | |
57// | History: |
58// | -------- |
59// | |
60// | Jan. 2015 JMCB - 1st Version based on G4LowEPComptonModel |
61// | Feb. 2016 JMCB - Geant4 10.2 FPE fix for bug 1676 |
62// | Nov. 2016 JMCB - Polarisation tracking fix in collaboration |
63// | of Dr. Merlin Reynaard Kole, |
64// | University of Geneva |
65// | |
66// *********************************************************************
67
68#ifndef G4LowEPPolarizedComptonModel_h
69#define G4LowEPPolarizedComptonModel_h 1
70
71#include "G4VEmModel.hh"
73#include <limits>
74#include "G4Electron.hh"
76#include "G4LossTableManager.hh"
78#include "G4AtomicShell.hh"
79#include "G4Gamma.hh"
80#include "G4ShellData.hh"
81#include "G4DopplerProfile.hh"
82#include "G4Log.hh"
83#include "G4Exp.hh"
84#include "G4ForceCondition.hh"
85
88class G4ShellData;
90
92{
93public:
94 explicit G4LowEPPolarizedComptonModel(const G4ParticleDefinition* p = nullptr,
95 const G4String& nam = "LowEPComptonModel");
97
98 void Initialise(const G4ParticleDefinition*, const G4DataVector&) override;
99
101 G4VEmModel* masterModel) override;
102
103 void InitialiseForElement(const G4ParticleDefinition*, G4int Z) override;
104
106 G4double kinEnergy,
107 G4double Z,
108 G4double A=0,
109 G4double cut=0,
110 G4double emax=DBL_MAX ) override;
111
112 void SampleSecondaries(std::vector<G4DynamicParticle*>*,
114 const G4DynamicParticle*,
115 G4double tmin,
116 G4double maxEnergy) override;
117
120
121private:
122 void ReadData(size_t Z, const char* path = 0);
123
124 G4double ComputeScatteringFunction(G4double x, G4int Z);
125 G4ThreeVector GetRandomPolarization(G4ThreeVector& direction0); // Random Polarization
126 G4ThreeVector GetPerpendicularPolarization(const G4ThreeVector& direction0, const G4ThreeVector& polarization0) const;
127 G4ThreeVector SetNewPolarization(G4double LowEPPCepsilon, G4double sinT2,
128 G4double phi, G4double cosTheta);
129 G4double SetPhi(G4double, G4double);
130
131 void SystemOfRefChange(G4ThreeVector& direction0, G4ThreeVector& direction1,
132 G4ThreeVector& polarization0, G4ThreeVector& polarization1);
133
134 void SystemOfRefChangeElect(G4ThreeVector& pdirection, G4ThreeVector& edirection,
135 G4ThreeVector& ppolarization);
136
137 G4ThreeVector SetPerpendicularVector(G4ThreeVector& a);
138
139 G4ParticleChangeForGamma* fParticleChange;
140 G4VAtomDeexcitation* fAtomDeexcitation;
141
142 static G4ShellData* shellData;
143 static G4DopplerProfile* profileData;
144
145 static const G4int maxZ = 99;
146 static G4PhysicsFreeVector* data[100];
147 static const G4double ScatFuncFitParam[101][9];
148
149 G4int verboseLevel;
150 G4bool isInitialised;
151};
152
153//****************************************************************************
154
155#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4LowEPPolarizedComptonModel & operator=(const G4LowEPPolarizedComptonModel &right)=delete
G4LowEPPolarizedComptonModel(const G4LowEPPolarizedComptonModel &)=delete
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0, G4double cut=0, G4double emax=DBL_MAX) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
void InitialiseForElement(const G4ParticleDefinition *, G4int Z) override
#define DBL_MAX
Definition: templates.hh:62