File indexing completed on 2025-01-31 09:22:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 #ifndef G4RDLOWENERGYPOLARIZEDCOMPTON_H
0053 #define G4RDLOWENERGYPOLARIZEDCOMPTON_H 1
0054
0055 #include "globals.hh"
0056 #include "G4VDiscreteProcess.hh"
0057
0058
0059
0060 #include "G4RDShellData.hh"
0061 #include "G4RDDopplerProfile.hh"
0062
0063
0064 class G4Track;
0065 class G4Step;
0066 class G4ParticleDefinition;
0067 class G4VParticleChange;
0068 class G4RDVEMDataSet;
0069 class G4RDVCrossSectionHandler;
0070 class G4RDVRangeTest;
0071
0072 class G4LowEnergyPolarizedCompton : public G4VDiscreteProcess
0073 {
0074 public:
0075
0076 G4LowEnergyPolarizedCompton(const G4String& processName = "polarLowEnCompt");
0077
0078 ~G4LowEnergyPolarizedCompton();
0079
0080 G4bool IsApplicable(const G4ParticleDefinition& definition);
0081
0082 void BuildPhysicsTable(const G4ParticleDefinition& photon);
0083 G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
0084
0085
0086
0087 G4double DumpMeanFreePath(const G4Track& aTrack,
0088 G4double previousStepSize,
0089 G4ForceCondition* condition)
0090 { return GetMeanFreePath(aTrack, previousStepSize, condition); }
0091
0092
0093 protected:
0094
0095 G4double GetMeanFreePath(const G4Track& aTrack,
0096 G4double previousStepSize,
0097 G4ForceCondition* condition);
0098 private:
0099
0100
0101
0102 G4LowEnergyPolarizedCompton& operator=(const G4LowEnergyPolarizedCompton&
0103 right);
0104 G4LowEnergyPolarizedCompton(const G4LowEnergyPolarizedCompton& );
0105
0106 G4double lowEnergyLimit;
0107 G4double highEnergyLimit;
0108
0109 G4RDVEMDataSet* meanFreePathTable;
0110 G4RDVEMDataSet* scatterFunctionData;
0111
0112 G4RDVCrossSectionHandler* crossSectionHandler;
0113 G4RDVRangeTest* rangeTest;
0114
0115 const G4double intrinsicLowEnergyLimit;
0116 const G4double intrinsicHighEnergyLimit;
0117
0118
0119
0120 G4ThreeVector GetRandomPolarization(G4ThreeVector& direction0);
0121 G4ThreeVector GetPerpendicularPolarization(const G4ThreeVector& direction0, const G4ThreeVector& polarization0) const;
0122
0123 G4ThreeVector SetPerpendicularVector(G4ThreeVector& a);
0124 G4ThreeVector SetNewPolarization(G4double epsilon, G4double sinSqrTheta,
0125 G4double phi, G4double cosTheta);
0126 G4double SetPhi(G4double, G4double);
0127
0128 void SystemOfRefChange(G4ThreeVector& direction0, G4ThreeVector& direction1,
0129 G4ThreeVector& polarization0, G4ThreeVector& polarization1);
0130
0131
0132
0133 G4RDShellData shellData;
0134 G4RDDopplerProfile profileData;
0135
0136
0137 };
0138
0139 #endif
0140
0141
0142
0143
0144
0145
0146
0147
0148