ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4LowEPPolarizedComptonModel.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4LowEPPolarizedComptonModel.hh
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 
69 
70 #ifndef G4LowEPPolarizedComptonModel_h
71 #define G4LowEPPolarizedComptonModel_h 1
72 
73 #include "G4VEmModel.hh"
74 #include "G4LPhysicsFreeVector.hh"
75 #include <limits>
76 #include "G4Electron.hh"
78 #include "G4LossTableManager.hh"
79 #include "G4VAtomDeexcitation.hh"
80 #include "G4AtomicShell.hh"
81 #include "G4Gamma.hh"
82 #include "G4ShellData.hh"
83 #include "G4DopplerProfile.hh"
84 #include "G4Log.hh"
85 #include "G4Exp.hh"
86 #include "G4ForceCondition.hh"
87 
88 
91 class G4ShellData;
92 class G4DopplerProfile;
93 
95 {
96 
97 public:
98 
100  const G4String& nam = "LowEPComptonModel");
101 
103 
104  virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
105 
106  virtual void InitialiseLocal(const G4ParticleDefinition*,
107  G4VEmModel* masterModel);
108 
109  virtual void InitialiseForElement(const G4ParticleDefinition*, G4int Z);
110 
112  G4double kinEnergy,
113  G4double Z,
114  G4double A=0,
115  G4double cut=0,
117 
118  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
119  const G4MaterialCutsCouple*,
120  const G4DynamicParticle*,
121  G4double tmin,
122  G4double maxEnergy);
123 
124 private:
125 
126  void ReadData(size_t Z, const char* path = 0);
127 
129 
132 
133  G4ThreeVector GetRandomPolarization(G4ThreeVector& direction0); // Random Polarization
134  G4ThreeVector GetPerpendicularPolarization(const G4ThreeVector& direction0, const G4ThreeVector& polarization0) const;
135 
136  G4ThreeVector SetNewPolarization(G4double LowEPPCepsilon, G4double sinT2,
137  G4double phi, G4double cosTheta);
139 
140  void SystemOfRefChange(G4ThreeVector& direction0, G4ThreeVector& direction1,
141  G4ThreeVector& polarization0, G4ThreeVector& polarization1);
142 
143  void SystemOfRefChangeElect(G4ThreeVector& pdirection, G4ThreeVector& edirection,
144  G4ThreeVector& ppolarization);
145 
146 
150 
151  //G4double lowestEnergy;
152 
155 
158 
159  static G4int maxZ;
161 
162  static const G4double ScatFuncFitParam[101][9];
163 
164 };
165 
166 //****************************************************************************
167 
168 #endif